Skip to content

Commit b39d365

Browse files
committed
add android.permissions p4a module stuff to webview
1 parent 2b662c9 commit b39d365

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed

pythonforandroid/bootstraps/webview/build/src/main/java/org/kivy/android/PythonActivity.java

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,73 @@ public static void stop_service() {
455455
public static native void nativeSetenv(String name, String value);
456456
public static native int nativeInit(Object arguments);
457457

458+
459+
/**
460+
* Used by android.permissions p4a module to register a call back after
461+
* requesting runtime permissions
462+
**/
463+
public interface PermissionsCallback {
464+
void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults);
465+
}
466+
467+
private PermissionsCallback permissionCallback;
468+
private boolean havePermissionsCallback = false;
469+
470+
public void addPermissionsCallback(PermissionsCallback callback) {
471+
permissionCallback = callback;
472+
havePermissionsCallback = true;
473+
Log.v(TAG, "addPermissionsCallback(): Added callback for onRequestPermissionsResult");
474+
}
475+
476+
@Override
477+
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
478+
Log.v(TAG, "onRequestPermissionsResult()");
479+
if (havePermissionsCallback) {
480+
Log.v(TAG, "onRequestPermissionsResult passed to callback");
481+
permissionCallback.onRequestPermissionsResult(requestCode, permissions, grantResults);
482+
}
483+
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
484+
}
485+
486+
/**
487+
* Used by android.permissions p4a module to check a permission
488+
**/
489+
public boolean checkCurrentPermission(String permission) {
490+
if (android.os.Build.VERSION.SDK_INT < 23)
491+
return true;
492+
493+
try {
494+
java.lang.reflect.Method methodCheckPermission =
495+
Activity.class.getMethod("checkSelfPermission", String.class);
496+
Object resultObj = methodCheckPermission.invoke(this, permission);
497+
int result = Integer.parseInt(resultObj.toString());
498+
if (result == PackageManager.PERMISSION_GRANTED)
499+
return true;
500+
} catch (IllegalAccessException | NoSuchMethodException |
501+
InvocationTargetException e) {
502+
}
503+
return false;
504+
}
505+
506+
/**
507+
* Used by android.permissions p4a module to request runtime permissions
508+
**/
509+
public void requestPermissionsWithRequestCode(String[] permissions, int requestCode) {
510+
if (android.os.Build.VERSION.SDK_INT < 23)
511+
return;
512+
try {
513+
java.lang.reflect.Method methodRequestPermission =
514+
Activity.class.getMethod("requestPermissions",
515+
String[].class, int.class);
516+
methodRequestPermission.invoke(this, permissions, requestCode);
517+
} catch (IllegalAccessException | NoSuchMethodException |
518+
InvocationTargetException e) {
519+
}
520+
}
521+
522+
public void requestPermissions(String[] permissions) {
523+
requestPermissionsWithRequestCode(permissions, 1);
524+
}
458525
}
459526

460527

0 commit comments

Comments
 (0)