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 59f3bec8..38a2c6e1 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 @@ -8,9 +8,11 @@ import com.downloader.PRDownloader import com.vanced.manager.R import com.vanced.manager.utils.DeviceUtils.getArch import com.vanced.manager.utils.DownloadHelper.downloadProgress +import com.vanced.manager.utils.Extensions.getLatestAppVersion import com.vanced.manager.utils.InternetTools.baseUrl import com.vanced.manager.utils.InternetTools.getFileNameFromUrl import com.vanced.manager.utils.InternetTools.music +import com.vanced.manager.utils.InternetTools.musicVersions import com.vanced.manager.utils.PackageHelper.install import com.vanced.manager.utils.PackageHelper.installMusicRoot import kotlinx.coroutines.CoroutineScope @@ -25,18 +27,20 @@ object MusicDownloader { fun downloadMusic(context: Context) { val prefs = getDefaultSharedPreferences(context) - version = prefs.getString("music_version", music.get()?.string("version")) + version = prefs.getString("music_version", "latest")?.getLatestAppVersion(musicVersions.get()?.value ?: listOf("")) variant = prefs.getString("vanced_variant", "nonroot") - baseurl = "${prefs.getString("install_url", baseUrl)}/music/" + baseurl = "${prefs.getString("install_url", baseUrl)}/music/v$version" + + downloadApk(context) } - fun downloadMusic(context: Context, apk: String = "music") { + private fun downloadApk(context: Context, apk: String = "music") { CoroutineScope(Dispatchers.IO).launch { val url = if (apk == "stock") - "$baseurl/stock/v${version}/${getArch()}.apk" + "$baseurl/stock/${getArch()}.apk" else - "$baseurl/$variant/v${version}.apk" + "$baseurl/$variant.apk" downloadProgress.get()?.currentDownload = PRDownloader.download(url, context.getExternalFilesDir("music/$variant")?.path, "music.apk") .build() @@ -49,7 +53,7 @@ object MusicDownloader { .start(object : OnDownloadListener { override fun onDownloadComplete() { if (variant == "root" && apk != "stock") { - downloadMusic(context, "stock") + downloadApk(context, "stock") return } 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 8a75d9ab..65a6ba0b 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 @@ -2,7 +2,6 @@ package com.vanced.manager.core.downloader import android.content.Context import android.content.SharedPreferences -import android.os.Build import androidx.preference.PreferenceManager.getDefaultSharedPreferences import com.downloader.Error import com.downloader.OnDownloadListener @@ -13,7 +12,7 @@ import com.vanced.manager.R import com.vanced.manager.utils.AppUtils.vancedRootPkg import com.vanced.manager.utils.DeviceUtils.getArch import com.vanced.manager.utils.DownloadHelper.downloadProgress -import com.vanced.manager.utils.Extensions.convertToAppVersions +import com.vanced.manager.utils.Extensions.getLatestAppVersion import com.vanced.manager.utils.InternetTools import com.vanced.manager.utils.InternetTools.baseUrl import com.vanced.manager.utils.InternetTools.getFileNameFromUrl @@ -56,15 +55,15 @@ object VancedDownloader { private var downloadPath: String? = null fun downloadVanced(context: Context) { - defPrefs = getDefaultSharedPreferences(context) - installUrl = defPrefs.getString("install_url", baseUrl) - prefs = context.getSharedPreferences("installPrefs", Context.MODE_PRIVATE) variant = defPrefs.getString("vanced_variant", "nonroot") downloadPath = context.getExternalFilesDir("vanced/$variant")?.path File(downloadPath.toString()).deleteRecursively() + defPrefs = getDefaultSharedPreferences(context) + installUrl = defPrefs.getString("install_url", baseUrl) + prefs = context.getSharedPreferences("installPrefs", Context.MODE_PRIVATE) lang = prefs.getString("lang", getDefaultVancedLanguages())?.split(", ")?.toMutableList() theme = prefs.getString("theme", "dark") - vancedVersion = defPrefs.getString("vanced_version", vancedVersions.get()?.value?.convertToAppVersions()?.get(0)?.value) + vancedVersion = defPrefs.getString("vanced_version", "latest")?.getLatestAppVersion(vancedVersions.get()?.value ?: listOf("")) themePath = "$installUrl/apks/v$vancedVersion/$variant/Theme" hashUrl = "apks/v$vancedVersion/$variant/Theme/hash.json" //newInstaller = defPrefs.getBoolean("new_installer", false) diff --git a/app/src/main/java/com/vanced/manager/core/installer/AppInstallerService.kt b/app/src/main/java/com/vanced/manager/core/installer/AppInstallerService.kt index 033dfd17..a164ad86 100644 --- a/app/src/main/java/com/vanced/manager/core/installer/AppInstallerService.kt +++ b/app/src/main/java/com/vanced/manager/core/installer/AppInstallerService.kt @@ -41,7 +41,7 @@ class AppInstallerService: Service() { return null } - companion object{ + companion object { const val TAG = "VMInstall" } 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 956c13f8..2c5dd35b 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,13 +11,12 @@ 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.getCheckedButtonText import com.vanced.manager.utils.Extensions.getDefaultPrefs import com.vanced.manager.utils.Extensions.show class AppVersionSelectorDialog( - private val versions: Array, + private val versions: List, private val app: String ) : BottomSheetDialogFragment() { @@ -36,14 +35,13 @@ class AppVersionSelectorDialog( override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) loadBoxes() - view.findViewWithTag(prefs.getString("${app}_version", versions[0].value)).isChecked = true + view.findViewWithTag(prefs.getString("${app}_version", "latest")).isChecked = true binding.dialogTitle.text = requireActivity().getString(R.string.version) binding.dialogSave.setOnClickListener { prefs.edit { - putString("${app}_version", binding.dialogRadiogroup.getCheckedButtonTag()) + putString("${app}_version", binding.dialogRadiogroup.getCheckedButtonText()) } dismiss() - VancedPreferencesDialog().show(requireActivity()) } } @@ -51,8 +49,7 @@ class AppVersionSelectorDialog( requireActivity().runOnUiThread { for (i in versions.indices) { val rb = MaterialRadioButton(requireActivity()).apply { - text = versions[i].version - tag = versions[i].value + text = versions[i] textSize = 18f } binding.dialogRadiogroup.addView(rb, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) @@ -62,7 +59,10 @@ class AppVersionSelectorDialog( override fun onDismiss(dialog: DialogInterface) { super.onDismiss(dialog) - VancedPreferencesDialog().show(requireActivity()) + if (app == "vanced") + VancedPreferencesDialog().show(requireActivity()) + else + MusicPreferencesDialog().show(requireActivity()) } } \ No newline at end of file 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 8a1ce409..c32c5c69 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 @@ -33,7 +33,7 @@ class MusicPreferencesDialog : BottomSheetDialogFragment() { val musicVersionsConv = musicVersions.get()?.value?.reversed()?.convertToAppVersions() binding.musicInstallTitle.text = requireActivity().getString(R.string.app_installation_preferences, requireActivity().getString(R.string.music)) - binding.musicVersion.text = requireActivity().getString(R.string.chosen_version, prefs.getString("music_version", musicVersionsConv?.get(0)?.value ?: "")) + binding.musicVersion.text = requireActivity().getString(R.string.chosen_version, prefs.getString("music_version", musicVersionsConv?.get(0) ?: "")) binding.openVersionSelector.setOnClickListener { dismiss() @@ -41,6 +41,10 @@ class MusicPreferencesDialog : BottomSheetDialogFragment() { AppVersionSelectorDialog(musicVersionsConv, "music").show(requireActivity()) } } + binding.musicInstall.setOnClickListener { + dismiss() + AppDownloadDialog(requireActivity().getString(R.string.music)).show(requireActivity()) + } } } \ No newline at end of file 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 a62c642c..9f55cf0b 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 @@ -10,7 +10,6 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.vanced.manager.R import com.vanced.manager.databinding.DialogVancedPreferencesBinding 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 @@ -42,12 +41,12 @@ class VancedPreferencesDialog : BottomSheetDialogFragment() { } } - val vancedVersionsConv = vancedVersions.get()?.value?.reversed()?.convertToAppVersions() + val vancedVersionsConv = vancedVersions.get()?.value?.reversed() binding.vancedInstallTitle.text = requireActivity().getString(R.string.app_installation_preferences, requireActivity().getString(R.string.vanced)) binding.vancedTheme.text = requireActivity().getString(R.string.chosen_theme, prefs.getString("theme", "dark")?.convertToAppTheme(requireActivity())) - binding.vancedVersion.text = requireActivity().getString(R.string.chosen_version, prefs.getString("vanced_version", vancedVersionsConv?.get(0)?.value ?: "")) + binding.vancedVersion.text = requireActivity().getString(R.string.chosen_version, prefs.getString("vanced_version", "latest")) binding.vancedLang.text = requireActivity().getString(R.string.chosen_lang, showLang) binding.openThemeSelector.setOnClickListener { @@ -69,7 +68,7 @@ class VancedPreferencesDialog : BottomSheetDialogFragment() { binding.vancedInstall.setOnClickListener { dismiss() - AppDownloadDialog(requireActivity().getString(R.string.vanced)).show(requireActivity().supportFragmentManager, "InstallVanced") + AppDownloadDialog(requireActivity().getString(R.string.vanced)).show(requireActivity()) } } } diff --git a/app/src/main/java/com/vanced/manager/ui/dialogs/VancedThemeSelectorDialog.kt b/app/src/main/java/com/vanced/manager/ui/dialogs/VancedThemeSelectorDialog.kt index 5e53373c..19f3ee3b 100644 --- a/app/src/main/java/com/vanced/manager/ui/dialogs/VancedThemeSelectorDialog.kt +++ b/app/src/main/java/com/vanced/manager/ui/dialogs/VancedThemeSelectorDialog.kt @@ -38,7 +38,6 @@ class VancedThemeSelectorDialog : BottomSheetDialogFragment() { binding.dialogSave.setOnClickListener { prefs.edit { putString("theme", binding.dialogRadiogroup.getCheckedButtonTag()) } dismiss() - VancedPreferencesDialog().show(requireActivity()) } } diff --git a/app/src/main/java/com/vanced/manager/utils/AppUtils.kt b/app/src/main/java/com/vanced/manager/utils/AppUtils.kt index 9bbdd482..e1d224f3 100644 --- a/app/src/main/java/com/vanced/manager/utils/AppUtils.kt +++ b/app/src/main/java/com/vanced/manager/utils/AppUtils.kt @@ -25,16 +25,16 @@ object AppUtils { fun sendRefresh(context: Context) { CoroutineScope(Dispatchers.IO).launch { - delay(500) + delay(700) LocalBroadcastManager.getInstance(context).sendBroadcast(Intent(HomeFragment.REFRESH_HOME)) } } fun sendCloseDialog(context: Context) { + downloadProgress.get()?.installing?.set(false) CoroutineScope(Dispatchers.IO).launch { - delay(500) + delay(700) LocalBroadcastManager.getInstance(context).sendBroadcast(Intent(AppDownloadDialog.CLOSE_DIALOG)) - downloadProgress.get()?.installing?.set(false) } } @@ -42,7 +42,7 @@ object AppUtils { downloadProgress.get()?.installing?.set(false) //Delay error broadcast until activity (and fragment) get back to the screen CoroutineScope(Dispatchers.IO).launch { - delay(500) + delay(700) val intent = Intent(HomeFragment.INSTALL_FAILED) intent.putExtra("errorMsg", getErrorMessage(status, context)) LocalBroadcastManager.getInstance(context).sendBroadcast(intent) 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 0130559a..7cf5abaa 100644 --- a/app/src/main/java/com/vanced/manager/utils/Extensions.kt +++ b/app/src/main/java/com/vanced/manager/utils/Extensions.kt @@ -20,6 +20,10 @@ object Extensions { return findViewById(checkedRadioButtonId).tag.toString() } + fun RadioGroup.getCheckedButtonText(): String { + return findViewById(checkedRadioButtonId).text.toString() + } + fun DialogFragment.show(activity: FragmentActivity) { show(activity.supportFragmentManager, "") } @@ -49,16 +53,20 @@ object Extensions { //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])) + fun List.convertToAppVersions(): List { + val versionsModel = arrayListOf("latest") for (i in reversed().indices) { - versionsModel.add(AppVersionsModel(this[i], this[i])) + versionsModel.add(this[i]) } - return versionsModel.toTypedArray() + return versionsModel } fun String.convertToAppTheme(context: Context): String { return context.getString(R.string.light_plus_other, this.capitalize(Locale.ROOT)) } + fun String.getLatestAppVersion(versions: List): String { + return if (this == "latest") versions.reversed()[0] else this + } + } \ 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 22a9084f..e7872b1a 100644 --- a/app/src/main/java/com/vanced/manager/utils/InternetTools.kt +++ b/app/src/main/java/com/vanced/manager/utils/InternetTools.kt @@ -49,8 +49,8 @@ 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())}") + val latest = JsonHelper.getJson("$installUrl/latest.json?fetchTime=${SimpleDateFormat("HHmmss", Locale.ROOT)}") + val versions = JsonHelper.getJson("$installUrl/versions.json?fetchTime=${SimpleDateFormat("HHmmss", Locale.ROOT)}") // braveTiers.apply { // set(getJson("$installUrl/sponsor.json")) // notifyChange() diff --git a/app/src/main/java/com/vanced/manager/utils/LanguageContextWrapper.kt b/app/src/main/java/com/vanced/manager/utils/LanguageContextWrapper.kt index 3626bbd6..9a70f2ee 100644 --- a/app/src/main/java/com/vanced/manager/utils/LanguageContextWrapper.kt +++ b/app/src/main/java/com/vanced/manager/utils/LanguageContextWrapper.kt @@ -19,6 +19,7 @@ class LanguageContextWrapper(base: Context?) : ContextWrapper(base) { return LanguageContextWrapper(context) } + @Suppress("DEPRECATION") private fun setLocale(config: Configuration, context: Context): Configuration { val pref = PreferenceManager.getDefaultSharedPreferences(context).getString("manager_lang", "System Default") val sysLocale = Resources.getSystem().configuration.locale 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 8fcee443..57b818cc 100644 --- a/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt +++ b/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt @@ -33,6 +33,8 @@ import kotlin.collections.HashMap object PackageHelper { private const val apkInstallPath = "/data/adb/Vanced/" + private val vancedThemes = arrayOf("black", "dark", "pink", "blue") + fun isPackageInstalled(packageName: String, packageManager: PackageManager): Boolean { return try { packageManager.getPackageInfo(packageName, 0) @@ -84,7 +86,7 @@ object PackageHelper { for (file in files) { when { - (file.name == "black.apk" || file.name == "dark.apk") && !splitFiles.contains("base") -> splitFiles.add("base") + vancedThemes.any { file.name == "$it.apk" } && !splitFiles.contains("base") -> splitFiles.add("base") file.name.matches(Regex("split_config\\.(..)\\.apk")) && !splitFiles.contains("lang") -> splitFiles.add("lang") (file.name.startsWith("split_config.arm") || file.name.startsWith("split_config.x86")) && !splitFiles.contains("arch") -> splitFiles.add("arch") } @@ -292,8 +294,8 @@ object PackageHelper { val apkFilesPath = context.getExternalFilesDir("vanced/root")?.path val fileInfoList = apkFilesPath?.let { it1 -> getFileInfoList(it1) } if (fileInfoList != null) { - val modApk: FileInfo? = fileInfoList.lastOrNull { - it.name == "dark.apk" || it.name == "black.apk" + val modApk: FileInfo? = fileInfoList.lastOrNull { file -> + vancedThemes.any { file.name == "$it.apk" } } if (modApk != null) { if (overwriteBase(modApk, fileInfoList, vancedVersionCode!!, vancedRootPkg, context)) { diff --git a/app/src/main/res/drawable/ic_discord.xml b/app/src/main/res/drawable/ic_discord.xml index e57f4b40..7960bd72 100644 --- a/app/src/main/res/drawable/ic_discord.xml +++ b/app/src/main/res/drawable/ic_discord.xml @@ -1,14 +1,7 @@ - - - + + + diff --git a/app/src/main/res/drawable/ic_github.xml b/app/src/main/res/drawable/ic_github.xml index 9a624565..b9dc44f3 100644 --- a/app/src/main/res/drawable/ic_github.xml +++ b/app/src/main/res/drawable/ic_github.xml @@ -1,12 +1,6 @@ - - + + diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index be9fb764..98df331e 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -51,7 +51,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="8dp" - android:layout_marginTop="4dp" android:layout_marginEnd="8dp" android:nestedScrollingEnabled="false" tools:itemCount="2" diff --git a/app/src/main/res/layout/view_app.xml b/app/src/main/res/layout/view_app.xml index 4ee5d0a5..e1b205ce 100644 --- a/app/src/main/res/layout/view_app.xml +++ b/app/src/main/res/layout/view_app.xml @@ -98,20 +98,14 @@ app:layout_constraintTop_toBottomOf="@id/app_name"> + style="@style/AppVersionText" + android:text="@string/latest" /> + android:text="@{dataModel.versionName}" /> @@ -127,18 +121,13 @@ app:layout_constraintTop_toBottomOf="@id/app_remote_version_container"> + style="@style/AppVersionText" + android:text="@string/version_installed" /> diff --git a/app/src/main/res/layout/view_sponsor.xml b/app/src/main/res/layout/view_sponsor.xml index bb77d129..21f64af3 100644 --- a/app/src/main/res/layout/view_sponsor.xml +++ b/app/src/main/res/layout/view_sponsor.xml @@ -23,7 +23,7 @@ app:cardBackgroundColor="?colorLinkBG" app:cardCornerRadius="12dp" app:cardElevation="0dp" - app:contentPaddingTop="8dp"> + app:contentPaddingTop="12dp"> @dimen/top_header_margin + +