0
0
Fork 0
mirror of https://github.com/YTVanced/VancedManager synced 2025-01-05 15:01:01 +00:00

ux improvements

This commit is contained in:
X1nto 2020-08-04 14:02:36 +04:00
parent 9906ea9d0d
commit 6429f32660
9 changed files with 152 additions and 169 deletions

View file

@ -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
}
}
}

View file

@ -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")
}
}

View file

@ -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
}
}
}

View file

@ -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()
}

View file

@ -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)
}
}

View file

@ -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)
}

View file

@ -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()
}
}

View file

@ -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"

View file

@ -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"