diff options
29 files changed, 109 insertions, 5 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java index a256dc129..bba5a00a9 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java @@ -14,9 +14,9 @@ import android.widget.TextView; import com.squareup.picasso.Picasso; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.core.feed.EventDistributor; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; +import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.Converter; @@ -31,6 +31,8 @@ public class QueueListAdapter extends BaseAdapter { private final ActionButtonCallback actionButtonCallback; private final ActionButtonUtils actionButtonUtils; + private boolean locked; + public QueueListAdapter(Context context, ItemAccess itemAccess, ActionButtonCallback actionButtonCallback) { super(); @@ -38,6 +40,12 @@ public class QueueListAdapter extends BaseAdapter { this.itemAccess = itemAccess; this.actionButtonUtils = new ActionButtonUtils(context); this.actionButtonCallback = actionButtonCallback; + locked = UserPreferences.isQueueLocked(); + } + + public void setLocked(boolean locked) { + this.locked = locked; + notifyDataSetChanged(); } @Override @@ -67,6 +75,7 @@ public class QueueListAdapter extends BaseAdapter { .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.queue_listitem, parent, false); + holder.dragHandle = (ImageView) convertView.findViewById(R.id.drag_handle); holder.imageView = (ImageView) convertView.findViewById(R.id.imgvImage); holder.title = (TextView) convertView.findViewById(R.id.txtvTitle); holder.pubDate = (TextView) convertView.findViewById(R.id.txtvPubDate); @@ -83,6 +92,12 @@ public class QueueListAdapter extends BaseAdapter { holder = (Holder) convertView.getTag(); } + if(locked) { + holder.dragHandle.setVisibility(View.GONE); + } else { + holder.dragHandle.setVisibility(View.VISIBLE); + } + holder.title.setText(item.getTitle()); FeedMedia media = item.getMedia(); @@ -143,6 +158,7 @@ public class QueueListAdapter extends BaseAdapter { static class Holder { + ImageView dragHandle; ImageView imageView; TextView title; TextView pubDate; diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java index f1ed6c656..4263fbfad 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -48,7 +48,6 @@ import de.danoeh.antennapod.core.util.QueueSorter; import de.danoeh.antennapod.core.util.gui.FeedItemUndoToken; import de.danoeh.antennapod.core.util.gui.UndoBarController; import de.danoeh.antennapod.menuhandler.MenuItemUtils; -import de.danoeh.antennapod.menuhandler.NavDrawerActivity; import de.greenrobot.event.EventBus; /** @@ -67,6 +66,8 @@ public class QueueFragment extends Fragment { private TextView txtvEmpty; private ProgressBar progLoading; + private MenuItem queueLock; + private UndoBarController<FeedItemUndoToken> undoBarController; private List<FeedItem> queue; @@ -221,6 +222,9 @@ public class QueueFragment extends Fragment { return false; } }); + + MenuItemUtils.refreshLockItem(getActivity(), menu, queueLock); + isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker); } } @@ -229,6 +233,17 @@ public class QueueFragment extends Fragment { public boolean onOptionsItemSelected(MenuItem item) { if (!super.onOptionsItemSelected(item)) { switch (item.getItemId()) { + case R.id.queue_lock: + boolean locked = !UserPreferences.isQueueLocked(); + if(locked) { + listView.setDragEnabled(false); + } else { + listView.setDragEnabled(true); + } + UserPreferences.setQueueLocked(locked); + getActivity().supportInvalidateOptionsMenu(); + listAdapter.setLocked(locked); + return true; case R.id.refresh_item: List<Feed> feeds = ((MainActivity) getActivity()).getFeeds(); if (feeds != null) { @@ -330,6 +345,12 @@ public class QueueFragment extends Fragment { progLoading = (ProgressBar) root.findViewById(R.id.progLoading); listView.setEmptyView(txtvEmpty); + if(UserPreferences.isQueueLocked()) { + listView.setDragEnabled(false); + } else { + listView.setDragEnabled(true); + } + listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { diff --git a/app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java index b78bfd01a..edefb7d46 100644 --- a/app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java @@ -1,11 +1,16 @@ package de.danoeh.antennapod.menuhandler; +import android.content.Context; +import android.content.res.Resources; +import android.content.res.TypedArray; +import android.os.Build; import android.support.v4.view.MenuItemCompat; import android.support.v7.widget.SearchView; import android.view.Menu; import android.view.MenuItem; import de.danoeh.antennapod.core.R; +import de.danoeh.antennapod.core.preferences.UserPreferences; /** * Utilities for menu items @@ -14,9 +19,32 @@ public class MenuItemUtils extends de.danoeh.antennapod.core.menuhandler.MenuIte public static MenuItem addSearchItem(Menu menu, SearchView searchView) { MenuItem item = menu.add(Menu.NONE, R.id.search_item, Menu.NONE, R.string.search_label); - MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_ALWAYS); + MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | MenuItemCompat.SHOW_AS_ACTION_IF_ROOM); MenuItemCompat.setActionView(item, searchView); + + if(Build.VERSION.SDK_INT < 14) { + SearchView.SearchAutoComplete textField = (SearchView.SearchAutoComplete) searchView.findViewById(de.danoeh.antennapod.R.id.search_src_text); + if(UserPreferences.getTheme() == de.danoeh.antennapod.R.style.Theme_AntennaPod_Dark) { + textField.setTextColor(Resources.getSystem().getColor(android.R.color.white)); + } else { + textField.setTextColor(Resources.getSystem().getColor(android.R.color.black)); + } + } + return item; } + public static void refreshLockItem(Context context, Menu menu, MenuItem queueLock) { + queueLock = menu.findItem(de.danoeh.antennapod.R.id.queue_lock); + int[] lockIcons = new int[] { de.danoeh.antennapod.R.attr.ic_lock_open, de.danoeh.antennapod.R.attr.ic_lock_closed }; + TypedArray ta = context.obtainStyledAttributes(lockIcons); + if (UserPreferences.isQueueLocked()) { + queueLock.setTitle(de.danoeh.antennapod.R.string.unlock_queue); + queueLock.setIcon(ta.getDrawable(1)); + } else { + queueLock.setTitle(de.danoeh.antennapod.R.string.lock_queue); + queueLock.setIcon(ta.getDrawable(0)); + } + } + } diff --git a/app/src/main/res/layout/queue_listitem.xml b/app/src/main/res/layout/queue_listitem.xml index bc5b951a2..39e9c72a5 100644 --- a/app/src/main/res/layout/queue_listitem.xml +++ b/app/src/main/res/layout/queue_listitem.xml @@ -1,17 +1,19 @@ <?xml version="1.0" encoding="utf-8"?> -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="@dimen/listitem_threeline_height" android:orientation="horizontal" + android:paddingLeft="16dp" tools:background="@android:color/darker_gray" > <ImageView android:id="@+id/drag_handle" android:layout_width="100dp" android:layout_height="match_parent" - android:layout_marginLeft="8dp" + android:layout_marginLeft="-8dp" android:layout_marginRight="-64dp" android:contentDescription="@string/drag_handle_content_description" android:scaleType="fitXY" diff --git a/app/src/main/res/menu/queue.xml b/app/src/main/res/menu/queue.xml index c7dd4d371..127a17f7d 100644 --- a/app/src/main/res/menu/queue.xml +++ b/app/src/main/res/menu/queue.xml @@ -4,6 +4,12 @@ xmlns:custom="http://schemas.android.com/apk/res-auto"> <item + android:id="@+id/queue_lock" + android:title="" + android:menuCategory="container" + custom:showAsAction="always" /> + + <item android:id="@+id/refresh_item" android:title="@string/refresh_label" android:menuCategory="container" diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java index 2c863d378..bfc0cfb61 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java @@ -66,6 +66,7 @@ public class UserPreferences implements private static final String PREF_PERSISTENT_NOTIFICATION = "prefPersistNotify"; public static final String PREF_QUEUE_ADD_TO_FRONT = "prefQueueAddToFront"; public static final String PREF_HIDDEN_DRAWER_ITEMS = "prefHiddenDrawerItems"; + public static final String PREF_QUEUE_LOCKED = "prefQueueLocked"; // TODO: Make this value configurable private static final float PREF_AUTO_FLATTR_PLAYED_DURATION_THRESHOLD_DEFAULT = 0.8f; @@ -103,6 +104,7 @@ public class UserPreferences implements private int notifyPriority; private boolean persistNotify; private List<String> hiddenDrawerItems; + private boolean queueLocked; private UserPreferences(Context context) { this.context = context; @@ -172,6 +174,7 @@ public class UserPreferences implements } persistNotify = sp.getBoolean(PREF_PERSISTENT_NOTIFICATION, false); hiddenDrawerItems = Arrays.asList(StringUtils.split(sp.getString(PREF_HIDDEN_DRAWER_ITEMS, ""), ',')); + queueLocked = sp.getBoolean(PREF_QUEUE_LOCKED, false); } private int readThemeValue(String valueFromPrefs) { @@ -395,6 +398,11 @@ public class UserPreferences implements return instance.isFreshInstall; } + public static boolean isQueueLocked() { + instanceAvailable(); + return instance.queueLocked; + } + @Override public void onSharedPreferenceChanged(SharedPreferences sp, String key) { Log.d(TAG, "Registered change of user preferences. Key: " + key); @@ -468,6 +476,8 @@ public class UserPreferences implements persistNotify = sp.getBoolean(PREF_PERSISTENT_NOTIFICATION, false); } else if (key.equals(PREF_HIDDEN_DRAWER_ITEMS)) { hiddenDrawerItems = Arrays.asList(StringUtils.split(sp.getString(PREF_HIDDEN_DRAWER_ITEMS, ""), ',')); + } else if(key.equals(PREF_QUEUE_LOCKED)) { + queueLocked = sp.getBoolean(PREF_QUEUE_LOCKED, false); } } @@ -554,6 +564,15 @@ public class UserPreferences implements .commit(); } + public static void setQueueLocked(boolean locked) { + instanceAvailable(); + instance.queueLocked = locked; + PreferenceManager.getDefaultSharedPreferences(instance.context) + .edit() + .putBoolean(PREF_QUEUE_LOCKED, locked) + .commit(); + } + /** * Return the folder where the app stores all of its data. This method will diff --git a/core/src/main/res/drawable-hdpi/ic_lock_closed_grey600_24dp.png b/core/src/main/res/drawable-hdpi/ic_lock_closed_grey600_24dp.png Binary files differnew file mode 100644 index 000000000..b6dba1002 --- /dev/null +++ b/core/src/main/res/drawable-hdpi/ic_lock_closed_grey600_24dp.png diff --git a/core/src/main/res/drawable-hdpi/ic_lock_closed_white_24dp.png b/core/src/main/res/drawable-hdpi/ic_lock_closed_white_24dp.png Binary files differnew file mode 100644 index 000000000..5c60ab08a --- /dev/null +++ b/core/src/main/res/drawable-hdpi/ic_lock_closed_white_24dp.png diff --git a/core/src/main/res/drawable-hdpi/ic_lock_open_grey600_24dp.png b/core/src/main/res/drawable-hdpi/ic_lock_open_grey600_24dp.png Binary files differnew file mode 100644 index 000000000..a99e9f2b6 --- /dev/null +++ b/core/src/main/res/drawable-hdpi/ic_lock_open_grey600_24dp.png diff --git a/core/src/main/res/drawable-hdpi/ic_lock_open_white_24dp.png b/core/src/main/res/drawable-hdpi/ic_lock_open_white_24dp.png Binary files differnew file mode 100644 index 000000000..61c623ce2 --- /dev/null +++ b/core/src/main/res/drawable-hdpi/ic_lock_open_white_24dp.png diff --git a/core/src/main/res/drawable-mdpi/ic_lock_closed_grey600_24dp.png b/core/src/main/res/drawable-mdpi/ic_lock_closed_grey600_24dp.png Binary files differnew file mode 100644 index 000000000..f1627ce34 --- /dev/null +++ b/core/src/main/res/drawable-mdpi/ic_lock_closed_grey600_24dp.png diff --git a/core/src/main/res/drawable-mdpi/ic_lock_closed_white_24dp.png b/core/src/main/res/drawable-mdpi/ic_lock_closed_white_24dp.png Binary files differnew file mode 100644 index 000000000..8f18d11e6 --- /dev/null +++ b/core/src/main/res/drawable-mdpi/ic_lock_closed_white_24dp.png diff --git a/core/src/main/res/drawable-mdpi/ic_lock_open_grey600_24dp.png b/core/src/main/res/drawable-mdpi/ic_lock_open_grey600_24dp.png Binary files differnew file mode 100644 index 000000000..ada8d3be4 --- /dev/null +++ b/core/src/main/res/drawable-mdpi/ic_lock_open_grey600_24dp.png diff --git a/core/src/main/res/drawable-mdpi/ic_lock_open_white_24dp.png b/core/src/main/res/drawable-mdpi/ic_lock_open_white_24dp.png Binary files differnew file mode 100644 index 000000000..72d01c406 --- /dev/null +++ b/core/src/main/res/drawable-mdpi/ic_lock_open_white_24dp.png diff --git a/core/src/main/res/drawable-xhdpi/ic_lock_closed_grey600_24dp.png b/core/src/main/res/drawable-xhdpi/ic_lock_closed_grey600_24dp.png Binary files differnew file mode 100644 index 000000000..ca35f6d0a --- /dev/null +++ b/core/src/main/res/drawable-xhdpi/ic_lock_closed_grey600_24dp.png diff --git a/core/src/main/res/drawable-xhdpi/ic_lock_closed_white_24dp.png b/core/src/main/res/drawable-xhdpi/ic_lock_closed_white_24dp.png Binary files differnew file mode 100644 index 000000000..01fb55ca1 --- /dev/null +++ b/core/src/main/res/drawable-xhdpi/ic_lock_closed_white_24dp.png diff --git a/core/src/main/res/drawable-xhdpi/ic_lock_open_grey600_24dp.png b/core/src/main/res/drawable-xhdpi/ic_lock_open_grey600_24dp.png Binary files differnew file mode 100644 index 000000000..11d9a4b8b --- /dev/null +++ b/core/src/main/res/drawable-xhdpi/ic_lock_open_grey600_24dp.png diff --git a/core/src/main/res/drawable-xhdpi/ic_lock_open_white_24dp.png b/core/src/main/res/drawable-xhdpi/ic_lock_open_white_24dp.png Binary files differnew file mode 100644 index 000000000..01ca4b56c --- /dev/null +++ b/core/src/main/res/drawable-xhdpi/ic_lock_open_white_24dp.png diff --git a/core/src/main/res/drawable-xxhdpi/ic_lock_closed_grey600_24dp.png b/core/src/main/res/drawable-xxhdpi/ic_lock_closed_grey600_24dp.png Binary files differnew file mode 100644 index 000000000..311a7fa13 --- /dev/null +++ b/core/src/main/res/drawable-xxhdpi/ic_lock_closed_grey600_24dp.png diff --git a/core/src/main/res/drawable-xxhdpi/ic_lock_closed_white_24dp.png b/core/src/main/res/drawable-xxhdpi/ic_lock_closed_white_24dp.png Binary files differnew file mode 100644 index 000000000..39a163843 --- /dev/null +++ b/core/src/main/res/drawable-xxhdpi/ic_lock_closed_white_24dp.png diff --git a/core/src/main/res/drawable-xxhdpi/ic_lock_open_grey600_24dp.png b/core/src/main/res/drawable-xxhdpi/ic_lock_open_grey600_24dp.png Binary files differnew file mode 100644 index 000000000..c0552d564 --- /dev/null +++ b/core/src/main/res/drawable-xxhdpi/ic_lock_open_grey600_24dp.png diff --git a/core/src/main/res/drawable-xxhdpi/ic_lock_open_white_24dp.png b/core/src/main/res/drawable-xxhdpi/ic_lock_open_white_24dp.png Binary files differnew file mode 100644 index 000000000..46852d54f --- /dev/null +++ b/core/src/main/res/drawable-xxhdpi/ic_lock_open_white_24dp.png diff --git a/core/src/main/res/drawable-xxxhdpi/ic_lock_closed_grey600_24dp.png b/core/src/main/res/drawable-xxxhdpi/ic_lock_closed_grey600_24dp.png Binary files differnew file mode 100644 index 000000000..e41d5b9ee --- /dev/null +++ b/core/src/main/res/drawable-xxxhdpi/ic_lock_closed_grey600_24dp.png diff --git a/core/src/main/res/drawable-xxxhdpi/ic_lock_closed_white_24dp.png b/core/src/main/res/drawable-xxxhdpi/ic_lock_closed_white_24dp.png Binary files differnew file mode 100644 index 000000000..2376b7334 --- /dev/null +++ b/core/src/main/res/drawable-xxxhdpi/ic_lock_closed_white_24dp.png diff --git a/core/src/main/res/drawable-xxxhdpi/ic_lock_open_grey600_24dp.png b/core/src/main/res/drawable-xxxhdpi/ic_lock_open_grey600_24dp.png Binary files differnew file mode 100644 index 000000000..c281784dd --- /dev/null +++ b/core/src/main/res/drawable-xxxhdpi/ic_lock_open_grey600_24dp.png diff --git a/core/src/main/res/drawable-xxxhdpi/ic_lock_open_white_24dp.png b/core/src/main/res/drawable-xxxhdpi/ic_lock_open_white_24dp.png Binary files differnew file mode 100644 index 000000000..25ea3ab99 --- /dev/null +++ b/core/src/main/res/drawable-xxxhdpi/ic_lock_open_white_24dp.png diff --git a/core/src/main/res/values/attrs.xml b/core/src/main/res/values/attrs.xml index 368921f76..caedd7673 100644 --- a/core/src/main/res/values/attrs.xml +++ b/core/src/main/res/values/attrs.xml @@ -37,6 +37,8 @@ <attr name="av_ff_big" format="reference"/> <attr name="av_rew_big" format="reference"/> <attr name="ic_settings" format="reference"/> + <attr name="ic_lock_open" format="reference"/> + <attr name="ic_lock_closed" format="reference"/> <!-- Used in itemdescription --> <attr name="non_transparent_background" format="reference"/> diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index c0c2f06de..3421d3c52 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -161,6 +161,8 @@ <string name="unknown_media_key">AntennaPod - Unknown media key: %1$d</string> <!-- Queue operations --> + <string name="lock_queue">Lock queue</string> + <string name="unlock_queue">Unlock queue</string> <string name="clear_queue_label">Clear queue</string> <string name="undo">Undo</string> <string name="removed_from_queue">Item removed</string> diff --git a/core/src/main/res/values/styles.xml b/core/src/main/res/values/styles.xml index 4ac4a79fd..080203745 100644 --- a/core/src/main/res/values/styles.xml +++ b/core/src/main/res/values/styles.xml @@ -42,6 +42,8 @@ <item name="attr/av_ff_big">@drawable/ic_fast_forward_grey600_36dp</item> <item name="attr/av_rew_big">@drawable/ic_fast_rewind_grey600_36dp</item> <item name="attr/ic_settings">@drawable/ic_settings_grey600_24dp</item> + <item name="attr/ic_lock_open">@drawable/ic_lock_open_grey600_24dp</item> + <item name="attr/ic_lock_closed">@drawable/ic_lock_closed_grey600_24dp</item> </style> <style name="Theme.AntennaPod.Dark" parent="@style/Theme.AppCompat"> @@ -84,6 +86,8 @@ <item name="attr/av_ff_big">@drawable/ic_fast_forward_white_36dp</item> <item name="attr/av_rew_big">@drawable/ic_fast_rewind_white_36dp</item> <item name="attr/ic_settings">@drawable/ic_settings_white_24dp</item> + <item name="attr/ic_lock_open">@drawable/ic_lock_open_white_24dp</item> + <item name="attr/ic_lock_closed">@drawable/ic_lock_closed_white_24dp</item> </style> <style name="Theme.AntennaPod.Light.NoTitle" parent="@style/Theme.AppCompat.Light.NoActionBar"> @@ -129,6 +133,8 @@ <item name="attr/av_ff_big">@drawable/ic_fast_forward_grey600_36dp</item> <item name="attr/av_rew_big">@drawable/ic_fast_rewind_grey600_36dp</item> <item name="attr/ic_settings">@drawable/ic_settings_grey600_24dp</item> + <item name="attr/ic_lock_open">@drawable/ic_lock_open_grey600_24dp</item> + <item name="attr/ic_lock_closed">@drawable/ic_lock_closed_grey600_24dp</item> </style> <style name="Theme.AntennaPod.Dark.NoTitle" parent="@style/Theme.AppCompat.NoActionBar"> @@ -173,6 +179,8 @@ <item name="attr/av_ff_big">@drawable/ic_fast_forward_white_36dp</item> <item name="attr/av_rew_big">@drawable/ic_fast_rewind_white_36dp</item> <item name="attr/ic_settings">@drawable/ic_settings_white_24dp</item> + <item name="attr/ic_lock_open">@drawable/ic_lock_open_white_24dp</item> + <item name="attr/ic_lock_closed">@drawable/ic_lock_closed_white_24dp</item> </style> <style name="Theme.AntennaPod.VideoPlayer" parent="@style/Theme.AntennaPod.Dark"> |