summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorTom Hennen <TomHennen@users.noreply.github.com>2015-11-07 09:16:24 -0500
committerTom Hennen <TomHennen@users.noreply.github.com>2015-11-07 09:16:24 -0500
commit0aeb520f14763e3f81c6e83d9584b79eac7d19f0 (patch)
treeecfaf180ff4d8d4a30a1c9581fdd71d514ec6a14 /core
parentc5d99a84b288d30afd0a2b54bb557fdbcdc9e56b (diff)
parent8286a76cdf580f4adc1e536cabd3cb3ce3427f15 (diff)
downloadAntennaPod-0aeb520f14763e3f81c6e83d9584b79eac7d19f0.zip
Merge pull request #1347 from mfietz/recycler_view
RecyclerView & SnackBar
Diffstat (limited to 'core')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/asynctask/DownloadObserver.java16
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/event/FeedItemEvent.java43
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/event/FeedMediaEvent.java1
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/event/QueueEvent.java46
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java33
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/FeedItemUtil.java68
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/LongList.java11
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/gui/UndoBarController.java127
-rw-r--r--core/src/main/res/drawable-hdpi/ic_drag_handle.9.pngbin268 -> 0 bytes
-rw-r--r--core/src/main/res/drawable-hdpi/ic_drag_handle_dark.9.pngbin244 -> 0 bytes
-rw-r--r--core/src/main/res/drawable-hdpi/ic_drag_vertical_grey600_48dp.pngbin0 -> 246 bytes
-rw-r--r--core/src/main/res/drawable-hdpi/ic_drag_vertical_white_48dp.pngbin0 -> 242 bytes
-rw-r--r--core/src/main/res/drawable-mdpi/ic_drag_handle.9.pngbin217 -> 0 bytes
-rw-r--r--core/src/main/res/drawable-mdpi/ic_drag_handle_dark.9.pngbin188 -> 0 bytes
-rw-r--r--core/src/main/res/drawable-mdpi/ic_drag_vertical_grey600_48dp.pngbin0 -> 197 bytes
-rw-r--r--core/src/main/res/drawable-mdpi/ic_drag_vertical_white_48dp.pngbin0 -> 193 bytes
-rw-r--r--core/src/main/res/drawable-xhdpi/ic_drag_handle.9.pngbin318 -> 0 bytes
-rw-r--r--core/src/main/res/drawable-xhdpi/ic_drag_handle_dark.9.pngbin297 -> 0 bytes
-rw-r--r--core/src/main/res/drawable-xhdpi/ic_drag_vertical_grey600_48dp.pngbin0 -> 291 bytes
-rw-r--r--core/src/main/res/drawable-xhdpi/ic_drag_vertical_white_48dp.pngbin0 -> 286 bytes
-rw-r--r--core/src/main/res/drawable-xxhdpi/ic_drag_handle.9.pngbin410 -> 0 bytes
-rw-r--r--core/src/main/res/drawable-xxhdpi/ic_drag_handle_dark.9.pngbin380 -> 0 bytes
-rw-r--r--core/src/main/res/drawable-xxhdpi/ic_drag_vertical_grey600_48dp.pngbin0 -> 389 bytes
-rw-r--r--core/src/main/res/drawable-xxhdpi/ic_drag_vertical_white_48dp.pngbin0 -> 386 bytes
-rw-r--r--core/src/main/res/drawable-xxxhdpi/ic_drag_vertical_grey600_48dp.pngbin0 -> 501 bytes
-rw-r--r--core/src/main/res/drawable-xxxhdpi/ic_drag_vertical_white_48dp.pngbin0 -> 498 bytes
-rw-r--r--core/src/main/res/values/styles.xml8
27 files changed, 191 insertions, 162 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/asynctask/DownloadObserver.java b/core/src/main/java/de/danoeh/antennapod/core/asynctask/DownloadObserver.java
index 732fa2d27..2ce506c22 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/asynctask/DownloadObserver.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/asynctask/DownloadObserver.java
@@ -15,6 +15,7 @@ import de.danoeh.antennapod.core.service.download.Downloader;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
/**
* Provides access to the DownloadService's list of items that are currently being downloaded.
@@ -39,6 +40,8 @@ public class DownloadObserver {
private Thread refresherThread;
private AtomicBoolean refresherThreadRunning = new AtomicBoolean(false);
+ private AtomicInteger users = new AtomicInteger(0);
+
/**
* Creates a new download observer.
@@ -59,13 +62,18 @@ public class DownloadObserver {
}
public void onResume() {
- if (BuildConfig.DEBUG) Log.d(TAG, "DownloadObserver resumed");
- activity.registerReceiver(contentChangedReceiver, new IntentFilter(DownloadService.ACTION_DOWNLOADS_CONTENT_CHANGED));
- connectToDownloadService();
+ Log.d(TAG, "DownloadObserver resumed");
+ if(users.getAndIncrement() == 0) {
+ activity.registerReceiver(contentChangedReceiver, new IntentFilter(DownloadService.ACTION_DOWNLOADS_CONTENT_CHANGED));
+ connectToDownloadService();
+ }
}
public void onPause() {
- if (BuildConfig.DEBUG) Log.d(TAG, "DownloadObserver paused");
+ Log.d(TAG, "DownloadObserver paused");
+ if(users.decrementAndGet() > 0) {
+ return;
+ }
try {
activity.unregisterReceiver(contentChangedReceiver);
} catch (IllegalArgumentException e) {
diff --git a/core/src/main/java/de/danoeh/antennapod/core/event/FeedItemEvent.java b/core/src/main/java/de/danoeh/antennapod/core/event/FeedItemEvent.java
new file mode 100644
index 000000000..a4a79187e
--- /dev/null
+++ b/core/src/main/java/de/danoeh/antennapod/core/event/FeedItemEvent.java
@@ -0,0 +1,43 @@
+package de.danoeh.antennapod.core.event;
+
+
+import android.support.annotation.NonNull;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.List;
+
+import de.danoeh.antennapod.core.feed.FeedItem;
+
+public class FeedItemEvent {
+
+ public enum Action {
+ UPDATE, DELETE_MEDIA
+ }
+
+ @NonNull public final Action action;
+ @NonNull public final List<FeedItem> items;
+
+ private FeedItemEvent(Action action, List<FeedItem> items) {
+ this.action = action;
+ this.items = items;
+ }
+
+ public static FeedItemEvent deletedMedia(List<FeedItem> items) {
+ return new FeedItemEvent(Action.DELETE_MEDIA, items);
+ }
+
+ public static FeedItemEvent updated(List<FeedItem> items) {
+ return new FeedItemEvent(Action.UPDATE, items);
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE)
+ .append("action", action)
+ .append("items", items)
+ .toString();
+ }
+
+}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/event/FeedMediaEvent.java b/core/src/main/java/de/danoeh/antennapod/core/event/FeedMediaEvent.java
index 94e186b7a..864d0a405 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/event/FeedMediaEvent.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/event/FeedMediaEvent.java
@@ -20,5 +20,4 @@ public class FeedMediaEvent {
return new FeedMediaEvent(Action.UPDATE, media);
}
-
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/event/QueueEvent.java b/core/src/main/java/de/danoeh/antennapod/core/event/QueueEvent.java
index 4992252d1..a84e8456f 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/event/QueueEvent.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/event/QueueEvent.java
@@ -1,5 +1,7 @@
package de.danoeh.antennapod.core.event;
+import android.support.annotation.Nullable;
+
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
@@ -10,7 +12,7 @@ import de.danoeh.antennapod.core.feed.FeedItem;
public class QueueEvent {
public enum Action {
- ADDED, ADDED_ITEMS, REMOVED, IRREVERSIBLE_REMOVED, CLEARED, DELETED_MEDIA, SORTED, MOVED
+ ADDED, ADDED_ITEMS, SET_QUEUE, REMOVED, IRREVERSIBLE_REMOVED, CLEARED, DELETED_MEDIA, SORTED, MOVED
}
public final Action action;
@@ -18,27 +20,43 @@ public class QueueEvent {
public final int position;
public final List<FeedItem> items;
- public QueueEvent(Action action) {
- this(action, null, null, -1);
+
+ private QueueEvent(Action action,
+ @Nullable FeedItem item,
+ @Nullable List<FeedItem> items,
+ int position) {
+ this.action = action;
+ this.item = item;
+ this.items = items;
+ this.position = position;
}
- public QueueEvent(Action action, FeedItem item) {
- this(action, item, null, -1);
+ public static QueueEvent added(FeedItem item, int position) {
+ return new QueueEvent(Action.ADDED, item, null, position);
}
- public QueueEvent(Action action, FeedItem item, int position) {
- this(action, item, null, position);
+ public static QueueEvent setQueue(List<FeedItem> queue) {
+ return new QueueEvent(Action.SET_QUEUE, null, queue, -1);
}
- public QueueEvent(Action action, List<FeedItem> items) {
- this(action, null, items, -1);
+ public static QueueEvent removed(FeedItem item) {
+ return new QueueEvent(Action.REMOVED, item, null, -1);
}
- private QueueEvent(Action action, FeedItem item, List<FeedItem> items, int position) {
- this.action = action;
- this.item = item;
- this.items = items;
- this.position = position;
+ public static QueueEvent irreversibleRemoved(FeedItem item) {
+ return new QueueEvent(Action.IRREVERSIBLE_REMOVED, item, null, -1);
+ }
+
+ public static QueueEvent cleared() {
+ return new QueueEvent(Action.CLEARED, null, null, -1);
+ }
+
+ public static QueueEvent sorted(List<FeedItem> sortedQueue) {
+ return new QueueEvent(Action.SORTED, null, sortedQueue, -1);
+ }
+
+ public static QueueEvent moved(FeedItem item, int newPosition) {
+ return new QueueEvent(Action.MOVED, item, null, newPosition);
}
public boolean contains(long id) {
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 73584c40a..14683506e 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
@@ -14,6 +14,7 @@ import java.io.File;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
@@ -27,6 +28,8 @@ import de.danoeh.antennapod.core.BuildConfig;
import de.danoeh.antennapod.core.ClientConfig;
import de.danoeh.antennapod.core.asynctask.FlattrClickWorker;
import de.danoeh.antennapod.core.event.FavoritesEvent;
+import de.danoeh.antennapod.core.event.FeedItemEvent;
+import de.danoeh.antennapod.core.event.QueueEvent;
import de.danoeh.antennapod.core.feed.EventDistributor;
import de.danoeh.antennapod.core.feed.Feed;
import de.danoeh.antennapod.core.feed.FeedEvent;
@@ -34,7 +37,6 @@ 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.event.QueueEvent;
import de.danoeh.antennapod.core.gpoddernet.model.GpodnetEpisodeAction;
import de.danoeh.antennapod.core.preferences.GpodnetPreferences;
import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
@@ -131,7 +133,7 @@ public class DBWriter {
}
}
Log.d(TAG, "Deleting File. Result: " + result);
- EventBus.getDefault().post(new QueueEvent(QueueEvent.Action.DELETED_MEDIA, media.getItem()));
+ EventBus.getDefault().post(FeedItemEvent.deletedMedia(Arrays.asList(media.getItem())));
EventDistributor.getInstance().sendUnreadItemsUpdateBroadcast();
}
});
@@ -210,8 +212,9 @@ public class DBWriter {
adapter.open();
if (removed.size() > 0) {
adapter.setQueue(queue);
- EventBus.getDefault().post(new QueueEvent(QueueEvent.Action.IRREVERSIBLE_REMOVED,
- removed));
+ for(FeedItem item : removed) {
+ EventBus.getDefault().post(QueueEvent.irreversibleRemoved(item));
+ }
}
adapter.removeFeed(feed);
adapter.close();
@@ -319,7 +322,7 @@ public class DBWriter {
queue.add(index, item);
adapter.setQueue(queue);
item.addTag(FeedItem.TAG_QUEUE);
- EventBus.getDefault().post(new QueueEvent(QueueEvent.Action.ADDED, item, index));
+ EventBus.getDefault().post(QueueEvent.added(item, index));
if (item.isNew()) {
DBWriter.markItemPlayed(FeedItem.UNPLAYED, item.getId());
}
@@ -365,17 +368,21 @@ public class DBWriter {
if (queue != null) {
boolean queueModified = false;
LongList markAsUnplayedIds = new LongList();
+ List<QueueEvent> events = new ArrayList<QueueEvent>();
for (int i = 0; i < itemIds.length; i++) {
if (!itemListContains(queue, itemIds[i])) {
final FeedItem item = DBReader.getFeedItem(itemIds[i]);
+
if (item != null) {
// add item to either front ot back of queue
boolean addToFront = UserPreferences.enqueueAtFront();
if (addToFront) {
queue.add(0 + i, item);
+ events.add(QueueEvent.added(item, 0 + i));
} else {
queue.add(item);
+ events.add(QueueEvent.added(item, queue.size()-1));
}
queueModified = true;
if (item.isNew()) {
@@ -386,7 +393,9 @@ public class DBWriter {
}
if (queueModified) {
adapter.setQueue(queue);
- EventBus.getDefault().post(new QueueEvent(QueueEvent.Action.ADDED_ITEMS, queue));
+ for(QueueEvent event : events) {
+ EventBus.getDefault().post(event);
+ }
if (markAsUnplayedIds.size() > 0) {
DBWriter.markItemPlayed(FeedItem.UNPLAYED, markAsUnplayedIds.toArray());
}
@@ -411,7 +420,7 @@ public class DBWriter {
adapter.clearQueue();
adapter.close();
- EventBus.getDefault().post(new QueueEvent(QueueEvent.Action.CLEARED));
+ EventBus.getDefault().post(QueueEvent.cleared());
});
}
@@ -435,7 +444,7 @@ public class DBWriter {
queue.remove(position);
adapter.setQueue(queue);
item.removeTag(FeedItem.TAG_QUEUE);
- EventBus.getDefault().post(new QueueEvent(QueueEvent.Action.REMOVED, item, position));
+ EventBus.getDefault().post(QueueEvent.removed(item));
} else {
Log.w(TAG, "Queue was not modified by call to removeQueueItem");
}
@@ -512,9 +521,9 @@ public class DBWriter {
return dbExec.submit(() -> {
LongList queueIdList = DBReader.getQueueIDList();
int index = queueIdList.indexOf(itemId);
- if(index >= 0) {
+ if (index >= 0) {
moveQueueItemHelper(index, queueIdList.size() - 1,
- broadcastUpdate);
+ broadcastUpdate);
} else {
Log.e(TAG, "moveQueueItemToBottom: item not found");
}
@@ -561,7 +570,7 @@ public class DBWriter {
adapter.setQueue(queue);
if (broadcastUpdate) {
- EventBus.getDefault().post(new QueueEvent(QueueEvent.Action.MOVED, item, to));
+ EventBus.getDefault().post(QueueEvent.moved(item, to));
}
}
} else {
@@ -955,7 +964,7 @@ public class DBWriter {
Collections.sort(queue, comparator);
adapter.setQueue(queue);
if (broadcastUpdate) {
- EventBus.getDefault().post(new QueueEvent(QueueEvent.Action.SORTED));
+ EventBus.getDefault().post(QueueEvent.sorted(queue));
}
} else {
Log.e(TAG, "sortQueue: Could not load queue");
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/FeedItemUtil.java b/core/src/main/java/de/danoeh/antennapod/core/util/FeedItemUtil.java
new file mode 100644
index 000000000..3817d3361
--- /dev/null
+++ b/core/src/main/java/de/danoeh/antennapod/core/util/FeedItemUtil.java
@@ -0,0 +1,68 @@
+package de.danoeh.antennapod.core.util;
+
+import java.util.List;
+
+import de.danoeh.antennapod.core.feed.FeedItem;
+
+public class FeedItemUtil {
+
+ public static int indexOfItemWithDownloadUrl(List<FeedItem> items, String downloadUrl) {
+ if(items == null) {
+ return -1;
+ }
+ for(int i=0; i < items.size(); i++) {
+ FeedItem item = items.get(i);
+ if(item.hasMedia() && item.getMedia().getDownload_url().equals(downloadUrl)) {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+ public static int indexOfItemWithId(List<FeedItem> items, long id) {
+ for(int i=0; i < items.size(); i++) {
+ FeedItem item = items.get(i);
+ if(item != null && item.getId() == id) {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+ public static long[] getIds(FeedItem... items) {
+ if(items == null || items.length == 0) {
+ return new long[0];
+ }
+ long[] result = new long[items.length];
+ for(int i=0; i < items.length; i++) {
+ result[i] = items[i].getId();
+ }
+ return result;
+ }
+
+ public static long[] getIds(List<FeedItem> items) {
+ if(items == null || items.size() == 0) {
+ return new long[0];
+ }
+ long[] result = new long[items.size()];
+ for(int i=0; i < items.size(); i++) {
+ result[i] = items.get(i).getId();
+ }
+ return result;
+ }
+
+ public static boolean containsAnyId(List<FeedItem> items, long[] ids) {
+ if(items == null || items.size() == 0) {
+ return false;
+ }
+ for(FeedItem item : items) {
+ for(long id : ids) {
+ if(item.getId() == id) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/LongList.java b/core/src/main/java/de/danoeh/antennapod/core/util/LongList.java
index 8934f3272..10ffd4bec 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/util/LongList.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/util/LongList.java
@@ -30,6 +30,17 @@ public final class LongList {
size = 0;
}
+ public static LongList of(long... values) {
+ if(values == null || values.length == 0) {
+ return new LongList(0);
+ }
+ LongList result = new LongList(values.length);
+ for(long value : values) {
+ result.add(value);
+ }
+ return result;
+ }
+
@Override
public int hashCode() {
int hashCode = 1;
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
deleted file mode 100644
index 5eaff6069..000000000
--- a/core/src/main/java/de/danoeh/antennapod/core/util/gui/UndoBarController.java
+++ /dev/null
@@ -1,127 +0,0 @@
-package de.danoeh.antennapod.core.util.gui;
-
-import android.os.Handler;
-import android.view.View;
-import android.widget.TextView;
-
-import com.nineoldandroids.animation.Animator;
-import com.nineoldandroids.animation.AnimatorListenerAdapter;
-import com.nineoldandroids.view.ViewHelper;
-import com.nineoldandroids.view.ViewPropertyAnimator;
-
-import de.danoeh.antennapod.core.R;
-
-import static com.nineoldandroids.view.ViewPropertyAnimator.animate;
-
-public class UndoBarController<T> {
- private View mBarView;
- private TextView mMessageView;
- private ViewPropertyAnimator mBarAnimator;
- private Handler mHideHandler = new Handler();
-
- private UndoListener<T> mUndoListener;
-
- // State objects
- private T mUndoToken;
- private CharSequence mUndoMessage;
-
- public interface UndoListener<T> {
- /**
- * 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<T> undoListener) {
- mBarView = undoBarView;
- mBarAnimator = animate(mBarView);
- mUndoListener = undoListener;
-
- mMessageView = (TextView) mBarView.findViewById(R.id.undobar_message);
- mBarView.findViewById(R.id.undobar_button)
- .setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- hideUndoBar(false);
- mUndoListener.onUndo(mUndoToken);
- }
- });
-
- hideUndoBar(true);
- }
-
- public void showUndoBar(boolean immediate, CharSequence message, T undoToken) {
- mUndoToken = undoToken;
- mUndoMessage = message;
- mMessageView.setText(mUndoMessage);
-
- mHideHandler.removeCallbacks(mHideRunnable);
- mHideHandler.postDelayed(mHideRunnable,
- mBarView.getResources().getInteger(R.integer.undobar_hide_delay));
-
- mBarView.setVisibility(View.VISIBLE);
- if (immediate) {
- ViewHelper.setAlpha(mBarView, 1);
- } else {
- mBarAnimator.cancel();
- mBarAnimator
- .alpha(1)
- .setDuration(
- mBarView.getResources()
- .getInteger(android.R.integer.config_shortAnimTime))
- .setListener(null);
- }
- }
-
- public boolean isShowing() {
- return mBarView.getVisibility() == View.VISIBLE;
- }
-
- public void close() {
- hideUndoBar(true);
- if(mUndoListener != null) {
- mUndoListener.onHide(mUndoToken);
- }
- }
-
- public void hideUndoBar(boolean immediate) {
- mHideHandler.removeCallbacks(mHideRunnable);
- if (immediate) {
- mBarView.setVisibility(View.GONE);
- ViewHelper.setAlpha(mBarView, 0);
- mUndoMessage = null;
- } else {
- mBarAnimator.cancel();
- mBarAnimator
- .alpha(0)
- .setDuration(mBarView.getResources()
- .getInteger(android.R.integer.config_shortAnimTime))
- .setListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- mBarView.setVisibility(View.GONE);
- mUndoMessage = null;
- mUndoToken = null;
- }
- });
- }
- }
-
- private Runnable mHideRunnable = new Runnable() {
- @Override
- public void run() {
- hideUndoBar(false);
- mUndoListener.onHide(mUndoToken);
- }
- };
-}
diff --git a/core/src/main/res/drawable-hdpi/ic_drag_handle.9.png b/core/src/main/res/drawable-hdpi/ic_drag_handle.9.png
deleted file mode 100644
index 939454989..000000000
--- a/core/src/main/res/drawable-hdpi/ic_drag_handle.9.png
+++ /dev/null
Binary files differ
diff --git a/core/src/main/res/drawable-hdpi/ic_drag_handle_dark.9.png b/core/src/main/res/drawable-hdpi/ic_drag_handle_dark.9.png
deleted file mode 100644
index 65b9ec1fa..000000000
--- a/core/src/main/res/drawable-hdpi/ic_drag_handle_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/core/src/main/res/drawable-hdpi/ic_drag_vertical_grey600_48dp.png b/core/src/main/res/drawable-hdpi/ic_drag_vertical_grey600_48dp.png
new file mode 100644
index 000000000..17202c8d1
--- /dev/null
+++ b/core/src/main/res/drawable-hdpi/ic_drag_vertical_grey600_48dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-hdpi/ic_drag_vertical_white_48dp.png b/core/src/main/res/drawable-hdpi/ic_drag_vertical_white_48dp.png
new file mode 100644
index 000000000..48e221b86
--- /dev/null
+++ b/core/src/main/res/drawable-hdpi/ic_drag_vertical_white_48dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-mdpi/ic_drag_handle.9.png b/core/src/main/res/drawable-mdpi/ic_drag_handle.9.png
deleted file mode 100644
index 8de13a08b..000000000
--- a/core/src/main/res/drawable-mdpi/ic_drag_handle.9.png
+++ /dev/null
Binary files differ
diff --git a/core/src/main/res/drawable-mdpi/ic_drag_handle_dark.9.png b/core/src/main/res/drawable-mdpi/ic_drag_handle_dark.9.png
deleted file mode 100644
index e24681d12..000000000
--- a/core/src/main/res/drawable-mdpi/ic_drag_handle_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/core/src/main/res/drawable-mdpi/ic_drag_vertical_grey600_48dp.png b/core/src/main/res/drawable-mdpi/ic_drag_vertical_grey600_48dp.png
new file mode 100644
index 000000000..31ef36bde
--- /dev/null
+++ b/core/src/main/res/drawable-mdpi/ic_drag_vertical_grey600_48dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-mdpi/ic_drag_vertical_white_48dp.png b/core/src/main/res/drawable-mdpi/ic_drag_vertical_white_48dp.png
new file mode 100644
index 000000000..1c0e89e60
--- /dev/null
+++ b/core/src/main/res/drawable-mdpi/ic_drag_vertical_white_48dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xhdpi/ic_drag_handle.9.png b/core/src/main/res/drawable-xhdpi/ic_drag_handle.9.png
deleted file mode 100644
index 46b8a5ad8..000000000
--- a/core/src/main/res/drawable-xhdpi/ic_drag_handle.9.png
+++ /dev/null
Binary files differ
diff --git a/core/src/main/res/drawable-xhdpi/ic_drag_handle_dark.9.png b/core/src/main/res/drawable-xhdpi/ic_drag_handle_dark.9.png
deleted file mode 100644
index 864fae9e8..000000000
--- a/core/src/main/res/drawable-xhdpi/ic_drag_handle_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/core/src/main/res/drawable-xhdpi/ic_drag_vertical_grey600_48dp.png b/core/src/main/res/drawable-xhdpi/ic_drag_vertical_grey600_48dp.png
new file mode 100644
index 000000000..3fd70af80
--- /dev/null
+++ b/core/src/main/res/drawable-xhdpi/ic_drag_vertical_grey600_48dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xhdpi/ic_drag_vertical_white_48dp.png b/core/src/main/res/drawable-xhdpi/ic_drag_vertical_white_48dp.png
new file mode 100644
index 000000000..38a3dc3f4
--- /dev/null
+++ b/core/src/main/res/drawable-xhdpi/ic_drag_vertical_white_48dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxhdpi/ic_drag_handle.9.png b/core/src/main/res/drawable-xxhdpi/ic_drag_handle.9.png
deleted file mode 100644
index 0e99bde9e..000000000
--- a/core/src/main/res/drawable-xxhdpi/ic_drag_handle.9.png
+++ /dev/null
Binary files differ
diff --git a/core/src/main/res/drawable-xxhdpi/ic_drag_handle_dark.9.png b/core/src/main/res/drawable-xxhdpi/ic_drag_handle_dark.9.png
deleted file mode 100644
index 0da191a69..000000000
--- a/core/src/main/res/drawable-xxhdpi/ic_drag_handle_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/core/src/main/res/drawable-xxhdpi/ic_drag_vertical_grey600_48dp.png b/core/src/main/res/drawable-xxhdpi/ic_drag_vertical_grey600_48dp.png
new file mode 100644
index 000000000..048b39f0e
--- /dev/null
+++ b/core/src/main/res/drawable-xxhdpi/ic_drag_vertical_grey600_48dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxhdpi/ic_drag_vertical_white_48dp.png b/core/src/main/res/drawable-xxhdpi/ic_drag_vertical_white_48dp.png
new file mode 100644
index 000000000..1c79c9731
--- /dev/null
+++ b/core/src/main/res/drawable-xxhdpi/ic_drag_vertical_white_48dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxxhdpi/ic_drag_vertical_grey600_48dp.png b/core/src/main/res/drawable-xxxhdpi/ic_drag_vertical_grey600_48dp.png
new file mode 100644
index 000000000..4819da3c1
--- /dev/null
+++ b/core/src/main/res/drawable-xxxhdpi/ic_drag_vertical_grey600_48dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxxhdpi/ic_drag_vertical_white_48dp.png b/core/src/main/res/drawable-xxxhdpi/ic_drag_vertical_white_48dp.png
new file mode 100644
index 000000000..b5820d4fe
--- /dev/null
+++ b/core/src/main/res/drawable-xxxhdpi/ic_drag_vertical_white_48dp.png
Binary files differ
diff --git a/core/src/main/res/values/styles.xml b/core/src/main/res/values/styles.xml
index ccaaf9c3c..5d1eac12d 100644
--- a/core/src/main/res/values/styles.xml
+++ b/core/src/main/res/values/styles.xml
@@ -33,7 +33,7 @@
<item name="attr/non_transparent_background">@color/white</item>
<item name="attr/overlay_background">@color/overlay_light</item>
<item name="attr/overlay_drawable">@drawable/overlay_drawable</item>
- <item name="attr/dragview_background">@drawable/ic_drag_handle</item>
+ <item name="attr/dragview_background">@drawable/ic_drag_vertical_grey600_48dp</item>
<item name="attr/dragview_float_background">@color/white</item>
<item name="attr/nav_drawer_background">@color/white</item>
<item name="attr/ic_action_overflow">@drawable/ic_more_vert_grey600_24dp</item>
@@ -80,7 +80,7 @@
<item name="attr/non_transparent_background">@color/black</item>
<item name="attr/overlay_background">@color/overlay_dark</item>
<item name="attr/overlay_drawable">@drawable/overlay_drawable_dark</item>
- <item name="attr/dragview_background">@drawable/ic_drag_handle_dark</item>
+ <item name="attr/dragview_background">@drawable/ic_drag_vertical_white_48dp</item>
<item name="attr/dragview_float_background">@color/black</item>
<item name="attr/nav_drawer_background">#3B3B3B</item>
<item name="attr/ic_action_overflow">@drawable/ic_more_vert_white_24dp</item>
@@ -129,7 +129,7 @@
<item name="attr/non_transparent_background">@color/white</item>
<item name="attr/overlay_background">@color/overlay_light</item>
<item name="attr/overlay_drawable">@drawable/overlay_drawable</item>
- <item name="attr/dragview_background">@drawable/ic_drag_handle</item>
+ <item name="attr/dragview_background">@drawable/ic_drag_vertical_grey600_48dp</item>
<item name="attr/dragview_float_background">@color/white</item>
<item name="attr/nav_drawer_background">@color/white</item>
<item name="attr/ic_action_overflow">@drawable/ic_more_vert_grey600_24dp</item>
@@ -177,7 +177,7 @@
<item name="attr/non_transparent_background">@color/black</item>
<item name="attr/overlay_background">@color/overlay_dark</item>
<item name="attr/overlay_drawable">@drawable/overlay_drawable_dark</item>
- <item name="attr/dragview_background">@drawable/ic_drag_handle_dark</item>
+ <item name="attr/dragview_background">@drawable/ic_drag_vertical_white_48dp</item>
<item name="attr/dragview_float_background">@color/black</item>
<item name="attr/nav_drawer_background">#3B3B3B</item>
<item name="attr/ic_action_overflow">@drawable/ic_more_vert_white_24dp</item>