Files
AntennaPod/src/de/podfetcher/fragment/FeedlistFragment.java
2012-06-24 22:57:29 +02:00

180 lines
4.9 KiB
Java

package de.podfetcher.fragment;
import de.podfetcher.R;
import de.podfetcher.feed.*;
import de.podfetcher.activity.*;
import de.podfetcher.adapter.FeedlistAdapter;
import de.podfetcher.asynctask.FeedRemover;
import de.podfetcher.storage.DownloadRequester;
import de.podfetcher.service.DownloadService;
import de.podfetcher.util.FeedMenuHandler;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.ViewGroup;
import android.view.LayoutInflater;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ListView;
import com.actionbarsherlock.app.SherlockListFragment;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.ActionMode;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;
import android.util.Log;
public class FeedlistFragment extends SherlockListFragment {
private static final String TAG = "FeedlistFragment";
public static final String EXTRA_SELECTED_FEED = "extra.de.podfetcher.activity.selected_feed";
private FeedManager manager;
private FeedlistAdapter fla;
private SherlockFragmentActivity pActivity;
private Feed selectedFeed;
private ActionMode mActionMode;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
pActivity = (SherlockFragmentActivity) activity;
}
@Override
public void onDetach() {
super.onDetach();
pActivity = null;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "Creating");
manager = FeedManager.getInstance();
fla = new FeedlistAdapter(pActivity, 0, manager.getFeeds());
setListAdapter(fla);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
return inflater.inflate(R.layout.feedlist, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
getListView().setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
int position, long id) {
Feed selection = fla.getItem(position);
Log.d(TAG, "Selected Feed with title " + selection.getTitle());
if (selection != null) {
if (mActionMode != null) {
mActionMode.finish();
}
selectedFeed = selection;
mActionMode = getSherlockActivity().startActionMode(
mActionModeCallback);
}
return true;
}
});
}
@Override
public void onResume() {
super.onResume();
IntentFilter filter = new IntentFilter();
filter.addAction(DownloadService.ACTION_DOWNLOAD_HANDLED);
filter.addAction(DownloadService.ACTION_FEED_SYNC_COMPLETED);
filter.addAction(DownloadRequester.ACTION_DOWNLOAD_QUEUED);
pActivity.registerReceiver(contentUpdate, filter);
fla.notifyDataSetChanged();
}
@Override
public void onPause() {
super.onPause();
pActivity.unregisterReceiver(contentUpdate);
if (mActionMode != null) {
mActionMode.finish();
}
}
private BroadcastReceiver contentUpdate = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "Received contentUpdate Intent.");
fla.notifyDataSetChanged();
}
};
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
Feed selection = fla.getItem(position);
Intent showFeed = new Intent(pActivity, FeedItemlistActivity.class);
showFeed.putExtra(EXTRA_SELECTED_FEED, selection.getId());
pActivity.startActivity(showFeed);
}
private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
FeedMenuHandler.onCreateOptionsMenu(mode.getMenuInflater(), menu);
mode.setTitle(selectedFeed.getTitle());
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
if (FeedMenuHandler.onOptionsItemClicked(getSherlockActivity(),
item, selectedFeed)) {
fla.notifyDataSetChanged();
} else {
switch (item.getItemId()) {
case R.id.remove_item:
FeedRemover remover = new FeedRemover(getSherlockActivity()) {
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
fla.notifyDataSetChanged();
}
};
remover.execute(selectedFeed);
break;
}
}
mode.finish();
return true;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
mActionMode = null;
selectedFeed = null;
}
};
}