/* * 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.common; import android.animation.LayoutTransition; import android.content.Context; import android.os.Build; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.SearchView; import android.text.TextUtils; import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import com.melnykov.fab.FloatingActionButton; import com.money.manager.ex.core.UIHelper; import com.money.manager.ex.home.MainActivity; import com.money.manager.ex.R; import com.money.manager.ex.core.Core; import com.money.manager.ex.core.SearchViewFormatter; import com.money.manager.ex.fragment.TipsDialogFragment; import com.money.manager.ex.settings.PreferenceConstants; public abstract class BaseExpandableListFragment extends ExpandableListFragment { // saved instance private static final String KEY_SHOWN_TIPS_WILDCARD = "BaseListFragment:isShowTipsWildcard"; // menu items private boolean mDisplayShowCustomEnabled = false; private boolean mShowMenuItemSearch = false; private boolean mMenuItemSearchIconified = true; // flag for tips wildcard private boolean isShowTipsWildcard = false; FloatingActionButton mFloatingActionButton; public abstract String getSubTitle(); @Override public void onCreate(Bundle savedInstanceState) { // set theme // Core core = new Core(getActivity().getApplicationContext()); UIHelper uiHelper = new UIHelper(getActivity().getApplicationContext()); try { getActivity().setTheme(uiHelper.getThemeId()); } catch (Exception e) { Log.e(BaseExpandableListFragment.class.getSimpleName(), e.getMessage()); } super.onCreate(savedInstanceState); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // set animation if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { getExpandableListView().setLayoutTransition(new LayoutTransition()); } // saved instance if (savedInstanceState != null) { if (savedInstanceState.containsKey(KEY_SHOWN_TIPS_WILDCARD)) { isShowTipsWildcard = savedInstanceState.getBoolean(KEY_SHOWN_TIPS_WILDCARD); } } // set subtitle in actionbar if (!(TextUtils.isEmpty(getSubTitle()))) { AppCompatActivity activity = (AppCompatActivity) getActivity(); if (activity != null) { activity.getSupportActionBar().setSubtitle(getSubTitle()); } } } @Override public void onStart() { super.onStart(); // check search type Boolean searchType = PreferenceManager.getDefaultSharedPreferences(getActivity()) .getBoolean(getString(PreferenceConstants.PREF_TEXT_SEARCH_TYPE), Boolean.TRUE); if (isShowMenuItemSearch() && !searchType && !isShowTipsWildcard) { // show tooltip for wildcard TipsDialogFragment tipsDropbox = TipsDialogFragment.getInstance(getActivity().getApplicationContext(), "lookupswildcard"); if (tipsDropbox != null) { tipsDropbox.setTips(getString(R.string.lookups_wildcard)); // tipsDropbox.setCheckDontShowAgain(true); tipsDropbox.show(getActivity().getSupportFragmentManager(), "lookupswildcard"); isShowTipsWildcard = true; // set shown } } } // @Override // public View onCreateView(LayoutInflater inflater, ViewGroup container, // Bundle savedInstanceState) { // return inflater.inflate(R.layout.abs_list_fragment, container, false); // } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { if (isShowMenuItemSearch() && getActivity() != null && getActivity() instanceof AppCompatActivity) { // Place an action bar item for searching. final MenuItem itemSearch = menu.add(0, R.id.menu_query_mode, 1000, R.string.search); itemSearch.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); // ActionBarActivity activity = (ActionBarActivity) getActivity(); // AppCompatActivity activity = (AppCompatActivity) getActivity(); SearchView searchView = new SearchView(getActivity()); if (searchView != null) { searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String s) { return false; } @Override public boolean onQueryTextChange(String s) { return BaseExpandableListFragment.this.onPreQueryTextChange(s); } }); searchView.setIconified(isMenuItemSearchIconified()); itemSearch.setActionView(searchView); SearchViewFormatter formatter = new SearchViewFormatter(); formatter.setSearchIconResource(R.drawable.ic_action_search_dark, true, true); formatter.setSearchCloseIconResource(R.drawable.ic_action_content_clear_dark); formatter.setSearchTextColorResource(R.color.abc_primary_text_material_dark); //formatter.setSearchHintColorResource(R.color.hint_foreground_material_dark); formatter.format(searchView); } } } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: if (getActivity() != null && getActivity() instanceof MainActivity) return super.onOptionsItemSelected(item); // set result and exit this.setResultAndFinish(); return true; // consumed here case R.id.menu_query_mode: if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) onMenuItemSearchClick(item); return true; // consumed here default: return super.onOptionsItemSelected(item); } } protected void onMenuItemSearchClick(MenuItem item) { View searchView = getActivity().getActionBar().getCustomView(); final EditText edtSearch = (EditText) searchView.findViewById(R.id.editTextSearchView); InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); // se in visualizzazione prendo l'edittext if (mDisplayShowCustomEnabled == false) { // rendo visibile l'edittext di ricerca edtSearch.setText(""); edtSearch.requestFocus(); // rendo visibile la keyboard imm.showSoftInput(edtSearch, 0); item.setActionView(searchView); // aggiorno lo stato mDisplayShowCustomEnabled = true; } else { // controllo se ho del testo lo pulisco if (TextUtils.isEmpty(edtSearch.getText().toString())) { // nascondo la keyboard imm.hideSoftInputFromWindow(edtSearch.getWindowToken(), 0); // tolgo la searchview item.setActionView(null); // aggiorno lo stato mDisplayShowCustomEnabled = false; } else { // annullo il testo edtSearch.setText(null); onPreQueryTextChange(""); } } } protected boolean onPreQueryTextChange(String newText) { if (PreferenceManager.getDefaultSharedPreferences(getActivity()).getBoolean(getString(PreferenceConstants.PREF_TEXT_SEARCH_TYPE), Boolean.TRUE)) newText = "%" + newText; return onQueryTextChange(newText); } protected boolean onQueryTextChange(String newText) { return true; } @Override public void onSaveInstanceState(Bundle outState) { outState.putBoolean(KEY_SHOWN_TIPS_WILDCARD, isShowTipsWildcard); super.onSaveInstanceState(outState); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { mFloatingActionButton = (FloatingActionButton) view.findViewById(R.id.fab); if (mFloatingActionButton != null) { mFloatingActionButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onFloatingActionButtonClickListener(); } }); } super.onViewCreated(view, savedInstanceState); } /** * @return the mShowMenuItemSearch */ public boolean isShowMenuItemSearch() { return mShowMenuItemSearch; } /** * * @param mShowMenuItemSearch the mShowMenuItemSearch to set */ public void setShowMenuItemSearch(boolean mShowMenuItemSearch) { this.mShowMenuItemSearch = mShowMenuItemSearch; } /** * metodo per l'implementazione del ritorno dei dati */ protected void setResult() { } public void setResultAndFinish() { // chiamo l'impostazione dei dati e chiudo l'activity this.setResult(); // chiudo l'activity dove sono collegato getActivity().finish(); } public boolean isMenuItemSearchIconified() { return mMenuItemSearchIconified; } public void setMenuItemSearchIconified(boolean mMenuItemSearchIconified) { this.mMenuItemSearchIconified = mMenuItemSearchIconified; } // Floating button methods public FloatingActionButton getFloatingActionButton() { return mFloatingActionButton; } public void setFloatingActionButtonVisible(boolean visible) { if (mFloatingActionButton != null) { mFloatingActionButton.setVisibility(visible ? View.VISIBLE : View.GONE); } } public void setFloatingActionButtonAttachListView(boolean attachListView) { if (mFloatingActionButton != null) { mFloatingActionButton.attachToListView(getExpandableListView()); } } public void onFloatingActionButtonClickListener() { return; } // End floating button events. }