Skip to content

Commit 56b4c59

Browse files
committed
Fix Shizuku mode selection in Settings - request permission properly
1 parent 0b3b327 commit 56b4c59

File tree

1 file changed

+27
-5
lines changed

1 file changed

+27
-5
lines changed

app/src/main/java/com/appcontrolx/ui/SettingsFragment.kt

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -131,12 +131,8 @@ class SettingsFragment : Fragment() {
131131
checkAndSetRootMode(permissionBridge)
132132
}
133133
Constants.MODE_SHIZUKU -> {
134-
if (!permissionBridge.isShizukuReady()) {
135-
Toast.makeText(context, R.string.error_shizuku_not_available, Toast.LENGTH_SHORT).show()
136-
return@setSingleChoiceItems
137-
}
138-
applyModeAndRestart(selectedMode)
139134
dialog.dismiss()
135+
checkAndSetShizukuMode(permissionBridge)
140136
}
141137
else -> {
142138
applyModeAndRestart(selectedMode)
@@ -148,6 +144,32 @@ class SettingsFragment : Fragment() {
148144
.show()
149145
}
150146

147+
private fun checkAndSetShizukuMode(permissionBridge: PermissionBridge) {
148+
if (!permissionBridge.isShizukuAvailable()) {
149+
Toast.makeText(context, R.string.error_shizuku_not_available, Toast.LENGTH_LONG).show()
150+
return
151+
}
152+
153+
if (permissionBridge.isShizukuPermissionGranted()) {
154+
applyModeAndRestart(Constants.MODE_SHIZUKU)
155+
return
156+
}
157+
158+
// Request permission
159+
val listener = object : rikka.shizuku.Shizuku.OnRequestPermissionResultListener {
160+
override fun onRequestPermissionResult(requestCode: Int, grantResult: Int) {
161+
rikka.shizuku.Shizuku.removeRequestPermissionResultListener(this)
162+
if (grantResult == android.content.pm.PackageManager.PERMISSION_GRANTED) {
163+
applyModeAndRestart(Constants.MODE_SHIZUKU)
164+
} else {
165+
Toast.makeText(context, R.string.error_shizuku_not_available, Toast.LENGTH_SHORT).show()
166+
}
167+
}
168+
}
169+
rikka.shizuku.Shizuku.addRequestPermissionResultListener(listener)
170+
rikka.shizuku.Shizuku.requestPermission(0)
171+
}
172+
151173
private fun checkAndSetRootMode(permissionBridge: PermissionBridge) {
152174
// Show checking dialog
153175
val progressDialog = MaterialAlertDialogBuilder(requireContext())

0 commit comments

Comments
 (0)