From e01b7ca466919bbf19a5e68178b4af81cce726ba Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Mon, 26 Jan 2015 17:12:15 +0100 Subject: Execute sortQueue method on ExecutorService --- .../danoeh/antennapod/core/storage/DBWriter.java | 93 ++++++++++++---------- .../danoeh/antennapod/core/util/QueueSorter.java | 2 +- 2 files changed, 53 insertions(+), 42 deletions(-) (limited to 'core/src/main/java/de/danoeh') diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java index 07c3c78e6..87bbdf455 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java @@ -7,18 +7,7 @@ import android.content.SharedPreferences; import android.database.Cursor; import android.preference.PreferenceManager; import android.util.Log; -import de.danoeh.antennapod.core.BuildConfig; -import de.danoeh.antennapod.core.ClientConfig; -import de.danoeh.antennapod.core.asynctask.FlattrClickWorker; -import de.danoeh.antennapod.core.feed.*; -import de.danoeh.antennapod.core.preferences.GpodnetPreferences; -import de.danoeh.antennapod.core.preferences.PlaybackPreferences; -import de.danoeh.antennapod.core.service.download.DownloadStatus; -import de.danoeh.antennapod.core.service.playback.PlaybackService; -import de.danoeh.antennapod.core.util.QueueAccess; -import de.danoeh.antennapod.core.util.flattr.FlattrStatus; -import de.danoeh.antennapod.core.util.flattr.FlattrThing; -import de.danoeh.antennapod.core.util.flattr.SimpleFlattrThing; + import org.shredzone.flattr4j.model.Flattr; import java.io.File; @@ -35,6 +24,24 @@ import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.ThreadFactory; +import de.danoeh.antennapod.core.BuildConfig; +import de.danoeh.antennapod.core.ClientConfig; +import de.danoeh.antennapod.core.asynctask.FlattrClickWorker; +import de.danoeh.antennapod.core.feed.EventDistributor; +import de.danoeh.antennapod.core.feed.Feed; +import de.danoeh.antennapod.core.feed.FeedImage; +import de.danoeh.antennapod.core.feed.FeedItem; +import de.danoeh.antennapod.core.feed.FeedMedia; +import de.danoeh.antennapod.core.feed.FeedPreferences; +import de.danoeh.antennapod.core.preferences.GpodnetPreferences; +import de.danoeh.antennapod.core.preferences.PlaybackPreferences; +import de.danoeh.antennapod.core.service.download.DownloadStatus; +import de.danoeh.antennapod.core.service.playback.PlaybackService; +import de.danoeh.antennapod.core.util.QueueAccess; +import de.danoeh.antennapod.core.util.flattr.FlattrStatus; +import de.danoeh.antennapod.core.util.flattr.FlattrThing; +import de.danoeh.antennapod.core.util.flattr.SimpleFlattrThing; + /** * Provides methods for writing data to AntennaPod's database. * In general, DBWriter-methods will be executed on an internal ExecutorService. @@ -589,34 +596,6 @@ public class DBWriter { adapter.close(); } - /** - * Sort the FeedItems in the queue by date. - *

- * This function must be run using the ExecutorService (dbExec). - * - * @param context A context that is used for opening a database connection. - * @param comparator FeedItem comparator - * @param broadcastUpdate true if this operation should trigger a QueueUpdateBroadcast. This option should be set to - * false if the caller wants to avoid unexpected updates of the GUI. - */ - public static void sort (final Context context, Comparator comparator, final boolean broadcastUpdate) { - final PodDBAdapter adapter = new PodDBAdapter(context); - adapter.open(); - final List queue = DBReader.getQueue(context, adapter); - - if (queue != null) { - Collections.sort(queue, comparator); - adapter.setQueue(queue); - if (broadcastUpdate) { - EventDistributor.getInstance() - .sendQueueUpdateBroadcast(); - } - } else { - Log.e(TAG, "sort: Could not load queue"); - } - adapter.close(); - } - /** * Sets the 'read'-attribute of a FeedItem to the specified value. * @@ -849,7 +828,8 @@ public class DBWriter { PodDBAdapter adapter = new PodDBAdapter(context); adapter.open(); for (String key : urls.keySet()) { - if (BuildConfig.DEBUG) Log.d(TAG, "Replacing URL " + key + " with url " + urls.get(key)); + if (BuildConfig.DEBUG) + Log.d(TAG, "Replacing URL " + key + " with url " + urls.get(key)); adapter.setFeedDownloadUrl(key, urls.get(key)); } @@ -1006,4 +986,35 @@ public class DBWriter { } }); } + + /** + * Sort the FeedItems in the queue with the given Comparator. + * + * @param context A context that is used for opening a database connection. + * @param comparator FeedItem comparator + * @param broadcastUpdate true if this operation should trigger a QueueUpdateBroadcast. This option should be set to + * false if the caller wants to avoid unexpected updates of the GUI. + */ + public static Future sortQueue(final Context context, final Comparator comparator, final boolean broadcastUpdate) { + return dbExec.submit(new Runnable() { + @Override + public void run() { + final PodDBAdapter adapter = new PodDBAdapter(context); + adapter.open(); + final List queue = DBReader.getQueue(context, adapter); + + if (queue != null) { + Collections.sort(queue, comparator); + adapter.setQueue(queue); + if (broadcastUpdate) { + EventDistributor.getInstance() + .sendQueueUpdateBroadcast(); + } + } else { + Log.e(TAG, "sortQueue: Could not load queue"); + } + adapter.close(); + } + }); + } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/QueueSorter.java b/core/src/main/java/de/danoeh/antennapod/core/util/QueueSorter.java index b6ea8c977..9a1496b75 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/QueueSorter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/QueueSorter.java @@ -83,7 +83,7 @@ public class QueueSorter { } if (comparator != null) { - DBWriter.sort(context, comparator, broadcastUpdate); + DBWriter.sortQueue(context, comparator, broadcastUpdate); } } } -- cgit v1.2.3