From 56eec40dd3c07e78314300c1f3fe26287bb894c0 Mon Sep 17 00:00:00 2001 From: X1nto Date: Mon, 18 Jan 2021 20:03:08 +0400 Subject: [PATCH 01/22] fixed root music installer for some devices --- .../java/com/vanced/manager/utils/PackageHelper.kt | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt b/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt index be032d826b..3ee587934d 100644 --- a/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt +++ b/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt @@ -188,13 +188,20 @@ object PackageHelper { private fun installRootMusic(files: ArrayList, context: Context): Boolean { files.forEach { apk -> if (apk.name != "root.apk") { - val command = Shell.su("cat ${apk.file?.path} | pm install -S ${apk.fileSize}").exec() - if (command.isSuccess) + val newPath = "/data/local/tmp/${apk.file?.name}" + Shell.su("mv ${apk.file?.path} $newPath").exec() + + //moving apk to tmp folder in order to avoid permission denials + val command = Shell.su("pm install $newPath").exec() + if (command.isSuccess) { + Shell.su("rm $newPath").exec() return true - else { + } else { sendFailure(command.out, context) sendCloseDialog(context) + Shell.su("rm $newPath").exec() } + } } return false From e1141169164733be4483cfedb7abf1ba0024ba2e Mon Sep 17 00:00:00 2001 From: X1nto Date: Tue, 19 Jan 2021 00:29:16 +0400 Subject: [PATCH 02/22] moved su command execution out of if else scope --- app/src/main/java/com/vanced/manager/utils/PackageHelper.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt b/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt index 3ee587934d..66528e56d5 100644 --- a/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt +++ b/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt @@ -193,13 +193,12 @@ object PackageHelper { //moving apk to tmp folder in order to avoid permission denials val command = Shell.su("pm install $newPath").exec() + Shell.su("rm $newPath").exec() if (command.isSuccess) { - Shell.su("rm $newPath").exec() return true } else { sendFailure(command.out, context) sendCloseDialog(context) - Shell.su("rm $newPath").exec() } } From 77848277905e979b626088420e83feea5c4e79d2 Mon Sep 17 00:00:00 2001 From: X1nto Date: Tue, 19 Jan 2021 00:29:47 +0400 Subject: [PATCH 03/22] fixed comment alignment --- app/src/main/java/com/vanced/manager/utils/PackageHelper.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt b/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt index 66528e56d5..a22447300a 100644 --- a/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt +++ b/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt @@ -189,9 +189,9 @@ object PackageHelper { files.forEach { apk -> if (apk.name != "root.apk") { val newPath = "/data/local/tmp/${apk.file?.name}" - Shell.su("mv ${apk.file?.path} $newPath").exec() //moving apk to tmp folder in order to avoid permission denials + Shell.su("mv ${apk.file?.path} $newPath").exec() val command = Shell.su("pm install $newPath").exec() Shell.su("rm $newPath").exec() if (command.isSuccess) { From 50f8620544e57baae845d0992eba78dfa4e103ee Mon Sep 17 00:00:00 2001 From: KevinX8 Date: Wed, 20 Jan 2021 14:42:02 +0000 Subject: [PATCH 04/22] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 6a48b1b3d6..fafd2718d6 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ Pull requests should be made to the Dev branch as that is the working branch, ma ====== For anyone who wants to provide translations please submit them to https://crowdin.com/project/vanced-manager as we also use it for YouTube Vanced. Any issues with translations should be posted there too. ====== +Vanced FAQ (from the faq branch) now available on the playstore! https://play.google.com/store/apps/details?id=com.vanced.faq + [![Github All Releases](https://img.shields.io/github/downloads/YTVanced/VancedManager/total.svg)](https://github.com/YTVanced/VancedManager/releases/latest) [![Github All Releases](https://img.shields.io/github/release/YTVanced/VancedManager.svg)](https://github.com/YTVanced/VancedManager/releases/latest) # Vanced Manager Hi, when we released Vanced 15.05.54, people were upset because it used the .apks format, which was way harder to install than a traditional .apk file. Even though we wrote clear instructions on how to install the new Vanced build, people still couldn't figure it out. From 4be7bad75ba115b26eb4d6e52fc2e65498b1c898 Mon Sep 17 00:00:00 2001 From: X1nto Date: Fri, 22 Jan 2021 20:04:21 +0400 Subject: [PATCH 05/22] migrated to kotlin SAM conversion --- .../com/vanced/manager/ui/core/PreferenceSwitch.kt | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/vanced/manager/ui/core/PreferenceSwitch.kt b/app/src/main/java/com/vanced/manager/ui/core/PreferenceSwitch.kt index 8f5c2bff3b..00d106e17b 100644 --- a/app/src/main/java/com/vanced/manager/ui/core/PreferenceSwitch.kt +++ b/app/src/main/java/com/vanced/manager/ui/core/PreferenceSwitch.kt @@ -17,7 +17,7 @@ class PreferenceSwitch @JvmOverloads constructor( defStyleRes: Int = 0 ) : FrameLayout(context, attrs, defStyle, defStyleRes) { - interface OnCheckedListener { + fun interface OnCheckedListener { fun onChecked(buttonView: CompoundButton, isChecked: Boolean) } @@ -64,15 +64,7 @@ class PreferenceSwitch @JvmOverloads constructor( } } - fun setOnCheckedListener(method: (buttonView: CompoundButton, isChecked: Boolean) -> Unit) { - mListener = object : OnCheckedListener { - override fun onChecked(buttonView: CompoundButton, isChecked: Boolean) { - method(buttonView, isChecked) - } - } - } - - fun setOnCheckedListener(listener: OnCheckedListener?) { + fun setOnCheckedListener(listener: OnCheckedListener) { mListener = listener } From fcdc91029392d576ac0733798990b614736121dc Mon Sep 17 00:00:00 2001 From: X1nto Date: Fri, 22 Jan 2021 20:15:47 +0400 Subject: [PATCH 06/22] updated gradle plugin --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 1bbdcef682..5bab66ba9f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,7 +7,7 @@ buildscript { } dependencies { - classpath("com.android.tools.build:gradle:4.1.1") + classpath("com.android.tools.build:gradle:4.1.2") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.21") classpath("com.google.gms:google-services:4.3.4") classpath("com.google.firebase:perf-plugin:1.3.4") From dde6901dbe584cffb02c88e37ece5a3e5e93854d Mon Sep 17 00:00:00 2001 From: X1nto Date: Sun, 24 Jan 2021 22:12:06 +0400 Subject: [PATCH 07/22] added getters and setters for preferences --- .../manager/adapter/SelectAppsAdapter.kt | 6 ++- .../core/downloader/MicrogDownloader.kt | 6 +-- .../core/downloader/MusicDownloader.kt | 11 ++--- .../core/downloader/VancedDownloader.kt | 16 +++--- .../manager/ui/core/PreferenceSwitch.kt | 4 +- .../manager/ui/core/ThemedMaterialButton.kt | 6 +-- .../manager/ui/core/ThemedMaterialCheckbox.kt | 6 +-- .../ui/core/ThemedMaterialRadioButton.kt | 6 +-- .../manager/ui/core/ThemedMaterialSlider.kt | 6 +-- .../ui/core/ThemedOutlinedMaterialButton.kt | 6 +-- .../ui/core/ThemedSwipeRefreshlayout.kt | 6 +-- .../manager/ui/core/ThemedSwitchCompat.kt | 6 +-- .../vanced/manager/ui/core/ThemedTextView.kt | 6 +-- .../ui/dialogs/AppVersionSelectorDialog.kt | 4 +- .../ui/dialogs/ManagerAccentColorDialog.kt | 10 ++-- .../ui/dialogs/ManagerLanguageDialog.kt | 6 +-- .../manager/ui/dialogs/ManagerThemeDialog.kt | 5 +- .../ui/dialogs/ManagerVariantDialog.kt | 10 ++-- .../ui/dialogs/MusicPreferencesDialog.kt | 4 +- .../manager/ui/dialogs/ServiceDTimerDialog.kt | 4 +- .../manager/ui/dialogs/URLChangeDialog.kt | 10 ++-- .../ui/dialogs/VancedPreferencesDialog.kt | 5 +- .../com/vanced/manager/utils/Extensions.kt | 16 ++---- .../com/vanced/manager/utils/InstallPrefs.kt | 16 ++++++ .../com/vanced/manager/utils/InternetTools.kt | 4 +- .../com/vanced/manager/utils/Preferences.kt | 49 +++++++++++++++++++ .../com/vanced/manager/utils/ThemeHelper.kt | 2 +- 27 files changed, 144 insertions(+), 92 deletions(-) create mode 100644 app/src/main/java/com/vanced/manager/utils/InstallPrefs.kt create mode 100644 app/src/main/java/com/vanced/manager/utils/Preferences.kt diff --git a/app/src/main/java/com/vanced/manager/adapter/SelectAppsAdapter.kt b/app/src/main/java/com/vanced/manager/adapter/SelectAppsAdapter.kt index 26c443daeb..a7b7d4d2b3 100644 --- a/app/src/main/java/com/vanced/manager/adapter/SelectAppsAdapter.kt +++ b/app/src/main/java/com/vanced/manager/adapter/SelectAppsAdapter.kt @@ -8,6 +8,8 @@ import androidx.recyclerview.widget.RecyclerView import com.vanced.manager.R import com.vanced.manager.databinding.ViewAppCheckboxBinding import com.vanced.manager.model.SelectAppModel +import com.vanced.manager.utils.enableMusic +import com.vanced.manager.utils.enableVanced class SelectAppsAdapter(private val context: Context) : RecyclerView.Adapter() { @@ -18,14 +20,14 @@ class SelectAppsAdapter(private val context: Context) : context.getString(R.string.vanced), context.getString(R.string.select_apps_vanced), "vanced", - prefs.getBoolean("enable_vanced", true) + prefs.enableVanced ) private val music = SelectAppModel( context.getString(R.string.music), context.getString(R.string.select_apps_music), "music", - prefs.getBoolean("enable_music", true) + prefs.enableMusic ) val apps = arrayOf(vanced, music) diff --git a/app/src/main/java/com/vanced/manager/core/downloader/MicrogDownloader.kt b/app/src/main/java/com/vanced/manager/core/downloader/MicrogDownloader.kt index eef1caff6e..bea1510e73 100644 --- a/app/src/main/java/com/vanced/manager/core/downloader/MicrogDownloader.kt +++ b/app/src/main/java/com/vanced/manager/core/downloader/MicrogDownloader.kt @@ -2,12 +2,10 @@ package com.vanced.manager.core.downloader import android.content.Context import com.vanced.manager.R +import com.vanced.manager.utils.* import com.vanced.manager.utils.DownloadHelper.download import com.vanced.manager.utils.DownloadHelper.downloadProgress import com.vanced.manager.utils.PackageHelper.install -import com.vanced.manager.utils.getDefaultPrefs -import com.vanced.manager.utils.getInstallUrl -import com.vanced.manager.utils.microg object MicrogDownloader { @@ -16,7 +14,7 @@ object MicrogDownloader { fun downloadMicrog(context: Context) { val url = microg.value?.string("url") ?: "" - context.getDefaultPrefs().getInstallUrl()?.let { + context.defPrefs.installUrl?.let { download(url, "$it/", folderName, fileName, context, onDownloadComplete = { startMicrogInstall(context) }, onError = { diff --git a/app/src/main/java/com/vanced/manager/core/downloader/MusicDownloader.kt b/app/src/main/java/com/vanced/manager/core/downloader/MusicDownloader.kt index 4ce7393a00..e6c534cb6c 100644 --- a/app/src/main/java/com/vanced/manager/core/downloader/MusicDownloader.kt +++ b/app/src/main/java/com/vanced/manager/core/downloader/MusicDownloader.kt @@ -1,7 +1,6 @@ package com.vanced.manager.core.downloader import android.content.Context -import androidx.preference.PreferenceManager.getDefaultSharedPreferences import com.vanced.manager.R import com.vanced.manager.utils.* import com.vanced.manager.utils.AppUtils.musicRootPkg @@ -23,11 +22,11 @@ object MusicDownloader { private var hashUrl: String? = null fun downloadMusic(context: Context) { - val prefs = getDefaultSharedPreferences(context) - version = prefs.getString("music_version", "latest")?.getLatestAppVersion(musicVersions.value?.value ?: listOf("")) + val prefs = context.defPrefs + version = prefs.musicVersion?.getLatestAppVersion(musicVersions.value?.value ?: listOf("")) versionCode = music.value?.int("versionCode") - variant = prefs.getString("vanced_variant", "nonroot") - baseurl = "${prefs.getInstallUrl()}/music/v$version" + variant = prefs.managerVariant + baseurl = "${prefs.installUrl}/music/v$version" folderName = "music/$variant" downloadPath = context.getExternalFilesDir(folderName)?.path hashUrl = "$baseurl/hash.json" @@ -37,7 +36,7 @@ object MusicDownloader { private fun downloadApk(context: Context, apk: String = "music") { val url = if (apk == "stock") "$baseurl/stock/${getArch()}.apk" else "$baseurl/$variant.apk" - download(url, baseurl + "/", folderName!!, getFileNameFromUrl(url), context, onDownloadComplete = { + download(url, "$baseurl/", folderName!!, getFileNameFromUrl(url), context, onDownloadComplete = { if (variant == "root" && apk != "stock") { downloadApk(context, "stock") return@download diff --git a/app/src/main/java/com/vanced/manager/core/downloader/VancedDownloader.kt b/app/src/main/java/com/vanced/manager/core/downloader/VancedDownloader.kt index 0defd939dd..564038b010 100644 --- a/app/src/main/java/com/vanced/manager/core/downloader/VancedDownloader.kt +++ b/app/src/main/java/com/vanced/manager/core/downloader/VancedDownloader.kt @@ -3,7 +3,6 @@ package com.vanced.manager.core.downloader import android.content.Context import android.content.SharedPreferences import android.util.Log -import androidx.preference.PreferenceManager.getDefaultSharedPreferences import com.google.firebase.analytics.FirebaseAnalytics import com.google.firebase.analytics.ktx.logEvent import com.vanced.manager.R @@ -41,21 +40,20 @@ object VancedDownloader { private var folderName: String? = null fun downloadVanced(context: Context) { - defPrefs = getDefaultSharedPreferences(context) - prefs = context.getSharedPreferences("installPrefs", Context.MODE_PRIVATE) - variant = defPrefs.getString("vanced_variant", "nonroot") + defPrefs = context.defPrefs + prefs = context.installPrefs + variant = defPrefs.managerVariant folderName = "vanced/$variant" downloadPath = context.getExternalFilesDir(folderName)?.path File(downloadPath.toString()).deleteRecursively() - installUrl = defPrefs.getInstallUrl() - prefs.getString("lang", getDefaultVancedLanguages())?.let { + installUrl = defPrefs.installUrl + prefs.lang?.let { lang = it.split(", ").toMutableList() } - theme = prefs.getString("theme", "dark") - vancedVersion = defPrefs.getString("vanced_version", "latest")?.getLatestAppVersion(vancedVersions.value?.value ?: listOf("")) + theme = prefs.theme + vancedVersion = defPrefs.vancedVersion?.getLatestAppVersion(vancedVersions.value?.value ?: listOf("")) themePath = "$installUrl/apks/v$vancedVersion/$variant/Theme" hashUrl = "apks/v$vancedVersion/$variant/Theme/hash.json" - //newInstaller = defPrefs.getBoolean("new_installer", false) arch = getArch() count = 0 diff --git a/app/src/main/java/com/vanced/manager/ui/core/PreferenceSwitch.kt b/app/src/main/java/com/vanced/manager/ui/core/PreferenceSwitch.kt index 00d106e17b..1155e0aba7 100644 --- a/app/src/main/java/com/vanced/manager/ui/core/PreferenceSwitch.kt +++ b/app/src/main/java/com/vanced/manager/ui/core/PreferenceSwitch.kt @@ -6,9 +6,9 @@ import android.view.LayoutInflater import android.widget.CompoundButton import android.widget.FrameLayout import androidx.core.content.edit -import androidx.preference.PreferenceManager.getDefaultSharedPreferences import com.vanced.manager.R import com.vanced.manager.databinding.ViewPreferenceSwitchBinding +import com.vanced.manager.utils.defPrefs class PreferenceSwitch @JvmOverloads constructor( context: Context, @@ -21,7 +21,7 @@ class PreferenceSwitch @JvmOverloads constructor( fun onChecked(buttonView: CompoundButton, isChecked: Boolean) } - private val prefs by lazy { getDefaultSharedPreferences(context) } + private val prefs by lazy { context.defPrefs } var prefKey: String = "" private set diff --git a/app/src/main/java/com/vanced/manager/ui/core/ThemedMaterialButton.kt b/app/src/main/java/com/vanced/manager/ui/core/ThemedMaterialButton.kt index 65010decf4..511eed0729 100644 --- a/app/src/main/java/com/vanced/manager/ui/core/ThemedMaterialButton.kt +++ b/app/src/main/java/com/vanced/manager/ui/core/ThemedMaterialButton.kt @@ -7,9 +7,9 @@ import androidx.core.graphics.ColorUtils import com.google.android.material.button.MaterialButton import com.vanced.manager.R import com.vanced.manager.utils.accentColor -import com.vanced.manager.utils.defAccentColor -import com.vanced.manager.utils.getDefaultPrefs +import com.vanced.manager.utils.defPrefs import com.vanced.manager.utils.lifecycleOwner +import com.vanced.manager.utils.managerAccent class ThemedMaterialButton @JvmOverloads constructor( context: Context, @@ -18,7 +18,7 @@ class ThemedMaterialButton @JvmOverloads constructor( ) : MaterialButton(context, attributeSet, defStyleAttr) { init { - setBgColor(context.getDefaultPrefs().getInt("manager_accent_color", defAccentColor)) + setBgColor(context.defPrefs.managerAccent) context.lifecycleOwner()?.let { owner -> accentColor.observe(owner) { color -> setBgColor(color.toInt()) diff --git a/app/src/main/java/com/vanced/manager/ui/core/ThemedMaterialCheckbox.kt b/app/src/main/java/com/vanced/manager/ui/core/ThemedMaterialCheckbox.kt index a243abc823..eea3ee3d2a 100644 --- a/app/src/main/java/com/vanced/manager/ui/core/ThemedMaterialCheckbox.kt +++ b/app/src/main/java/com/vanced/manager/ui/core/ThemedMaterialCheckbox.kt @@ -5,14 +5,14 @@ import android.content.res.ColorStateList import android.util.AttributeSet import com.google.android.material.checkbox.MaterialCheckBox import com.vanced.manager.R -import com.vanced.manager.utils.defAccentColor -import com.vanced.manager.utils.getDefaultPrefs +import com.vanced.manager.utils.defPrefs +import com.vanced.manager.utils.managerAccent class ThemedMaterialCheckbox @JvmOverloads constructor( context: Context, attributeSet: AttributeSet? = null, ) : MaterialCheckBox(context, attributeSet, R.attr.checkboxStyle) { init { - buttonTintList = ColorStateList.valueOf(context.getDefaultPrefs().getInt("manager_accent_color", defAccentColor)) + buttonTintList = ColorStateList.valueOf(context.defPrefs.managerAccent) } } \ No newline at end of file diff --git a/app/src/main/java/com/vanced/manager/ui/core/ThemedMaterialRadioButton.kt b/app/src/main/java/com/vanced/manager/ui/core/ThemedMaterialRadioButton.kt index fd0c302f0a..6022a42623 100644 --- a/app/src/main/java/com/vanced/manager/ui/core/ThemedMaterialRadioButton.kt +++ b/app/src/main/java/com/vanced/manager/ui/core/ThemedMaterialRadioButton.kt @@ -5,14 +5,14 @@ import android.content.res.ColorStateList import android.util.AttributeSet import com.google.android.material.radiobutton.MaterialRadioButton import com.vanced.manager.R -import com.vanced.manager.utils.defAccentColor -import com.vanced.manager.utils.getDefaultPrefs +import com.vanced.manager.utils.defPrefs +import com.vanced.manager.utils.managerAccent class ThemedMaterialRadioButton @JvmOverloads constructor( context: Context, attributeSet: AttributeSet? = null, ) : MaterialRadioButton(context, attributeSet, R.attr.radioButtonStyle) { init { - buttonTintList = ColorStateList.valueOf(context.getDefaultPrefs().getInt("manager_accent_color", defAccentColor)) + buttonTintList = ColorStateList.valueOf(context.defPrefs.managerAccent) } } \ No newline at end of file diff --git a/app/src/main/java/com/vanced/manager/ui/core/ThemedMaterialSlider.kt b/app/src/main/java/com/vanced/manager/ui/core/ThemedMaterialSlider.kt index b3a63a1de1..ed89b9b509 100644 --- a/app/src/main/java/com/vanced/manager/ui/core/ThemedMaterialSlider.kt +++ b/app/src/main/java/com/vanced/manager/ui/core/ThemedMaterialSlider.kt @@ -4,8 +4,8 @@ import android.content.Context import android.content.res.ColorStateList import android.util.AttributeSet import com.google.android.material.slider.Slider -import com.vanced.manager.utils.defAccentColor -import com.vanced.manager.utils.getDefaultPrefs +import com.vanced.manager.utils.defPrefs +import com.vanced.manager.utils.managerAccent class ThemedMaterialSlider@JvmOverloads constructor( context: Context, @@ -14,7 +14,7 @@ class ThemedMaterialSlider@JvmOverloads constructor( ) : Slider(context, attributeSet, defStyleAttr) { init { - thumbStrokeColor = ColorStateList.valueOf(context.getDefaultPrefs().getInt("manager_accent_color", defAccentColor)) + thumbStrokeColor = ColorStateList.valueOf(context.defPrefs.managerAccent) } } \ No newline at end of file diff --git a/app/src/main/java/com/vanced/manager/ui/core/ThemedOutlinedMaterialButton.kt b/app/src/main/java/com/vanced/manager/ui/core/ThemedOutlinedMaterialButton.kt index 99c83daa03..a1dd5bb50a 100644 --- a/app/src/main/java/com/vanced/manager/ui/core/ThemedOutlinedMaterialButton.kt +++ b/app/src/main/java/com/vanced/manager/ui/core/ThemedOutlinedMaterialButton.kt @@ -6,9 +6,9 @@ import android.util.AttributeSet import androidx.core.graphics.ColorUtils import com.google.android.material.button.MaterialButton import com.vanced.manager.utils.accentColor -import com.vanced.manager.utils.defAccentColor -import com.vanced.manager.utils.getDefaultPrefs +import com.vanced.manager.utils.defPrefs import com.vanced.manager.utils.lifecycleOwner +import com.vanced.manager.utils.managerAccent class ThemedOutlinedMaterialButton @JvmOverloads constructor( @@ -17,7 +17,7 @@ class ThemedOutlinedMaterialButton @JvmOverloads constructor( defStyleAttr: Int = 0 ) : MaterialButton(context, attributeSet, defStyleAttr) { init { - applyAccent(context.getDefaultPrefs().getInt("manager_accent_color", defAccentColor)) + applyAccent(context.defPrefs.managerAccent) context.lifecycleOwner()?.let { owner -> accentColor.observe(owner) { color -> applyAccent(color.toInt()) diff --git a/app/src/main/java/com/vanced/manager/ui/core/ThemedSwipeRefreshlayout.kt b/app/src/main/java/com/vanced/manager/ui/core/ThemedSwipeRefreshlayout.kt index 2e731349fb..0cd37b7ddc 100644 --- a/app/src/main/java/com/vanced/manager/ui/core/ThemedSwipeRefreshlayout.kt +++ b/app/src/main/java/com/vanced/manager/ui/core/ThemedSwipeRefreshlayout.kt @@ -4,15 +4,15 @@ import android.content.Context import android.util.AttributeSet import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import com.vanced.manager.R -import com.vanced.manager.utils.defAccentColor -import com.vanced.manager.utils.getDefaultPrefs +import com.vanced.manager.utils.defPrefs +import com.vanced.manager.utils.managerAccent class ThemedSwipeRefreshlayout @JvmOverloads constructor( context: Context, attributeSet: AttributeSet? = null ) : SwipeRefreshLayout(context, attributeSet) { init { - setColorSchemeColors(context.getDefaultPrefs().getInt("manager_accent_color", defAccentColor)) + setColorSchemeColors(context.defPrefs.managerAccent) initAttrs(context, attributeSet) } private fun initAttrs(context: Context, attributeSet: AttributeSet?) { diff --git a/app/src/main/java/com/vanced/manager/ui/core/ThemedSwitchCompat.kt b/app/src/main/java/com/vanced/manager/ui/core/ThemedSwitchCompat.kt index 7ad3f77bcf..7d51ef6246 100644 --- a/app/src/main/java/com/vanced/manager/ui/core/ThemedSwitchCompat.kt +++ b/app/src/main/java/com/vanced/manager/ui/core/ThemedSwitchCompat.kt @@ -9,9 +9,9 @@ import androidx.core.graphics.ColorUtils import androidx.core.graphics.drawable.DrawableCompat import com.vanced.manager.R import com.vanced.manager.utils.accentColor -import com.vanced.manager.utils.defAccentColor -import com.vanced.manager.utils.getDefaultPrefs +import com.vanced.manager.utils.defPrefs import com.vanced.manager.utils.lifecycleOwner +import com.vanced.manager.utils.managerAccent class ThemedSwitchCompat @JvmOverloads constructor( context: Context, @@ -21,7 +21,7 @@ class ThemedSwitchCompat @JvmOverloads constructor( private val states = arrayOf(intArrayOf(-android.R.attr.state_checked), intArrayOf(android.R.attr.state_checked)) init { - setSwitchColors(context.getDefaultPrefs().getInt("manager_accent_color", defAccentColor)) + setSwitchColors(context.defPrefs.managerAccent) context.lifecycleOwner()?.let { owner -> accentColor.observe(owner) { color -> setSwitchColors(color.toInt()) diff --git a/app/src/main/java/com/vanced/manager/ui/core/ThemedTextView.kt b/app/src/main/java/com/vanced/manager/ui/core/ThemedTextView.kt index e79ab8515b..6ec2189f1d 100644 --- a/app/src/main/java/com/vanced/manager/ui/core/ThemedTextView.kt +++ b/app/src/main/java/com/vanced/manager/ui/core/ThemedTextView.kt @@ -4,9 +4,9 @@ import android.content.Context import android.util.AttributeSet import androidx.appcompat.widget.AppCompatTextView import com.vanced.manager.utils.accentColor -import com.vanced.manager.utils.defAccentColor -import com.vanced.manager.utils.getDefaultPrefs +import com.vanced.manager.utils.defPrefs import com.vanced.manager.utils.lifecycleOwner +import com.vanced.manager.utils.managerAccent class ThemedTextView @JvmOverloads constructor( context: Context, @@ -14,7 +14,7 @@ class ThemedTextView @JvmOverloads constructor( defStyleAttr: Int = 0 ) : AppCompatTextView(context, attributeSet, defStyleAttr) { init { - setTextColor(context.getDefaultPrefs().getInt("manager_accent_color", defAccentColor)) + setTextColor(context.defPrefs.managerAccent) context.lifecycleOwner()?.let { owner -> accentColor.observe(owner) { color -> setTextColor(color.toInt()) diff --git a/app/src/main/java/com/vanced/manager/ui/dialogs/AppVersionSelectorDialog.kt b/app/src/main/java/com/vanced/manager/ui/dialogs/AppVersionSelectorDialog.kt index bc08491c63..90dc1b45b5 100644 --- a/app/src/main/java/com/vanced/manager/ui/dialogs/AppVersionSelectorDialog.kt +++ b/app/src/main/java/com/vanced/manager/ui/dialogs/AppVersionSelectorDialog.kt @@ -11,12 +11,12 @@ import com.vanced.manager.core.ui.base.BindingBottomSheetDialogFragment import com.vanced.manager.core.ui.ext.showDialog import com.vanced.manager.databinding.DialogBottomRadioButtonBinding import com.vanced.manager.ui.core.ThemedMaterialRadioButton +import com.vanced.manager.utils.defPrefs import com.vanced.manager.utils.getCheckedButtonTag -import com.vanced.manager.utils.getDefaultPrefs class AppVersionSelectorDialog : BindingBottomSheetDialogFragment() { - private val prefs by lazy { requireActivity().getDefaultPrefs() } + private val prefs by lazy { requireActivity().defPrefs } companion object { diff --git a/app/src/main/java/com/vanced/manager/ui/dialogs/ManagerAccentColorDialog.kt b/app/src/main/java/com/vanced/manager/ui/dialogs/ManagerAccentColorDialog.kt index 46469c371b..6a805fef90 100644 --- a/app/src/main/java/com/vanced/manager/ui/dialogs/ManagerAccentColorDialog.kt +++ b/app/src/main/java/com/vanced/manager/ui/dialogs/ManagerAccentColorDialog.kt @@ -10,16 +10,12 @@ import android.view.LayoutInflater import android.view.ViewGroup import android.widget.TextView import android.widget.Toast -import androidx.core.content.edit import androidx.preference.PreferenceManager.getDefaultSharedPreferences import com.madrapps.pikolo.listeners.OnColorSelectionListener import com.vanced.manager.R import com.vanced.manager.core.ui.base.BindingDialogFragment import com.vanced.manager.databinding.DialogManagerAccentColorBinding -import com.vanced.manager.utils.accentColor -import com.vanced.manager.utils.defAccentColor -import com.vanced.manager.utils.mutableAccentColor -import com.vanced.manager.utils.toHex +import com.vanced.manager.utils.* class ManagerAccentColorDialog : BindingDialogFragment() { @@ -95,7 +91,7 @@ class ManagerAccentColorDialog : BindingDialogFragment() { @@ -40,12 +40,12 @@ class ManagerLanguageDialog : BindingBottomSheetDialogFragment languageRadiogroup.addView(mrb, MATCH_PARENT, WRAP_CONTENT) } - val language = prefs.getString("manager_lang", "System Default") + val language = prefs.managerLang root.findViewWithTag(language)?.isChecked = true languageSave.setOnClickListener { val newPref = binding.languageRadiogroup.getCheckedButtonTag() if (language != newPref) { - prefs.edit { putString("manager_lang", newPref) } + prefs.managerLang = newPref dismiss() requireActivity().recreate() } else { diff --git a/app/src/main/java/com/vanced/manager/ui/dialogs/ManagerThemeDialog.kt b/app/src/main/java/com/vanced/manager/ui/dialogs/ManagerThemeDialog.kt index 75b3d548f8..1e7e22843b 100644 --- a/app/src/main/java/com/vanced/manager/ui/dialogs/ManagerThemeDialog.kt +++ b/app/src/main/java/com/vanced/manager/ui/dialogs/ManagerThemeDialog.kt @@ -9,6 +9,7 @@ import com.google.android.material.radiobutton.MaterialRadioButton import com.vanced.manager.core.ui.base.BindingBottomSheetDialogFragment import com.vanced.manager.databinding.DialogManagerThemeBinding import com.vanced.manager.utils.getCheckedButtonTag +import com.vanced.manager.utils.managerTheme class ManagerThemeDialog : BindingBottomSheetDialogFragment() { @@ -33,12 +34,12 @@ class ManagerThemeDialog : BindingBottomSheetDialogFragment(theme).isChecked = true themeSave.setOnClickListener { val newPref = themeRadiogroup.getCheckedButtonTag() if (theme != newPref) { - prefs.edit { putString("manager_theme", newPref) } + prefs.managerTheme = newPref dismiss() requireActivity().recreate() } else { diff --git a/app/src/main/java/com/vanced/manager/ui/dialogs/ManagerVariantDialog.kt b/app/src/main/java/com/vanced/manager/ui/dialogs/ManagerVariantDialog.kt index ecf26d3a79..7a4ba81589 100644 --- a/app/src/main/java/com/vanced/manager/ui/dialogs/ManagerVariantDialog.kt +++ b/app/src/main/java/com/vanced/manager/ui/dialogs/ManagerVariantDialog.kt @@ -3,13 +3,13 @@ package com.vanced.manager.ui.dialogs import android.os.Bundle import android.view.LayoutInflater import android.view.ViewGroup -import androidx.core.content.edit import androidx.preference.PreferenceManager.getDefaultSharedPreferences import com.google.android.material.radiobutton.MaterialRadioButton import com.topjohnwu.superuser.Shell import com.vanced.manager.core.ui.base.BindingBottomSheetDialogFragment import com.vanced.manager.databinding.DialogManagerVariantBinding import com.vanced.manager.utils.getCheckedButtonTag +import com.vanced.manager.utils.managerVariant class ManagerVariantDialog : BindingBottomSheetDialogFragment() { @@ -34,16 +34,16 @@ class ManagerVariantDialog : BindingBottomSheetDialogFragment(variant).isChecked = true variantSave.setOnClickListener { val newPref = variantRadiogroup.getCheckedButtonTag() if (variant != newPref) { - prefs.edit { + with (prefs.managerVariant) { if (newPref == "root" && Shell.rootAccess()) { - putString("vanced_variant", "root") + this == "root" } else { - putString("vanced_variant", "nonroot") + this == "nonroot" } } dismiss() diff --git a/app/src/main/java/com/vanced/manager/ui/dialogs/MusicPreferencesDialog.kt b/app/src/main/java/com/vanced/manager/ui/dialogs/MusicPreferencesDialog.kt index dbb4b51a4d..89b6b5fa60 100644 --- a/app/src/main/java/com/vanced/manager/ui/dialogs/MusicPreferencesDialog.kt +++ b/app/src/main/java/com/vanced/manager/ui/dialogs/MusicPreferencesDialog.kt @@ -8,7 +8,7 @@ import com.vanced.manager.core.ui.base.BindingBottomSheetDialogFragment import com.vanced.manager.core.ui.ext.showDialog import com.vanced.manager.databinding.DialogMusicPreferencesBinding import com.vanced.manager.utils.convertToAppVersions -import com.vanced.manager.utils.getDefaultPrefs +import com.vanced.manager.utils.defPrefs import com.vanced.manager.utils.musicVersions class MusicPreferencesDialog : BindingBottomSheetDialogFragment() { @@ -20,7 +20,7 @@ class MusicPreferencesDialog : BindingBottomSheetDialogFragment() { - private val prefs by lazy { requireActivity().getDefaultPrefs() } + private val prefs by lazy { requireActivity().defPrefs } override fun binding( inflater: LayoutInflater, diff --git a/app/src/main/java/com/vanced/manager/ui/dialogs/URLChangeDialog.kt b/app/src/main/java/com/vanced/manager/ui/dialogs/URLChangeDialog.kt index f277d3f15a..63942dd3e9 100644 --- a/app/src/main/java/com/vanced/manager/ui/dialogs/URLChangeDialog.kt +++ b/app/src/main/java/com/vanced/manager/ui/dialogs/URLChangeDialog.kt @@ -6,17 +6,19 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.ViewGroup import android.widget.TextView -import androidx.core.content.edit import androidx.lifecycle.lifecycleScope -import androidx.preference.PreferenceManager.getDefaultSharedPreferences import com.vanced.manager.core.ui.base.BindingDialogFragment import com.vanced.manager.databinding.DialogCustomUrlBinding import com.vanced.manager.utils.baseUrl +import com.vanced.manager.utils.defPrefs +import com.vanced.manager.utils.installUrl import com.vanced.manager.utils.loadJson import kotlinx.coroutines.launch class URLChangeDialog : BindingDialogFragment() { + private val prefs by lazy { requireActivity().defPrefs } + companion object { fun newInstance(): URLChangeDialog = URLChangeDialog().apply { @@ -41,7 +43,7 @@ class URLChangeDialog : BindingDialogFragment() { if (arguments != null) { arguments?.getString("url") } else { - getDefaultSharedPreferences(requireActivity()).getString("install_url", baseUrl) + prefs.installUrl }, TextView.BufferType.EDITABLE ) @@ -59,7 +61,7 @@ class URLChangeDialog : BindingDialogFragment() { private fun saveUrl(url: String) { lifecycleScope.launch { - getDefaultSharedPreferences(requireActivity()).edit { putString("install_url", url) } + prefs.installUrl = url loadJson(requireActivity()) dismiss() } diff --git a/app/src/main/java/com/vanced/manager/ui/dialogs/VancedPreferencesDialog.kt b/app/src/main/java/com/vanced/manager/ui/dialogs/VancedPreferencesDialog.kt index 9e3a4b8641..9218a96ad3 100644 --- a/app/src/main/java/com/vanced/manager/ui/dialogs/VancedPreferencesDialog.kt +++ b/app/src/main/java/com/vanced/manager/ui/dialogs/VancedPreferencesDialog.kt @@ -1,6 +1,5 @@ package com.vanced.manager.ui.dialogs -import android.content.Context import android.os.Bundle import android.view.LayoutInflater import android.view.ViewGroup @@ -21,8 +20,8 @@ class VancedPreferencesDialog : BindingBottomSheetDialogFragment): String { - return if (this == "latest") versions.reversed()[0] else this -} - -fun SharedPreferences.getInstallUrl() = getString("install_url", baseUrl) +fun String.getLatestAppVersion(versions: List): String = if (this == "latest") versions.reversed()[0] else this fun Context.lifecycleOwner(): LifecycleOwner? { var curContext = this @@ -73,14 +65,14 @@ fun Int.toHex(): String = java.lang.String.format("#%06X", 0xFFFFFF and this) //Material team decided to keep their LinearProgressIndicator final //At least extension methods exist fun LinearProgressIndicator.applyAccent() { - with(accentColor.value ?: context.getDefaultPrefs().getInt("manager_accent_color", defAccentColor)) { + with(accentColor.value ?: context.defPrefs.managerAccent) { setIndicatorColor(this) trackColor = ColorUtils.setAlphaComponent(this, 70) } } fun MaterialAlertDialogBuilder.applyAccent() { - with(accentColor.value ?: context.getDefaultPrefs().getInt("manager_accent_color", defAccentColor)) { + with(accentColor.value ?: context.defPrefs.managerAccent) { show().apply { getButton(DialogInterface.BUTTON_POSITIVE).setTextColor(this@with) getButton(DialogInterface.BUTTON_NEGATIVE).setTextColor(this@with) @@ -92,6 +84,6 @@ fun MaterialAlertDialogBuilder.applyAccent() { fun Context.writeServiceDScript(apkFPath: String, path: String, app: String) { val shellFileZ = SuFile.open("/data/adb/service.d/$app.sh") shellFileZ.createNewFile() - val code = """#!/system/bin/sh${"\n"}while [ "`getprop sys.boot_completed | tr -d '\r' `" != "1" ]; do sleep ${getDefaultPrefs().getInt("serviced_sleep_timer", 1)}; done${"\n"}chcon u:object_r:apk_data_file:s0 $apkFPath${"\n"}mount -o bind $apkFPath $path""" + val code = """#!/system/bin/sh${"\n"}while [ "`getprop sys.boot_completed | tr -d '\r' `" != "1" ]; do sleep ${defPrefs.serviceDSleepTimer}; done${"\n"}chcon u:object_r:apk_data_file:s0 $apkFPath${"\n"}mount -o bind $apkFPath $path""" SuFileOutputStream(shellFileZ).use { out -> out.write(code.toByteArray())} } diff --git a/app/src/main/java/com/vanced/manager/utils/InstallPrefs.kt b/app/src/main/java/com/vanced/manager/utils/InstallPrefs.kt new file mode 100644 index 0000000000..a3efc2b607 --- /dev/null +++ b/app/src/main/java/com/vanced/manager/utils/InstallPrefs.kt @@ -0,0 +1,16 @@ +package com.vanced.manager.utils + +import android.content.Context +import android.content.SharedPreferences +import androidx.core.content.edit + +val Context.installPrefs: SharedPreferences get() = getSharedPreferences("installPrefs", Context.MODE_PRIVATE) + +var SharedPreferences.lang + get() = getString("lang", getDefaultVancedLanguages()) + set(value) = edit { putString("lang", value) } + + +var SharedPreferences.theme + get() = getString("theme", "dark") + set(value) = edit { putString("theme", value) } \ No newline at end of file diff --git a/app/src/main/java/com/vanced/manager/utils/InternetTools.kt b/app/src/main/java/com/vanced/manager/utils/InternetTools.kt index 82d7d45e66..a3112e6a65 100644 --- a/app/src/main/java/com/vanced/manager/utils/InternetTools.kt +++ b/app/src/main/java/com/vanced/manager/utils/InternetTools.kt @@ -56,7 +56,7 @@ fun getFileNameFromUrl(url: String) = url.substring(url.lastIndexOf('/') + 1, ur suspend fun loadJson(context: Context) = withContext(Dispatchers.IO) { isFetching.postValue(true) - val installUrl = context.getDefaultPrefs().getString("install_url", baseUrl) + val installUrl = context.defPrefs.installUrl val calendar = Calendar.getInstance() val hour = calendar.get(Calendar.HOUR_OF_DAY) val minute = calendar.get(Calendar.MINUTE) @@ -79,7 +79,7 @@ suspend fun loadJson(context: Context) = withContext(Dispatchers.IO) { } private suspend fun getJsonString(file: String, obj: String, context: Context): String { - val installUrl = context.getDefaultPrefs().getString("install_url", baseUrl) + val installUrl = context.defPrefs.installUrl return try { getJson("$installUrl/$file")?.string(obj) ?: context.getString(R.string.unavailable) } catch (e: Exception) { diff --git a/app/src/main/java/com/vanced/manager/utils/Preferences.kt b/app/src/main/java/com/vanced/manager/utils/Preferences.kt new file mode 100644 index 0000000000..b4b527f989 --- /dev/null +++ b/app/src/main/java/com/vanced/manager/utils/Preferences.kt @@ -0,0 +1,49 @@ +package com.vanced.manager.utils + +import android.content.Context +import android.content.SharedPreferences +import androidx.core.content.edit +import androidx.preference.PreferenceManager.getDefaultSharedPreferences + +val Context.defPrefs: SharedPreferences get() = getDefaultSharedPreferences(this) + +var SharedPreferences.managerTheme + get() = getString("manager_theme", "System Default") + set(value) = edit { putString("manager_theme", value) } + +var SharedPreferences.managerAccent + get() = getInt("manager_accent_color", defAccentColor) + set(value) = edit { putInt("manager_accent_color", value) } + +var SharedPreferences.managerVariant + get() = getString("vanced_variant", "nonroot") + set(value) = edit { putString("vanced_variant", value) } + +var SharedPreferences.managerLang + get() = getString("manager_lang", "System Default") + set(value) = edit { putString("manager_lang", value) } + +var SharedPreferences.installUrl + get() = getString("install_url", baseUrl) + set(value) = edit { putString("install_url", value) } + +var SharedPreferences.vancedVersion + get() = getString("vanced_version", "latest") + set(value) = edit { putString("vanced_version", value) } + +var SharedPreferences.musicVersion + get() = getString("music_version", "latest") + set(value) = edit { putString("music_version", value) } + +var SharedPreferences.serviceDSleepTimer + get() = getInt("serviced_sleep_timer", 1) + set(value) = edit { putInt("serviced_sleep_timer", value) } + +var SharedPreferences.enableVanced + get() = getBoolean("enable_vanced", true) + set(value) = edit { putBoolean("enable_vanced", value) } + +var SharedPreferences.enableMusic + get() = getBoolean("enable_music", true) + set(value) = edit { putBoolean("enable_music", value) } + diff --git a/app/src/main/java/com/vanced/manager/utils/ThemeHelper.kt b/app/src/main/java/com/vanced/manager/utils/ThemeHelper.kt index 75b844bf88..427c4e2c4d 100644 --- a/app/src/main/java/com/vanced/manager/utils/ThemeHelper.kt +++ b/app/src/main/java/com/vanced/manager/utils/ThemeHelper.kt @@ -12,7 +12,7 @@ val mutableAccentColor = MutableLiveData() val accentColor: LiveData = mutableAccentColor fun Activity.setFinalTheme() { - when (getDefaultPrefs().getString("manager_theme", "System Default")) { + when (defPrefs.managerTheme) { "Light" -> setTheme(R.style.LightTheme) "Dark" -> setTheme(R.style.DarkTheme) "System Default" -> { From 850b3dda1ca0ff528c8cb2c43a9fd8a8e25b5b44 Mon Sep 17 00:00:00 2001 From: X1nto Date: Sun, 24 Jan 2021 22:17:19 +0400 Subject: [PATCH 08/22] added use of getters in more classes --- .../java/com/vanced/manager/adapter/AppListAdapter.kt | 9 ++++++--- app/src/main/java/com/vanced/manager/ui/MainActivity.kt | 2 +- .../ui/dialogs/InstallationFilesDetectedDialog.kt | 8 +++----- .../manager/ui/dialogs/VancedLanguageSelectionDialog.kt | 9 +++++---- .../vanced/manager/ui/dialogs/VancedPreferencesDialog.kt | 7 ++----- .../manager/ui/dialogs/VancedThemeSelectorDialog.kt | 6 +++--- 6 files changed, 20 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/com/vanced/manager/adapter/AppListAdapter.kt b/app/src/main/java/com/vanced/manager/adapter/AppListAdapter.kt index 0f62afb2d9..bea70cda2d 100644 --- a/app/src/main/java/com/vanced/manager/adapter/AppListAdapter.kt +++ b/app/src/main/java/com/vanced/manager/adapter/AppListAdapter.kt @@ -14,6 +14,9 @@ import com.vanced.manager.model.DataModel import com.vanced.manager.model.RootDataModel import com.vanced.manager.ui.dialogs.AppInfoDialog import com.vanced.manager.ui.viewmodels.HomeViewModel +import com.vanced.manager.utils.enableMusic +import com.vanced.manager.utils.enableVanced +import com.vanced.manager.utils.managerVariant class AppListAdapter( private val context: FragmentActivity, @@ -28,7 +31,7 @@ class AppListAdapter( private val prefs = getDefaultSharedPreferences(context) private var itemCount = 0 - private val isRoot = prefs.getString("vanced_variant", "nonroot") == "root" + private val isRoot = prefs.managerVariant == "root" inner class ListViewHolder(private val binding: ViewAppBinding) : RecyclerView.ViewHolder(binding.root) { val appCard = binding.appCard @@ -91,7 +94,7 @@ class AppListAdapter( init { - if (prefs.getBoolean("enable_vanced", true)) { + if (prefs.enableVanced) { if (isRoot) { rootDataModels.add(viewModel.vancedRootModel.value) } else { @@ -101,7 +104,7 @@ class AppListAdapter( itemCount++ } - if (prefs.getBoolean("enable_music", true)) { + if (prefs.enableMusic) { if (isRoot) { rootDataModels.add(viewModel.musicRootModel.value) } else { diff --git a/app/src/main/java/com/vanced/manager/ui/MainActivity.kt b/app/src/main/java/com/vanced/manager/ui/MainActivity.kt index e1e2e06297..d10e161e0b 100644 --- a/app/src/main/java/com/vanced/manager/ui/MainActivity.kt +++ b/app/src/main/java/com/vanced/manager/ui/MainActivity.kt @@ -142,7 +142,7 @@ class MainActivity : AppCompatActivity() { private fun initDialogs(firstLaunch: Boolean) { val prefs = getDefaultSharedPreferences(this) - val variant = prefs.getString("vanced_variant", "nonroot") + val variant = prefs.managerVariant prefs.getBoolean("show_root_dialog", true) if (intent?.data != null && intent.dataString?.startsWith("https") == true) { diff --git a/app/src/main/java/com/vanced/manager/ui/dialogs/InstallationFilesDetectedDialog.kt b/app/src/main/java/com/vanced/manager/ui/dialogs/InstallationFilesDetectedDialog.kt index c2b7b9a3d5..2174f676b6 100644 --- a/app/src/main/java/com/vanced/manager/ui/dialogs/InstallationFilesDetectedDialog.kt +++ b/app/src/main/java/com/vanced/manager/ui/dialogs/InstallationFilesDetectedDialog.kt @@ -3,7 +3,6 @@ package com.vanced.manager.ui.dialogs import android.os.Bundle import android.view.LayoutInflater import android.view.ViewGroup -import androidx.preference.PreferenceManager.getDefaultSharedPreferences import com.vanced.manager.R import com.vanced.manager.core.downloader.MicrogDownloader.startMicrogInstall import com.vanced.manager.core.downloader.MusicDownloader.startMusicInstall @@ -11,6 +10,8 @@ import com.vanced.manager.core.downloader.VancedDownloader.startVancedInstall import com.vanced.manager.core.ui.base.BindingBottomSheetDialogFragment import com.vanced.manager.core.ui.ext.showDialog import com.vanced.manager.databinding.DialogInstallationFilesDetectedBinding +import com.vanced.manager.utils.defPrefs +import com.vanced.manager.utils.managerVariant class InstallationFilesDetectedDialog : BindingBottomSheetDialogFragment() { @@ -55,10 +56,7 @@ class InstallationFilesDetectedDialog : BindingBottomSheetDialogFragment startVancedInstall( requireContext(), - getDefaultSharedPreferences(requireContext()).getString( - "vanced_variant", - "nonroot" - ) + context?.defPrefs?.managerVariant ) getString(R.string.music) -> startMusicInstall(requireContext()) getString(R.string.microg) -> startMicrogInstall(requireContext()) diff --git a/app/src/main/java/com/vanced/manager/ui/dialogs/VancedLanguageSelectionDialog.kt b/app/src/main/java/com/vanced/manager/ui/dialogs/VancedLanguageSelectionDialog.kt index 04ff5c1f1b..ffcec04d58 100644 --- a/app/src/main/java/com/vanced/manager/ui/dialogs/VancedLanguageSelectionDialog.kt +++ b/app/src/main/java/com/vanced/manager/ui/dialogs/VancedLanguageSelectionDialog.kt @@ -9,7 +9,6 @@ import android.view.ViewGroup.LayoutParams.MATCH_PARENT import android.view.ViewGroup.LayoutParams.WRAP_CONTENT import android.widget.LinearLayout import android.widget.Toast -import androidx.core.content.edit import com.google.android.material.checkbox.MaterialCheckBox import com.vanced.manager.R import com.vanced.manager.core.ui.base.BindingBottomSheetDialogFragment @@ -17,6 +16,8 @@ import com.vanced.manager.core.ui.ext.showDialog import com.vanced.manager.databinding.DialogVancedLanguageSelectionBinding import com.vanced.manager.ui.core.ThemedMaterialCheckbox import com.vanced.manager.utils.getDefaultVancedLanguages +import com.vanced.manager.utils.installPrefs +import com.vanced.manager.utils.lang import com.vanced.manager.utils.vanced import java.util.* @@ -30,7 +31,7 @@ class VancedLanguageSelectionDialog : BindingBottomSheetDialogFragment("langs")?.value - private val prefs by lazy { requireActivity().getSharedPreferences("installPrefs", Context.MODE_PRIVATE) } + private val prefs by lazy { requireActivity().installPrefs } override fun binding( inflater: LayoutInflater, @@ -56,14 +57,14 @@ class VancedLanguageSelectionDialog : BindingBottomSheetDialogFragment val loc = Locale(lang) val box = ThemedMaterialCheckbox(requireActivity()).apply { diff --git a/app/src/main/java/com/vanced/manager/ui/dialogs/VancedPreferencesDialog.kt b/app/src/main/java/com/vanced/manager/ui/dialogs/VancedPreferencesDialog.kt index 9218a96ad3..48c082a8da 100644 --- a/app/src/main/java/com/vanced/manager/ui/dialogs/VancedPreferencesDialog.kt +++ b/app/src/main/java/com/vanced/manager/ui/dialogs/VancedPreferencesDialog.kt @@ -3,7 +3,6 @@ package com.vanced.manager.ui.dialogs import android.os.Bundle import android.view.LayoutInflater import android.view.ViewGroup -import androidx.core.content.edit import com.vanced.manager.R import com.vanced.manager.core.ui.base.BindingBottomSheetDialogFragment import com.vanced.manager.core.ui.ext.showDialog @@ -36,7 +35,7 @@ class VancedPreferencesDialog : BindingBottomSheetDialogFragment() - installPrefs.getString("lang", getDefaultVancedLanguages())?.split(", ")?.toTypedArray()?.forEach { lang -> + installPrefs.lang?.split(", ")?.toTypedArray()?.forEach { lang -> val loc = Locale(lang) showLang.add(loc.getDisplayLanguage(loc).capitalize(Locale.ROOT)) } @@ -64,9 +63,7 @@ class VancedPreferencesDialog : BindingBottomSheetDialogFragment() { @@ -46,14 +46,14 @@ class VancedThemeSelectorDialog : BindingBottomSheetDialogFragment(prefs.getString("theme", "dark")) + val tag = root.findViewWithTag(prefs.theme) if (tag != null) { tag.isChecked = true } dialogSave.setOnClickListener { val checkedTag = binding.dialogRadiogroup.getCheckedButtonTag() if (checkedTag != null) { - prefs.edit { putString("theme", checkedTag) } + prefs.theme = checkedTag } dismiss() } From 14cabc7a8fc950cc1a958afd3d9f93a9ca0b8090 Mon Sep 17 00:00:00 2001 From: X1nto Date: Sun, 24 Jan 2021 22:18:58 +0400 Subject: [PATCH 09/22] optimised app version converter --- .../main/java/com/vanced/manager/utils/Extensions.kt | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/app/src/main/java/com/vanced/manager/utils/Extensions.kt b/app/src/main/java/com/vanced/manager/utils/Extensions.kt index f92a81f7d5..7e24e8242e 100644 --- a/app/src/main/java/com/vanced/manager/utils/Extensions.kt +++ b/app/src/main/java/com/vanced/manager/utils/Extensions.kt @@ -30,16 +30,7 @@ fun DialogFragment.show(activity: FragmentActivity) { } -//Not sure how much this can affect performance -//but if anyone can improve this even slightly, -//feel free to open a PR -fun List.convertToAppVersions(): List { - val versionsModel = arrayListOf("latest") - for (i in reversed().indices) { - versionsModel.add(this[i]) - } - return versionsModel -} +fun List.convertToAppVersions(): List = arrayListOf("latest") + reversed() fun String.convertToAppTheme(context: Context): String { return context.getString(R.string.light_plus_other, this.capitalize(Locale.ROOT)) From 77861b400cfa69cb1b21150fec2842571d274d1a Mon Sep 17 00:00:00 2001 From: X1nto Date: Sun, 24 Jan 2021 23:14:03 +0400 Subject: [PATCH 10/22] unhardcoded vanced themes in installer (kinda) --- app/src/main/java/com/vanced/manager/utils/PackageHelper.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt b/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt index a22447300a..8a63869746 100644 --- a/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt +++ b/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt @@ -32,7 +32,7 @@ object PackageHelper { const val apkInstallPath = "/data/adb" private const val INSTALLER_TAG = "VMInstall" - private val vancedThemes = arrayOf("black", "dark", "pink", "blue") + private val vancedThemes = vanced.value?.array("themes")?.value ?: arrayOf("black", "dark", "pink", "blue") init { Shell.enableVerboseLogging = BuildConfig.DEBUG From 5fb41b1f69313d97f7fcb1d73d645e70e12872dc Mon Sep 17 00:00:00 2001 From: KevinX8 Date: Mon, 25 Jan 2021 11:53:18 +0000 Subject: [PATCH 11/22] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index fafd2718d6..3188742978 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ Pull requests should be made to the Dev branch as that is the working branch, ma For anyone who wants to provide translations please submit them to https://crowdin.com/project/vanced-manager as we also use it for YouTube Vanced. Any issues with translations should be posted there too. ====== Vanced FAQ (from the faq branch) now available on the playstore! https://play.google.com/store/apps/details?id=com.vanced.faq +##FAQ has just been suspeneded due to "Impersonating Vanced", an appeal has been filed, reporting other apps which impersonate vanced on the playstore is appreciated. [![Github All Releases](https://img.shields.io/github/downloads/YTVanced/VancedManager/total.svg)](https://github.com/YTVanced/VancedManager/releases/latest) [![Github All Releases](https://img.shields.io/github/release/YTVanced/VancedManager.svg)](https://github.com/YTVanced/VancedManager/releases/latest) # Vanced Manager From c2fe53383661e3e352931dd1f6a91e264733cefe Mon Sep 17 00:00:00 2001 From: KevinX8 Date: Mon, 25 Jan 2021 11:53:40 +0000 Subject: [PATCH 12/22] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3188742978..bd7728cb87 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Pull requests should be made to the Dev branch as that is the working branch, ma For anyone who wants to provide translations please submit them to https://crowdin.com/project/vanced-manager as we also use it for YouTube Vanced. Any issues with translations should be posted there too. ====== Vanced FAQ (from the faq branch) now available on the playstore! https://play.google.com/store/apps/details?id=com.vanced.faq -##FAQ has just been suspeneded due to "Impersonating Vanced", an appeal has been filed, reporting other apps which impersonate vanced on the playstore is appreciated. +## FAQ has just been suspeneded due to "Impersonating Vanced", an appeal has been filed, reporting other apps which impersonate vanced on the playstore is appreciated. [![Github All Releases](https://img.shields.io/github/downloads/YTVanced/VancedManager/total.svg)](https://github.com/YTVanced/VancedManager/releases/latest) [![Github All Releases](https://img.shields.io/github/release/YTVanced/VancedManager.svg)](https://github.com/YTVanced/VancedManager/releases/latest) # Vanced Manager From b31dbda62427259ee1f2c4cd8c81de72aac82904 Mon Sep 17 00:00:00 2001 From: KevinX8 Date: Mon, 25 Jan 2021 11:59:43 +0000 Subject: [PATCH 13/22] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bd7728cb87..61fd21581c 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Pull requests should be made to the Dev branch as that is the working branch, ma For anyone who wants to provide translations please submit them to https://crowdin.com/project/vanced-manager as we also use it for YouTube Vanced. Any issues with translations should be posted there too. ====== Vanced FAQ (from the faq branch) now available on the playstore! https://play.google.com/store/apps/details?id=com.vanced.faq -## FAQ has just been suspeneded due to "Impersonating Vanced", an appeal has been filed, reporting other apps which impersonate vanced on the playstore is appreciated. +## The FAQ app has just been suspended due to "Impersonating Vanced", an appeal has been filed, reporting other apps which impersonate Vanced on the play store is appreciated. [![Github All Releases](https://img.shields.io/github/downloads/YTVanced/VancedManager/total.svg)](https://github.com/YTVanced/VancedManager/releases/latest) [![Github All Releases](https://img.shields.io/github/release/YTVanced/VancedManager.svg)](https://github.com/YTVanced/VancedManager/releases/latest) # Vanced Manager From a12966d8f5f60015054f838b32fd338c70632794 Mon Sep 17 00:00:00 2001 From: X1nto Date: Mon, 25 Jan 2021 20:54:19 +0400 Subject: [PATCH 14/22] added backup URL fallback --- .../vanced/manager/adapter/SponsorAdapter.kt | 20 ----- .../core/downloader/MicrogDownloader.kt | 12 ++- .../core/downloader/MusicDownloader.kt | 2 +- .../core/downloader/VancedDownloader.kt | 86 +++++++++---------- .../manager/ui/dialogs/URLChangeDialog.kt | 1 - .../ui/dialogs/VancedPreferencesDialog.kt | 1 + .../com/vanced/manager/utils/InternetTools.kt | 29 ++++--- 7 files changed, 67 insertions(+), 84 deletions(-) diff --git a/app/src/main/java/com/vanced/manager/adapter/SponsorAdapter.kt b/app/src/main/java/com/vanced/manager/adapter/SponsorAdapter.kt index d69baa9c63..b7c7d8a0da 100644 --- a/app/src/main/java/com/vanced/manager/adapter/SponsorAdapter.kt +++ b/app/src/main/java/com/vanced/manager/adapter/SponsorAdapter.kt @@ -56,26 +56,6 @@ class SponsorAdapter( override fun getItemCount(): Int = 2 -// fun getCountryFromIP(ipAddress: String?): String? { -// val db = context.assets.open("GeoLite2-Country.mmdb") -// val reader = DatabaseReader.Builder(db).build() -// val inetIp = InetAddress.getByName(ipAddress) -// return reader.country(inetIp).country.isoCode -// } -// -// init { -// json.addOnPropertyChangedCallback(object : Observable.OnPropertyChangedCallback() { -// override fun onPropertyChanged(sender: Observable?, propertyId: Int) { -// val wm = context.applicationContext.getSystemService(WIFI_SERVICE) as WifiManager? -// val ip: String = formatIpAddress(wm!!.connectionInfo.ipAddress) -// val promotedTiers = json.get()?.array("tier2")?.value!! + json.get()?.array("tier3")?.value!! -// if (promotedTiers.any { getCountryFromIP(ip)?.contains(it)!! }) -// sponsors.removeAt(1) -// } -// -// }) -// } - companion object { const val BRAVE = "https://vancedapp.com/brave" const val ADGUARD = "https://adguard.com/?aid=31141&source=manager" diff --git a/app/src/main/java/com/vanced/manager/core/downloader/MicrogDownloader.kt b/app/src/main/java/com/vanced/manager/core/downloader/MicrogDownloader.kt index bea1510e73..6b7030711c 100644 --- a/app/src/main/java/com/vanced/manager/core/downloader/MicrogDownloader.kt +++ b/app/src/main/java/com/vanced/manager/core/downloader/MicrogDownloader.kt @@ -14,13 +14,11 @@ object MicrogDownloader { fun downloadMicrog(context: Context) { val url = microg.value?.string("url") ?: "" - context.defPrefs.installUrl?.let { - download(url, "$it/", folderName, fileName, context, onDownloadComplete = { - startMicrogInstall(context) - }, onError = { - downloadProgress.value?.downloadingFile?.postValue(context.getString(R.string.error_downloading, fileName)) - }) - } + download(url, "$baseInstallUrl/", folderName, fileName, context, onDownloadComplete = { + startMicrogInstall(context) + }, onError = { + downloadProgress.value?.downloadingFile?.postValue(context.getString(R.string.error_downloading, fileName)) + }) } diff --git a/app/src/main/java/com/vanced/manager/core/downloader/MusicDownloader.kt b/app/src/main/java/com/vanced/manager/core/downloader/MusicDownloader.kt index e6c534cb6c..cafc204177 100644 --- a/app/src/main/java/com/vanced/manager/core/downloader/MusicDownloader.kt +++ b/app/src/main/java/com/vanced/manager/core/downloader/MusicDownloader.kt @@ -26,7 +26,7 @@ object MusicDownloader { version = prefs.musicVersion?.getLatestAppVersion(musicVersions.value?.value ?: listOf("")) versionCode = music.value?.int("versionCode") variant = prefs.managerVariant - baseurl = "${prefs.installUrl}/music/v$version" + baseurl = "$baseInstallUrl/music/v$version" folderName = "music/$variant" downloadPath = context.getExternalFilesDir(folderName)?.path hashUrl = "$baseurl/hash.json" diff --git a/app/src/main/java/com/vanced/manager/core/downloader/VancedDownloader.kt b/app/src/main/java/com/vanced/manager/core/downloader/VancedDownloader.kt index 564038b010..7ffa47610f 100644 --- a/app/src/main/java/com/vanced/manager/core/downloader/VancedDownloader.kt +++ b/app/src/main/java/com/vanced/manager/core/downloader/VancedDownloader.kt @@ -22,7 +22,6 @@ object VancedDownloader { private lateinit var prefs: SharedPreferences private lateinit var defPrefs: SharedPreferences private lateinit var arch: String - private var installUrl: String? = null private var variant: String? = null private var theme: String? = null private var lang = mutableListOf() @@ -46,13 +45,12 @@ object VancedDownloader { folderName = "vanced/$variant" downloadPath = context.getExternalFilesDir(folderName)?.path File(downloadPath.toString()).deleteRecursively() - installUrl = defPrefs.installUrl prefs.lang?.let { lang = it.split(", ").toMutableList() } theme = prefs.theme vancedVersion = defPrefs.vancedVersion?.getLatestAppVersion(vancedVersions.value?.value ?: listOf("")) - themePath = "$installUrl/apks/v$vancedVersion/$variant/Theme" + themePath = "$baseInstallUrl/apks/v$vancedVersion/$variant/Theme" hashUrl = "apks/v$vancedVersion/$variant/Theme/hash.json" arch = getArch() count = 0 @@ -70,57 +68,55 @@ object VancedDownloader { private fun downloadSplits(context: Context, type: String = "theme") { val url = when (type) { "theme" -> "$themePath/$theme.apk" - "arch" -> "$installUrl/apks/v$vancedVersion/$variant/Arch/split_config.$arch.apk" + "arch" -> "$baseInstallUrl/apks/v$vancedVersion/$variant/Arch/split_config.$arch.apk" "stock" -> "$themePath/stock.apk" "dpi" -> "$themePath/dpi.apk" - "lang" -> "$installUrl/apks/v$vancedVersion/$variant/Language/split_config.${lang[count]}.apk" + "lang" -> "$baseInstallUrl/apks/v$vancedVersion/$variant/Language/split_config.${lang[count]}.apk" else -> throw NotImplementedError("This type of APK is NOT valid. What the hell did you even do?") } - installUrl?.let { - download(url, "$it/", folderName!!, getFileNameFromUrl(url), context, onDownloadComplete = { - when (type) { - "theme" -> - if (variant == "root") { - if (validateTheme(downloadPath!!, theme!!, hashUrl, context)) { - if (downloadStockCheck(vancedRootPkg, vancedVersionCode, context)) - downloadSplits(context, "arch") - else - startVancedInstall(context) - } else - downloadSplits(context, "theme") + download(url, "$baseInstallUrl/", folderName!!, getFileNameFromUrl(url), context, onDownloadComplete = { + when (type) { + "theme" -> + if (variant == "root") { + if (validateTheme(downloadPath!!, theme!!, hashUrl, context)) { + if (downloadStockCheck(vancedRootPkg, vancedVersionCode, context)) + downloadSplits(context, "arch") + else + startVancedInstall(context) } else - downloadSplits(context, "arch") - "arch" -> if (variant == "root") downloadSplits(context, "stock") else downloadSplits(context, "lang") - "stock" -> downloadSplits(context, "dpi") - "dpi" -> downloadSplits(context, "lang") - "lang" -> { - count++ - succesfulLangCount++ - if (count < lang.size) - downloadSplits(context, "lang") - else - startVancedInstall(context) - } - - } - }, onError = { - if (type == "lang") { + downloadSplits(context, "theme") + } else + downloadSplits(context, "arch") + "arch" -> if (variant == "root") downloadSplits(context, "stock") else downloadSplits(context, "lang") + "stock" -> downloadSplits(context, "dpi") + "dpi" -> downloadSplits(context, "lang") + "lang" -> { count++ - when { - count < lang.size -> downloadSplits(context, "lang") - succesfulLangCount == 0 -> { - lang.add("en") - downloadSplits(context, "lang") - } - else -> startVancedInstall(context) - } + succesfulLangCount++ + if (count < lang.size) + downloadSplits(context, "lang") + else + startVancedInstall(context) + } - } else { - downloadProgress.value?.downloadingFile?.postValue(context.getString(R.string.error_downloading, getFileNameFromUrl(url))) + } + }, onError = { + if (type == "lang") { + count++ + when { + count < lang.size -> downloadSplits(context, "lang") + succesfulLangCount == 0 -> { + lang.add("en") + downloadSplits(context, "lang") + } + else -> startVancedInstall(context) } - }) - } + + } else { + downloadProgress.value?.downloadingFile?.postValue(context.getString(R.string.error_downloading, getFileNameFromUrl(url))) + } + }) } fun startVancedInstall(context: Context, variant: String? = this.variant) { diff --git a/app/src/main/java/com/vanced/manager/ui/dialogs/URLChangeDialog.kt b/app/src/main/java/com/vanced/manager/ui/dialogs/URLChangeDialog.kt index 63942dd3e9..f4a541a1a6 100644 --- a/app/src/main/java/com/vanced/manager/ui/dialogs/URLChangeDialog.kt +++ b/app/src/main/java/com/vanced/manager/ui/dialogs/URLChangeDialog.kt @@ -11,7 +11,6 @@ import com.vanced.manager.core.ui.base.BindingDialogFragment import com.vanced.manager.databinding.DialogCustomUrlBinding import com.vanced.manager.utils.baseUrl import com.vanced.manager.utils.defPrefs -import com.vanced.manager.utils.installUrl import com.vanced.manager.utils.loadJson import kotlinx.coroutines.launch diff --git a/app/src/main/java/com/vanced/manager/ui/dialogs/VancedPreferencesDialog.kt b/app/src/main/java/com/vanced/manager/ui/dialogs/VancedPreferencesDialog.kt index 48c082a8da..5927c0a4f2 100644 --- a/app/src/main/java/com/vanced/manager/ui/dialogs/VancedPreferencesDialog.kt +++ b/app/src/main/java/com/vanced/manager/ui/dialogs/VancedPreferencesDialog.kt @@ -62,6 +62,7 @@ class VancedPreferencesDialog : BindingBottomSheetDialogFragment>() val isFetching = MutableLiveData() -//var braveTiers = MutableLiveData() +var isMicrogBroken: Boolean = false + +var baseInstallUrl = "" fun openUrl(url: String, color: Int, context: Context) { try { @@ -57,18 +60,25 @@ fun getFileNameFromUrl(url: String) = url.substring(url.lastIndexOf('/') + 1, ur suspend fun loadJson(context: Context) = withContext(Dispatchers.IO) { isFetching.postValue(true) val installUrl = context.defPrefs.installUrl + if (baseInstallUrl == "" && installUrl != null) { + baseInstallUrl = installUrl + } + + baseInstallUrl.httpGet().response { _, response, _ -> + if (response.statusCode / 100 != 2) { + baseInstallUrl = "https://mirror.codebucket.de/vanced" + } + } + val calendar = Calendar.getInstance() val hour = calendar.get(Calendar.HOUR_OF_DAY) val minute = calendar.get(Calendar.MINUTE) val second = calendar.get(Calendar.SECOND) val fetchTime = "fetchTime=$hour$minute$second" - val latest = getJson("$installUrl/latest.json?$fetchTime") - val versions = getJson("$installUrl/versions.json?$fetchTime") -// braveTiers.apply { -// set(getJson("$installUrl/sponsor.json")) -// notifyChange() -// } - + + val latest = getJson("$baseInstallUrl/latest.json?$fetchTime") + val versions = getJson("$baseInstallUrl/versions.json?$fetchTime") + isMicrogBroken = latest?.boolean("is_microg_broken") ?: false vanced.postValue(latest?.obj("vanced")) vancedVersions.postValue(versions?.array("vanced") ) music.postValue(latest?.obj("music")) @@ -79,9 +89,8 @@ suspend fun loadJson(context: Context) = withContext(Dispatchers.IO) { } private suspend fun getJsonString(file: String, obj: String, context: Context): String { - val installUrl = context.defPrefs.installUrl return try { - getJson("$installUrl/$file")?.string(obj) ?: context.getString(R.string.unavailable) + getJson("$baseInstallUrl/$file")?.string(obj) ?: context.getString(R.string.unavailable) } catch (e: Exception) { Log.e(TAG, "Error: ", e) context.getString(R.string.unavailable) From b6fc2cadbca39c4d4416770c6b47bf62e9ede1f8 Mon Sep 17 00:00:00 2001 From: Coin Date: Tue, 26 Jan 2021 15:31:05 +0800 Subject: [PATCH 15/22] Set installer package to Play Store for root variant In some Android 11 installation, Play Services refuse to work if the calling package does not come from a legit source (e.g. Play Store). Be sloppy about version detection and whether the operation succeeded as this appears to happen only in Android 11. --- app/src/main/AndroidManifest.xml | 1 + .../java/com/vanced/manager/utils/AppUtils.kt | 1 + .../com/vanced/manager/utils/PackageHelper.kt | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 620ade3fe0..068e05f76e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ + line.contains("Success") }) { + Log.d(INSTALLER_TAG, "Installer package successfully set") + return + } + Log.d(INSTALLER_TAG, "Failed setting installer package") + } catch (e: PackageManager.NameNotFoundException) { + Log.d(INSTALLER_TAG, "Installer package $installer not found. Skipping setting installer") + } + } } From 1c62fb45c1f40eadf6f4bc160676ed4ad42f4c18 Mon Sep 17 00:00:00 2001 From: X1nto Date: Wed, 27 Jan 2021 20:58:18 +0400 Subject: [PATCH 16/22] Improved mirror fallback and added a check for broken microg --- .../vanced/manager/adapter/AppListAdapter.kt | 3 -- .../core/downloader/VancedDownloader.kt | 4 +- .../com/vanced/manager/model/DataModel.kt | 40 ++++++++----------- .../com/vanced/manager/model/RootDataModel.kt | 4 +- .../manager/ui/dialogs/AppDownloadDialog.kt | 5 ++- .../ui/dialogs/ManagerVariantDialog.kt | 7 ++-- .../ui/dialogs/MusicPreferencesDialog.kt | 2 +- .../manager/ui/dialogs/URLChangeDialog.kt | 5 +-- .../ui/dialogs/VancedPreferencesDialog.kt | 37 +++++++++++++---- .../manager/ui/viewmodels/HomeViewModel.kt | 18 +++++---- .../com/vanced/manager/utils/Extensions.kt | 2 +- .../com/vanced/manager/utils/InternetTools.kt | 31 +++++++++++--- .../com/vanced/manager/utils/PackageHelper.kt | 2 +- app/src/main/res/values/strings.xml | 2 + 14 files changed, 101 insertions(+), 61 deletions(-) diff --git a/app/src/main/java/com/vanced/manager/adapter/AppListAdapter.kt b/app/src/main/java/com/vanced/manager/adapter/AppListAdapter.kt index bea70cda2d..69868ad066 100644 --- a/app/src/main/java/com/vanced/manager/adapter/AppListAdapter.kt +++ b/app/src/main/java/com/vanced/manager/adapter/AppListAdapter.kt @@ -39,7 +39,6 @@ class AppListAdapter( val dataModel = if (isRoot) rootDataModels[position] else dataModels[position] with(binding) { appName.text = dataModel?.appName - appInstallButton.text = dataModel?.buttonTxt?.value dataModel?.buttonTxt?.observe(lifecycleOwner) { appInstallButton.text = it } @@ -60,11 +59,9 @@ class AppListAdapter( appUninstall.isVisible = it appLaunch.isVisible = it } - appRemoteVersion.text = dataModel?.versionName?.value dataModel?.versionName?.observe(lifecycleOwner) { appRemoteVersion.text = it } - appInstalledVersion.text = dataModel?.installedVersionName?.value dataModel?.installedVersionName?.observe(lifecycleOwner) { appInstalledVersion.text = it } diff --git a/app/src/main/java/com/vanced/manager/core/downloader/VancedDownloader.kt b/app/src/main/java/com/vanced/manager/core/downloader/VancedDownloader.kt index 7ffa47610f..1082574f1e 100644 --- a/app/src/main/java/com/vanced/manager/core/downloader/VancedDownloader.kt +++ b/app/src/main/java/com/vanced/manager/core/downloader/VancedDownloader.kt @@ -38,7 +38,7 @@ object VancedDownloader { private var downloadPath: String? = null private var folderName: String? = null - fun downloadVanced(context: Context) { + fun downloadVanced(context: Context, version: String?) { defPrefs = context.defPrefs prefs = context.installPrefs variant = defPrefs.managerVariant @@ -49,7 +49,7 @@ object VancedDownloader { lang = it.split(", ").toMutableList() } theme = prefs.theme - vancedVersion = defPrefs.vancedVersion?.getLatestAppVersion(vancedVersions.value?.value ?: listOf("")) + vancedVersion = version ?: defPrefs.vancedVersion?.getLatestAppVersion(vancedVersions.value?.value ?: listOf("")) themePath = "$baseInstallUrl/apks/v$vancedVersion/$variant/Theme" hashUrl = "apks/v$vancedVersion/$variant/Theme/hash.json" arch = getArch() diff --git a/app/src/main/java/com/vanced/manager/model/DataModel.kt b/app/src/main/java/com/vanced/manager/model/DataModel.kt index 0b91d637e8..b580d163eb 100644 --- a/app/src/main/java/com/vanced/manager/model/DataModel.kt +++ b/app/src/main/java/com/vanced/manager/model/DataModel.kt @@ -3,19 +3,17 @@ package com.vanced.manager.model import android.content.Context import android.graphics.drawable.Drawable import android.os.Build +import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import com.beust.klaxon.JsonObject import com.vanced.manager.R import com.vanced.manager.utils.PackageHelper.isPackageInstalled -import com.vanced.manager.utils.lifecycleOwner -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch open class DataModel( private val jsonObject: LiveData, private val context: Context, + lifecycleOwner: LifecycleOwner, val appPkg: String, val appName: String, val appIcon: Drawable?, @@ -30,33 +28,27 @@ open class DataModel( val buttonTxt = MutableLiveData() val changelog = MutableLiveData() - private fun fetch() = CoroutineScope(Dispatchers.IO).launch { + private fun fetch() { val jobj = jsonObject.value - isAppInstalled.postValue(isAppInstalled(appPkg)) - versionCode.postValue(jobj?.int("versionCode") ?: 0) - versionName.postValue(jobj?.string("version")?.removeSuffix("-vanced") ?: context.getString(R.string.unavailable)) - changelog.postValue(jobj?.string("changelog") ?: context.getString(R.string.unavailable)) + isAppInstalled.value = isAppInstalled(appPkg) + versionCode.value = jobj?.int("versionCode") ?: 0 + versionName.value = jobj?.string("version")?.removeSuffix("-vanced") ?: context.getString(R.string.unavailable) + changelog.value = jobj?.string("changelog") ?: context.getString(R.string.unavailable) } init { fetch() - with(context.lifecycleOwner()) { - this?.let { - jsonObject.observe(it) { - fetch() - } + with(lifecycleOwner) { + jsonObject.observe(this) { + fetch() } - this?.let { - isAppInstalled.observe(it) { - installedVersionCode.value = getPkgVersionCode(appPkg) - installedVersionName.value = getPkgVersionName(appPkg) - } + isAppInstalled.observe(this) { + installedVersionCode.value = getPkgVersionCode(appPkg) + installedVersionName.value = getPkgVersionName(appPkg) } - this?.let { - versionCode.observe(it) { versionCode -> - installedVersionCode.observe(it) { installedVersionCode -> - buttonTxt.value = compareInt(installedVersionCode, versionCode) - } + versionCode.observe(this) { versionCode -> + installedVersionCode.observe(this) { installedVersionCode -> + buttonTxt.value = compareInt(installedVersionCode, versionCode) } } } diff --git a/app/src/main/java/com/vanced/manager/model/RootDataModel.kt b/app/src/main/java/com/vanced/manager/model/RootDataModel.kt index bf80ac837a..952056d076 100644 --- a/app/src/main/java/com/vanced/manager/model/RootDataModel.kt +++ b/app/src/main/java/com/vanced/manager/model/RootDataModel.kt @@ -2,6 +2,7 @@ package com.vanced.manager.model import android.content.Context import android.graphics.drawable.Drawable +import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LiveData import com.beust.klaxon.JsonObject import com.vanced.manager.utils.PackageHelper @@ -9,6 +10,7 @@ import com.vanced.manager.utils.PackageHelper class RootDataModel( jsonObject: LiveData, context: Context, + lifecycleOwner: LifecycleOwner, appPkg: String, appName: String, appIcon: Drawable?, @@ -19,7 +21,7 @@ class RootDataModel( //Ironic, isn't it? private val scriptName: String? ): DataModel( - jsonObject, context, appPkg, appName, appIcon + jsonObject, context, lifecycleOwner, appPkg, appName, appIcon ) { override fun isAppInstalled(pkg: String): Boolean { diff --git a/app/src/main/java/com/vanced/manager/ui/dialogs/AppDownloadDialog.kt b/app/src/main/java/com/vanced/manager/ui/dialogs/AppDownloadDialog.kt index 94a7734dcd..f4f4d0c386 100644 --- a/app/src/main/java/com/vanced/manager/ui/dialogs/AppDownloadDialog.kt +++ b/app/src/main/java/com/vanced/manager/ui/dialogs/AppDownloadDialog.kt @@ -26,14 +26,17 @@ class AppDownloadDialog : BindingDialogFragment() { const val CLOSE_DIALOG = "close_dialog" private const val TAG_APP = "TAG_APP" + private const val TAG_VERSION = "TAG_VERSION" private const val TAG_INSTALLING = "TAG_INSTALLING" fun newInstance( app: String, + version: String? = null, installing: Boolean = false ): AppDownloadDialog = AppDownloadDialog().apply { arguments = Bundle().apply { putString(TAG_APP, app) + putString(TAG_VERSION, version) putBoolean(TAG_INSTALLING, installing) } } @@ -70,7 +73,7 @@ class AppDownloadDialog : BindingDialogFragment() { appDownloadHeader.text = app if (arguments?.getBoolean(TAG_INSTALLING) == false) { when (app) { - getString(R.string.vanced) -> downloadVanced(requireContext()) + getString(R.string.vanced) -> downloadVanced(requireContext(), arguments?.getString(TAG_VERSION)) getString(R.string.music) -> downloadMusic(requireContext()) getString(R.string.microg) -> downloadMicrog(requireContext()) } diff --git a/app/src/main/java/com/vanced/manager/ui/dialogs/ManagerVariantDialog.kt b/app/src/main/java/com/vanced/manager/ui/dialogs/ManagerVariantDialog.kt index 7a4ba81589..79dd203eeb 100644 --- a/app/src/main/java/com/vanced/manager/ui/dialogs/ManagerVariantDialog.kt +++ b/app/src/main/java/com/vanced/manager/ui/dialogs/ManagerVariantDialog.kt @@ -39,13 +39,12 @@ class ManagerVariantDialog : BindingBottomSheetDialogFragment() { @@ -61,6 +59,7 @@ class URLChangeDialog : BindingDialogFragment() { private fun saveUrl(url: String) { lifecycleScope.launch { prefs.installUrl = url + baseInstallUrl = url loadJson(requireActivity()) dismiss() } diff --git a/app/src/main/java/com/vanced/manager/ui/dialogs/VancedPreferencesDialog.kt b/app/src/main/java/com/vanced/manager/ui/dialogs/VancedPreferencesDialog.kt index 5927c0a4f2..3c53c3c108 100644 --- a/app/src/main/java/com/vanced/manager/ui/dialogs/VancedPreferencesDialog.kt +++ b/app/src/main/java/com/vanced/manager/ui/dialogs/VancedPreferencesDialog.kt @@ -3,11 +3,14 @@ package com.vanced.manager.ui.dialogs import android.os.Bundle import android.view.LayoutInflater import android.view.ViewGroup +import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.vanced.manager.R import com.vanced.manager.core.ui.base.BindingBottomSheetDialogFragment import com.vanced.manager.core.ui.ext.showDialog import com.vanced.manager.databinding.DialogVancedPreferencesBinding import com.vanced.manager.utils.* +import com.vanced.manager.utils.AppUtils.vancedPkg +import com.vanced.manager.utils.PackageHelper.isPackageInstalled import java.util.* class VancedPreferencesDialog : BindingBottomSheetDialogFragment() { @@ -39,7 +42,7 @@ class VancedPreferencesDialog : BindingBottomSheetDialogFragment + downloadVanced("15.43.32") + } + setNeutralButton(R.string.cancel) { _, _ -> + dismiss() + } + create() + }.applyAccent() + return@setOnClickListener + } + + downloadVanced() } } } diff --git a/app/src/main/java/com/vanced/manager/ui/viewmodels/HomeViewModel.kt b/app/src/main/java/com/vanced/manager/ui/viewmodels/HomeViewModel.kt index cd2516b662..0e07a10876 100644 --- a/app/src/main/java/com/vanced/manager/ui/viewmodels/HomeViewModel.kt +++ b/app/src/main/java/com/vanced/manager/ui/viewmodels/HomeViewModel.kt @@ -155,14 +155,16 @@ open class HomeViewModel(private val activity: FragmentActivity): ViewModel() { } init { - if (variant == "root") { - vancedRootModel.value = RootDataModel(vanced, activity, vancedRootPkg, activity.getString(R.string.vanced), AppCompatResources.getDrawable(activity, R.drawable.ic_vanced), "vanced") - musicRootModel.value = RootDataModel(music, activity, musicRootPkg, activity.getString(R.string.music), AppCompatResources.getDrawable(activity, R.drawable.ic_music), "music") - } else { - vancedModel.value = DataModel(vanced, activity, vancedPkg, activity.getString(R.string.vanced), AppCompatResources.getDrawable(activity, R.drawable.ic_vanced)) - musicModel.value = DataModel(music, activity, musicPkg, activity.getString(R.string.music), AppCompatResources.getDrawable(activity, R.drawable.ic_music)) - microgModel.value = DataModel(microg, activity, microgPkg, activity.getString(R.string.microg), AppCompatResources.getDrawable(activity, R.drawable.ic_microg)) + with (activity) { + if (variant == "root") { + vancedRootModel.value = RootDataModel(vanced, this, this, vancedRootPkg, this.getString(R.string.vanced), AppCompatResources.getDrawable(this, R.drawable.ic_vanced), "vanced") + musicRootModel.value = RootDataModel(music, this, this, musicRootPkg, this.getString(R.string.music), AppCompatResources.getDrawable(this, R.drawable.ic_music), "music") + } else { + vancedModel.value = DataModel(vanced, this, this, vancedPkg, this.getString(R.string.vanced), AppCompatResources.getDrawable(this, R.drawable.ic_vanced)) + musicModel.value = DataModel(music, this, this, musicPkg, this.getString(R.string.music), AppCompatResources.getDrawable(this, R.drawable.ic_music)) + microgModel.value = DataModel(microg, this, this, microgPkg, this.getString(R.string.microg), AppCompatResources.getDrawable(this, R.drawable.ic_microg)) + } + managerModel.value = DataModel(manager, this, this, managerPkg, this.getString(R.string.app_name), AppCompatResources.getDrawable(this, R.mipmap.ic_launcher)) } - managerModel.value = DataModel(manager, activity, managerPkg, activity.getString(R.string.app_name), AppCompatResources.getDrawable(activity, R.mipmap.ic_launcher)) } } diff --git a/app/src/main/java/com/vanced/manager/utils/Extensions.kt b/app/src/main/java/com/vanced/manager/utils/Extensions.kt index 7e24e8242e..f3dbafc4e2 100644 --- a/app/src/main/java/com/vanced/manager/utils/Extensions.kt +++ b/app/src/main/java/com/vanced/manager/utils/Extensions.kt @@ -30,7 +30,7 @@ fun DialogFragment.show(activity: FragmentActivity) { } -fun List.convertToAppVersions(): List = arrayListOf("latest") + reversed() +fun List.convertToAppVersions(): List = listOf("latest") + reversed() fun String.convertToAppTheme(context: Context): String { return context.getString(R.string.light_plus_other, this.capitalize(Locale.ROOT)) diff --git a/app/src/main/java/com/vanced/manager/utils/InternetTools.kt b/app/src/main/java/com/vanced/manager/utils/InternetTools.kt index 8f16481122..1e684ffeb6 100644 --- a/app/src/main/java/com/vanced/manager/utils/InternetTools.kt +++ b/app/src/main/java/com/vanced/manager/utils/InternetTools.kt @@ -13,12 +13,16 @@ import androidx.lifecycle.MutableLiveData import androidx.preference.PreferenceManager.getDefaultSharedPreferences import com.beust.klaxon.JsonArray import com.beust.klaxon.JsonObject -import com.github.kittinunf.fuel.httpGet import com.vanced.manager.R import com.vanced.manager.utils.AppUtils.generateChecksum import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import java.io.File +import java.io.IOException +import java.net.ConnectException +import java.net.HttpURLConnection +import java.net.SocketTimeoutException +import java.net.URL import java.util.* private const val TAG = "VMNetTools" @@ -57,6 +61,8 @@ fun openUrl(url: String, color: Int, context: Context) { fun getFileNameFromUrl(url: String) = url.substring(url.lastIndexOf('/') + 1, url.length) +//TODO: Use a better connection method that doesn't cause inappropriate blocks +@Suppress("BlockingMethodInNonBlockingContext") suspend fun loadJson(context: Context) = withContext(Dispatchers.IO) { isFetching.postValue(true) val installUrl = context.defPrefs.installUrl @@ -64,18 +70,33 @@ suspend fun loadJson(context: Context) = withContext(Dispatchers.IO) { baseInstallUrl = installUrl } - baseInstallUrl.httpGet().response { _, response, _ -> - if (response.statusCode / 100 != 2) { - baseInstallUrl = "https://mirror.codebucket.de/vanced" + try { + val latestbaseUrl = "$baseInstallUrl/latest.json" + val connection = URL(latestbaseUrl).openConnection() as HttpURLConnection + connection.apply { + connectTimeout = 5000 + readTimeout = 5000 + connect() + } + if (connection.responseCode != 200) { + Log.d(TAG, latestbaseUrl + ": " + connection.responseCode.toString()) + baseInstallUrl = "https://mirror.codebucket.de/vanced/api/v1" } + } catch (e: IOException) { + baseInstallUrl = "https://mirror.codebucket.de/vanced/api/v1" + } catch (e: SocketTimeoutException) { + Log.d(TAG, "connection timed out") + baseInstallUrl = "https://mirror.codebucket.de/vanced/api/v1" } + Log.d(TAG, "Fetching using URL: $baseInstallUrl") + val calendar = Calendar.getInstance() val hour = calendar.get(Calendar.HOUR_OF_DAY) val minute = calendar.get(Calendar.MINUTE) val second = calendar.get(Calendar.SECOND) val fetchTime = "fetchTime=$hour$minute$second" - + val latest = getJson("$baseInstallUrl/latest.json?$fetchTime") val versions = getJson("$baseInstallUrl/versions.json?$fetchTime") isMicrogBroken = latest?.boolean("is_microg_broken") ?: false diff --git a/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt b/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt index 8a63869746..d647d484e9 100644 --- a/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt +++ b/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt @@ -32,7 +32,7 @@ object PackageHelper { const val apkInstallPath = "/data/adb" private const val INSTALLER_TAG = "VMInstall" - private val vancedThemes = vanced.value?.array("themes")?.value ?: arrayOf("black", "dark", "pink", "blue") + private val vancedThemes = vanced.value?.array("themes")?.value ?: listOf("black", "dark", "pink", "blue") init { Shell.enableVerboseLogging = BuildConfig.DEBUG diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 25d66ded6c..eb163f4931 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -90,6 +90,8 @@ Vanced has successfully been installed! Open now? Version Vanced Music has successfully been installed! Open now? + Bug in microG + Due to a bug in microG, installing Vanced 16+ first requires you to install v15.43.32, open, login and then manually select and install version 16. Do you want to proceed installing v15.43.32? Please be patient… Open Welcome From ad905e99e345b3c9b39f2239c45fe1db278eb6f1 Mon Sep 17 00:00:00 2001 From: X1nto Date: Wed, 27 Jan 2021 21:03:13 +0400 Subject: [PATCH 17/22] bumped up version --- app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 5970e66b68..16034fd131 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -15,8 +15,8 @@ android { applicationId = "com.vanced.manager" minSdkVersion(21) targetSdkVersion(30) - versionCode = 221 - versionName = "2.2.1 (RootedFirebase)" + versionCode = 230 + versionName = "2.3.0 (java.net.TrashAppException)" vectorDrawables.useSupportLibrary = true From 0c531dee8c5b8f9687c449c358867dd881b956e1 Mon Sep 17 00:00:00 2001 From: X1nto Date: Wed, 27 Jan 2021 21:07:13 +0400 Subject: [PATCH 18/22] cleanup --- .../core/downloader/MicrogDownloader.kt | 3 ++- .../core/downloader/VancedDownloader.kt | 1 - .../manager/ui/dialogs/ManagerThemeDialog.kt | 1 - .../dialogs/VancedLanguageSelectionDialog.kt | 2 -- .../com/vanced/manager/utils/InternetTools.kt | 1 - app/src/main/res/font/exo.xml | 6 ------ app/src/main/res/font/exo_2.xml | 6 ------ app/src/main/res/font/exo_2_bold.xml | 6 ------ app/src/main/res/font/exo_bold.ttf | Bin 88604 -> 0 bytes app/src/main/res/font/exo_semibold.xml | 6 ------ app/src/main/res/font/roboto_medium.xml | 7 ------- .../main/res/layout/include_about_sources.xml | 1 - app/src/main/res/values-af-rZA/strings.xml | 9 --------- app/src/main/res/values-ar-rSA/strings.xml | 9 --------- app/src/main/res/values-az-rAZ/strings.xml | 9 --------- app/src/main/res/values-bn-rBD/strings.xml | 9 --------- app/src/main/res/values-bn-rIN/strings.xml | 9 --------- app/src/main/res/values-ca-rES/strings.xml | 9 --------- app/src/main/res/values-ckb-rIR/strings.xml | 9 --------- app/src/main/res/values-cs-rCZ/strings.xml | 9 --------- app/src/main/res/values-da-rDK/strings.xml | 9 --------- app/src/main/res/values-de-rDE/strings.xml | 9 --------- app/src/main/res/values-el-rGR/strings.xml | 9 --------- app/src/main/res/values-es-rES/strings.xml | 9 --------- app/src/main/res/values-et-rEE/strings.xml | 9 --------- app/src/main/res/values-fi-rFI/strings.xml | 9 --------- app/src/main/res/values-fil-rPH/strings.xml | 9 --------- app/src/main/res/values-fr-rFR/strings.xml | 9 --------- app/src/main/res/values-hi-rIN/strings.xml | 9 --------- app/src/main/res/values-hr-rHR/strings.xml | 9 --------- app/src/main/res/values-hu-rHU/strings.xml | 9 --------- app/src/main/res/values-in-rID/strings.xml | 9 --------- app/src/main/res/values-it-rIT/strings.xml | 9 --------- app/src/main/res/values-iw-rIL/strings.xml | 9 --------- app/src/main/res/values-ja-rJP/strings.xml | 9 --------- app/src/main/res/values-ka-rGE/strings.xml | 9 --------- app/src/main/res/values-kmr-rTR/strings.xml | 9 --------- app/src/main/res/values-ko-rKR/strings.xml | 9 --------- app/src/main/res/values-ku-rTR/strings.xml | 9 --------- app/src/main/res/values-ml-rIN/strings.xml | 9 --------- app/src/main/res/values-mr-rIN/strings.xml | 9 --------- app/src/main/res/values-nl-rNL/strings.xml | 9 --------- app/src/main/res/values-no-rNO/strings.xml | 9 --------- app/src/main/res/values-pa-rIN/strings.xml | 9 --------- app/src/main/res/values-pa-rPK/strings.xml | 9 --------- app/src/main/res/values-pl-rPL/strings.xml | 9 --------- app/src/main/res/values-ps-rAF/strings.xml | 9 --------- app/src/main/res/values-pt-rBR/strings.xml | 9 --------- app/src/main/res/values-pt-rPT/strings.xml | 9 --------- app/src/main/res/values-ro-rRO/strings.xml | 9 --------- app/src/main/res/values-ru-rRU/strings.xml | 9 --------- app/src/main/res/values-si-rLK/strings.xml | 9 --------- app/src/main/res/values-so-rSO/strings.xml | 9 --------- app/src/main/res/values-sr-rSP/strings.xml | 9 --------- app/src/main/res/values-sv-rSE/strings.xml | 9 --------- app/src/main/res/values-ta-rIN/strings.xml | 9 --------- app/src/main/res/values-th-rTH/strings.xml | 9 --------- app/src/main/res/values-tr-rTR/strings.xml | 9 --------- app/src/main/res/values-uk-rUA/strings.xml | 9 --------- app/src/main/res/values-vi-rVN/strings.xml | 9 --------- app/src/main/res/values-zh-rCN/strings.xml | 9 --------- app/src/main/res/values-zh-rTW/strings.xml | 9 --------- app/src/main/res/values/font_certs.xml | 17 ----------------- app/src/main/res/values/preloaded_fonts.xml | 10 ---------- app/src/main/res/values/strings.xml | 9 --------- app/src/main/res/values/styles.xml | 4 ---- 66 files changed, 2 insertions(+), 528 deletions(-) delete mode 100644 app/src/main/res/font/exo.xml delete mode 100644 app/src/main/res/font/exo_2.xml delete mode 100644 app/src/main/res/font/exo_2_bold.xml delete mode 100644 app/src/main/res/font/exo_bold.ttf delete mode 100644 app/src/main/res/font/exo_semibold.xml delete mode 100644 app/src/main/res/font/roboto_medium.xml delete mode 100644 app/src/main/res/values/font_certs.xml delete mode 100644 app/src/main/res/values/preloaded_fonts.xml diff --git a/app/src/main/java/com/vanced/manager/core/downloader/MicrogDownloader.kt b/app/src/main/java/com/vanced/manager/core/downloader/MicrogDownloader.kt index 6b7030711c..70eeedb12c 100644 --- a/app/src/main/java/com/vanced/manager/core/downloader/MicrogDownloader.kt +++ b/app/src/main/java/com/vanced/manager/core/downloader/MicrogDownloader.kt @@ -2,10 +2,11 @@ package com.vanced.manager.core.downloader import android.content.Context import com.vanced.manager.R -import com.vanced.manager.utils.* import com.vanced.manager.utils.DownloadHelper.download import com.vanced.manager.utils.DownloadHelper.downloadProgress import com.vanced.manager.utils.PackageHelper.install +import com.vanced.manager.utils.baseInstallUrl +import com.vanced.manager.utils.microg object MicrogDownloader { diff --git a/app/src/main/java/com/vanced/manager/core/downloader/VancedDownloader.kt b/app/src/main/java/com/vanced/manager/core/downloader/VancedDownloader.kt index 1082574f1e..5481348a7e 100644 --- a/app/src/main/java/com/vanced/manager/core/downloader/VancedDownloader.kt +++ b/app/src/main/java/com/vanced/manager/core/downloader/VancedDownloader.kt @@ -15,7 +15,6 @@ import com.vanced.manager.utils.PackageHelper.downloadStockCheck import com.vanced.manager.utils.PackageHelper.installVanced import com.vanced.manager.utils.PackageHelper.installVancedRoot import java.io.File -import java.lang.Exception object VancedDownloader { diff --git a/app/src/main/java/com/vanced/manager/ui/dialogs/ManagerThemeDialog.kt b/app/src/main/java/com/vanced/manager/ui/dialogs/ManagerThemeDialog.kt index 1e7e22843b..72db5d5062 100644 --- a/app/src/main/java/com/vanced/manager/ui/dialogs/ManagerThemeDialog.kt +++ b/app/src/main/java/com/vanced/manager/ui/dialogs/ManagerThemeDialog.kt @@ -3,7 +3,6 @@ package com.vanced.manager.ui.dialogs import android.os.Bundle import android.view.LayoutInflater import android.view.ViewGroup -import androidx.core.content.edit import androidx.preference.PreferenceManager.getDefaultSharedPreferences import com.google.android.material.radiobutton.MaterialRadioButton import com.vanced.manager.core.ui.base.BindingBottomSheetDialogFragment diff --git a/app/src/main/java/com/vanced/manager/ui/dialogs/VancedLanguageSelectionDialog.kt b/app/src/main/java/com/vanced/manager/ui/dialogs/VancedLanguageSelectionDialog.kt index ffcec04d58..28f50f5619 100644 --- a/app/src/main/java/com/vanced/manager/ui/dialogs/VancedLanguageSelectionDialog.kt +++ b/app/src/main/java/com/vanced/manager/ui/dialogs/VancedLanguageSelectionDialog.kt @@ -1,6 +1,5 @@ package com.vanced.manager.ui.dialogs -import android.content.Context import android.content.DialogInterface import android.os.Bundle import android.view.LayoutInflater @@ -15,7 +14,6 @@ import com.vanced.manager.core.ui.base.BindingBottomSheetDialogFragment import com.vanced.manager.core.ui.ext.showDialog import com.vanced.manager.databinding.DialogVancedLanguageSelectionBinding import com.vanced.manager.ui.core.ThemedMaterialCheckbox -import com.vanced.manager.utils.getDefaultVancedLanguages import com.vanced.manager.utils.installPrefs import com.vanced.manager.utils.lang import com.vanced.manager.utils.vanced diff --git a/app/src/main/java/com/vanced/manager/utils/InternetTools.kt b/app/src/main/java/com/vanced/manager/utils/InternetTools.kt index 1e684ffeb6..65818f0f6d 100644 --- a/app/src/main/java/com/vanced/manager/utils/InternetTools.kt +++ b/app/src/main/java/com/vanced/manager/utils/InternetTools.kt @@ -19,7 +19,6 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import java.io.File import java.io.IOException -import java.net.ConnectException import java.net.HttpURLConnection import java.net.SocketTimeoutException import java.net.URL diff --git a/app/src/main/res/font/exo.xml b/app/src/main/res/font/exo.xml deleted file mode 100644 index b9ebbb9a3e..0000000000 --- a/app/src/main/res/font/exo.xml +++ /dev/null @@ -1,6 +0,0 @@ - - diff --git a/app/src/main/res/font/exo_2.xml b/app/src/main/res/font/exo_2.xml deleted file mode 100644 index fd70fdcaf3..0000000000 --- a/app/src/main/res/font/exo_2.xml +++ /dev/null @@ -1,6 +0,0 @@ - - diff --git a/app/src/main/res/font/exo_2_bold.xml b/app/src/main/res/font/exo_2_bold.xml deleted file mode 100644 index a6ba0dcd20..0000000000 --- a/app/src/main/res/font/exo_2_bold.xml +++ /dev/null @@ -1,6 +0,0 @@ - - diff --git a/app/src/main/res/font/exo_bold.ttf b/app/src/main/res/font/exo_bold.ttf deleted file mode 100644 index 97249ef08a09f07d0ad2e209172b66e6bbc45d07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88604 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 PQA2Iv&)tH3bV>MM&)W>i diff --git a/app/src/main/res/font/exo_semibold.xml b/app/src/main/res/font/exo_semibold.xml deleted file mode 100644 index f56212bb33..0000000000 --- a/app/src/main/res/font/exo_semibold.xml +++ /dev/null @@ -1,6 +0,0 @@ - - diff --git a/app/src/main/res/font/roboto_medium.xml b/app/src/main/res/font/roboto_medium.xml deleted file mode 100644 index 59df90bc82..0000000000 --- a/app/src/main/res/font/roboto_medium.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - diff --git a/app/src/main/res/layout/include_about_sources.xml b/app/src/main/res/layout/include_about_sources.xml index ae4e4266d4..f4efc679eb 100644 --- a/app/src/main/res/layout/include_about_sources.xml +++ b/app/src/main/res/layout/include_about_sources.xml @@ -41,7 +41,6 @@ Support us Accent Color - Blue - Green - Purple - Red - Yellow Appearance Behavior Clear downloaded files @@ -78,13 +73,9 @@ Error Redownload Make sure that you downloaded the app from vancedapp.com, the Vanced Discord server, or the Vanced GitHub - Success! %1$s Installation Preferences - Vanced has successfully been installed! Open now? Version - Vanced Music has successfully been installed! Open now? Please be patient… - Open Welcome Choose your preferred language(s) for Vanced diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index 903c0c7063..f87064d860 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -36,11 +36,6 @@ ادعمنا الألوان - أزرق - أخضر - أرجواني - أحمر - أصفر المظهر السلوك مسح الملفات التي تم تنزيلها @@ -78,13 +73,9 @@ خطأ إعادة التنزيل تأكد من أنك قمت بتنزيل التطبيق من موقع vancedapp.com، أو خادم الديسكورد لڤانسد أو Vanced GitHub - نجاح! تفضيلات تثبيت %1$s - تم تثبيت ڤانسد بنجاح! افتح الآن؟ الإصدار - تم تثبيت موسيقى ڤانسد بنجاح! افتح الآن؟ الرجاء الانتظار… - فتح مرحباً بك اختر لغتك(لغاتك) المفضلة لڤانسد diff --git a/app/src/main/res/values-az-rAZ/strings.xml b/app/src/main/res/values-az-rAZ/strings.xml index 3fb7e5fd8f..496025ec50 100644 --- a/app/src/main/res/values-az-rAZ/strings.xml +++ b/app/src/main/res/values-az-rAZ/strings.xml @@ -36,11 +36,6 @@ Bizi dəstəklə Tema rəngi - Göy - Yaşıl - Bənövşəyi - Qırmızı - Sarı Görünüş Davranış Endirilmiş faylları təmizlə @@ -78,13 +73,9 @@ Xəta Yenidən endir Tətbiqi vancedapp.com, Vanced Discord server və ya Vanced GitHub\'dan endirdiyinizə əmin olun - Uğurlu! %1$s Qurma Seçimləri - Vanced uğurla quraşdırıldı! İndi açılsın? Versiya - Vanced Music uğurla quraşdırıldı! İndi açılsın? Zəhmət olmasa səbrli olun… - Xoş gəldiniz Vanced üçün tərcih etdiyiniz dili seçin diff --git a/app/src/main/res/values-bn-rBD/strings.xml b/app/src/main/res/values-bn-rBD/strings.xml index 22642aea3e..47f4114496 100644 --- a/app/src/main/res/values-bn-rBD/strings.xml +++ b/app/src/main/res/values-bn-rBD/strings.xml @@ -36,11 +36,6 @@ Support us অ্যাকসেন্ট রঙ - Blue - Green - Purple - Red - Yellow চেহারা আচরণ ডাউনলোড করা ফাইলগুলি সাফ করুন @@ -78,13 +73,9 @@ ত্রুটি Redownload Make sure that you downloaded the app from vancedapp.com, the Vanced Discord server, or the Vanced GitHub - সফলতা! %1$s Installation Preferences - ভ্যান্সড সফলভাবে ইনস্টল করা হয়েছে! এখন খোল? Version - ভ্যান্সড মিউজিক সফলভাবে ইনস্টল করা হয়েছে! এখন খোল? Please be patient… - খোলা স্বাগতম ভ্যানসডের জন্য আপনার পছন্দসই ভাষা (গুলি) চয়ন করুন diff --git a/app/src/main/res/values-bn-rIN/strings.xml b/app/src/main/res/values-bn-rIN/strings.xml index 54ec1014de..8307b7f9d7 100644 --- a/app/src/main/res/values-bn-rIN/strings.xml +++ b/app/src/main/res/values-bn-rIN/strings.xml @@ -36,11 +36,6 @@ আমাদের সমর্থন অ্যাকসেন্ট রঙ - নীল - সবুজ - বেগুনি - লাল - হলুদ রূপ আচরণ ডাউনলোড করা ফাইলগুলি মুছে ফেলুন @@ -78,13 +73,9 @@ ত্রুটি পুনরায় ডাউনলোড করুন নিশ্চিত করুন যে আপনি অ্যাপটি vancedapp.com, ভ্যান্সড ডিসকার্ড সার্ভার বা ভ্যান্সড গিটহাব থেকে ডাউনলোড করেছেন - সফল! %1$s ইনস্টল করার পছন্দগুলি - ভ্যান্সড সফলভাবে ইনস্টল করা হয়েছে! এখন চালু করুন? সংস্করণ - ভ্যান্সড মিউজিক সফলভাবে ইনস্টল করা হয়েছে! এখন খুলুন? দয়া করে ধৈর্য ধরুন… - খুলুন স্বাগত ভ্যান্সডের জন্য আপনার পছন্দসই ভাষা(গুলি) চয়ন করুন diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index 4218bcff1d..c56b7c5896 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -36,11 +36,6 @@ Support us Color d\'èmfasi - Blue - Green - Purple - Red - Yellow Appearance Behavior Esborrar fitxers descarregats @@ -78,13 +73,9 @@ Error Redownload Make sure that you downloaded the app from vancedapp.com, the Vanced Discord server, or the Vanced GitHub - Èxit! %1$s Installation Preferences - Vanced s\'ha instal·lat correctament. Obert ara? Version - Vanced Music s\'ha instal·lat correctament. Obert ara? Please be patient… - Obert Benvingut Trieu els vostres idiomes preferits per a Vanced diff --git a/app/src/main/res/values-ckb-rIR/strings.xml b/app/src/main/res/values-ckb-rIR/strings.xml index c7dee0ea3c..00af421c15 100644 --- a/app/src/main/res/values-ckb-rIR/strings.xml +++ b/app/src/main/res/values-ckb-rIR/strings.xml @@ -36,11 +36,6 @@ پشتگیریکردن ڕەنگی سەرەکی - شین - سەوز - مۆر - سوور - زەرد ڕووکار ڕێکخستن سڕینەوەی فایلە داگیراوەکان @@ -78,13 +73,9 @@ هەڵەیەک ڕوویدا داگرتنەوە دڵنیابە کە بەرنامەکەت لە سایتی vancedapp.com، سێرڤەری دیسکۆرد یان Vanced GitHub داگرتووە - سەرکەوتو بوو! %1$s ڕێکخستنەکانی دامەزراندن - بەرنامەکە بەسەرکەوتوویی دابەزێنرا! کردنەوە ئێستا؟ وەشان - بەرنامەکە بەسەرکەوتوویی دابەزێنرا! کردنەوە ئێستا؟ تکایە چاوەڕوانبە… - کردنه‌وه‌ بەخێربێیت زمانێک هەڵبژێرە بۆ بەکارهێنانی بەرنامەکە diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 82d2f4c23c..d95905656e 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -36,11 +36,6 @@ Podpořte nás Doplňková barva - Modrá - Zelená - Fialová - Červená - Žlutá Vzhled Chování Vymazat stažené soubory @@ -78,13 +73,9 @@ Chyba Stáhnout znovu Ujistěte se, že jste si aplikaci stáhli z našeho webu vancedapp.com, z našeho Discord serveru nebo našeho GitHubu - Hotovo! Předvolby instalace %1$s - Aplikace Vanced byla úspěšně nainstalována! Chcete ji otevřít? Verze - Aplikace Vanced Music byla úspěšně nainstalována! Chcete ji otevřít? Chvilku strpení… - Otevřít Vítejte Vyberte preferovaný jazyk pro Vanced diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index 02cdb118c6..e089fda80b 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -36,11 +36,6 @@ Støt os Sekundær farve - Blå - Grøn - Lilla - Rød - Gul Udseende Adfærd Ryd hentede filer @@ -78,13 +73,9 @@ Fejl Hent igen Venligst sørg for kun at have downloaded appen fra vancedapp.com, Vanced Discord serveren eller Vanced GitHub siden - Succes! %1$s Installationsindstillinger - Vanced er nu installeret! Åben appen? Version - Vanced Music er nu installeret! Åben appen? Vær tålmodig… - Åbn Velkommen Vælg dit fortrukne sprog til Vanced diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 9fe7f7182f..d0bbbb5099 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -36,11 +36,6 @@ Unterstütze uns Akzentfarbe - Blau - Grün - Lila - Rot - Gelb Darstellung Verhalten Heruntergeladene Dateien löschen @@ -78,13 +73,9 @@ Fehler Erneut herunterladen Stelle sicher, dass du die App von vancedapp.com, dem Vanced Discord Server oder dem Vanced GitHub heruntergeladen hast - Erfolg! %1$s Installationsoptionen - Vanced wurde erfolgreich installiert. Jetzt öffnen? Version - Vanced Musik wurde erfolgreich installiert. Jetzt starten? Bitte warten… - Öffnen Willkommen Wählen Sie ihre bevorzugte Sprache(n) für Vanced diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index d7e4b16037..f0d5fe9f2f 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -36,11 +36,6 @@ Υποστηρίξτε μας Χρώμα Διεπαφής - Μπλε - Πράσινο - Μωβ - Κόκκινο - Κίτρινο Εμφάνιση Συμπεριφορά Εκκαθάριση ληφθέντων αρχείων @@ -78,13 +73,9 @@ Σφάλμα Επανάληψη λήψης Βεβαιωθείτε ότι κάνατε λήψη της εφαρμογής από το vancedapp.com, τον διακομιστή Discord του Vanced ή το GitHub του Vanced - Επιτυχία! Προτιμήσεις Εγκατάστασης του %1$s - Το Vanced έχει εγκατασταθεί επιτυχώς! Εκκίνηση τώρα; Έκδοση - Η εγκατάσταση του Vanced Music ολοκληρώθηκε επιτυχώς! Εκκίνηση τώρα; Παρακαλώ να είστε υπομονετικοί… - Εκκίνηση Καλώς ορίσατε Επιλέξτε την(/ις) γλώσσα(/ες) που επιθυμείτε για το Vanced diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 6c7b88c8c8..954a9f293e 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -36,11 +36,6 @@ Apóyanos Color de Acento - Azul - Verde - Morado - Rojo - Amarillo Apariencia Comportamiento Limpiar archivos descargados @@ -78,13 +73,9 @@ Error Volver a descargar Asegúrate de haber descargado la app desde vancedapp.com, el grupo de Discord de Vanced, o el GitHub de Vanced - Éxito! %1$s Preferencias de instalación - ¡Vanced se ha instalado correctamente! ¿Abrir ahora? Versión - ¡Vanced Music se ha instalado correctamente! ¿Abrir ahora? Por favor, sé paciente… - Abrir Bienvenido Elige tu(s) idioma(s) preferido(s) para Vanced diff --git a/app/src/main/res/values-et-rEE/strings.xml b/app/src/main/res/values-et-rEE/strings.xml index 2e9ce4f3ef..bc53002ae0 100644 --- a/app/src/main/res/values-et-rEE/strings.xml +++ b/app/src/main/res/values-et-rEE/strings.xml @@ -36,11 +36,6 @@ Toetage meid Rõhuvärv - Sinine - Roheline - Lilla - Punane - Kollane Välimus Käitumine Tühjenda allalaaditud failid @@ -78,13 +73,9 @@ Viga Lae uuesti alla Veenduge, et laadisite rakenduse alla vancedapp.com, Vanced Discordi serverist või Vanced GitHubist - Õnnestus! %1$s Paigalduseelistused - Vanced on edukalt paigaldatud! Soovite avada kohe? Versioon - Vanced Music on edukalt paigaldatud! Soovite avada kohe? Palun olge kannatlik… - Ava Tere tulemast Valige eelistatud keel(ed) Vanced jaoks diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index dbed36a207..86cf57a13c 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -36,11 +36,6 @@ Support us Aksenttiväri - Blue - Green - Purple - Red - Yellow Ulkoasu Käyttäytyminen Tyhjennä ladatut tiedostot @@ -78,13 +73,9 @@ Virhe Uudelleenlataa Varmista, että latasit sovelluksen osoitteesta vancedapp.com, Vanced Discord-palvelin tai Vanced GitHub - Onnistui! %1$s asennusasetukset - Vanced on asennettu onnistuneesti! Avaa nyt? Versio - Vanced Music on asennettu onnistuneesti! Avoinna nyt? Ole kärsivällinen… - Avaa Tervetuloa Valitse Vancedille haluamasi kieli tai kielet diff --git a/app/src/main/res/values-fil-rPH/strings.xml b/app/src/main/res/values-fil-rPH/strings.xml index f6aee0c704..1cd6a20b5d 100644 --- a/app/src/main/res/values-fil-rPH/strings.xml +++ b/app/src/main/res/values-fil-rPH/strings.xml @@ -36,11 +36,6 @@ Support us Kulay ng font - Blue - Green - Purple - Red - Yellow Hitsura Kilos Tanggalin ang naka-download na files @@ -78,13 +73,9 @@ May pagkamali I-download ulit Siguraduhin mo na nai-download mo ang app galing sa vancedapp.com, o sa Discord server ng Vanced, o sa Github ng Vanced - Tagumpay! %1$s Kagustuhan sa Pag-install - Na-install na ang Vanced! Buksan na? Bersyon - Na-install na ang Vanced Music! Buksan na? Konting pasensya lang po… - Buksan Maligayang Pagdating Piliin ang ikinagugustong (mga) wika sa Vanced diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 93e48a6e79..6ef93cdd26 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -36,11 +36,6 @@ Soutenez-nous Couleur d\'accentuation - Bleu - Vert - Violet - Rouge - Jaune Apparence Comportement Effacer les fichiers téléchargés @@ -78,13 +73,9 @@ Erreur Re-télécharger Assurez-vous d\'avoir téléchargé l\'application depuis vancedapp.com, le serveur Discord Vanced ou sur le Github Vanced - Succès! %1$s Préférences d\'installation - Vanced a été installé avec succès ! Ouvrir maintenant ? Version - Vanced Music a été installé avec succès ! Ouvrir maintenant ? Veuillez patienter… - Ouvrir Bienvenue Choisir votre langage(s) préféré(s) pour Vanced diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index b11fa709b9..406391f7c3 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -36,11 +36,6 @@ हमें सहयोग दीजिये ऊपरी रंग - नीला - हरा - बैंगनी - लाल - पीला दिखावट व्यवहार डाउनलोड की गई फ़ाइलें साफ़ करें @@ -78,13 +73,9 @@ त्रुटि फिर से डाउनलोड करें सुनिश्चित करें कि आपने vancedapp.com, Vanced Discord सर्वर, या Vanced GitHub से ऐप डाउनलोड किया है - सफलता! %1$s इंस्टालेशन प्राथमिकताएँ - सफलतापूर्वक स्थापित किया गया है! अब खोलो? संस्करण - वेंसड संगीत सफलतापूर्वक स्थापित किया गया है! अब खोले? कृपया धैर्य रखें… - खोले स्वागत है! Vanced के लिए अपनी पसंदीदा भाषा (ए) चुनें diff --git a/app/src/main/res/values-hr-rHR/strings.xml b/app/src/main/res/values-hr-rHR/strings.xml index 4e3cc237db..4ebaaf4967 100644 --- a/app/src/main/res/values-hr-rHR/strings.xml +++ b/app/src/main/res/values-hr-rHR/strings.xml @@ -36,11 +36,6 @@ Podržite nas Boja naglašavanja - Plava - Zelena - Ljubičasta - Crvena - Žuta Izgled Ponašanje Ukloni preuzete datoteke @@ -78,13 +73,9 @@ Greška Ponovno preuzmi Aplikaciju obavezno preuzmite s vancedapp.com, Vanced Discord poslužitelja ili Vanced GitHuba - Uspješno! %1$s postavke instalacije - Vanced je uspješno instaliran! Otvorite ga odmah? Inačica - Vanced Glazba je uspješno instalirana! Otvorite ju odmah? Malo pričekajte… - Otvori Dobrodošli Odaberite željeni jezika za Vanced diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index f56145356a..d87bab291b 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -36,11 +36,6 @@ Támogass minket Kiemelés színe - Kék - Zöld - Lila - Vörös - Sárga Megjelenítés Viselkedés Letöltött fájlok törlése @@ -79,13 +74,9 @@ Akarod telepíteni? Hiba Újra letölt Arra kérünk, győződj meg róla, hogy ezt az alkalmazást a vancedapp.com oldalról, a Vanced Discord szerveréről vagy a Vanced GitHub-ról töltötted le - Kész! %1$s Telepítés személyreszabása - Vanced sikeresen telepítve! Elindítod most? Verzió - Vanced Music sikeresen települt! Megnyitja most? Kérjük legyen türelmes... - Megnyitás Üdvözöljük Vanced nyelvének kiválasztása diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index 72bafd7f90..00074fd8ed 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -36,11 +36,6 @@ Dukung kami Aksen Warna - Biru - Hijau - Ungu - Merah - Kuning Penampilan Perilaku Hapus file yang diunduh @@ -78,13 +73,9 @@ Terjadi kesalahan Unduh ulang Pastikan anda mengunduh aplikasi ini dari vancedapp.com, server Discord Vanced, atau Vanced Github - Berhasil! Preferensi Instalasi %1$s - Vanced berhasil dipasang! Buka sekarang? Versi - Vanced Musik berhasil dipasang! Buka sekarang? Harap bersabar… - Buka Selamat datang Pilih bahasa yang anda inginkan untuk Vanced diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index ef332a5916..18940ede65 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -36,11 +36,6 @@ Sostienici Colore in Evidenza - Blu - Verde - Viola - Rosso - Giallo Aspetto Comportamento Cancella i file scaricati @@ -78,13 +73,9 @@ Errore Scarica nuovamente Assicurati di aver scaricato l\'app da vancedapp.com, dal server Discord di Vanced o dalla pagina GitHub di Vanced - Riuscito! Preferenze Installazione di %1$s - Vanced è stato correttamente installato. Desideri avviarlo ora? Versione - Vanced Music è stato correttamente installato! Vuoi eseguirlo ora? Si prega di attendere… - Avvia Benvenuto Scegli le tue lingue preferite per Vanced diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index 54500b8e02..41308544ec 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -36,11 +36,6 @@ תמכו בנו צבע הדגשה - כחול - ירוק - סגול - אדום - צהוב מראה התנהגות מחק קבצים שהורדו @@ -78,13 +73,9 @@ שגיאה הורד מחדש ודא שהורדת את האפליקציה מהאתר vancedapp.com, שרת הדיסקורד של Vanced או מהעמוד של Vanced ב־GitHub - הצלחה! %1$s העדפות התקנה - Vanced הותקן בהצלחה! לפתוח עכשיו? גרסא - Vanced Music הותקן בהצלחה! לפתוח עכשיו? אנא התאזר בסבלנות… - פתח ברוכים הבאים בחר את השפה המועדפת עליך ל־Vanced diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 5d17213999..258946197e 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -36,11 +36,6 @@ サポート アクセントカラー - ブルー - グリーン - パープル - レッド - イエロー 表示設定 動作 ダウンロード済みファイルを消去 @@ -78,13 +73,9 @@ エラー 再ダウンロード Vancedapp.com、Vanced の Discord サーバーまたは GitHub からアプリをダウンロードしたことを確認してください - 成功! %1$s のインストール設定 - Vanced のインストールに成功しました。今すぐ開きますか? バージョン - Vanced Music のインストールに成功しました。今すぐ開きますか? しばらくお待ちください… - 開く ようこそ Vanced で使用する言語を選択 diff --git a/app/src/main/res/values-ka-rGE/strings.xml b/app/src/main/res/values-ka-rGE/strings.xml index 182c7727e3..62281d51c9 100644 --- a/app/src/main/res/values-ka-rGE/strings.xml +++ b/app/src/main/res/values-ka-rGE/strings.xml @@ -36,11 +36,6 @@ დაგვიჭირეთ მხარი აქცენტის ფერი - Blue - Green - Purple - Red - Yellow შესახედაობა ფუნქციები გადმოწერილი ფაილების გაწმენდა @@ -78,13 +73,9 @@ შეცდომა თავიდან გადმოწერა დარწმუნდით, რომ აპი გადმოწერეთ vancedapp.com-იდან, Vanced Discord სერვერიდან ან GitHub-იდან - წარმატება! %1$s-ის ინსტალაციის პარამეტრები - Vanced-ი წარმატებით დაყენდა, გსურთ მისი გახსნა? ვერსია - Vanced Music-ი წარმატებით დაყენდა, გსურთ მისი გახსნა? გთხოვთ დაელოდოთ… - გახსნა მოგესალმებით აირჩიეთ სასურველი ენა(ები) Vanced-ისთვის diff --git a/app/src/main/res/values-kmr-rTR/strings.xml b/app/src/main/res/values-kmr-rTR/strings.xml index d45d10c68b..147d21e598 100644 --- a/app/src/main/res/values-kmr-rTR/strings.xml +++ b/app/src/main/res/values-kmr-rTR/strings.xml @@ -36,11 +36,6 @@ Support us Accent Color - Blue - Green - Purple - Red - Yellow Appearance Behavior Clear downloaded files @@ -78,13 +73,9 @@ Error Redownload Make sure that you downloaded the app from vancedapp.com, the Vanced Discord server, or the Vanced GitHub - Success! %1$s Installation Preferences - Vanced has successfully been installed! Open now? Version - Vanced Music has successfully been installed! Open now? Please be patient… - Open Welcome Choose your preferred language(s) for Vanced diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index e18a4d5481..cec8ed2fa5 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -36,11 +36,6 @@ 지원하기 강조 색상 - 파란색 - 초록색 - 보라색 - 빨간색 - 노란색 모양 동작 다운로드된 파일 모두 지우기 @@ -78,13 +73,9 @@ 오류 다시 다운로드 항상 vancedapp.com, 공식 Vanced 디스코드 서버 또는 공식 GitHub 저장소에서 Vanced Manager 앱을 다운로드해주세요. - 성공! %1$s 설치 설정 - Vanced가 성공적으로 설치되었습니다. 지금 실행하시겠어요? 버전 - Vanced 뮤직이 성공적으로 설치되었습니다. 지금 실행하시겠어요? 잠시만 기다려 주세요... - 열기 환영합니다 Vanced에서 선호하는 언어를 선택해주세요 diff --git a/app/src/main/res/values-ku-rTR/strings.xml b/app/src/main/res/values-ku-rTR/strings.xml index 9c564fb6ee..f9e8ec3055 100644 --- a/app/src/main/res/values-ku-rTR/strings.xml +++ b/app/src/main/res/values-ku-rTR/strings.xml @@ -36,11 +36,6 @@ Support us Rengê devokê - Blue - Green - Purple - Red - Yellow Xuyang Behavior Dosiyayên daxistî paqij bike @@ -78,13 +73,9 @@ Çewtî Ji nû ve daxîne Make sure that you downloaded the app from vancedapp.com, the Vanced Discord server, or the Vanced GitHub - Bi Ser Ket! %1$s sazkariyên bijarde yên sazkirinê - Vanced biserketî saz bû! Gelo niha vebe? Guherto - Vanced Mûzîk biserketî saz bû! Gelo niha vebe? Jkx tebata xwe bînin... - Veke Bi xêr hatî Ziman(ên) xwe yën dilxwaz ji bo Vanced\'ê hilbijêre diff --git a/app/src/main/res/values-ml-rIN/strings.xml b/app/src/main/res/values-ml-rIN/strings.xml index 063bbc6ee1..79b053fecb 100644 --- a/app/src/main/res/values-ml-rIN/strings.xml +++ b/app/src/main/res/values-ml-rIN/strings.xml @@ -36,11 +36,6 @@ ഞങ്ങളെ പിന്തുണയ്ക്കുക ആക്‌സന്റ് വർണ്ണം - നീല - പച്ച - പർപ്പിൾ - ചുവപ്പ് - മഞ്ഞ രൂപം പെരുമാറ്റം ഡൗൺലോഡുചെയ്‌ത ഫയലുകൾ മായ്‌ക്കുക @@ -78,13 +73,9 @@ തെറ്റ് വീണ്ടും ഡൗൺലോഡുചെയ്യുക നിങ്ങൾ vancedapp.com, Vanced Discord സെർവർ, അല്ലെങ്കിൽ Vanced GitHub എന്നിവയിൽ നിന്ന് അപ്ലിക്കേഷൻ download ൺലോഡ് ചെയ്തുവെന്ന് ഉറപ്പാക്കുക - വിജയം! %1$s ഇൻസ്റ്റാളേഷൻ മുൻഗണനകൾ - വാൻ‌സ്ഡ് വിജയകരമായി ഇൻസ്റ്റാൾ ചെയ്തു! ഇപ്പോൾ തുറക്കണോ? പതിപ്പ് - വാൻസഡ് മ്യൂസിക്ക് വിജയകരമായി ഇൻസ്റ്റാൾ ചെയ്തു! ഇപ്പോൾ തുറക്കണോ? ദയവായി ക്ഷമിക്കുക… - തുറക്കുക സ്വാഗതം വാൻസിനായി നിങ്ങൾ ഭാഷ (കൾ) തിരഞ്ഞെടുക്കുക diff --git a/app/src/main/res/values-mr-rIN/strings.xml b/app/src/main/res/values-mr-rIN/strings.xml index c52ae27443..eb1a580563 100644 --- a/app/src/main/res/values-mr-rIN/strings.xml +++ b/app/src/main/res/values-mr-rIN/strings.xml @@ -36,11 +36,6 @@ Support us Accent Color - Blue - Green - Purple - Red - Yellow Appearance Behavior Clear downloaded files @@ -78,13 +73,9 @@ Error Redownload Make sure that you downloaded the app from vancedapp.com, the Vanced Discord server, or the Vanced GitHub - Success! %1$s Installation Preferences - Vanced has successfully been installed! Open now? Version - Vanced Music has successfully been installed! Open now? Please be patient… - Open Welcome Choose your preferred language(s) for Vanced diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 015999a827..be8416480e 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -36,11 +36,6 @@ Steun ons Accentkleur - Blauw - Groen - Paars - Rood - Geel Weergave Gedrag Gedownloade bestanden verwijderen @@ -78,13 +73,9 @@ Fout Opnieuw downloaden Zorg ervoor dat je de app hebt gedownload van vancedapp.com, de Vanced Discord-server of Vanced GitHub - Gelukt! installatievoorkeuren voor %1$s - Vanced is succesvol geïnstalleerd! Nu starten? Versie - Vanced Music is succesvol geïnstalleerd! Nu starten? Even geduld… - Openen Welkom Kies je gewenste taal/talen voor Vanced diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index 9f418f2427..54597e6603 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -36,11 +36,6 @@ Support us Aksentfarge - Blue - Green - Purple - Red - Yellow Utseende Oppførsel Fjern nedlastede filer @@ -78,13 +73,9 @@ Feil Last ned på nytt Sørg for at du lastet ned appen fra vancedapp.com, Vanced Discord server, eller Vanced GitHub - Suksess! %1$s Installasjonsinnstillinger - Vanced har blitt installert! Åpne nå? Versjon - Vanced Music har blitt installert! Åpne nå? Vær tålmodig… - Åpne Velkommen Velg dine foretrukne språk for Vanced diff --git a/app/src/main/res/values-pa-rIN/strings.xml b/app/src/main/res/values-pa-rIN/strings.xml index 863a0fc066..36c05e981c 100644 --- a/app/src/main/res/values-pa-rIN/strings.xml +++ b/app/src/main/res/values-pa-rIN/strings.xml @@ -36,11 +36,6 @@ ਸਾਡਾ ਸਮਰਥਨ ਕਰੋ ਐੱਕਸੈਂਟ ਰੰਗ - ਨੀਲਾ - ਹਰਾ - ਜਾਮਨੀ - ਲਾਲ - ਪੀਲਾ ਦਿੱਖ ਵਿਹਾਰ ਡਾਉਨਲੋਡ ਕੀਤੀਆਂ ਫਾਇਲਾਂ ਸਾਫ਼ ਕਰੋ @@ -78,13 +73,9 @@ ਗਲਤੀ ਮੁੜ ਡਾਉਨਲੋਡ ਪੱਕਾ ਕਰੋ ਕਿ ਤੁਸੀਂ vancedapp.com, Vanced Discord ਸਰਵਰ ਜਾਂ Vanced GitHub ਤੋਂ ਐਪ ਡਾਉਨਲੋਡ ਕੀਤਾ ਹੈ - ਸਫਲਤਾ! %1$s ਸਥਾਪਨਾ ਚੁਣੋ - ਵੈਨਸਡ ਸਫਲਤਾਪੂਰਵਕ ਸਥਾਪਤ ਹੋ ਗਿਆ ਹੈ! ਹੁਣ ਖੋਲੋ? ਵਰਜਨ - ਵੇਂਸਡ ਮਿਊਜ਼ਿਕ ਸਫਲਤਾਪੂਰਵਕ ਸਥਾਪਤ ਕੀਤਾ ਗਿਆ ਹੈ! ਹੁਣ ਖੋਲੋ? ਕਿਰਪਾ ਕਰਕੇ ਸਬਰ ਰੱਖੋ… - ਖੋਲੋ ਜੀ ਆਇਆਂ ਨੂੰ Vanced ਦੇ ਲਈ ਆਪਣੀ ਪਸੰਦੀਦਾ ਭਾਸ਼ਾ (ਏ) ਚੁਣੋ diff --git a/app/src/main/res/values-pa-rPK/strings.xml b/app/src/main/res/values-pa-rPK/strings.xml index d45d10c68b..147d21e598 100644 --- a/app/src/main/res/values-pa-rPK/strings.xml +++ b/app/src/main/res/values-pa-rPK/strings.xml @@ -36,11 +36,6 @@ Support us Accent Color - Blue - Green - Purple - Red - Yellow Appearance Behavior Clear downloaded files @@ -78,13 +73,9 @@ Error Redownload Make sure that you downloaded the app from vancedapp.com, the Vanced Discord server, or the Vanced GitHub - Success! %1$s Installation Preferences - Vanced has successfully been installed! Open now? Version - Vanced Music has successfully been installed! Open now? Please be patient… - Open Welcome Choose your preferred language(s) for Vanced diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 7290d98dfe..6021a546c2 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -36,11 +36,6 @@ Wesprzyj nas Kolor Akcentu - Niebieski - Zielony - Fioletowy - Czerwony - Żółty Wygląd Zachowanie Wyczyść pobrane pliki @@ -78,13 +73,9 @@ Błąd Pobierz ponownie Upewnij się, że pobrałeś aplikację z vancedapp.com, serwera Vanced Discord lub Vanced GitHub - Sukces! Preferencje instalacji %1$s - Vanced został pomyślnie zainstalowany! Uruchomić teraz? Wersja - Vanced Music został pomyślnie zainstalowany! Uruchomić teraz? Prosimy o cierpliwość… - Uruchom Witaj Wybierz preferowany język(i) dla Vanced diff --git a/app/src/main/res/values-ps-rAF/strings.xml b/app/src/main/res/values-ps-rAF/strings.xml index d45d10c68b..147d21e598 100644 --- a/app/src/main/res/values-ps-rAF/strings.xml +++ b/app/src/main/res/values-ps-rAF/strings.xml @@ -36,11 +36,6 @@ Support us Accent Color - Blue - Green - Purple - Red - Yellow Appearance Behavior Clear downloaded files @@ -78,13 +73,9 @@ Error Redownload Make sure that you downloaded the app from vancedapp.com, the Vanced Discord server, or the Vanced GitHub - Success! %1$s Installation Preferences - Vanced has successfully been installed! Open now? Version - Vanced Music has successfully been installed! Open now? Please be patient… - Open Welcome Choose your preferred language(s) for Vanced diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 21f7606804..4b6eade279 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -36,11 +36,6 @@ Apoie-nos Cor de destaque - Azul - Verde - Roxo - Vermelho - Amarelo Aparência Comportamento Limpar arquivos baixados @@ -78,13 +73,9 @@ Erro Baixar novamente Certifique-se de fazer o download do aplicativo em vancedapp.com, no servidor Vanced Discord ou no Vanced GitHub - Sucesso! %1$s Preferências de Instalação - O Vanced foi instalado com sucesso. Deseja iniciá-lo agora? Versão - O Vanced Music foi instalado com sucesso! Abrir agora? Por favor, seja paciente… - Abrir Bem-vindo Escolha o seu idioma preferido para o Vanced diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 2095b1263e..0474e29fe5 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -36,11 +36,6 @@ Suporte-nos Cor de Destaque - Azul - Verde - Roxo - Vermelho - Amarelo Aparência Comportamento Limpar ficheiros descarregados @@ -78,13 +73,9 @@ Erro Voltar a descarregar Certifique-se de que você baixou o aplicativo do vancedapp.com, o servidor Vanced Discord ou o Vanced GitHub - Sucesso! Preferências de instalação %1$s - O Vanced foi instalado com sucesso! Abrir agora? Versão - O Vanced Music foi instalado com sucesso! Pretende abri-lo? Por favor, sejas paciente… - Abrir Bem-Vindo Escolha a(s) sua(s) língua(s) de preferência para o Vanced diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index a154ec0a94..181c55c3aa 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -36,11 +36,6 @@ Ajutați-ne Nuanță culoare - Albastru - Verde - Mov - Roșu - Galben Aspect Comportament Ştergeţi fişierele descărcate @@ -78,13 +73,9 @@ Eroare Redescărcare Asigurați-vă că ați descărcat aplicația de pe vancedapp.com, de pe serverul Discord Vanced sau de pe GitHub Vanced - Succes! %1$s Preferințe de instalare - Vanced a fost instalat cu succes! Deschideți acum? Versiune - Vanced Music a fost instalat cu succes! Deschizi acum? Vă rugăm să aveți răbdare… - Deschideți Bun venit Alegeți limba preferată pentru Vanced diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 6f3a4f5db4..bb2ffe0dc2 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -36,11 +36,6 @@ Поддержите нас Второстепенный цвет - Синий - Зелёный - Фиолетовый - Красный - Жёлтый Оформление Поведение Удалить загруженные файлы @@ -78,13 +73,9 @@ Ошибка Скачать заново Пожалуйста, убедитесь, что вы скачали это приложение с vancedapp.com, сервера Vanced в Discord или с официального GitHub - Успешно! Параметры установки %1$s - Vanced успешно установлен! Хотите запустить его сейчас? Версия - Vanced Music успешно установлен! Хотите запустить его сейчас? Пожалуйста, подождите… - Открыть Добро пожаловать Выберите предпочитаемый язык для Vanced diff --git a/app/src/main/res/values-si-rLK/strings.xml b/app/src/main/res/values-si-rLK/strings.xml index 8fc71f61ee..039bb404b8 100644 --- a/app/src/main/res/values-si-rLK/strings.xml +++ b/app/src/main/res/values-si-rLK/strings.xml @@ -36,11 +36,6 @@ Support us අනෙක් වර්ණය - Blue - Green - Purple - Red - Yellow Appearance Behavior Clear downloaded files @@ -78,13 +73,9 @@ දෝෂය Redownload Make sure that you downloaded the app from vancedapp.com, the Vanced Discord server, or the Vanced GitHub - සාර්ථකයි! %1$s Installation Preferences - Vanced has successfully been installed! Open now? අනුවාදය - Vanced Music has successfully been installed! Open now? Please be patient… - විවෘත කරන්න ආයුබෝවන් Choose your preferred language(s) for Vanced diff --git a/app/src/main/res/values-so-rSO/strings.xml b/app/src/main/res/values-so-rSO/strings.xml index a04699657a..ae7d89da21 100644 --- a/app/src/main/res/values-so-rSO/strings.xml +++ b/app/src/main/res/values-so-rSO/strings.xml @@ -36,11 +36,6 @@ Na taageer Midabka - Buluug - Cagaar - Baarbal - Guduud - Jaalle Muuqaalka Dabeecada Nadiifi waxyaabaha lasoo dajiyay @@ -78,13 +73,9 @@ Khalad Dib udaji Iska hubi inaad app-ka kaso dajisatay vancedapp.com, xaga martigaliyaha Discord, ama meesha Vanced ee GitHub - Waa la fuliyay! Fadhiga Kushubida %1$s - Vanced waa lagu shubay! Fur hadda? Tirsiga - Vanced Music waa lagu shubay! Fur hadda? Fadlan dulqaado… - Fur Soo dhawoow Dooro luuqada(ha) aad rabto ee app-ka Vanced diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index 48dadba21c..3da0494acb 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -36,11 +36,6 @@ Support us Боја наглашавања - Blue - Green - Purple - Red - Yellow Изглед Понашање Обриши преузете датотеке @@ -78,13 +73,9 @@ Грешка Поново преузми Преузмите апликацију само са официјелног Vanced сајта vancedapp.com, Vanced Discord сервера или Vanced GitHub-а - Успешно! %1$s Инсталациона подешавања - Vanced је успешно инсталиран! Желите да га одмах отворите? Верзија - Vanced Music је успешно инсталиран! Желите да га одмах отворите? Молимо Вас да будете стрпљиви… - Отвори Добро дошли Одаберите језик за коришћење Vanced апликације diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index e6f22b77d7..0ac1be3866 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -36,11 +36,6 @@ Support us Accentfärg - Blue - Green - Purple - Red - Yellow Utseende Beteende Rensa nedladdade filer @@ -78,13 +73,9 @@ Fel Ladda ner igen Se till att du laddade ner appen från vancedapp.com, den Vanced Discord-servern eller den Vanced GitHub - Framgång! %1$s Valda installationsinställningar - Vanced har installerats! Starta nu? Version - Vanced Music har installerats! Öppna nu? Vänligen ha tålamod… - Öppna Välkommen Välj önskade språk för Vanced diff --git a/app/src/main/res/values-ta-rIN/strings.xml b/app/src/main/res/values-ta-rIN/strings.xml index c20d3e4eae..525a99d050 100644 --- a/app/src/main/res/values-ta-rIN/strings.xml +++ b/app/src/main/res/values-ta-rIN/strings.xml @@ -36,11 +36,6 @@ எங்களை ஆதரியுங்கள் கவனங்கவர் நிறம் - நீலம் - பச்சை - ஊதா - சிவப்பு - மஞ்சள் தோற்றம் செயல்பாடு பதிவிறக்கிய கோப்புகளை அழிக்கவும் @@ -78,13 +73,9 @@ பிழை மீண்டும் பதிவிறக்கு பயன்பாட்டை vancedapp.com, Vanced Discord சேவையகம் அல்லது Vanced GitHub இலிருந்து பதிவிறக்கம் செய்துள்ளீர்கள் என்பதை உறுதிப்படுத்திக் கொள்ளுங்கள் - வெற்றி! %1$s நிறுவல் விருப்பத்தேர்வுகள் - வேன்ட் வெற்றிகரமாக நிறுவப்பட்டது! இப்போது திற? பதிப்பு - வேன்ஸ்ட் மியூசிக் வெற்றிகரமாக நிறுவப்பட்டுள்ளது! இப்போது திற? தயவுசெய்து பொருமைையாயிறு… - திற வரவேற்பு வேன்ஸ்டுக்காக உங்களுக்கு விருப்பமான மொழியைத் தேர்வுசெய்க diff --git a/app/src/main/res/values-th-rTH/strings.xml b/app/src/main/res/values-th-rTH/strings.xml index 42090e741c..62a051c24c 100644 --- a/app/src/main/res/values-th-rTH/strings.xml +++ b/app/src/main/res/values-th-rTH/strings.xml @@ -36,11 +36,6 @@ สนับสนุนพวกเรา สีหลัก - สีน้ำเงิน - สีเขียว - สีม่วง - สีแดง - สีเหลือง ลักษณะที่ปรากฏ ลักษณะการทำงาน ล้างไฟล์ที่ดาวน์โหลดไว้ @@ -78,13 +73,9 @@ ผิดพลาด ดาวน์โหลดอีกครั้ง ตรวจสอบให้แน่ใจว่าคุณดาวน์โหลดแอพจากช่องทางที่ถูกต้อง vancedapp.com, เซิร์ฟเวอร์ Vanced Discord หรือ Vanced GitHub - สำเร็จ! %1$s กำหนดค่าการติดตั้ง - ติดตั้ง Vanced เรียบร้อยแล้ว! เปิดเดี๋ยวนี้? รุ่น - ติดตั้ง Vanced Music เรียบร้อยแล้ว! เปิดเดี๋ยวนี้? โปรดรอสักครู่… - เปิด ยินดีต้อนรับ เลือกภาษาที่คุณต้องการใช้สำหรับ Vanced diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index e859fafa2b..5a626ca8e1 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -36,11 +36,6 @@ Tıkla, destek ol Tema Rengi - Mavi - Yeşil - Mor - Kırmızı - Sarı Görünüm Davranış İndirilen dosyaları temizle @@ -78,13 +73,9 @@ Hata Tekrar İndir Uygulamayı vancedapp.com, Vanced Discord sunucusu, veya Vanced GitHub\'dan indirdiğinizden emin olun - Başarılı! %1$s Kurulum Tercihleri - Vanced Başarıyla kuruldu! Başlatılsın mı? Sürüm - Vanced Music başarıyla kuruldu! Başlatılsın mı? Biraz zaman alabilir… - Hoş Geldiniz Vanced için tercih ettiğiniz dil(ler)i seçin diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 814e796e43..487a67ab70 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -36,11 +36,6 @@ Підтримайте нас Вторинний колір - Синій - Зелений - Фіолетовий - Червоний - Жовтий Вигляд Поведінка Очистити завантажені файли @@ -78,13 +73,9 @@ Помилка Завантажити заново Переконайтеся, що ви завантажили додаток з vancedapp.com, Vanced Discord сервер або Vanced GitHub - Успіх! Параметри встановлення %1$s - Vanced був успішно встановлений! Відкрити зараз? Версія - Vanced Music успішно встановлено! Відкрити зараз? Будь ласка, зачекайте… - Відкрити Привіт! Виберіть бажану мову(и) для Vanced diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 5d00d099b0..649cb486e0 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -36,11 +36,6 @@ Hỗ trợ chúng tôi Màu chủ đạo - Xanh dương - Xanh lá - Tím - Đỏ - Vàng Giao diện Hành vi Xóa các tệp tin đã tải về @@ -78,13 +73,9 @@ Lỗi Tải lại Chắc chắn rằng bạn đã tải ứng dụng này từ vancedapp.com, server Discord của Vanced hoặc GitHub của Vanced - Thành công! %1$s Tùy biến Cài đặt - Vanced đã được cài đặt thành công! Mở ứng dụng? Phiên bản - Vanced Music đã được cài đặt thành công! Mở ứng dụng? Hãy kiên nhẫn… - Mở Chào mừng Chọn ngôn ngữ mong muốn cho Vanced diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index ff339d1f87..ad519b5fab 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -36,11 +36,6 @@ 支持我们 强调色 - 蓝色 - 绿色 - 紫色 - 红色 - 黄色 外观 行为 清除已下载文件 @@ -78,13 +73,9 @@ 错误 重新下载 请确保您是从 vancedapp.com 、 Vanced Discord 服务器或 Vanced Github 下载本应用 - 成功! %1$s 安装首选设定 - 已成功安装 Vanced,现在打开吗? 版本 - 已成功安装 Vanced 音乐! 现在打开吗? 请耐心等候… - 打开 欢迎 为 Vanced 选择您的首选语言 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 30f2ecf23c..35ff9cc11f 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -36,11 +36,6 @@ 支持我們 輔色 - 藍色 - 綠色 - 紫色 - 紅色 - 黃色 外觀 行為 清除已下載的檔案 @@ -78,13 +73,9 @@ 錯誤 重新下載 請確保您從 vancedapp.com、Vanced Discord 伺服器或 Vanced GitHub 下載本程式 - 成功! %1$s 安裝偏好設定 - 成功安裝 Vanced ,要開啟它嗎? 版本 - 成功安裝 Vanced Music !要開啟它嗎? 請耐心等候… - 啟動 歡迎 為 Vanced 選擇您偏好的語言 diff --git a/app/src/main/res/values/font_certs.xml b/app/src/main/res/values/font_certs.xml deleted file mode 100644 index d2226ac01c..0000000000 --- a/app/src/main/res/values/font_certs.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - @array/com_google_android_gms_fonts_certs_dev - @array/com_google_android_gms_fonts_certs_prod - - - - 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 - - - diff --git a/app/src/main/res/values/preloaded_fonts.xml b/app/src/main/res/values/preloaded_fonts.xml deleted file mode 100644 index 62e425af7d..0000000000 --- a/app/src/main/res/values/preloaded_fonts.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - @font/exo - @font/exo_2 - @font/exo_2_bold - @font/exo_semibold - @font/roboto_medium - - diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index eb163f4931..35ac0da0a8 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -41,11 +41,6 @@ Accent Color - Blue - Green - Purple - Red - Yellow Appearance Behavior Clear downloaded files @@ -85,15 +80,11 @@ Error Redownload Make sure that you downloaded the app from vancedapp.com, the Vanced Discord server, or the Vanced GitHub - Success! %1$s Installation Preferences - Vanced has successfully been installed! Open now? Version - Vanced Music has successfully been installed! Open now? Bug in microG Due to a bug in microG, installing Vanced 16+ first requires you to install v15.43.32, open, login and then manually select and install version 16. Do you want to proceed installing v15.43.32? Please be patient… - Open Welcome diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 5c92c63325..1a929c6a19 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -167,10 +167,6 @@ bold - -