/*
* Copyright (C) 2012-2016 The Android Money Manager Ex Project Team
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 3
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.money.manager.ex.search;
import android.content.Intent;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.app.FragmentTransaction;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.LinearLayout;
import com.mikepenz.google_material_typeface_library.GoogleMaterial;
import com.money.manager.ex.Constants;
import com.money.manager.ex.R;
import com.money.manager.ex.common.AllDataListFragment;
import com.money.manager.ex.common.MmxBaseFragmentActivity;
import com.money.manager.ex.core.UIHelper;
import com.money.manager.ex.database.QueryAllData;
import org.parceler.Parcels;
public class SearchActivity
extends MmxBaseFragmentActivity {
public static final String EXTRA_SEARCH_PARAMETERS = "SearchActivity:SearchCriteria";
/**
* Indicates whether to show the account headers in search results.
*/
public boolean ShowAccountHeaders = true;
private boolean mIsDualPanel = false;
private SearchParametersFragment mSearchParametersFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.search_activity);
SearchParametersFragment searchParametersFragment = getSearchFragment();
if (!searchParametersFragment.isAdded()) {
// set dual panel
LinearLayout fragmentDetail = (LinearLayout) findViewById(R.id.fragmentDetail);
mIsDualPanel = fragmentDetail != null && fragmentDetail.getVisibility() == View.VISIBLE;
}
// reconfigure the toolbar event
// showStandardToolbarActions(getToolbar(), R.id.action_cancel, R.id.action_search);
setDisplayHomeAsUpEnabled(true);
handleSearchRequest();
}
@Override
protected void onResume() {
super.onResume();
AllDataListFragment fragment;
fragment = (AllDataListFragment) getSupportFragmentManager()
.findFragmentByTag(AllDataListFragment.class.getSimpleName());
if (fragment != null && fragment.isVisible()) {
fragment.loadData();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// handled in the search fragment
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
UIHelper ui = new UIHelper(this);
// Add Search icon.
getMenuInflater().inflate(R.menu.menu_search, menu);
MenuItem item = menu.findItem(R.id.searchMenuItem);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
item.setIcon(ui.getIcon(GoogleMaterial.Icon.gmd_search));
// show this menu item last
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
case R.id.searchMenuItem:
performSearch();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
// Public
private SearchParametersFragment createSearchFragment() {
SearchParametersFragment searchParametersFragment = SearchParametersFragment.createInstance();
// add to stack
getSupportFragmentManager().beginTransaction()
.add(R.id.fragmentMain, searchParametersFragment, SearchParametersFragment.class.getSimpleName())
.commit();
return searchParametersFragment;
}
private SearchParametersFragment getSearchFragment() {
if (mSearchParametersFragment == null) {
// try to find the search fragment
mSearchParametersFragment = (SearchParametersFragment) getSupportFragmentManager()
.findFragmentByTag(SearchParametersFragment.class.getSimpleName());
if (mSearchParametersFragment == null) {
mSearchParametersFragment = createSearchFragment();
}
}
return mSearchParametersFragment;
}
/**
* Read the search request from the intent, if the activity was invoked from elsewhere.
*/
private void handleSearchRequest() {
Intent intent = getIntent();
if (intent == null) return;
// see if we have the search criteria.
Parcelable searchParcel = intent.getParcelableExtra(EXTRA_SEARCH_PARAMETERS);
SearchParameters searchParameters = Parcels.unwrap(searchParcel);
if (searchParameters != null) {
getSearchFragment().setSearchParameters(searchParameters);
performSearch();
}
}
private void performSearch() {
SearchParametersFragment searchParametersFragment = getSearchFragment();
String where = searchParametersFragment.getWhereStatement();
showSearchResultsFragment(where);
}
private void showSearchResultsFragment(String where) {
//create a fragment for search results.
AllDataListFragment searchResultsFragment = (AllDataListFragment) this.getSupportFragmentManager()
.findFragmentByTag(AllDataListFragment.class.getSimpleName());
if (searchResultsFragment != null) {
this.getSupportFragmentManager().beginTransaction()
.remove(searchResultsFragment)
.commit();
}
searchResultsFragment = AllDataListFragment.newInstance(Constants.NOT_SET, false);
searchResultsFragment.showTotalsFooter();
//create parameter bundle
Bundle args = new Bundle();
args.putString(AllDataListFragment.KEY_ARGUMENTS_WHERE, where);
// Sorting
args.putString(AllDataListFragment.KEY_ARGUMENTS_SORT,
QueryAllData.TOACCOUNTID + ", " + QueryAllData.Date + ", " +
QueryAllData.TransactionType + ", " + QueryAllData.ID);
//set arguments
searchResultsFragment.getArguments().putAll(args);
this.ShowAccountHeaders = true;
//add fragment
FragmentTransaction transaction = this.getSupportFragmentManager().beginTransaction();
//animation
transaction.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left,
R.anim.slide_in_right, R.anim.slide_out_left);
if (mIsDualPanel) {
transaction.add(R.id.fragmentDetail, searchResultsFragment, AllDataListFragment.class.getSimpleName());
} else {
// transaction.remove()
transaction.replace(R.id.fragmentMain, searchResultsFragment, AllDataListFragment.class.getSimpleName());
transaction.addToBackStack(null);
}
// Commit the transaction
transaction.commit();
}
}