From 67c3f40adbdfa14b4c56eb4482673c8c51b6bb99 Mon Sep 17 00:00:00 2001 From: Viktor De Pasquale Date: Fri, 10 May 2019 16:22:03 +0200 Subject: [PATCH] Fixed language won't change in certain views unless app restarts --- .../topjohnwu/magisk/di/ApplicationModule.kt | 9 ++- .../topjohnwu/magisk/di/ViewModelsModule.kt | 2 +- .../magisk/ui/base/MagiskActivity.kt | 2 +- .../topjohnwu/magisk/ui/home/HomeViewModel.kt | 64 +++++++++---------- .../com/topjohnwu/magisk/utils/XAndroid.kt | 6 ++ .../com/topjohnwu/magisk/utils/XString.kt | 7 ++ .../main/res/layout/include_update_card.xml | 4 +- 7 files changed, 50 insertions(+), 44 deletions(-) diff --git a/app/src/main/java/com/topjohnwu/magisk/di/ApplicationModule.kt b/app/src/main/java/com/topjohnwu/magisk/di/ApplicationModule.kt index 861f1ce27..f58961dda 100644 --- a/app/src/main/java/com/topjohnwu/magisk/di/ApplicationModule.kt +++ b/app/src/main/java/com/topjohnwu/magisk/di/ApplicationModule.kt @@ -9,12 +9,11 @@ import org.koin.dsl.module val applicationModule = module { single { RxBus() } - single { get().resources } - single { get() as App } - single { get().packageManager } + factory { get().resources } + factory { get() as App } + factory { get().packageManager } single(SUTimeout) { - get().protectedContext - .getSharedPreferences("su_timeout", 0) + get().protectedContext.getSharedPreferences("su_timeout", 0) } single { PreferenceManager.getDefaultSharedPreferences(get().protectedContext) } } diff --git a/app/src/main/java/com/topjohnwu/magisk/di/ViewModelsModule.kt b/app/src/main/java/com/topjohnwu/magisk/di/ViewModelsModule.kt index 9983734a8..941176a48 100644 --- a/app/src/main/java/com/topjohnwu/magisk/di/ViewModelsModule.kt +++ b/app/src/main/java/com/topjohnwu/magisk/di/ViewModelsModule.kt @@ -15,7 +15,7 @@ import org.koin.dsl.module val viewModelModules = module { viewModel { MainViewModel() } - viewModel { HomeViewModel(get(), get()) } + viewModel { HomeViewModel(get()) } viewModel { SuperuserViewModel(get(), get(), get(), get()) } viewModel { HideViewModel(get(), get()) } viewModel { ModuleViewModel(get(), get()) } diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/base/MagiskActivity.kt b/app/src/main/java/com/topjohnwu/magisk/ui/base/MagiskActivity.kt index dc37ae9b2..ec0a1f4d6 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/base/MagiskActivity.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/base/MagiskActivity.kt @@ -62,7 +62,7 @@ abstract class MagiskActivity TODO() - MagiskState.NOT_INSTALLED -> resources.getString(R.string.magisk_version_error) - MagiskState.UP_TO_DATE -> resources.getString(R.string.magisk_up_to_date) - MagiskState.LOADING -> resources.getString(R.string.checking_for_updates) - MagiskState.OBSOLETE -> resources.getString(R.string.magisk_update_title) + MagiskState.NOT_INSTALLED -> R.string.magisk_version_error.res() + MagiskState.UP_TO_DATE -> R.string.magisk_up_to_date.res() + MagiskState.LOADING -> R.string.checking_for_updates.res() + MagiskState.OBSOLETE -> R.string.magisk_update_title.res() } } val magiskCurrentVersion = KObservableField("") val magiskLatestVersion = KObservableField("") val magiskAdditionalInfo = Observer(magiskState) { if (Config.get(Config.Key.COREONLY)) - resources.getString(R.string.core_only_enabled) + R.string.core_only_enabled.res() else "" } @@ -48,22 +48,22 @@ class HomeViewModel( val managerStateText = Observer(managerState) { when (managerState.value) { MagiskState.NO_ROOT -> "wtf" - MagiskState.NOT_INSTALLED -> resources.getString(R.string.invalid_update_channel) - MagiskState.UP_TO_DATE -> resources.getString(R.string.manager_up_to_date) - MagiskState.LOADING -> resources.getString(R.string.checking_for_updates) - MagiskState.OBSOLETE -> resources.getString(R.string.manager_update_title) + MagiskState.NOT_INSTALLED -> R.string.invalid_update_channel.res() + MagiskState.UP_TO_DATE -> R.string.manager_up_to_date.res() + MagiskState.LOADING -> R.string.checking_for_updates.res() + MagiskState.OBSOLETE -> R.string.manager_update_title.res() } } val managerCurrentVersion = KObservableField("") val managerLatestVersion = KObservableField("") val managerAdditionalInfo = Observer(managerState) { - if (app.packageName != BuildConfig.APPLICATION_ID) - "(${app.packageName})" + if (packageName != BuildConfig.APPLICATION_ID) + "($packageName)" else "" } - val safetyNetTitle = KObservableField(resources.getString(R.string.safetyNet_check_text)) + val safetyNetTitle = KObservableField(R.string.safetyNet_check_text.res()) val ctsState = KObservableField(SafetyNetState.IDLE) val basicIntegrityState = KObservableField(SafetyNetState.IDLE) val safetyNetState = Observer(ctsState, basicIntegrityState) { @@ -81,8 +81,6 @@ class HomeViewModel( val hasRoot = KObservableField(false) private var shownDialog = false - private val current = resources.getString(R.string.current_installed) - private val latest = resources.getString(R.string.latest_version) init { Event.register(this) @@ -126,7 +124,7 @@ class HomeViewModel( fun safetyNetPressed() { ctsState.value = SafetyNetState.LOADING basicIntegrityState.value = SafetyNetState.LOADING - safetyNetTitle.value = resources.getString(R.string.checking_safetyNet_status) + safetyNetTitle.value = R.string.checking_safetyNet_status.res() UpdateSafetyNetEvent().publish() } @@ -135,7 +133,7 @@ class HomeViewModel( response and 0x0F == 0 -> { val hasCtsPassed = response and ISafetyNetHelper.CTS_PASS != 0 val hasBasicIntegrityPassed = response and ISafetyNetHelper.BASIC_PASS != 0 - safetyNetTitle.value = resources.getString(R.string.safetyNet_check_success) + safetyNetTitle.value = R.string.safetyNet_check_success.res() ctsState.value = if (hasCtsPassed) { SafetyNetState.PASS } else { @@ -154,11 +152,10 @@ class HomeViewModel( else -> { ctsState.value = SafetyNetState.IDLE basicIntegrityState.value = SafetyNetState.IDLE - val errorString = when (response) { + safetyNetTitle.value = when (response) { ISafetyNetHelper.RESPONSE_ERR -> R.string.safetyNet_res_invalid else -> R.string.safetyNet_api_error - } - safetyNetTitle.value = resources.getString(errorString) + }.res() } } @@ -172,7 +169,7 @@ class HomeViewModel( hasRoot.value = Shell.rootAccess() - if (Networking.checkNetworkStatus(app)) { + if (Networking.checkNetworkStatus(context)) { CheckUpdates.check() } else { state = State.LOADING_FAILED @@ -187,16 +184,14 @@ class HomeViewModel( else -> MagiskState.UP_TO_DATE } - if (magiskState.value != MagiskState.NOT_INSTALLED) { - magiskCurrentVersion.value = version - .format(Config.magiskVersionString, Config.magiskVersionCode) - .let { current.format(it) } + magiskCurrentVersion.value = if (magiskState.value != MagiskState.NOT_INSTALLED) { + version.format(Config.magiskVersionString, Config.magiskVersionCode) } else { - magiskCurrentVersion.value = "" + "" } + magiskLatestVersion.value = version .format(Config.remoteMagiskVersionString, Config.remoteMagiskVersionCode) - .let { latest.format(it) } managerState.value = when (Config.remoteManagerVersionCode) { in Int.MIN_VALUE until 0 -> MagiskState.NOT_INSTALLED //wrong update channel @@ -206,10 +201,9 @@ class HomeViewModel( managerCurrentVersion.value = version .format(BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE) - .let { current.format(it) } + managerLatestVersion.value = version .format(Config.remoteManagerVersionString, Config.remoteManagerVersionCode) - .let { latest.format(it) } } private fun ensureEnv() { diff --git a/app/src/main/java/com/topjohnwu/magisk/utils/XAndroid.kt b/app/src/main/java/com/topjohnwu/magisk/utils/XAndroid.kt index 0db67d30b..a2fdf97bc 100644 --- a/app/src/main/java/com/topjohnwu/magisk/utils/XAndroid.kt +++ b/app/src/main/java/com/topjohnwu/magisk/utils/XAndroid.kt @@ -11,6 +11,12 @@ import android.provider.OpenableColumns import com.topjohnwu.magisk.App import java.io.FileNotFoundException +val packageName: String + get() { + val app: App by inject() + return app.packageName + } + val PackageInfo.processes get() = activities?.processNames.orEmpty() + services?.processNames.orEmpty() + diff --git a/app/src/main/java/com/topjohnwu/magisk/utils/XString.kt b/app/src/main/java/com/topjohnwu/magisk/utils/XString.kt index 5f41b8693..8e9ab7165 100644 --- a/app/src/main/java/com/topjohnwu/magisk/utils/XString.kt +++ b/app/src/main/java/com/topjohnwu/magisk/utils/XString.kt @@ -1,5 +1,7 @@ package com.topjohnwu.magisk.utils +import android.content.res.Resources + val specialChars = arrayOf('!', '@', '#', '$', '%', '&', '?') fun String.replaceRandomWithSpecial(): String { @@ -8,4 +10,9 @@ fun String.replaceRandomWithSpecial(): String { random = random() } while (random == '.') return replace(random, specialChars.random()) +} + +fun Int.res(vararg args: Any): String { + val resources: Resources by inject() + return resources.getString(this, *args) } \ No newline at end of file diff --git a/app/src/main/res/layout/include_update_card.xml b/app/src/main/res/layout/include_update_card.xml index a337a0edf..c40b531ac 100644 --- a/app/src/main/res/layout/include_update_card.xml +++ b/app/src/main/res/layout/include_update_card.xml @@ -110,7 +110,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:maxLines="1" - android:text="@{state != MagiskState.LOADING ? currentVersion : @string/checking_for_updates}" + android:text="@{state != MagiskState.LOADING ? @string/current_installed(currentVersion) : @string/checking_for_updates}" app:autoSizeMinTextSize="1sp" app:autoSizeTextType="uniform" app:layout_constraintBottom_toTopOf="@+id/latest_version" @@ -125,7 +125,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:maxLines="1" - android:text="@{state != MagiskState.LOADING ? latestVersion : @string/checking_for_updates}" + android:text="@{state != MagiskState.LOADING ? @string/latest_version(latestVersion) : @string/checking_for_updates}" app:autoSizeMinTextSize="1sp" app:autoSizeTextType="uniform" app:layout_constraintBottom_toTopOf="@+id/additional"