@@ -81,7 +81,14 @@ class SystemBridgeAutoStarter @Inject constructor(
8181 sealed class NotEligible : AutoStartEligibility () {
8282 data object WiFiDisconnected : NotEligible ()
8383 data object AutoStartCooldown : NotEligible ()
84- data object Other : NotEligible ()
84+ data object WriteSecureSettingsRevoked : NotEligible ()
85+ data object AdbUnpaired : NotEligible ()
86+ data object ShizukuRootRequired : NotEligible ()
87+ data object SystemBridgeStoppedByUser : NotEligible ()
88+ data object NotUsedBefore : NotEligible ()
89+ data object EmergencyKilled : NotEligible ()
90+ data object AutoStartDisabled : NotEligible ()
91+ data object SystemBridgeConnected : NotEligible ()
8592 }
8693 }
8794
@@ -112,18 +119,26 @@ class SystemBridgeAutoStarter @Inject constructor(
112119 permissionAdapter.isGrantedFlow(Permission .WRITE_SECURE_SETTINGS ),
113120 networkAdapter.isWifiConnected,
114121 ) { isWriteSecureSettingsGranted, isWifiConnected ->
115- if (! isWifiConnected) {
116- AutoStartEligibility .NotEligible .WiFiDisconnected
117- } else if (! isWriteSecureSettingsGranted) {
118- AutoStartEligibility .NotEligible .Other
119- } else if (! setupController.isAdbPaired()) {
120- AutoStartEligibility .NotEligible .Other
121- } else {
122- AutoStartEligibility .Eligible (AutoStartType .ADB )
122+ when {
123+ ! isWifiConnected -> {
124+ AutoStartEligibility .NotEligible .WiFiDisconnected
125+ }
126+
127+ ! isWriteSecureSettingsGranted -> {
128+ AutoStartEligibility .NotEligible .WriteSecureSettingsRevoked
129+ }
130+
131+ ! setupController.isAdbPaired() -> {
132+ AutoStartEligibility .NotEligible .AdbUnpaired
133+ }
134+
135+ else -> {
136+ AutoStartEligibility .Eligible (AutoStartType .ADB )
137+ }
123138 }
124139 }
125140 } else {
126- flowOf(AutoStartEligibility .NotEligible .Other )
141+ flowOf(AutoStartEligibility .NotEligible .ShizukuRootRequired )
127142 }
128143 }
129144 }
@@ -134,20 +149,7 @@ class SystemBridgeAutoStarter @Inject constructor(
134149 @OptIn(ExperimentalCoroutinesApi ::class )
135150 private val autoStartFlow: Flow <AutoStartEligibility > =
136151 connectionManager.connectionState.flatMapLatest { connectionState ->
137- // Do not autostart if it is connected or it was killed from the user
138- if (connectionState !is SystemBridgeConnectionState .Disconnected ||
139- connectionState.isStoppedByUser ||
140- ! getIsUsedBefore() ||
141- getIsStoppedByUser() ||
142- isSystemBridgeEmergencyKilled() ||
143- ! isAutoStartEnabled()
144- ) {
145- flowOf(AutoStartEligibility .NotEligible .Other )
146- } else if (isWithinAutoStartCooldown()) {
147- flowOf(AutoStartEligibility .NotEligible .AutoStartCooldown )
148- } else {
149- autoStartTypeFlow
150- }
152+ getAutoStartEligibility(connectionState)
151153 }
152154
153155 /* *
@@ -181,6 +183,33 @@ class SystemBridgeAutoStarter @Inject constructor(
181183 }
182184 }
183185
186+ private suspend fun getAutoStartEligibility (
187+ connectionState : SystemBridgeConnectionState ,
188+ ): Flow <AutoStartEligibility > {
189+ return when {
190+ connectionState !is SystemBridgeConnectionState .Disconnected ->
191+ flowOf(AutoStartEligibility .NotEligible .SystemBridgeConnected )
192+
193+ connectionState.isStoppedByUser ->
194+ flowOf(AutoStartEligibility .NotEligible .SystemBridgeStoppedByUser )
195+
196+ ! getIsUsedBefore() -> flowOf(AutoStartEligibility .NotEligible .NotUsedBefore )
197+
198+ getIsStoppedByUser() ->
199+ flowOf(AutoStartEligibility .NotEligible .SystemBridgeStoppedByUser )
200+
201+ isSystemBridgeEmergencyKilled() ->
202+ flowOf(AutoStartEligibility .NotEligible .EmergencyKilled )
203+
204+ ! isAutoStartEnabled() -> flowOf(AutoStartEligibility .NotEligible .AutoStartDisabled )
205+
206+ isWithinAutoStartCooldown() ->
207+ flowOf(AutoStartEligibility .NotEligible .AutoStartCooldown )
208+
209+ else -> autoStartTypeFlow
210+ }
211+ }
212+
184213 private suspend fun processAutoStartEligibility (eligibility : AutoStartEligibility ) {
185214 when (eligibility) {
186215 is AutoStartEligibility .Eligible -> autoStart(eligibility.type)
@@ -198,7 +227,9 @@ class SystemBridgeAutoStarter @Inject constructor(
198227
199228 AutoStartEligibility .NotEligible .WiFiDisconnected -> showWiFiDisconnectedNotification()
200229
201- AutoStartEligibility .NotEligible .Other -> {}
230+ else -> {
231+ Timber .w(" Not auto starting the system bridge: $eligibility " )
232+ }
202233 }
203234 }
204235
0 commit comments