summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordaniel oeh <daniel.oeh@gmail.com>2013-01-27 19:37:49 +0100
committerdaniel oeh <daniel.oeh@gmail.com>2013-01-27 19:37:49 +0100
commita227e0ebfdbde997f81b6a0715b55c3d63137819 (patch)
treedebd948191321335d88704d4ddc21c855a3b2b2d
parentbe9018e84385e2266e4823505721e0c5b3cabc55 (diff)
downloadAntennaPod-a227e0ebfdbde997f81b6a0715b55c3d63137819.zip
Implemented queue and unread items menu
-rw-r--r--res/layout/feeditemlist_header.xml16
-rw-r--r--src/de/danoeh/antennapod/adapter/ExternalEpisodesListAdapter.java28
-rw-r--r--src/de/danoeh/antennapod/fragment/EpisodesFragment.java73
3 files changed, 101 insertions, 16 deletions
diff --git a/res/layout/feeditemlist_header.xml b/res/layout/feeditemlist_header.xml
index 9f7b4dad9..cfe573eac 100644
--- a/res/layout/feeditemlist_header.xml
+++ b/res/layout/feeditemlist_header.xml
@@ -17,5 +17,21 @@
android:textColor="@color/bright_blue"
android:textSize="@dimen/text_size_large"
android:textStyle="bold" />
+
+ <ImageButton
+ android:id="@+id/butAction"
+ android:layout_width="48dp"
+ android:layout_height="match_parent"
+ android:layout_alignParentBottom="true"
+ android:layout_alignParentRight="true"
+ android:background="?attr/borderless_button"
+ android:clickable="false"
+ android:focusable="false"
+ android:focusableInTouchMode="false"
+ android:paddingLeft="16dp"
+ android:paddingRight="16dp"
+ android:paddingTop="16dp"
+ android:scaleType="fitEnd"
+ android:src="?attr/spinner_button" />
</RelativeLayout> \ No newline at end of file
diff --git a/src/de/danoeh/antennapod/adapter/ExternalEpisodesListAdapter.java b/src/de/danoeh/antennapod/adapter/ExternalEpisodesListAdapter.java
index 4a69a418a..1b771b7b9 100644
--- a/src/de/danoeh/antennapod/adapter/ExternalEpisodesListAdapter.java
+++ b/src/de/danoeh/antennapod/adapter/ExternalEpisodesListAdapter.java
@@ -23,7 +23,7 @@ import de.danoeh.antennapod.util.EpisodeFilter;
*/
public class ExternalEpisodesListAdapter extends BaseExpandableListAdapter {
private static final String TAG = "ExternalEpisodesListAdapter";
-
+
public static final int GROUP_POS_QUEUE = 0;
public static final int GROUP_POS_UNREAD = 1;
@@ -32,16 +32,19 @@ public class ExternalEpisodesListAdapter extends BaseExpandableListAdapter {
private List<FeedItem> unreadItems;
private List<FeedItem> queueItems;
- ActionButtonCallback callback;
+ private ActionButtonCallback feedItemActionCallback;
+ private OnGroupActionClicked groupActionCallback;
public ExternalEpisodesListAdapter(Context context,
List<FeedItem> unreadItems, List<FeedItem> queueItems,
- ActionButtonCallback callback) {
+ ActionButtonCallback callback,
+ OnGroupActionClicked groupActionCallback) {
super();
this.context = context;
this.unreadItems = unreadItems;
this.queueItems = queueItems;
- this.callback = callback;
+ this.feedItemActionCallback = callback;
+ this.groupActionCallback = groupActionCallback;
}
@Override
@@ -110,7 +113,7 @@ public class ExternalEpisodesListAdapter extends BaseExpandableListAdapter {
@Override
public void onClick(View v) {
- callback.onActionButtonPressed(item);
+ feedItemActionCallback.onActionButtonPressed(item);
}
});
@@ -155,13 +158,15 @@ public class ExternalEpisodesListAdapter extends BaseExpandableListAdapter {
}
@Override
- public View getGroupView(int groupPosition, boolean isExpanded,
+ public View getGroupView(final int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.feeditemlist_header, null);
TextView headerTitle = (TextView) convertView
.findViewById(R.id.txtvHeaderTitle);
+ ImageButton actionButton = (ImageButton) convertView
+ .findViewById(R.id.butAction);
String headerString = null;
if (groupPosition == 0) {
headerString = context.getString(R.string.queue_label);
@@ -175,7 +180,14 @@ public class ExternalEpisodesListAdapter extends BaseExpandableListAdapter {
}
}
headerTitle.setText(headerString);
+ actionButton.setFocusable(false);
+ actionButton.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ groupActionCallback.onClick(getGroupId(groupPosition));
+ }
+ });
return convertView;
}
@@ -199,4 +211,8 @@ public class ExternalEpisodesListAdapter extends BaseExpandableListAdapter {
return true;
}
+ public interface OnGroupActionClicked {
+ public void onClick(long groupId);
+ }
+
}
diff --git a/src/de/danoeh/antennapod/fragment/EpisodesFragment.java b/src/de/danoeh/antennapod/fragment/EpisodesFragment.java
index 1d2a2861f..2ee3e85de 100644
--- a/src/de/danoeh/antennapod/fragment/EpisodesFragment.java
+++ b/src/de/danoeh/antennapod/fragment/EpisodesFragment.java
@@ -16,6 +16,7 @@ import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import com.actionbarsherlock.app.SherlockFragment;
+import com.actionbarsherlock.view.Menu;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.R;
@@ -37,11 +38,12 @@ public class EpisodesFragment extends SherlockFragment {
private ExternalEpisodesListAdapter adapter;
protected FeedItem selectedItem = null;
+ protected long selectedGroupId = -1;
protected boolean contextMenuClosed = true;
@Override
- public void onPause() {
- super.onPause();
+ public void onDestroy() {
+ super.onDestroy();
try {
getActivity().unregisterReceiver(contentUpdate);
} catch (IllegalArgumentException e) {
@@ -73,8 +75,18 @@ public class EpisodesFragment extends SherlockFragment {
@Override
public void onActionButtonPressed(FeedItem item) {
+ resetContextMenuSelection();
selectedItem = item;
- contextMenuClosed = true;
+ listView.showContextMenu();
+ }
+ };
+
+ protected ExternalEpisodesListAdapter.OnGroupActionClicked groupActionCallback = new ExternalEpisodesListAdapter.OnGroupActionClicked() {
+
+ @Override
+ public void onClick(long groupId) {
+ resetContextMenuSelection();
+ selectedGroupId = groupId;
listView.showContextMenu();
}
};
@@ -84,7 +96,8 @@ public class EpisodesFragment extends SherlockFragment {
super.onViewCreated(view, savedInstanceState);
FeedManager manager = FeedManager.getInstance();
adapter = new ExternalEpisodesListAdapter(getActivity(),
- manager.getUnreadItems(), manager.getQueue(), adapterCallback);
+ manager.getUnreadItems(), manager.getQueue(), adapterCallback,
+ groupActionCallback);
listView.setAdapter(adapter);
listView.expandGroup(ExternalEpisodesListAdapter.GROUP_POS_QUEUE);
listView.expandGroup(ExternalEpisodesListAdapter.GROUP_POS_UNREAD);
@@ -126,7 +139,7 @@ public class EpisodesFragment extends SherlockFragment {
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
if (!contextMenuClosed) { // true if context menu was cancelled before
- selectedItem = null;
+ resetContextMenuSelection();
}
contextMenuClosed = false;
listView.setOnItemLongClickListener(null);
@@ -143,13 +156,23 @@ public class EpisodesFragment extends SherlockFragment {
}
}, selectedItem, false);
+ } else if (selectedGroupId == ExternalEpisodesListAdapter.GROUP_POS_QUEUE) {
+ menu.add(Menu.NONE, R.id.clear_queue_item, Menu.NONE, getActivity()
+ .getString(R.string.clear_queue_label));
+ menu.add(Menu.NONE, R.id.download_all_item, Menu.NONE,
+ getActivity().getString(R.string.download_all));
+ } else if (selectedGroupId == ExternalEpisodesListAdapter.GROUP_POS_UNREAD) {
+ menu.add(Menu.NONE, R.id.mark_all_read_item, Menu.NONE,
+ getActivity().getString(R.string.mark_all_read_label));
+ menu.add(Menu.NONE, R.id.enqueue_all_item, Menu.NONE, getActivity()
+ .getString(R.string.enqueue_all_new));
}
}
@Override
public boolean onContextItemSelected(android.view.MenuItem item) {
boolean handled = false;
-
+ FeedManager manager = FeedManager.getInstance();
if (selectedItem != null) {
try {
handled = FeedItemMenuHandler.onMenuItemClicked(
@@ -159,13 +182,43 @@ public class EpisodesFragment extends SherlockFragment {
DownloadRequestErrorDialogCreator.newRequestErrorDialog(
getActivity(), e.getMessage());
}
- if (handled) {
- adapter.notifyDataSetChanged();
+
+ } else if (selectedGroupId == ExternalEpisodesListAdapter.GROUP_POS_QUEUE) {
+ handled = true;
+ switch (item.getItemId()) {
+ case R.id.clear_queue_item:
+ manager.clearQueue(getActivity());
+ break;
+ case R.id.download_all_item:
+ manager.downloadAllItemsInQueue(getActivity());
+ break;
+ default:
+ handled = false;
+ }
+ } else if (selectedGroupId == ExternalEpisodesListAdapter.GROUP_POS_UNREAD) {
+ handled = true;
+ switch (item.getItemId()) {
+ case R.id.mark_all_read_item:
+ manager.markAllItemsRead(getActivity());
+ break;
+ case R.id.enqueue_all_item:
+ manager.enqueueAllNewItems(getActivity());
+ break;
+ default:
+ handled = false;
}
}
- selectedItem = null;
- contextMenuClosed = true;
+
+ if (handled) {
+ adapter.notifyDataSetChanged();
+ }
+ resetContextMenuSelection();
return handled;
}
+ private void resetContextMenuSelection() {
+ selectedItem = null;
+ selectedGroupId = -1;
+ contextMenuClosed = true;
+ }
}