From c897f5503971c7274b85dfef3e71036f6e5b319a Mon Sep 17 00:00:00 2001 From: Xinto Date: Thu, 5 Nov 2020 22:26:27 +0400 Subject: [PATCH] added a version selector and more dialogs --- app/proguard-rules.pro | 2 +- app/src/main/AndroidManifest.xml | 4 +- .../vanced/manager/adapter/AppListAdapter.kt | 2 +- .../manager/adapter/AppVersionsAdapter.kt | 40 ++++++++++++ .../main/java/com/vanced/manager/core/App.kt | 40 ++---------- .../core/downloader/MicrogDownloader.kt | 3 +- .../core/downloader/MusicDownloader.kt | 3 +- .../core/downloader/VancedDownloader.kt | 11 ++-- .../vanced/manager/model/AppVersionsModel.kt | 6 ++ .../com/vanced/manager/model/DataModel.kt | 38 +++++------- .../vanced/manager/model/VancedPrefModel.kt | 4 +- .../com/vanced/manager/ui/MainActivity.kt | 15 ++++- .../vanced/manager/ui/core/ItemDecoration.kt | 38 ------------ .../manager/ui/core/PreferenceSwitch.kt | 8 +-- .../ui/dialogs/AppVersionSelectorDialog.kt | 62 +++++++++++++++++++ .../dialogs/VancedLanguageSelectionDialog.kt | 7 +-- .../ui/dialogs/VancedPreferencesDialog.kt | 49 ++++++--------- .../manager/ui/dialogs/VancedThemeDialog.kt | 58 +++++++++++++++++ .../ui/fragments/DevSettingsFragment.kt | 24 +------ .../manager/ui/fragments/HomeFragment.kt | 58 +---------------- .../manager/ui/viewmodels/HomeViewModel.kt | 22 +++---- .../ui/viewmodels/HomeViewModelFactory.kt | 1 + .../com/vanced/manager/utils/Extensions.kt | 28 ++++++++- .../com/vanced/manager/utils/InternetTools.kt | 53 +++++++++++++++- .../vanced/manager/utils/LanguageHelper.kt | 55 +++++++++------- .../com/vanced/manager/utils/PackageHelper.kt | 5 +- .../com/vanced/manager/utils/ThemeHelper.kt | 22 +++---- app/src/main/res/drawable/ic_done.xml | 5 -- app/src/main/res/drawable/ic_download.xml | 5 -- app/src/main/res/drawable/ic_update.xml | 5 -- .../res/layout/dialog_bottom_radio_button.xml | 38 ++++++++++++ .../dialog_installation_preferences.xml | 39 +++++++++--- app/src/main/res/layout/fragment_settings.xml | 1 - app/src/main/res/layout/view_app.xml | 1 - app/src/main/res/values-af-rZA/strings.xml | 2 - app/src/main/res/values-ar-rSA/strings.xml | 2 - app/src/main/res/values-az-rAZ/strings.xml | 2 - app/src/main/res/values-bn-rBD/strings.xml | 2 - app/src/main/res/values-bn-rIN/strings.xml | 2 - app/src/main/res/values-ca-rES/strings.xml | 2 - app/src/main/res/values-cs-rCZ/strings.xml | 2 - app/src/main/res/values-da-rDK/strings.xml | 2 - app/src/main/res/values-de-rDE/strings.xml | 2 - app/src/main/res/values-el-rGR/strings.xml | 2 - app/src/main/res/values-es-rES/strings.xml | 2 - app/src/main/res/values-fi-rFI/strings.xml | 2 - app/src/main/res/values-fr-rFR/strings.xml | 2 - app/src/main/res/values-hi-rIN/strings.xml | 2 - app/src/main/res/values-hu-rHU/strings.xml | 2 - app/src/main/res/values-in-rID/strings.xml | 2 - app/src/main/res/values-it-rIT/strings.xml | 2 - app/src/main/res/values-iw-rIL/strings.xml | 2 - app/src/main/res/values-ja-rJP/strings.xml | 2 - app/src/main/res/values-ka-rGE/strings.xml | 2 - app/src/main/res/values-ko-rKR/strings.xml | 2 - app/src/main/res/values-nl-rNL/strings.xml | 2 - app/src/main/res/values-no-rNO/strings.xml | 2 - app/src/main/res/values-pa-rIN/strings.xml | 2 - app/src/main/res/values-pl-rPL/strings.xml | 2 - app/src/main/res/values-pt-rBR/strings.xml | 2 - app/src/main/res/values-pt-rPT/strings.xml | 2 - app/src/main/res/values-ro-rRO/strings.xml | 2 - app/src/main/res/values-ru-rRU/strings.xml | 2 - app/src/main/res/values-si-rLK/strings.xml | 2 - app/src/main/res/values-sr-rSP/strings.xml | 2 - app/src/main/res/values-sv-rSE/strings.xml | 2 - app/src/main/res/values-ta-rIN/strings.xml | 2 - app/src/main/res/values-tr-rTR/strings.xml | 2 - app/src/main/res/values-uk-rUA/strings.xml | 2 - app/src/main/res/values-v23/themes.xml | 38 ------------ app/src/main/res/values-vi-rVN/strings.xml | 2 - app/src/main/res/values-zh-rCN/strings.xml | 2 - app/src/main/res/values-zh-rTW/strings.xml | 2 - app/src/main/res/values/arrays.xml | 5 -- app/src/main/res/values/strings.xml | 6 +- app/src/main/res/values/themes.xml | 20 +++--- 76 files changed, 463 insertions(+), 434 deletions(-) create mode 100644 app/src/main/java/com/vanced/manager/adapter/AppVersionsAdapter.kt create mode 100644 app/src/main/java/com/vanced/manager/model/AppVersionsModel.kt delete mode 100644 app/src/main/java/com/vanced/manager/ui/core/ItemDecoration.kt create mode 100644 app/src/main/java/com/vanced/manager/ui/dialogs/AppVersionSelectorDialog.kt create mode 100644 app/src/main/java/com/vanced/manager/ui/dialogs/VancedThemeDialog.kt delete mode 100644 app/src/main/res/drawable/ic_done.xml delete mode 100644 app/src/main/res/drawable/ic_download.xml delete mode 100644 app/src/main/res/drawable/ic_update.xml create mode 100644 app/src/main/res/layout/dialog_bottom_radio_button.xml diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 7233f3e2..cad0175a 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -13,7 +13,7 @@ #} -keep class com.vanced.manager.core.App --keepnames class androidx.navigation.fragment.NavHostFragment +-keep class com.crowdin.platform.* { *; } # Uncomment this to preserve the line number information for # debugging stack traces. diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 57b0ceb7..f2734a0b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -50,14 +50,14 @@ + android:theme="@style/DarkTheme_Blue"/> + android:theme="@style/DarkTheme_Blue"> 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 9adbdc4c..0015f4d0 100644 --- a/app/src/main/java/com/vanced/manager/adapter/AppListAdapter.kt +++ b/app/src/main/java/com/vanced/manager/adapter/AppListAdapter.kt @@ -19,7 +19,7 @@ class AppListAdapter( ) : RecyclerView.Adapter() { val apps = mutableListOf() - val dataModels = mutableListOf() + private val dataModels = mutableListOf() private val rootDataModels = mutableListOf() private val prefs = getDefaultSharedPreferences(context) private var itemCount = 0 diff --git a/app/src/main/java/com/vanced/manager/adapter/AppVersionsAdapter.kt b/app/src/main/java/com/vanced/manager/adapter/AppVersionsAdapter.kt new file mode 100644 index 00000000..599529ad --- /dev/null +++ b/app/src/main/java/com/vanced/manager/adapter/AppVersionsAdapter.kt @@ -0,0 +1,40 @@ +package com.vanced.manager.adapter + +import android.content.Context +import android.view.View +import android.view.ViewGroup +import android.widget.ArrayAdapter +import android.widget.TextView +import com.vanced.manager.model.AppVersionsModel + +class AppVersionsAdapter(context: Context, private var values: Array) : ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, values) { + + override fun getCount(): Int { + return values.size + } + + override fun getItem(position: Int): AppVersionsModel { + return values[position] + } + + override fun getItemId(position: Int): Long { + return position.toLong() + } + + override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { + val label = super.getView(position, convertView, parent) as TextView + label.text = values[position].version + return label + } + + override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup): View { + val label = super.getDropDownView(position, convertView, parent) as TextView + label.text = values[position].version + return label + } + + fun getPrefValue(position: Int): String { + return values[position].value + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/vanced/manager/core/App.kt b/app/src/main/java/com/vanced/manager/core/App.kt index b211ce9e..032bdb7f 100644 --- a/app/src/main/java/com/vanced/manager/core/App.kt +++ b/app/src/main/java/com/vanced/manager/core/App.kt @@ -13,6 +13,7 @@ import com.crowdin.platform.data.remote.NetworkType import com.downloader.PRDownloader import com.vanced.manager.BuildConfig.* import com.vanced.manager.utils.InternetTools.baseUrl +import com.vanced.manager.utils.InternetTools.loadJson import com.vanced.manager.utils.JsonHelper.getJson import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -20,17 +21,10 @@ import kotlinx.coroutines.launch open class App: Application() { - var vanced = ObservableField() - var music = ObservableField() - var microg = ObservableField() - var manager = ObservableField() - private val prefs by lazy { getDefaultSharedPreferences(this) } - //var braveTiers = ObservableField() - override fun onCreate() { - loadJson() + loadJson(this) super.onCreate() PRDownloader.initialize(this) @@ -39,7 +33,9 @@ open class App: Application() { withDistributionHash(CROWDIN_HASH) withNetworkType(NetworkType.WIFI) if (ENABLE_CROWDIN_AUTH) { - withRealTimeUpdates() + if (prefs.getBoolean("crowdin_real_time", false)) + withRealTimeUpdates() + withSourceLanguage("en") withAuthConfig(AuthConfig(CROWDIN_CLIENT_ID, CROWDIN_CLIENT_SECRET, null)) withScreenshotEnabled() @@ -53,32 +49,6 @@ open class App: Application() { } - open fun loadJson() = CoroutineScope(Dispatchers.IO).launch { - val installUrl = prefs.getString("install_url", baseUrl) - val latest = getJson("$installUrl/latest.json") -// braveTiers.apply { -// set(getJson("$installUrl/sponsor.json")) -// notifyChange() -// } - - vanced.apply { - set(latest?.obj("vanced")) - notifyChange() - } - music.apply { - set(latest?.obj("music")) - notifyChange() - } - microg.apply { - set(latest?.obj("microg")) - notifyChange() - } - manager.apply { - set(latest?.obj("manager")) - notifyChange() - } - } - override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) Crowdin.onConfigurationChanged() 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 3b435ef9..fa85b1a5 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 @@ -8,6 +8,7 @@ import com.vanced.manager.R import com.vanced.manager.core.App import com.vanced.manager.utils.DownloadHelper.downloadProgress import com.vanced.manager.utils.InternetTools.getFileNameFromUrl +import com.vanced.manager.utils.InternetTools.microg import com.vanced.manager.utils.PackageHelper.install import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -19,7 +20,7 @@ object MicrogDownloader { context: Context, ) { CoroutineScope(Dispatchers.IO).launch { - val url = (context.applicationContext as App).microg.get()?.string("url") + val url = microg.get()?.string("url") downloadProgress.get()?.currentDownload = PRDownloader.download(url, context.getExternalFilesDir("microg")?.path, "microg.apk") .build() 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 646dd4de..96482c38 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 @@ -10,6 +10,7 @@ import com.vanced.manager.core.App import com.vanced.manager.utils.DownloadHelper.downloadProgress import com.vanced.manager.utils.InternetTools.baseUrl import com.vanced.manager.utils.InternetTools.getFileNameFromUrl +import com.vanced.manager.utils.InternetTools.music import com.vanced.manager.utils.PackageHelper.install import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -23,7 +24,7 @@ object MusicDownloader { CoroutineScope(Dispatchers.IO).launch { val prefs = getDefaultSharedPreferences(context) variant = prefs.getString("vanced_variant", "nonroot") - val url = "${prefs.getString("install_url", baseUrl)}/music/v${(context.applicationContext as App).music.get()?.string("version")}.apk" + val url = "${prefs.getString("install_url", baseUrl)}/music/v${music.get()?.string("version")}.apk" downloadProgress.get()?.currentDownload = PRDownloader.download(url, context.getExternalFilesDir("music/$variant")?.path, "music.apk") .build() 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 7e78695c..0fbbd852 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 @@ -10,12 +10,14 @@ import com.downloader.PRDownloader import com.google.firebase.analytics.FirebaseAnalytics import com.google.firebase.analytics.ktx.logEvent import com.vanced.manager.R -import com.vanced.manager.core.App import com.vanced.manager.utils.AppUtils.vancedRootPkg import com.vanced.manager.utils.DownloadHelper.downloadProgress +import com.vanced.manager.utils.Extensions.convertToAppVersions import com.vanced.manager.utils.InternetTools import com.vanced.manager.utils.InternetTools.baseUrl import com.vanced.manager.utils.InternetTools.getFileNameFromUrl +import com.vanced.manager.utils.InternetTools.vanced +import com.vanced.manager.utils.InternetTools.vancedVersions import com.vanced.manager.utils.LanguageHelper.getDefaultVancedLanguages import com.vanced.manager.utils.PackageHelper.getPkgVerCode import com.vanced.manager.utils.PackageHelper.installVanced @@ -53,16 +55,15 @@ object VancedDownloader { private var downloadPath: String? = null fun downloadVanced(context: Context) { - val app = context.applicationContext as App defPrefs = getDefaultSharedPreferences(context) installUrl = defPrefs.getString("install_url", baseUrl) prefs = context.getSharedPreferences("installPrefs", Context.MODE_PRIVATE) variant = defPrefs.getString("vanced_variant", "nonroot") downloadPath = context.getExternalFilesDir("vanced/$variant")?.path File(downloadPath.toString()).deleteRecursively() - lang = prefs.getString("lang", getDefaultVancedLanguages(app))?.split(", ")?.toMutableList() + lang = prefs.getString("lang", getDefaultVancedLanguages())?.split(", ")?.toMutableList() theme = prefs.getString("theme", "dark") - vancedVersion = app.vanced.get()?.string("version") + vancedVersion = defPrefs.getString("vanced_version", vancedVersions.get()?.value?.convertToAppVersions()?.get(0)?.value) themePath = "$installUrl/apks/v$vancedVersion/$variant/Theme" hashUrl = "apks/v$vancedVersion/$variant/Theme/hash.json" //newInstaller = defPrefs.getBoolean("new_installer", false) @@ -74,7 +75,7 @@ object VancedDownloader { } count = 0 - vancedVersionCode = app.vanced.get()?.int("versionCode") ?: 0 + vancedVersionCode = vanced.get()?.int("versionCode") ?: 0 downloadSplits(context) } diff --git a/app/src/main/java/com/vanced/manager/model/AppVersionsModel.kt b/app/src/main/java/com/vanced/manager/model/AppVersionsModel.kt new file mode 100644 index 00000000..37e12d1f --- /dev/null +++ b/app/src/main/java/com/vanced/manager/model/AppVersionsModel.kt @@ -0,0 +1,6 @@ +package com.vanced.manager.model + +data class AppVersionsModel( + val version: String, + val value: String +) \ No newline at end of file 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 6b43120e..c0ea36f8 100644 --- a/app/src/main/java/com/vanced/manager/model/DataModel.kt +++ b/app/src/main/java/com/vanced/manager/model/DataModel.kt @@ -3,11 +3,8 @@ package com.vanced.manager.model import android.content.Context import android.graphics.drawable.Drawable import android.os.Build -import androidx.core.content.ContextCompat -import androidx.databinding.Observable -import androidx.databinding.ObservableBoolean -import androidx.databinding.ObservableField -import androidx.databinding.ObservableInt +import androidx.databinding.* +import com.beust.klaxon.JsonArray import com.beust.klaxon.JsonObject import com.vanced.manager.R import com.vanced.manager.utils.PackageHelper.isPackageInstalled @@ -20,7 +17,8 @@ open class DataModel( private val context: Context, val appPkg: String, val appName: String, - val appIcon: Drawable? + val appIcon: Drawable?, + appVersions: ObservableField>? = null ) { private val versionCode = ObservableInt() @@ -28,29 +26,34 @@ open class DataModel( val isAppInstalled = ObservableBoolean() val versionName = ObservableField() + //val versions = ObservableField>() val installedVersionName = ObservableField() val buttonTxt = ObservableField() - //val buttonIcon = ObservableField() val changelog = ObservableField() fun fetch() = CoroutineScope(Dispatchers.IO).launch { + val jobj = jsonObject.get() isAppInstalled.set(isPackageInstalled(appPkg, context.packageManager)) - versionName.set(jsonObject.get()?.string("version")?.removeSuffix("-vanced") ?: context.getString(R.string.unavailable)) + versionName.set(jobj?.string("version")?.removeSuffix("-vanced") ?: context.getString(R.string.unavailable)) + //versions.set(appVersions?.get()?.value?.convertToAppVersions()) installedVersionName.set(getPkgVersionName(isAppInstalled.get(), appPkg)) - versionCode.set(jsonObject.get()?.int("versionCode") ?: 0) + versionCode.set(jobj?.int("versionCode") ?: 0) installedVersionCode.set(getPkgVersionCode(isAppInstalled.get(), appPkg)) buttonTxt.set(compareInt(installedVersionCode.get(), versionCode.get())) - //buttonIcon.set(compareIntDrawable(installedVersionCode.get(), versionCode.get())) - changelog.set(jsonObject.get()?.string("changelog") ?: context.getString(R.string.unavailable)) + changelog.set(jobj?.string("changelog") ?: context.getString(R.string.unavailable)) } init { fetch() - jsonObject.addOnPropertyChangedCallback(object : Observable.OnPropertyChangedCallback() { + jsonObject.addOnPropertyChangedCallback(object : Observable.OnPropertyChangedCallback() { + override fun onPropertyChanged(sender: Observable?, propertyId: Int) { + fetch() + } + }) + appVersions?.addOnPropertyChangedCallback(object : Observable.OnPropertyChangedCallback() { override fun onPropertyChanged(sender: Observable?, propertyId: Int) { fetch() } - }) } @@ -83,13 +86,4 @@ open class DataModel( } - private fun compareIntDrawable(int1: Int, int2: Int): Drawable? { - return when { - int1 == 0 -> ContextCompat.getDrawable(context, R.drawable.ic_download) - int2 > int1 -> ContextCompat.getDrawable(context, R.drawable.ic_update) - int2 == int1 -> ContextCompat.getDrawable(context, R.drawable.ic_done) - else -> ContextCompat.getDrawable(context, R.drawable.ic_download) - } - } - } diff --git a/app/src/main/java/com/vanced/manager/model/VancedPrefModel.kt b/app/src/main/java/com/vanced/manager/model/VancedPrefModel.kt index eab9fc8d..4f155b43 100644 --- a/app/src/main/java/com/vanced/manager/model/VancedPrefModel.kt +++ b/app/src/main/java/com/vanced/manager/model/VancedPrefModel.kt @@ -1,6 +1,6 @@ package com.vanced.manager.model data class VancedPrefModel( - val name: String, - val value: String + val name: String, + val value: String ) \ No newline at end of file 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 635e814a..02f14f5e 100644 --- a/app/src/main/java/com/vanced/manager/ui/MainActivity.kt +++ b/app/src/main/java/com/vanced/manager/ui/MainActivity.kt @@ -17,6 +17,7 @@ import androidx.preference.PreferenceManager.getDefaultSharedPreferences import com.crowdin.platform.Crowdin import com.crowdin.platform.LoadingStateListener import com.google.firebase.messaging.FirebaseMessaging +import com.vanced.manager.BuildConfig.ENABLE_CROWDIN_AUTH import com.vanced.manager.R import com.vanced.manager.databinding.ActivityMainBinding import com.vanced.manager.ui.dialogs.DialogContainer @@ -27,6 +28,8 @@ import com.vanced.manager.ui.fragments.SettingsFragmentDirections import com.vanced.manager.utils.Extensions.show import com.vanced.manager.utils.InternetTools import com.vanced.manager.utils.LanguageContextWrapper +import com.vanced.manager.utils.LanguageHelper.authCrowdin +import com.vanced.manager.utils.LanguageHelper.onActivityResult import com.vanced.manager.utils.PackageHelper import com.vanced.manager.utils.ThemeHelper.setFinalTheme @@ -48,8 +51,10 @@ class MainActivity : AppCompatActivity() { } override fun onCreate(savedInstanceState: Bundle?) { - setFinalTheme(this) + setFinalTheme() super.onCreate(savedInstanceState) + if (ENABLE_CROWDIN_AUTH) + authCrowdin() binding = DataBindingUtil.setContentView(this, R.layout.activity_main) @@ -80,13 +85,12 @@ class MainActivity : AppCompatActivity() { } override fun onResume() { - setFinalTheme(this) + setFinalTheme() super.onResume() Crowdin.registerDataLoadingObserver(loadingObserver) } override fun onOptionsItemSelected(item: MenuItem): Boolean { - when (item.itemId) { android.R.id.home -> { onBackPressedDispatcher.onBackPressed() @@ -117,6 +121,11 @@ class MainActivity : AppCompatActivity() { super.attachBaseContext(Crowdin.wrapContext(LanguageContextWrapper.wrap(newBase))) } + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + onActivityResult(requestCode) + } + override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) recreate() //restarting activity to recreate viewmodels, otherwise some text won't update diff --git a/app/src/main/java/com/vanced/manager/ui/core/ItemDecoration.kt b/app/src/main/java/com/vanced/manager/ui/core/ItemDecoration.kt deleted file mode 100644 index b73caf65..00000000 --- a/app/src/main/java/com/vanced/manager/ui/core/ItemDecoration.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.vanced.manager.ui.core - -import android.graphics.Canvas -import android.graphics.Rect -import android.graphics.drawable.Drawable -import android.view.View -import androidx.recyclerview.widget.RecyclerView - -class ItemDecoration(private val line: Drawable?) : RecyclerView.ItemDecoration() { - - override fun getItemOffsets( - outRect: Rect, - view: View, - parent: RecyclerView, - state: RecyclerView.State - ) { - with(outRect) { - top = 4 - bottom = 4 - } - } - - override fun onDrawOver(c: Canvas, parent: RecyclerView, state: RecyclerView.State) { - val dividerLeft = parent.paddingLeft - val dividerRight = parent.width - parent.paddingRight - - val childCount = parent.childCount - (0..childCount - 2).forEach { - val child = parent.getChildAt(it) - val params = child.layoutParams as RecyclerView.LayoutParams - val dividerTop: Int = child.bottom + params.bottomMargin - val dividerBottom: Int = dividerTop + line!!.intrinsicHeight - line.setBounds(dividerLeft, dividerTop, dividerRight, dividerBottom) - line.draw(c) - } - } - -} \ No newline at end of file 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 65df8e07..ea9c412f 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 @@ -2,7 +2,6 @@ package com.vanced.manager.ui.core import android.content.Context import android.util.AttributeSet -import android.util.Log import android.view.LayoutInflater import android.widget.CompoundButton import android.widget.FrameLayout @@ -30,15 +29,14 @@ class PreferenceSwitch @JvmOverloads constructor( override fun onFinishInflate() { super.onFinishInflate() - preference_switch.isChecked = prefs.getBoolean(prefKey, defValue) setOnClickListener { preference_switch.isChecked = !preference_switch.isChecked - Log.d("clickTest", "clicked") } preference_switch.setOnCheckedChangeListener { buttonView, isChecked -> prefs.edit().putBoolean(prefKey, isChecked).apply() mListener?.onChecked(buttonView, isChecked) } + } fun setOnCheckedListener(method: (buttonView: CompoundButton, isChecked: Boolean) -> Unit) { @@ -61,8 +59,10 @@ class PreferenceSwitch @JvmOverloads constructor( val key = typedArray.getText(R.styleable.PreferenceSwitch_switch_key) val value = typedArray.getBoolean(R.styleable.PreferenceSwitch_switch_def_value, false) - if (key != null) + if (key != null) { prefKey = key.toString() + preference_switch.isChecked = prefs.getBoolean(key.toString(), value) + } defValue = value preference_switch_title.text = title 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 new file mode 100644 index 00000000..5c6d9578 --- /dev/null +++ b/app/src/main/java/com/vanced/manager/ui/dialogs/AppVersionSelectorDialog.kt @@ -0,0 +1,62 @@ +package com.vanced.manager.ui.dialogs + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.core.content.edit +import androidx.databinding.DataBindingUtil +import com.google.android.material.bottomsheet.BottomSheetDialogFragment +import com.google.android.material.radiobutton.MaterialRadioButton +import com.vanced.manager.R +import com.vanced.manager.databinding.DialogBottomRadioButtonBinding +import com.vanced.manager.model.AppVersionsModel +import com.vanced.manager.utils.Extensions.getCheckedButtonTag +import com.vanced.manager.utils.Extensions.getDefaultPrefs +import com.vanced.manager.utils.Extensions.show + +class AppVersionSelectorDialog( + private val versions: Array, + private val app: String +) : BottomSheetDialogFragment() { + + private lateinit var binding: DialogBottomRadioButtonBinding + private val prefs by lazy { requireActivity().getDefaultPrefs() } + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + binding = DataBindingUtil.inflate(inflater, R.layout.dialog_bottom_radio_button, container, false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + loadBoxes() + view.findViewWithTag(prefs.getString("${app}_version", versions[0].value)).isChecked = true + binding.dialogTitle.text = requireActivity().getString(R.string.version) + binding.dialogSave.setOnClickListener { + prefs.edit { + putString("${app}_version", binding.dialogRadiogroup.getCheckedButtonTag()) + } + dismiss() + VancedPreferencesDialog().show(requireActivity()) + } + } + + private fun loadBoxes() { + requireActivity().runOnUiThread { + for (i in versions.indices) { + val rb = MaterialRadioButton(requireActivity()).apply { + text = versions[i].version + tag = versions[i].value + textSize = 18f + } + binding.dialogRadiogroup.addView(rb, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) + } + } + } + +} \ No newline at end of file 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 5c842e7b..c6be66bf 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 @@ -15,7 +15,7 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.google.android.material.button.MaterialButton import com.google.android.material.checkbox.MaterialCheckBox import com.vanced.manager.R -import com.vanced.manager.core.App +import com.vanced.manager.utils.InternetTools.vanced import com.vanced.manager.utils.LanguageHelper.getDefaultVancedLanguages import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -37,8 +37,7 @@ class VancedLanguageSelectionDialog : BottomSheetDialogFragment() { @ExperimentalStdlibApi override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - val app = activity?.application as App - langs = app.vanced.get()?.array("langs")?.value ?: mutableListOf("null") + langs = vanced.get()?.array("langs")?.value ?: mutableListOf("null") loadBoxes(view.findViewById(R.id.lang_button_ll)) view.findViewById(R.id.vanced_install_finish).setOnClickListener { val chosenLangs = mutableListOf() @@ -62,7 +61,7 @@ class VancedLanguageSelectionDialog : BottomSheetDialogFragment() { @ExperimentalStdlibApi private fun loadBoxes(ll: LinearLayout) { CoroutineScope(Dispatchers.Main).launch { - val langPrefs = prefs.getString("lang", getDefaultVancedLanguages(requireActivity())) + val langPrefs = prefs.getString("lang", getDefaultVancedLanguages()) if (this@VancedLanguageSelectionDialog::langs.isInitialized) { if (!langs.contains("null")) { langs.forEach { lang -> 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 2f2397cc..686522f2 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 @@ -5,14 +5,15 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.AdapterView -import android.widget.AdapterView.OnItemSelectedListener import androidx.databinding.DataBindingUtil import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.vanced.manager.R -import com.vanced.manager.adapter.VancedPrefArray import com.vanced.manager.databinding.DialogInstallationPreferencesBinding -import com.vanced.manager.model.VancedPrefModel +import com.vanced.manager.model.AppVersionsModel +import com.vanced.manager.utils.Extensions.convertToAppTheme +import com.vanced.manager.utils.Extensions.convertToAppVersions +import com.vanced.manager.utils.Extensions.show +import com.vanced.manager.utils.InternetTools.vancedVersions import com.vanced.manager.utils.LanguageHelper.getDefaultVancedLanguages import java.util.* @@ -33,7 +34,7 @@ class VancedPreferencesDialog : BottomSheetDialogFragment() { super.onViewCreated(view, savedInstanceState) val prefs = requireActivity().getSharedPreferences("installPrefs", Context.MODE_PRIVATE) - val langPrefs = prefs.getString("lang", getDefaultVancedLanguages(requireActivity()))?.split(", ")?.toTypedArray() + val langPrefs = prefs.getString("lang", getDefaultVancedLanguages())?.split(", ")?.toTypedArray() val showLang = mutableListOf() if (langPrefs != null) { for (lang in langPrefs) { @@ -41,37 +42,25 @@ class VancedPreferencesDialog : BottomSheetDialogFragment() { showLang.add(loc.getDisplayLanguage(loc).capitalize(Locale.ROOT)) } } + val vancedVersionsConv = vancedVersions.get()?.value?.convertToAppVersions() ?: arrayOf(AppVersionsModel("", "")) - val darkTheme = VancedPrefModel( - requireActivity().getString(R.string.install_light_dark), - "dark" - ) + binding.chosenTheme.text = requireActivity().getString(R.string.chosen_theme, prefs.getString("theme", "dark")?.convertToAppTheme(requireActivity())) + binding.chosenVersion.text = requireActivity().getString(R.string.chosen_version, prefs.getString("vanced_version", vancedVersionsConv[0].value)) + binding.chosenLang.text = requireActivity().getString(R.string.chosen_lang, showLang) - val blackTheme = VancedPrefModel( - requireActivity().getString(R.string.install_light_black), - "black" - ) + binding.openThemeSelector.setOnClickListener { + dismiss() + VancedThemeDialog().show(requireActivity()) + } - val adapter = arrayOf(darkTheme, blackTheme) - binding.themeSpinner.adapter = VancedPrefArray(requireActivity(), android.R.layout.simple_spinner_dropdown_item, adapter) - binding.themeSpinner.setSelection(if (prefs.getString("theme", "dark") == "dark") 0 else 1) + binding.openVersionSelector.setOnClickListener { + dismiss() + AppVersionSelectorDialog(vancedVersionsConv, "vanced").show(requireActivity()) + } binding.openLanguageSelector.setOnClickListener { dismiss() - VancedLanguageSelectionDialog().show(requireActivity().supportFragmentManager, "") - } - - binding.chosenLang.text = requireActivity().getString(R.string.chosen_lang, showLang) - - binding.themeSpinner.onItemSelectedListener = object : OnItemSelectedListener { - - override fun onItemSelected(parent: AdapterView<*>?, view: View, position: Int, id: Long) { - prefs.edit().putString("theme", adapter[position].value).apply() - } - - override fun onNothingSelected(parent: AdapterView<*>?) { - return - } + VancedLanguageSelectionDialog().show(requireActivity()) } binding.chosenPrefsInstall.setOnClickListener { diff --git a/app/src/main/java/com/vanced/manager/ui/dialogs/VancedThemeDialog.kt b/app/src/main/java/com/vanced/manager/ui/dialogs/VancedThemeDialog.kt new file mode 100644 index 00000000..85c9f167 --- /dev/null +++ b/app/src/main/java/com/vanced/manager/ui/dialogs/VancedThemeDialog.kt @@ -0,0 +1,58 @@ +package com.vanced.manager.ui.dialogs + +import android.content.Context +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.core.content.edit +import androidx.databinding.DataBindingUtil +import com.google.android.material.bottomsheet.BottomSheetDialogFragment +import com.google.android.material.radiobutton.MaterialRadioButton +import com.vanced.manager.R +import com.vanced.manager.databinding.DialogBottomRadioButtonBinding +import com.vanced.manager.utils.Extensions.convertToAppTheme +import com.vanced.manager.utils.Extensions.getCheckedButtonTag +import com.vanced.manager.utils.Extensions.show +import com.vanced.manager.utils.InternetTools.vanced +import java.util.* + +class VancedThemeDialog : BottomSheetDialogFragment() { + + private lateinit var binding: DialogBottomRadioButtonBinding + private val prefs by lazy { requireActivity().getSharedPreferences("installPrefs", Context.MODE_PRIVATE) } + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + binding = DataBindingUtil.inflate(inflater, R.layout.dialog_bottom_radio_button, container, false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + loadButtons() + binding.dialogTitle.text = requireActivity().getString(R.string.theme) + view.findViewWithTag(prefs.getString("theme", "dark")).isChecked = true + binding.dialogSave.setOnClickListener { + prefs.edit { putString("theme", binding.dialogRadiogroup.getCheckedButtonTag()) } + dismiss() + VancedPreferencesDialog().show(requireActivity()) + } + } + + private fun loadButtons() { + requireActivity().runOnUiThread { + vanced.get()?.array("themes")?.value?.forEach { theme -> + val rb = MaterialRadioButton(requireActivity()).apply { + text = theme.convertToAppTheme(requireActivity()) + tag = theme + textSize = 18f + } + binding.dialogRadiogroup.addView(rb, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) + } + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/vanced/manager/ui/fragments/DevSettingsFragment.kt b/app/src/main/java/com/vanced/manager/ui/fragments/DevSettingsFragment.kt index 04c144fb..91d3f1cc 100644 --- a/app/src/main/java/com/vanced/manager/ui/fragments/DevSettingsFragment.kt +++ b/app/src/main/java/com/vanced/manager/ui/fragments/DevSettingsFragment.kt @@ -16,6 +16,7 @@ import com.vanced.manager.R import com.vanced.manager.ui.WelcomeActivity import com.vanced.manager.ui.dialogs.ManagerUpdateDialog import com.vanced.manager.ui.dialogs.URLChangeDialog +import com.vanced.manager.utils.LanguageHelper.authCrowdin class DevSettingsFragment: PreferenceFragmentCompat() { @@ -45,22 +46,13 @@ class DevSettingsFragment: PreferenceFragmentCompat() { } + findPreference("crowdin_auth")?.isVisible = !Crowdin.isAuthorized() findPreference("crowdin_upload_screenshot")?.isVisible = Crowdin.isAuthorized() findPreference("crowdin_real_time")?.isVisible = Crowdin.isAuthorized() findPreference("crowdin_auth")?.setOnPreferenceClickListener { - @RequiresApi(Build.VERSION_CODES.M) - if (!Settings.canDrawOverlays(requireActivity())) { - val intent = Intent( - Settings.ACTION_MANAGE_OVERLAY_PERMISSION, - Uri.parse("package:" + requireActivity().packageName) - ) - startActivityForResult(intent, 69) - return@setOnPreferenceClickListener true - } - - Crowdin.authorize(requireActivity()) + requireActivity().authCrowdin() true } @@ -91,14 +83,4 @@ class DevSettingsFragment: PreferenceFragmentCompat() { } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - if (requestCode == 69) { - @RequiresApi(23) - if (Settings.canDrawOverlays(requireActivity())) { - Crowdin.authorize(requireActivity()) - } - } - } - } \ No newline at end of file diff --git a/app/src/main/java/com/vanced/manager/ui/fragments/HomeFragment.kt b/app/src/main/java/com/vanced/manager/ui/fragments/HomeFragment.kt index 4662d84a..653fe85e 100644 --- a/app/src/main/java/com/vanced/manager/ui/fragments/HomeFragment.kt +++ b/app/src/main/java/com/vanced/manager/ui/fragments/HomeFragment.kt @@ -14,6 +14,7 @@ import androidx.localbroadcastmanager.content.LocalBroadcastManager import androidx.navigation.findNavController import androidx.preference.PreferenceManager import androidx.recyclerview.widget.LinearLayoutManager +import com.crowdin.platform.util.inflateWithCrowdin import com.github.florent37.viewtooltip.ViewTooltip import com.google.android.flexbox.FlexboxLayoutManager import com.google.android.flexbox.JustifyContent @@ -36,26 +37,6 @@ open class HomeFragment : Fragment() { private val prefs by lazy { PreferenceManager.getDefaultSharedPreferences(requireActivity()) } private lateinit var tooltip: ViewTooltip -// private val tabListener = object : TabLayout.OnTabSelectedListener { -// -// override fun onTabSelected(tab: TabLayout.Tab) { -// if (tab.position == 1 && !Shell.rootAccess()) { -// Toast.makeText(requireActivity(), getString(R.string.root_not_granted), Toast.LENGTH_SHORT).show() -// } -// val variant = if (tab.position == 1) "root" else "nonroot" -// getDefaultSharedPreferences(requireActivity()).edit().putString("vanced_variant", variant).apply() -// } -// -// override fun onTabUnselected(tab: TabLayout.Tab) { -// return -// } -// -// override fun onTabReselected(tab: TabLayout.Tab) { -// return -// } -// -// } - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? @@ -117,19 +98,6 @@ open class HomeFragment : Fragment() { } } -// with(binding) { -// mainViewpager.adapter = VariantAdapter(viewModel, requireActivity()) -// TabLayoutMediator(mainTablayout, mainViewpager) { tab, position -> -// val variants = arrayOf("nonroot", "root") -// tab.text = variants[position] -// }.attach() -// mainTablayout.getTabAt(if (getDefaultSharedPreferences(requireActivity()).getString("vanced_variant", "nonroot") == "root") 1 else 0)?.select() -// } - -// installing.observe(viewLifecycleOwner, { value -> -// if (value) hideTab() else showTab() -// }) - } override fun onPause() { @@ -154,28 +122,6 @@ open class HomeFragment : Fragment() { } } -// private fun hideTab() { -// val tabHide = AnimationUtils.loadAnimation(requireActivity(), R.anim.tablayout_exit) -// with(binding) { -// if (mainTablayout.visibility != View.GONE) { -// mainTablayout.startAnimation(tabHide) -// mainTablayout.visibility = View.GONE -// } -// mainViewpager.isUserInputEnabled = false -// } -// } -// -// private fun showTab() { -// val tabShow = AnimationUtils.loadAnimation(requireActivity(), R.anim.tablayout_enter) -// with(binding) { -// if (mainTablayout.visibility != View.VISIBLE) { -// mainTablayout.visibility = View.VISIBLE -// mainTablayout.startAnimation(tabShow) -// } -// mainViewpager.isUserInputEnabled = true -// } -// } - private fun registerReceivers() { val intentFilter = IntentFilter() intentFilter.addAction(INSTALL_FAILED) @@ -184,7 +130,7 @@ open class HomeFragment : Fragment() { } override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { - inflater.inflate(R.menu.toolbar_menu, menu) + inflater.inflateWithCrowdin(R.menu.toolbar_menu, menu, resources) super.onCreateOptionsMenu(menu, inflater) } 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 4ff13f99..3b7515f0 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 @@ -3,7 +3,6 @@ package com.vanced.manager.ui.viewmodels import android.content.ActivityNotFoundException import android.content.ComponentName import android.content.Intent -import android.util.Log import android.view.View import android.widget.Toast import androidx.core.content.ContextCompat @@ -17,7 +16,6 @@ import androidx.preference.PreferenceManager.getDefaultSharedPreferences import com.crowdin.platform.Crowdin import com.google.android.material.button.MaterialButton import com.vanced.manager.R -import com.vanced.manager.core.App import com.vanced.manager.model.DataModel import com.vanced.manager.ui.dialogs.AppDownloadDialog import com.vanced.manager.ui.dialogs.InstallationFilesDetectedDialog @@ -33,6 +31,9 @@ import com.vanced.manager.utils.Extensions.fetchData import com.vanced.manager.utils.Extensions.setRefreshing import com.vanced.manager.utils.Extensions.show import com.vanced.manager.utils.InternetTools +import com.vanced.manager.utils.InternetTools.loadJson +import com.vanced.manager.utils.InternetTools.musicVersions +import com.vanced.manager.utils.InternetTools.vancedVersions import com.vanced.manager.utils.PackageHelper.apkExist import com.vanced.manager.utils.PackageHelper.musicApkExists import com.vanced.manager.utils.PackageHelper.uninstallApk @@ -40,8 +41,6 @@ import com.vanced.manager.utils.PackageHelper.uninstallRootApk import com.vanced.manager.utils.PackageHelper.vancedInstallFilesExist open class HomeViewModel(private val activity: FragmentActivity): ViewModel() { - - private val app = activity.application as App private val prefs = getDefaultSharedPreferences(activity) @@ -58,7 +57,7 @@ open class HomeViewModel(private val activity: FragmentActivity): ViewModel() { fun fetchData() { activity.setRefreshing(true) - app.loadJson() + loadJson(activity) Crowdin.forceUpdate(activity) activity.setRefreshing(false) } @@ -124,7 +123,6 @@ open class HomeViewModel(private val activity: FragmentActivity): ViewModel() { } } activity.getString(R.string.microg) -> { - Log.d("test", apkExist(activity, "microg.apk").toString()) if (apkExist(activity, "microg.apk")) InstallationFilesDetectedDialog(app).show(activity) else AppDownloadDialog(app).show(activity) } } @@ -135,12 +133,12 @@ open class HomeViewModel(private val activity: FragmentActivity): ViewModel() { init { activity.setRefreshing(true) - vanced.set(DataModel(app.vanced, activity, vancedPkg, activity.getString(R.string.vanced), ContextCompat.getDrawable(activity, R.drawable.ic_vanced))) - vancedRoot.set(DataModel(app.vanced, activity, vancedRootPkg, activity.getString(R.string.vanced), ContextCompat.getDrawable(activity, R.drawable.ic_vanced))) - music.set(DataModel(app.music, activity, musicPkg, activity.getString(R.string.music), ContextCompat.getDrawable(activity, R.drawable.ic_music))) - musicRoot.set(DataModel(app.music, activity, musicRootPkg, activity.getString(R.string.music), ContextCompat.getDrawable(activity, R.drawable.ic_music))) - microg.set(DataModel(app.microg, activity, microgPkg, activity.getString(R.string.microg), ContextCompat.getDrawable(activity, R.drawable.ic_microg))) - manager.set(DataModel(app.manager, activity, managerPkg, activity.getString(R.string.app_name), ContextCompat.getDrawable(activity, R.mipmap.ic_launcher))) + vanced.set(DataModel(InternetTools.vanced, activity, vancedPkg, activity.getString(R.string.vanced), ContextCompat.getDrawable(activity, R.drawable.ic_vanced), vancedVersions)) + vancedRoot.set(DataModel(InternetTools.vanced, activity, vancedRootPkg, activity.getString(R.string.vanced), ContextCompat.getDrawable(activity, R.drawable.ic_vanced), vancedVersions)) + music.set(DataModel(InternetTools.music, activity, musicPkg, activity.getString(R.string.music), ContextCompat.getDrawable(activity, R.drawable.ic_music), musicVersions)) + musicRoot.set(DataModel(InternetTools.music, activity, musicRootPkg, activity.getString(R.string.music), ContextCompat.getDrawable(activity, R.drawable.ic_music), musicVersions)) + microg.set(DataModel(InternetTools.microg, activity, microgPkg, activity.getString(R.string.microg), ContextCompat.getDrawable(activity, R.drawable.ic_microg))) + manager.set(DataModel(InternetTools.manager, activity, managerPkg, activity.getString(R.string.app_name), ContextCompat.getDrawable(activity, R.mipmap.ic_launcher))) activity.setRefreshing(false) } diff --git a/app/src/main/java/com/vanced/manager/ui/viewmodels/HomeViewModelFactory.kt b/app/src/main/java/com/vanced/manager/ui/viewmodels/HomeViewModelFactory.kt index 821e528d..ef7e8d16 100644 --- a/app/src/main/java/com/vanced/manager/ui/viewmodels/HomeViewModelFactory.kt +++ b/app/src/main/java/com/vanced/manager/ui/viewmodels/HomeViewModelFactory.kt @@ -6,6 +6,7 @@ import androidx.lifecycle.ViewModelProvider class HomeViewModelFactory(private val activity: FragmentActivity) : ViewModelProvider.Factory { + @Suppress("UNCHECKED_CAST") override fun create(modelClass: Class): T { return HomeViewModel(activity) as T } 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 9588cb0b..0130559a 100644 --- a/app/src/main/java/com/vanced/manager/utils/Extensions.kt +++ b/app/src/main/java/com/vanced/manager/utils/Extensions.kt @@ -1,13 +1,18 @@ package com.vanced.manager.utils import android.app.Activity +import android.content.Context +import android.content.SharedPreferences import android.widget.RadioGroup import androidx.fragment.app.DialogFragment import androidx.fragment.app.FragmentActivity +import androidx.preference.PreferenceManager.getDefaultSharedPreferences import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import com.google.android.material.radiobutton.MaterialRadioButton import com.vanced.manager.R -import com.vanced.manager.core.App +import com.vanced.manager.model.AppVersionsModel +import com.vanced.manager.utils.InternetTools.loadJson +import java.util.* object Extensions { @@ -16,13 +21,13 @@ object Extensions { } fun DialogFragment.show(activity: FragmentActivity) { - this.show(activity.supportFragmentManager, "") + show(activity.supportFragmentManager, "") } fun Activity.fetchData() { val refreshLayout = findViewById(R.id.home_refresh) setRefreshing(true, refreshLayout) - (application as App).loadJson() + loadJson(this) setRefreshing(false, refreshLayout) } @@ -39,4 +44,21 @@ object Extensions { } } + fun Context.getDefaultPrefs(): SharedPreferences = getDefaultSharedPreferences(this) + + //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(): Array { + val versionsModel = arrayListOf(AppVersionsModel("latest", this[0])) + for (i in reversed().indices) { + versionsModel.add(AppVersionsModel(this[i], this[i])) + } + return versionsModel.toTypedArray() + } + + fun String.convertToAppTheme(context: Context): String { + return context.getString(R.string.light_plus_other, this.capitalize(Locale.ROOT)) + } + } \ 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 53ede6d1..bb7368e8 100644 --- a/app/src/main/java/com/vanced/manager/utils/InternetTools.kt +++ b/app/src/main/java/com/vanced/manager/utils/InternetTools.kt @@ -6,15 +6,33 @@ import android.net.Uri import android.util.Log import androidx.browser.customtabs.CustomTabsIntent import androidx.core.content.ContextCompat +import androidx.databinding.ObservableField import androidx.preference.PreferenceManager.getDefaultSharedPreferences +import com.beust.klaxon.JsonArray +import com.beust.klaxon.JsonObject import com.vanced.manager.BuildConfig import com.vanced.manager.R -import com.vanced.manager.core.App +import com.vanced.manager.utils.Extensions.getDefaultPrefs +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import java.text.SimpleDateFormat +import java.util.* object InternetTools { private const val TAG = "VMNetTools" + var vanced = ObservableField() + var music = ObservableField() + var microg = ObservableField() + var manager = ObservableField() + + var vancedVersions = ObservableField>() + var musicVersions = ObservableField>() + + //var braveTiers = ObservableField() + fun openUrl(Url: String, color: Int, context: Context) { val customTabPrefs = getDefaultSharedPreferences(context).getBoolean("use_customtabs", true) if (customTabPrefs) { @@ -57,8 +75,37 @@ object InternetTools { } } + fun loadJson(context: Context) = CoroutineScope(Dispatchers.IO).launch { + val installUrl = context.getDefaultPrefs().getString("install_url", baseUrl) + val latest = JsonHelper.getJson("$installUrl/latest.json?fetchTime=${SimpleDateFormat("HHmmss", Locale.getDefault())}") + val versions = JsonHelper.getJson("$installUrl/versions.json?fetchTime=${SimpleDateFormat("HHmmss", Locale.getDefault())}") +// braveTiers.apply { +// set(getJson("$installUrl/sponsor.json")) +// notifyChange() +// } + + vanced.apply { + set(latest?.obj("vanced")) + notifyChange() + } + vancedVersions.set(versions?.array("vanced")) + music.apply { + set(latest?.obj("music")) + notifyChange() + } + musicVersions.set(versions?.array("music")) + microg.apply { + set(latest?.obj("microg")) + notifyChange() + } + manager.apply { + set(latest?.obj("manager")) + notifyChange() + } + } + suspend fun getJsonString(file: String, obj: String, context: Context): String { - val installUrl = getDefaultSharedPreferences(context).getString("install_url", baseUrl) + val installUrl = context.getDefaultPrefs().getString("install_url", baseUrl) return try { JsonHelper.getJson("$installUrl/$file")?.string(obj) ?: context.getString(R.string.unavailable) } catch (e: Exception) { @@ -68,7 +115,7 @@ object InternetTools { } fun isUpdateAvailable(context: Context): Boolean { - val result = (context.applicationContext as App).manager.get()?.int("versionCode") ?: 0 + val result = manager.get()?.int("versionCode") ?: 0 return result > BuildConfig.VERSION_CODE } diff --git a/app/src/main/java/com/vanced/manager/utils/LanguageHelper.kt b/app/src/main/java/com/vanced/manager/utils/LanguageHelper.kt index 53f9e603..d26d1ad9 100644 --- a/app/src/main/java/com/vanced/manager/utils/LanguageHelper.kt +++ b/app/src/main/java/com/vanced/manager/utils/LanguageHelper.kt @@ -2,12 +2,16 @@ package com.vanced.manager.utils import android.app.Activity import android.content.Context +import android.content.Intent import android.content.res.Resources +import android.net.Uri import android.os.Build import android.os.LocaleList +import android.provider.Settings import androidx.annotation.RequiresApi +import com.crowdin.platform.Crowdin import com.vanced.manager.R -import com.vanced.manager.core.App +import com.vanced.manager.utils.InternetTools.vanced import java.util.* object LanguageHelper { @@ -30,29 +34,16 @@ object LanguageHelper { } - fun getDefaultVancedLanguages(activity: Activity): String { - val serverLangs = (activity.applicationContext as App).vanced.get()!!.array("langs") + @Suppress("DEPRECATION") + fun getDefaultVancedLanguages(): String { + val serverLangs = vanced.get()?.array("langs") ?: mutableListOf("") val sysLocales = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) Resources.getSystem().configuration.locales.toLangTags() else arrayOf(Resources.getSystem().configuration.locale.language) val finalLangs = mutableListOf() sysLocales.forEach { sysLocale -> - if (sysLocale == "en") - finalLangs.add(sysLocale) - else if (serverLangs != null && serverLangs.contains(sysLocale)) - finalLangs.add(sysLocale) - } - - return finalLangs.distinct().sorted().joinToString(", ") - } - - fun getDefaultVancedLanguages(app: App): String { - val serverLangs = app.vanced.get()!!.array("langs") - val sysLocales = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) Resources.getSystem().configuration.locales.toLangTags() else arrayOf(Resources.getSystem().configuration.locale.language) - val finalLangs = mutableListOf() - sysLocales.forEach { sysLocale -> - if (sysLocale == "en") - finalLangs.add(sysLocale) - else if (serverLangs != null && serverLangs.contains(sysLocale)) - finalLangs.add(sysLocale) + when { + sysLocale == "en" -> finalLangs.add(sysLocale) + serverLangs.contains(sysLocale) -> finalLangs.add(sysLocale) + } } return finalLangs.distinct().sorted().joinToString(", ") @@ -67,4 +58,26 @@ object LanguageHelper { return langTags } + fun Activity.authCrowdin() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (!Settings.canDrawOverlays(this)) { + val intent = Intent( + Settings.ACTION_MANAGE_OVERLAY_PERMISSION, + Uri.parse("package:$packageName") + ) + startActivityForResult(intent, 69) + return + } + Crowdin.authorize(this) + } + } + + fun Activity.onActivityResult(requestCode: Int) { + if (requestCode == 69 && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (Settings.canDrawOverlays(this)) { + Crowdin.authorize(this) + } + } + } + } \ No newline at end of file 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 a39e67f5..68122dbb 100644 --- a/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt +++ b/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt @@ -11,13 +11,13 @@ import android.util.Log import com.topjohnwu.superuser.Shell import com.topjohnwu.superuser.io.SuFile import com.vanced.manager.BuildConfig -import com.vanced.manager.core.App import com.vanced.manager.core.installer.AppInstallerService import com.vanced.manager.core.installer.AppUninstallerService import com.vanced.manager.utils.AppUtils.sendCloseDialog import com.vanced.manager.utils.AppUtils.sendFailure import com.vanced.manager.utils.AppUtils.sendRefresh import com.vanced.manager.utils.AppUtils.vancedRootPkg +import com.vanced.manager.utils.InternetTools.vanced import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -249,8 +249,7 @@ object PackageHelper { ) Shell.getShell { - val application = context.applicationContext as App - val vancedVersionCode = application.vanced.get()?.int("versionCode") + val vancedVersionCode = vanced.get()?.int("versionCode") val apkFilesPath = context.getExternalFilesDir("vanced/root")?.path val fileInfoList = apkFilesPath?.let { it1 -> getFileInfoList(it1) } if (fileInfoList != null) { 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 66b4d547..306f787e 100644 --- a/app/src/main/java/com/vanced/manager/utils/ThemeHelper.kt +++ b/app/src/main/java/com/vanced/manager/utils/ThemeHelper.kt @@ -2,24 +2,24 @@ package com.vanced.manager.utils import android.app.Activity import android.content.res.Configuration -import androidx.preference.PreferenceManager import com.vanced.manager.R +import com.vanced.manager.utils.Extensions.getDefaultPrefs object ThemeHelper { - fun setFinalTheme(activity: Activity) { - val currentAccent = PreferenceManager.getDefaultSharedPreferences(activity).getString("manager_accent", "Blue") - when (PreferenceManager.getDefaultSharedPreferences(activity) - .getString("manager_theme", "System Default")) { - "Light" -> activity.setTheme(getLightAccent(currentAccent)) - "Dark" -> activity.setTheme(getDarkAccent(currentAccent)) + fun Activity.setFinalTheme() { + val prefs = getDefaultPrefs() + val currentAccent = prefs.getString("manager_accent", "Blue") + when (prefs.getString("manager_theme", "System Default")) { + "Light" -> setTheme(getLightAccent(currentAccent)) + "Dark" -> setTheme(getDarkAccent(currentAccent)) "System Default" -> { - when (activity.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) { - Configuration.UI_MODE_NIGHT_YES -> activity.setTheme(getDarkAccent(currentAccent)) - Configuration.UI_MODE_NIGHT_NO -> activity.setTheme(getLightAccent(currentAccent)) + when (resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) { + Configuration.UI_MODE_NIGHT_YES -> setTheme(getDarkAccent(currentAccent)) + Configuration.UI_MODE_NIGHT_NO -> setTheme(getLightAccent(currentAccent)) } } - else -> activity.setTheme(getLightAccent("Blue")) + else -> setTheme(getLightAccent("Blue")) } } diff --git a/app/src/main/res/drawable/ic_done.xml b/app/src/main/res/drawable/ic_done.xml deleted file mode 100644 index f2528cb6..00000000 --- a/app/src/main/res/drawable/ic_done.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_download.xml b/app/src/main/res/drawable/ic_download.xml deleted file mode 100644 index 0feb270a..00000000 --- a/app/src/main/res/drawable/ic_download.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_update.xml b/app/src/main/res/drawable/ic_update.xml deleted file mode 100644 index 55dbbae8..00000000 --- a/app/src/main/res/drawable/ic_update.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/app/src/main/res/layout/dialog_bottom_radio_button.xml b/app/src/main/res/layout/dialog_bottom_radio_button.xml new file mode 100644 index 00000000..24932f34 --- /dev/null +++ b/app/src/main/res/layout/dialog_bottom_radio_button.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_installation_preferences.xml b/app/src/main/res/layout/dialog_installation_preferences.xml index 3155ef0b..9242c8d8 100644 --- a/app/src/main/res/layout/dialog_installation_preferences.xml +++ b/app/src/main/res/layout/dialog_installation_preferences.xml @@ -26,15 +26,41 @@ style="@style/BottomDialogCardTextItem" android:layout_alignParentStart="true" android:layout_centerVertical="true" - android:layout_toStartOf="@id/theme_spinner" - android:text="@string/theme" /> + android:layout_toStartOf="@id/open_theme_selector" /> - + android:background="@android:color/transparent" + android:maxWidth="24dp" + android:maxHeight="24dp" + android:src="@drawable/ic_baseline_navigate_next_36" /> + + + + + + + + @@ -48,8 +74,7 @@ style="@style/BottomDialogCardTextItem" android:layout_alignParentStart="true" android:layout_centerVertical="true" - android:layout_toStartOf="@+id/open_language_selector" - android:text="@string/language_title" /> + android:layout_toStartOf="@+id/open_language_selector" /> Welcome Choose your preferred language(s) for Vanced - Light + Black - Light + Dark Manager Devs Sources diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index afaec39b..fe9f42dd 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -62,8 +62,6 @@ اهلا Choose your preferred language(s) for Vanced - ابيض + اسود - ابيض + داكن Manager Devs مصادر diff --git a/app/src/main/res/values-az-rAZ/strings.xml b/app/src/main/res/values-az-rAZ/strings.xml index e2d904a9..d321a8f1 100644 --- a/app/src/main/res/values-az-rAZ/strings.xml +++ b/app/src/main/res/values-az-rAZ/strings.xml @@ -58,8 +58,6 @@ Xoş gəlmisiniz Vanced üçün istədiyiniz dili seçin - İşıqlı + Qara - İşıqlı + Qaranlıq Menecer Təkmilcilər Mənbələr diff --git a/app/src/main/res/values-bn-rBD/strings.xml b/app/src/main/res/values-bn-rBD/strings.xml index 174c9c03..a845cc5d 100644 --- a/app/src/main/res/values-bn-rBD/strings.xml +++ b/app/src/main/res/values-bn-rBD/strings.xml @@ -61,8 +61,6 @@ স্বাগতম ভ্যানসডের জন্য আপনার পছন্দসই ভাষা (গুলি) চয়ন করুন - আলো + কালো - আলো + অন্ধকার পরিচালক বিকাশকারী সূত্রসমূহ diff --git a/app/src/main/res/values-bn-rIN/strings.xml b/app/src/main/res/values-bn-rIN/strings.xml index 2a51a5ad..5eadb229 100644 --- a/app/src/main/res/values-bn-rIN/strings.xml +++ b/app/src/main/res/values-bn-rIN/strings.xml @@ -61,8 +61,6 @@ স্বাগত ভ্যান্সডের জন্য আপনার পছন্দসই ভাষা(গুলি) চয়ন করুন - হালকা + কালো - হালকা + অন্ধকার ম্যানেজার বিকাশকারীরা উৎসগুলি diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index 131b75a3..da7dc4a3 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -61,8 +61,6 @@ Benvingut Trieu els vostres idiomes preferits per a Vanced - Clar + Negre - Clar + Fosc Gestor de desenvolupadors Fonts diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 86452b80..f52b3636 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -61,8 +61,6 @@ Vítejte Vyberte preferovaný jazyk pro Vanced - Světlý + černý - Světlý + tmavý Vývojáři aplikace Zdrojové kódy diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index d11eca55..5e8d2db9 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -61,8 +61,6 @@ Velkommen Vælg dit fortrukne sprog til Vanced - Lyst + Sort - Lyst + Mørkt Manager udviklere Kilder diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index b8836b36..a86a65bd 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -61,8 +61,6 @@ Willkommen Wählen Sie ihre bevorzugte Sprache(n) für Vanced - Hell + Schwarz - Hell + Dunkel Manager-Entwickler Quellen diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 6e9345ec..81e40428 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -61,8 +61,6 @@ Καλώς ορίσατε Επιλέξτε την(/ις) γλώσσα(/ες) που επιθυμείτε για το Vanced - Ανοιχτόχρωμο + Απόλυτο μαύρο - Ανοιχτόχρωμο + Σκούροχρωμο Προγραμματιστές Διαχειριστή Vanced Πηγές diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index ac0635ae..8df71c6f 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -61,8 +61,6 @@ Bienvenido Elige tu(s) idioma(s) preferido(s) para Vanced - Claro + Negro - Claro + Oscuro Desarrolladores del Manager Fuentes diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index 567ddd29..05e83323 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -61,8 +61,6 @@ Tervetuloa Valitse Vancedille haluamasi kieli tai kielet - Vaalea + Musta - Vaalea + Tumma Kehittäjäpäällikkö Lähdekoodi diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index ea4a623c..48ccaba9 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -61,8 +61,6 @@ Bienvenue Choisir votre langage(s) préféré(s) pour Vanced - Clair + Noir - Clair + Sombre Manager pour les développeurs Sources diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index c39f47cc..fa4c5b34 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -61,8 +61,6 @@ स्वागत है! Vanced के लिए अपनी पसंदीदा भाषा (ए) चुनें - लाइट + ब्लैक - लाइट + डार्क प्रबंधक डेवलपर्स स्रोत diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 987ad2c5..6b6284c8 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -61,8 +61,6 @@ Üdvözöljük Vanced nyelvének kiválasztása - Világos + Sötét - Világos + Fekete Fejlesztői Menedzser Források diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index e84b6f17..78aea7b6 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -61,8 +61,6 @@ Selamat datang Pilih bahasa yang anda inginkan untuk Vanced - Terang + Hitam - Terang + Gelap Pengembang Manager Sumber diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index bf623298..330ccc04 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -61,8 +61,6 @@ Benvenuto Scegli le tue lingue preferite per Vanced - Chiaro + nero - Chiaro + scuro Sviluppatori di Manager Codice sorgente diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index f8063902..7aea308c 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -61,8 +61,6 @@ ברוכים הבאים בחר את השפה המועדפת עליך לVanced - בהיר + שחור - בהיר + כהה מנהל המפתחים מקורות diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 1608ae7e..2695557d 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -61,8 +61,6 @@ ようこそ Vanced で使用する言語を選択 - ライト + ブラック - ライト + ダーク Manager 開発 ソースコード diff --git a/app/src/main/res/values-ka-rGE/strings.xml b/app/src/main/res/values-ka-rGE/strings.xml index a960a0a7..4db86e19 100644 --- a/app/src/main/res/values-ka-rGE/strings.xml +++ b/app/src/main/res/values-ka-rGE/strings.xml @@ -61,8 +61,6 @@ მოგესალმებით Choose your preferred language(s) for Vanced - ღია + შავი - ღია + მუქი Manager Devs წყაროები diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index bca0ce85..b6a8e488 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -61,8 +61,6 @@ 환영합니다 Vanced에서 선호하는 언어를 선택해주세요 - 라이트 + 블랙 - 라이트 + 다크 Manager 개발자 소스 diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index d3ff2d05..92965ab0 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -61,8 +61,6 @@ Welkom Kies je gewenste taal/talen voor Vanced - Licht + Zwart - Licht + Donker Manager Ontwikkelaars Bronnen diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index 3e3aeb05..bb950452 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -60,8 +60,6 @@ Velkommen Velg dine foretrukne språk for Vanced - Light + Black - Light + Dark Manager Devs Sources diff --git a/app/src/main/res/values-pa-rIN/strings.xml b/app/src/main/res/values-pa-rIN/strings.xml index 33a5b904..5b57ed5a 100644 --- a/app/src/main/res/values-pa-rIN/strings.xml +++ b/app/src/main/res/values-pa-rIN/strings.xml @@ -61,8 +61,6 @@ ਜੀ ਆਇਆਂ ਨੂੰ! Vanced ਦੇ ਲਈ ਆਪਣੀ ਪਸੰਦੀਦਾ ਭਾਸ਼ਾ (ਏ) ਚੁਣੋ - ਲਾਇਟ + ਬਲੈਕ - ਲਾਇਟ + ਡਾਰਕ ਪ੍ਬੰਧਕ ਨਿਰਮਾਣਕਰਤਾ ਸਰੋਤ diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index c21baed8..1de07eed 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -61,8 +61,6 @@ Witaj Wybierz preferowany język(i) dla Vanced - Jasny + Czarny - Jasny + Ciemny Deweloperzy Menedżera Źródła diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index cd21001a..08b1a813 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -61,8 +61,6 @@ Bem-vindo Escolha o seu idioma preferido para o Vanced - Claro + Preto - Claro + Escuro Desenvolvedores do Manager Fontes diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 75206f20..7f04097a 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -61,8 +61,6 @@ Bem-Vindo Escolha a(s) sua(s) língua(s) de preferência para o Vanced - Claro + Preto - Claro + Escuro Programadores do Manager Fontes diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 68f7f4a2..d6b15b19 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -61,8 +61,6 @@ Bun venit Alegeți limba preferată pentru Vanced - Luminos + Negru - Luminos + Întunecat Dezvoltatori Surse diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 7d4dfab2..fe3ec825 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -61,8 +61,6 @@ Добро пожаловать Выберите предпочитаемый язык для Vanced - Светлая + Чёрная - Светлая + Тёмная Разработчики Менеджера Исходники diff --git a/app/src/main/res/values-si-rLK/strings.xml b/app/src/main/res/values-si-rLK/strings.xml index fa2ac4b7..c1d19bf1 100644 --- a/app/src/main/res/values-si-rLK/strings.xml +++ b/app/src/main/res/values-si-rLK/strings.xml @@ -61,8 +61,6 @@ ආයුබෝවන් Choose your preferred language(s) for Vanced - Light + Black - Light + Dark Manager Devs Sources diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index ab03b51b..d40a6abe 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -61,8 +61,6 @@ Добро дошли Одаберите језик за коришћење Vanced апликације - Светла + Црна - Светла + Тамна Менаџер развоја Извор diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index 786a13f3..0b356d34 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -61,8 +61,6 @@ Välkommen Välj önskade språk för Vanced - Ljus + svart - Ljus + svart Hanteraren Dev Källor diff --git a/app/src/main/res/values-ta-rIN/strings.xml b/app/src/main/res/values-ta-rIN/strings.xml index 8af2a260..19a278df 100644 --- a/app/src/main/res/values-ta-rIN/strings.xml +++ b/app/src/main/res/values-ta-rIN/strings.xml @@ -61,8 +61,6 @@ வரவேற்பு வேன்ஸ்டுக்காக உங்களுக்கு விருப்பமான மொழியைத் தேர்வுசெய்க - ஒளி + கருப்பு - ஒளி + கருப்பு மேலாளர் டெவலப்பர்கள் மூலம் diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index dc6d3c97..5bc7102b 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -61,8 +61,6 @@ Hoş Geldiniz Vanced için tercih ettiğiniz dil(ler)i seçin - Açık + Siyah - Açık + Koyu Manager Geliştiricisi Kaynaklar diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 4e84c744..1fc5ae28 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -61,8 +61,6 @@ Привіт! Виберіть бажану мову(и) для Vanced - Світла + Чорна - Світла + Темна Розробники інсталятора Джерела diff --git a/app/src/main/res/values-v23/themes.xml b/app/src/main/res/values-v23/themes.xml index fc070425..0d2c4cc4 100644 --- a/app/src/main/res/values-v23/themes.xml +++ b/app/src/main/res/values-v23/themes.xml @@ -1,42 +1,4 @@ - - \ No newline at end of file diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index e21d2e85..3a9d2f5d 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -61,8 +61,6 @@ Chào mừng Chọn ngôn ngữ mong muốn cho Vanced - Sáng + Đen - Sáng + Tối Đội ngũ phát triển Nguồn diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 350d39cc..550ecccd 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -61,8 +61,6 @@ 欢迎 为 Vanced 选择您的首选语言 - 浅 + 黑 - 浅 + 深 Manager 开发人员 程式码 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 3a3a7ade..d8434be1 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -61,8 +61,6 @@ 歡迎 為 Vanced 選擇您偏好的語言 - 淺色 + 黑色 - 淺色 + 深色 Manager 開發者 原始碼 diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 3f9da114..0d2c4cc4 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -1,9 +1,4 @@ - - @string/install_light_dark - @string/install_light_black - - \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 62665347..a6d04c8d 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -68,6 +68,8 @@ Manager detected that all necessary files for %1$s installation were found. Do you want to install? Checking for updates… Language(s): %1$s + Theme: %1$s + Version: %1$s Guide Stop! Installing %1$s @@ -80,6 +82,7 @@ Success! Vanced Installation Preferences Vanced has successfully been installed! Open now? + Version Vanced Music has successfully been installed! Open now? Please be patient… Open @@ -87,8 +90,7 @@ Choose your preferred language(s) for Vanced - Light + Black - Light + Dark + Light + %1$s Select at least one language! diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 069f8bd9..d5388c00 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -3,7 +3,7 @@ - - - - - - - - -