Skip to content

Commit 858a98d

Browse files
committed
#1918 auto start system bridge when upgrading to version 4 and shizuku is started
1 parent 99d8e08 commit 858a98d

File tree

5 files changed

+75
-12
lines changed

5 files changed

+75
-12
lines changed

base/src/main/java/io/github/sds100/keymapper/base/promode/SystemBridgeAutoStarter.kt

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import android.os.Build
55
import androidx.annotation.RequiresApi
66
import androidx.core.app.NotificationCompat
77
import io.github.sds100.keymapper.base.BaseMainActivity
8+
import io.github.sds100.keymapper.base.BuildConfig
89
import io.github.sds100.keymapper.base.R
910
import io.github.sds100.keymapper.base.system.notifications.NotificationController.Companion.CHANNEL_SETUP_ASSISTANT
1011
import io.github.sds100.keymapper.base.system.notifications.NotificationController.Companion.ID_SYSTEM_BRIDGE_STATUS
@@ -16,7 +17,6 @@ import io.github.sds100.keymapper.common.utils.Constants
1617
import io.github.sds100.keymapper.data.Keys
1718
import io.github.sds100.keymapper.data.PreferenceDefaults
1819
import io.github.sds100.keymapper.data.repositories.PreferenceRepository
19-
import io.github.sds100.keymapper.sysbridge.BuildConfig
2020
import io.github.sds100.keymapper.sysbridge.manager.SystemBridgeConnectionManager
2121
import io.github.sds100.keymapper.sysbridge.manager.SystemBridgeConnectionState
2222
import io.github.sds100.keymapper.sysbridge.manager.isConnected
@@ -188,19 +188,39 @@ class SystemBridgeAutoStarter @Inject constructor(
188188

189189
private suspend fun handleAutoStartFromPreVersion4() {
190190
@Suppress("DEPRECATION")
191-
val upgradedFromPreVersion4 = preferences.get(Keys.hasRootPermissionLegacy).first() != null
191+
val upgradedFromPreVersion4 = preferences.get(Keys.handledUpgradeToProMode).first() == null
192+
193+
if (!upgradedFromPreVersion4) {
194+
return
195+
}
192196

193197
val isRooted: Boolean = withTimeoutOrNull(1000) {
194198
suAdapter.isRootGranted.filterNotNull().first()
195199
} ?: false
196200

197-
if (upgradedFromPreVersion4 && isRooted) {
201+
if (isRooted) {
198202
Timber.i(
199203
"Auto starting system bridge because upgraded from pre version 4.0 and was rooted",
200204
)
201205

202206
autoStart(AutoStartType.ROOT)
203-
preferences.set(Keys.handledRootToProModeUpgrade, true)
207+
preferences.set(Keys.handledUpgradeToProMode, true)
208+
preferences.set(Keys.keyEventActionsUseSystemBridge, true)
209+
return
210+
}
211+
212+
// Try Shizuku after the root check because root is more reliable.
213+
val isShizukuStarted: Boolean = shizukuAdapter.isStarted.value
214+
215+
if (isShizukuStarted) {
216+
Timber.i(
217+
"Auto starting system bridge because upgraded from pre version 4.0 and Shizuku was started",
218+
)
219+
220+
autoStart(AutoStartType.SHIZUKU)
221+
preferences.set(Keys.handledUpgradeToProMode, true)
222+
preferences.set(Keys.keyEventActionsUseSystemBridge, true)
223+
return
204224
}
205225
}
206226

base/src/main/java/io/github/sds100/keymapper/base/settings/SettingsScreen.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,7 @@ private fun Content(
359359
modifier = Modifier
360360
.fillMaxWidth()
361361
.padding(horizontal = 16.dp),
362-
isProModeSelected = state.keyEventActionsUseSystemBridege,
362+
isProModeSelected = state.keyEventActionsUseSystemBridge,
363363
onSelected = onKeyEventActionMethodSelected,
364364
)
365365

base/src/main/java/io/github/sds100/keymapper/base/settings/SettingsViewModel.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ class SettingsViewModel @Inject constructor(
6767
forceVibrate = values[3] as Boolean? ?: false,
6868
hideHomeScreenAlerts = values[4] as Boolean? ?: false,
6969
showDeviceDescriptors = values[5] as Boolean? ?: false,
70-
keyEventActionsUseSystemBridege = values[6] as Boolean? ?: false,
70+
keyEventActionsUseSystemBridge = values[6] as Boolean? ?: false,
7171
)
7272
}.stateIn(viewModelScope, SharingStarted.Lazily, MainSettingsState())
7373

@@ -360,7 +360,7 @@ data class MainSettingsState(
360360
val loggingEnabled: Boolean = false,
361361
val hideHomeScreenAlerts: Boolean = false,
362362
val showDeviceDescriptors: Boolean = false,
363-
val keyEventActionsUseSystemBridege: Boolean = false,
363+
val keyEventActionsUseSystemBridge: Boolean = false,
364364
)
365365

366366
data class DefaultSettingsState(

base/src/test/java/io/github/sds100/keymapper/base/promode/SystemBridgeAutoStarterTest.kt

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,13 +221,53 @@ class SystemBridgeAutoStarterTest {
221221
runTest(testDispatcher) {
222222
isRootGrantedFlow.value = true
223223
fakePreferences.set(Keys.isSystemBridgeUsed, null)
224-
fakePreferences.set(Keys.hasRootPermissionLegacy, true)
224+
fakePreferences.set(Keys.handledUpgradeToProMode, null)
225225

226226
systemBridgeAutoStarter.init()
227227
advanceUntilIdle()
228228

229229
verify(mockConnectionManager).startWithRoot()
230-
assertThat(fakePreferences.get(Keys.handledRootToProModeUpgrade).first(), `is`(true))
230+
}
231+
232+
@Test
233+
fun `auto start from pre version 4 when shizuku is started and it was never used before`() =
234+
runTest(testDispatcher) {
235+
shizukuIsStartedFlow.value = true
236+
shizukuPermissionGrantedFlow.value = true
237+
fakePreferences.set(Keys.isSystemBridgeUsed, null)
238+
fakePreferences.set(Keys.handledUpgradeToProMode, null)
239+
240+
systemBridgeAutoStarter.init()
241+
advanceUntilIdle()
242+
243+
verify(mockConnectionManager).startWithShizuku()
244+
}
245+
246+
@Test
247+
fun `set key event actions to use system bridge when upgrading to version 4 and rooted`() =
248+
runTest(testDispatcher) {
249+
isRootGrantedFlow.value = true
250+
fakePreferences.set(Keys.isSystemBridgeUsed, null)
251+
fakePreferences.set(Keys.handledUpgradeToProMode, null)
252+
253+
systemBridgeAutoStarter.init()
254+
advanceUntilIdle()
255+
256+
assertThat(fakePreferences.get(Keys.keyEventActionsUseSystemBridge).first(), `is`(true))
257+
}
258+
259+
@Test
260+
fun `set key event actions to use system bridge when upgrading to version 4 and shizuku is started`() =
261+
runTest(testDispatcher) {
262+
shizukuIsStartedFlow.value = true
263+
shizukuPermissionGrantedFlow.value = true
264+
fakePreferences.set(Keys.isSystemBridgeUsed, null)
265+
fakePreferences.set(Keys.handledUpgradeToProMode, null)
266+
267+
systemBridgeAutoStarter.init()
268+
advanceUntilIdle()
269+
270+
assertThat(fakePreferences.get(Keys.keyEventActionsUseSystemBridge).first(), `is`(true))
231271
}
232272

233273
@Test
@@ -274,6 +314,7 @@ class SystemBridgeAutoStarterTest {
274314
fun `do not auto start when emergency killed`() = runTest(testDispatcher) {
275315
isRootGrantedFlow.value = true
276316
fakePreferences.set(Keys.isSystemBridgeEmergencyKilled, true)
317+
fakePreferences.set(Keys.handledUpgradeToProMode, true)
277318

278319
systemBridgeAutoStarter.init()
279320
advanceUntilIdle()
@@ -345,6 +386,7 @@ class SystemBridgeAutoStarterTest {
345386
@Test
346387
fun `do not auto start when auto start is disabled`() = runTest(testDispatcher) {
347388
fakePreferences.set(Keys.isSystemBridgeKeepAliveEnabled, false)
389+
fakePreferences.set(Keys.handledUpgradeToProMode, true)
348390
isRootGrantedFlow.value = true
349391

350392
systemBridgeAutoStarter.init()
@@ -611,6 +653,7 @@ class SystemBridgeAutoStarterTest {
611653
fun `do not auto start with Shizuku on launch if it was never used before`() =
612654
runTest(testDispatcher) {
613655
fakePreferences.set(Keys.isSystemBridgeUsed, null)
656+
fakePreferences.set(Keys.handledUpgradeToProMode, true)
614657
shizukuIsStartedFlow.value = true
615658
shizukuPermissionGrantedFlow.value = true
616659

data/src/main/java/io/github/sds100/keymapper/data/Keys.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,10 +157,10 @@ object Keys {
157157
val shellCommandScriptText = stringPreferencesKey("key_shell_command_script_text")
158158

159159
/**
160-
* This is stored as true when PRO Mode has been auto started after upgrading
161-
* to 4.0 on a rooted device.
160+
* This is stored as true when PRO Mode has been auto started after updating
161+
* to 4.0 and Key Mapper previously had root or shizuku permission.
162162
*/
163-
val handledRootToProModeUpgrade = booleanPreferencesKey("key_handled_root_to_pro_mode_upgrade")
163+
val handledUpgradeToProMode = booleanPreferencesKey("key_handled_upgrade_to_pro_mode")
164164

165165
val handledMigrateScreenOffKeyMapsNotification =
166166
booleanPreferencesKey("key_handled_migrate_screen_off_key_maps_notification")

0 commit comments

Comments
 (0)