From e24a094d43ce29d1da69c059c5ad8da2db6463e2 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Tue, 22 Mar 2016 17:01:05 +0300 Subject: WIP implementation of android M permission model set target sdk to 23 --- org.fox.ttcomics/build.gradle | 2 +- org.fox.ttcomics/src/main/AndroidManifest.xml | 5 +- .../java/org/fox/ttcomics2/ComicListFragment.java | 18 ++++-- .../java/org/fox/ttcomics2/CommonActivity.java | 36 ++++------- .../java/org/fox/ttcomics2/DatabaseHelper.java | 28 ++++----- .../main/java/org/fox/ttcomics2/MainActivity.java | 71 +++++++++++++++------- .../org/fox/ttcomics2/PreferencesActivity.java | 4 +- .../java/org/fox/ttcomics2/ViewComicActivity.java | 2 +- .../fox/ttcomics2/utils/CacheCleanupService.java | 2 +- 9 files changed, 94 insertions(+), 74 deletions(-) mode change 100644 => 100755 org.fox.ttcomics/src/main/java/org/fox/ttcomics2/PreferencesActivity.java mode change 100644 => 100755 org.fox.ttcomics/src/main/java/org/fox/ttcomics2/ViewComicActivity.java (limited to 'org.fox.ttcomics') diff --git a/org.fox.ttcomics/build.gradle b/org.fox.ttcomics/build.gradle index 79e3050..d42c501 100755 --- a/org.fox.ttcomics/build.gradle +++ b/org.fox.ttcomics/build.gradle @@ -7,7 +7,7 @@ android { defaultConfig { applicationId "org.fox.ttcomics2" minSdkVersion 19 - targetSdkVersion 21 + targetSdkVersion 23 } lintOptions { diff --git a/org.fox.ttcomics/src/main/AndroidManifest.xml b/org.fox.ttcomics/src/main/AndroidManifest.xml index 7edaa87..093bc6e 100755 --- a/org.fox.ttcomics/src/main/AndroidManifest.xml +++ b/org.fox.ttcomics/src/main/AndroidManifest.xml @@ -5,7 +5,7 @@ + android:targetSdkVersion="23" /> @@ -16,7 +16,8 @@ android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:hardwareAccelerated="true" - android:largeHeap="true" + android:largeHeap="true" + android:fullBackupOnly="true" android:allowBackup="true"> 0); - - if (m_prefs.getString("comics_directory", null) == null) { + if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + + ActivityCompat.requestPermissions(this, + new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, + REQUEST_PERMISSION_READ_EXTERNAL_STORAGE); + + } else { + setupDefaultDirectory(); + } + } + + private void setupDefaultDirectory() { + if (m_prefs.getString("comics_directory", null) == null) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage(R.string.dialog_need_prefs_message) - .setCancelable(false) - .setPositiveButton(R.string.dialog_need_prefs_preferences, new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - Intent intent = new Intent(MainActivity.this, - PreferencesActivity.class); - startActivityForResult(intent, 0); - } - }) - .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - dialog.cancel(); - } - }); + .setCancelable(false) + .setPositiveButton(R.string.dialog_need_prefs_preferences, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + Intent intent = new Intent(MainActivity.this, + PreferencesActivity.class); + startActivityForResult(intent, 0); + } + }) + .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + dialog.cancel(); + } + }); AlertDialog alert = builder.create(); alert.show(); } + } + + @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 - //if (m_baseDirectory.length() > 0) { - //setTitle(new File(m_baseDirectory).getName()); - //} + android.os.Process.killProcess(android.os.Process.myPid()); - //((ViewGroup)findViewById(R.id.comics_list)).setLayoutTransition(new LayoutTransition()); + } else { + toast("Storage permission denied, the app might not be able to access your comic archives."); + } + + return; + } + } } @Override diff --git a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/PreferencesActivity.java b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/PreferencesActivity.java old mode 100644 new mode 100755 index 9aee379..376e639 --- a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/PreferencesActivity.java +++ b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/PreferencesActivity.java @@ -6,6 +6,7 @@ import android.os.Bundle; import android.os.Environment; import android.preference.PreferenceManager; import android.support.v7.widget.Toolbar; +import android.util.Log; import android.view.MenuItem; public class PreferencesActivity extends CommonActivity { @@ -62,9 +63,8 @@ public class PreferencesActivity extends CommonActivity { SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences(getApplicationContext()); - intent.putExtra(DirectoryPicker.START_DIR, prefs.getString("comics_directory", - Environment.getExternalStorageDirectory().getAbsolutePath())); + Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath())); startActivityForResult(intent, DirectoryPicker.PICK_DIRECTORY); } diff --git a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/ViewComicActivity.java b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/ViewComicActivity.java old mode 100644 new mode 100755 index 9f443d0..159956d --- a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/ViewComicActivity.java +++ b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/ViewComicActivity.java @@ -121,7 +121,7 @@ public class ViewComicActivity extends CommonActivity { if (pager != null) { try { - File tmpFile = File.createTempFile("trcshare" + sha1(m_fileName + " " + pager.getPosition()), ".jpg", getExternalCacheDir()); + File tmpFile = File.createTempFile("trcshare" + sha1(m_fileName + " " + pager.getPosition()), ".jpg", getCacheDir(this)); Log.d(TAG, "FILE=" + tmpFile); diff --git a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/utils/CacheCleanupService.java b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/utils/CacheCleanupService.java index ec73e34..3067f21 100755 --- a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/utils/CacheCleanupService.java +++ b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/utils/CacheCleanupService.java @@ -31,7 +31,7 @@ public class CacheCleanupService extends IntentService { Log.d(TAG, "starting..."); if (isStorageWritable()) { - File cachePath = getExternalCacheDir(); + File cachePath = CommonActivity.getCacheDir(this); try { -- cgit v1.2.3