SDL: ask for SD card permission right after launch, removed SDL_ANDROID_RequestExternalStorageRuntimePermission() API

This commit is contained in:
pelya
2016-08-14 22:50:37 +03:00
parent 3aa109c292
commit b4cbc0aa75
5 changed files with 23 additions and 23 deletions

View File

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

View File

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

View File

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

View File

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

View File

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