/*
* 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.account;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.ContextCompat;
import android.support.v4.content.Loader;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.SimpleCursorAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import com.mikepenz.google_material_typeface_library.GoogleMaterial;
import com.money.manager.ex.account.events.RunningBalanceCalculatedEvent;
import com.money.manager.ex.core.TransactionStatuses;
import com.money.manager.ex.core.UIHelper;
import com.money.manager.ex.datalayer.AccountRepository;
import com.money.manager.ex.datalayer.Select;
import com.money.manager.ex.servicelayer.AccountService;
import com.money.manager.ex.common.AllDataListFragment;
import com.money.manager.ex.common.MmxCursorLoader;
import com.money.manager.ex.core.DefinedDateRange;
import com.money.manager.ex.core.DefinedDateRangeName;
import com.money.manager.ex.core.DefinedDateRanges;
import com.money.manager.ex.currency.CurrencyService;
import com.money.manager.ex.database.ITransactionEntity;
import com.money.manager.ex.database.WhereStatementGenerator;
import com.money.manager.ex.domainmodel.Account;
import com.money.manager.ex.transactions.CheckingTransactionEditActivity;
import com.money.manager.ex.Constants;
import com.money.manager.ex.home.MainActivity;
import com.money.manager.ex.R;
import com.money.manager.ex.transactions.EditTransactionActivityConstants;
import com.money.manager.ex.database.QueryAccountBills;
import com.money.manager.ex.database.QueryAllData;
import com.money.manager.ex.settings.AppSettings;
import com.money.manager.ex.settings.LookAndFeelSettings;
import com.money.manager.ex.settings.PreferenceConstants;
import com.money.manager.ex.utils.MmxDate;
import com.money.manager.ex.utils.MmxDateTimeUtils;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import info.javaperformance.money.Money;
import info.javaperformance.money.MoneyFactory;
/**
* Checking account fragment.
* Shows the list of transactions.
*/
public class AccountTransactionListFragment
extends Fragment
implements LoaderManager.LoaderCallbacks<Cursor> {
private static final String ARG_ACCOUNT_ID = "arg:accountId";
private static final String KEY_CONTENT = "AccountTransactionListFragment:AccountId";
private static final String KEY_STATUS = "AccountTransactionListFragment:StatusFilter";
private static final int ID_LOADER_SUMMARY = 2;
private static final String TAG_FILTER_DIALOG = "FilterDialogTag";
/**
* @param accountId Id of the Account to be displayed
* @return initialized instance of Account Fragment.
*/
public static AccountTransactionListFragment newInstance(int accountId) {
AccountTransactionListFragment fragment = new AccountTransactionListFragment();
Bundle args = new Bundle();
args.putInt(ARG_ACCOUNT_ID, accountId);
fragment.setArguments(args);
// set name of child fragment
fragment.setFragmentName(AccountTransactionListFragment.class.getSimpleName() + "_" +
Integer.toString(accountId));
return fragment;
}
private AllDataListFragment mAllDataListFragment;
private Integer mAccountId = null;
private String mFragmentName;
private Money mAccountBalance = MoneyFactory.fromDouble(0),
mAccountReconciled = MoneyFactory.fromDouble(0);
private Account mAccount;
private AccountTransactionsListViewHolder viewHolder;
// filter
private TransactionFilter mFilter;
private boolean mSortTransactionsByType = true;
@Override
public void onAttach(Context context) {
super.onAttach(context);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// get account id from the arguments first.
mAccountId = getArguments().getInt(ARG_ACCOUNT_ID);
// initialize filter(s)
this.mFilter = new TransactionFilter();
// Select the default period.
updateFilterDateRange();
// Default value.
mFilter.transactionStatus = new StatusFilter();
restoreInstanceState(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if ((savedInstanceState != null) && savedInstanceState.containsKey(KEY_CONTENT)) {
mAccountId = savedInstanceState.getInt(KEY_CONTENT);
}
if (container == null) return null;
// inflate layout
View view = inflater.inflate(R.layout.fragment_account_transactions, container, false);
// take object AccountList
if (mAccount == null) {
reloadAccountInfo();
}
this.viewHolder = new AccountTransactionsListViewHolder();
initializeListHeader(inflater);
// Transactions
showTransactionsFragment(viewHolder.listHeader);
// refresh user interface
if (mAccount != null) {
setImageViewFavorite();
}
setHasOptionsMenu(true);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// hide the title
ActionBar actionBar = getActionBar();
if (actionBar != null) {
actionBar.setDisplayShowTitleEnabled(false);
}
}
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onResume() {
super.onResume();
refreshSettings();
initializeAccountsSelector();
selectCurrentAccount();
// restart loader
loadTransactions();
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
// Menu
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
// hide the title
if (getActivity() instanceof AppCompatActivity) {
AppCompatActivity activity = (AppCompatActivity) getActivity();
activity.getSupportActionBar().setDisplayShowTitleEnabled(false);
}
// add the date picker.
inflater.inflate(R.menu.menu_period_picker_transactions, menu);
// transaction Status picker
inflater.inflate(R.menu.menu_transaction_status_selector, menu);
initTransactionStatusMenu(menu);
// filter
inflater.inflate(R.menu.menu_transaction_filters, menu);
initializeFilterMenu(menu);
// call create option menu of fragment
mAllDataListFragment.onCreateOptionsMenu(menu, inflater);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
//force show add transaction
MenuItem itemAddTransaction = menu.findItem(R.id.menu_add_transaction_account);
if (itemAddTransaction != null) itemAddTransaction.setVisible(true);
//manage dual panel
if (getActivity() != null && getActivity() instanceof MainActivity) {
MainActivity activity = (MainActivity) getActivity();
if (!activity.isDualPanel()) {
//hide sync toolbar
MenuItem itemSync = menu.findItem(R.id.menu_sync);
if (itemSync != null) itemSync.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
// hide menu open database
MenuItem itemOpenDatabase = menu.findItem(R.id.menu_open_database);
if (itemOpenDatabase != null) {
//itemOpenDatabase.setVisible(isShownOpenDatabaseItemMenu());
itemOpenDatabase.setShowAsAction(!itemSync.isVisible()
? MenuItem.SHOW_AS_ACTION_ALWAYS : MenuItem.SHOW_AS_ACTION_NEVER);
}
//hide dash board
MenuItem itemDashboard = menu.findItem(R.id.menu_dashboard);
if (itemDashboard != null)
itemDashboard.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
}
}
selectCurrentPeriod(menu);
selectCurrentStatus(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
boolean result;
result = datePeriodItemSelected(item);
if (result) return true;
result = isStatusSelectionHandled(item);
if (result) return true;
result = isFilterSelected(item);
if (result) return true;
switch (item.getItemId()) {
case R.id.menu_add_transaction_account:
startCheckingAccountActivity();
result = true;
break;
case R.id.menu_export_to_csv:
if (mAllDataListFragment != null && mAccount != null)
mAllDataListFragment.exportDataToCSVFile(mAccount.getName());
result = true;
break;
default:
result = false;
break;
}
// If not consumed here (true), send for further processing to the parent.
if (result) {
return result;
} else {
return super.onOptionsItemSelected(item);
}
}
// Loader events.
/**
* Start Loader to retrieve data
*/
public void loadTransactions() {
if (mAllDataListFragment == null) return;
Bundle arguments = prepareQuery();
mAllDataListFragment.loadData(arguments);
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
switch (id) {
case ID_LOADER_SUMMARY:
// Account summary (balances).
Select query = new Select()
.where(QueryAccountBills.ACCOUNTID + "=?",
new String[] { Integer.toString(mAccountId) });
return new MmxCursorLoader(getActivity(),
new QueryAccountBills(getActivity()).getUri(),
query);
}
return null;
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
// This is already handled in AllDataListFragment.
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
switch (loader.getId()) {
case ID_LOADER_SUMMARY:
if (data != null && data.moveToFirst()) {
String balance = Double.toString(data.getDouble(data.getColumnIndex(QueryAccountBills.TOTAL)));
mAccountBalance = MoneyFactory.fromString(balance);
String reconciled = Double.toString(data.getDouble(data.getColumnIndex(QueryAccountBills.RECONCILED)));
mAccountReconciled = MoneyFactory.fromString(reconciled);
} else {
mAccountBalance = MoneyFactory.fromString("0");
mAccountReconciled = MoneyFactory.fromString("0");
}
// show balance values
setTextViewBalance();
break;
case AllDataListFragment.ID_LOADER_ALL_DATA_DETAIL:
// Notification received from AllDataListFragment.
// Once the transactions are loaded, load the summary data.
getLoaderManager().restartLoader(ID_LOADER_SUMMARY, null, this);
// load/reset running balance
populateRunningBalance();
break;
}
}
// Other
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (mAccountId != null) {
outState.putInt(KEY_CONTENT, mAccountId);
}
outState.putStringArrayList(KEY_STATUS, mFilter.transactionStatus.filter);
}
@Override
public void onDestroy() {
super.onDestroy();
}
public String getFragmentName() {
return mFragmentName;
}
public void setFragmentName(String mFragmentName) {
this.mFragmentName = mFragmentName;
}
// Events
@Subscribe
public void onEvent(RunningBalanceCalculatedEvent event) {
// Update the UI controls
mAllDataListFragment.displayRunningBalances(event.balances);
}
// Private
private boolean datePeriodItemSelected(MenuItem item) {
int stringId;
int itemId = item.getItemId();
DefinedDateRanges dateRanges = new DefinedDateRanges(getActivity());
DefinedDateRange range = dateRanges.getByMenuId(itemId);
if (range == null) return false;
stringId = range.nameResourceId;
LookAndFeelSettings settings = new AppSettings(getActivity()).getLookAndFeelSettings();
settings.setShowTransactions(range.key);
// Save the selected period.
mFilter.dateRange = new MmxDateTimeUtils().getDateRangeForPeriod(getActivity(), stringId);
item.setChecked(true);
loadTransactions();
return true;
}
private Spinner getAccountsSpinner() {
// Spinner spinner = null;
//
// MenuItem item = menu.findItem(R.id.menuAccountSelector);
// if (item != null) {
// spinner = (Spinner) MenuItemCompat.getActionView(item);
// }
//
// return spinner;
// get from custom view, not the menu.
ActionBar actionBar = getActionBar();
if (actionBar == null) return null;
Spinner spinner = (Spinner) actionBar.getCustomView().findViewById(R.id.spinner);
return spinner;
}
private ActionBar getActionBar() {
if (!(getActivity() instanceof AppCompatActivity)) return null;
AppCompatActivity activity = (AppCompatActivity) getActivity();
ActionBar actionBar = activity.getSupportActionBar();
return actionBar;
}
private void initializeFilterMenu(Menu menu) {
MenuItem item = menu.findItem(R.id.menuTransactionFilters);
Drawable icon = new UIHelper(getActivity()).getIcon(GoogleMaterial.Icon.gmd_keyboard_arrow_down);
item.setIcon(icon);
// selection handled in onOptionsItemSelected
}
private void initializeAccountsSelector() {
ActionBar actionBar = getActionBar();
if (actionBar == null) return;
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setCustomView(R.layout.spinner);
actionBar.setDisplayShowCustomEnabled(true);
Spinner spinner = getAccountsSpinner();
if (spinner == null) return;
loadAccountsInto(spinner);
}
/**
* Initialize the Transaction Type filter.
* @param menu menu/toolbar to add the icon to.
*/
private void initTransactionStatusMenu(Menu menu) {
// MenuItem item = menu.findItem(R.id.menuTransactionStatusSelector);
// todo Use a font icon.
// UIHelper uiHelper = new UIHelper(getActivity());
// IconicsDrawable icon = new IconicsDrawable(getActivity())
// .icon(MMXIconFont.Icon.mmx_filter)
// .color(uiHelper.getPrimaryColor())
// .sizeDp(uiHelper.getToolbarIconSize());
// selection handled in onOptionsItemSelected
}
private void initializeListHeader(LayoutInflater inflater) {
this.viewHolder.listHeader = (ViewGroup) inflater.inflate(R.layout.account_header_fragment, null, false);
// take reference text view from layout
this.viewHolder.txtAccountBalance = (TextView) this.viewHolder.listHeader.findViewById(R.id.textViewAccountBalance);
this.viewHolder.txtAccountReconciled = (TextView) this.viewHolder.listHeader.findViewById(R.id.textViewAccountReconciled);
this.viewHolder.txtAccountDifference = (TextView) this.viewHolder.listHeader.findViewById(R.id.textViewDifference);
// favorite icon
this.viewHolder.imgAccountFav = (ImageView) this.viewHolder.listHeader.findViewById(R.id.imageViewAccountFav);
// set listener click on favorite icon for change image
this.viewHolder.imgAccountFav.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// set status account
mAccount.setFavorite(!(mAccount.getFavorite()));
AccountRepository repo = new AccountRepository(getActivity());
boolean updated = repo.save(mAccount);
if (!updated) {
Toast.makeText(getActivity(), getActivity().getResources().getString(R.string.db_update_failed), Toast.LENGTH_LONG).show();
} else {
setImageViewFavorite();
}
}
});
// goto account
this.viewHolder.imgGotoAccount = (ImageView) this.viewHolder.listHeader.findViewById(R.id.imageViewGotoAccount);
this.viewHolder.imgGotoAccount.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getActivity(), AccountEditActivity.class);
intent.putExtra(AccountEditActivity.KEY_ACCOUNT_ID, mAccountId);
intent.setAction(Intent.ACTION_EDIT);
startActivity(intent);
}
});
}
private boolean isStatusSelectionHandled(MenuItem item) {
int id = item.getItemId();
boolean result = true;
// turn filters on/off
TransactionStatuses status = null;
switch(id) {
case R.id.menu_none:
status = TransactionStatuses.NONE;
break;
case R.id.menu_reconciled:
status = TransactionStatuses.RECONCILED;
break;
case R.id.menu_void:
status = TransactionStatuses.VOID;
break;
case R.id.menu_follow_up:
status = TransactionStatuses.FOLLOWUP;
break;
case R.id.menu_duplicate:
status = TransactionStatuses.DUPLICATE;
break;
default:
// not handled here.
result = false;
break;
}
if (result) {
if (item.isChecked()) {
// remove filter
mFilter.transactionStatus.filter.remove(status.getCode());
item.setChecked(false);
} else {
// add filter
mFilter.transactionStatus.filter.add(status.getCode());
item.setChecked(true);
}
loadTransactions();
}
return result;
}
private boolean isFilterSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.menuTransactionFilters) {
// show binaryDialog
showFilterDialog();
return true;
}
return false;
}
private void loadAccountsInto(final Spinner spinner) {
if (spinner == null) return;
AccountService accountService = new AccountService(getActivity());
accountService.loadTransactionAccountsToSpinner(spinner);
// e switching of accounts.
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
// switch account.
Cursor cursor = (Cursor) adapterView.getItemAtPosition(i);
Account account = new Account();
account.loadFromCursor(cursor);
int accountId = account.getId();
switchAccount(accountId);
// color the spinner text of the selected item.
int spinnerItemTextColor = ContextCompat.getColor(getActivity(), R.color.material_grey_50);
((TextView) spinner.getSelectedView()).setTextColor(spinnerItemTextColor);
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
}
/**
* Refreshes the running balance.
*/
private void populateRunningBalance() {
Bundle arguments = prepareQuery();
CalculateRunningBalanceTask2 task = new CalculateRunningBalanceTask2(
getContext(), this.mAccountId, mFilter.dateRange.dateFrom, arguments);
// events now handled in onEvent, using an event bus.
task.execute();
// the result is received in #onTaskComplete.
}
/**
* Implementation using Rx instead of AsyncTask.
*/
private void populateRunningBalanceRx() {
Bundle arguments = prepareQuery();
}
/**
* Prepare SQL query for record selection.
* @return bundle with query
*/
private Bundle prepareQuery() {
WhereStatementGenerator where = new WhereStatementGenerator();
// where.addStatement("(" + QueryAllData.TOACCOUNTID + "=" + Integer.toString(mAccountId) +
// " OR " + QueryAllData.ACCOUNTID + "=" + Integer.toString(mAccountId) + ")");
where.addStatement(
where.concatenateOr(
where.getStatement(ITransactionEntity.TOACCOUNTID, "=", mAccountId),
where.getStatement(ITransactionEntity.ACCOUNTID, "=", mAccountId)
));
where.addStatement(QueryAllData.Date, ">=", new MmxDate(mFilter.dateRange.dateFrom).toIsoString());
where.addStatement(QueryAllData.Date, "<=", new MmxDate(mFilter.dateRange.dateTo).toIsoString());
// Status
where.addStatement(QueryAllData.Status, "IN", mFilter.transactionStatus.getSqlParameters());
// create a bundle to returns
String sortArgument = QueryAllData.Date + " DESC, ";
if (mSortTransactionsByType) {
sortArgument += QueryAllData.TransactionType + ", ";
}
sortArgument += QueryAllData.ID + " DESC";
Bundle args = new Bundle();
args.putString(AllDataListFragment.KEY_ARGUMENTS_WHERE, where.getWhere());
args.putString(AllDataListFragment.KEY_ARGUMENTS_SORT, sortArgument);
return args;
}
private void reloadAccountInfo() {
AccountRepository repo = new AccountRepository(getActivity());
mAccount = repo.load(mAccountId);
}
private void restoreInstanceState(Bundle savedInstanceState) {
if (savedInstanceState == null) return;
mAccountId = savedInstanceState.getInt(KEY_CONTENT);
mFilter.transactionStatus.filter = savedInstanceState.getStringArrayList(KEY_STATUS);
}
/**
* refresh UI, show favorite icon
*/
private void setImageViewFavorite() {
if (mAccount.getFavorite()) {
this.viewHolder.imgAccountFav.setBackgroundResource(R.drawable.ic_star);
} else {
this.viewHolder.imgAccountFav.setBackgroundResource(R.drawable.ic_star_outline);
}
}
/**
* Show the account balances (current & reconciled) in the header.
*/
private void setTextViewBalance() {
// Reload account info as it can be changed via dropdown. Need a currency info here.
reloadAccountInfo();
// write account balance
if (mAccount != null) {
CurrencyService currencyService = new CurrencyService(getActivity().getApplicationContext());
this.viewHolder.txtAccountBalance.setText(currencyService.getCurrencyFormatted(
mAccount.getCurrencyId(), mAccountBalance));
this.viewHolder.txtAccountReconciled.setText(currencyService.getCurrencyFormatted(
mAccount.getCurrencyId(), mAccountReconciled));
this.viewHolder.txtAccountDifference.setText(currencyService.getCurrencyFormatted(
mAccount.getCurrencyId(), mAccountReconciled.subtract(mAccountBalance)));
}
}
/**
* Select the current account in the accounts dropdown.
*/
private void selectCurrentAccount() {
Spinner spinner = getAccountsSpinner();
if (spinner == null) return;
// find account
SimpleCursorAdapter adapter = (SimpleCursorAdapter) spinner.getAdapter();
if (adapter == null) return;
Cursor cursor = adapter.getCursor();
int position = Constants.NOT_SET;
for (int i = 0; i < adapter.getCount(); i++) {
cursor.moveToPosition(i);
String accountIdString = cursor.getString(cursor.getColumnIndex(Account.ACCOUNTID));
int accountId = Integer.parseInt(accountIdString);
if (accountId == mAccountId) {
position = i;
break;
}
}
spinner.setSelection(position);
}
private void selectCurrentPeriod(Menu menu) {
MenuItem item = menu.findItem(R.id.menu_period);
if (item == null) return;
SubMenu subMenu = item.getSubMenu();
// on init, mark the default item as checked
AppSettings settings = new AppSettings(getActivity());
DefinedDateRangeName rangeName = settings.getLookAndFeelSettings().getShowTransactions();
if (rangeName == null) return;
DefinedDateRanges ranges = new DefinedDateRanges(getActivity());
DefinedDateRange range = ranges.get(rangeName);
if (range == null) return;
int id = range.menuResourceId;
MenuItem itemToMark = subMenu.findItem(id);
if (itemToMark == null) return;
itemToMark.setChecked(true);
}
private void selectCurrentStatus(Menu menu) {
MenuItem toolbarItem = menu.findItem(R.id.menuTransactionStatusSelector);
if (toolbarItem == null) return;
SubMenu subMenu = toolbarItem.getSubMenu();
for (int i = 0; i < subMenu.size(); i++) {
MenuItem subItem = subMenu.getItem(i);
int menuId = subItem.getItemId();
if (mFilter.transactionStatus.contains(menuId)) {
subItem.setChecked(true);
}
}
}
private void switchAccount(int accountId) {
if (accountId == mAccountId) return;
// switch account. Reload transactions.
mAccountId = accountId;
mAllDataListFragment.AccountId = accountId;
mAllDataListFragment.loadData(prepareQuery());
// hide account details bar if all accounts are selected
if (accountId == Constants.NOT_SET) {
/*
See Watchlist Fragment for reference.
*/
// mAllDataListFragment.getListView().removeHeaderView(this.viewHolder.listHeader);
this.viewHolder.listHeader.findViewById(R.id.headerRow).setVisibility(View.GONE);
} else {
if (mAllDataListFragment.getListView().getHeaderViewsCount() == 0) {
mAllDataListFragment.getListView().addHeaderView(this.viewHolder.listHeader);
}
this.viewHolder.listHeader.findViewById(R.id.headerRow).setVisibility(View.VISIBLE);
}
}
private void showFilterDialog() {
int numberOfRecords = mAllDataListFragment.getListAdapter().getCount();
FilterDialogFragment dialog = FilterDialogFragment.newInstance(mFilter, mAccount, numberOfRecords);
dialog.show(getActivity().getFragmentManager(), TAG_FILTER_DIALOG);
}
private void showTransactionsFragment(ViewGroup header) {
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
mAllDataListFragment = AllDataListFragment.newInstance(mAccountId);
// append search arguments
// mAllDataListFragment.setArguments(prepareQuery());
Bundle searchQuery = prepareQuery();
mAllDataListFragment.getArguments().putAll(searchQuery);
if (header != null) mAllDataListFragment.setListHeader(header);
updateAllDataListFragmentShowBalance();
mAllDataListFragment.setAutoStarLoader(false);
mAllDataListFragment.setSearResultFragmentLoaderCallbacks(this);
// add fragment
transaction.replace(R.id.fragmentMain, mAllDataListFragment, getFragmentName());
transaction.commit();
}
/**
* start the activity of transaction management
*
* @param transId null set if you want to do a new transaction, or transaction id
*/
private void startCheckingAccountActivity(Integer transId) {
// create intent, set Account ID
Intent intent = new Intent(getActivity(), CheckingTransactionEditActivity.class);
intent.putExtra(EditTransactionActivityConstants.KEY_ACCOUNT_ID, mAccountId);
// check transId not null
if (transId != null) {
intent.putExtra(EditTransactionActivityConstants.KEY_TRANS_ID, transId);
intent.setAction(Intent.ACTION_EDIT);
} else {
intent.setAction(Intent.ACTION_INSERT);
}
// launch activity
startActivity(intent);
}
/**
* start the activity of transaction management
*/
private void startCheckingAccountActivity() {
this.startCheckingAccountActivity(null);
}
private void refreshSettings() {
mSortTransactionsByType = new AppSettings(getActivity()).getLookAndFeelSettings().getSortTransactionsByType();
updateFilterDateRange();
updateAllDataListFragmentShowBalance();
getActivity().invalidateOptionsMenu();
}
private void updateFilterDateRange() {
DefinedDateRangeName rangeName = new AppSettings(getActivity()).getLookAndFeelSettings()
.getShowTransactions();
DefinedDateRanges ranges = new DefinedDateRanges(getActivity());
DefinedDateRange range = ranges.get(rangeName);
mFilter.dateRange = new MmxDateTimeUtils().getDateRangeForPeriod(getActivity(), range.nameResourceId);
}
private void updateAllDataListFragmentShowBalance() {
if (mAllDataListFragment == null) {
return;
}
mAllDataListFragment.setShownBalance(PreferenceManager.getDefaultSharedPreferences(getActivity())
.getBoolean(getString(PreferenceConstants.PREF_TRANSACTION_SHOWN_BALANCE), false));
}
}