2020-04-09 17:31:13 +00:00
|
|
|
package com.vanced.manager.ui.fragments
|
2020-03-18 18:10:54 +00:00
|
|
|
|
2020-09-21 07:53:42 +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
|
2020-04-19 17:21:40 +00:00
|
|
|
import android.view.*
|
2020-10-31 19:45:39 +00:00
|
|
|
import androidx.core.content.res.ResourcesCompat
|
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
|
2020-06-08 11:23:45 +00:00
|
|
|
import androidx.localbroadcastmanager.content.LocalBroadcastManager
|
2020-09-15 23:52:36 +00:00
|
|
|
import androidx.navigation.findNavController
|
2020-10-31 19:45:39 +00:00
|
|
|
import androidx.preference.PreferenceManager
|
|
|
|
import androidx.recyclerview.widget.LinearLayoutManager
|
|
|
|
import com.github.florent37.viewtooltip.ViewTooltip
|
|
|
|
import com.google.android.flexbox.FlexboxLayoutManager
|
|
|
|
import com.google.android.flexbox.JustifyContent
|
2020-04-09 17:31:13 +00:00
|
|
|
import com.vanced.manager.R
|
2020-10-31 19:45:39 +00:00
|
|
|
import com.vanced.manager.adapter.AppListAdapter
|
|
|
|
import com.vanced.manager.adapter.LinkAdapter
|
|
|
|
import com.vanced.manager.adapter.SponsorAdapter
|
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-29 10:47:38 +00:00
|
|
|
import com.vanced.manager.ui.viewmodels.HomeViewModelFactory
|
2020-03-18 18:10:54 +00:00
|
|
|
|
2020-09-21 07:53:42 +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
|
2020-09-29 10:47:38 +00:00
|
|
|
private val viewModel: HomeViewModel by viewModels {
|
|
|
|
HomeViewModelFactory(requireActivity())
|
|
|
|
}
|
2020-07-04 13:44:28 +00:00
|
|
|
private val localBroadcastManager by lazy { LocalBroadcastManager.getInstance(requireActivity()) }
|
2020-10-31 19:45:39 +00:00
|
|
|
private val prefs by lazy { PreferenceManager.getDefaultSharedPreferences(requireActivity()) }
|
|
|
|
private lateinit var tooltip: ViewTooltip
|
|
|
|
|
|
|
|
// 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-09-21 07:53:42 +00:00
|
|
|
|
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? {
|
2020-07-04 13:44:28 +00:00
|
|
|
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
|
2020-03-19 19:55:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
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()
|
2020-10-31 19:45:39 +00:00
|
|
|
if (content != null){
|
2020-09-15 23:52:36 +00:00
|
|
|
view.findNavController().navigate(content)
|
|
|
|
}
|
|
|
|
})
|
2020-09-19 07:07:32 +00:00
|
|
|
|
2020-08-26 11:09:34 +00:00
|
|
|
with(binding) {
|
2020-10-31 19:45:39 +00:00
|
|
|
viewModel = this@HomeFragment.viewModel
|
|
|
|
|
|
|
|
tooltip = ViewTooltip
|
|
|
|
.on(recyclerAppList)
|
|
|
|
.position(ViewTooltip.Position.TOP)
|
|
|
|
.autoHide(false, 0)
|
|
|
|
.color(ResourcesCompat.getColor(requireActivity().resources, R.color.Twitter, null))
|
|
|
|
.withShadow(false)
|
|
|
|
.corner(25)
|
|
|
|
.onHide {
|
|
|
|
prefs.edit().putBoolean("show_changelog_tooltip", false).apply()
|
|
|
|
}
|
|
|
|
.text(requireActivity().getString(R.string.app_changelog_tooltip))
|
|
|
|
|
|
|
|
if (prefs.getBoolean("show_changelog_tooltip", true)) {
|
|
|
|
tooltip.show()
|
|
|
|
}
|
|
|
|
|
|
|
|
recyclerAppList.apply {
|
|
|
|
layoutManager = LinearLayoutManager(requireActivity())
|
|
|
|
adapter = AppListAdapter(requireActivity(), this@HomeFragment.viewModel, tooltip)
|
|
|
|
setHasFixedSize(true)
|
|
|
|
}
|
|
|
|
|
|
|
|
recyclerSponsors.apply {
|
|
|
|
val lm = FlexboxLayoutManager(requireActivity())
|
|
|
|
lm.justifyContent = JustifyContent.SPACE_EVENLY
|
|
|
|
layoutManager = lm
|
|
|
|
setHasFixedSize(true)
|
|
|
|
adapter = SponsorAdapter(requireActivity(), this@HomeFragment.viewModel)
|
|
|
|
}
|
|
|
|
|
|
|
|
recyclerLinks.apply {
|
|
|
|
val lm = FlexboxLayoutManager(requireActivity())
|
|
|
|
lm.justifyContent = JustifyContent.SPACE_EVENLY
|
|
|
|
layoutManager = lm
|
|
|
|
setHasFixedSize(true)
|
|
|
|
adapter = LinkAdapter(requireActivity(), this@HomeFragment.viewModel)
|
|
|
|
}
|
2020-07-16 21:05:31 +00:00
|
|
|
}
|
2020-08-07 19:24:35 +00:00
|
|
|
|
2020-10-31 19:45:39 +00:00
|
|
|
// with(binding) {
|
|
|
|
// mainViewpager.adapter = VariantAdapter(viewModel, requireActivity())
|
|
|
|
// TabLayoutMediator(mainTablayout, mainViewpager) { tab, position ->
|
|
|
|
// val variants = arrayOf("nonroot", "root")
|
|
|
|
// tab.text = variants[position]
|
|
|
|
// }.attach()
|
|
|
|
// mainTablayout.getTabAt(if (getDefaultSharedPreferences(requireActivity()).getString("vanced_variant", "nonroot") == "root") 1 else 0)?.select()
|
|
|
|
// }
|
|
|
|
|
|
|
|
// 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
|
|
|
|
2020-06-08 11:23:45 +00:00
|
|
|
override fun onPause() {
|
|
|
|
super.onPause()
|
2020-09-21 07:53:42 +00:00
|
|
|
localBroadcastManager.unregisterReceiver(broadcastReceiver)
|
2020-10-31 19:45:39 +00:00
|
|
|
tooltip.close()
|
|
|
|
//binding.mainTablayout.removeOnTabSelectedListener(tabListener)
|
2020-06-08 11:23:45 +00:00
|
|
|
}
|
|
|
|
|
2020-08-04 13:49:46 +00:00
|
|
|
override fun onResume() {
|
|
|
|
super.onResume()
|
|
|
|
registerReceivers()
|
2020-10-31 19:45:39 +00:00
|
|
|
// binding.mainTablayout.addOnTabSelectedListener(tabListener)
|
2020-08-04 13:49:46 +00:00
|
|
|
}
|
|
|
|
|
2020-06-08 11:23:45 +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()
|
2020-06-08 11:23:45 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-10-31 19:45:39 +00:00
|
|
|
// 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
|
|
|
|
// }
|
|
|
|
// }
|
2020-09-21 07:53:42 +00:00
|
|
|
|
2020-06-08 11:23:45 +00:00
|
|
|
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)
|
2020-09-17 19:25:44 +00:00
|
|
|
intentFilter.addAction(REFRESH_HOME)
|
2020-07-04 13:44:28 +00:00
|
|
|
localBroadcastManager.registerReceiver(broadcastReceiver, intentFilter)
|
2020-06-08 11:23:45 +00:00
|
|
|
}
|
|
|
|
|
2020-04-19 17:21:40 +00:00
|
|
|
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
|
|
|
|
inflater.inflate(R.menu.toolbar_menu, menu)
|
2020-07-04 13:44:28 +00:00
|
|
|
super.onCreateOptionsMenu(menu, inflater)
|
2020-04-19 17:21:40 +00:00
|
|
|
}
|
|
|
|
|
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-06-08 11:23:45 +00:00
|
|
|
}
|
2020-03-18 18:10:54 +00:00
|
|
|
}
|
2020-04-03 16:40:54 +00:00
|
|
|
|