VancedManager/app/src/main/java/com/vanced/manager/ui/fragments/HomeFragment.kt

150 lines
5.6 KiB
Kotlin
Raw Normal View History

package com.vanced.manager.ui.fragments
2020-03-18 18:10:54 +00:00
import android.content.*
2020-03-18 18:10:54 +00:00
import android.os.Bundle
import android.view.*
2020-06-28 14:47:51 +00:00
import android.view.animation.AccelerateDecelerateInterpolator
import android.widget.Toast
2020-06-04 07:35:26 +00:00
import androidx.databinding.DataBindingUtil
2020-08-04 10:02:36 +00:00
import androidx.fragment.app.Fragment
2020-06-04 08:39:04 +00:00
import androidx.fragment.app.viewModels
import androidx.localbroadcastmanager.content.LocalBroadcastManager
2020-09-15 23:52:36 +00:00
import androidx.navigation.findNavController
2020-08-31 16:12:20 +00:00
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator
import com.vanced.manager.R
2020-09-19 13:56:24 +00:00
import com.vanced.manager.adapter.ChangelogAdapter
2020-06-04 07:35:26 +00:00
import com.vanced.manager.databinding.FragmentHomeBinding
2020-08-05 11:52:09 +00:00
import com.vanced.manager.ui.dialogs.DialogContainer.installAlertBuilder
2020-06-04 08:39:04 +00:00
import com.vanced.manager.ui.viewmodels.HomeViewModel
2020-09-19 13:56:24 +00:00
import com.vanced.manager.ui.viewmodels.HomeViewModelFactory
2020-03-18 18:10:54 +00:00
2020-09-04 19:14:43 +00:00
open class HomeFragment : Fragment(), View.OnClickListener {
2020-03-18 18:10:54 +00:00
2020-06-04 07:35:26 +00:00
private lateinit var binding: FragmentHomeBinding
2020-09-04 19:14:43 +00:00
private lateinit var variant: String
2020-06-25 14:22:33 +00:00
private var isExpanded: Boolean = false
2020-09-19 13:56:24 +00:00
private val viewModel: HomeViewModel by viewModels {
HomeViewModelFactory(requireActivity().application, variant)
}
private val localBroadcastManager by lazy { LocalBroadcastManager.getInstance(requireActivity()) }
2020-03-18 18:10:54 +00:00
override fun onCreateView(
2020-07-16 21:05:31 +00:00
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
2020-03-18 18:10:54 +00:00
): View? {
requireActivity().title = getString(R.string.title_home)
2020-04-22 09:41:18 +00:00
setHasOptionsMenu(true)
2020-09-19 08:21:48 +00:00
variant = if (requireActivity().findViewById<TabLayout>(R.id.main_tablayout).selectedTabPosition == 1) "root" else "nonroot"
2020-06-04 07:35:26 +00:00
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_home, container, false)
2020-09-04 19:14:43 +00:00
binding.viewModel = viewModel
2020-06-04 07:35:26 +00:00
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
2020-04-22 18:00:00 +00:00
super.onViewCreated(view, savedInstanceState)
2020-09-20 14:41:28 +00:00
viewModel.navigateDestination.observe(viewLifecycleOwner, {
2020-09-15 23:52:36 +00:00
val content = it.getContentIfNotHandled()
if(content != null){
view.findNavController().navigate(content)
}
})
2020-09-19 07:07:32 +00:00
with(binding) {
includeChangelogsLayout.changelogButton.setOnClickListener(this@HomeFragment)
2020-08-31 16:12:20 +00:00
includeVancedLayout.vancedCard.setOnLongClickListener {
2020-09-17 10:13:16 +00:00
versionToast("Vanced", viewModel?.vanced?.get()?.installedVersionName?.get()!!)
2020-08-31 16:12:20 +00:00
true
}
2020-09-04 19:14:43 +00:00
includeMusicLayout.musicCard.setOnLongClickListener {
2020-09-17 10:13:16 +00:00
versionToast("Music", viewModel?.music?.get()?.installedVersionName?.get()!!)
2020-09-04 19:14:43 +00:00
true
}
2020-08-31 16:12:20 +00:00
includeMicrogLayout.microgCard.setOnLongClickListener {
2020-09-17 10:13:16 +00:00
versionToast("MicroG", viewModel?.microg?.get()?.installedVersionName?.get()!!)
2020-08-31 16:12:20 +00:00
true
}
}
2020-07-16 21:05:31 +00:00
with(binding.includeChangelogsLayout) {
2020-09-19 13:56:24 +00:00
viewpager.adapter = ChangelogAdapter(variant, this@HomeFragment.viewModel)
val nonrootTitles = arrayOf("Vanced", "Music", "microG", "Manager")
val rootTitles = arrayOf("Vanced", "Manager")
2020-09-04 19:14:43 +00:00
2020-07-16 21:05:31 +00:00
TabLayoutMediator(tablayout, viewpager) { tab, position ->
2020-08-31 16:12:20 +00:00
tab.text =
2020-09-19 13:56:24 +00:00
if (variant == "root") {
rootTitles[position]
} else {
nonrootTitles[position]
2020-09-04 19:14:43 +00:00
}
2020-07-16 21:05:31 +00:00
}.attach()
}
2020-08-04 10:02:36 +00:00
}
override fun onClick(v: View?) {
when (v?.id) {
R.id.changelog_button -> cardExpandCollapse()
2020-08-04 10:02:36 +00:00
}
}
private fun versionToast(name: String, app: String?) {
val clip = requireActivity().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
clip.setPrimaryClip(ClipData.newPlainText(name, app))
2020-07-03 17:52:15 +00:00
Toast.makeText(activity, getString(R.string.version_toast, name), Toast.LENGTH_LONG).show()
}
2020-06-25 14:22:33 +00:00
private fun cardExpandCollapse() {
with(binding.includeChangelogsLayout) {
2020-07-23 13:35:04 +00:00
viewpager.visibility = if (isExpanded) View.GONE else View.VISIBLE
tablayout.visibility = if (isExpanded) View.GONE else View.VISIBLE
changelogButton.animate().apply {
rotation(if (isExpanded) 0F else 180F)
interpolator = AccelerateDecelerateInterpolator()
}
isExpanded = !isExpanded
2020-06-25 14:22:33 +00:00
}
2020-03-18 18:10:54 +00:00
}
2020-09-04 19:14:43 +00:00
override fun onPause() {
localBroadcastManager.unregisterReceiver(broadcastReceiver)
super.onPause()
}
2020-08-04 13:49:46 +00:00
override fun onResume() {
super.onResume()
registerReceivers()
}
private val broadcastReceiver: BroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
when (intent.action) {
2020-09-20 14:41:28 +00:00
INSTALL_FAILED -> installAlertBuilder(intent.getStringExtra("errorMsg") as String, requireActivity())
2020-09-17 10:13:16 +00:00
REFRESH_HOME -> viewModel.fetchData()
}
}
}
private fun registerReceivers() {
2020-06-23 13:47:20 +00:00
val intentFilter = IntentFilter()
2020-08-06 18:37:43 +00:00
intentFilter.addAction(INSTALL_FAILED)
intentFilter.addAction(REFRESH_HOME)
localBroadcastManager.registerReceiver(broadcastReceiver, intentFilter)
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.toolbar_menu, menu)
super.onCreateOptionsMenu(menu, inflater)
}
2020-09-06 10:33:04 +00:00
companion object {
2020-08-05 11:52:09 +00:00
const val INSTALL_FAILED = "install_failed"
2020-09-15 18:06:29 +00:00
const val REFRESH_HOME = "refresh_home"
}
2020-03-18 18:10:54 +00:00
}