From b7832102385ce69bc74081a3ef93950a67e52049 Mon Sep 17 00:00:00 2001 From: X1nto Date: Sun, 17 Jan 2021 13:09:36 +0400 Subject: [PATCH 01/10] prevent loading root data model on nonroot screen --- .../vanced/manager/adapter/AppListAdapter.kt | 14 ++++++++++---- .../manager/ui/viewmodels/HomeViewModel.kt | 17 ++++++++++------- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/vanced/manager/adapter/AppListAdapter.kt b/app/src/main/java/com/vanced/manager/adapter/AppListAdapter.kt index 29f241adc9..7237bae799 100644 --- a/app/src/main/java/com/vanced/manager/adapter/AppListAdapter.kt +++ b/app/src/main/java/com/vanced/manager/adapter/AppListAdapter.kt @@ -92,15 +92,21 @@ class AppListAdapter( init { if (prefs.getBoolean("enable_vanced", true)) { - dataModels.add(viewModel.vancedModel.value) - rootDataModels.add(viewModel.vancedRootModel.value) + if (isRoot) { + rootDataModels.add(viewModel.vancedRootModel.value) + } else { + dataModels.add(viewModel.vancedModel.value) + } apps.add(context.getString(R.string.vanced)) itemCount++ } if (prefs.getBoolean("enable_music", true)) { - dataModels.add(viewModel.musicModel.value) - rootDataModels.add(viewModel.musicRootModel.value) + if (isRoot) { + rootDataModels.add(viewModel.musicRootModel.value) + } else { + dataModels.add(viewModel.musicModel.value) + } apps.add(context.getString(R.string.music)) itemCount++ } 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 613a3c5e9a..cd2516b662 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 @@ -43,6 +43,7 @@ import kotlinx.coroutines.launch open class HomeViewModel(private val activity: FragmentActivity): ViewModel() { private val prefs = getDefaultSharedPreferences(activity) + private val variant get() = prefs.getString("vanced_variant", "nonroot") val vancedModel = MutableLiveData() val vancedRootModel = MutableLiveData() @@ -90,7 +91,6 @@ open class HomeViewModel(private val activity: FragmentActivity): ViewModel() { } fun openInstallDialog(view: View, app: String) { - val variant = prefs.getString("vanced_variant", "nonroot") if (variant == "nonroot" && app != activity.getString(R.string.microg) && !microgModel.value?.isAppInstalled?.value!!) { microgToast.show() return @@ -147,7 +147,7 @@ open class HomeViewModel(private val activity: FragmentActivity): ViewModel() { } fun uninstallPackage(pkg: String) { - if (prefs.getString("vanced_variant", "nonroot") == "root" && uninstallRootApk(pkg)) { + if (variant == "root" && uninstallRootApk(pkg)) { viewModelScope.launch { loadJson(activity) } } else { uninstallApk(pkg, activity) @@ -155,11 +155,14 @@ open class HomeViewModel(private val activity: FragmentActivity): ViewModel() { } init { - vancedModel.value = DataModel(vanced, activity, vancedPkg, activity.getString(R.string.vanced), AppCompatResources.getDrawable(activity, R.drawable.ic_vanced)) - vancedRootModel.value = RootDataModel(vanced, activity, vancedRootPkg, activity.getString(R.string.vanced), AppCompatResources.getDrawable(activity, R.drawable.ic_vanced), "vanced") - musicModel.value = DataModel(music, activity, musicPkg, activity.getString(R.string.music), AppCompatResources.getDrawable(activity, R.drawable.ic_music)) - musicRootModel.value = RootDataModel(music, activity, musicRootPkg, activity.getString(R.string.music), AppCompatResources.getDrawable(activity, R.drawable.ic_music), "music") - microgModel.value = DataModel(microg, activity, microgPkg, activity.getString(R.string.microg), AppCompatResources.getDrawable(activity, R.drawable.ic_microg)) + if (variant == "root") { + vancedRootModel.value = RootDataModel(vanced, activity, vancedRootPkg, activity.getString(R.string.vanced), AppCompatResources.getDrawable(activity, R.drawable.ic_vanced), "vanced") + musicRootModel.value = RootDataModel(music, activity, musicRootPkg, activity.getString(R.string.music), AppCompatResources.getDrawable(activity, R.drawable.ic_music), "music") + } else { + vancedModel.value = DataModel(vanced, activity, vancedPkg, activity.getString(R.string.vanced), AppCompatResources.getDrawable(activity, R.drawable.ic_vanced)) + musicModel.value = DataModel(music, activity, musicPkg, activity.getString(R.string.music), AppCompatResources.getDrawable(activity, R.drawable.ic_music)) + microgModel.value = DataModel(microg, activity, microgPkg, activity.getString(R.string.microg), AppCompatResources.getDrawable(activity, R.drawable.ic_microg)) + } managerModel.value = DataModel(manager, activity, managerPkg, activity.getString(R.string.app_name), AppCompatResources.getDrawable(activity, R.mipmap.ic_launcher)) } } From eef6714943ac8f709e054846b568ea659efdb2d1 Mon Sep 17 00:00:00 2001 From: X1nto Date: Sun, 17 Jan 2021 13:27:22 +0400 Subject: [PATCH 02/10] added null safety for package manager --- app/src/main/java/com/vanced/manager/model/DataModel.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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 0d9b617afd..5e9d01bd53 100644 --- a/app/src/main/java/com/vanced/manager/model/DataModel.kt +++ b/app/src/main/java/com/vanced/manager/model/DataModel.kt @@ -67,7 +67,7 @@ open class DataModel( open fun getPkgVersionName(pkg: String): String { val pm = context.packageManager return if (isAppInstalled.value == true) { - pm.getPackageInfo(pkg, 0).versionName.removeSuffix("-vanced") + pm?.getPackageInfo(pkg, 0)?.versionName?.removeSuffix("-vanced") ?: context.getString(R.string.unavailable) } else { context.getString(R.string.unavailable) } @@ -75,12 +75,12 @@ open class DataModel( @Suppress("DEPRECATION") private fun getPkgVersionCode(pkg: String): Int { + val pm = context.packageManager return if (isAppInstalled.value == true) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) - context.packageManager.getPackageInfo(pkg, 0).longVersionCode.and(0xFFFFFFFF) - .toInt() + pm?.getPackageInfo(pkg, 0)?.longVersionCode?.and(0xFFFFFFFF)?.toInt() ?: 0 else - context.packageManager.getPackageInfo(pkg, 0).versionCode + pm?.getPackageInfo(pkg, 0)?.versionCode ?: 0 } else 0 } From 480b23f925236e098f15ed7a8f73479c990566d4 Mon Sep 17 00:00:00 2001 From: KevinX8 Date: Sun, 17 Jan 2021 09:55:09 +0000 Subject: [PATCH 03/10] New translations strings.xml (Turkish) --- app/src/main/res/values-tr-rTR/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index c311a6f2d6..e859fafa2b 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -51,9 +51,9 @@ Chrome Özel Sekmelerini kullan Bağlantılar Chrome Özel Sekmelerinde açılacaktır Sistem varsayılanı - Failed to save new time value + Yeni zaman değeri kaydedilemedi Root Script Sleep Time - Adjust sleep time value used in /data/adb/service.d/app.sh script, useful for fixing mounting issues + /data/adb/service.d/app.sh komut dosyasında kullanılan uyku süresi değerini ayarlayın, montaj sorunlarını düzeltmek için yararlıdır Tema Koyu Tema Açık Tema @@ -104,7 +104,7 @@ Kullanıcı kurulumu iptal ettiği için kurulum başarısız oldu. Kullanıcı kurulumu engellediği için kurulum başarısız oldu. Kullanıcı eski sürümü yüklemeye çalıştığı için kurulum tamamlanamadı. Orijinal YouTube uygulamasının güncellemelerini kaldırdıktan sonra yeniden deneyin. - Installation failed because the app conflicts with an already installed app. Uninstall the current version of the app, then try again. + Uygulama önceden yüklenmiş bir uygulamayla çakıştığından yükleme başarısız oldu. Uygulamanın mevcut sürümünü kaldırın ve ardından tekrar deneyin. Kurulum bilinmeyen nedenlerden dolayı başarısız oldu. Telegram veya Discord\'a katılarak destek alabilirsin. Kurulum dosyası cihazınız ile uyumsuz olduğu için kurulum işlemi başarısız oldu. Ayarlar\'da indirilen dosyaları temizleyip, tekrar deneyin. APK dosyaları çözümlenemediğinden, kurulum başarısız oldu. Lütfen yeniden deneyin. From 12a80670ac91029a0e4ad72b83ed50332b88f6c7 Mon Sep 17 00:00:00 2001 From: KevinX8 Date: Sun, 17 Jan 2021 09:55:11 +0000 Subject: [PATCH 04/10] New translations strings.xml (Somali) --- app/src/main/res/values-so-rSO/strings.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-so-rSO/strings.xml b/app/src/main/res/values-so-rSO/strings.xml index 97bc92b51a..a04699657a 100644 --- a/app/src/main/res/values-so-rSO/strings.xml +++ b/app/src/main/res/values-so-rSO/strings.xml @@ -51,9 +51,9 @@ Isticmaal Daaqadaha Chrome Linkiyadu waxay ku furmi doonaan daaqadaha Chrome-ka ee loogu talagalay Sida aaladu tahay - Failed to save new time value - Root Script Sleep Time - Adjust sleep time value used in /data/adb/service.d/app.sh script, useful for fixing mounting issues + Laguma guulaysan in cadadka wakhtiga la kaydiyo + Qormada Wakhtiga Jiifka ee Root-ka + Habee cadadka wakhtiga jiifka ee loo isticmaalay qormada /data/adb/service.d/app.s, waxay muhiim u tahay cilladaha galinta Nashqada Nashqad Madow Nashqad Cad @@ -104,7 +104,7 @@ Ku shubidii way guuldaraysatay sababtoo ah qofka aalada isticmaalaya ayaa joojiyay. Ku shubidii way guuldaraysatay sababtoo ah qofka aalada isticmaalaya ayaa xanibay. Ku shubidii way guuldaraysatay sababtoo ah qofka aalada isticmaalaya ayaa isku dayay inuu nooc hore ku shubo. Ka saar cusboonaysiinta xaga app-ka YouTube-ka caadiga ah, kadibna markale isku day. - Installation failed because the app conflicts with an already installed app. Uninstall the current version of the app, then try again. + Ku shubidii way guuldaraysatay sababtoo ah app-ka waxay iskhilaafeen mid horay ugu jiray aalada. Ka saar nooca hadda ee kujira, kadib markale ku celi. Ku shubidii way guuldaraysatay sababo aan la garanaynin awgood, kusoo biir Telegram-kanaga ama Discord-ka si aad caawin dheerad ah u hesho. Ku shubidii way guuldaraysatay sababtoo ah faylka kuma shaqaynayo aaladaada. Xaga Fadhiga ka saar waxyaabaha lasoo dajiyay, kadib markale isku day. Ku shubidii way guuldaraysatay sababtoo ah faylashii apk-ga ayaa khalkhalsan, markale isku day. From 1c123e55d8b13f59a987b28d362e3b201da630b9 Mon Sep 17 00:00:00 2001 From: X1nto Date: Sun, 17 Jan 2021 14:54:48 +0400 Subject: [PATCH 05/10] crash fixes --- .../main/java/com/vanced/manager/adapter/AppListAdapter.kt | 6 +++--- .../main/java/com/vanced/manager/model/RootDataModel.kt | 7 ++++++- .../main/java/com/vanced/manager/utils/PackageHelper.kt | 4 ++-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/vanced/manager/adapter/AppListAdapter.kt b/app/src/main/java/com/vanced/manager/adapter/AppListAdapter.kt index 7237bae799..0f62afb2d9 100644 --- a/app/src/main/java/com/vanced/manager/adapter/AppListAdapter.kt +++ b/app/src/main/java/com/vanced/manager/adapter/AppListAdapter.kt @@ -76,13 +76,13 @@ class AppListAdapter( override fun onBindViewHolder(holder: ListViewHolder, position: Int) { holder.bind(position) - + val dataModel = if (isRoot) rootDataModels[position] else dataModels[position] holder.appCard.setOnClickListener { tooltip.close() AppInfoDialog.newInstance( appName = apps[position], - appIcon = dataModels[position]?.appIcon, - changelog = dataModels[position]?.changelog?.value + appIcon = dataModel?.appIcon, + changelog = dataModel?.changelog?.value ).show(context.supportFragmentManager, "info") } } diff --git a/app/src/main/java/com/vanced/manager/model/RootDataModel.kt b/app/src/main/java/com/vanced/manager/model/RootDataModel.kt index 2466772dd5..9a582a9f75 100644 --- a/app/src/main/java/com/vanced/manager/model/RootDataModel.kt +++ b/app/src/main/java/com/vanced/manager/model/RootDataModel.kt @@ -2,12 +2,13 @@ package com.vanced.manager.model import android.content.Context import android.graphics.drawable.Drawable +import android.util.Log import androidx.lifecycle.LiveData import com.beust.klaxon.JsonObject import com.vanced.manager.R import com.vanced.manager.utils.PackageHelper -open class RootDataModel( +class RootDataModel( jsonObject: LiveData, private val context: Context, override val appPkg: String, @@ -18,6 +19,10 @@ open class RootDataModel( jsonObject, context, appPkg, appName, appIcon ) { + init { + Log.d("test", appPkg) + } + override fun getPkgVersionName(pkg: String): String { return if (PackageHelper.scriptExists(scriptName)) { super.getPkgVersionName(pkg) 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 7315dc5f71..c8dae34a11 100644 --- a/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt +++ b/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt @@ -68,9 +68,9 @@ object PackageHelper { else -> "" } } - fun isPackageInstalled(packageName: String, packageManager: PackageManager): Boolean { + fun isPackageInstalled(packageName: String?, packageManager: PackageManager): Boolean { return try { - packageManager.getPackageInfo(packageName, 0) + packageManager.getPackageInfo(packageName ?: "", 0) true } catch (e: PackageManager.NameNotFoundException) { false From 835ede4de6c0b9ea08775f0df7489b598e57ecb4 Mon Sep 17 00:00:00 2001 From: X1nto Date: Sun, 17 Jan 2021 16:52:50 +0400 Subject: [PATCH 06/10] fixed crash in root data model --- .../com/vanced/manager/model/DataModel.kt | 22 +++++------ .../com/vanced/manager/model/RootDataModel.kt | 38 ++++++++----------- .../com/vanced/manager/utils/PackageHelper.kt | 4 +- 3 files changed, 28 insertions(+), 36 deletions(-) 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 5e9d01bd53..0b91d637e8 100644 --- a/app/src/main/java/com/vanced/manager/model/DataModel.kt +++ b/app/src/main/java/com/vanced/manager/model/DataModel.kt @@ -16,9 +16,9 @@ import kotlinx.coroutines.launch open class DataModel( private val jsonObject: LiveData, private val context: Context, - open val appPkg: String, - open val appName: String, - open val appIcon: Drawable?, + val appPkg: String, + val appName: String, + val appIcon: Drawable?, ) { private val versionCode = MutableLiveData() @@ -32,11 +32,9 @@ open class DataModel( private fun fetch() = CoroutineScope(Dispatchers.IO).launch { val jobj = jsonObject.value - isAppInstalled.postValue(isPackageInstalled(appPkg, context.packageManager)) + isAppInstalled.postValue(isAppInstalled(appPkg)) versionCode.postValue(jobj?.int("versionCode") ?: 0) - versionName.postValue(jobj?.string("version")?.removeSuffix("-vanced") ?: context.getString( - R.string.unavailable - )) + versionName.postValue(jobj?.string("version")?.removeSuffix("-vanced") ?: context.getString(R.string.unavailable)) changelog.postValue(jobj?.string("changelog") ?: context.getString(R.string.unavailable)) } @@ -50,8 +48,8 @@ open class DataModel( } this?.let { isAppInstalled.observe(it) { - installedVersionCode.postValue(getPkgVersionCode(appPkg)) - installedVersionName.postValue(getPkgVersionName(appPkg)) + installedVersionCode.value = getPkgVersionCode(appPkg) + installedVersionName.value = getPkgVersionName(appPkg) } } this?.let { @@ -64,7 +62,9 @@ open class DataModel( } } - open fun getPkgVersionName(pkg: String): String { + open fun isAppInstalled(pkg: String): Boolean = isPackageInstalled(pkg, context.packageManager) + + private fun getPkgVersionName(pkg: String): String { val pm = context.packageManager return if (isAppInstalled.value == true) { pm?.getPackageInfo(pkg, 0)?.versionName?.removeSuffix("-vanced") ?: context.getString(R.string.unavailable) @@ -84,7 +84,7 @@ open class DataModel( } else 0 } - open fun compareInt(int1: Int?, int2: Int?): String { + private fun compareInt(int1: Int?, int2: Int?): String { if (int2 != null && int1 != null) { return when { int1 == 0 -> context.getString(R.string.install) diff --git a/app/src/main/java/com/vanced/manager/model/RootDataModel.kt b/app/src/main/java/com/vanced/manager/model/RootDataModel.kt index 9a582a9f75..bf80ac837a 100644 --- a/app/src/main/java/com/vanced/manager/model/RootDataModel.kt +++ b/app/src/main/java/com/vanced/manager/model/RootDataModel.kt @@ -2,40 +2,32 @@ package com.vanced.manager.model import android.content.Context import android.graphics.drawable.Drawable -import android.util.Log import androidx.lifecycle.LiveData import com.beust.klaxon.JsonObject -import com.vanced.manager.R import com.vanced.manager.utils.PackageHelper class RootDataModel( jsonObject: LiveData, - private val context: Context, - override val appPkg: String, - override val appName: String, - override val appIcon: Drawable?, - private val scriptName: String + context: Context, + appPkg: String, + appName: String, + appIcon: Drawable?, + //BUG THIS! + //kotlin thinks that this value is null if we use + //private val scriptName: String + //Although it's impossible for it to be null. + //Ironic, isn't it? + private val scriptName: String? ): DataModel( jsonObject, context, appPkg, appName, appIcon ) { - init { - Log.d("test", appPkg) - } - - override fun getPkgVersionName(pkg: String): String { - return if (PackageHelper.scriptExists(scriptName)) { - super.getPkgVersionName(pkg) - } else { - context.getString(R.string.unavailable) - } - } - - override fun compareInt(int1: Int?, int2: Int?): String { - return if (PackageHelper.scriptExists(scriptName)) { - super.compareInt(int1, int2) + override fun isAppInstalled(pkg: String): Boolean { + //Adapt to nullable shit + return if (scriptName?.let { PackageHelper.scriptExists(it) } == true) { + super.isAppInstalled(appPkg) } else { - context.getString(R.string.install) + false } } diff --git a/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt b/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt index c8dae34a11..7315dc5f71 100644 --- a/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt +++ b/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt @@ -68,9 +68,9 @@ object PackageHelper { else -> "" } } - fun isPackageInstalled(packageName: String?, packageManager: PackageManager): Boolean { + fun isPackageInstalled(packageName: String, packageManager: PackageManager): Boolean { return try { - packageManager.getPackageInfo(packageName ?: "", 0) + packageManager.getPackageInfo(packageName, 0) true } catch (e: PackageManager.NameNotFoundException) { false From 66f2d70de57f940307db7e9dff33209b8b94ab59 Mon Sep 17 00:00:00 2001 From: X1nto Date: Sun, 17 Jan 2021 17:15:57 +0400 Subject: [PATCH 07/10] crash fixes --- .../com/vanced/manager/model/ProgressModel.kt | 2 +- .../vanced/manager/utils/DownloadHelper.kt | 2 +- .../com/vanced/manager/utils/PackageHelper.kt | 40 ++++++++++--------- .../vanced/manager/core/ui/ext/FragmentExt.kt | 8 +++- 4 files changed, 31 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/com/vanced/manager/model/ProgressModel.kt b/app/src/main/java/com/vanced/manager/model/ProgressModel.kt index c0014803a3..208e343c41 100644 --- a/app/src/main/java/com/vanced/manager/model/ProgressModel.kt +++ b/app/src/main/java/com/vanced/manager/model/ProgressModel.kt @@ -23,7 +23,7 @@ open class ProgressModel { } init { - installing.value = false + installing.postValue(false) reset() } diff --git a/app/src/main/java/com/vanced/manager/utils/DownloadHelper.kt b/app/src/main/java/com/vanced/manager/utils/DownloadHelper.kt index 10cd58a8b7..d0de877447 100644 --- a/app/src/main/java/com/vanced/manager/utils/DownloadHelper.kt +++ b/app/src/main/java/com/vanced/manager/utils/DownloadHelper.kt @@ -117,7 +117,7 @@ object DownloadHelper : CoroutineScope by CoroutineScope(Dispatchers.IO) { fun downloadManager(context: Context) { val url = "https://github.com/YTVanced/VancedManager/releases/latest/download/manager.apk" - download(url,"https://github.com/YTVanced/VancedManager", "manager", "manager.apk", context, onDownloadComplete = { + download(url,"https://github.com/YTVanced/VancedManager/", "manager", "manager.apk", context, onDownloadComplete = { val apk = File("${context.getExternalFilesDir("manager")?.path}/manager.apk") val uri = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) 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 7315dc5f71..824c4f0603 100644 --- a/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt +++ b/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt @@ -161,23 +161,28 @@ object PackageHelper { } fun install(path: String, context: Context) { - val callbackIntent = Intent(context, AppInstallerService::class.java) - val pendingIntent = PendingIntent.getService(context, 0, callbackIntent, 0) - val packageInstaller = context.packageManager.packageInstaller - val params = PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL) - val sessionId = packageInstaller.createSession(params) - val session = packageInstaller.openSession(sessionId) - val inputStream: InputStream = FileInputStream(path) - val outputStream = session.openWrite("install", 0, -1) - val buffer = ByteArray(65536) - var c: Int - while (inputStream.read(buffer).also { c = it } != -1) { - outputStream.write(buffer, 0, c) - } - session.fsync(outputStream) - inputStream.close() - outputStream.close() - session.commit(pendingIntent.intentSender) + try { + val callbackIntent = Intent(context, AppInstallerService::class.java) + val pendingIntent = PendingIntent.getService(context, 0, callbackIntent, 0) + val packageInstaller = context.packageManager.packageInstaller + val params = PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL) + val sessionId = packageInstaller.createSession(params) + val session = packageInstaller.openSession(sessionId) + val inputStream: InputStream = FileInputStream(path) + val outputStream = session.openWrite("install", 0, -1) + val buffer = ByteArray(65536) + var c: Int + while (inputStream.read(buffer).also { c = it } != -1) { + outputStream.write(buffer, 0, c) + } + session.fsync(outputStream) + inputStream.close() + outputStream.close() + session.commit(pendingIntent.intentSender) + } catch (e: IOException) { + Log.d(INSTALLER_TAG, e.stackTraceToString()) + } + } private fun installRootMusic(files: ArrayList, context: Context): Boolean { @@ -338,7 +343,6 @@ object PackageHelper { } catch (e: IOException) { e.printStackTrace() } - } finally { session?.close() } diff --git a/core-ui/src/main/java/com/vanced/manager/core/ui/ext/FragmentExt.kt b/core-ui/src/main/java/com/vanced/manager/core/ui/ext/FragmentExt.kt index c7fe6fe064..6dc5d24dd6 100644 --- a/core-ui/src/main/java/com/vanced/manager/core/ui/ext/FragmentExt.kt +++ b/core-ui/src/main/java/com/vanced/manager/core/ui/ext/FragmentExt.kt @@ -1,10 +1,16 @@ package com.vanced.manager.core.ui.ext +import android.util.Log import androidx.fragment.app.DialogFragment import androidx.fragment.app.Fragment fun Fragment.requireSupportFM() = requireActivity().supportFragmentManager fun Fragment.showDialog(dialog: D) { - dialog.show(requireSupportFM(), dialog::class.simpleName) + try { + dialog.show(requireSupportFM(), dialog::class.simpleName) + } catch (e: IllegalStateException) { + Log.d("VMUI", "Can not perform this action after onSaveInstanceState") + } + } \ No newline at end of file From 375fffe590f1dbb74f156968975ce3701590cf2f Mon Sep 17 00:00:00 2001 From: X1nto Date: Sun, 17 Jan 2021 17:17:05 +0400 Subject: [PATCH 08/10] removed unecessary trycatch block --- .../com/vanced/manager/utils/PackageHelper.kt | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt b/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt index 824c4f0603..0cade05f4b 100644 --- a/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt +++ b/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt @@ -331,18 +331,16 @@ object PackageHelper { private fun doCommitSession(sessionId: Int, context: Context) { var session: PackageInstaller.Session? = null try { - try { - session = context.packageManager.packageInstaller.openSession(sessionId) - val callbackIntent = Intent(context, AppInstallerService::class.java) - val pendingIntent = PendingIntent.getService(context, 0, callbackIntent, 0) - session.commit(pendingIntent.intentSender) - session.close() - Log.d(INSTALLER_TAG, "install request sent") - Log.d(INSTALLER_TAG, "doCommitSession: " + context.packageManager.packageInstaller.mySessions) - Log.d(INSTALLER_TAG, "doCommitSession: after session commit ") - } catch (e: IOException) { - e.printStackTrace() - } + session = context.packageManager.packageInstaller.openSession(sessionId) + val callbackIntent = Intent(context, AppInstallerService::class.java) + val pendingIntent = PendingIntent.getService(context, 0, callbackIntent, 0) + session.commit(pendingIntent.intentSender) + session.close() + Log.d(INSTALLER_TAG, "install request sent") + Log.d(INSTALLER_TAG, "doCommitSession: " + context.packageManager.packageInstaller.mySessions) + Log.d(INSTALLER_TAG, "doCommitSession: after session commit ") + } catch (e: IOException) { + e.printStackTrace() } finally { session?.close() } From ffa2e0a28153feaaa860a7b7ec3cee68b83e47ac Mon Sep 17 00:00:00 2001 From: X1nto Date: Sun, 17 Jan 2021 19:13:30 +0400 Subject: [PATCH 09/10] temporary fix for random crashes on installation --- .../vanced/manager/core/downloader/VancedDownloader.kt | 10 +++++++++- app/src/main/java/com/vanced/manager/utils/AppUtils.kt | 10 ++++++++++ .../java/com/vanced/manager/utils/PackageHelper.kt | 2 +- 3 files changed, 20 insertions(+), 2 deletions(-) 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 2661e7d4cf..0defd939dd 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,6 +2,7 @@ package com.vanced.manager.core.downloader import android.content.Context import android.content.SharedPreferences +import android.util.Log import androidx.preference.PreferenceManager.getDefaultSharedPreferences import com.google.firebase.analytics.FirebaseAnalytics import com.google.firebase.analytics.ktx.logEvent @@ -15,6 +16,7 @@ import com.vanced.manager.utils.PackageHelper.downloadStockCheck import com.vanced.manager.utils.PackageHelper.installVanced import com.vanced.manager.utils.PackageHelper.installVancedRoot import java.io.File +import java.lang.Exception object VancedDownloader { @@ -58,7 +60,13 @@ object VancedDownloader { count = 0 vancedVersionCode = vanced.value?.int("versionCode") ?: 0 - downloadSplits(context) + try { + downloadSplits(context) + } catch (e: Exception) { + Log.d("VMDownloader", e.stackTraceToString()) + downloadProgress.value?.downloadingFile?.postValue(context.getString(R.string.error_downloading, "Vanced")) + } + } private fun downloadSplits(context: Context, type: String = "theme") { 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 2ebbc562fc..0e1665b3b8 100644 --- a/app/src/main/java/com/vanced/manager/utils/AppUtils.kt +++ b/app/src/main/java/com/vanced/manager/utils/AppUtils.kt @@ -59,6 +59,16 @@ object AppUtils: CoroutineScope by CoroutineScope(Dispatchers.IO) { } } + fun sendFailure(error: String, context: Context): Job { + return launch { + delay(700) + val intent = Intent(HomeFragment.INSTALL_FAILED) + intent.putExtra("errorMsg", getErrorMessage(error, context)) + intent.putExtra("fullErrorMsg", error) + LocalBroadcastManager.getInstance(context).sendBroadcast(intent) + } + } + @Throws(IOException::class) fun generateChecksum(data: ByteArray): String { try { 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 0cade05f4b..be032d826b 100644 --- a/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt +++ b/app/src/main/java/com/vanced/manager/utils/PackageHelper.kt @@ -276,7 +276,7 @@ object PackageHelper { } doCommitSession(sessionId, context) Log.d(INSTALLER_TAG,"Success") - } catch (e: IOException) { + } catch (e: Exception) { e.printStackTrace() } return sessionId From 55e794cb003254d8749d0581795114f2928a7d7c Mon Sep 17 00:00:00 2001 From: X1nto Date: Sun, 17 Jan 2021 19:21:50 +0400 Subject: [PATCH 10/10] version bumpup --- app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 28cdfb4c06..5970e66b68 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -15,8 +15,8 @@ android { applicationId = "com.vanced.manager" minSdkVersion(21) targetSdkVersion(30) - versionCode = 220 - versionName = "2.2.0 (RootedFirebase)" + versionCode = 221 + versionName = "2.2.1 (RootedFirebase)" vectorDrawables.useSupportLibrary = true