summaryrefslogtreecommitdiff
path: root/org.fox.ttcomics
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2015-12-27 20:02:40 +0300
committerAndrew Dolgov <[email protected]>2015-12-27 20:02:40 +0300
commit94c3fa8cdb8fbcbdefb4bdeb4304c2b6181be19a (patch)
tree417344aec62d67945be7adb5b3cb745b9b79b134 /org.fox.ttcomics
parent100dbeeda8b8dab95e91c2728c9f16ba04cbbe3e (diff)
cache expiration fixes
Diffstat (limited to 'org.fox.ttcomics')
-rwxr-xr-xorg.fox.ttcomics/build.gradle2
-rwxr-xr-xorg.fox.ttcomics/src/main/AndroidManifest.xml10
-rwxr-xr-xorg.fox.ttcomics/src/main/java/org/fox/ttcomics2/ComicListFragment.java26
-rwxr-xr-xorg.fox.ttcomics/src/main/java/org/fox/ttcomics2/CommonActivity.java21
-rwxr-xr-xorg.fox.ttcomics/src/main/java/org/fox/ttcomics2/DatabaseHelper.java63
-rwxr-xr-x[-rw-r--r--]org.fox.ttcomics/src/main/java/org/fox/ttcomics2/MainActivity.java6
-rwxr-xr-xorg.fox.ttcomics/src/main/java/org/fox/ttcomics2/utils/CacheCleanupService.java79
7 files changed, 136 insertions, 71 deletions
diff --git a/org.fox.ttcomics/build.gradle b/org.fox.ttcomics/build.gradle
index 7cad928..79e3050 100755
--- a/org.fox.ttcomics/build.gradle
+++ b/org.fox.ttcomics/build.gradle
@@ -6,7 +6,7 @@ android {
defaultConfig {
applicationId "org.fox.ttcomics2"
- minSdkVersion 16
+ minSdkVersion 19
targetSdkVersion 21
}
diff --git a/org.fox.ttcomics/src/main/AndroidManifest.xml b/org.fox.ttcomics/src/main/AndroidManifest.xml
index 4b32a0d..70f66f9 100755
--- a/org.fox.ttcomics/src/main/AndroidManifest.xml
+++ b/org.fox.ttcomics/src/main/AndroidManifest.xml
@@ -1,10 +1,10 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.fox.ttcomics2"
- android:versionCode="68"
- android:versionName="1.27" >
+ android:versionCode="69"
+ android:versionName="1.28" >
<uses-sdk
- android:minSdkVersion="16"
+ android:minSdkVersion="19"
android:targetSdkVersion="21" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
@@ -66,6 +66,10 @@
android:name=".sync.SyncFolderService"
android:exported="false"/>
+ <service
+ android:name=".utils.CacheCleanupService"
+ android:exported="false"/>
+
</application>
</manifest> \ No newline at end of file
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 63ede5a..19c50ef 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
@@ -71,7 +71,7 @@ public class ComicListFragment extends Fragment implements OnItemClickListener {
m_mode = mode;
}
- public void updateWithoutRescan() {
+ public void refresh() {
if (m_adapter != null) {
m_adapter.changeCursor(createCursor());
//m_animationAdapter.reset();
@@ -271,15 +271,10 @@ public class ComicListFragment extends Fragment implements OnItemClickListener {
m_swipeLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
- rescan(true);
+ rescan();
}
});
- m_swipeLayout.setColorScheme(android.R.color.holo_green_dark,
- android.R.color.holo_red_dark,
- android.R.color.holo_blue_dark,
- android.R.color.holo_orange_dark);
-
m_adapter = new ComicsListAdapter(getActivity(), R.layout.comics_grid_row, createCursor(),
new String[] { "filename" }, new int[] { R.id.file_name }, 0);
m_animationAdapter = new ScaleInAnimationAdapter(m_adapter);
@@ -292,7 +287,7 @@ public class ComicListFragment extends Fragment implements OnItemClickListener {
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- rescan(true);
+ rescan();
}
});
@@ -373,7 +368,7 @@ public class ComicListFragment extends Fragment implements OnItemClickListener {
m_activity.m_databaseHelper.setLastPosition(fileName,
m_activity.m_databaseHelper.getSize(fileName) - 1);
- updateWithoutRescan();
+ refresh();
return true;
default:
return false;
@@ -431,10 +426,10 @@ public class ComicListFragment extends Fragment implements OnItemClickListener {
m_prefs = PreferenceManager.getDefaultSharedPreferences(activity.getApplicationContext());
}
- protected void rescan(final boolean fullRescan) {
+ protected void rescan() {
if (m_swipeLayout != null) m_swipeLayout.setRefreshing(true);
- m_activity.m_databaseHelper.rescanDirectory(m_baseDirectory, fullRescan, new DatabaseHelper.DirectoryScanListener() {
+ m_activity.m_databaseHelper.rescanDirectory(m_baseDirectory, new DatabaseHelper.DirectoryScanListener() {
@Override
public void onProgressUpdate(int progress, int max) {
@@ -444,11 +439,11 @@ public class ComicListFragment extends Fragment implements OnItemClickListener {
@Override
public void onPostExecute(int result) {
try {
- m_activity.cleanupCache(false);
+ m_activity.cleanupCache();
if (m_swipeLayout != null) m_swipeLayout.setRefreshing(false);
- updateWithoutRescan();
+ refresh();
} catch (Exception e) {
e.printStackTrace();
@@ -468,9 +463,10 @@ public class ComicListFragment extends Fragment implements OnItemClickListener {
}
if (m_activity.m_databaseHelper.getCachedItemCount(m_baseDirectory) == 0) {
- rescan(false);
+ rescan();
} else {
- updateWithoutRescan();
+ refresh();
+ m_activity.cleanupCache();
}
String comicsDir = m_prefs.getString("comics_directory", "");
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 a224356..8d94b4c 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
@@ -21,11 +21,11 @@ import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import org.fox.ttcomics2.sync.SyncClient;
import org.fox.ttcomics2.utils.ByteArrayImageDownloader;
+import org.fox.ttcomics2.utils.CacheCleanupService;
import java.io.File;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
-import java.util.Date;
public class CommonActivity extends AppCompatActivity {
private final String TAG = this.getClass().getSimpleName();
@@ -36,6 +36,8 @@ public class CommonActivity extends AppCompatActivity {
protected final static int REQUEST_SHARE = 1;
protected static final int REQUEST_VIEWCOMIC = 2;
+ public static final long MAX_CACHE_SIZE = 100 * 1024 * 1024; // bytes
+
protected SharedPreferences m_prefs;
protected SyncClient m_syncClient = new SyncClient();
@@ -199,20 +201,9 @@ public class CommonActivity extends AppCompatActivity {
}
}
- public void cleanupCache(boolean deleteAll) {
- if (isStorageWritable()) {
- File cachePath = getExternalCacheDir();
-
- long now = new Date().getTime();
-
- if (cachePath.isDirectory()) {
- for (File file : cachePath.listFiles()) {
- if (deleteAll || now - file.lastModified() > 1000*60*60*24*7) {
- file.delete();
- }
- }
- }
- }
+ public void cleanupCache() {
+ Intent intent = new Intent(CommonActivity.this, CacheCleanupService.class);
+ startService(intent);
}
public static boolean isStorageAvailable() {
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 fbe02e9..5316be4 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
@@ -276,7 +276,7 @@ public class DatabaseHelper extends SQLiteOpenHelper {
c.close();
}
- public void rescanDirectory(String comicsDir, final boolean fullRescan, final DirectoryScanListener listener) {
+ public void rescanDirectory(String comicsDir, final DirectoryScanListener listener) {
AsyncTask<String, Integer, Integer> task = new AsyncTask<String, Integer, Integer>() {
@@ -312,51 +312,46 @@ public class DatabaseHelper extends SQLiteOpenHelper {
} else if (archive.getName().toLowerCase().matches(".*\\.(cbz|zip)")) {
try {
- int size = getSize(filePath);
+ ComicArchive cba = null;
- if (size == -1 || fullRescan) {
-
- ComicArchive cba = null;
-
- if (archive.getName().toLowerCase().matches(".*\\.(cbz|zip)")) {
- cba = new CbzComicArchive(filePath);
- }
-
- if (cba != null && cba.getCount() > 0) {
- // Get cover
+ if (archive.getName().toLowerCase().matches(".*\\.(cbz|zip)")) {
+ cba = new CbzComicArchive(filePath);
+ }
- try {
- File thumbnailFile = new File(CommonActivity.getCacheFileName(m_context, filePath));
+ if (cba != null && cba.getCount() > 0) {
+ // Get cover
- if (CommonActivity.isStorageWritable()) {
- if (!thumbnailFile.exists() || fullRescan) {
- InputStream is = cba.getItem(0);
+ try {
+ File thumbnailFile = new File(CommonActivity.getCacheFileName(m_context, filePath));
- if (is != null) {
- FileOutputStream fos = new FileOutputStream(thumbnailFile);
+ if (CommonActivity.isStorageWritable()) {
+ if (!thumbnailFile.exists()) {
+ InputStream is = cba.getItem(0);
- byte[] buffer = new byte[1024];
- int len;
- while ((len = is.read(buffer)) != -1) {
- fos.write(buffer, 0, len);
- }
+ if (is != null) {
+ FileOutputStream fos = new FileOutputStream(thumbnailFile);
- 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) {
- e.printStackTrace();
}
- size = cba.getCount();
-
- setSize(filePath, size);
+ } catch (IOException e) {
+ e.printStackTrace();
}
+
+ int size = cba.getCount();
+
+ setSize(filePath, size);
}
} catch (IOException e) {
e.printStackTrace();
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 b7933e8..6819500 100644..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
@@ -268,7 +268,7 @@ public class MainActivity extends CommonActivity implements MaterialTabListener,
ComicListFragment frag = (ComicListFragment) getSupportFragmentManager().findFragmentByTag(FRAG_COMICS_LIST);
if (frag != null && frag.isAdded()) {
- frag.rescan(true);
+ frag.rescan();
}
}
}
@@ -305,7 +305,7 @@ public class MainActivity extends CommonActivity implements MaterialTabListener,
if (frag != null && frag.isAdded()) {
frag.setMode(tab.getPosition());
- frag.updateWithoutRescan();
+ frag.refresh();
}
}
@@ -328,7 +328,7 @@ public class MainActivity extends CommonActivity implements MaterialTabListener,
ComicListFragment frag = (ComicListFragment) getSupportFragmentManager().findFragmentByTag(FRAG_COMICS_LIST);
if (frag != null && frag.isAdded()) {
- frag.updateWithoutRescan();
+ frag.refresh();
}
}
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
new file mode 100755
index 0000000..ec73e34
--- /dev/null
+++ b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/utils/CacheCleanupService.java
@@ -0,0 +1,79 @@
+package org.fox.ttcomics2.utils;
+
+import android.app.IntentService;
+import android.content.Intent;
+import android.os.Environment;
+import android.util.Log;
+
+import org.fox.ttcomics2.CommonActivity;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+
+public class CacheCleanupService extends IntentService {
+ private final String TAG = this.getClass().getSimpleName();
+
+ public CacheCleanupService() {
+ super("CacheCleanupService");
+ }
+ public CacheCleanupService(String name) {
+ super(name);
+ }
+
+ public static boolean isStorageWritable() {
+ String state = Environment.getExternalStorageState();
+ return Environment.MEDIA_MOUNTED.equals(state);
+ }
+ @Override
+ protected void onHandleIntent(Intent workIntent) {
+ Log.d(TAG, "starting...");
+
+ if (isStorageWritable()) {
+ File cachePath = getExternalCacheDir();
+
+ try {
+
+ if (cachePath.isDirectory()) {
+ long totalSize = 0;
+
+ ArrayList<File> fileList = new ArrayList<File>();
+
+ for (File file : cachePath.listFiles()) {
+ if (file.getName().toLowerCase().contains(".png")) {
+ totalSize += file.length();
+ fileList.add(file);
+ }
+ }
+
+ Log.d(TAG, "total cache size=" + totalSize);
+
+ if (totalSize >= CommonActivity.MAX_CACHE_SIZE) {
+ Log.d(TAG, "expiring oldest files...");
+
+ Collections.sort(fileList, new Comparator<File>() {
+ public int compare(File f1, File f2) {
+ return Long.compare(f1.lastModified(), f2.lastModified());
+ }
+ });
+
+ for (File file : fileList) {
+ if (totalSize >= CommonActivity.MAX_CACHE_SIZE) {
+ totalSize -= file.length();
+ file.delete();
+ } else {
+ break;
+ }
+ }
+ }
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ Log.d(TAG, "done.");
+ }
+} \ No newline at end of file