package net.meiolania.apps.habrahabr.fragments.posts; import android.app.ProgressDialog; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.os.Parcelable; import android.view.ContextMenu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.SherlockListFragment; import net.meiolania.apps.habrahabr.Preferences; import net.meiolania.apps.habrahabr.R; import net.meiolania.apps.habrahabr.activities.PostsShowActivity; import net.meiolania.apps.habrahabr.adapters.PostsAdapter; import net.meiolania.apps.habrahabr.data.PostsData; import net.meiolania.apps.habrahabr.data.PostsFullData; import net.meiolania.apps.habrahabr.utils.PostsSaverUtils; import java.util.ArrayList; public class PostSavedFragment extends SherlockListFragment { PostsAdapter adapter; ArrayList<PostsFullData> posts; @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); showActionBar(); posts = PostsSaverUtils.getSavedPosts(getSherlockActivity()); setRetainInstance(true); setHasOptionsMenu(false); adapter = new PostsAdapter(getActivity(),castDatas(posts)); setListAdapter(adapter); registerForContextMenu(getListView()); if (Preferences.getInstance(getSherlockActivity()).getAdditionalPosts()) { getListView().setDivider(null); getListView().setDividerHeight(0); } setEmptyText(getString(R.string.no_items_post)); } private void showActionBar() { ActionBar actionBar = getSherlockActivity().getSupportActionBar(); actionBar.removeAllTabs(); actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setTitle(R.string.saved); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); } //TODO: hardcode !!! private static ArrayList<PostsData> castDatas(ArrayList<PostsFullData> datas) { ArrayList<PostsData> newDatas = new ArrayList<PostsData>(); for(PostsFullData data : datas) newDatas.add(data); return newDatas; } @Override public void onListItemClick(ListView list, View view, int position, long id) { showPost(position); } protected void showPost(int position) { Intent intent = new Intent(getSherlockActivity(), PostsShowActivity.class); intent.putExtra(PostsShowActivity.EXTRA_CONTENT,(Parcelable)posts.get(position)); startActivity(intent); } private int choosenPosition; private final static int itemDeleteId = 352; @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo; choosenPosition = info.position; menu.add(0,itemDeleteId, 0, R.string.delete_post); } @Override public boolean onContextItemSelected(MenuItem item) { if(item.getItemId() == itemDeleteId) { deletePost(); return true; } return super.onContextItemSelected(item); } private ProgressDialog progressDialog; private void showProgressDialog() { progressDialog = new ProgressDialog(getSherlockActivity()); progressDialog.setMessage(getString(R.string.deleting_post)); progressDialog.setCancelable(true); progressDialog.show(); } private void hideProgressDialog() { if (progressDialog != null) progressDialog.dismiss(); } private void deletePost() { new AsyncTask<Void,Void,Void>() { @Override protected void onPreExecute() { super.onPreExecute(); showProgressDialog(); } @Override protected Void doInBackground(Void... params) { PostsSaverUtils.deletePost(choosenPosition,getSherlockActivity()); return null; } @Override protected void onPostExecute(Void aVoid) { super.onPostExecute(aVoid); hideProgressDialog(); } }.execute(); posts.remove(choosenPosition); adapter = new PostsAdapter(getActivity(),castDatas(posts)); setListAdapter(adapter); } }