Browse Source

Prevent multiple message dialog when user rotate devices on granting

Lou Yihua 7 years ago
parent
commit
02ed713703
1 changed files with 12 additions and 5 deletions
  1. 12 5
      android/app/src/main/java/io/github/sdlpal/MainActivity.java

+ 12 - 5
android/app/src/main/java/io/github/sdlpal/MainActivity.java

@@ -12,6 +12,7 @@ import android.support.v7.app.AlertDialog;
 import android.support.v7.app.AppCompatActivity;
 import android.provider.Settings;
 import android.net.Uri;
+import android.util.Log;
 
 import java.io.*;
 
@@ -22,7 +23,10 @@ public class MainActivity extends AppCompatActivity {
 
     public static boolean crashed = false;
 
-    private final static int REQUEST_FILESYSTEM_ACCESS_CODE = 101;
+    private final static int REQUEST_STORAGE_PERMISSION = 1;
+    private final static int REQUEST_COUNT_SHIFT = 9;
+    private final static int REQUEST_CODE_MASK = 0x1ff;
+    private static int lastRequestCode = -1;
     private final AppCompatActivity mActivity = this;
 
     interface RequestForPermissions {
@@ -30,7 +34,7 @@ public class MainActivity extends AppCompatActivity {
     }
 
     private void requestForPermissions() {
-        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_FILESYSTEM_ACCESS_CODE);
+        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_STORAGE_PERMISSION | (++lastRequestCode << REQUEST_COUNT_SHIFT));
     }
 
     private void alertUser(int id, final RequestForPermissions req) {
@@ -55,11 +59,14 @@ public class MainActivity extends AppCompatActivity {
     @Override
     public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
         super.onRequestPermissionsResult(requestCode, permissions, grantResults);
-        switch (requestCode) {
-            case REQUEST_FILESYSTEM_ACCESS_CODE:
+        switch (requestCode & REQUEST_CODE_MASK) {
+            case REQUEST_STORAGE_PERMISSION:
                 if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                     StartGame();
-                    return;
+                    break;
+                }
+                if ((requestCode >> REQUEST_COUNT_SHIFT) != lastRequestCode) {
+                    break;
                 }
                 if (ActivityCompat.shouldShowRequestPermissionRationale(mActivity, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
                     alertUser(R.string.toast_requestpermission, new RequestForPermissions() {