添加清理阅读冗余

This commit is contained in:
seven332 committed 2014-09-19 00:55:51 +08:00
1 parent e8aa39d66d
commit d519179ae2
4 files changed
+131 -10

No files matched your search

+3
View File
@@ -206,6 +206,9 @@
<string name="custom_codec_title">自定义解码</string>
<string name="custom_codec_summary">自定义解码可能会更使用更少内存,解码更快</string>
<string name="custom_codec_summary_not">自定义解码暂不支持 x86, mips</string>
<string name="clean_redundancy_title">清理阅读冗余</string>
<string name="no_redundancy">未发现冗余</string>
<string name="clean_redundancy">完成冗余清理,共清理 %d 项</string>
<string name="download_settings_title">下载</string>
<string name="download_path_title">下载路径</string>
+4
View File
@@ -48,4 +48,8 @@
android:title="@string/custom_codec_title"
android:summary="@string/custom_codec_summary" />
<Preference
android:key="clean_redundancy"
android:title="@string/clean_redundancy_title" />
</PreferenceScreen>
@@ -203,7 +203,7 @@ public class ImageSet implements ExDownloader.ListenerForImageSet {
Object res = null;
if (Utils.SUPPORT_IMAGE && Config.getCustomCodec()) {
res = Image.decodeFile(pathName, GL11.GL_LUMINANCE);
res = Image.decodeFile(pathName, GL11.GL_RGB);
} else {
if (Utils.getExtension(pathName, "jpg").equals("gif"))
res = Movie.decodeFile(pathName);
+123 -9
View File
@@ -19,6 +19,7 @@ package com.hippo.ehviewer.ui;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
@@ -30,6 +31,7 @@ import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.Preference;
@@ -51,13 +53,18 @@ import android.widget.TableLayout;
import android.widget.TextView;
import com.hippo.ehviewer.AppContext;
import com.hippo.ehviewer.AppHandler;
import com.hippo.ehviewer.R;
import com.hippo.ehviewer.SimpleSuggestionProvider;
import com.hippo.ehviewer.UpdateHelper;
import com.hippo.ehviewer.data.Data;
import com.hippo.ehviewer.data.DownloadInfo;
import com.hippo.ehviewer.ehclient.EhInfo;
import com.hippo.ehviewer.network.HttpHelper;
import com.hippo.ehviewer.preference.AutoListPreference;
import com.hippo.ehviewer.util.BgThread;
import com.hippo.ehviewer.util.Config;
import com.hippo.ehviewer.util.EhUtils;
import com.hippo.ehviewer.util.Favorite;
import com.hippo.ehviewer.util.Theme;
import com.hippo.ehviewer.util.Ui;
@@ -67,6 +74,7 @@ import com.hippo.ehviewer.widget.CategoryTable;
import com.hippo.ehviewer.widget.DialogBuilder;
import com.hippo.ehviewer.widget.FileExplorerView;
import com.hippo.ehviewer.widget.MaterialToast;
import com.hippo.ehviewer.widget.ProgressDialogBulider;
import com.hippo.ehviewer.widget.SuperDialogUtil;
public class SettingsActivity extends AbsPreferenceActivity {
@@ -455,12 +463,16 @@ public class SettingsActivity extends AbsPreferenceActivity {
}
public static class ReadFragment extends TranslucentPreferenceFragment
implements Preference.OnPreferenceChangeListener,
Preference.OnPreferenceClickListener {
implements Preference.OnPreferenceClickListener {
private static final String KEY_CUSTOM_CODEC = "custom_codec";
private static final String KEY_CLEAN_REDUNDANCY = "clean_redundancy";
private CheckBoxPreference mCustomCodec;
private Preference mCleanRedundancy;
private ProgressDialogBulider mBuilder;
private AlertDialog mDialog;
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -468,6 +480,9 @@ public class SettingsActivity extends AbsPreferenceActivity {
addPreferencesFromResource(R.xml.read_settings);
mCustomCodec = (CheckBoxPreference) findPreference(KEY_CUSTOM_CODEC);
mCleanRedundancy = findPreference(KEY_CLEAN_REDUNDANCY);
mCleanRedundancy.setOnPreferenceClickListener(this);
if (!Utils.SUPPORT_IMAGE) {
mCustomCodec.setEnabled(false);
mCustomCodec.setChecked(Config.getCustomCodec());
@@ -477,22 +492,121 @@ public class SettingsActivity extends AbsPreferenceActivity {
}
}
@Override
public boolean onPreferenceClick(Preference preference) {
// TODO Auto-generated method stub
private boolean isInDownloadList(List<DownloadInfo> diList, String filename) {
for (DownloadInfo di : diList)
if (filename.startsWith(String.valueOf(di.galleryInfo.gid)))
return true;
return false;
}
private class CleanResponder implements Runnable {
public static final int STATE_NONE = 0x0;
public static final int STATE_START = 0x1;
public static final int STATE_DOING = 0x2;
public static final int STATE_DONE = 0x3;
private final int mState;
private final int mMax;
private final int mProgress;
public CleanResponder(int state, int max, int progress) {
mState = state;
mMax = max;
mProgress = progress;
}
@Override
public void run() {
switch (mState) {
case STATE_NONE:
MaterialToast.showToast(R.string.no_redundancy);
break;
case STATE_START:
if (!mActivity.isFinishing()) {
mBuilder = new ProgressDialogBulider(mActivity);
mBuilder.setCancelable(false).setTitle(R.string.clean_redundancy_title);
mDialog = mBuilder.create();
mDialog.show();
}
break;
case STATE_DOING:
if (mBuilder != null) {
mBuilder.setMax(mMax);
mBuilder.setProgress(mProgress);
}
break;
case STATE_DONE:
if (mDialog != null) {
mDialog.dismiss();
MaterialToast.showToast(String.format(getString(R.string.clean_redundancy), mMax));
}
mBuilder = null;
mDialog = null;
break;
}
}
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
// TODO Auto-generated method stub
return false;
public boolean onPreferenceClick(Preference preference) {
final String key = preference.getKey();
if (KEY_CLEAN_REDUNDANCY.equals(key)) {
// Create a thread to do clean task
new BgThread() {
@Override
public void run() {
Data data = Data.getInstance();
List<DownloadInfo> diList = data.getAllDownloads();
File downloadDir = new File(Config.getDownloadPath());
String[] files = downloadDir.list();
Handler handler = AppHandler.getInstance();
List<File> targetDirList = new ArrayList<File>();
if (files == null) {
// Check files null
handler.post(new CleanResponder(CleanResponder.STATE_NONE, 0, 0));
return;
}
for (String filename : files) {
// If in download list, just continue
if (isInDownloadList(diList, filename))
continue;
File dir = new File(downloadDir, filename);
// If there is no tag file, just continue
if (!new File(dir, EhUtils.EH_DOWNLOAD_FILENAME).exists())
continue;
// Add to list
targetDirList.add(dir);
}
if (targetDirList.isEmpty()) {
handler.post(new CleanResponder(CleanResponder.STATE_NONE, 0, 0));
return;
} else {
handler.post(new CleanResponder(CleanResponder.STATE_START, 0, 0));
}
// Do delete
for (int i = 0; i < targetDirList.size(); i++) {
File dir = targetDirList.get(i);
Utils.deleteFile(dir);
handler.post(new CleanResponder(CleanResponder.STATE_DOING, targetDirList.size(), i + 1));
}
// Close windows
handler.post(new CleanResponder(CleanResponder.STATE_DONE, targetDirList.size(), targetDirList.size()));
}
}.start();
}
return true;
}
}
public static class DownloadFragment extends TranslucentPreferenceFragment
implements Preference.OnPreferenceChangeListener,
Preference.OnPreferenceClickListener{
Preference.OnPreferenceClickListener {
private static final String KEY_DOWNLOAD_PATH = "download_path";
private static final String KEY_MEDIA_SCAN = "media_scan";