@@ -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