mirror of
https://github.com/YTVanced/VancedManager
synced 2025-01-05 15:01:01 +00:00
ux improvements
This commit is contained in:
parent
9906ea9d0d
commit
6429f32660
9 changed files with 152 additions and 169 deletions
|
@ -1,48 +0,0 @@
|
|||
package com.vanced.manager.core.fragments
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.os.Bundle
|
||||
import android.view.MotionEvent
|
||||
import android.view.View
|
||||
import android.widget.Toast
|
||||
import androidx.preference.PreferenceManager
|
||||
import com.vanced.manager.core.base.BaseFragment
|
||||
|
||||
open class About : BaseFragment() {
|
||||
|
||||
private var count = 0
|
||||
private var startMillSec: Long = 0
|
||||
|
||||
@SuppressLint("ClickableViewAccessibility")
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
view.setOnTouchListener { _, event: MotionEvent ->
|
||||
|
||||
val eventAction = event.action
|
||||
if (eventAction == MotionEvent.ACTION_UP) {
|
||||
val time = System.currentTimeMillis()
|
||||
if (startMillSec == 0L || time - startMillSec > 3000) {
|
||||
startMillSec = time
|
||||
count = 1
|
||||
} else {
|
||||
count++
|
||||
}
|
||||
|
||||
if (count == 5) {
|
||||
val prefs = PreferenceManager.getDefaultSharedPreferences(requireContext())
|
||||
val devSettings = prefs.getBoolean("devSettings", false)
|
||||
if (!devSettings) {
|
||||
Toast.makeText(requireContext(), "Dev options unlocked!", Toast.LENGTH_SHORT).show()
|
||||
prefs.edit().putBoolean("devSettings", true).apply()
|
||||
} else
|
||||
Toast.makeText(requireContext(), "Dev options already unlocked", Toast.LENGTH_SHORT).show()
|
||||
|
||||
}
|
||||
return@setOnTouchListener true
|
||||
}
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,71 +0,0 @@
|
|||
package com.vanced.manager.core.fragments
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.util.Log
|
||||
import android.view.View
|
||||
import android.widget.Toast
|
||||
import androidx.navigation.findNavController
|
||||
import androidx.preference.PreferenceManager.getDefaultSharedPreferences
|
||||
import com.topjohnwu.superuser.Shell
|
||||
import com.vanced.manager.R
|
||||
import com.vanced.manager.core.base.BaseFragment
|
||||
import com.vanced.manager.core.downloader.MicrogDownloadService
|
||||
import com.vanced.manager.core.downloader.VancedDownloadService
|
||||
import com.vanced.manager.ui.MainActivity
|
||||
import com.vanced.manager.utils.PackageHelper.uninstallApk
|
||||
|
||||
open class Home : BaseFragment(), View.OnClickListener {
|
||||
|
||||
override fun onClick(v: View?) {
|
||||
val prefs = activity?.getSharedPreferences("installPrefs", Context.MODE_PRIVATE)
|
||||
val variant = getDefaultSharedPreferences(activity).getString("vanced_variant", "nonroot")
|
||||
val vancedPkgName =
|
||||
if (variant == "root") {
|
||||
"com.google.android.youtube"
|
||||
} else {
|
||||
"com.vanced.android.youtube"
|
||||
}
|
||||
|
||||
when (v?.id) {
|
||||
R.id.vanced_installbtn -> {
|
||||
if (prefs?.getBoolean("valuesModified", false)!!) {
|
||||
activity?.startService(
|
||||
Intent(
|
||||
activity,
|
||||
VancedDownloadService::class.java
|
||||
)
|
||||
)
|
||||
} else {
|
||||
view?.findNavController()?.navigate(R.id.toInstallThemeFragment)
|
||||
}
|
||||
|
||||
}
|
||||
R.id.microg_installbtn -> {
|
||||
activity?.startService(Intent(activity, MicrogDownloadService::class.java))
|
||||
}
|
||||
R.id.microg_uninstallbtn -> activity?.let { uninstallApk("com.mgoogle.android.gms", it) }
|
||||
R.id.vanced_uninstallbtn -> activity?.let { uninstallApk(vancedPkgName, it) }
|
||||
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)
|
||||
Toast.makeText(activity, activity?.getString(R.string.root_not_granted), Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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")
|
||||
}
|
||||
|
||||
}
|
|
@ -1,11 +1,15 @@
|
|||
package com.vanced.manager.ui.fragments
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.MotionEvent
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.Toast
|
||||
import androidx.databinding.DataBindingUtil
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.preference.PreferenceManager
|
||||
import com.vanced.manager.R
|
||||
import com.vanced.manager.core.fragments.About
|
||||
import com.vanced.manager.databinding.FragmentAboutBinding
|
||||
|
@ -14,6 +18,8 @@ import com.vanced.manager.ui.viewmodels.AboutViewModel
|
|||
class AboutFragment : About() {
|
||||
|
||||
private lateinit var binding: FragmentAboutBinding
|
||||
private var count = 0
|
||||
private var startMillSec: Long = 0
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater, container: ViewGroup?,
|
||||
|
@ -24,11 +30,39 @@ class AboutFragment : About() {
|
|||
return binding.root
|
||||
}
|
||||
|
||||
|
||||
@SuppressLint("ClickableViewAccessibility")
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
val viewModel: AboutViewModel by viewModels()
|
||||
binding.viewModel = viewModel
|
||||
}
|
||||
|
||||
view.setOnTouchListener { _, event: MotionEvent ->
|
||||
|
||||
val eventAction = event.action
|
||||
if (eventAction == MotionEvent.ACTION_UP) {
|
||||
val time = System.currentTimeMillis()
|
||||
if (startMillSec == 0L || time - startMillSec > 3000) {
|
||||
startMillSec = time
|
||||
count = 1
|
||||
} else {
|
||||
count++
|
||||
}
|
||||
|
||||
if (count == 5) {
|
||||
val prefs = PreferenceManager.getDefaultSharedPreferences(requireContext())
|
||||
val devSettings = prefs.getBoolean("devSettings", false)
|
||||
if (!devSettings) {
|
||||
Toast.makeText(requireContext(), "Dev options unlocked!", Toast.LENGTH_SHORT).show()
|
||||
prefs.edit().putBoolean("devSettings", true).apply()
|
||||
} else
|
||||
Toast.makeText(requireContext(), "Dev options already unlocked", Toast.LENGTH_SHORT).show()
|
||||
|
||||
}
|
||||
return@setOnTouchListener true
|
||||
}
|
||||
false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,17 +7,24 @@ import android.view.*
|
|||
import android.view.animation.AccelerateDecelerateInterpolator
|
||||
import android.widget.Toast
|
||||
import androidx.databinding.DataBindingUtil
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager
|
||||
import androidx.navigation.findNavController
|
||||
import androidx.preference.PreferenceManager.getDefaultSharedPreferences
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import com.google.android.material.tabs.TabLayoutMediator
|
||||
import com.topjohnwu.superuser.Shell
|
||||
import com.vanced.manager.R
|
||||
import com.vanced.manager.adapter.*
|
||||
import com.vanced.manager.core.fragments.Home
|
||||
import com.vanced.manager.core.downloader.MicrogDownloadService
|
||||
import com.vanced.manager.core.downloader.VancedDownloadService
|
||||
import com.vanced.manager.databinding.FragmentHomeBinding
|
||||
import com.vanced.manager.ui.MainActivity
|
||||
import com.vanced.manager.ui.viewmodels.HomeViewModel
|
||||
import com.vanced.manager.utils.PackageHelper
|
||||
|
||||
class HomeFragment : Home(), View.OnClickListener {
|
||||
class HomeFragment : Fragment(), View.OnClickListener {
|
||||
|
||||
private lateinit var binding: FragmentHomeBinding
|
||||
private var isExpanded: Boolean = false
|
||||
|
@ -64,21 +71,15 @@ class HomeFragment : Home(), View.OnClickListener {
|
|||
}
|
||||
|
||||
binding.includeVancedLayout.vancedCard.setOnLongClickListener {
|
||||
val clip = requireActivity().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
|
||||
clip.setPrimaryClip(ClipData.newPlainText("vanced", viewModel.vancedInstalledVersion.get()))
|
||||
versionToast("Vanced")
|
||||
versionToast("Vanced", viewModel.vancedInstalledVersion.get())
|
||||
true
|
||||
}
|
||||
|
||||
binding.includeMicrogLayout.microgCard.setOnLongClickListener {
|
||||
val clip = requireActivity().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
|
||||
clip.setPrimaryClip(ClipData.newPlainText("microg", viewModel.microgInstalledVersion.get()))
|
||||
versionToast("MicroG")
|
||||
versionToast("MicroG", viewModel.microgInstalledVersion.get())
|
||||
true
|
||||
}
|
||||
|
||||
viewModel.fetchData()
|
||||
|
||||
with(binding.includeChangelogsLayout) {
|
||||
viewpager.adapter = if (variantPref == "root") SectionPageRootAdapter(this@HomeFragment) else SectionPageAdapter(this@HomeFragment)
|
||||
TabLayoutMediator(tablayout, viewpager) { tab, position ->
|
||||
|
@ -96,9 +97,79 @@ class HomeFragment : Home(), View.OnClickListener {
|
|||
|
||||
}.attach()
|
||||
}
|
||||
viewModel.fetchData()
|
||||
}
|
||||
|
||||
private fun versionToast(name: String) {
|
||||
override fun onClick(v: View?) {
|
||||
val prefs = activity?.getSharedPreferences("installPrefs", Context.MODE_PRIVATE)
|
||||
val variant = getDefaultSharedPreferences(activity).getString("vanced_variant", "nonroot")
|
||||
val vancedPkgName =
|
||||
if (variant == "root") {
|
||||
"com.google.android.youtube"
|
||||
} else {
|
||||
"com.vanced.android.youtube"
|
||||
}
|
||||
|
||||
when (v?.id) {
|
||||
R.id.vanced_installbtn -> {
|
||||
if (viewModel.microgInstalled.get()!!) {
|
||||
if (prefs?.getBoolean("valuesModified", false)!!) {
|
||||
activity?.startService(
|
||||
Intent(
|
||||
activity,
|
||||
VancedDownloadService::class.java
|
||||
)
|
||||
)
|
||||
} else {
|
||||
view?.findNavController()?.navigate(R.id.toInstallThemeFragment)
|
||||
}
|
||||
} else
|
||||
Snackbar.make(binding.homeRefresh, R.string.no_microg, Snackbar.LENGTH_LONG)
|
||||
.setAction(R.string.install) {
|
||||
activity?.startService(Intent(activity, MicrogDownloadService::class.java))
|
||||
}
|
||||
|
||||
}
|
||||
R.id.microg_installbtn -> {
|
||||
activity?.startService(Intent(activity, MicrogDownloadService::class.java))
|
||||
}
|
||||
R.id.microg_uninstallbtn -> activity?.let {
|
||||
PackageHelper.uninstallApk(
|
||||
"com.mgoogle.android.gms",
|
||||
it
|
||||
)
|
||||
}
|
||||
R.id.vanced_uninstallbtn -> activity?.let {
|
||||
PackageHelper.uninstallApk(
|
||||
vancedPkgName,
|
||||
it
|
||||
)
|
||||
}
|
||||
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)
|
||||
Toast.makeText(activity, activity?.getString(R.string.root_not_granted), Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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")
|
||||
}
|
||||
|
||||
private fun versionToast(name: String, app: String?) {
|
||||
val clip = requireActivity().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
|
||||
clip.setPrimaryClip(ClipData.newPlainText(name, app))
|
||||
Toast.makeText(activity, getString(R.string.version_toast, name), Toast.LENGTH_LONG).show()
|
||||
}
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ import com.google.android.material.checkbox.MaterialCheckBox
|
|||
import com.vanced.manager.R
|
||||
import com.vanced.manager.core.downloader.VancedDownloadService
|
||||
import com.vanced.manager.utils.InternetTools.baseUrl
|
||||
import com.vanced.manager.utils.JsonHelper.getJson
|
||||
import com.vanced.manager.utils.InternetTools.getArrayFromJson
|
||||
import kotlinx.coroutines.*
|
||||
import java.util.*
|
||||
|
||||
|
@ -37,14 +37,13 @@ class VancedLanguageSelectionFragment : Fragment() {
|
|||
@ExperimentalStdlibApi
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
langs = runBlocking { getJson("${PreferenceManager.getDefaultSharedPreferences(activity).getString("install_url", baseUrl)}/vanced.json").array<String>("langs")?.value } ?: mutableListOf("null")
|
||||
if (!langs.contains("null"))
|
||||
loadBoxes(view.findViewById(R.id.lang_button_ll))
|
||||
langs = runBlocking { getArrayFromJson("${PreferenceManager.getDefaultSharedPreferences(activity).getString("install_url", baseUrl)}/vanced.json", "langs") }
|
||||
loadBoxes(view.findViewById(R.id.lang_button_ll))
|
||||
|
||||
view.findViewById<MaterialButton>(R.id.vanced_install_finish).setOnClickListener {
|
||||
val chosenLangs = mutableListOf("en")
|
||||
if (!langs.contains("null"))
|
||||
for (lang in langs) {
|
||||
langs.forEach { lang ->
|
||||
if (view.findViewWithTag<MaterialCheckBox>(lang).isChecked) {
|
||||
chosenLangs.add(lang)
|
||||
}
|
||||
|
@ -57,15 +56,17 @@ class VancedLanguageSelectionFragment : Fragment() {
|
|||
|
||||
@ExperimentalStdlibApi
|
||||
private fun loadBoxes(ll: LinearLayout) = CoroutineScope(Dispatchers.Main).launch {
|
||||
for (lang in langs) {
|
||||
val loc = Locale(lang)
|
||||
val box: MaterialCheckBox = MaterialCheckBox(activity).apply {
|
||||
tag = lang
|
||||
text = loc.getDisplayLanguage(loc).capitalize(Locale.ROOT)
|
||||
textSize = 18F
|
||||
typeface = activity?.let { ResourcesCompat.getFont(it, R.font.exo_bold) }
|
||||
if (!langs.contains("null")) {
|
||||
langs.forEach { lang ->
|
||||
val loc = Locale(lang)
|
||||
val box: MaterialCheckBox = MaterialCheckBox(activity).apply {
|
||||
tag = lang
|
||||
text = loc.getDisplayLanguage(loc).capitalize(Locale.ROOT)
|
||||
textSize = 18F
|
||||
typeface = activity?.let { ResourcesCompat.getFont(it, R.font.exo_bold) }
|
||||
}
|
||||
ll.addView(box, MATCH_PARENT, WRAP_CONTENT)
|
||||
}
|
||||
ll.addView(box, MATCH_PARENT, WRAP_CONTENT)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@ import android.widget.RadioButton
|
|||
import android.widget.RadioGroup
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.navigation.findNavController
|
||||
import com.google.android.material.radiobutton.MaterialRadioButton
|
||||
import com.vanced.manager.R
|
||||
|
||||
class VancedThemeSelectionFragment : Fragment() {
|
||||
|
@ -28,10 +29,10 @@ class VancedThemeSelectionFragment : Fragment() {
|
|||
val nextButton = view.findViewById<Button>(R.id.vanced_next_to_variant)
|
||||
val themeGroup = view.findViewById<RadioGroup>(R.id.theme_radiogroup)
|
||||
val prefs = activity?.getSharedPreferences("installPrefs", Context.MODE_PRIVATE)
|
||||
themeGroup.findViewWithTag<MaterialRadioButton>(prefs?.getString("theme", "dark")).isChecked = true
|
||||
|
||||
nextButton.setOnClickListener {
|
||||
val selectedThemeId = themeGroup.checkedRadioButtonId
|
||||
val selectedButton = view.findViewById<RadioButton>(selectedThemeId)
|
||||
val selectedButton = view.findViewById<MaterialRadioButton>(themeGroup.checkedRadioButtonId)
|
||||
prefs?.edit()?.putString("theme", selectedButton.tag.toString())?.apply()
|
||||
view.findNavController().navigate(R.id.toInstallLanguageFragment)
|
||||
}
|
||||
|
|
|
@ -78,18 +78,8 @@ open class HomeViewModel(application: Application): AndroidViewModel(application
|
|||
microgInstallButtonTxt.set(compareInt(microgInstalledVersionCode.get()!!, microgVersionCode.get()!!, getApplication()))
|
||||
microgInstallButtonIcon.set(compareIntDrawable(microgInstalledVersionCode.get()!!, microgVersionCode.get()!!, getApplication()))
|
||||
shouldBeDisabled.set(nonrootModeSelected && !microgInstalled.get()!!)
|
||||
vancedInstallButtonIcon.set(
|
||||
if (shouldBeDisabled.get()!!) {
|
||||
null
|
||||
} else
|
||||
compareIntDrawable(vancedInstalledVersionCode.get()!!, vancedVersionCode.get()!!, getApplication())
|
||||
)
|
||||
vancedInstallButtonTxt.set(
|
||||
if (shouldBeDisabled.get()!!) {
|
||||
getApplication<Application>().getString(R.string.no_microg)
|
||||
} else
|
||||
compareInt(vancedInstalledVersionCode.get()!!, vancedVersionCode.get()!!, getApplication())
|
||||
)
|
||||
vancedInstallButtonIcon.set(compareIntDrawable(vancedInstalledVersionCode.get()!!, vancedVersionCode.get()!!, getApplication()))
|
||||
vancedInstallButtonTxt.set(compareInt(vancedInstalledVersionCode.get()!!, vancedVersionCode.get()!!, getApplication()))
|
||||
fetching.set(false)
|
||||
}
|
||||
}
|
||||
|
@ -172,9 +162,4 @@ open class HomeViewModel(application: Application): AndroidViewModel(application
|
|||
}
|
||||
}
|
||||
|
||||
init {
|
||||
//expanded.set(false)
|
||||
//fetchData()
|
||||
}
|
||||
|
||||
}
|
|
@ -36,6 +36,15 @@ object InternetTools {
|
|||
}
|
||||
}
|
||||
|
||||
suspend fun getArrayFromJson(url: String, array: String): MutableList<String> {
|
||||
return try {
|
||||
JsonHelper.getJson(url).array<String>(array)?.value ?: mutableListOf("null")
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Error: ", e)
|
||||
mutableListOf("null")
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun getJsonInt(file: String, obj: String, context: Context): Int {
|
||||
val installUrl = getDefaultSharedPreferences(context).getString("install_url", baseUrl)
|
||||
return try {
|
||||
|
@ -57,10 +66,13 @@ object InternetTools {
|
|||
}
|
||||
|
||||
suspend fun isUpdateAvailable(): Boolean {
|
||||
val result = JsonHelper.getJson("https://x1nto.github.io/VancedFiles/manager.json")
|
||||
val remoteVersion = result.int("versionCode") ?: 0
|
||||
val result = try {
|
||||
JsonHelper.getJson("https://x1nto.github.io/VancedFiles/manager.json").int("versionCode") ?: 0
|
||||
} catch (e: Exception) {
|
||||
0
|
||||
}
|
||||
|
||||
return remoteVersion > BuildConfig.VERSION_CODE
|
||||
return result > BuildConfig.VERSION_CODE
|
||||
}
|
||||
|
||||
const val baseUrl = "https://vanced.app/api/v1"
|
||||
|
|
|
@ -21,11 +21,9 @@
|
|||
<RadioGroup
|
||||
android:id="@+id/theme_radiogroup"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:checkedButton="@id/dark">
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.google.android.material.radiobutton.MaterialRadioButton
|
||||
android:id="@+id/dark"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="18sp"
|
||||
|
|
Loading…
Reference in a new issue