From 8850c09920723559895062050163817979bcd8d2 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Sun, 5 Apr 2015 20:49:11 +0200 Subject: QueueEvents, Queue shows undobar on removal of an item --- .../antennapod/core/feed/EventDistributor.java | 5 --- .../de/danoeh/antennapod/core/feed/QueueEvent.java | 51 ++++++++++++++++++++++ .../playback/PlaybackServiceTaskManager.java | 17 +++----- .../danoeh/antennapod/core/storage/DBWriter.java | 34 ++++++++------- .../core/util/gui/UndoBarController.java | 47 +++++++++----------- 5 files changed, 97 insertions(+), 57 deletions(-) create mode 100644 core/src/main/java/de/danoeh/antennapod/core/feed/QueueEvent.java (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/EventDistributor.java b/core/src/main/java/de/danoeh/antennapod/core/feed/EventDistributor.java index 6655a7522..20a85d43f 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/EventDistributor.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/EventDistributor.java @@ -24,7 +24,6 @@ public class EventDistributor extends Observable { public static final int FEED_LIST_UPDATE = 1; public static final int UNREAD_ITEMS_UPDATE = 2; - public static final int QUEUE_UPDATE = 4; public static final int DOWNLOADLOG_UPDATE = 8; public static final int PLAYBACK_HISTORY_UPDATE = 16; public static final int DOWNLOAD_QUEUED = 32; @@ -97,10 +96,6 @@ public class EventDistributor extends Observable { addEvent(UNREAD_ITEMS_UPDATE); } - public void sendQueueUpdateBroadcast() { - addEvent(QUEUE_UPDATE); - } - public void sendFeedUpdateBroadcast() { addEvent(FEED_LIST_UPDATE); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/QueueEvent.java b/core/src/main/java/de/danoeh/antennapod/core/feed/QueueEvent.java new file mode 100644 index 000000000..9f1eec754 --- /dev/null +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/QueueEvent.java @@ -0,0 +1,51 @@ +package de.danoeh.antennapod.core.feed; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.util.List; + +public class QueueEvent { + + public enum Action { + ADDED, ADDED_ITEMS, REMOVED, CLEARED, DELETED_MEDIA, SORTED + } + + public final Action action; + public final FeedItem item; + public final int position; + public final List items; + + public QueueEvent(Action action) { + this(action, null, null, -1); + } + + public QueueEvent(Action action, FeedItem item) { + this(action, item, null, -1); + } + + public QueueEvent(Action action, FeedItem item, int position) { + this(action, item, null, position); + } + + public QueueEvent(Action action, List items) { + this(action, null, items, -1); + } + + private QueueEvent(Action action, FeedItem item, List items, int position) { + this.action = action; + this.item = item; + this.items = items; + this.position = position; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE) + .append("action", action) + .append("item", item) + .append("items", items) + .append("position", position) + .toString(); + } +} diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java index 3e414a8b7..cde03adea 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java @@ -76,18 +76,13 @@ public class PlaybackServiceTaskManager { } }); loadQueue(); - EventDistributor.getInstance().register(eventDistributorListener); + EventBus.getDefault().register(this); } - private final EventDistributor.EventListener eventDistributorListener = new EventDistributor.EventListener() { - @Override - public void update(EventDistributor eventDistributor, Integer arg) { - if ((EventDistributor.QUEUE_UPDATE & arg) != 0) { - cancelQueueLoader(); - loadQueue(); - } - } - }; + public void onEvent(QueueEvent event) { + cancelQueueLoader(); + loadQueue(); + } private synchronized boolean isQueueLoaderActive() { return queueFuture != null && !queueFuture.isDone(); @@ -319,7 +314,7 @@ public class PlaybackServiceTaskManager { * execution of this method. */ public synchronized void shutdown() { - EventDistributor.getInstance().unregister(eventDistributorListener); + EventBus.getDefault().unregister(this); cancelAllTasks(); schedExecutor.shutdown(); } 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 63c52b488..bd0cfee5b 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 @@ -41,7 +41,6 @@ import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.service.download.DownloadStatus; import de.danoeh.antennapod.core.service.playback.PlaybackService; import de.danoeh.antennapod.core.util.LongList; -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; @@ -350,8 +349,7 @@ public class DBWriter { public void run() { final PodDBAdapter adapter = new PodDBAdapter(context); adapter.open(); - final List queue = DBReader - .getQueue(context, adapter); + final List queue = DBReader.getQueue(context, adapter); FeedItem item = null; if (queue != null) { @@ -490,21 +488,14 @@ public class DBWriter { public void run() { final PodDBAdapter adapter = new PodDBAdapter(context); adapter.open(); - final List queue = DBReader - .getQueue(context, adapter); - FeedItem item = null; + final List queue = DBReader.getQueue(context, adapter); if (queue != null) { - boolean queueModified = false; - QueueAccess queueAccess = QueueAccess.ItemListAccess(queue); - if (queueAccess.contains(item.getId())) { - if (item != null) { - queueModified = queueAccess.remove(item.getId()); - } - } - if (queueModified) { + int position = queue.indexOf(item); + if(position >= 0) { + queue.remove(position); adapter.setQueue(queue); - EventBus.getDefault().post(new QueueEvent(QueueEvent.Action.REMOVED, item)); + EventBus.getDefault().post(new QueueEvent(QueueEvent.Action.REMOVED, item, position)); } else { Log.w(TAG, "Queue was not modified by call to removeQueueItem"); } @@ -628,6 +619,19 @@ public class DBWriter { adapter.close(); } + /** + * Sets the 'read'-attribute of a FeedItem to the specified value. + * + * @param context A context that is used for opening a database connection. + * @param itemId ID of the FeedItem + * @param read New value of the 'read'-attribute + */ + public static Future markItemRead(final Context context, final long itemId, + final boolean read) { + return markItemRead(context, itemId, read, 0, false); + } + + /** * Sets the 'read'-attribute of a FeedItem to the specified value. * diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/gui/UndoBarController.java b/core/src/main/java/de/danoeh/antennapod/core/util/gui/UndoBarController.java index 0e03bc8b4..e947dc5d0 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/gui/UndoBarController.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/gui/UndoBarController.java @@ -1,9 +1,6 @@ package de.danoeh.antennapod.core.util.gui; -import android.os.Bundle; import android.os.Handler; -import android.os.Parcelable; -import android.text.TextUtils; import android.view.View; import android.widget.TextView; @@ -16,23 +13,36 @@ import de.danoeh.antennapod.core.R; import static com.nineoldandroids.view.ViewPropertyAnimator.animate; -public class UndoBarController { +public class UndoBarController { private View mBarView; private TextView mMessageView; private ViewPropertyAnimator mBarAnimator; private Handler mHideHandler = new Handler(); - private UndoListener mUndoListener; + private UndoListener mUndoListener; // State objects - private Parcelable mUndoToken; + private T mUndoToken; private CharSequence mUndoMessage; - public interface UndoListener { - void onUndo(Parcelable token); + public interface UndoListener { + /** + * This callback function is called when the undo button is pressed + * + * @param token + */ + void onUndo(T token); + + /** + * + * This callback function is called when the bar fades out without button press + * + * @param token + */ + void onHide(T token); } - public UndoBarController(View undoBarView, UndoListener undoListener) { + public UndoBarController(View undoBarView, UndoListener undoListener) { mBarView = undoBarView; mBarAnimator = animate(mBarView); mUndoListener = undoListener; @@ -50,7 +60,7 @@ public class UndoBarController { hideUndoBar(true); } - public void showUndoBar(boolean immediate, CharSequence message, Parcelable undoToken) { + public void showUndoBar(boolean immediate, CharSequence message, T undoToken) { mUndoToken = undoToken; mUndoMessage = message; mMessageView.setText(mUndoMessage); @@ -96,26 +106,11 @@ public class UndoBarController { } } - public void onSaveInstanceState(Bundle outState) { - outState.putCharSequence("undo_message", mUndoMessage); - outState.putParcelable("undo_token", mUndoToken); - } - - public void onRestoreInstanceState(Bundle savedInstanceState) { - if (savedInstanceState != null) { - mUndoMessage = savedInstanceState.getCharSequence("undo_message"); - mUndoToken = savedInstanceState.getParcelable("undo_token"); - - if (mUndoToken != null || !TextUtils.isEmpty(mUndoMessage)) { - showUndoBar(true, mUndoMessage, mUndoToken); - } - } - } - private Runnable mHideRunnable = new Runnable() { @Override public void run() { hideUndoBar(false); + mUndoListener.onHide(mUndoToken); } }; } -- cgit v1.2.3