some improvements
This commit is contained in:
parent
0d7d19ac2b
commit
6d883e3fd7
|
@ -8,9 +8,11 @@ import com.downloader.PRDownloader
|
||||||
import com.vanced.manager.R
|
import com.vanced.manager.R
|
||||||
import com.vanced.manager.utils.DeviceUtils.getArch
|
import com.vanced.manager.utils.DeviceUtils.getArch
|
||||||
import com.vanced.manager.utils.DownloadHelper.downloadProgress
|
import com.vanced.manager.utils.DownloadHelper.downloadProgress
|
||||||
|
import com.vanced.manager.utils.Extensions.getLatestAppVersion
|
||||||
import com.vanced.manager.utils.InternetTools.baseUrl
|
import com.vanced.manager.utils.InternetTools.baseUrl
|
||||||
import com.vanced.manager.utils.InternetTools.getFileNameFromUrl
|
import com.vanced.manager.utils.InternetTools.getFileNameFromUrl
|
||||||
import com.vanced.manager.utils.InternetTools.music
|
import com.vanced.manager.utils.InternetTools.music
|
||||||
|
import com.vanced.manager.utils.InternetTools.musicVersions
|
||||||
import com.vanced.manager.utils.PackageHelper.install
|
import com.vanced.manager.utils.PackageHelper.install
|
||||||
import com.vanced.manager.utils.PackageHelper.installMusicRoot
|
import com.vanced.manager.utils.PackageHelper.installMusicRoot
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
@ -25,18 +27,20 @@ object MusicDownloader {
|
||||||
|
|
||||||
fun downloadMusic(context: Context) {
|
fun downloadMusic(context: Context) {
|
||||||
val prefs = getDefaultSharedPreferences(context)
|
val prefs = getDefaultSharedPreferences(context)
|
||||||
version = prefs.getString("music_version", music.get()?.string("version"))
|
version = prefs.getString("music_version", "latest")?.getLatestAppVersion(musicVersions.get()?.value ?: listOf(""))
|
||||||
variant = prefs.getString("vanced_variant", "nonroot")
|
variant = prefs.getString("vanced_variant", "nonroot")
|
||||||
baseurl = "${prefs.getString("install_url", baseUrl)}/music/"
|
baseurl = "${prefs.getString("install_url", baseUrl)}/music/v$version"
|
||||||
|
|
||||||
|
downloadApk(context)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun downloadMusic(context: Context, apk: String = "music") {
|
private fun downloadApk(context: Context, apk: String = "music") {
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
val url =
|
val url =
|
||||||
if (apk == "stock")
|
if (apk == "stock")
|
||||||
"$baseurl/stock/v${version}/${getArch()}.apk"
|
"$baseurl/stock/${getArch()}.apk"
|
||||||
else
|
else
|
||||||
"$baseurl/$variant/v${version}.apk"
|
"$baseurl/$variant.apk"
|
||||||
|
|
||||||
downloadProgress.get()?.currentDownload = PRDownloader.download(url, context.getExternalFilesDir("music/$variant")?.path, "music.apk")
|
downloadProgress.get()?.currentDownload = PRDownloader.download(url, context.getExternalFilesDir("music/$variant")?.path, "music.apk")
|
||||||
.build()
|
.build()
|
||||||
|
@ -49,7 +53,7 @@ object MusicDownloader {
|
||||||
.start(object : OnDownloadListener {
|
.start(object : OnDownloadListener {
|
||||||
override fun onDownloadComplete() {
|
override fun onDownloadComplete() {
|
||||||
if (variant == "root" && apk != "stock") {
|
if (variant == "root" && apk != "stock") {
|
||||||
downloadMusic(context, "stock")
|
downloadApk(context, "stock")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,6 @@ package com.vanced.manager.core.downloader
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.os.Build
|
|
||||||
import androidx.preference.PreferenceManager.getDefaultSharedPreferences
|
import androidx.preference.PreferenceManager.getDefaultSharedPreferences
|
||||||
import com.downloader.Error
|
import com.downloader.Error
|
||||||
import com.downloader.OnDownloadListener
|
import com.downloader.OnDownloadListener
|
||||||
|
@ -13,7 +12,7 @@ import com.vanced.manager.R
|
||||||
import com.vanced.manager.utils.AppUtils.vancedRootPkg
|
import com.vanced.manager.utils.AppUtils.vancedRootPkg
|
||||||
import com.vanced.manager.utils.DeviceUtils.getArch
|
import com.vanced.manager.utils.DeviceUtils.getArch
|
||||||
import com.vanced.manager.utils.DownloadHelper.downloadProgress
|
import com.vanced.manager.utils.DownloadHelper.downloadProgress
|
||||||
import com.vanced.manager.utils.Extensions.convertToAppVersions
|
import com.vanced.manager.utils.Extensions.getLatestAppVersion
|
||||||
import com.vanced.manager.utils.InternetTools
|
import com.vanced.manager.utils.InternetTools
|
||||||
import com.vanced.manager.utils.InternetTools.baseUrl
|
import com.vanced.manager.utils.InternetTools.baseUrl
|
||||||
import com.vanced.manager.utils.InternetTools.getFileNameFromUrl
|
import com.vanced.manager.utils.InternetTools.getFileNameFromUrl
|
||||||
|
@ -56,15 +55,15 @@ object VancedDownloader {
|
||||||
private var downloadPath: String? = null
|
private var downloadPath: String? = null
|
||||||
|
|
||||||
fun downloadVanced(context: Context) {
|
fun downloadVanced(context: Context) {
|
||||||
defPrefs = getDefaultSharedPreferences(context)
|
|
||||||
installUrl = defPrefs.getString("install_url", baseUrl)
|
|
||||||
prefs = context.getSharedPreferences("installPrefs", Context.MODE_PRIVATE)
|
|
||||||
variant = defPrefs.getString("vanced_variant", "nonroot")
|
variant = defPrefs.getString("vanced_variant", "nonroot")
|
||||||
downloadPath = context.getExternalFilesDir("vanced/$variant")?.path
|
downloadPath = context.getExternalFilesDir("vanced/$variant")?.path
|
||||||
File(downloadPath.toString()).deleteRecursively()
|
File(downloadPath.toString()).deleteRecursively()
|
||||||
|
defPrefs = getDefaultSharedPreferences(context)
|
||||||
|
installUrl = defPrefs.getString("install_url", baseUrl)
|
||||||
|
prefs = context.getSharedPreferences("installPrefs", Context.MODE_PRIVATE)
|
||||||
lang = prefs.getString("lang", getDefaultVancedLanguages())?.split(", ")?.toMutableList()
|
lang = prefs.getString("lang", getDefaultVancedLanguages())?.split(", ")?.toMutableList()
|
||||||
theme = prefs.getString("theme", "dark")
|
theme = prefs.getString("theme", "dark")
|
||||||
vancedVersion = defPrefs.getString("vanced_version", vancedVersions.get()?.value?.convertToAppVersions()?.get(0)?.value)
|
vancedVersion = defPrefs.getString("vanced_version", "latest")?.getLatestAppVersion(vancedVersions.get()?.value ?: listOf(""))
|
||||||
themePath = "$installUrl/apks/v$vancedVersion/$variant/Theme"
|
themePath = "$installUrl/apks/v$vancedVersion/$variant/Theme"
|
||||||
hashUrl = "apks/v$vancedVersion/$variant/Theme/hash.json"
|
hashUrl = "apks/v$vancedVersion/$variant/Theme/hash.json"
|
||||||
//newInstaller = defPrefs.getBoolean("new_installer", false)
|
//newInstaller = defPrefs.getBoolean("new_installer", false)
|
||||||
|
|
|
@ -41,7 +41,7 @@ class AppInstallerService: Service() {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object{
|
companion object {
|
||||||
const val TAG = "VMInstall"
|
const val TAG = "VMInstall"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,13 +11,12 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
||||||
import com.google.android.material.radiobutton.MaterialRadioButton
|
import com.google.android.material.radiobutton.MaterialRadioButton
|
||||||
import com.vanced.manager.R
|
import com.vanced.manager.R
|
||||||
import com.vanced.manager.databinding.DialogBottomRadioButtonBinding
|
import com.vanced.manager.databinding.DialogBottomRadioButtonBinding
|
||||||
import com.vanced.manager.model.AppVersionsModel
|
import com.vanced.manager.utils.Extensions.getCheckedButtonText
|
||||||
import com.vanced.manager.utils.Extensions.getCheckedButtonTag
|
|
||||||
import com.vanced.manager.utils.Extensions.getDefaultPrefs
|
import com.vanced.manager.utils.Extensions.getDefaultPrefs
|
||||||
import com.vanced.manager.utils.Extensions.show
|
import com.vanced.manager.utils.Extensions.show
|
||||||
|
|
||||||
class AppVersionSelectorDialog(
|
class AppVersionSelectorDialog(
|
||||||
private val versions: Array<AppVersionsModel>,
|
private val versions: List<String>,
|
||||||
private val app: String
|
private val app: String
|
||||||
) : BottomSheetDialogFragment() {
|
) : BottomSheetDialogFragment() {
|
||||||
|
|
||||||
|
@ -36,14 +35,13 @@ class AppVersionSelectorDialog(
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
loadBoxes()
|
loadBoxes()
|
||||||
view.findViewWithTag<MaterialRadioButton>(prefs.getString("${app}_version", versions[0].value)).isChecked = true
|
view.findViewWithTag<MaterialRadioButton>(prefs.getString("${app}_version", "latest")).isChecked = true
|
||||||
binding.dialogTitle.text = requireActivity().getString(R.string.version)
|
binding.dialogTitle.text = requireActivity().getString(R.string.version)
|
||||||
binding.dialogSave.setOnClickListener {
|
binding.dialogSave.setOnClickListener {
|
||||||
prefs.edit {
|
prefs.edit {
|
||||||
putString("${app}_version", binding.dialogRadiogroup.getCheckedButtonTag())
|
putString("${app}_version", binding.dialogRadiogroup.getCheckedButtonText())
|
||||||
}
|
}
|
||||||
dismiss()
|
dismiss()
|
||||||
VancedPreferencesDialog().show(requireActivity())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,8 +49,7 @@ class AppVersionSelectorDialog(
|
||||||
requireActivity().runOnUiThread {
|
requireActivity().runOnUiThread {
|
||||||
for (i in versions.indices) {
|
for (i in versions.indices) {
|
||||||
val rb = MaterialRadioButton(requireActivity()).apply {
|
val rb = MaterialRadioButton(requireActivity()).apply {
|
||||||
text = versions[i].version
|
text = versions[i]
|
||||||
tag = versions[i].value
|
|
||||||
textSize = 18f
|
textSize = 18f
|
||||||
}
|
}
|
||||||
binding.dialogRadiogroup.addView(rb, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
|
binding.dialogRadiogroup.addView(rb, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
|
||||||
|
@ -62,7 +59,10 @@ class AppVersionSelectorDialog(
|
||||||
|
|
||||||
override fun onDismiss(dialog: DialogInterface) {
|
override fun onDismiss(dialog: DialogInterface) {
|
||||||
super.onDismiss(dialog)
|
super.onDismiss(dialog)
|
||||||
VancedPreferencesDialog().show(requireActivity())
|
if (app == "vanced")
|
||||||
|
VancedPreferencesDialog().show(requireActivity())
|
||||||
|
else
|
||||||
|
MusicPreferencesDialog().show(requireActivity())
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -33,7 +33,7 @@ class MusicPreferencesDialog : BottomSheetDialogFragment() {
|
||||||
val musicVersionsConv = musicVersions.get()?.value?.reversed()?.convertToAppVersions()
|
val musicVersionsConv = musicVersions.get()?.value?.reversed()?.convertToAppVersions()
|
||||||
|
|
||||||
binding.musicInstallTitle.text = requireActivity().getString(R.string.app_installation_preferences, requireActivity().getString(R.string.music))
|
binding.musicInstallTitle.text = requireActivity().getString(R.string.app_installation_preferences, requireActivity().getString(R.string.music))
|
||||||
binding.musicVersion.text = requireActivity().getString(R.string.chosen_version, prefs.getString("music_version", musicVersionsConv?.get(0)?.value ?: ""))
|
binding.musicVersion.text = requireActivity().getString(R.string.chosen_version, prefs.getString("music_version", musicVersionsConv?.get(0) ?: ""))
|
||||||
|
|
||||||
binding.openVersionSelector.setOnClickListener {
|
binding.openVersionSelector.setOnClickListener {
|
||||||
dismiss()
|
dismiss()
|
||||||
|
@ -41,6 +41,10 @@ class MusicPreferencesDialog : BottomSheetDialogFragment() {
|
||||||
AppVersionSelectorDialog(musicVersionsConv, "music").show(requireActivity())
|
AppVersionSelectorDialog(musicVersionsConv, "music").show(requireActivity())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
binding.musicInstall.setOnClickListener {
|
||||||
|
dismiss()
|
||||||
|
AppDownloadDialog(requireActivity().getString(R.string.music)).show(requireActivity())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -10,7 +10,6 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
||||||
import com.vanced.manager.R
|
import com.vanced.manager.R
|
||||||
import com.vanced.manager.databinding.DialogVancedPreferencesBinding
|
import com.vanced.manager.databinding.DialogVancedPreferencesBinding
|
||||||
import com.vanced.manager.utils.Extensions.convertToAppTheme
|
import com.vanced.manager.utils.Extensions.convertToAppTheme
|
||||||
import com.vanced.manager.utils.Extensions.convertToAppVersions
|
|
||||||
import com.vanced.manager.utils.Extensions.show
|
import com.vanced.manager.utils.Extensions.show
|
||||||
import com.vanced.manager.utils.InternetTools.vancedVersions
|
import com.vanced.manager.utils.InternetTools.vancedVersions
|
||||||
import com.vanced.manager.utils.LanguageHelper.getDefaultVancedLanguages
|
import com.vanced.manager.utils.LanguageHelper.getDefaultVancedLanguages
|
||||||
|
@ -42,12 +41,12 @@ class VancedPreferencesDialog : BottomSheetDialogFragment() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val vancedVersionsConv = vancedVersions.get()?.value?.reversed()?.convertToAppVersions()
|
val vancedVersionsConv = vancedVersions.get()?.value?.reversed()
|
||||||
|
|
||||||
binding.vancedInstallTitle.text = requireActivity().getString(R.string.app_installation_preferences, requireActivity().getString(R.string.vanced))
|
binding.vancedInstallTitle.text = requireActivity().getString(R.string.app_installation_preferences, requireActivity().getString(R.string.vanced))
|
||||||
|
|
||||||
binding.vancedTheme.text = requireActivity().getString(R.string.chosen_theme, prefs.getString("theme", "dark")?.convertToAppTheme(requireActivity()))
|
binding.vancedTheme.text = requireActivity().getString(R.string.chosen_theme, prefs.getString("theme", "dark")?.convertToAppTheme(requireActivity()))
|
||||||
binding.vancedVersion.text = requireActivity().getString(R.string.chosen_version, prefs.getString("vanced_version", vancedVersionsConv?.get(0)?.value ?: ""))
|
binding.vancedVersion.text = requireActivity().getString(R.string.chosen_version, prefs.getString("vanced_version", "latest"))
|
||||||
binding.vancedLang.text = requireActivity().getString(R.string.chosen_lang, showLang)
|
binding.vancedLang.text = requireActivity().getString(R.string.chosen_lang, showLang)
|
||||||
|
|
||||||
binding.openThemeSelector.setOnClickListener {
|
binding.openThemeSelector.setOnClickListener {
|
||||||
|
@ -69,7 +68,7 @@ class VancedPreferencesDialog : BottomSheetDialogFragment() {
|
||||||
|
|
||||||
binding.vancedInstall.setOnClickListener {
|
binding.vancedInstall.setOnClickListener {
|
||||||
dismiss()
|
dismiss()
|
||||||
AppDownloadDialog(requireActivity().getString(R.string.vanced)).show(requireActivity().supportFragmentManager, "InstallVanced")
|
AppDownloadDialog(requireActivity().getString(R.string.vanced)).show(requireActivity())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,7 +38,6 @@ class VancedThemeSelectorDialog : BottomSheetDialogFragment() {
|
||||||
binding.dialogSave.setOnClickListener {
|
binding.dialogSave.setOnClickListener {
|
||||||
prefs.edit { putString("theme", binding.dialogRadiogroup.getCheckedButtonTag()) }
|
prefs.edit { putString("theme", binding.dialogRadiogroup.getCheckedButtonTag()) }
|
||||||
dismiss()
|
dismiss()
|
||||||
VancedPreferencesDialog().show(requireActivity())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,16 +25,16 @@ object AppUtils {
|
||||||
|
|
||||||
fun sendRefresh(context: Context) {
|
fun sendRefresh(context: Context) {
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
delay(500)
|
delay(700)
|
||||||
LocalBroadcastManager.getInstance(context).sendBroadcast(Intent(HomeFragment.REFRESH_HOME))
|
LocalBroadcastManager.getInstance(context).sendBroadcast(Intent(HomeFragment.REFRESH_HOME))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun sendCloseDialog(context: Context) {
|
fun sendCloseDialog(context: Context) {
|
||||||
|
downloadProgress.get()?.installing?.set(false)
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
delay(500)
|
delay(700)
|
||||||
LocalBroadcastManager.getInstance(context).sendBroadcast(Intent(AppDownloadDialog.CLOSE_DIALOG))
|
LocalBroadcastManager.getInstance(context).sendBroadcast(Intent(AppDownloadDialog.CLOSE_DIALOG))
|
||||||
downloadProgress.get()?.installing?.set(false)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ object AppUtils {
|
||||||
downloadProgress.get()?.installing?.set(false)
|
downloadProgress.get()?.installing?.set(false)
|
||||||
//Delay error broadcast until activity (and fragment) get back to the screen
|
//Delay error broadcast until activity (and fragment) get back to the screen
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
delay(500)
|
delay(700)
|
||||||
val intent = Intent(HomeFragment.INSTALL_FAILED)
|
val intent = Intent(HomeFragment.INSTALL_FAILED)
|
||||||
intent.putExtra("errorMsg", getErrorMessage(status, context))
|
intent.putExtra("errorMsg", getErrorMessage(status, context))
|
||||||
LocalBroadcastManager.getInstance(context).sendBroadcast(intent)
|
LocalBroadcastManager.getInstance(context).sendBroadcast(intent)
|
||||||
|
|
|
@ -20,6 +20,10 @@ object Extensions {
|
||||||
return findViewById<MaterialRadioButton>(checkedRadioButtonId).tag.toString()
|
return findViewById<MaterialRadioButton>(checkedRadioButtonId).tag.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun RadioGroup.getCheckedButtonText(): String {
|
||||||
|
return findViewById<MaterialRadioButton>(checkedRadioButtonId).text.toString()
|
||||||
|
}
|
||||||
|
|
||||||
fun DialogFragment.show(activity: FragmentActivity) {
|
fun DialogFragment.show(activity: FragmentActivity) {
|
||||||
show(activity.supportFragmentManager, "")
|
show(activity.supportFragmentManager, "")
|
||||||
}
|
}
|
||||||
|
@ -49,16 +53,20 @@ object Extensions {
|
||||||
//Not sure how much this can affect performance
|
//Not sure how much this can affect performance
|
||||||
//but if anyone can improve this even slightly,
|
//but if anyone can improve this even slightly,
|
||||||
//feel free to open a PR
|
//feel free to open a PR
|
||||||
fun List<String>.convertToAppVersions(): Array<AppVersionsModel> {
|
fun List<String>.convertToAppVersions(): List<String> {
|
||||||
val versionsModel = arrayListOf(AppVersionsModel("latest", this[0]))
|
val versionsModel = arrayListOf("latest")
|
||||||
for (i in reversed().indices) {
|
for (i in reversed().indices) {
|
||||||
versionsModel.add(AppVersionsModel(this[i], this[i]))
|
versionsModel.add(this[i])
|
||||||
}
|
}
|
||||||
return versionsModel.toTypedArray()
|
return versionsModel
|
||||||
}
|
}
|
||||||
|
|
||||||
fun String.convertToAppTheme(context: Context): String {
|
fun String.convertToAppTheme(context: Context): String {
|
||||||
return context.getString(R.string.light_plus_other, this.capitalize(Locale.ROOT))
|
return context.getString(R.string.light_plus_other, this.capitalize(Locale.ROOT))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun String.getLatestAppVersion(versions: List<String>): String {
|
||||||
|
return if (this == "latest") versions.reversed()[0] else this
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -49,8 +49,8 @@ object InternetTools {
|
||||||
|
|
||||||
fun loadJson(context: Context) = CoroutineScope(Dispatchers.IO).launch {
|
fun loadJson(context: Context) = CoroutineScope(Dispatchers.IO).launch {
|
||||||
val installUrl = context.getDefaultPrefs().getString("install_url", baseUrl)
|
val installUrl = context.getDefaultPrefs().getString("install_url", baseUrl)
|
||||||
val latest = JsonHelper.getJson("$installUrl/latest.json?fetchTime=${SimpleDateFormat("HHmmss", Locale.getDefault())}")
|
val latest = JsonHelper.getJson("$installUrl/latest.json?fetchTime=${SimpleDateFormat("HHmmss", Locale.ROOT)}")
|
||||||
val versions = JsonHelper.getJson("$installUrl/versions.json?fetchTime=${SimpleDateFormat("HHmmss", Locale.getDefault())}")
|
val versions = JsonHelper.getJson("$installUrl/versions.json?fetchTime=${SimpleDateFormat("HHmmss", Locale.ROOT)}")
|
||||||
// braveTiers.apply {
|
// braveTiers.apply {
|
||||||
// set(getJson("$installUrl/sponsor.json"))
|
// set(getJson("$installUrl/sponsor.json"))
|
||||||
// notifyChange()
|
// notifyChange()
|
||||||
|
|
|
@ -19,6 +19,7 @@ class LanguageContextWrapper(base: Context?) : ContextWrapper(base) {
|
||||||
return LanguageContextWrapper(context)
|
return LanguageContextWrapper(context)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
private fun setLocale(config: Configuration, context: Context): Configuration {
|
private fun setLocale(config: Configuration, context: Context): Configuration {
|
||||||
val pref = PreferenceManager.getDefaultSharedPreferences(context).getString("manager_lang", "System Default")
|
val pref = PreferenceManager.getDefaultSharedPreferences(context).getString("manager_lang", "System Default")
|
||||||
val sysLocale = Resources.getSystem().configuration.locale
|
val sysLocale = Resources.getSystem().configuration.locale
|
||||||
|
|
|
@ -33,6 +33,8 @@ import kotlin.collections.HashMap
|
||||||
object PackageHelper {
|
object PackageHelper {
|
||||||
|
|
||||||
private const val apkInstallPath = "/data/adb/Vanced/"
|
private const val apkInstallPath = "/data/adb/Vanced/"
|
||||||
|
private val vancedThemes = arrayOf("black", "dark", "pink", "blue")
|
||||||
|
|
||||||
fun isPackageInstalled(packageName: String, packageManager: PackageManager): Boolean {
|
fun isPackageInstalled(packageName: String, packageManager: PackageManager): Boolean {
|
||||||
return try {
|
return try {
|
||||||
packageManager.getPackageInfo(packageName, 0)
|
packageManager.getPackageInfo(packageName, 0)
|
||||||
|
@ -84,7 +86,7 @@ object PackageHelper {
|
||||||
for (file in files) {
|
for (file in files) {
|
||||||
|
|
||||||
when {
|
when {
|
||||||
(file.name == "black.apk" || file.name == "dark.apk") && !splitFiles.contains("base") -> splitFiles.add("base")
|
vancedThemes.any { file.name == "$it.apk" } && !splitFiles.contains("base") -> splitFiles.add("base")
|
||||||
file.name.matches(Regex("split_config\\.(..)\\.apk")) && !splitFiles.contains("lang") -> splitFiles.add("lang")
|
file.name.matches(Regex("split_config\\.(..)\\.apk")) && !splitFiles.contains("lang") -> splitFiles.add("lang")
|
||||||
(file.name.startsWith("split_config.arm") || file.name.startsWith("split_config.x86")) && !splitFiles.contains("arch") -> splitFiles.add("arch")
|
(file.name.startsWith("split_config.arm") || file.name.startsWith("split_config.x86")) && !splitFiles.contains("arch") -> splitFiles.add("arch")
|
||||||
}
|
}
|
||||||
|
@ -292,8 +294,8 @@ object PackageHelper {
|
||||||
val apkFilesPath = context.getExternalFilesDir("vanced/root")?.path
|
val apkFilesPath = context.getExternalFilesDir("vanced/root")?.path
|
||||||
val fileInfoList = apkFilesPath?.let { it1 -> getFileInfoList(it1) }
|
val fileInfoList = apkFilesPath?.let { it1 -> getFileInfoList(it1) }
|
||||||
if (fileInfoList != null) {
|
if (fileInfoList != null) {
|
||||||
val modApk: FileInfo? = fileInfoList.lastOrNull {
|
val modApk: FileInfo? = fileInfoList.lastOrNull { file ->
|
||||||
it.name == "dark.apk" || it.name == "black.apk"
|
vancedThemes.any { file.name == "$it.apk" }
|
||||||
}
|
}
|
||||||
if (modApk != null) {
|
if (modApk != null) {
|
||||||
if (overwriteBase(modApk, fileInfoList, vancedVersionCode!!, vancedRootPkg, context)) {
|
if (overwriteBase(modApk, fileInfoList, vancedVersionCode!!, vancedRootPkg, context)) {
|
||||||
|
|
|
@ -1,14 +1,7 @@
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector android:height="40.516296dp" android:viewportHeight="34.271"
|
||||||
android:width="29.605dp"
|
android:viewportWidth="29.605" android:width="35dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
android:height="34.271dp"
|
<path android:fillColor="#00000000"
|
||||||
android:viewportWidth="29.605"
|
android:pathData="M25.766,0.5h-21.9a3.352,3.352 0,0 0,-3.361 3.361v22.087a3.373,3.373 0,0 0,3.361 3.361h18.522l-0.859,-3.028 2.1,1.954 1.954,1.825 3.522,3.1v-29.3A3.334,3.334 0,0 0,25.766 0.5Z"
|
||||||
android:viewportHeight="34.271">
|
android:strokeColor="#000000" android:strokeWidth="1"/>
|
||||||
<path
|
<path android:fillColor="#000000" android:pathData="M22.055,9.782a7.865,7.865 0,0 0,-4.56 -1.737l-0.235,0.26a10.6,10.6 0,0 1,4.037 2.106,13.138 13.138,0 0,0 -4.87,-1.607 13.679,13.679 0,0 0,-3.289 0.054,1.292 1.292,0 0,0 -0.288,0.022 12.15,12.15 0,0 0,-3.674 1.031,6.119 6.119,0 0,0 -0.908,0.478 10.878,10.878 0,0 1,4.218 -2.16l-0.182,-0.185a7.864,7.864 0,0 0,-4.56 1.737,22.555 22.555,0 0,0 -2.328,9.64 5.871,5.871 0,0 0,4.944 2.5s0.6,-0.738 1.089,-1.368a5.13,5.13 0,0 1,-2.819 -1.921,2.3 2.3,0 0,1 0.438,0.239c0.021,0.022 0.021,0.054 0.053,0.054a0.361,0.361 0,0 0,0.16 0.076,8.514 8.514,0 0,0 1.2,0.575 13.145,13.145 0,0 0,2.381 0.706,10.773 10.773,0 0,0 4.218,0 10.444,10.444 0,0 0,2.36 -0.706,9.122 9.122,0 0,0 1.869,-0.977 5.206,5.206 0,0 1,-2.958 1.976c0.491,0.63 1.089,1.346 1.089,1.346a6.013,6.013 0,0 0,4.976 -2.5A22.319,22.319 0,0 0,22.055 9.782ZM11.878,17.869a1.838,1.838 0,1 1,1.655 -1.813A1.745,1.745 0,0 1,11.878 17.866ZM17.805,17.869a1.838,1.838 0,1 1,1.655 -1.813A1.718,1.718 0,0 1,17.805 17.866Z"/>
|
||||||
android:strokeWidth="1"
|
|
||||||
android:pathData="M25.766,0.5h-21.9a3.352,3.352 0,0 0,-3.361 3.361v22.087a3.373,3.373 0,0 0,3.361 3.361h18.522l-0.859,-3.028 2.1,1.954 1.954,1.825 3.522,3.1v-29.3A3.334,3.334 0,0 0,25.766 0.5Z"
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:strokeColor="#000000"/>
|
|
||||||
<path
|
|
||||||
android:pathData="M22.055,9.782a7.865,7.865 0,0 0,-4.56 -1.737l-0.235,0.26a10.6,10.6 0,0 1,4.037 2.106,13.138 13.138,0 0,0 -4.87,-1.607 13.679,13.679 0,0 0,-3.289 0.054,1.292 1.292,0 0,0 -0.288,0.022 12.15,12.15 0,0 0,-3.674 1.031,6.119 6.119,0 0,0 -0.908,0.478 10.878,10.878 0,0 1,4.218 -2.16l-0.182,-0.185a7.864,7.864 0,0 0,-4.56 1.737,22.555 22.555,0 0,0 -2.328,9.64 5.871,5.871 0,0 0,4.944 2.5s0.6,-0.738 1.089,-1.368a5.13,5.13 0,0 1,-2.819 -1.921,2.3 2.3,0 0,1 0.438,0.239c0.021,0.022 0.021,0.054 0.053,0.054a0.361,0.361 0,0 0,0.16 0.076,8.514 8.514,0 0,0 1.2,0.575 13.145,13.145 0,0 0,2.381 0.706,10.773 10.773,0 0,0 4.218,0 10.444,10.444 0,0 0,2.36 -0.706,9.122 9.122,0 0,0 1.869,-0.977 5.206,5.206 0,0 1,-2.958 1.976c0.491,0.63 1.089,1.346 1.089,1.346a6.013,6.013 0,0 0,4.976 -2.5A22.319,22.319 0,0 0,22.055 9.782ZM11.878,17.869a1.838,1.838 0,1 1,1.655 -1.813A1.745,1.745 0,0 1,11.878 17.866ZM17.805,17.869a1.838,1.838 0,1 1,1.655 -1.813A1.718,1.718 0,0 1,17.805 17.866Z"
|
|
||||||
android:fillColor="#000000"/>
|
|
||||||
</vector>
|
</vector>
|
||||||
|
|
|
@ -1,12 +1,6 @@
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector android:height="36.508373dp" android:viewportHeight="35.5"
|
||||||
android:width="36.367dp"
|
android:viewportWidth="36.367" android:width="37.4dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
android:height="35.5dp"
|
<path android:fillColor="#00000000" android:fillType="evenOdd"
|
||||||
android:viewportWidth="36.367"
|
android:pathData="M18.183,0.5a17.687,17.687 0,0 0,-5.59 34.466c0.879,0.163 1.2,-0.38 1.2,-0.858 0,-0.423 -0.011,-1.531 -0.022,-3.007 -4.917,1.064 -5.96,-2.366 -5.96,-2.366a4.67,4.67 0,0 0,-1.965 -2.584c-1.607,-1.1 0.119,-1.075 0.119,-1.075a3.758,3.758 0,0 1,2.714 1.824,3.758 3.758,0 0,0 5.145,1.465 3.843,3.843 0,0 1,1.118 -2.366c-3.93,-0.445 -8.055,-1.965 -8.055,-8.739a6.8,6.8 0,0 1,1.824 -4.744,6.321 6.321,0 0,1 0.174,-4.679s1.487,-0.478 4.863,1.813a16.727,16.727 0,0 1,8.858 0c3.376,-2.29 4.863,-1.813 4.863,-1.813a6.321,6.321 0,0 1,0.174 4.679,6.836 6.836,0 0,1 1.813,4.744c0,6.8 -4.136,8.283 -8.076,8.728a4.243,4.243 0,0 1,1.2 3.278c0,2.366 -0.022,4.266 -0.022,4.852 0,0.478 0.315,1.02 1.216,0.847a17.689,17.689 0,0 0,-5.6 -34.466Z"
|
||||||
android:viewportHeight="35.5">
|
android:strokeColor="#000000" android:strokeWidth="1"/>
|
||||||
<path
|
|
||||||
android:strokeWidth="1"
|
|
||||||
android:pathData="M18.183,0.5a17.687,17.687 0,0 0,-5.59 34.466c0.879,0.163 1.2,-0.38 1.2,-0.858 0,-0.423 -0.011,-1.531 -0.022,-3.007 -4.917,1.064 -5.96,-2.366 -5.96,-2.366a4.67,4.67 0,0 0,-1.965 -2.584c-1.607,-1.1 0.119,-1.075 0.119,-1.075a3.758,3.758 0,0 1,2.714 1.824,3.758 3.758,0 0,0 5.145,1.465 3.843,3.843 0,0 1,1.118 -2.366c-3.93,-0.445 -8.055,-1.965 -8.055,-8.739a6.8,6.8 0,0 1,1.824 -4.744,6.321 6.321,0 0,1 0.174,-4.679s1.487,-0.478 4.863,1.813a16.727,16.727 0,0 1,8.858 0c3.376,-2.29 4.863,-1.813 4.863,-1.813a6.321,6.321 0,0 1,0.174 4.679,6.836 6.836,0 0,1 1.813,4.744c0,6.8 -4.136,8.283 -8.076,8.728a4.243,4.243 0,0 1,1.2 3.278c0,2.366 -0.022,4.266 -0.022,4.852 0,0.478 0.315,1.02 1.216,0.847a17.689,17.689 0,0 0,-5.6 -34.466Z"
|
|
||||||
android:fillColor="#00000000"
|
|
||||||
android:fillType="evenOdd"
|
|
||||||
android:strokeColor="#000000"/>
|
|
||||||
</vector>
|
</vector>
|
||||||
|
|
|
@ -51,7 +51,6 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="8dp"
|
android:layout_marginStart="8dp"
|
||||||
android:layout_marginTop="4dp"
|
|
||||||
android:layout_marginEnd="8dp"
|
android:layout_marginEnd="8dp"
|
||||||
android:nestedScrollingEnabled="false"
|
android:nestedScrollingEnabled="false"
|
||||||
tools:itemCount="2"
|
tools:itemCount="2"
|
||||||
|
|
|
@ -98,20 +98,14 @@
|
||||||
app:layout_constraintTop_toBottomOf="@id/app_name">
|
app:layout_constraintTop_toBottomOf="@id/app_name">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
style="@style/AppVersionText"
|
||||||
android:layout_height="wrap_content"
|
android:text="@string/latest" />
|
||||||
android:letterSpacing="0.02"
|
|
||||||
android:text="@string/latest"
|
|
||||||
android:textSize="14sp" />
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/app_remote_version"
|
android:id="@+id/app_remote_version"
|
||||||
android:layout_width="wrap_content"
|
style="@style/AppVersionText"
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="4dp"
|
android:layout_marginStart="4dp"
|
||||||
android:letterSpacing="0.02"
|
android:text="@{dataModel.versionName}" />
|
||||||
android:text="@{dataModel.versionName}"
|
|
||||||
android:textSize="14sp" />
|
|
||||||
|
|
||||||
</com.google.android.flexbox.FlexboxLayout>
|
</com.google.android.flexbox.FlexboxLayout>
|
||||||
|
|
||||||
|
@ -127,18 +121,13 @@
|
||||||
app:layout_constraintTop_toBottomOf="@id/app_remote_version_container">
|
app:layout_constraintTop_toBottomOf="@id/app_remote_version_container">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
style="@style/AppVersionText"
|
||||||
android:layout_height="wrap_content"
|
android:text="@string/version_installed" />
|
||||||
android:letterSpacing="0.02"
|
|
||||||
android:text="@string/version_installed"
|
|
||||||
android:textSize="14sp" />
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/app_installed_version"
|
android:id="@+id/app_installed_version"
|
||||||
android:layout_width="wrap_content"
|
style="@style/AppVersionText"
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="4dp"
|
android:layout_marginStart="4dp"
|
||||||
android:letterSpacing="0.02"
|
|
||||||
android:text="@{dataModel.installedVersionName}" />
|
android:text="@{dataModel.installedVersionName}" />
|
||||||
|
|
||||||
</com.google.android.flexbox.FlexboxLayout>
|
</com.google.android.flexbox.FlexboxLayout>
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
app:cardBackgroundColor="?colorLinkBG"
|
app:cardBackgroundColor="?colorLinkBG"
|
||||||
app:cardCornerRadius="12dp"
|
app:cardCornerRadius="12dp"
|
||||||
app:cardElevation="0dp"
|
app:cardElevation="0dp"
|
||||||
app:contentPaddingTop="8dp">
|
app:contentPaddingTop="12dp">
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
@ -45,6 +45,7 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@{sponsor.name}"
|
android:text="@{sponsor.name}"
|
||||||
|
android:textColor="?colorLinkImage"
|
||||||
app:layout_constraintBottom_toTopOf="@id/sponsor_description"
|
app:layout_constraintBottom_toTopOf="@id/sponsor_description"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
@ -55,6 +56,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/support_us"
|
android:text="@string/support_us"
|
||||||
|
android:textColor="?colorLinkImage"
|
||||||
android:textAlignment="center"
|
android:textAlignment="center"
|
||||||
android:textSize="18sp"
|
android:textSize="18sp"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
|
|
@ -122,6 +122,13 @@
|
||||||
<item name="android:layout_marginTop">@dimen/top_header_margin</item>
|
<item name="android:layout_marginTop">@dimen/top_header_margin</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<style name="AppVersionText" parent="Widget.AppCompat.TextView">
|
||||||
|
<item name="android:layout_width">wrap_content</item>
|
||||||
|
<item name="android:layout_height">wrap_content</item>
|
||||||
|
<item name="android:letterSpacing">0.02</item>
|
||||||
|
<item name="android:textColor">?colorLinkImage</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
<style name="AboutDevNames" parent="Widget.AppCompat.TextView">
|
<style name="AboutDevNames" parent="Widget.AppCompat.TextView">
|
||||||
<item name="android:textSize">15sp</item>
|
<item name="android:textSize">15sp</item>
|
||||||
<item name="android:textColor">?colorWelcomeHeaderSubtitle</item>
|
<item name="android:textColor">?colorWelcomeHeaderSubtitle</item>
|
||||||
|
|
|
@ -103,7 +103,7 @@
|
||||||
<item name="iconColor">?colorPrimaryVariant</item>
|
<item name="iconColor">?colorPrimaryVariant</item>
|
||||||
<item name="toolbarIconColor">?colorOnPrimary</item>
|
<item name="toolbarIconColor">?colorOnPrimary</item>
|
||||||
<item name="DialogBG">#111111</item>
|
<item name="DialogBG">#111111</item>
|
||||||
<item name="colorLinkImage">#74FFFFFF</item>
|
<item name="colorLinkImage">#FFFFFF</item>
|
||||||
<item name="colorLinkBG">#161616</item>
|
<item name="colorLinkBG">#161616</item>
|
||||||
<item name="colorSettingsTitle">#ffffff</item>
|
<item name="colorSettingsTitle">#ffffff</item>
|
||||||
<item name="colorSecondaryText">#B3FFFFFF</item>
|
<item name="colorSecondaryText">#B3FFFFFF</item>
|
||||||
|
|
Loading…
Reference in New Issue