/* * 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.assetallocation; import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.support.v4.app.LoaderManager; import android.support.v4.content.Loader; import android.text.TextUtils; import android.view.View; import android.widget.ListView; import com.money.manager.ex.R; import com.money.manager.ex.adapter.MoneySimpleCursorAdapter; import com.money.manager.ex.common.BaseListFragment; import com.money.manager.ex.common.MmxCursorLoader; import com.money.manager.ex.datalayer.AssetClassStockRepository; import com.money.manager.ex.datalayer.Select; import com.money.manager.ex.datalayer.StockFields; import com.money.manager.ex.datalayer.StockRepository; import com.money.manager.ex.domainmodel.AssetClassStock; import com.money.manager.ex.domainmodel.Stock; /** * A placeholder fragment containing a simple view. */ public class SecurityListFragment extends BaseListFragment implements LoaderManager.LoaderCallbacks<Cursor> { public static final String INTENT_RESULT_STOCK_SYMBOL = "SecurityListFragment:StockSymbol"; private static final int LOADER_SYMBOLS = 0; private static final String PARAM_ASSET_CLASS_ID = "assetClassId"; public static SecurityListFragment create(Integer assetClassId) { SecurityListFragment instance = new SecurityListFragment(); Bundle params = new Bundle(); params.putInt(PARAM_ASSET_CLASS_ID, assetClassId); instance.setArguments(params); return instance; } public SecurityListFragment() { } public String action = Intent.ACTION_PICK; private String mCurFilter; private String selectedStockSymbol; @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // set show search setSearchMenuVisible(true); // set default value setEmptyText(getActivity().getResources().getString(R.string.no_records_found_create)); setHasOptionsMenu(true); // int layout = Intent.ACTION_PICK.equals(this.action) // ? android.R.layout.simple_list_item_multiple_choice // : android.R.layout.simple_list_item_1; int layout = android.R.layout.simple_list_item_1; // create adapter MoneySimpleCursorAdapter adapter = new MoneySimpleCursorAdapter(getActivity(), layout, null, new String[]{ StockFields.SYMBOL }, new int[]{ android.R.id.text1 }, 0); setListAdapter(adapter); registerForContextMenu(getListView()); getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); setListShown(false); // start loader getLoaderManager().initLoader(LOADER_SYMBOLS, null, this); // set icon searched // setMenuItemSearchIconified(!Intent.ACTION_PICK.equals(this.action)); // setFloatingActionButtonVisible(true); // attachFloatingActionButtonToListView(true); } @Override public String getSubTitle() { return null; } @Override public Loader<Cursor> onCreateLoader(int id, Bundle args) { switch (id) { case LOADER_SYMBOLS: String whereClause; String selectionArgs[] = null; // ignore all the symbols already linked whereClause = StockFields.SYMBOL + " NOT IN (SELECT " + AssetClassStock.STOCKSYMBOL + " FROM " + new AssetClassStockRepository(getActivity()).getSource() + ")"; if (!TextUtils.isEmpty(mCurFilter)) { whereClause += " AND " + StockFields.SYMBOL + " LIKE ?"; selectionArgs = new String[]{ mCurFilter + "%" }; } StockRepository repo = new StockRepository(getActivity()); Select query = new Select(new String[] { "STOCKID AS _id", StockFields.STOCKID, StockFields.SYMBOL }) .where(whereClause, selectionArgs) .orderBy("upper(" + StockFields.SYMBOL + ")"); return new MmxCursorLoader(getActivity(), repo.getUri(), query); } return null; } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) { switch (loader.getId()) { case LOADER_SYMBOLS: MoneySimpleCursorAdapter adapter = (MoneySimpleCursorAdapter) getListAdapter(); adapter.setHighlightFilter(mCurFilter != null ? mCurFilter.replace("%", "") : ""); // adapter.swapCursor(data); adapter.changeCursor(data); if (isResumed()) { setListShown(true); if (data != null && data.getCount() <= 0 && getFloatingActionButton() != null) { getFloatingActionButton().show(true); } } else { setListShownNoAnimation(true); } } } @Override public void onLoaderReset(Loader<Cursor> loader) { switch (loader.getId()) { case LOADER_SYMBOLS: MoneySimpleCursorAdapter adapter = (MoneySimpleCursorAdapter) getListAdapter(); // adapter.swapCursor(null); adapter.changeCursor(null); } } // Other @Override public boolean onQueryTextChange(String newText) { mCurFilter = !TextUtils.isEmpty(newText) ? newText : null; getLoaderManager().restartLoader(LOADER_SYMBOLS, null, this); return true; } @Override public void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); if (this.action.equals(Intent.ACTION_PICK)) { // select the current item and return. Cursor c = (Cursor) l.getItemAtPosition(position); Stock stock = Stock.from(c); selectedStockSymbol = stock.getSymbol(); setResultAndFinish(); } } @Override protected void setResult() { Intent result; switch (this.action) { case Intent.ACTION_PICK: result = new Intent(); result.putExtra(INTENT_RESULT_STOCK_SYMBOL, selectedStockSymbol); if (TextUtils.isEmpty(selectedStockSymbol)) { getActivity().setResult(Activity.RESULT_CANCELED, result); } else { getActivity().setResult(Activity.RESULT_OK, result); } break; default: // otherwise return cancel getActivity().setResult(Activity.RESULT_CANCELED); break; } } }