From b4cbc0aa758ab52c3e41356362c26c0bede0e878 Mon Sep 17 00:00:00 2001 From: pelya Date: Sun, 14 Aug 2016 22:50:37 +0300 Subject: [PATCH] SDL: ask for SD card permission right after launch, removed SDL_ANDROID_RequestExternalStorageRuntimePermission() API --- project/java/MainActivity.java | 21 +++++++++++++++++++ project/java/Video.java | 12 ----------- .../jni/application/ballfield/ballfield.cpp | 3 ++- project/jni/sdl-1.2/include/SDL_android.h | 3 --- .../src/video/android/SDL_androidvideo.c | 7 ------- 5 files changed, 23 insertions(+), 23 deletions(-) diff --git a/project/java/MainActivity.java b/project/java/MainActivity.java index eac50be2f..e13610237 100644 --- a/project/java/MainActivity.java +++ b/project/java/MainActivity.java @@ -95,6 +95,8 @@ import android.app.PendingIntent; import java.util.TreeSet; import android.app.UiModeManager; import android.Manifest; +import android.content.pm.PermissionInfo; +import java.util.Arrays; public class MainActivity extends Activity @@ -238,6 +240,25 @@ public class MainActivity extends Activity startService(intent); } cloudSave = new CloudSave(this); + // Request SD card permission right during start, because game devs don't care about runtime permissions and stuff + try + { + if( android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M ) + { + PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_PERMISSIONS | PackageManager.GET_META_DATA); + Log.v("SDL", "SD card permission 1: " + getPackageName() + " perms " + info.requestedPermissions + " name " + info.packageName + " ver " + info.versionName); + if( info.requestedPermissions != null && Arrays.asList(info.requestedPermissions).contains(Manifest.permission.WRITE_EXTERNAL_STORAGE) ) + { + Log.v("SDL", "SD card permission 4: REQUEST"); + int permissionCheck = checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE); + if (permissionCheck != PackageManager.PERMISSION_GRANTED && !writeExternalStoragePermissionDialogAnswered) + { + requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0); + } + } + } + } + catch(Exception e) {} } public void setUpStatusLabel() diff --git a/project/java/Video.java b/project/java/Video.java index 9b54c4386..79d0dc450 100644 --- a/project/java/Video.java +++ b/project/java/Video.java @@ -949,18 +949,6 @@ class DemoRenderer extends GLSurfaceView_SDL.Renderer Settings.setConfigOptionFromSDL(option, value); } - public void requestExternalStorageRuntimePermissionFromSDL() - { - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) - { - int permissionCheck = context.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE); - if (permissionCheck != PackageManager.PERMISSION_GRANTED && !context.writeExternalStoragePermissionDialogAnswered) - { - context.requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0); - } - } - } - private int PowerOf2(int i) { int value = 1; diff --git a/project/jni/application/ballfield/ballfield.cpp b/project/jni/application/ballfield/ballfield.cpp index d74dc789b..a32122265 100644 --- a/project/jni/application/ballfield/ballfield.cpp +++ b/project/jni/application/ballfield/ballfield.cpp @@ -685,11 +685,12 @@ int main(int argc, char* argv[]) if( evt.key.state == SDL_RELEASED ) { if(evt.key.keysym.sym == SDLK_0) + { SDL_ANDROID_SetScreenKeyboardButtonShown(SDL_ANDROID_SCREENKEYBOARD_BUTTON_2, 1); + } if(evt.key.keysym.sym == SDLK_1) { SDL_ANDROID_SetScreenKeyboardButtonShown(SDL_ANDROID_SCREENKEYBOARD_BUTTON_2, 0); - SDL_ANDROID_RequestExternalStorageRuntimePermission(); } if(evt.key.keysym.sym == SDLK_2) { diff --git a/project/jni/sdl-1.2/include/SDL_android.h b/project/jni/sdl-1.2/include/SDL_android.h index 5c1f284a8..f7e268a46 100644 --- a/project/jni/sdl-1.2/include/SDL_android.h +++ b/project/jni/sdl-1.2/include/SDL_android.h @@ -134,9 +134,6 @@ enum { /* Set SDL Android-specifc option, such as video depth or mouse emulation mode. Most options require restarting the app. */ extern DECLSPEC void SDLCALL SDL_ANDROID_SetConfigOption(int option, int value); -/* Show runtime permission dialog for accessing SD card on Android 6.0 and above */ -extern DECLSPEC void SDLCALL SDL_ANDROID_RequestExternalStorageRuntimePermission(); - #ifdef __cplusplus } #endif diff --git a/project/jni/sdl-1.2/src/video/android/SDL_androidvideo.c b/project/jni/sdl-1.2/src/video/android/SDL_androidvideo.c index 876c3a220..d72741986 100644 --- a/project/jni/sdl-1.2/src/video/android/SDL_androidvideo.c +++ b/project/jni/sdl-1.2/src/video/android/SDL_androidvideo.c @@ -88,7 +88,6 @@ static jmethodID JavaRequestCloudLoad = NULL; static jmethodID JavaRequestOpenExternalApp = NULL; static jmethodID JavaRequestRestartMyself = NULL; static jmethodID JavaRequestSetConfigOption = NULL; -static jmethodID JavaRequestExternalStorageRuntimePermission = NULL; static int glContextLost = 0; static int showScreenKeyboardDeferred = 0; static const char * showScreenKeyboardOldText = ""; @@ -362,7 +361,6 @@ JAVA_EXPORT_NAME(DemoRenderer_nativeInitJavaCallbacks) ( JNIEnv* env, jobject t JavaRequestOpenExternalApp = (*JavaEnv)->GetMethodID(JavaEnv, JavaRendererClass, "openExternalApp", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"); JavaRequestRestartMyself = (*JavaEnv)->GetMethodID(JavaEnv, JavaRendererClass, "restartMyself", "(Ljava/lang/String;)V"); JavaRequestSetConfigOption = (*JavaEnv)->GetMethodID(JavaEnv, JavaRendererClass, "setConfigOptionFromSDL", "(II)V"); - JavaRequestExternalStorageRuntimePermission = (*JavaEnv)->GetMethodID(JavaEnv, JavaRendererClass, "requestExternalStorageRuntimePermissionFromSDL", "()V"); ANDROID_InitOSKeymap(); } @@ -609,11 +607,6 @@ void SDLCALL SDL_ANDROID_OpenExternalWebBrowser(const char *url) SDL_ANDROID_OpenExternalApp(NULL, NULL, url); } -void SDLCALL SDL_ANDROID_RequestExternalStorageRuntimePermission() -{ - (*JavaEnv)->CallVoidMethod( JavaEnv, JavaRenderer, JavaRequestExternalStorageRuntimePermission ); -} - // Dummy callback for SDL2 to satisfy linker extern void SDL_Android_Init(JNIEnv* env, jclass cls); void SDL_Android_Init(JNIEnv* env, jclass cls)