From 68131f8821953751f24eeb368794c077bf233387 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Tue, 22 Mar 2016 21:30:02 +0300 Subject: implement permissions in a mostly functional way --- org.fox.ttcomics/src/main/AndroidManifest.xml | 4 +- .../java/org/fox/ttcomics2/CommonActivity.java | 55 ++++---- .../main/java/org/fox/ttcomics2/MainActivity.java | 157 ++++++++++++++------- org.fox.ttcomics/src/main/res/values/strings.xml | 2 + 4 files changed, 136 insertions(+), 82 deletions(-) (limited to 'org.fox.ttcomics') diff --git a/org.fox.ttcomics/src/main/AndroidManifest.xml b/org.fox.ttcomics/src/main/AndroidManifest.xml index b74a4d3..41943f0 100755 --- a/org.fox.ttcomics/src/main/AndroidManifest.xml +++ b/org.fox.ttcomics/src/main/AndroidManifest.xml @@ -1,7 +1,7 @@ + android:versionCode="71" + android:versionName="1.29" > 0) { ActivityCompat.requestPermissions(this, - new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, - REQUEST_PERMISSION_READ_EXTERNAL_STORAGE); + needPermissions, + REQUEST_PERMISSIONS_RESULT); } else { + initSyncClient(); setupDefaultDirectory(); } + + } + + protected String[] checkPermissions(String[] permissions) { + ArrayList tmp = new ArrayList(); + + for (String permission : permissions) { + if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) { + Log.d(TAG, "need permission: " + permission); + + tmp.add(permission); + } + } + + return tmp.toArray(new String[tmp.size()]); } + @Override + public void onRequestPermissionsResult(int requestCode, + String permissions[], int[] grantResults) { + + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + + switch (requestCode) { + case REQUEST_PERMISSIONS_RESULT: + if (grantResults.length > 0) { + boolean needRestart = false; + + for (int i = 0; i < grantResults.length; i++) { + String permission = permissions[i]; + + if (Manifest.permission.READ_EXTERNAL_STORAGE.equals(permission)) { + if (grantResults[i] == PackageManager.PERMISSION_GRANTED) { + needRestart = true; + } else { + toast(R.string.permission_denied_storage); + } + } + + if (Manifest.permission.GET_ACCOUNTS.equals(permission)) { + if (grantResults[i] == PackageManager.PERMISSION_GRANTED) { + needRestart = true; + } else { + toast(R.string.permission_denied_accounts); + + SharedPreferences.Editor editor = m_prefs.edit(); + editor.putBoolean("use_position_sync", false); + editor.apply(); + } + } + } + + if (needRestart) { + android.os.Process.killProcess(android.os.Process.myPid()); + } + } + + return; + } + } + + private void setupDefaultDirectory() { if (m_prefs.getString("comics_directory", null) == null) { AlertDialog.Builder builder = new AlertDialog.Builder(this); @@ -160,28 +231,6 @@ public class MainActivity extends CommonActivity implements MaterialTabListener, } } - @Override - public void onRequestPermissionsResult(int requestCode, - String permissions[], int[] grantResults) { - switch (requestCode) { - case REQUEST_PERMISSION_READ_EXTERNAL_STORAGE: { - // If request is cancelled, the result arrays are empty. - if (grantResults.length > 0 - && grantResults[0] == PackageManager.PERMISSION_GRANTED) { - - // TODO workaround for android 6.0 bug, maybe needs to be removed in the future - - android.os.Process.killProcess(android.os.Process.myPid()); - - } else { - toast("Storage permission denied, the app might not be able to access your comic archives."); - } - - return; - } - } - } - @Override public void onResume() { super.onResume(); diff --git a/org.fox.ttcomics/src/main/res/values/strings.xml b/org.fox.ttcomics/src/main/res/values/strings.xml index 34cc230..509bf54 100755 --- a/org.fox.ttcomics/src/main/res/values/strings.xml +++ b/org.fox.ttcomics/src/main/res/values/strings.xml @@ -72,4 +72,6 @@ Reset progress Open… Synchronize directory + Storage permission denied, app might not be able to access your comic archives. + Accounts permission denied, sync disabled \ No newline at end of file -- cgit v1.2.3