diff options
author | daniel oeh <daniel.oeh@gmail.com> | 2012-07-23 20:41:43 +0200 |
---|---|---|
committer | daniel oeh <daniel.oeh@gmail.com> | 2012-07-23 20:41:43 +0200 |
commit | f910b057bca87d02958fb515798476f2cc9210c4 (patch) | |
tree | 46dd79ed1d708bf0f6dacee3f720f4e15dc15097 /src/de | |
parent | dcddf476bf34615d3238286e4ce1aacf08cad39d (diff) | |
download | AntennaPod-f910b057bca87d02958fb515798476f2cc9210c4.zip |
improved stability
Diffstat (limited to 'src/de')
9 files changed, 88 insertions, 91 deletions
diff --git a/src/de/danoeh/antennapod/asynctask/DownloadObserver.java b/src/de/danoeh/antennapod/asynctask/DownloadObserver.java index a626be34e..9da0ad90c 100644 --- a/src/de/danoeh/antennapod/asynctask/DownloadObserver.java +++ b/src/de/danoeh/antennapod/asynctask/DownloadObserver.java @@ -45,7 +45,8 @@ public class DownloadObserver extends AsyncTask<Void, Void, Void> { @Override protected void onCancelled() { - if (AppConfig.DEBUG) Log.d(TAG, "Task was cancelled."); + if (AppConfig.DEBUG) + Log.d(TAG, "Task was cancelled."); statusList.clear(); for (DownloadObserver.Callback callback : observer) { callback.onFinish(); @@ -54,7 +55,8 @@ public class DownloadObserver extends AsyncTask<Void, Void, Void> { @Override protected void onPostExecute(Void result) { - if (AppConfig.DEBUG) Log.d(TAG, "Background task has finished"); + if (AppConfig.DEBUG) + Log.d(TAG, "Background task has finished"); statusList.clear(); for (DownloadObserver.Callback callback : observer) { callback.onFinish(); @@ -62,7 +64,8 @@ public class DownloadObserver extends AsyncTask<Void, Void, Void> { } protected Void doInBackground(Void... params) { - if (AppConfig.DEBUG) Log.d(TAG, "Background Task started."); + if (AppConfig.DEBUG) + Log.d(TAG, "Background Task started."); while (downloadsLeft() && !isCancelled()) { refreshStatuslist(); publishProgress(); @@ -72,7 +75,8 @@ public class DownloadObserver extends AsyncTask<Void, Void, Void> { Log.w(TAG, "Thread was interrupted while waiting."); } } - if (AppConfig.DEBUG) Log.d(TAG, "Background Task finished."); + if (AppConfig.DEBUG) + Log.d(TAG, "Background Task finished."); return null; } @@ -144,13 +148,17 @@ public class DownloadObserver extends AsyncTask<Void, Void, Void> { /** Request a cursor with all running Feedfile downloads */ private Cursor getDownloadCursor() { // Collect download ids - int numDownloads = requester.getNumberOfDownloads(); - long ids[] = new long[numDownloads]; - for (int i = 0; i < numDownloads; i++) { - ids[i] = requester.getDownloadAt(i).getDownloadId(); + + ArrayList<Long> ids = new ArrayList<Long>(); + for (FeedFile download : requester.getDownloads()) { + ids.add(download.getDownloadId()); } DownloadManager.Query query = new DownloadManager.Query(); - query.setFilterById(ids); + long[] pIds = new long[ids.size()]; + for (int x = 0; x < ids.size(); x++) { + pIds[x] = ids.get(x); + } + query.setFilterById(pIds); DownloadManager manager = (DownloadManager) context .getSystemService(Context.DOWNLOAD_SERVICE); diff --git a/src/de/danoeh/antennapod/feed/FeedManager.java b/src/de/danoeh/antennapod/feed/FeedManager.java index 79e5f8abd..3eb838bd4 100644 --- a/src/de/danoeh/antennapod/feed/FeedManager.java +++ b/src/de/danoeh/antennapod/feed/FeedManager.java @@ -4,6 +4,7 @@ import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.Date; +import java.util.List; import de.danoeh.antennapod.AppConfig; import de.danoeh.antennapod.activity.MediaplayerActivity; @@ -36,27 +37,27 @@ public class FeedManager { private static FeedManager singleton; - private ArrayList<Feed> feeds; + private List<Feed> feeds; private ArrayList<FeedCategory> categories; /** Contains all items where 'read' is false */ - private ArrayList<FeedItem> unreadItems; + private List<FeedItem> unreadItems; /** Contains completed Download status entries */ private ArrayList<DownloadStatus> downloadLog; /** Contains the queue of items to be played. */ - private ArrayList<FeedItem> queue; + private List<FeedItem> queue; private DownloadRequester requester; private FeedManager() { - feeds = new ArrayList<Feed>(); + feeds = Collections.synchronizedList(new ArrayList<Feed>()); categories = new ArrayList<FeedCategory>(); - unreadItems = new ArrayList<FeedItem>(); + unreadItems = Collections.synchronizedList(new ArrayList<FeedItem>()); requester = DownloadRequester.getInstance(); downloadLog = new ArrayList<DownloadStatus>(); - queue = new ArrayList<FeedItem>(); + queue = Collections.synchronizedList(new ArrayList<FeedItem>()); } public static FeedManager getInstance() { @@ -740,11 +741,11 @@ public class FeedManager { cursor.close(); } - public ArrayList<Feed> getFeeds() { + public List<Feed> getFeeds() { return feeds; } - public ArrayList<FeedItem> getUnreadItems() { + public List<FeedItem> getUnreadItems() { return unreadItems; } @@ -752,7 +753,7 @@ public class FeedManager { return downloadLog; } - public ArrayList<FeedItem> getQueue() { + public List<FeedItem> getQueue() { return queue; } diff --git a/src/de/danoeh/antennapod/fragment/FeedlistFragment.java b/src/de/danoeh/antennapod/fragment/FeedlistFragment.java index 0b4e561f7..ae16fad4c 100644 --- a/src/de/danoeh/antennapod/fragment/FeedlistFragment.java +++ b/src/de/danoeh/antennapod/fragment/FeedlistFragment.java @@ -11,6 +11,7 @@ import de.danoeh.antennapod.AppConfig; import de.danoeh.antennapod.R; import android.os.AsyncTask; import android.os.Bundle; +import android.annotation.SuppressLint; import android.app.Activity; import android.view.View; import android.view.ViewGroup; @@ -54,12 +55,11 @@ public class FeedlistFragment extends SherlockListFragment implements pActivity = null; } - - @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - if (AppConfig.DEBUG) Log.d(TAG, "Creating"); + if (AppConfig.DEBUG) + Log.d(TAG, "Creating"); manager = FeedManager.getInstance(); fla = new FeedlistAdapter(pActivity, 0, manager.getFeeds()); setListAdapter(fla); @@ -82,7 +82,9 @@ public class FeedlistFragment extends SherlockListFragment implements public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { Feed selection = fla.getItem(position); - if (AppConfig.DEBUG) Log.d(TAG, "Selected Feed with title " + selection.getTitle()); + if (AppConfig.DEBUG) + Log.d(TAG, + "Selected Feed with title " + selection.getTitle()); if (selection != null) { if (mActionMode != null) { mActionMode.finish(); @@ -102,6 +104,7 @@ public class FeedlistFragment extends SherlockListFragment implements @Override public void onResume() { super.onResume(); + if (AppConfig.DEBUG) Log.d(TAG, "Resuming"); IntentFilter filter = new IntentFilter(); filter.addAction(DownloadService.ACTION_DOWNLOAD_HANDLED); filter.addAction(DownloadService.ACTION_FEED_SYNC_COMPLETED); @@ -124,8 +127,16 @@ public class FeedlistFragment extends SherlockListFragment implements private BroadcastReceiver contentUpdate = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { - if (AppConfig.DEBUG) Log.d(TAG, "Received contentUpdate Intent."); - fla.notifyDataSetChanged(); + if (AppConfig.DEBUG) + Log.d(TAG, "Received contentUpdate Intent."); + getActivity().runOnUiThread(new Runnable() { + + @Override + public void run() { + fla.notifyDataSetChanged(); + + } + }); } }; @@ -150,6 +161,7 @@ public class FeedlistFragment extends SherlockListFragment implements return FeedMenuHandler.onPrepareOptionsMenu(menu, selectedFeed); } + @SuppressLint("NewApi") @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { if (FeedMenuHandler.onOptionsItemClicked(getSherlockActivity(), item, @@ -166,7 +178,8 @@ public class FeedlistFragment extends SherlockListFragment implements } }; if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.GINGERBREAD_MR1) { - remover.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, selectedFeed); + remover.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, + selectedFeed); } else { remover.execute(selectedFeed); } @@ -183,5 +196,5 @@ public class FeedlistFragment extends SherlockListFragment implements selectedFeed = null; fla.setSelectedItemIndex(FeedlistAdapter.SELECTION_NONE); } - + } diff --git a/src/de/danoeh/antennapod/fragment/ItemlistFragment.java b/src/de/danoeh/antennapod/fragment/ItemlistFragment.java index 038737d41..9d440a121 100644 --- a/src/de/danoeh/antennapod/fragment/ItemlistFragment.java +++ b/src/de/danoeh/antennapod/fragment/ItemlistFragment.java @@ -1,6 +1,7 @@ package de.danoeh.antennapod.fragment; import java.util.ArrayList; +import java.util.List; import android.content.BroadcastReceiver; import android.content.Context; @@ -43,7 +44,7 @@ public class ItemlistFragment extends SherlockListFragment implements protected DownloadRequester requester; /** The feed which the activity displays */ - protected ArrayList<FeedItem> items; + protected List<FeedItem> items; /** * This is only not null if the fragment displays the items of a specific * feed @@ -56,7 +57,7 @@ public class ItemlistFragment extends SherlockListFragment implements /** Argument for FeeditemlistAdapter */ protected boolean showFeedtitle; - public ItemlistFragment(ArrayList<FeedItem> items, boolean showFeedtitle) { + public ItemlistFragment(List<FeedItem> items, boolean showFeedtitle) { super(); this.items = items; this.showFeedtitle = showFeedtitle; @@ -102,26 +103,37 @@ public class ItemlistFragment extends SherlockListFragment implements onButActionClicked, showFeedtitle); setListAdapter(fila); } - - @Override public void onPause() { super.onPause(); - getActivity().unregisterReceiver(contentUpdate); if (mActionMode != null) { mActionMode.finish(); } } @Override + public void onDestroy() { + super.onDestroy(); + getActivity().unregisterReceiver(contentUpdate); + + } + + @Override public void onResume() { super.onResume(); - fila.notifyDataSetChanged(); + getActivity().runOnUiThread(new Runnable() { + + @Override + public void run() { + fila.notifyDataSetChanged(); + } + }); updateProgressBarVisibility(); IntentFilter filter = new IntentFilter(); filter.addAction(DownloadService.ACTION_DOWNLOAD_HANDLED); - filter.addAction(DownloadRequester.ACTION_DOWNLOAD_QUEUED); + filter.addAction(FeedManager.ACTION_QUEUE_UPDATE); + filter.addAction(FeedManager.ACTION_UNREAD_ITEMS_UPDATE); getActivity().registerReceiver(contentUpdate, filter); } @@ -140,9 +152,17 @@ public class ItemlistFragment extends SherlockListFragment implements private BroadcastReceiver contentUpdate = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { - if (AppConfig.DEBUG) Log.d(TAG, "Received contentUpdate Intent."); - fila.notifyDataSetChanged(); - updateProgressBarVisibility(); + if (AppConfig.DEBUG) + Log.d(TAG, "Received contentUpdate Intent."); + getActivity().runOnUiThread(new Runnable() { + + @Override + public void run() { + fila.notifyDataSetChanged(); + updateProgressBarVisibility(); + } + + }); } }; diff --git a/src/de/danoeh/antennapod/fragment/QueueFragment.java b/src/de/danoeh/antennapod/fragment/QueueFragment.java index ff2a682ad..48d2f3836 100644 --- a/src/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/src/de/danoeh/antennapod/fragment/QueueFragment.java @@ -31,23 +31,6 @@ public class QueueFragment extends ItemlistFragment { } @Override - public void onPause() { - super.onPause(); - try { - getActivity().unregisterReceiver(queueUpdate); - } catch (IllegalArgumentException e) { - - } - } - - @Override - public void onResume() { - super.onResume(); - getActivity().registerReceiver(queueUpdate, - new IntentFilter(FeedManager.ACTION_QUEUE_UPDATE)); - } - - @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); @@ -73,15 +56,6 @@ public class QueueFragment extends ItemlistFragment { return handled; } - private BroadcastReceiver queueUpdate = new BroadcastReceiver() { - - @Override - public void onReceive(Context context, Intent intent) { - fila.notifyDataSetChanged(); - } - - }; - @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); diff --git a/src/de/danoeh/antennapod/fragment/UnreadItemlistFragment.java b/src/de/danoeh/antennapod/fragment/UnreadItemlistFragment.java index 8914f781a..c5638078f 100644 --- a/src/de/danoeh/antennapod/fragment/UnreadItemlistFragment.java +++ b/src/de/danoeh/antennapod/fragment/UnreadItemlistFragment.java @@ -21,37 +21,11 @@ public class UnreadItemlistFragment extends ItemlistFragment { } @Override - public void onPause() { - super.onPause(); - try { - getActivity().unregisterReceiver(unreadItemsUpdate); - } catch (IllegalArgumentException e) { - - } - } - - @Override - public void onResume() { - super.onResume(); - getActivity().registerReceiver(unreadItemsUpdate, - new IntentFilter(FeedManager.ACTION_UNREAD_ITEMS_UPDATE)); - } - - @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); } - private BroadcastReceiver unreadItemsUpdate = new BroadcastReceiver() { - - @Override - public void onReceive(Context context, Intent intent) { - fila.notifyDataSetChanged(); - } - - }; - @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); diff --git a/src/de/danoeh/antennapod/service/DownloadService.java b/src/de/danoeh/antennapod/service/DownloadService.java index afc5cc1ac..fbfa6d060 100644 --- a/src/de/danoeh/antennapod/service/DownloadService.java +++ b/src/de/danoeh/antennapod/service/DownloadService.java @@ -420,6 +420,12 @@ public class DownloadService extends Service { reason, successful)); sendDownloadHandledIntent(downloadId, statusId, hasImage, imageId); queryDownloads(); + try { + Thread.sleep(100); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } } /** Delete files that aren't needed anymore */ diff --git a/src/de/danoeh/antennapod/storage/PodDBAdapter.java b/src/de/danoeh/antennapod/storage/PodDBAdapter.java index 4c208f187..97f50d360 100644 --- a/src/de/danoeh/antennapod/storage/PodDBAdapter.java +++ b/src/de/danoeh/antennapod/storage/PodDBAdapter.java @@ -1,6 +1,7 @@ package de.danoeh.antennapod.storage; import java.util.ArrayList; +import java.util.List; import de.danoeh.antennapod.AppConfig; import de.danoeh.antennapod.asynctask.DownloadStatus; @@ -397,7 +398,7 @@ public class PodDBAdapter { return status.getId(); } - public void setQueue(ArrayList<FeedItem> queue) { + public void setQueue(List<FeedItem> queue) { ContentValues values = new ContentValues(); db.delete(TABLE_NAME_QUEUE, null, null); for (int i = 0; i < queue.size(); i++) { diff --git a/src/de/danoeh/antennapod/util/URLChecker.java b/src/de/danoeh/antennapod/util/URLChecker.java index 94a9c276e..bb34feb99 100644 --- a/src/de/danoeh/antennapod/util/URLChecker.java +++ b/src/de/danoeh/antennapod/util/URLChecker.java @@ -21,7 +21,7 @@ public final class URLChecker { * @param url The url which is going to be prepared * @return The prepared url * */ - public static String prepareURL(final String url) { + public static String prepareURL(String url) { StringBuilder builder = new StringBuilder(); if (!url.startsWith("http")) { @@ -29,7 +29,7 @@ public final class URLChecker { if (AppConfig.DEBUG) Log.d(TAG, "Missing http; appending"); } else if (url.startsWith("https")) { if (AppConfig.DEBUG) Log.d(TAG, "Replacing https with http"); - url.replaceFirst("https", "http"); + url = url.replaceFirst("https", "http"); } builder.append(url); |