summaryrefslogtreecommitdiff
path: root/org.fox.ttcomics
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2016-03-22 17:01:05 +0300
committerAndrew Dolgov <[email protected]>2016-03-22 17:01:05 +0300
commite24a094d43ce29d1da69c059c5ad8da2db6463e2 (patch)
tree02c54fc784d10f359bcb7356ffef092ca3b705cd /org.fox.ttcomics
parentabb629ce1bd3f499c8cd862f9cc0eb645ad95329 (diff)
WIP implementation of android M permission model
set target sdk to 23
Diffstat (limited to 'org.fox.ttcomics')
-rwxr-xr-xorg.fox.ttcomics/build.gradle2
-rwxr-xr-xorg.fox.ttcomics/src/main/AndroidManifest.xml5
-rwxr-xr-xorg.fox.ttcomics/src/main/java/org/fox/ttcomics2/ComicListFragment.java18
-rwxr-xr-xorg.fox.ttcomics/src/main/java/org/fox/ttcomics2/CommonActivity.java36
-rwxr-xr-xorg.fox.ttcomics/src/main/java/org/fox/ttcomics2/DatabaseHelper.java28
-rwxr-xr-xorg.fox.ttcomics/src/main/java/org/fox/ttcomics2/MainActivity.java71
-rwxr-xr-x[-rw-r--r--]org.fox.ttcomics/src/main/java/org/fox/ttcomics2/PreferencesActivity.java4
-rwxr-xr-x[-rw-r--r--]org.fox.ttcomics/src/main/java/org/fox/ttcomics2/ViewComicActivity.java2
-rwxr-xr-xorg.fox.ttcomics/src/main/java/org/fox/ttcomics2/utils/CacheCleanupService.java2
9 files changed, 94 insertions, 74 deletions
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 @@
<uses-sdk
android:minSdkVersion="19"
- android:targetSdkVersion="21" />
+ android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
@@ -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">
<activity
android:theme="@android:style/Theme.NoDisplay"
diff --git a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/ComicListFragment.java b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/ComicListFragment.java
index 19c50ef..869b58f 100755
--- a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/ComicListFragment.java
+++ b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/ComicListFragment.java
@@ -238,15 +238,21 @@ public class ComicListFragment extends Fragment implements OnItemClickListener {
});
}
-
- File thumbnailFile = new File(CommonActivity.getCacheFileName(m_activity, firstChild != null ? firstChild : filePath + "/" + fileBaseName));
- if (holder.thumbnail != null && thumbnailFile != null && thumbnailFile.exists()) {
+ String cacheFilename = CommonActivity.getCacheFileName(m_activity, firstChild != null ? firstChild : filePath + "/" + fileBaseName);
+
+ if (cacheFilename != null) {
+ File thumbnailFile = new File(cacheFilename);
+
+ if (holder.thumbnail != null && thumbnailFile != null && thumbnailFile.exists()) {
- if (!thumbnailFile.getAbsolutePath().equals(holder.thumbnail.getTag())) {
+ if (!thumbnailFile.getAbsolutePath().equals(holder.thumbnail.getTag())) {
- m_imageLoader.displayImage("file://" + thumbnailFile.getAbsolutePath(), holder.thumbnail, m_imageOptions);
- holder.thumbnail.setTag(thumbnailFile.getAbsolutePath());
+ m_imageLoader.displayImage("file://" + thumbnailFile.getAbsolutePath(), holder.thumbnail, m_imageOptions);
+ holder.thumbnail.setTag(thumbnailFile.getAbsolutePath());
+ }
+ } else {
+ holder.thumbnail.setImageDrawable(null);
}
} else {
holder.thumbnail.setImageDrawable(null);
diff --git a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/CommonActivity.java b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/CommonActivity.java
index 8d94b4c..70d0bcc 100755
--- a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/CommonActivity.java
+++ b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/CommonActivity.java
@@ -35,6 +35,7 @@ public class CommonActivity extends AppCompatActivity {
protected final static int REQUEST_SHARE = 1;
protected static final int REQUEST_VIEWCOMIC = 2;
+ protected static final int REQUEST_PERMISSION_READ_EXTERNAL_STORAGE = 3;
public static final long MAX_CACHE_SIZE = 100 * 1024 * 1024; // bytes
@@ -165,8 +166,17 @@ public class CommonActivity extends AppCompatActivity {
return null;
}
+ public static File getCacheDir(Context ctx) {
+ if (ctx.getExternalCacheDir() != null) {
+ return ctx.getExternalCacheDir();
+ } else {
+ return ctx.getCacheDir();
+ }
+
+ }
+
public static String getCacheFileName(Context ctx, String fileName) {
- File file = new File(ctx.getExternalCacheDir().getAbsolutePath() + "/" + md5(fileName) + ".png");
+ File file = new File(getCacheDir(ctx).getAbsolutePath() + "/" + md5(fileName) + ".png");
return file.getAbsolutePath();
}
@@ -205,34 +215,10 @@ public class CommonActivity extends AppCompatActivity {
Intent intent = new Intent(CommonActivity.this, CacheCleanupService.class);
startService(intent);
}
-
- public static boolean isStorageAvailable() {
-
- String state = Environment.getExternalStorageState();
-
- return Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state);
- }
-
- public static boolean isStorageWritable() {
-
- String state = Environment.getExternalStorageState();
- return Environment.MEDIA_MOUNTED.equals(state);
- }
-
- /*public synchronized SQLiteDatabase getReadableDb() {
- return m_readableDb;
- }
-
- public synchronized SQLiteDatabase getWritableDb() {
- return m_writableDb;
- } */
@Override
public void onDestroy() {
super.onDestroy();
-
-// m_readableDb.close();
-// m_writableDb.close();
}
public void selectPreviousComic() {
diff --git a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/DatabaseHelper.java b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/DatabaseHelper.java
index 5316be4..c37c1d4 100755
--- a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/DatabaseHelper.java
+++ b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/DatabaseHelper.java
@@ -324,25 +324,23 @@ public class DatabaseHelper extends SQLiteOpenHelper {
try {
File thumbnailFile = new File(CommonActivity.getCacheFileName(m_context, filePath));
- if (CommonActivity.isStorageWritable()) {
- if (!thumbnailFile.exists()) {
- InputStream is = cba.getItem(0);
+ if (!thumbnailFile.exists()) {
+ InputStream is = cba.getItem(0);
- if (is != null) {
- FileOutputStream fos = new FileOutputStream(thumbnailFile);
+ if (is != null) {
+ FileOutputStream fos = new FileOutputStream(thumbnailFile);
- byte[] buffer = new byte[1024];
- int len;
- while ((len = is.read(buffer)) != -1) {
- fos.write(buffer, 0, len);
- }
-
- fos.close();
- is.close();
+ byte[] buffer = new byte[1024];
+ int len;
+ while ((len = is.read(buffer)) != -1) {
+ fos.write(buffer, 0, len);
}
- } else if (thumbnailFile.exists()) {
- thumbnailFile.setLastModified(new Date().getTime());
+
+ fos.close();
+ is.close();
}
+ } else if (thumbnailFile.exists()) {
+ thumbnailFile.setLastModified(new Date().getTime());
}
} catch (IOException e) {
diff --git a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/MainActivity.java b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/MainActivity.java
index 6819500..409e06d 100755
--- a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/MainActivity.java
+++ b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/MainActivity.java
@@ -1,6 +1,7 @@
package org.fox.ttcomics2;
+import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
@@ -11,8 +12,11 @@ import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
+import android.content.pm.PackageManager;
import android.os.Bundle;
+import android.support.v4.app.ActivityCompat;
import android.support.v4.app.FragmentTransaction;
+import android.support.v4.content.ContextCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.Toolbar;
import android.util.Log;
@@ -123,34 +127,59 @@ public class MainActivity extends CommonActivity implements MaterialTabListener,
if (m_selectedTab != -1)
tabHost.setSelectedNavigationItem(m_selectedTab);
- ActionBar actionBar = getSupportActionBar();
- //actionBar.setDisplayHomeAsUpEnabled(m_baseDirectory.length() > 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
index 9aee379..376e639 100644..100755
--- 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
index 9f443d0..159956d 100644..100755
--- 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 {