From 77840bea99c206a593b14f2683e0d520d2274c91 Mon Sep 17 00:00:00 2001 From: Tom Hennen Date: Sun, 11 Jan 2015 18:45:53 -0500 Subject: Updated QueueFragment to have a refresh button. Issue #595 Also resolved an issue that may have been latent when 'All Episodes' was default. Namely, that the search and other option menus didn't show up until you navigated away and then back to the fragment. This was happening because the items weren't loaded yet, which prevented the options menu from being created. If we switch back to 'All Episodes' as being default, this problem may appear again. --- .../danoeh/antennapod/fragment/QueueFragment.java | 50 ++++++++++++++++++++++ app/src/main/res/menu/queue.xml | 13 ++++++ 2 files changed, 63 insertions(+) create mode 100644 app/src/main/res/menu/queue.xml (limited to 'app/src') 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 ce77229d9..0c794fc44 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -3,6 +3,7 @@ package de.danoeh.antennapod.fragment; import android.app.Activity; import android.content.Context; import android.os.AsyncTask; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.support.v4.app.Fragment; @@ -30,11 +31,15 @@ import de.danoeh.antennapod.adapter.DefaultActionButtonCallback; import de.danoeh.antennapod.adapter.QueueListAdapter; import de.danoeh.antennapod.core.asynctask.DownloadObserver; import de.danoeh.antennapod.core.feed.EventDistributor; +import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; +import de.danoeh.antennapod.core.service.download.DownloadService; import de.danoeh.antennapod.core.service.download.Downloader; import de.danoeh.antennapod.core.storage.DBReader; +import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.storage.DBWriter; +import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.menuhandler.MenuItemUtils; import de.danoeh.antennapod.menuhandler.NavDrawerActivity; @@ -57,6 +62,7 @@ public class QueueFragment extends Fragment { private boolean itemsLoaded = false; private boolean viewsCreated = false; + private boolean isUpdatingFeeds = false; private AtomicReference activity = new AtomicReference(); @@ -125,10 +131,19 @@ public class QueueFragment extends Fragment { resetViewState(); } + private final MenuItemUtils.UpdateRefreshMenuItemChecker updateRefreshMenuItemChecker = new MenuItemUtils.UpdateRefreshMenuItemChecker() { + @Override + public boolean isRefreshing() { + return DownloadService.isRunning && DownloadRequester.getInstance().isDownloadingFeeds(); + } + }; + @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); if (itemsLoaded && !MenuItemUtils.isActivityDrawerOpen((NavDrawerActivity) getActivity())) { + inflater.inflate(R.menu.queue, menu); + final SearchView sv = new SearchView(getActivity()); MenuItemUtils.addSearchItem(menu, sv); sv.setQueryHint(getString(R.string.search_hint)); @@ -145,7 +160,27 @@ public class QueueFragment extends Fragment { return false; } }); + isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker); + } + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (!super.onOptionsItemSelected(item)) { + switch (item.getItemId()) { + case R.id.refresh_item: + List feeds = ((MainActivity) getActivity()).getFeeds(); + if (feeds != null) { + DBTasks.refreshAllFeeds(getActivity(), feeds); + } + return true; + default: + return false; + } + } else { + return true; } + } @Override @@ -258,6 +293,18 @@ public class QueueFragment extends Fragment { downloadObserver.onResume(); } listAdapter.notifyDataSetChanged(); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + // we need to refresh the options menu because it sometimes + // needs data that may have just been loaded. + // Things will still work on APIs lower than honeycomb + // but they may have to change away from this view + // and then back to get the options menu. + Activity theActivity = activity.get(); + if (theActivity != null) { + theActivity.invalidateOptionsMenu(); + } + } } private DownloadObserver.Callback downloadObserverCallback = new DownloadObserver.Callback() { @@ -307,6 +354,9 @@ public class QueueFragment extends Fragment { public void update(EventDistributor eventDistributor, Integer arg) { if ((arg & EVENTS) != 0) { startItemLoader(); + if (isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) { + getActivity().supportInvalidateOptionsMenu(); + } } } }; diff --git a/app/src/main/res/menu/queue.xml b/app/src/main/res/menu/queue.xml new file mode 100644 index 000000000..0f06ea952 --- /dev/null +++ b/app/src/main/res/menu/queue.xml @@ -0,0 +1,13 @@ + + + + + + + \ No newline at end of file -- cgit v1.2.3 From 86e5e9ea1373980576f76ad1abf676a4c9911fac Mon Sep 17 00:00:00 2001 From: Tom Hennen Date: Sun, 11 Jan 2015 18:53:11 -0500 Subject: Simlified invalidation of options menu. #595 --- .../java/de/danoeh/antennapod/fragment/QueueFragment.java | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) (limited to 'app/src') 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 0c794fc44..302739b6a 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -294,17 +294,9 @@ public class QueueFragment extends Fragment { } listAdapter.notifyDataSetChanged(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { - // we need to refresh the options menu because it sometimes - // needs data that may have just been loaded. - // Things will still work on APIs lower than honeycomb - // but they may have to change away from this view - // and then back to get the options menu. - Activity theActivity = activity.get(); - if (theActivity != null) { - theActivity.invalidateOptionsMenu(); - } - } + // we need to refresh the options menu because it sometimes + // needs data that may have just been loaded. + getActivity().supportInvalidateOptionsMenu(); } private DownloadObserver.Callback downloadObserverCallback = new DownloadObserver.Callback() { -- cgit v1.2.3 From 2d68f025d7429103e702c3ba4e15b0529573aa02 Mon Sep 17 00:00:00 2001 From: Tim Butram Date: Tue, 26 Aug 2014 21:18:00 -0400 Subject: Added option to delete epidode upon completion of playback. Conflicts: app/dslv --- app/src/main/res/xml/preferences.xml | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'app/src') diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 5175acdcb..dedfb74c3 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -35,6 +35,12 @@ android:key="prefFollowQueue" android:summary="@string/pref_followQueue_sum" android:title="@string/pref_followQueue_title"/> + Date: Sun, 18 Jan 2015 19:53:53 -0500 Subject: Option to delete episode after playback Fixes #498 --- app/src/main/res/xml/preferences.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'app/src') diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index dedfb74c3..a5887e205 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -39,13 +39,13 @@ android:defaultValue="false" android:enabled="true" android:key="prefAutoDelete" - android:summary="Delete epidsode when playback completes" - android:title="Delete On Finish"/> + android:summary="@string/pref_auto_delete_sum" + android:title="@string/pref_auto_delete_title"/> - + Date: Thu, 22 Jan 2015 23:37:07 -0500 Subject: Options to sort queue by date --- .../de/danoeh/antennapod/fragment/QueueFragment.java | 6 ++++++ app/src/main/res/menu/queue.xml | 18 ++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) (limited to 'app/src') 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 302739b6a..185af0e93 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -174,6 +174,12 @@ public class QueueFragment extends Fragment { DBTasks.refreshAllFeeds(getActivity(), feeds); } return true; + case R.id.queue_sort_date_asc: + DBWriter.sortQueueItemByDate(getActivity(), true, true); + return true; + case R.id.queue_sort_date_desc: + DBWriter.sortQueueItemByDate(getActivity(), false, true); + return true; default: return false; } diff --git a/app/src/main/res/menu/queue.xml b/app/src/main/res/menu/queue.xml index 0f06ea952..fa4d21b21 100644 --- a/app/src/main/res/menu/queue.xml +++ b/app/src/main/res/menu/queue.xml @@ -9,5 +9,19 @@ android:menuCategory="container" custom:showAsAction="ifRoom" android:icon="?attr/navigation_refresh"/> - - \ No newline at end of file + + + + + + + + + + -- cgit v1.2.3 From 9764b8093544857261bb5abf99c1ab9dbfcda65a Mon Sep 17 00:00:00 2001 From: drabux Date: Sat, 24 Jan 2015 13:17:19 -0500 Subject: Options to sort queue refactor, add sort by alpha and duration --- .../danoeh/antennapod/fragment/QueueFragment.java | 17 +++++++- app/src/main/res/menu/queue.xml | 50 +++++++++++++++++++--- 2 files changed, 58 insertions(+), 9 deletions(-) (limited to 'app/src') 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 185af0e93..ca8543b4c 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -40,6 +40,7 @@ import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.storage.DownloadRequester; +import de.danoeh.antennapod.core.util.QueueSorter; import de.danoeh.antennapod.menuhandler.MenuItemUtils; import de.danoeh.antennapod.menuhandler.NavDrawerActivity; @@ -174,11 +175,23 @@ public class QueueFragment extends Fragment { DBTasks.refreshAllFeeds(getActivity(), feeds); } return true; + case R.id.queue_sort_alpha_asc: + QueueSorter.sort(getActivity(), QueueSorter.Rule.ALPHA_ASC, true); + return true; + case R.id.queue_sort_alpha_desc: + QueueSorter.sort(getActivity(), QueueSorter.Rule.ALPHA_DESC, true); + return true; case R.id.queue_sort_date_asc: - DBWriter.sortQueueItemByDate(getActivity(), true, true); + QueueSorter.sort(getActivity(), QueueSorter.Rule.DATE_ASC, true); return true; case R.id.queue_sort_date_desc: - DBWriter.sortQueueItemByDate(getActivity(), false, true); + QueueSorter.sort(getActivity(), QueueSorter.Rule.DATE_DESC, true); + return true; + case R.id.queue_sort_duration_asc: + QueueSorter.sort(getActivity(), QueueSorter.Rule.DURATION_ASC, true); + return true; + case R.id.queue_sort_duration_desc: + QueueSorter.sort(getActivity(), QueueSorter.Rule.DURATION_DESC, true); return true; default: return false; diff --git a/app/src/main/res/menu/queue.xml b/app/src/main/res/menu/queue.xml index fa4d21b21..b85279e5a 100644 --- a/app/src/main/res/menu/queue.xml +++ b/app/src/main/res/menu/queue.xml @@ -15,13 +15,49 @@ android:title="@string/sort"> - - + + + + + + + + + + + + + + + + + + + + + + + + - + -- cgit v1.2.3 From ad583e453d6be87b1c0d9a045119114c75faaf23 Mon Sep 17 00:00:00 2001 From: Tobias Preuss Date: Sun, 25 Jan 2015 10:27:46 +0100 Subject: Use design time attributes to assist layouting and value preview. + See: http://tools.android.com/tips/layout-designtime-attributes + This commit introduces no functional code changes! --- app/src/main/res/layout-v14/directory_chooser.xml | 15 +++++-- app/src/main/res/layout/audioplayer_activity.xml | 49 +++++++++++++++------- app/src/main/res/layout/cover_fragment.xml | 4 +- app/src/main/res/layout/directory_chooser.xml | 12 ++++-- .../res/layout/downloaded_episodeslist_item.xml | 27 ++++++++---- app/src/main/res/layout/downloadlist_item.xml | 25 +++++++---- app/src/main/res/layout/downloadlog_item.xml | 24 ++++++++--- .../main/res/layout/ellipsize_start_listitem.xml | 8 +++- .../main/res/layout/external_player_fragment.xml | 17 ++++++-- app/src/main/res/layout/feedinfo.xml | 30 +++++++++---- .../main/res/layout/feeditem_fragment_header.xml | 27 ++++++++---- app/src/main/res/layout/feeditemlist_header.xml | 18 +++++--- app/src/main/res/layout/feeditemlist_item.xml | 33 +++++++++++---- app/src/main/res/layout/gpodnet_podcast_list.xml | 11 +++-- .../main/res/layout/gpodnet_podcast_listitem.xml | 14 +++++-- .../main/res/layout/gpodnetauth_credentials.xml | 5 ++- app/src/main/res/layout/gpodnetauth_device.xml | 4 +- .../main/res/layout/itemdescription_listitem.xml | 14 +++++-- app/src/main/res/layout/main.xml | 11 +++-- app/src/main/res/layout/nav_feedlistitem.xml | 10 ++++- app/src/main/res/layout/nav_list.xml | 15 +++++-- app/src/main/res/layout/nav_listitem.xml | 16 +++++-- app/src/main/res/layout/nav_section_item.xml | 6 ++- app/src/main/res/layout/new_episodes_fragment.xml | 10 ++++- app/src/main/res/layout/new_episodes_listitem.xml | 30 +++++++++---- app/src/main/res/layout/onlinefeedview_header.xml | 17 ++++++-- app/src/main/res/layout/opml_import.xml | 11 +++-- app/src/main/res/layout/queue_listitem.xml | 25 +++++++---- app/src/main/res/layout/searchlist_item.xml | 21 +++++++--- app/src/main/res/layout/secondary_action.xml | 4 +- app/src/main/res/layout/simplechapter_item.xml | 24 ++++++++--- app/src/main/res/layout/time_dialog.xml | 7 +++- app/src/main/res/layout/vertical_list_divider.xml | 4 +- app/src/main/res/values/design_time_attributes.xml | 24 +++++++++++ 34 files changed, 427 insertions(+), 145 deletions(-) create mode 100644 app/src/main/res/values/design_time_attributes.xml (limited to 'app/src') diff --git a/app/src/main/res/layout-v14/directory_chooser.xml b/app/src/main/res/layout-v14/directory_chooser.xml index fb45d9937..8f9c4ee93 100644 --- a/app/src/main/res/layout-v14/directory_chooser.xml +++ b/app/src/main/res/layout-v14/directory_chooser.xml @@ -1,7 +1,9 @@ + android:layout_height="match_parent" + tools:background="@android:color/darker_gray"> + android:src="?attr/navigation_up" + tools:src="@drawable/navigation_up" + tools:background="@android:color/holo_green_dark" /> + android:textStyle="bold" + tools:background="@android:color/holo_green_dark"> + android:singleLine="true" + tools:text="/path/to/selected/folder" + tools:background="@android:color/holo_green_dark"/> + android:layout_height="match_parent" + tools:background="@android:color/holo_red_dark"> + android:minHeight="?attr/actionBarSize" + tools:background="@android:color/darker_gray"> + android:textSize="16sp" + tools:text="Audio title" + tools:background="@android:color/holo_green_dark" /> + android:gravity="right" + tools:src="@drawable/ic_stat_antenna_default" + tools:background="@android:color/holo_green_dark" /> @@ -63,7 +70,8 @@ android:layout_width="match_parent" android:layout_height="@dimen/audioplayer_playercontrols_length" android:layout_alignParentBottom="true" - android:background="?attr/overlay_background"> + android:background="?attr/overlay_background" + tools:background="@android:color/holo_purple"> + android:src="?attr/av_pause" + tools:src="@drawable/ic_pause_white_36dp" + tools:background="@android:color/holo_green_dark" /> + android:src="?attr/av_rew_big" + tools:src="@drawable/ic_fast_rewind_white_36dp" + tools:background="@android:color/holo_blue_dark" /> + android:src="?attr/av_ff_big" + tools:src="@drawable/ic_fast_forward_white_36dp" + tools:background="@android:color/holo_blue_dark" />