2020-04-09 17:31:13 +00:00
|
|
|
package com.vanced.manager.ui.fragments
|
2020-03-18 18:10:54 +00:00
|
|
|
|
2020-07-03 17:46:09 +00:00
|
|
|
import android.content.*
|
2020-03-18 18:10:54 +00:00
|
|
|
import android.os.Bundle
|
2020-07-23 09:34:10 +00:00
|
|
|
import android.util.Log
|
2020-04-19 17:21:40 +00:00
|
|
|
import android.view.*
|
2020-06-28 14:47:51 +00:00
|
|
|
import android.view.animation.AccelerateDecelerateInterpolator
|
2020-07-03 17:46:09 +00:00
|
|
|
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
|
2020-06-08 11:23:45 +00:00
|
|
|
import androidx.localbroadcastmanager.content.LocalBroadcastManager
|
2020-08-04 10:02:36 +00:00
|
|
|
import androidx.navigation.findNavController
|
2020-05-30 13:49:03 +00:00
|
|
|
import androidx.preference.PreferenceManager.getDefaultSharedPreferences
|
2020-08-04 10:02:36 +00:00
|
|
|
import com.google.android.material.snackbar.Snackbar
|
2020-04-10 12:45:09 +00:00
|
|
|
import com.google.android.material.tabs.TabLayoutMediator
|
2020-08-04 10:02:36 +00:00
|
|
|
import com.topjohnwu.superuser.Shell
|
2020-04-09 17:31:13 +00:00
|
|
|
import com.vanced.manager.R
|
2020-07-04 16:06:32 +00:00
|
|
|
import com.vanced.manager.adapter.*
|
2020-08-04 10:02:36 +00:00
|
|
|
import com.vanced.manager.core.downloader.MicrogDownloadService
|
|
|
|
import com.vanced.manager.core.downloader.VancedDownloadService
|
2020-06-04 07:35:26 +00:00
|
|
|
import com.vanced.manager.databinding.FragmentHomeBinding
|
2020-08-04 10:02:36 +00:00
|
|
|
import com.vanced.manager.ui.MainActivity
|
2020-08-05 11:52:09 +00:00
|
|
|
import com.vanced.manager.ui.dialogs.DialogContainer.installAlertBuilder
|
|
|
|
import com.vanced.manager.ui.dialogs.DialogContainer.launchVanced
|
2020-06-04 08:39:04 +00:00
|
|
|
import com.vanced.manager.ui.viewmodels.HomeViewModel
|
2020-08-05 11:52:09 +00:00
|
|
|
import com.vanced.manager.utils.AppUtils.isInstallationRunning
|
2020-08-04 10:02:36 +00:00
|
|
|
import com.vanced.manager.utils.PackageHelper
|
2020-03-18 18:10:54 +00:00
|
|
|
|
2020-08-04 10:02:36 +00:00
|
|
|
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-06-25 14:22:33 +00:00
|
|
|
private var isExpanded: Boolean = false
|
2020-07-04 13:44:28 +00:00
|
|
|
private val viewModel: HomeViewModel by viewModels()
|
|
|
|
private val localBroadcastManager by lazy { LocalBroadcastManager.getInstance(requireActivity()) }
|
2020-04-10 12:45:09 +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-06-04 09:06:02 +00:00
|
|
|
binding.viewModel = viewModel
|
2020-05-24 15:06:20 +00:00
|
|
|
|
2020-08-05 11:52:09 +00:00
|
|
|
val variantPref = getDefaultSharedPreferences(requireActivity()).getString("vanced_variant", "nonroot")
|
2020-04-10 12:45:09 +00:00
|
|
|
|
2020-07-23 09:34:10 +00:00
|
|
|
with(binding) {
|
|
|
|
rootSwitch.setOnClickListener(this@HomeFragment)
|
|
|
|
nonrootSwitch.setOnClickListener(this@HomeFragment)
|
|
|
|
|
|
|
|
includeVancedLayout.vancedInstallbtn.setOnClickListener(this@HomeFragment)
|
|
|
|
includeVancedLayout.vancedUninstallbtn.setOnClickListener(this@HomeFragment)
|
|
|
|
includeMicrogLayout.microgInstallbtn.setOnClickListener(this@HomeFragment)
|
|
|
|
includeMicrogLayout.microgUninstallbtn.setOnClickListener(this@HomeFragment)
|
2020-08-07 16:51:45 +00:00
|
|
|
includeChangelogsLayout.changelogButton.setOnClickListener(this@HomeFragment)
|
2020-06-25 14:22:33 +00:00
|
|
|
}
|
2020-07-03 17:46:09 +00:00
|
|
|
|
2020-07-04 13:44:28 +00:00
|
|
|
binding.includeVancedLayout.vancedCard.setOnLongClickListener {
|
2020-08-04 10:02:36 +00:00
|
|
|
versionToast("Vanced", viewModel.vancedInstalledVersion.get())
|
2020-07-03 17:46:09 +00:00
|
|
|
true
|
|
|
|
}
|
|
|
|
|
2020-07-04 13:44:28 +00:00
|
|
|
binding.includeMicrogLayout.microgCard.setOnLongClickListener {
|
2020-08-04 10:02:36 +00:00
|
|
|
versionToast("MicroG", viewModel.microgInstalledVersion.get())
|
2020-07-03 17:46:09 +00:00
|
|
|
true
|
|
|
|
}
|
2020-07-16 21:05:31 +00:00
|
|
|
|
|
|
|
with(binding.includeChangelogsLayout) {
|
|
|
|
viewpager.adapter = if (variantPref == "root") SectionPageRootAdapter(this@HomeFragment) else SectionPageAdapter(this@HomeFragment)
|
|
|
|
TabLayoutMediator(tablayout, viewpager) { tab, position ->
|
|
|
|
if (variantPref == "root")
|
|
|
|
when (position) {
|
|
|
|
0 -> tab.text = "Vanced"
|
|
|
|
1 -> tab.text = "Manager"
|
|
|
|
}
|
|
|
|
else
|
|
|
|
when (position) {
|
|
|
|
0 -> tab.text = "Vanced"
|
|
|
|
1 -> tab.text = "MicroG"
|
|
|
|
2 -> tab.text = "Manager"
|
|
|
|
}
|
|
|
|
|
|
|
|
}.attach()
|
|
|
|
}
|
2020-08-04 10:02:36 +00:00
|
|
|
viewModel.fetchData()
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onClick(v: View?) {
|
2020-08-05 11:52:09 +00:00
|
|
|
val prefs = requireActivity().getSharedPreferences("installPrefs", Context.MODE_PRIVATE)
|
|
|
|
val variant = getDefaultSharedPreferences(requireActivity()).getString("vanced_variant", "nonroot")
|
2020-08-04 10:02:36 +00:00
|
|
|
val vancedPkgName =
|
|
|
|
if (variant == "root") {
|
|
|
|
"com.google.android.youtube"
|
|
|
|
} else {
|
|
|
|
"com.vanced.android.youtube"
|
|
|
|
}
|
|
|
|
|
|
|
|
when (v?.id) {
|
|
|
|
R.id.vanced_installbtn -> {
|
2020-08-05 11:52:09 +00:00
|
|
|
if (!isInstallationRunning(requireActivity())) {
|
|
|
|
if (viewModel.microgInstalled.get()!!) {
|
|
|
|
if (prefs?.getBoolean("valuesModified", false)!!) {
|
|
|
|
requireActivity().startService(
|
|
|
|
Intent(
|
|
|
|
requireActivity(),
|
|
|
|
VancedDownloadService::class.java
|
|
|
|
)
|
2020-08-04 10:02:36 +00:00
|
|
|
)
|
2020-08-05 11:52:09 +00:00
|
|
|
} else {
|
|
|
|
view?.findNavController()?.navigate(R.id.toInstallThemeFragment)
|
|
|
|
}
|
|
|
|
} else
|
|
|
|
Snackbar.make(binding.homeRefresh, R.string.no_microg, Snackbar.LENGTH_LONG)
|
|
|
|
.setAction(R.string.install) {
|
|
|
|
requireActivity().startService(
|
|
|
|
Intent(
|
|
|
|
requireActivity(),
|
|
|
|
MicrogDownloadService::class.java
|
|
|
|
)
|
|
|
|
)
|
|
|
|
}.show()
|
2020-08-06 18:06:19 +00:00
|
|
|
} else
|
|
|
|
Toast.makeText(requireActivity(), R.string.installation_wait, Toast.LENGTH_SHORT)
|
2020-08-04 10:02:36 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
R.id.microg_installbtn -> {
|
2020-08-05 11:52:09 +00:00
|
|
|
if (!isInstallationRunning(requireActivity()))
|
|
|
|
requireActivity().startService(Intent(requireActivity(), MicrogDownloadService::class.java))
|
2020-08-06 18:06:19 +00:00
|
|
|
else
|
|
|
|
Toast.makeText(requireActivity(), R.string.installation_wait, Toast.LENGTH_SHORT)
|
2020-08-04 10:02:36 +00:00
|
|
|
}
|
2020-08-05 11:52:09 +00:00
|
|
|
R.id.microg_uninstallbtn -> PackageHelper.uninstallApk("com.mgoogle.android.gms", requireActivity())
|
|
|
|
R.id.vanced_uninstallbtn -> PackageHelper.uninstallApk(vancedPkgName, requireActivity())
|
2020-08-04 10:02:36 +00:00
|
|
|
R.id.nonroot_switch -> writeToVariantPref("nonroot", R.anim.slide_in_left, R.anim.slide_out_right)
|
|
|
|
R.id.root_switch ->
|
|
|
|
if (Shell.rootAccess()) {
|
|
|
|
writeToVariantPref("root", R.anim.slide_in_right, R.anim.slide_out_left)
|
|
|
|
} else {
|
|
|
|
writeToVariantPref("nonroot", R.anim.slide_in_left, R.anim.slide_out_right)
|
2020-08-05 11:52:09 +00:00
|
|
|
Toast.makeText(requireActivity(), activity?.getString(R.string.root_not_granted), Toast.LENGTH_SHORT).show()
|
2020-08-04 10:02:36 +00:00
|
|
|
}
|
2020-08-07 16:51:45 +00:00
|
|
|
R.id.changelog_button -> cardExpandCollapse()
|
2020-08-04 10:02:36 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun writeToVariantPref(variant: String, animIn: Int, animOut: Int) {
|
|
|
|
val prefs = getDefaultSharedPreferences(activity)
|
|
|
|
if (prefs.getString("vanced_variant", "nonroot") != variant) {
|
|
|
|
prefs.edit().putString("vanced_variant", variant).apply()
|
|
|
|
startActivity(Intent(activity, MainActivity::class.java))
|
|
|
|
activity?.overridePendingTransition(animIn, animOut)
|
|
|
|
activity?.finish()
|
|
|
|
} else
|
|
|
|
Log.d("VMVariant", "$variant is already selected")
|
2020-06-25 15:58:23 +00:00
|
|
|
}
|
2020-06-25 14:22:33 +00:00
|
|
|
|
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() {
|
2020-07-04 13:44:28 +00:00
|
|
|
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
|
2020-07-04 13:44:28 +00:00
|
|
|
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-06-08 11:23:45 +00:00
|
|
|
override fun onPause() {
|
2020-07-04 13:44:28 +00:00
|
|
|
localBroadcastManager.unregisterReceiver(broadcastReceiver)
|
2020-06-08 11:23:45 +00:00
|
|
|
super.onPause()
|
|
|
|
}
|
|
|
|
|
2020-08-04 13:49:46 +00:00
|
|
|
override fun onResume() {
|
|
|
|
super.onResume()
|
|
|
|
registerReceivers()
|
|
|
|
}
|
|
|
|
|
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-08-05 11:52:09 +00:00
|
|
|
VANCED_DOWNLOADING -> {
|
|
|
|
with(binding.includeVancedLayout) {
|
|
|
|
vancedDownloading.visibility = View.VISIBLE
|
|
|
|
vancedDownloading.progress = intent.getIntExtra("progress", 0)
|
|
|
|
vancedDownloadingTxt.visibility = View.VISIBLE
|
|
|
|
vancedDownloadingTxt.text = requireActivity().getString(R.string.downloading_file, intent.getStringExtra("file"))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
MICROG_DOWNLOADING -> {
|
|
|
|
with(binding.includeMicrogLayout) {
|
|
|
|
microgDownloading.visibility = View.VISIBLE
|
|
|
|
microgDownloading.progress = intent.getIntExtra("progress", 0)
|
|
|
|
microgDownloadingTxt.visibility = View.VISIBLE
|
|
|
|
microgDownloadingTxt.text = requireActivity().getString(R.string.downloading_file, "microg.apk")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
MICROG_INSTALLING -> {
|
|
|
|
with (binding.includeMicrogLayout) {
|
|
|
|
microgDownloading.visibility = View.GONE
|
|
|
|
microgDownloadingTxt.visibility = View.GONE
|
|
|
|
microgInstalling.visibility = View.VISIBLE
|
|
|
|
}
|
|
|
|
}
|
|
|
|
VANCED_INSTALLING -> {
|
|
|
|
with (binding.includeVancedLayout) {
|
|
|
|
vancedDownloading.visibility = View.GONE
|
|
|
|
vancedDownloadingTxt.visibility = View.GONE
|
|
|
|
vancedInstalling.visibility = View.VISIBLE
|
|
|
|
}
|
|
|
|
}
|
|
|
|
VANCED_INSTALLED -> {
|
|
|
|
binding.includeVancedLayout.vancedInstalling.visibility = View.GONE
|
|
|
|
launchVanced(requireActivity())
|
|
|
|
}
|
|
|
|
MICROG_INSTALLED -> binding.includeMicrogLayout.microgInstalling.visibility = View.GONE
|
2020-08-06 18:37:43 +00:00
|
|
|
INSTALL_FAILED -> {
|
|
|
|
with(binding) {
|
|
|
|
includeMicrogLayout.microgInstalling.visibility = View.GONE
|
|
|
|
includeVancedLayout.vancedInstalling.visibility = View.GONE
|
|
|
|
}
|
|
|
|
installAlertBuilder(intent.getStringExtra("errorMsg") as String, requireActivity())
|
|
|
|
}
|
2020-08-04 13:08:48 +00:00
|
|
|
REFRESH_HOME -> {
|
2020-07-23 09:34:10 +00:00
|
|
|
Log.d("VMRefresh", "Refreshing home page")
|
2020-08-04 17:10:07 +00:00
|
|
|
viewModel.fetchData()
|
2020-07-23 09:34:10 +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-05 11:52:09 +00:00
|
|
|
intentFilter.addAction(VANCED_DOWNLOADING)
|
|
|
|
intentFilter.addAction(MICROG_DOWNLOADING)
|
|
|
|
intentFilter.addAction(VANCED_INSTALLING)
|
|
|
|
intentFilter.addAction(MICROG_INSTALLING)
|
|
|
|
intentFilter.addAction(VANCED_INSTALLED)
|
|
|
|
intentFilter.addAction(MICROG_INSTALLED)
|
2020-07-16 21:05:31 +00:00
|
|
|
intentFilter.addAction(REFRESH_HOME)
|
2020-08-06 18:37:43 +00:00
|
|
|
intentFilter.addAction(INSTALL_FAILED)
|
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-06-08 11:23:45 +00:00
|
|
|
companion object {
|
2020-08-05 11:52:09 +00:00
|
|
|
const val VANCED_DOWNLOADING = "vanced_downloading"
|
|
|
|
const val MICROG_DOWNLOADING = "microg_downloading"
|
|
|
|
const val VANCED_INSTALLING = "vanced_installing"
|
|
|
|
const val MICROG_INSTALLING = "microg_installing"
|
|
|
|
const val VANCED_INSTALLED = "vanced_installed"
|
|
|
|
const val MICROG_INSTALLED = "microg_installed"
|
|
|
|
const val INSTALL_FAILED = "install_failed"
|
2020-07-16 21:05:31 +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
|
|
|
|