From 24a2ec3fe8be6d649e30d73379b3d70eb3cc62bd Mon Sep 17 00:00:00 2001 From: seven332 Date: Sun, 23 Nov 2014 13:36:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=81=E8=AE=B8=E5=BA=94=E7=94=A8=E8=A2=AB?= =?UTF-8?q?=E5=BC=BA=E5=88=B6=E5=85=B3=E9=97=AD=E5=90=8E=E9=87=8D=E5=90=AF?= =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E6=9C=8D=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- res/values-zh-rCN/strings.xml | 3 ++ res/xml/advanced_settings.xml | 2 +- res/xml/download_settings.xml | 7 ++++ src/com/hippo/ehviewer/AppContext.java | 40 ++++++++++++------- src/com/hippo/ehviewer/data/Data.java | 39 +++++++++++++++++- .../hippo/ehviewer/ehclient/ExDownloader.java | 5 +-- .../ehclient/ExDownloaderManager.java | 12 +++--- .../ehviewer/service/DownloadService.java | 15 +++++-- .../service/DownloadServiceConnection.java | 9 ++--- .../hippo/ehviewer/ui/DownloadActivity.java | 20 +++++----- .../hippo/ehviewer/ui/FavouriteActivity.java | 9 ----- .../ehviewer/ui/GalleryDetailActivity.java | 13 ++---- .../ehviewer/ui/GalleryListActivity.java | 12 ++---- src/com/hippo/ehviewer/util/Config.java | 7 ++++ 14 files changed, 118 insertions(+), 75 deletions(-) diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index fccfaecaf..82eec31da 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -239,6 +239,9 @@ 请避免他人翻看你的图库应用 大多数图库应用将不会显示下载目录中的图片 下载线程数 + 保持下载服务 + 下载时,若应用被系统或用户强制关闭,下载服务会重新启动 + 下载时,若应用被系统或用户强制关闭,下载服务不会重新启动 高级 HTTP diff --git a/res/xml/advanced_settings.xml b/res/xml/advanced_settings.xml index 5019e072d..f19981e1a 100644 --- a/res/xml/advanced_settings.xml +++ b/res/xml/advanced_settings.xml @@ -68,7 +68,7 @@ auto:etpMax="100000" /> - + diff --git a/res/xml/download_settings.xml b/res/xml/download_settings.xml index fa33d5760..7bbe5149b 100644 --- a/res/xml/download_settings.xml +++ b/res/xml/download_settings.xml @@ -38,4 +38,11 @@ auto:etpMin="1" auto:etpMax="10" /> + + \ No newline at end of file diff --git a/src/com/hippo/ehviewer/AppContext.java b/src/com/hippo/ehviewer/AppContext.java index 25a2a29f4..53e18b3a3 100644 --- a/src/com/hippo/ehviewer/AppContext.java +++ b/src/com/hippo/ehviewer/AppContext.java @@ -23,6 +23,7 @@ import java.io.IOException; import java.lang.Thread.UncaughtExceptionHandler; import android.app.Application; +import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager.NameNotFoundException; @@ -32,6 +33,8 @@ import com.hippo.ehviewer.ehclient.EhClient; import com.hippo.ehviewer.ehclient.EhInfo; import com.hippo.ehviewer.ehclient.ExDownloaderManager; import com.hippo.ehviewer.network.HttpHelper; +import com.hippo.ehviewer.service.DownloadService; +import com.hippo.ehviewer.service.DownloadServiceConnection; import com.hippo.ehviewer.util.Config; import com.hippo.ehviewer.util.Crash; import com.hippo.ehviewer.util.EhUtils; @@ -45,26 +48,27 @@ import com.hippo.ehviewer.widget.SlidingDrawerLayout; public class AppContext extends Application implements UncaughtExceptionHandler { @SuppressWarnings("unused") - private static final String TAG = "AppContext"; + private static final String TAG = AppContext.class.getSimpleName(); public static final boolean DEBUG = true; private Thread.UncaughtExceptionHandler mDefaultHandler; - private static AppContext sInstance; - - public static AppContext getInstance() { - return sInstance; - } - - public AppContext() { - sInstance = this; - } + private DownloadServiceConnection mServiceConn; @Override public void onCreate() { super.onCreate(); + // Do catch error prepare + mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler(); + Thread.setDefaultUncaughtExceptionHandler(this); + + // Set download service connect + mServiceConn = new DownloadServiceConnection(); + Intent it = new Intent(this, DownloadService.class); + bindService(it, mServiceConn, BIND_AUTO_CREATE); + // Init everything Config.init(this); Log.init(this); @@ -73,15 +77,12 @@ public class AppContext extends Application implements UncaughtExceptionHandler EhClient.createInstance(this); Favorite.init(this); Data.createInstance(this); - ExDownloaderManager.createInstance(); + ExDownloaderManager.createInstance(this); MaterialToast.setContext(this); + // Set drawer margin SlidingDrawerLayout.setDefaultMinDrawerMargin(Ui.ACTION_BAR_HEIGHT); - // Do catch error prepare - mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler(); - Thread.setDefaultUncaughtExceptionHandler(this); - // Add .nomedia or delete it File nomedia = new File(Config.getDownloadPath(), ".nomedia"); if (Config.getMediaScan()) { @@ -143,6 +144,15 @@ public class AppContext extends Application implements UncaughtExceptionHandler } catch (NameNotFoundException e) {} } + @Override + protected void finalize() { + unbindService(mServiceConn); + } + + public DownloadServiceConnection getDownloadServiceConnection() { + return mServiceConn; + } + /** * {@inheritDoc} */ diff --git a/src/com/hippo/ehviewer/data/Data.java b/src/com/hippo/ehviewer/data/Data.java index 8cdd1c478..31ff6a552 100644 --- a/src/com/hippo/ehviewer/data/Data.java +++ b/src/com/hippo/ehviewer/data/Data.java @@ -21,12 +21,16 @@ import java.util.List; import android.content.ContentValues; import android.content.Context; +import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.SparseArray; import com.hippo.ehviewer.Analytics; +import com.hippo.ehviewer.AppContext; +import com.hippo.ehviewer.AppHandler; +import com.hippo.ehviewer.service.DownloadService; import com.hippo.ehviewer.util.Config; import com.hippo.ehviewer.util.Log; import com.hippo.ehviewer.util.MathUtils; @@ -268,6 +272,8 @@ public class Data { /****** download ******/ private synchronized void getDownloads() { + boolean startService = false; + boolean keepDownloadService = Config.getKeepDownloadService(); mDownloads = new ArrayList(); Cursor cursor = mDatabase.rawQuery("select * from " + TABLE_DOWNLOAD @@ -285,8 +291,14 @@ public class Data { int mode = cursor.getInt(1); int state = cursor.getInt(2); int legacy = cursor.getInt(3); - if (state == DownloadInfo.STATE_WAIT || state == DownloadInfo.STATE_DOWNLOAD) - state = DownloadInfo.STATE_NONE; + if (state == DownloadInfo.STATE_WAIT || state == DownloadInfo.STATE_DOWNLOAD) { + if (keepDownloadService) { + state = DownloadInfo.STATE_WAIT; + startService = true; + } else { + state = DownloadInfo.STATE_NONE; + } + } DownloadInfo downloadInfo = new DownloadInfo( galleryInfo, mode, state, legacy); @@ -296,8 +308,25 @@ public class Data { } } cursor.close(); + + if (startService) + AppHandler.getInstance().postDelayed(mRestartDownload, 100); } + private final Runnable mRestartDownload = new Runnable() { + @Override + public void run() { + DownloadService ds = ((AppContext) mContext.getApplicationContext()).getDownloadServiceConnection().getService(); + if (ds != null) { + Intent it = new Intent(mContext, DownloadService.class); + mContext.startService(it); + ds.notifyDownloadInfoChanged(); + } else { + AppHandler.getInstance().postDelayed(this, 100); + } + } + }; + /** * Return null if not found * @return @@ -327,6 +356,12 @@ public class Data { return re; } + /** + * If exits, just update + * + * @param downloadInfo + * @return + */ public synchronized boolean addDownload(DownloadInfo downloadInfo) { GalleryInfo galleryInfo = downloadInfo.galleryInfo; int gid = galleryInfo.gid; diff --git a/src/com/hippo/ehviewer/ehclient/ExDownloader.java b/src/com/hippo/ehviewer/ehclient/ExDownloader.java index c84a107e8..7195571aa 100644 --- a/src/com/hippo/ehviewer/ehclient/ExDownloader.java +++ b/src/com/hippo/ehviewer/ehclient/ExDownloader.java @@ -33,7 +33,6 @@ import java.util.concurrent.ConcurrentLinkedQueue; import android.content.Context; import android.os.Process; -import com.hippo.ehviewer.AppContext; import com.hippo.ehviewer.network.HttpHelper; import com.hippo.ehviewer.util.AutoExpandArray; import com.hippo.ehviewer.util.BgThread; @@ -122,8 +121,8 @@ public class ExDownloader implements Runnable { public void onDownloadOver(int gid, int legacy); } - ExDownloader(int gid, String token, String title, int mode) { - mContext = AppContext.getInstance(); + ExDownloader(Context context, int gid, String token, String title, int mode) { + mContext = context; mManager = ExDownloaderManager.getInstance(); mGid = gid; mToken = token; diff --git a/src/com/hippo/ehviewer/ehclient/ExDownloaderManager.java b/src/com/hippo/ehviewer/ehclient/ExDownloaderManager.java index c3a4efc88..d4c5dc290 100644 --- a/src/com/hippo/ehviewer/ehclient/ExDownloaderManager.java +++ b/src/com/hippo/ehviewer/ehclient/ExDownloaderManager.java @@ -19,8 +19,6 @@ package com.hippo.ehviewer.ehclient; import android.content.Context; import android.util.SparseArray; -import com.hippo.ehviewer.AppContext; - public class ExDownloaderManager { private static final String TAG = ExDownloaderManager.class.getSimpleName(); @@ -30,23 +28,23 @@ public class ExDownloaderManager { private static ExDownloaderManager sInstance; - public static void createInstance() { - sInstance = new ExDownloaderManager(); + public static void createInstance(Context context) { + sInstance = new ExDownloaderManager(context.getApplicationContext()); } public static ExDownloaderManager getInstance() { return sInstance; } - private ExDownloaderManager() { - mContext = AppContext.getInstance(); + private ExDownloaderManager(Context context) { + mContext = context; mExDownloadList = new SparseArray(); } public synchronized ExDownloader getExDownloader(int gid, String token, String title, int mode) { ExDownloader exDownloader = mExDownloadList.get(gid); if (exDownloader == null) { - exDownloader = new ExDownloader(gid, token, title, mode); + exDownloader = new ExDownloader(mContext, gid, token, title, mode); mExDownloadList.append(gid, exDownloader); } exDownloader.occupy(); diff --git a/src/com/hippo/ehviewer/service/DownloadService.java b/src/com/hippo/ehviewer/service/DownloadService.java index daf859b45..79c263291 100644 --- a/src/com/hippo/ehviewer/service/DownloadService.java +++ b/src/com/hippo/ehviewer/service/DownloadService.java @@ -78,8 +78,13 @@ public class DownloadService extends Service } private synchronized void handleIntent(Intent intent) { - if (intent == null) + if (intent == null) { + if (!Config.getKeepDownloadService()) { + mNotifyManager.cancel(DOWNLOADING_NOTIFY_ID); + stopSelf(); + } return; + } String action = intent.getAction(); if (ACTION_STOP.equals(action)) { @@ -96,10 +101,8 @@ public class DownloadService extends Service @Override public int onStartCommand(Intent intent, int flags, int startId) { - handleIntent(intent); - - return START_NOT_STICKY; + return START_STICKY; } @Override @@ -131,6 +134,8 @@ public class DownloadService extends Service mCurDownloadInfo.state = DownloadInfo.STATE_DOWNLOAD; mCurDownloadInfo.download = -1; mCurDownloadInfo.total = -1; + // To update download state + mData.addDownload(mCurDownloadInfo); GalleryInfo gi = mCurDownloadInfo.galleryInfo; mCurExDownloader = mEdManager.getExDownloader(gi.gid, @@ -150,6 +155,8 @@ public class DownloadService extends Service if ((di = mData.getDownload(gid)) != null) { if (di.state != DownloadInfo.STATE_DOWNLOAD) { di.state = DownloadInfo.STATE_WAIT; + // To update download state + mData.addDownload(di); notifyDownloadInfoChanged(); notifyUpdate(); } diff --git a/src/com/hippo/ehviewer/service/DownloadServiceConnection.java b/src/com/hippo/ehviewer/service/DownloadServiceConnection.java index 040b1affa..5d44f3983 100644 --- a/src/com/hippo/ehviewer/service/DownloadServiceConnection.java +++ b/src/com/hippo/ehviewer/service/DownloadServiceConnection.java @@ -20,21 +20,20 @@ import android.content.ComponentName; import android.content.ServiceConnection; import android.os.IBinder; -public class DownloadServiceConnection implements ServiceConnection{ - +public class DownloadServiceConnection implements ServiceConnection { + private DownloadService mService; - + @Override public void onServiceConnected(ComponentName name, IBinder service) { mService = ((DownloadService.ServiceBinder)service).getService(); - } @Override public void onServiceDisconnected(ComponentName name) { mService = null; } - + public DownloadService getService() { return mService; } diff --git a/src/com/hippo/ehviewer/ui/DownloadActivity.java b/src/com/hippo/ehviewer/ui/DownloadActivity.java index fa356dc4e..2f4ce93cc 100644 --- a/src/com/hippo/ehviewer/ui/DownloadActivity.java +++ b/src/com/hippo/ehviewer/ui/DownloadActivity.java @@ -37,6 +37,7 @@ import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.TextView; +import com.hippo.ehviewer.AppContext; import com.hippo.ehviewer.ImageLoader; import com.hippo.ehviewer.R; import com.hippo.ehviewer.app.MaterialAlertDialog; @@ -47,7 +48,6 @@ import com.hippo.ehviewer.data.GalleryInfo; import com.hippo.ehviewer.drawable.MaterialIndicatorDrawable; import com.hippo.ehviewer.drawable.MaterialIndicatorDrawable.Stroke; import com.hippo.ehviewer.service.DownloadService; -import com.hippo.ehviewer.service.DownloadServiceConnection; import com.hippo.ehviewer.util.Config; import com.hippo.ehviewer.util.EhUtils; import com.hippo.ehviewer.util.Theme; @@ -60,6 +60,7 @@ import com.hippo.ehviewer.windowsanimate.WindowsAnimate; public class DownloadActivity extends AbsActivity implements FitWindowView.OnFitSystemWindowsListener { + private AppContext mAppContext; private WindowsAnimate mWindowsAnimate; private int mThemeColor; private List mDownloads; @@ -68,7 +69,6 @@ public class DownloadActivity extends AbsActivity implements FitWindowView.OnFit private ExpandingListView mList; private ListAdapter mAdapter; - private final DownloadServiceConnection mServiceConn = new DownloadServiceConnection(); private final BroadcastReceiver mReceiver = new BroadcastReceiver(){ @Override public void onReceive(Context context, Intent intent) { @@ -89,13 +89,12 @@ public class DownloadActivity extends AbsActivity implements FitWindowView.OnFit super.onCreate(savedInstanceState); setContentView(R.layout.download); + mAppContext = (AppContext) getApplication(); + // Init windows animate mWindowsAnimate = new WindowsAnimate(); mWindowsAnimate.init(this); - // Service - Intent it = new Intent(this, DownloadService.class); - bindService(it, mServiceConn, BIND_AUTO_CREATE); // Receiver IntentFilter filter = new IntentFilter(); filter.addAction(DownloadService.ACTION_UPDATE); @@ -128,7 +127,6 @@ public class DownloadActivity extends AbsActivity implements FitWindowView.OnFit protected void onDestroy() { super.onDestroy(); unregisterReceiver(mReceiver); - unbindService(mServiceConn); mWindowsAnimate.free(); } @@ -150,13 +148,13 @@ public class DownloadActivity extends AbsActivity implements FitWindowView.OnFit case R.id.action_start: it = new Intent(DownloadActivity.this, DownloadService.class); startService(it); - mServiceConn.getService().startAll(); + mAppContext.getDownloadServiceConnection().getService().startAll(); return true; case R.id.action_stop: it = new Intent(DownloadActivity.this, DownloadService.class); startService(it); - mServiceConn.getService().stopAll(); + mAppContext.getDownloadServiceConnection().getService().stopAll(); return true; default: @@ -342,7 +340,7 @@ public class DownloadActivity extends AbsActivity implements FitWindowView.OnFit if (which == MaterialAlertDialog.POSITIVE) { Intent it = new Intent(DownloadActivity.this, DownloadService.class); startService(it); - mServiceConn.getService().delete(mDownloadInfo); + mAppContext.getDownloadServiceConnection().getService().delete(mDownloadInfo); // Delete dir if (cb.isChecked()) { GalleryInfo gi = mDownloadInfo.galleryInfo; @@ -372,7 +370,7 @@ public class DownloadActivity extends AbsActivity implements FitWindowView.OnFit Intent it = new Intent(DownloadActivity.this, DownloadService.class); startService(it); - mServiceConn.getService().notifyDownloadInfoChanged(); + mAppContext.getDownloadServiceConnection().getService().notifyDownloadInfoChanged(); mAdapter.notifyDataSetChanged(); } } @@ -391,7 +389,7 @@ public class DownloadActivity extends AbsActivity implements FitWindowView.OnFit public void onClick(View v) { Intent it = new Intent(DownloadActivity.this, DownloadService.class); startService(it); - mServiceConn.getService().stop(mDownloadInfo); + mAppContext.getDownloadServiceConnection().getService().stop(mDownloadInfo); mAdapter.notifyDataSetChanged(); } } diff --git a/src/com/hippo/ehviewer/ui/FavouriteActivity.java b/src/com/hippo/ehviewer/ui/FavouriteActivity.java index 0686070b6..b72c0ba9c 100644 --- a/src/com/hippo/ehviewer/ui/FavouriteActivity.java +++ b/src/com/hippo/ehviewer/ui/FavouriteActivity.java @@ -63,8 +63,6 @@ import com.hippo.ehviewer.data.GalleryInfo; import com.hippo.ehviewer.drawable.MaterialIndicatorDrawable; import com.hippo.ehviewer.drawable.MaterialIndicatorDrawable.Stroke; import com.hippo.ehviewer.ehclient.EhClient; -import com.hippo.ehviewer.service.DownloadService; -import com.hippo.ehviewer.service.DownloadServiceConnection; import com.hippo.ehviewer.util.Config; import com.hippo.ehviewer.util.Favorite; import com.hippo.ehviewer.util.Theme; @@ -120,8 +118,6 @@ public class FavouriteActivity extends AbsActivity private List mLastModifyGiList = null; private int mLastModifyPageNum = 0; - private final DownloadServiceConnection mServiceConn = new DownloadServiceConnection(); - @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); @@ -163,10 +159,6 @@ public class FavouriteActivity extends AbsActivity mActionBar = getActionBar(); mActionBar.setDisplayHomeAsUpEnabled(true); - // Download service - Intent it = new Intent(FavouriteActivity.this, DownloadService.class); - bindService(it, mServiceConn, BIND_AUTO_CREATE); - // Menu MaterialIndicatorDrawable materialIndicator = new MaterialIndicatorDrawable(this, Color.WHITE, Stroke.THIN); materialIndicator.setIconState(MaterialIndicatorDrawable.IconState.ARROW); @@ -337,7 +329,6 @@ public class FavouriteActivity extends AbsActivity @Override protected void onDestroy() { super.onDestroy(); - unbindService(mServiceConn); } private void showToastBar(final ActionClickedListener listener, int descriptionIconResourceId, diff --git a/src/com/hippo/ehviewer/ui/GalleryDetailActivity.java b/src/com/hippo/ehviewer/ui/GalleryDetailActivity.java index 1bc0d1b62..758b3348f 100644 --- a/src/com/hippo/ehviewer/ui/GalleryDetailActivity.java +++ b/src/com/hippo/ehviewer/ui/GalleryDetailActivity.java @@ -58,6 +58,7 @@ import android.widget.TextSwitcher; import android.widget.TextView; import android.widget.ViewSwitcher; +import com.hippo.ehviewer.AppContext; import com.hippo.ehviewer.ImageLoader; import com.hippo.ehviewer.R; import com.hippo.ehviewer.app.MaterialAlertDialog; @@ -79,7 +80,6 @@ import com.hippo.ehviewer.drawable.OvalDrawable; import com.hippo.ehviewer.ehclient.DetailUrlParser; import com.hippo.ehviewer.ehclient.EhClient; import com.hippo.ehviewer.service.DownloadService; -import com.hippo.ehviewer.service.DownloadServiceConnection; import com.hippo.ehviewer.util.Config; import com.hippo.ehviewer.util.Constants; import com.hippo.ehviewer.util.Favorite; @@ -114,12 +114,11 @@ public class GalleryDetailActivity extends AbsActivity public static final String KEY_G_INFO = "gallery_info"; + private AppContext mAppContext; private Resources mResources; private EhClient mClient; private WindowsAnimate mWindowsAnimate; private GalleryInfo mGalleryInfo; - private final DownloadServiceConnection mServiceConn = - new DownloadServiceConnection(); private int mRunningAnimateNum = 0; private boolean isCheckmark = false; @@ -271,7 +270,6 @@ public class GalleryDetailActivity extends AbsActivity protected void onDestroy() { super.onDestroy(); mWindowsAnimate.free(); - unbindService(mServiceConn); } @Override @@ -286,6 +284,7 @@ public class GalleryDetailActivity extends AbsActivity setContentView(R.layout.gallery_detail); setTitle(String.valueOf(mGalleryInfo.gid)); + mAppContext = (AppContext) getApplication(); mClient = EhClient.getInstance(); mWindowsAnimate = new WindowsAnimate(); mWindowsAnimate.init(this); @@ -421,10 +420,6 @@ public class GalleryDetailActivity extends AbsActivity mRefreshText.setDefaultRefresh("点击重试", this); doPreLayout(); - - // Download service - Intent it = new Intent(GalleryDetailActivity.this, DownloadService.class); - bindService(it, mServiceConn, BIND_AUTO_CREATE); } @Override @@ -809,7 +804,7 @@ public class GalleryDetailActivity extends AbsActivity if (v == mDownloadButton) { Intent it = new Intent(GalleryDetailActivity.this, DownloadService.class); startService(it); - mServiceConn.getService().add(mGalleryInfo); + mAppContext.getDownloadServiceConnection().getService().add(mGalleryInfo); MaterialToast.showToast(R.string.toast_add_download); } else if (v == mReadButton) { //mData.addRead(mGalleryInfo); diff --git a/src/com/hippo/ehviewer/ui/GalleryListActivity.java b/src/com/hippo/ehviewer/ui/GalleryListActivity.java index aa9804c70..0d57440de 100644 --- a/src/com/hippo/ehviewer/ui/GalleryListActivity.java +++ b/src/com/hippo/ehviewer/ui/GalleryListActivity.java @@ -83,7 +83,6 @@ import com.hippo.ehviewer.drawable.MaterialIndicatorDrawable.Stroke; import com.hippo.ehviewer.ehclient.EhClient; import com.hippo.ehviewer.network.HttpHelper; import com.hippo.ehviewer.service.DownloadService; -import com.hippo.ehviewer.service.DownloadServiceConnection; import com.hippo.ehviewer.tile.TileSalon; import com.hippo.ehviewer.util.Config; import com.hippo.ehviewer.util.DialogUtils; @@ -151,6 +150,7 @@ public class GalleryListActivity extends AbsActivity implements View.OnClickList public static final int LIST_MODE_DETAIL = 0x0; public static final int LIST_MODE_THUMB = 0x1; + private AppContext mAppContext; private EhClient mClient; private Resources mResources; private WindowsAnimate mWindowsAnimate; @@ -211,8 +211,6 @@ public class GalleryListActivity extends AbsActivity implements View.OnClickList private String mTitle; - private final DownloadServiceConnection mServiceConn = new DownloadServiceConnection(); - private int mListMode; private int mListDetailThumbWidth; @@ -566,7 +564,7 @@ public class GalleryListActivity extends AbsActivity implements View.OnClickList case 1: Intent it = new Intent(GalleryListActivity.this, DownloadService.class); startService(it); - mServiceConn.getService().add(gi); + mAppContext.getDownloadServiceConnection().getService().add(gi); MaterialToast.showToast(R.string.toast_add_download); break; } @@ -973,6 +971,7 @@ public class GalleryListActivity extends AbsActivity implements View.OnClickList super.onCreate(savedInstanceState); setContentView(R.layout.gallery_list); + mAppContext = (AppContext) getApplication(); mData = Data.getInstance(); mClient = EhClient.getInstance(); mResources = getResources(); @@ -999,10 +998,6 @@ public class GalleryListActivity extends AbsActivity implements View.OnClickList else mShowDrawer = true; - // Download service - Intent it = new Intent(GalleryListActivity.this, DownloadService.class); - bindService(it, mServiceConn, BIND_AUTO_CREATE); - // Init dialog loginDialog = createLoginDialog(); mSearchDialog = createSearchDialog(); @@ -1511,7 +1506,6 @@ public class GalleryListActivity extends AbsActivity implements View.OnClickList @Override protected void onDestroy() { super.onDestroy(); - unbindService(mServiceConn); mWindowsAnimate.free(); } diff --git a/src/com/hippo/ehviewer/util/Config.java b/src/com/hippo/ehviewer/util/Config.java index 14a378294..0ff46237a 100644 --- a/src/com/hippo/ehviewer/util/Config.java +++ b/src/com/hippo/ehviewer/util/Config.java @@ -349,6 +349,9 @@ public final class Config { private static final String KEY_DOWNLOAD_THREAD = "download_thread"; private static final int DEFAULT_DOWNLOAD_THREAD = 3; + private static final String KEY_KEEP_DOWNLOAD_SERVICE = "keep_download_service"; + private static final boolean DEFAULT_KEEP_DOWNLOAD_SERVICE = true; + public static String getDownloadPath() { return getString(KEY_DOWNLOAD_PATH, DEFAULT_DOWNLOAD_PATH); } @@ -365,6 +368,10 @@ public final class Config { return getIntFromStr(KEY_DOWNLOAD_THREAD, DEFAULT_DOWNLOAD_THREAD); } + public static boolean getKeepDownloadService() { + return getBoolean(KEY_KEEP_DOWNLOAD_SERVICE, DEFAULT_KEEP_DOWNLOAD_SERVICE); + } + /****** Advanced ******/