From 4cd84da5a33cbd905963ea0f41fbcbe1ca8d3389 Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Sat, 16 Jun 2012 20:06:38 +0200 Subject: Implemented Actionmode for FeedItemlistFragment --- .../podfetcher/activity/FeedItemlistActivity.java | 4 +- src/de/podfetcher/activity/ItemviewActivity.java | 14 +-- src/de/podfetcher/adapter/FeedItemlistAdapter.java | 12 ++- src/de/podfetcher/feed/FeedManager.java | 18 ++++ .../podfetcher/fragment/FeedItemlistFragment.java | 115 +++++++++++++++++++-- 5 files changed, 136 insertions(+), 27 deletions(-) (limited to 'src') diff --git a/src/de/podfetcher/activity/FeedItemlistActivity.java b/src/de/podfetcher/activity/FeedItemlistActivity.java index 172259aad..517b9799a 100644 --- a/src/de/podfetcher/activity/FeedItemlistActivity.java +++ b/src/de/podfetcher/activity/FeedItemlistActivity.java @@ -44,8 +44,8 @@ public class FeedItemlistActivity extends SherlockFragmentActivity { fT.commit(); } - + /* public void onButActionClicked(View v) { Log.d(TAG, "Button clicked"); - } + }*/ } diff --git a/src/de/podfetcher/activity/ItemviewActivity.java b/src/de/podfetcher/activity/ItemviewActivity.java index 17d00f237..a3fe92f35 100644 --- a/src/de/podfetcher/activity/ItemviewActivity.java +++ b/src/de/podfetcher/activity/ItemviewActivity.java @@ -62,19 +62,7 @@ public class ItemviewActivity extends SherlockActivity { butPlay.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - // Start playback Service - Intent launchIntent = new Intent(v.getContext(), - PlaybackService.class); - launchIntent.putExtra(PlaybackService.EXTRA_MEDIA_ID, item - .getMedia().getId()); - launchIntent.putExtra(PlaybackService.EXTRA_FEED_ID, item - .getFeed().getId()); - v.getContext().startService(launchIntent); - - // Launch Mediaplayer - Intent playerIntent = new Intent(v.getContext(), - MediaplayerActivity.class); - v.getContext().startActivity(playerIntent); + manager.playMedia(v.getContext(), item.getMedia()); } }); diff --git a/src/de/podfetcher/adapter/FeedItemlistAdapter.java b/src/de/podfetcher/adapter/FeedItemlistAdapter.java index d888b72a9..e28a77d1c 100644 --- a/src/de/podfetcher/adapter/FeedItemlistAdapter.java +++ b/src/de/podfetcher/adapter/FeedItemlistAdapter.java @@ -6,18 +6,21 @@ import de.podfetcher.feed.FeedItem; import de.podfetcher.util.Converter; import de.podfetcher.R; import android.widget.ArrayAdapter; +import android.widget.Button; import android.widget.TextView; import android.view.LayoutInflater; import android.view.View; +import android.view.View.OnClickListener; import android.view.ViewGroup; import android.content.Context; public class FeedItemlistAdapter extends ArrayAdapter { - + private OnClickListener onButActionClicked; public FeedItemlistAdapter(Context context, - int textViewResourceId, List objects) { + int textViewResourceId, List objects, OnClickListener onButActionClicked) { super(context, textViewResourceId, objects); + this.onButActionClicked = onButActionClicked; } @Override @@ -31,7 +34,8 @@ public class FeedItemlistAdapter extends ArrayAdapter { convertView = inflater.inflate(R.layout.feeditemlist_item, null); holder.title = (TextView) convertView.findViewById(R.id.txtvItemname); holder.size = (TextView) convertView.findViewById(R.id.txtvItemsize); - + holder.butAction = (Button) convertView.findViewById(R.id.butAction); + convertView.setTag(holder); } else { holder = (Holder) convertView.getTag(); @@ -39,6 +43,7 @@ public class FeedItemlistAdapter extends ArrayAdapter { holder.title.setText(item.getTitle()); holder.size.setText(Converter.byteToString(item.getMedia().getSize())); + holder.butAction.setOnClickListener(onButActionClicked); return convertView; } @@ -46,5 +51,6 @@ public class FeedItemlistAdapter extends ArrayAdapter { static class Holder { TextView title; TextView size; + Button butAction; } } diff --git a/src/de/podfetcher/feed/FeedManager.java b/src/de/podfetcher/feed/FeedManager.java index 4362727c8..716aa36f7 100644 --- a/src/de/podfetcher/feed/FeedManager.java +++ b/src/de/podfetcher/feed/FeedManager.java @@ -4,8 +4,11 @@ import java.io.File; import java.util.ArrayList; import java.util.Date; +import de.podfetcher.activity.MediaplayerActivity; +import de.podfetcher.service.PlaybackService; import de.podfetcher.storage.*; import android.content.Context; +import android.content.Intent; import android.database.Cursor; import android.util.Log; @@ -36,6 +39,21 @@ public class FeedManager { } return singleton; } + + /** Play FeedMedia and start the playback service + launch Mediaplayer Activity. */ + public void playMedia(Context context, FeedMedia media) { + // Start playback Service + Intent launchIntent = new Intent(context, + PlaybackService.class); + launchIntent.putExtra(PlaybackService.EXTRA_MEDIA_ID, media.getId()); + launchIntent.putExtra(PlaybackService.EXTRA_FEED_ID, media.getItem().getFeed().getId()); + context.startService(launchIntent); + + // Launch Mediaplayer + Intent playerIntent = new Intent(context, + MediaplayerActivity.class); + context.startActivity(playerIntent); + } /** Remove media item that has been downloaded. */ public boolean deleteFeedMedia(Context context, FeedMedia media) { diff --git a/src/de/podfetcher/fragment/FeedItemlistFragment.java b/src/de/podfetcher/fragment/FeedItemlistFragment.java index 3081a95c5..caafdccaa 100644 --- a/src/de/podfetcher/fragment/FeedItemlistFragment.java +++ b/src/de/podfetcher/fragment/FeedItemlistFragment.java @@ -6,51 +6,148 @@ import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; +import android.view.View.OnClickListener; import android.widget.ListView; import com.actionbarsherlock.app.SherlockListFragment; +import com.actionbarsherlock.view.ActionMode; +import com.actionbarsherlock.view.Menu; +import com.actionbarsherlock.view.MenuInflater; +import com.actionbarsherlock.view.MenuItem; +import de.podfetcher.R; import de.podfetcher.activity.ItemviewActivity; import de.podfetcher.adapter.FeedItemlistAdapter; import de.podfetcher.feed.FeedItem; import de.podfetcher.feed.FeedManager; +import de.podfetcher.storage.DownloadRequester; public class FeedItemlistFragment extends SherlockListFragment { private static final String TAG = "FeedItemlistFragment"; public static final String EXTRA_SELECTED_FEEDITEM = "extra.de.podfetcher.activity.selected_feeditem"; - + private FeedItemlistAdapter fila; private FeedManager manager; + private DownloadRequester requester; /** The feed which the activity displays */ private ArrayList items; - + + private FeedItem selectedItem; + private ActionMode mActionMode; + public FeedItemlistFragment(ArrayList items) { super(); this.items = items; manager = FeedManager.getInstance(); + requester = DownloadRequester.getInstance(); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - fila = new FeedItemlistAdapter(getActivity(), 0, items); + fila = new FeedItemlistAdapter(getActivity(), 0, items, + onButActionClicked); setListAdapter(fila); + } - + @Override + public void onPause() { + super.onPause(); + if (mActionMode != null) { + mActionMode.finish(); + } } @Override public void onListItemClick(ListView l, View v, int position, long id) { FeedItem selection = fila.getItem(position); Intent showItem = new Intent(getActivity(), ItemviewActivity.class); - showItem.putExtra(FeedlistFragment.EXTRA_SELECTED_FEED, selection.getFeed().getId()); + showItem.putExtra(FeedlistFragment.EXTRA_SELECTED_FEED, selection + .getFeed().getId()); showItem.putExtra(EXTRA_SELECTED_FEEDITEM, selection.getId()); startActivity(showItem); } - - public void onButActionClicked(View v) { - Log.d(TAG, "Button clicked"); - } + + private final OnClickListener onButActionClicked = new OnClickListener() { + @Override + public void onClick(View v) { + int index = getListView().getPositionForView(v); + if (index != ListView.INVALID_POSITION) { + FeedItem newSelectedItem = items.get(index); + if (newSelectedItem != selectedItem) { + if (mActionMode != null) { + mActionMode.finish(); + } + + selectedItem = newSelectedItem; + mActionMode = getSherlockActivity().startActionMode( + mActionModeCallback); + } else { + mActionMode.finish(); + } + + } + } + }; + + private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() { + + @Override + public boolean onPrepareActionMode(ActionMode mode, Menu menu) { + return false; + } + + @Override + public void onDestroyActionMode(ActionMode mode) { + mActionMode = null; + selectedItem = null; + } + + @Override + public boolean onCreateActionMode(ActionMode mode, Menu menu) { + MenuInflater inflater = mode.getMenuInflater(); + inflater.inflate(R.menu.feeditemlist, menu); + mode.setTitle(selectedItem.getTitle()); + + if (selectedItem.getMedia().isDownloaded()) { + menu.findItem(R.id.play_item).setVisible(true); + menu.findItem(R.id.remove_item).setVisible(true); + } else if (selectedItem.getMedia().getFile_url() == null) { + menu.findItem(R.id.download_item).setVisible(true); + } else { + menu.findItem(R.id.cancel_download_item).setVisible(true); + } + + return true; + + } + + @Override + public boolean onActionItemClicked(ActionMode mode, MenuItem item) { + switch (item.getItemId()) { + case R.id.download_item: + requester.downloadMedia(getSherlockActivity(), + selectedItem.getMedia()); + break; + case R.id.play_item: + manager.playMedia(getSherlockActivity(), + selectedItem.getMedia()); + break; + case R.id.remove_item: + manager.deleteFeedMedia(getSherlockActivity(), + selectedItem.getMedia()); + break; + case R.id.cancel_download_item: + requester.cancelDownload(getSherlockActivity(), selectedItem + .getMedia().getDownloadId()); + break; + + } + mode.finish(); + return true; + } + }; + } -- cgit v1.2.3