package com.masterofcode.android.magreader; import java.util.List; import android.app.ActionBar; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.view.KeyEvent; import android.view.MenuItem; import android.view.View; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; import com.masterofcode.android.magreader.adapters.SearchResultsAdapter; import com.masterofcode.android.magreader.db.entity.FeedItem; import com.masterofcode.android.magreader.search.SearchManager; import com.masterofcode.android.magreader.search.SearchResultItem; 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 SearchActivity extends Activity implements CompoundButton.OnCheckedChangeListener { private Context mContext; private String mSearchKeyword; private int mSearchType; private ProgressBar searchProgressBar; private EditText searchCriteriaEditText; private CheckBox searchTypeCheckBoxEverywhere; private CheckBox searchTypeCheckBoxInNews; private CheckBox searchTypeCheckBoxInMagazines; private ListView searchResultsListView; private List<SearchResultItem> searchResults = null; private int layoutForList = R.layout.list_search_results; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.search_view); this.mContext = this; ActionBar actionBar = getActionBar(); ActionBarView.setActionBarStandartView(actionBar, mContext); actionBar.setDisplayHomeAsUpEnabled(true); if (savedInstanceState==null) { Intent intent = this.getIntent(); mSearchKeyword = intent.getStringExtra(Constants.BUNDLE_KEY_SEARCH_KEYWORD); mSearchType = intent.getIntExtra(Constants.BUNDLE_KEY_SEARCH_TYPE, Constants.SEARCH_TYPE_FEEDS); } else { mSearchKeyword = savedInstanceState.getString(Constants.BUNDLE_KEY_SEARCH_KEYWORD); mSearchType = savedInstanceState.getInt(Constants.BUNDLE_KEY_SEARCH_TYPE, Constants.SEARCH_TYPE_FEEDS); } searchCriteriaEditText = (EditText) findViewById(R.id.search_criteria_edit_text); searchCriteriaEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if(actionId == EditorInfo.IME_ACTION_SEARCH){ InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); in.hideSoftInputFromWindow(SearchActivity.this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); if(!mSearchKeyword.equals(searchCriteriaEditText.getText().toString())) { mSearchKeyword = searchCriteriaEditText.getText().toString(); doSearch(); return true; } } else { } return false; } }); searchCriteriaEditText.setText(mSearchKeyword); searchProgressBar = (ProgressBar) findViewById(R.id.search_progress_bar); searchTypeCheckBoxEverywhere = (CheckBox) findViewById(R.id.search_type_check_box_everywhere); searchTypeCheckBoxInNews = (CheckBox) findViewById(R.id.search_type_check_box_news); searchTypeCheckBoxInMagazines = (CheckBox) findViewById(R.id.search_type_check_box_magazines); searchResultsListView = (ListView) findViewById(R.id.search_results_list_view); showSearchTypeSelection(); searchTypeCheckBoxEverywhere.setTag(Integer.valueOf(Constants.SEARCH_TYPE_EVERYWHERE)); searchTypeCheckBoxInNews.setTag(Integer.valueOf(Constants.SEARCH_TYPE_FEEDS)); searchTypeCheckBoxInMagazines.setTag(Integer.valueOf(Constants.SEARCH_TYPE_LIBRARY)); searchTypeCheckBoxEverywhere.setOnCheckedChangeListener(this); searchTypeCheckBoxInNews.setOnCheckedChangeListener(this); searchTypeCheckBoxInMagazines.setOnCheckedChangeListener(this); searchResultsListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { clickOnSearchItem(position); } }); Button clearSearchCriteria = (Button) findViewById(R.id.clear_search_criteria_button); clearSearchCriteria.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { clearSearchCriteria(); } }); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString(Constants.BUNDLE_KEY_SEARCH_KEYWORD, mSearchKeyword); outState.putInt(Constants.BUNDLE_KEY_SEARCH_TYPE, mSearchType); } @Override protected void onResume() { super.onResume(); doSearch(); } private void showSearchTypeSelection() { searchTypeCheckBoxEverywhere.setChecked(mSearchType==Constants.SEARCH_TYPE_EVERYWHERE); searchTypeCheckBoxInNews.setChecked(mSearchType==Constants.SEARCH_TYPE_FEEDS); searchTypeCheckBoxInMagazines.setChecked(mSearchType==Constants.SEARCH_TYPE_LIBRARY); searchTypeCheckBoxEverywhere.setClickable(mSearchType!=Constants.SEARCH_TYPE_EVERYWHERE); searchTypeCheckBoxInNews.setClickable(mSearchType!=Constants.SEARCH_TYPE_FEEDS); searchTypeCheckBoxInMagazines.setClickable(mSearchType!=Constants.SEARCH_TYPE_LIBRARY); } private void clearSearchCriteria() { searchCriteriaEditText.setText(""); mSearchKeyword = ""; searchResults = null; searchResultsListView.setAdapter(null); if(SearchActivity.this.getCurrentFocus() instanceof EditText) { InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); in.hideSoftInputFromWindow(SearchActivity.this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } } private void doSearch() { if(mSearchKeyword==null) return; if(mSearchKeyword.equals("")) return; new getSearchedItems().execute(String.valueOf(mSearchType), mSearchKeyword); } private class getSearchedItems extends AsyncTask<String, Void, List<SearchResultItem>> { @Override protected List<SearchResultItem> doInBackground(String... params) { int mTaskSearchType = Integer.parseInt(params[0]); String mTaskSearchKeyword = params[1]; return SearchManager.getInstance().searchWithType(mContext, mTaskSearchType, mTaskSearchKeyword); } @Override protected void onPreExecute(){ super.onPreExecute(); searchProgressBar.setVisibility(View.VISIBLE); searchResultsListView.setAdapter(null); } @Override protected void onPostExecute(List<SearchResultItem> searchResultList) { super.onPostExecute(searchResultList); searchProgressBar.setVisibility(View.GONE); searchResults = searchResultList; if(searchResults==null) searchResultsListView.setAdapter(null); else searchResultsListView.setAdapter(new SearchResultsAdapter(mContext, layoutForList, searchResults, SearchActivity.this)); } } private void clickOnSearchItem(long position){ SearchResultItem selectedSearchResultItem = searchResults.get((int) position); if(selectedSearchResultItem.getSearchResultType() == Constants.SEARCH_TYPE_FEEDS) { FeedItem selectedFeedItem = selectedSearchResultItem.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); feedsActivity.putExtra("item_guid", selectedFeedItem.guid); feedsActivity.putExtra("search_keyword", mSearchKeyword); startActivity(feedsActivity); } } else if(selectedSearchResultItem.getSearchResultType() == Constants.SEARCH_TYPE_LIBRARY) { Intent magazineActivity = new Intent(mContext, EpubViewerActivity.class); magazineActivity.putExtra(Constants.BUNDLE_KEY_EPUB_FILE_PATH, selectedSearchResultItem.getLibraryItem().magazine_filepath); magazineActivity.putExtra(Constants.BUNDLE_KEY_EPUB_COVER_FILE_PATH, selectedSearchResultItem.getLibraryItem().magazine_cover_filepath); magazineActivity.putExtra(Constants.BUNDLE_KEY_EPUB_TOPIC_INDEX, selectedSearchResultItem.getLibraryItemTopicIndex()); magazineActivity.putExtra(Constants.BUNDLE_KEY_EPUB_HIGHLIGHTING_MODE, true); magazineActivity.putExtra(Constants.BUNDLE_KEY_EPUB_HIGHLIGHTING_KEYWORD, mSearchKeyword); magazineActivity.putExtra(Constants.BUNDLE_KEY_EPUB_HIGHLIGHTING_TOPICS, selectedSearchResultItem.getLibraryItemTopics()); startActivity(magazineActivity); } } @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(buttonView.getTag() instanceof Integer) { int checkedSearchType = ((Integer)buttonView.getTag()).intValue(); if(checkedSearchType==Constants.SEARCH_TYPE_EVERYWHERE || checkedSearchType==Constants.SEARCH_TYPE_FEEDS || checkedSearchType==Constants.SEARCH_TYPE_LIBRARY) { if(isChecked) { mSearchType = checkedSearchType; showSearchTypeSelection(); doSearch(); } } } } @Override public boolean onOptionsItemSelected(MenuItem item){ switch(item.getItemId()){ case android.R.id.home: finish(); return true; default: return super.onOptionsItemSelected(item); } } }