mirror of
https://github.com/karasevm/PrivateDNSAndroid.git
synced 2025-06-28 20:29:56 +00:00
Improve shizuku error handling
This commit is contained in:
parent
c5f2aed736
commit
fdd711eef4
1 changed files with 44 additions and 43 deletions
|
@ -108,15 +108,7 @@ class MainActivity : AppCompatActivity(), AddServerDialogFragment.NoticeDialogLi
|
||||||
Shizuku.requestPermission(1)
|
Shizuku.requestPermission(1)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// if shizuku permission is granted, but WRITE_SECURE_SETTINGS is not, grant it
|
grantPermissionWithShizuku()
|
||||||
try {
|
|
||||||
grantPermissionWithShizuku()
|
|
||||||
} catch (exception: Exception) {
|
|
||||||
Log.e("SHIZUKU", "onRequestPermissionResult: ", exception)
|
|
||||||
val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse("https://karasevm.github.io/PrivateDNSAndroid/"))
|
|
||||||
startActivity(browserIntent)
|
|
||||||
finish()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (checkSelfPermission(Manifest.permission.WRITE_SECURE_SETTINGS) != PackageManager.PERMISSION_GRANTED) {
|
if (checkSelfPermission(Manifest.permission.WRITE_SECURE_SETTINGS) != PackageManager.PERMISSION_GRANTED) {
|
||||||
|
@ -159,31 +151,48 @@ class MainActivity : AppCompatActivity(), AddServerDialogFragment.NoticeDialogLi
|
||||||
*/
|
*/
|
||||||
private fun grantPermissionWithShizuku() {
|
private fun grantPermissionWithShizuku() {
|
||||||
val packageName = "ru.karasevm.privatednstoggle"
|
val packageName = "ru.karasevm.privatednstoggle"
|
||||||
if (Build.VERSION.SDK_INT >= 31) {
|
runCatching {
|
||||||
HiddenApiBypass.addHiddenApiExemptions(
|
if (Build.VERSION.SDK_INT >= 31) {
|
||||||
"Landroid/permission"
|
HiddenApiBypass.addHiddenApiExemptions("Landroid/permission")
|
||||||
)
|
val binder =
|
||||||
val binder =
|
ShizukuBinderWrapper(SystemServiceHelper.getSystemService("permissionmgr"))
|
||||||
ShizukuBinderWrapper(SystemServiceHelper.getSystemService("permissionmgr"))
|
val pm = IPermissionManager.Stub.asInterface(binder)
|
||||||
val pm = IPermissionManager.Stub.asInterface(binder)
|
runCatching {
|
||||||
pm.grantRuntimePermission(
|
pm.grantRuntimePermission(
|
||||||
packageName,
|
packageName,
|
||||||
Manifest.permission.WRITE_SECURE_SETTINGS,
|
Manifest.permission.WRITE_SECURE_SETTINGS,
|
||||||
0
|
0
|
||||||
)
|
)
|
||||||
} else {
|
}.onFailure { _ ->
|
||||||
val binder = ShizukuBinderWrapper(SystemServiceHelper.getSystemService("package"))
|
if (Build.VERSION.SDK_INT >= 34) {
|
||||||
val pm = IPackageManager.Stub.asInterface(binder)
|
pm.grantRuntimePermission(
|
||||||
pm.grantRuntimePermission(
|
packageName,
|
||||||
packageName,
|
Manifest.permission.WRITE_SECURE_SETTINGS,
|
||||||
Manifest.permission.WRITE_SECURE_SETTINGS,
|
applicationContext.deviceId,
|
||||||
0
|
0
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
if (checkSelfPermission(Manifest.permission.WRITE_SECURE_SETTINGS) != PackageManager.PERMISSION_GRANTED) {
|
}
|
||||||
val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse("https://karasevm.github.io/PrivateDNSAndroid/"))
|
} else {
|
||||||
startActivity(browserIntent)
|
val binder = ShizukuBinderWrapper(SystemServiceHelper.getSystemService("package"))
|
||||||
finish()
|
val pm = IPackageManager.Stub.asInterface(binder)
|
||||||
|
pm.grantRuntimePermission(
|
||||||
|
packageName,
|
||||||
|
Manifest.permission.WRITE_SECURE_SETTINGS,
|
||||||
|
0
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}.onFailure { e ->
|
||||||
|
Log.e("SHIZUKU", "onRequestPermissionResult: ", e)
|
||||||
|
}.also {
|
||||||
|
if (checkSelfPermission(Manifest.permission.WRITE_SECURE_SETTINGS) != PackageManager.PERMISSION_GRANTED) {
|
||||||
|
val browserIntent = Intent(
|
||||||
|
Intent.ACTION_VIEW,
|
||||||
|
Uri.parse("https://karasevm.github.io/PrivateDNSAndroid/")
|
||||||
|
)
|
||||||
|
startActivity(browserIntent)
|
||||||
|
finish()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@SuppressLint("PrivateApi")
|
@SuppressLint("PrivateApi")
|
||||||
|
@ -191,15 +200,7 @@ class MainActivity : AppCompatActivity(), AddServerDialogFragment.NoticeDialogLi
|
||||||
val isGranted = grantResult == PackageManager.PERMISSION_GRANTED
|
val isGranted = grantResult == PackageManager.PERMISSION_GRANTED
|
||||||
|
|
||||||
if (isGranted) {
|
if (isGranted) {
|
||||||
try {
|
grantPermissionWithShizuku()
|
||||||
grantPermissionWithShizuku()
|
|
||||||
} catch (exception: Exception) {
|
|
||||||
Log.e("SHIZUKU", "onRequestPermissionResult: ", exception)
|
|
||||||
val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse("https://karasevm.github.io/PrivateDNSAndroid/"))
|
|
||||||
startActivity(browserIntent)
|
|
||||||
finish()
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if (checkSelfPermission(Manifest.permission.WRITE_SECURE_SETTINGS) != PackageManager.PERMISSION_GRANTED) {
|
} else if (checkSelfPermission(Manifest.permission.WRITE_SECURE_SETTINGS) != PackageManager.PERMISSION_GRANTED) {
|
||||||
val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse("https://karasevm.github.io/PrivateDNSAndroid/"))
|
val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse("https://karasevm.github.io/PrivateDNSAndroid/"))
|
||||||
startActivity(browserIntent)
|
startActivity(browserIntent)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue