diff options
author | Andrew Dolgov <[email protected]> | 2015-12-27 20:02:40 +0300 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2015-12-27 20:02:40 +0300 |
commit | 94c3fa8cdb8fbcbdefb4bdeb4304c2b6181be19a (patch) | |
tree | 417344aec62d67945be7adb5b3cb745b9b79b134 /org.fox.ttcomics | |
parent | 100dbeeda8b8dab95e91c2728c9f16ba04cbbe3e (diff) |
cache expiration fixes
Diffstat (limited to 'org.fox.ttcomics')
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 |