package com.masterofcode.android.magreader; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import android.app.ActionBar; import android.app.ActionBar.OnNavigationListener; import android.app.ActionBar.Tab; import android.app.ActionBar.TabListener; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.DialogFragment; import android.app.FragmentTransaction; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.res.Configuration; import android.os.AsyncTask; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.Toast; import com.masterofcode.android.magreader.adapters.ListOfBookmarksAdapter; import com.masterofcode.android.magreader.adapters.ListOfBookmarksFiltersAdapter; import com.masterofcode.android.magreader.bookmarks.BookmarksManager; import com.masterofcode.android.magreader.db.entity.BookmarksItem; import com.masterofcode.android.magreader.db.entity.FeedItem; import com.masterofcode.android.magreader.utils.ActionBarView; import com.masterofcode.android.magreader.utils.constants.Constants; import com.sandsmedia.apps.mobile.android.epub.lib.R; public class MainBookmarkActivity extends Activity { private ListView filterListView; private ListOfBookmarksFiltersAdapter filtersAdapter; private Context mContext; private EditText searchCriteriaEditText; private int mFilterId = 0; private boolean isLoadData = false; private List<BookmarksItem> items = null; private ListOfBookmarksAdapter bookmarksAdapter; private ListView bookmarksListView; private ProgressBar bookmarksProgressBar; private RelativeLayout no_bookmark_layout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.bookmark_view); this.mContext = this; ActionBar actionBar = getActionBar(); if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { actionBar.setListNavigationCallbacks(ArrayAdapter.createFromResource(this, R.array.menu_categories, android.R.layout.simple_dropdown_item_1line), navigationListener); ActionBarView.setActionBarListView(actionBar, mContext); actionBar.setSelectedNavigationItem(3); } else { actionBar.addTab(actionBar.newTab().setText(R.string.action_bar_feeds).setTabListener(feedsTabListener), false); actionBar.addTab(actionBar.newTab().setText(R.string.action_bar_library).setTabListener(libraryTabListener), false); actionBar.addTab(actionBar.newTab().setText(R.string.action_bar_shop).setTabListener(shopTabListener), false); actionBar.addTab(actionBar.newTab().setText(R.string.action_bar_bookmarks).setTabListener(bookmarkTabListener), true); ActionBarView.setActionBarTabView(actionBar, mContext); } // init filter list filterListView = (ListView) findViewById(R.id.filters_list_view); filterListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); no_bookmark_layout = (RelativeLayout) findViewById(R.id.no_bookmarks_relative_layout); String[] bookmarks_filters_array = getResources().getStringArray(R.array.bookmarks_filters); List<String> bookmarks_filters = new ArrayList<String>(Arrays.asList(bookmarks_filters_array)); filtersAdapter = new ListOfBookmarksFiltersAdapter(this, R.id.bookmarks_filter_name, bookmarks_filters); filterListView.setAdapter(filtersAdapter); bookmarksListView = (ListView) findViewById(R.id.bookmarks_list_view); filterListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) { //filterListView.setItemChecked(position, true); filtersAdapter.setCurrentPosition(position); filterChanged(position); } }); filterChanged(filtersAdapter.getCurrentPosition()); bookmarksListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) { clickOnBookmarksItem(position); } }); bookmarksListView.setOnItemLongClickListener(new OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int position, long id) { if(items.get(position).item_type != Constants.BOOKMARKS_ITEM_TYPE_NONE) removeBookmarkAtPosition(position); return true; } }); Button clearSearchCriteriaButton = (Button) findViewById(R.id.clear_search_criteria_button); clearSearchCriteriaButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { clearSearchCriteria(); } }); searchCriteriaEditText = (EditText) findViewById(R.id.search_criteria_edit_text); bookmarksProgressBar = (ProgressBar) findViewById(R.id.bookmarks_progress_bar); } private void filterChanged(int newPosition) { if(mFilterId==newPosition)return; mFilterId = newPosition; isLoadData = false; new getBookmarkedItemsAsyncTask().execute(getCurrentFilterId()); } private void clickOnBookmarksItem(long position) { BookmarksItem selectedBookmarksItem = items.get((int) position); if(selectedBookmarksItem.item_type == Constants.BOOKMARKS_ITEM_TYPE_FEED) { FeedItem selectedFeedItem = selectedBookmarksItem.getFeedItem(); if(selectedFeedItem!=null) { Intent feedsActivity = new Intent(mContext, FeedsActivity.class); feedsActivity.putExtra("category_id", Integer.parseInt(selectedFeedItem.channel_id)); feedsActivity.putExtra("item_guid", selectedFeedItem.guid); startActivity(feedsActivity); } } else if(selectedBookmarksItem.item_type == Constants.BOOKMARKS_ITEM_TYPE_MAGAZINE) { Intent magazineActivity = new Intent(mContext, EpubViewerActivity.class); magazineActivity.putExtra(Constants.BUNDLE_KEY_EPUB_FILE_PATH, selectedBookmarksItem.magazine_path); magazineActivity.putExtra(Constants.BUNDLE_KEY_EPUB_COVER_FILE_PATH, selectedBookmarksItem.magazine_cover_path); magazineActivity.putExtra(Constants.BUNDLE_KEY_EPUB_TOPIC_INDEX, selectedBookmarksItem.magazine_topic_index); magazineActivity.putExtra(Constants.BUNDLE_KEY_EPUB_TOPIC_CONTENT_OFFSET, selectedBookmarksItem.magazine_topic_offset); startActivity(magazineActivity); } } private void removeBookmarkAtPosition(int position) { if(bookmarksAdapter!=null) { showBookmarkRemoveConfirmationDialog(position); } } private void showBookmarkRemoveConfirmationDialog(int index) { DialogFragment newFragment = BookmarkRemovingAlertDialogFragment.newInstance(R.string.bookmark_removing_question, index); newFragment.show(getFragmentManager(), "dialog"); } private void clearSearchCriteria() { searchCriteriaEditText.setText(""); } @Override protected void onResume() { super.onResume(); // loading bookmarks if(isLoadData)isLoadData = false; new getBookmarkedItemsAsyncTask().execute(getCurrentFilterId()); } private int getCurrentFilterId() { return mFilterId; } OnNavigationListener navigationListener = new OnNavigationListener() { @Override public boolean onNavigationItemSelected(int itemPosition, long itemId) { switch (itemPosition) { case 0: Intent feedIntent = new Intent(); feedIntent.setClass(mContext, MainActivity.class); startActivity(feedIntent); finish(); break; case 1: Intent libraryIntent = new Intent(); libraryIntent.setClass(mContext, MainLibraryActivity.class); startActivity(libraryIntent); finish(); break; case 2: Intent shopIntent = new Intent(); shopIntent.setClass(mContext, MainShopActivity.class); startActivity(shopIntent); finish(); break; } return false; } }; TabListener feedsTabListener = new TabListener() { //for this tab we have empty tabListener @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) {} @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { Intent feedIntent = new Intent(); feedIntent.setClass(mContext, MainActivity.class); startActivity(feedIntent); finish(); } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) {} }; TabListener libraryTabListener = new TabListener() { @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) {} @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { Intent libraryIntent = new Intent(); libraryIntent.setClass(mContext, MainLibraryActivity.class); startActivity(libraryIntent); finish(); } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) {} }; TabListener shopTabListener = new TabListener() { @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) {} @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { Intent shopIntent = new Intent(); shopIntent.setClass(mContext, MainShopActivity.class); startActivity(shopIntent); finish(); } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) {} }; TabListener bookmarkTabListener = new TabListener() { @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) {} @Override public void onTabSelected(Tab tab, FragmentTransaction ft) {} @Override public void onTabReselected(Tab tab, FragmentTransaction ft) {} }; @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.bookmarks_menu, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { int itemId = item.getItemId(); if (itemId == R.id.menu_bookmark_settings) { startActivity(new Intent(MainBookmarkActivity.this, SettingsActivity.class)); return true; } else { return super.onOptionsItemSelected(item); } } private class getBookmarkedItemsAsyncTask extends AsyncTask<Integer, Void, List<BookmarksItem>> { @Override protected List<BookmarksItem> doInBackground(Integer... params) { Integer curFilterId = params[0]; if (!isLoadData) { List<BookmarksItem> bookmarks = null; switch (curFilterId) { case 0: bookmarks = BookmarksManager.GetInstance().queryBookmarkedFeedsAndMagazines(mContext); break; case 1: bookmarks = BookmarksManager.GetInstance().queryBookmarkedFeeds(mContext); break; case 2: bookmarks = BookmarksManager.GetInstance().queryBookmarkedMagazines(mContext); break; default: bookmarks = BookmarksManager.GetInstance().queryBookmarkedFeeds(mContext); break; } isLoadData = true; return bookmarks; } else { return items; } } @Override protected void onPreExecute() { super.onPreExecute(); if(isLoadData)return; bookmarksProgressBar.setVisibility(View.VISIBLE); bookmarksListView.setAdapter(null); } @Override protected void onPostExecute(List<BookmarksItem> bookmarkedList) { super.onPostExecute(bookmarkedList); bookmarksProgressBar.setVisibility(View.GONE); if(bookmarkedList==null)bookmarkedList = new ArrayList<BookmarksItem>(); items = bookmarkedList; if (items.isEmpty()){ no_bookmark_layout.setVisibility(View.VISIBLE); } else { no_bookmark_layout.setVisibility(View.GONE); bookmarksAdapter = new ListOfBookmarksAdapter(mContext, R.layout.bookmarks_list_item, items, (Activity) mContext); bookmarksListView.setAdapter(bookmarksAdapter); } } } private void doBookmarkRemove(int index) { if(BookmarksManager.GetInstance().removeBookmark(items.get(index))) { items.remove(index); bookmarksAdapter.notifyDataSetChanged(); if (items.isEmpty()) no_bookmark_layout.setVisibility(View.VISIBLE); } else { Toast.makeText(this, R.string.bookmark_removing_error, Toast.LENGTH_SHORT).show(); } } private void doCancelBookmarkRemoving(int index) { } public static class BookmarkRemovingAlertDialogFragment extends DialogFragment { public static BookmarkRemovingAlertDialogFragment newInstance(int title, int index) { BookmarkRemovingAlertDialogFragment frag = new BookmarkRemovingAlertDialogFragment(); Bundle args = new Bundle(); args.putInt("title", title); args.putInt("index", index); frag.setArguments(args); return frag; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { int title = getArguments().getInt("title"); final int index = getArguments().getInt("index"); return new AlertDialog.Builder(getActivity()) .setTitle(title) .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { ((MainBookmarkActivity)getActivity()).doBookmarkRemove(index); } } ) .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { ((MainBookmarkActivity)getActivity()).doCancelBookmarkRemoving(index); } } ) .create(); } } }