Skip to content

Commit fd4bbec

Browse files
authored
Merge pull request kivy#2340 from obfusk/fix-webview-jni
fix webview jni
2 parents 5da1684 + 39c701a commit fd4bbec

File tree

3 files changed

+74
-1
lines changed

3 files changed

+74
-1
lines changed

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

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.io.InputStream;
66
import java.io.File;
77
import java.io.IOException;
8+
import java.lang.reflect.InvocationTargetException;
89
import java.util.Collections;
910
import java.util.Iterator;
1011
import java.util.List;
@@ -455,6 +456,73 @@ public static void stop_service() {
455456
public static native void nativeSetenv(String name, String value);
456457
public static native int nativeInit(Object arguments);
457458

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

460528

pythonforandroid/recipes/android/__init__.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,11 @@ def prebuild_arch(self, arch):
7777
fh.write(
7878
'#define SDL_ANDROID_GetJNIEnv SDL_AndroidGetJNIEnv\n'
7979
)
80+
else:
81+
fh.write('JNIEnv *WebView_AndroidGetJNIEnv(void);\n')
82+
fh.write(
83+
'#define SDL_ANDROID_GetJNIEnv WebView_AndroidGetJNIEnv\n'
84+
)
8085

8186

8287
recipe = AndroidRecipe()

pythonforandroid/recipes/android/src/setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
lib_dict = {
66
'sdl2': ['SDL2', 'SDL2_image', 'SDL2_mixer', 'SDL2_ttf']
77
}
8-
sdl_libs = lib_dict.get(os.environ['BOOTSTRAP'], [])
8+
sdl_libs = lib_dict.get(os.environ['BOOTSTRAP'], ['main'])
99

1010
modules = [Extension('android._android',
1111
['android/_android.c', 'android/_android_jni.c'],

0 commit comments

Comments
 (0)