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

151 lines
5.5 KiB
Kotlin
Raw Normal View History

package com.vanced.manager.ui.fragments
2020-03-18 18:10:54 +00:00
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
2020-03-18 18:10:54 +00:00
import android.os.Bundle
import android.view.*
import android.view.animation.AnimationUtils
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
import androidx.preference.PreferenceManager.getDefaultSharedPreferences
2020-08-31 16:12:20 +00:00
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator
import com.topjohnwu.superuser.Shell
import com.vanced.manager.R
import com.vanced.manager.adapter.VariantAdapter
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
import com.vanced.manager.ui.viewmodels.HomeViewModelFactory
2020-10-02 20:30:02 +00:00
import com.vanced.manager.utils.AppUtils.installing
2020-03-18 18:10:54 +00:00
open class HomeFragment : Fragment() {
2020-03-18 18:10:54 +00:00
2020-06-04 07:35:26 +00:00
private lateinit var binding: FragmentHomeBinding
private val viewModel: HomeViewModel by viewModels {
HomeViewModelFactory(requireActivity())
}
private val localBroadcastManager by lazy { LocalBroadcastManager.getInstance(requireActivity()) }
private val tabListener = object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab) {
if (tab.position == 1 && !Shell.rootAccess()) {
Toast.makeText(requireActivity(), getString(R.string.root_not_granted), Toast.LENGTH_SHORT).show()
}
val variant = if (tab.position == 1) "root" else "nonroot"
getDefaultSharedPreferences(requireActivity()).edit().putString("vanced_variant", variant).apply()
}
override fun onTabUnselected(tab: TabLayout.Tab) {
return
}
override fun onTabReselected(tab: TabLayout.Tab) {
return
}
}
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-06-04 07:35:26 +00:00
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_home, container, false)
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) {
mainViewpager.adapter = VariantAdapter(viewModel, requireActivity())
TabLayoutMediator(mainTablayout, mainViewpager) { tab, position ->
val variants = arrayOf("nonroot", "root")
tab.text = variants[position]
2020-07-16 21:05:31 +00:00
}.attach()
mainTablayout.getTabAt(if (getDefaultSharedPreferences(requireActivity()).getString("vanced_variant", "nonroot") == "root") 1 else 0)?.select()
2020-07-16 21:05:31 +00:00
}
2020-10-02 20:30:02 +00:00
installing.observe(viewLifecycleOwner, { value ->
if (value) hideTab() else showTab()
})
2020-07-03 17:52:15 +00:00
2020-03-18 18:10:54 +00:00
}
2020-09-04 19:14:43 +00:00
override fun onPause() {
super.onPause()
localBroadcastManager.unregisterReceiver(broadcastReceiver)
binding.mainTablayout.removeOnTabSelectedListener(tabListener)
}
2020-08-04 13:49:46 +00:00
override fun onResume() {
super.onResume()
registerReceivers()
binding.mainTablayout.addOnTabSelectedListener(tabListener)
2020-08-04 13:49:46 +00:00
}
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 hideTab() {
val tabHide = AnimationUtils.loadAnimation(requireActivity(), R.anim.tablayout_exit)
with(binding) {
if (mainTablayout.visibility != View.GONE) {
mainTablayout.startAnimation(tabHide)
mainTablayout.visibility = View.GONE
}
mainViewpager.isUserInputEnabled = false
}
}
private fun showTab() {
val tabShow = AnimationUtils.loadAnimation(requireActivity(), R.anim.tablayout_enter)
with(binding) {
if (mainTablayout.visibility != View.VISIBLE) {
mainTablayout.visibility = View.VISIBLE
mainTablayout.startAnimation(tabShow)
}
mainViewpager.isUserInputEnabled = true
}
}
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
}