summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordaniel oeh <daniel.oeh@gmail.com>2014-01-12 02:28:47 +0100
committerdaniel oeh <daniel.oeh@gmail.com>2014-01-12 02:28:47 +0100
commitfd3cdfa1848b0ca33cb359822455df8a121c76f3 (patch)
treef4d3e026463e84e97df0e9279319b9ed301263c7 /src
parent0921e49d7cc376dfac27c063f8f0d4c8eaee195a (diff)
downloadAntennaPod-fd3cdfa1848b0ca33cb359822455df8a121c76f3.zip
avoid waiting on the GUI thread
Diffstat (limited to 'src')
-rw-r--r--src/de/danoeh/antennapod/asynctask/FlattrClickWorker.java2
-rw-r--r--src/de/danoeh/antennapod/storage/DBWriter.java103
-rw-r--r--src/de/danoeh/antennapod/util/menuhandler/FeedItemMenuHandler.java10
-rw-r--r--src/de/danoeh/antennapod/util/menuhandler/FeedMenuHandler.java10
4 files changed, 62 insertions, 63 deletions
diff --git a/src/de/danoeh/antennapod/asynctask/FlattrClickWorker.java b/src/de/danoeh/antennapod/asynctask/FlattrClickWorker.java
index fa0b0bb3d..b85d09650 100644
--- a/src/de/danoeh/antennapod/asynctask/FlattrClickWorker.java
+++ b/src/de/danoeh/antennapod/asynctask/FlattrClickWorker.java
@@ -233,7 +233,7 @@ public class FlattrClickWorker extends AsyncTask<Void, String, Void> {
flattr_failed.add(thing.getTitle());
}
Log.d(TAG, "flattrQueue processing - going to write thing back to db with flattr_status " + Long.toString(thing.getFlattrStatus().toLong()));
- DBWriter.setFlattredStatus(context, thing);
+ DBWriter.setFlattredStatus(context, thing, false);
}
}
diff --git a/src/de/danoeh/antennapod/storage/DBWriter.java b/src/de/danoeh/antennapod/storage/DBWriter.java
index cce36e614..f5ad9bcf7 100644
--- a/src/de/danoeh/antennapod/storage/DBWriter.java
+++ b/src/de/danoeh/antennapod/storage/DBWriter.java
@@ -1,36 +1,33 @@
package de.danoeh.antennapod.storage;
-import java.io.File;
-import java.util.Date;
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.Map;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.ThreadFactory;
-
-import org.shredzone.flattr4j.model.Flattr;
-
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
+import android.net.Uri;
import android.preference.PreferenceManager;
import android.util.Log;
-import android.net.Uri;
import de.danoeh.antennapod.AppConfig;
+import de.danoeh.antennapod.asynctask.FlattrClickWorker;
import de.danoeh.antennapod.feed.*;
import de.danoeh.antennapod.preferences.GpodnetPreferences;
import de.danoeh.antennapod.preferences.PlaybackPreferences;
-import de.danoeh.antennapod.service.GpodnetSyncService;
import de.danoeh.antennapod.service.PlaybackService;
import de.danoeh.antennapod.service.download.DownloadStatus;
import de.danoeh.antennapod.util.QueueAccess;
-import de.danoeh.antennapod.util.flattr.*;
+import de.danoeh.antennapod.util.flattr.FlattrStatus;
+import de.danoeh.antennapod.util.flattr.FlattrThing;
+import de.danoeh.antennapod.util.flattr.SimpleFlattrThing;
+import org.shredzone.flattr4j.model.Flattr;
+
+import java.io.File;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.*;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.ThreadFactory;
/**
* Provides methods for writing data to AntennaPod's database.
@@ -215,9 +212,12 @@ public class DBWriter {
/**
* Saves the FlattrStatus of a Feed object in the database.
+ *
+ * @param startFlattrClickWorker true if FlattrClickWorker should be started after the FlattrStatus has been saved
*/
- public static Future<?> setFeedFlattrStatus(final Context context,
- final Feed feed) {
+ private static Future<?> setFeedFlattrStatus(final Context context,
+ final Feed feed,
+ final boolean startFlattrClickWorker) {
return dbExec.submit(new Runnable() {
@Override
@@ -226,6 +226,9 @@ public class DBWriter {
adapter.open();
adapter.setFeedFlattrStatus(feed);
adapter.close();
+ if (startFlattrClickWorker) {
+ new FlattrClickWorker(context).executeAsync();
+ }
}
});
}
@@ -471,7 +474,7 @@ public class DBWriter {
});
}
-
+
/**
* Moves the specified item to the top of the queue.
*
@@ -497,7 +500,7 @@ public class DBWriter {
}
});
}
-
+
/**
* Moves the specified item to the bottom of the queue.
*
@@ -516,7 +519,7 @@ public class DBWriter {
for (long id : queueIdList) {
if (id == itemId) {
moveQueueItemHelper(context, currentLocation, queueIdList.size() - 1,
- broadcastUpdate);
+ broadcastUpdate);
return;
}
currentLocation++;
@@ -525,7 +528,7 @@ public class DBWriter {
}
});
}
-
+
/**
* Changes the position of a FeedItem in the queue.
*
@@ -549,7 +552,7 @@ public class DBWriter {
/**
* Changes the position of a FeedItem in the queue.
- *
+ * <p/>
* This function must be run using the ExecutorService (dbExec).
*
* @param context A context that is used for opening a database connection.
@@ -560,7 +563,7 @@ public class DBWriter {
* @throws IndexOutOfBoundsException if (to < 0 || to >= queue.size()) || (from < 0 || from >= queue.size())
*/
private static void moveQueueItemHelper(final Context context, final int from,
- final int to, final boolean broadcastUpdate) {
+ final int to, final boolean broadcastUpdate) {
final PodDBAdapter adapter = new PodDBAdapter(context);
adapter.open();
final List<FeedItem> queue = DBReader
@@ -783,9 +786,12 @@ public class DBWriter {
/**
* Saves the FlattrStatus of a FeedItem object in the database.
+ *
+ * @param startFlattrClickWorker true if FlattrClickWorker should be started after the FlattrStatus has been saved
*/
public static Future<?> setFeedItemFlattrStatus(final Context context,
- final FeedItem item) {
+ final FeedItem item,
+ final boolean startFlattrClickWorker) {
return dbExec.submit(new Runnable() {
@Override
@@ -794,6 +800,9 @@ public class DBWriter {
adapter.open();
adapter.setFeedItemFlattrStatus(item);
adapter.close();
+ if (startFlattrClickWorker) {
+ new FlattrClickWorker(context).executeAsync();
+ }
}
});
}
@@ -871,27 +880,33 @@ public class DBWriter {
if (uri != null) {
try {
normalizedURI = (new URI(uri)).normalize().toString();
- if (! normalizedURI.endsWith("/"))
+ if (!normalizedURI.endsWith("/"))
normalizedURI = normalizedURI + "/";
- }
- catch (URISyntaxException e) {
+ } catch (URISyntaxException e) {
}
}
return normalizedURI;
}
- // Set flattr status of the passed thing (either a FeedItem or a Feed)
- public static Future<?> setFlattredStatus(Context context, FlattrThing thing) {
+ /**
+ * Set flattr status of the passed thing (either a FeedItem or a Feed)
+ *
+ * @param context
+ * @param thing
+ * @param startFlattrClickWorker true if FlattrClickWorker should be started after the FlattrStatus has been saved
+ * @return
+ */
+ public static Future<?> setFlattredStatus(Context context, FlattrThing thing, boolean startFlattrClickWorker) {
// must propagate this to back db
if (thing instanceof FeedItem)
- return setFeedItemFlattrStatus(context, (FeedItem)thing);
+ return setFeedItemFlattrStatus(context, (FeedItem) thing, startFlattrClickWorker);
else if (thing instanceof Feed)
- return setFeedFlattrStatus(context, (Feed)thing);
- else if (thing instanceof SimpleFlattrThing)
- {} // SimpleFlattrThings are generated on the fly and do not have DB backing
+ return setFeedFlattrStatus(context, (Feed) thing, startFlattrClickWorker);
+ else if (thing instanceof SimpleFlattrThing) {
+ } // SimpleFlattrThings are generated on the fly and do not have DB backing
else
- Log.e(TAG, "flattrQueue processing - thing is neither FeedItem nor Feed nor SimpleFlattrThing");
+ Log.e(TAG, "flattrQueue processing - thing is neither FeedItem nor Feed nor SimpleFlattrThing");
return null;
}
@@ -913,7 +928,7 @@ public class DBWriter {
// build list with flattred things having normalized URLs
ArrayList<FlattrLinkTime> flattrLinkTime = new ArrayList<FlattrLinkTime>(flattrList.size());
- for (Flattr flattr: flattrList) {
+ for (Flattr flattr : flattrList) {
flattrLinkTime.add(new FlattrLinkTime(normalizeURI(flattr.getThing().getUrl()), flattr.getCreated().getTime()));
if (AppConfig.DEBUG)
Log.d(TAG, "FlattredUrl: " + flattr.getThing().getUrl());
@@ -922,7 +937,7 @@ public class DBWriter {
String paymentLink;
List<Feed> feeds = DBReader.getFeedList(context);
- for (final Feed feed: feeds) {
+ for (final Feed feed : feeds) {
// check if the feed has been flattred
paymentLink = feed.getPaymentLink();
if (paymentLink != null) {
@@ -932,17 +947,17 @@ public class DBWriter {
if (AppConfig.DEBUG)
Log.d(TAG, "Feed: Trying to match " + feedThingUrl);
- for (final FlattrLinkTime flattr: flattrLinkTime) {
+ for (final FlattrLinkTime flattr : flattrLinkTime) {
if (flattr.paymentLink.equals(feedThingUrl)) {
feed.setFlattrStatus(new FlattrStatus(flattr.time));
- setFeedFlattrStatus(context, feed);
+ setFeedFlattrStatus(context, feed, false);
break;
}
}
}
// check if any of the feeditems have been flattred
- for (final FeedItem item: DBReader.getFeedItemList(context, feed)) {
+ for (final FeedItem item : DBReader.getFeedItemList(context, feed)) {
paymentLink = item.getPaymentLink();
if (paymentLink != null) {
@@ -952,10 +967,10 @@ public class DBWriter {
if (AppConfig.DEBUG)
Log.d(TAG, "FeedItem: Trying to match " + feedItemThingUrl);
- for (final FlattrLinkTime flattr: flattrLinkTime) {
+ for (final FlattrLinkTime flattr : flattrLinkTime) {
if (flattr.paymentLink.equals(feedItemThingUrl)) {
item.setFlattrStatus(new FlattrStatus(flattr.time));
- setFeedItemFlattrStatus(context, item);
+ setFeedItemFlattrStatus(context, item, false);
break;
}
}
diff --git a/src/de/danoeh/antennapod/util/menuhandler/FeedItemMenuHandler.java b/src/de/danoeh/antennapod/util/menuhandler/FeedItemMenuHandler.java
index 3c662f794..b7e0d05c4 100644
--- a/src/de/danoeh/antennapod/util/menuhandler/FeedItemMenuHandler.java
+++ b/src/de/danoeh/antennapod/util/menuhandler/FeedItemMenuHandler.java
@@ -166,15 +166,7 @@ public class FeedItemMenuHandler {
break;
case R.id.support_item:
selectedItem.getFlattrStatus().setFlattrQueue();
- Future<?> future = DBWriter.setFlattredStatus(context, selectedItem);
- try {
- synchronized (future) {
- future.wait(10);
- }
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- new FlattrClickWorker(context).executeAsync();
+ DBWriter.setFlattredStatus(context, selectedItem, true);
break;
case R.id.share_link_item:
ShareUtils.shareFeedItemLink(context, selectedItem);
diff --git a/src/de/danoeh/antennapod/util/menuhandler/FeedMenuHandler.java b/src/de/danoeh/antennapod/util/menuhandler/FeedMenuHandler.java
index 04620af49..86808b609 100644
--- a/src/de/danoeh/antennapod/util/menuhandler/FeedMenuHandler.java
+++ b/src/de/danoeh/antennapod/util/menuhandler/FeedMenuHandler.java
@@ -85,15 +85,7 @@ public class FeedMenuHandler {
break;
case R.id.support_item:
selectedFeed.getFlattrStatus().setFlattrQueue();
- Future<?> future = DBWriter.setFlattredStatus(context, selectedFeed);
- try {
- synchronized (future) {
- future.wait(10);
- }
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- new FlattrClickWorker(context).executeAsync();
+ DBWriter.setFlattredStatus(context, selectedFeed, true);
break;
case R.id.share_link_item:
ShareUtils.shareFeedlink(context, selectedFeed);