com.money.manager.ex.search.SearchParametersFragment.java Source code

Java tutorial

Introduction

Here is the source code for com.money.manager.ex.search.SearchParametersFragment.java

Source

/*
 * 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.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;

import com.codetroopers.betterpickers.calendardatepicker.CalendarDatePickerDialogFragment;
import com.mikepenz.google_material_typeface_library.GoogleMaterial;
import com.money.manager.ex.MoneyManagerApplication;
import com.money.manager.ex.common.Calculator;
import com.money.manager.ex.common.CalculatorActivity;
import com.money.manager.ex.core.RequestCodes;
import com.money.manager.ex.core.UIHelper;
import com.money.manager.ex.domainmodel.SplitCategory;
import com.money.manager.ex.servicelayer.AccountService;
import com.money.manager.ex.common.CategoryListActivity;
import com.money.manager.ex.Constants;
import com.money.manager.ex.PayeeActivity;
import com.money.manager.ex.R;
import com.money.manager.ex.core.FormatUtilities;
import com.money.manager.ex.database.QueryAllData;
import com.money.manager.ex.database.WhereStatementGenerator;
import com.money.manager.ex.domainmodel.Account;
import com.money.manager.ex.settings.AppSettings;
import com.money.manager.ex.settings.LookAndFeelSettings;
import com.money.manager.ex.utils.MmxDate;
import com.money.manager.ex.utils.MmxDateTimeUtils;

import org.parceler.Parcels;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.inject.Inject;

import butterknife.ButterKnife;
import butterknife.OnClick;
import dagger.Lazy;
import info.javaperformance.money.Money;
import info.javaperformance.money.MoneyFactory;
import timber.log.Timber;

/**
 * The form with search parameter input fields.
 */
public class SearchParametersFragment extends Fragment {

    private static final String KEY_SEARCH_CRITERIA = "KEY_SEARCH_CRITERIA";
    public static final String DATEPICKER_TAG = "datepicker";

    @Inject
    Lazy<MmxDateTimeUtils> dateTimeUtilsLazy;

    private SearchParametersViewHolder viewHolder;

    private Spinner spinAccount, spinStatus;
    private EditText txtNotes;
    private TextView txtSelectCategory;
    private CheckBox cbxWithdrawal, cbxTransfer;
    // arrays list account name and account id
    private ArrayList<String> mAccountNameList = new ArrayList<>();
    private ArrayList<Integer> mAccountIdList = new ArrayList<>();
    private List<Account> mAccountList;
    // status item and values
    private ArrayList<String> mStatusItems = new ArrayList<>();
    private ArrayList<String> mStatusValues = new ArrayList<>();

    public static SearchParametersFragment createInstance() {
        SearchParametersFragment fragment = new SearchParametersFragment();

        Bundle args = new Bundle();
        fragment.setArguments(args);

        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        MoneyManagerApplication.getApp().iocComponent.inject(this);

        setHasOptionsMenu(true);

        if (getSearchParameters() == null) {
            setSearchParameters(new SearchParameters());
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        if (container == null)
            return null;

        View view = inflater.inflate(R.layout.fragment_search_parameters, container, false);

        // bind events
        ButterKnife.bind(this, view);
        // bind controls
        viewHolder = new SearchParametersViewHolder(view);

        initializeUiControlVariables(view);

        // Account
        if (mAccountList == null) {
            LookAndFeelSettings settings = new AppSettings(getContext()).getLookAndFeelSettings();
            AccountService accountService = new AccountService(getContext());
            mAccountList = accountService.getAccountList(settings.getViewOpenAccounts(),
                    settings.getViewFavouriteAccounts());
            mAccountList.add(0, null);
            for (int i = 0; i <= mAccountList.size() - 1; i++) {
                if (mAccountList.get(i) != null) {
                    mAccountNameList.add(mAccountList.get(i).getName());
                    mAccountIdList.add(mAccountList.get(i).getId());
                } else {
                    mAccountNameList.add("");
                    mAccountIdList.add(AdapterView.INVALID_POSITION);
                }
            }
        }
        // create adapter for spinAccount
        ArrayAdapter<String> adapterAccount = new ArrayAdapter<>(getActivity(),
                android.R.layout.simple_spinner_item, mAccountNameList);
        adapterAccount.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinAccount.setAdapter(adapterAccount);

        //Payee
        viewHolder.txtSelectPayee.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getActivity(), PayeeActivity.class);
                intent.setAction(Intent.ACTION_PICK);
                startActivityForResult(intent, RequestCodes.PAYEE);
            }
        });

        //Category
        txtSelectCategory.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getActivity(), CategoryListActivity.class);
                intent.setAction(Intent.ACTION_PICK);
                startActivityForResult(intent, RequestCodes.CATEGORY);
            }
        });

        // Status
        if (mStatusItems.size() <= 0) {
            // add blank row
            mStatusItems.add("");
            mStatusValues.add(SearchParameters.STRING_NULL_VALUE);

            mStatusItems.addAll(Arrays.asList(getResources().getStringArray(R.array.status_items)));
            mStatusValues.addAll(Arrays.asList(getResources().getStringArray(R.array.status_values)));
        }
        // create adapter for spinnerStatus
        ArrayAdapter<String> adapterStatus = new ArrayAdapter<>(getActivity(), android.R.layout.simple_spinner_item,
                mStatusItems);
        adapterStatus.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinStatus.setAdapter(adapterStatus);

        // Date from
        //        viewHolder.txtDateFrom.setOnClickListener(new OnDateButtonClickListener(getActivity(), viewHolder.txtDateFrom));
        // Date to
        //        viewHolder.txtDateTo.setOnClickListener(new OnDateButtonClickListener(getActivity(), viewHolder.txtDateTo));

        // Store search criteria values into the controls.
        displaySearchCriteria(view);

        return view;
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if ((resultCode == Activity.RESULT_CANCELED) || data == null)
            return;

        SearchParameters searchParameters;
        String stringExtra;

        switch (requestCode) {
        case RequestCodes.PAYEE:
            viewHolder.txtSelectPayee
                    .setTag(data.getIntExtra(PayeeActivity.INTENT_RESULT_PAYEEID, Constants.NOT_SET));
            viewHolder.txtSelectPayee.setText(data.getStringExtra(PayeeActivity.INTENT_RESULT_PAYEENAME));
            break;
        case RequestCodes.CATEGORY:
            //create class for store data
            CategorySub categorySub = new CategorySub();
            categorySub.categId = data.getIntExtra(CategoryListActivity.INTENT_RESULT_CATEGID, Constants.NOT_SET);
            categorySub.categName = data.getStringExtra(CategoryListActivity.INTENT_RESULT_CATEGNAME);
            categorySub.subCategId = data.getIntExtra(CategoryListActivity.INTENT_RESULT_SUBCATEGID,
                    Constants.NOT_SET);
            categorySub.subCategName = data.getStringExtra(CategoryListActivity.INTENT_RESULT_SUBCATEGNAME);
            //update into button
            displayCategory(categorySub);
            break;

        case RequestCodes.AMOUNT_FROM:
            stringExtra = data.getStringExtra(CalculatorActivity.RESULT_AMOUNT);
            searchParameters = getSearchParameters();
            searchParameters.amountFrom = MoneyFactory.fromString(stringExtra);
            setSearchParameters(searchParameters);
            displayAmountFrom();
            break;

        case RequestCodes.AMOUNT_TO:
            stringExtra = data.getStringExtra(CalculatorActivity.RESULT_AMOUNT);
            searchParameters = getSearchParameters();
            searchParameters.amountTo = MoneyFactory.fromString(stringExtra);
            setSearchParameters(searchParameters);
            displayAmountTo();
            break;
        }
    }

    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
        super.onSaveInstanceState(savedInstanceState);

        View view = getView();
        if (view != null) {
            initializeUiControlVariables(view);
            setSearchParameters(collectSearchCriteria());
        }

        SearchParameters searchParameters = getSearchParameters();
        savedInstanceState.putParcelable(KEY_SEARCH_CRITERIA, Parcels.wrap(searchParameters));
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        UIHelper ui = new UIHelper(getActivity());

        // 'Reset' toolbar item
        inflater.inflate(R.menu.menu_clear, menu);
        MenuItem item = menu.findItem(R.id.clearMenuItem);
        item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
        item.setIcon(ui.getIcon(GoogleMaterial.Icon.gmd_clear));

        super.onCreateOptionsMenu(menu, inflater);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.clearMenuItem:
            setSearchParameters(new SearchParameters());
            displaySearchCriteria();
            return true;

        default:
            return super.onOptionsItemSelected(item);
        }
    }

    /*
    Public
     */

    public SearchParameters getSearchParameters() {
        Bundle arguments = getArguments();
        if (arguments == null)
            return null;

        Parcelable searchParcel = arguments.getParcelable(KEY_SEARCH_CRITERIA);
        if (searchParcel == null)
            return null;

        SearchParameters parameters = Parcels.unwrap(searchParcel);
        return parameters;
    }

    public String getWhereStatement() {
        // Store parameters from UI.
        SearchParameters searchParameters = collectSearchCriteria();
        setSearchParameters(searchParameters);

        String where = assembleWhereClause();

        return where;
    }

    public void setSearchParameters(SearchParameters parameters) {
        if (parameters == null)
            return;

        getArguments().putParcelable(KEY_SEARCH_CRITERIA, Parcels.wrap(parameters));
        displaySearchCriteria();
    }

    @OnClick(R.id.textViewFromDate)
    void onDateFromClicked() {
        MmxDate currentValue = new MmxDate(getSearchParameters().dateFrom);

        CalendarDatePickerDialogFragment datePicker = new CalendarDatePickerDialogFragment()
                .setFirstDayOfWeek(dateTimeUtilsLazy.get().getFirstDayOfWeek())
                .setOnDateSetListener(new CalendarDatePickerDialogFragment.OnDateSetListener() {
                    @Override
                    public void onDateSet(CalendarDatePickerDialogFragment dialog, int year, int monthOfYear,
                            int dayOfMonth) {
                        MmxDate date = new MmxDate(year, monthOfYear, dayOfMonth);

                        SearchParameters parameters = getSearchParameters();
                        parameters.dateFrom = date.toDate();
                        setSearchParameters(parameters);

                        String displayText = new MmxDateTimeUtils().getUserFormattedDate(getActivity(),
                                date.toDate());
                        viewHolder.txtDateFrom.setText(displayText);
                    }
                }).setPreselectedDate(currentValue.getYear(), currentValue.getMonthOfYear(),
                        currentValue.getDayOfMonth());

        if (new UIHelper(getActivity()).isUsingDarkTheme()) {
            datePicker.setThemeDark();
        }
        datePicker.show(getActivity().getSupportFragmentManager(), DATEPICKER_TAG);
    }

    @OnClick(R.id.textViewToDate)
    void onDateToClicked() {
        MmxDate currentValue = new MmxDate(getSearchParameters().dateTo);

        CalendarDatePickerDialogFragment datePicker = new CalendarDatePickerDialogFragment()
                .setFirstDayOfWeek(dateTimeUtilsLazy.get().getFirstDayOfWeek())
                .setOnDateSetListener(new CalendarDatePickerDialogFragment.OnDateSetListener() {
                    @Override
                    public void onDateSet(CalendarDatePickerDialogFragment dialog, int year, int monthOfYear,
                            int dayOfMonth) {
                        MmxDate date = new MmxDate(year, monthOfYear, dayOfMonth);

                        SearchParameters parameters = getSearchParameters();
                        parameters.dateTo = date.toDate();
                        setSearchParameters(parameters);

                        String displayText = new MmxDateTimeUtils().getUserFormattedDate(getActivity(),
                                date.toDate());
                        viewHolder.txtDateTo.setText(displayText);
                    }
                }).setPreselectedDate(currentValue.getYear(), currentValue.getMonthOfYear(),
                        currentValue.getDayOfMonth());

        if (new UIHelper(getActivity()).isUsingDarkTheme()) {
            datePicker.setThemeDark();
        }
        datePicker.show(getActivity().getSupportFragmentManager(), DATEPICKER_TAG);
    }

    @OnClick(R.id.textViewFromAmount)
    void onAmountFromClicked() {
        Money amount = getSearchParameters().amountFrom;
        if (amount == null) {
            amount = MoneyFactory.fromDouble(0);
        }

        //        Intent intent = IntentFactory.getNumericInputIntent(getActivity(), amount);
        //        startActivityForResult(intent, RequestCodes.AMOUNT_FROM);
        Calculator.forActivity(getActivity()).amount(amount).show(RequestCodes.AMOUNT_FROM);
    }

    @OnClick(R.id.textViewToAmount)
    void onAmountToClicked() {
        Money amount = getSearchParameters().amountTo;
        if (amount == null) {
            amount = MoneyFactory.fromDouble(0);
        }

        //        Intent intent = IntentFactory.getNumericInputIntent(getActivity(), amount);
        //        startActivityForResult(intent, RequestCodes.AMOUNT_TO);
        Calculator.forActivity(getActivity()).amount(amount).show(RequestCodes.AMOUNT_TO);
    }

    // Private

    /**
     * Assemble SQL query from the search parameters.
     * @return where clause with parameters
     */
    private String assembleWhereClause() {
        WhereStatementGenerator where = new WhereStatementGenerator();
        SearchParameters searchParameters = getSearchParameters();

        // account
        if (searchParameters.accountId != null && searchParameters.accountId != Constants.NOT_SET) {
            where.addStatement(
                    where.concatenateOr(where.getStatement(QueryAllData.ACCOUNTID, "=", searchParameters.accountId),
                            where.getStatement(QueryAllData.TOACCOUNTID, "=", searchParameters.accountId)));
        }
        // transaction type
        if (searchParameters.deposit || searchParameters.transfer || searchParameters.withdrawal) {
            where.addStatement(
                    QueryAllData.TransactionType + " IN (" + (searchParameters.deposit ? "'Deposit'" : "''") + ","
                            + (searchParameters.transfer ? "'Transfer'" : "''") + ","
                            + (searchParameters.withdrawal ? "'Withdrawal'" : "''") + ")");
        }

        // status
        if (!searchParameters.status.equals(SearchParameters.STRING_NULL_VALUE)) {
            where.addStatement(QueryAllData.Status, "=", searchParameters.status);
        }

        addAmountStatements(where, searchParameters);

        // from date
        if (searchParameters.dateFrom != null) {
            where.addStatement(QueryAllData.Date, " >= ", new MmxDate(searchParameters.dateFrom).toIsoString());
        }
        // to date
        if (searchParameters.dateTo != null) {
            where.addStatement(QueryAllData.Date, " <= ", new MmxDate(searchParameters.dateTo).toIsoString());
        }
        // payee
        if (searchParameters.payeeId != null) {
            where.addStatement(QueryAllData.PayeeID, " = ", searchParameters.payeeId);
        }
        // category
        if (searchParameters.category != null) {
            CategorySub categorySub = searchParameters.category;
            // Category. Also check the splits.
            where.addStatement("(" + "(" + QueryAllData.CategID + "=" + Integer.toString(categorySub.categId) + ") "
                    + " OR (" + categorySub.categId + " IN (select " + QueryAllData.CategID + " FROM "
                    + SplitCategory.TABLE_NAME + " WHERE " + SplitCategory.TRANSID + "=" + QueryAllData.ID + ")"
                    + ")" + ")");

            // subcategory
            if (categorySub.subCategId != Constants.NOT_SET) {
                // Subcategory. Also check the splits.
                where.addStatement("(" + "(" + QueryAllData.SubcategID + "="
                        + Integer.toString(categorySub.subCategId) + ") " + " OR (" + categorySub.subCategId
                        + " IN (select " + QueryAllData.SubcategID + " FROM " + SplitCategory.TABLE_NAME + " WHERE "
                        + SplitCategory.TRANSID + " = " + QueryAllData.ID + ")" + ")" + ")");
            }
        }

        // transaction number
        if (!TextUtils.isEmpty(searchParameters.transactionNumber)) {
            where.addStatement(QueryAllData.TransactionNumber, " LIKE ", searchParameters.transactionNumber);
        }
        // notes
        if (!TextUtils.isEmpty(searchParameters.notes)) {
            where.addStatement(QueryAllData.Notes + " LIKE '%" + searchParameters.notes + "%'");
        }

        return where.getWhere();
    }

    private void addAmountStatements(WhereStatementGenerator where, SearchParameters searchParameters) {
        if (searchParameters.amountFrom != null && searchParameters.amountTo != null) {
            addAmountStatementForBothAmounts(where, searchParameters);
            return;
        }

        // Only one on no amounts entered.

        // from amount
        if (searchParameters.amountFrom != null) {
            where.addStatement(QueryAllData.Amount, " >= ", searchParameters.amountFrom);
        }
        // to amount
        if (searchParameters.amountTo != null) {
            where.addStatement(QueryAllData.Amount, " <= ", searchParameters.amountTo);
        }

    }

    private void addAmountStatementForBothAmounts(WhereStatementGenerator where,
            SearchParameters searchParameters) {
        // Automatically decide from/to amounts by comparing them.
        Money lowerAmount = searchParameters.amountFrom.compareTo(searchParameters.amountTo) == -1
                ? searchParameters.amountFrom
                : searchParameters.amountTo;
        Money higherAmount = searchParameters.amountFrom.compareTo(searchParameters.amountTo) == 1
                ? searchParameters.amountFrom
                : searchParameters.amountTo;

        // from amount
        if (searchParameters.amountFrom != null) {
            where.addStatement(QueryAllData.Amount, " >= ", lowerAmount);
        }
        // to amount
        if (searchParameters.amountTo != null) {
            where.addStatement(QueryAllData.Amount, " <= ", higherAmount);
        }
    }

    private SearchParameters collectSearchCriteria() {
        if (getView() == null) {
            return getSearchParameters();
        }

        SearchParameters searchParameters = getSearchParameters();

        // Account
        if (this.spinAccount != null) {
            int selectedAccountPosition = spinAccount.getSelectedItemPosition();
            if (selectedAccountPosition != AdapterView.INVALID_POSITION) {
                int selectedAccountId = mAccountIdList.get(selectedAccountPosition);
                if (selectedAccountId != Constants.NOT_SET) {
                    searchParameters.accountId = selectedAccountId;
                }
            }
        }

        // Transaction Type
        searchParameters.deposit = viewHolder.cbxDeposit.isChecked();
        searchParameters.transfer = cbxTransfer.isChecked();
        searchParameters.withdrawal = cbxWithdrawal.isChecked();

        // Status
        if (spinStatus.getSelectedItemPosition() > 0) {
            searchParameters.status = mStatusValues.get(spinStatus.getSelectedItemPosition());
        }

        // Amount from
        Object tag = viewHolder.txtAmountFrom.getTag();
        if (tag != null) {
            searchParameters.amountFrom = MoneyFactory.fromString((String) tag);
        }
        // Amount to
        tag = viewHolder.txtAmountTo.getTag();
        if (tag != null) {
            searchParameters.amountTo = MoneyFactory.fromString((String) tag);
        }

        //        // Date from
        //        if (viewHolder.txtDateFrom.getTag() != null) {
        //            searchParameters.dateFrom = new MmxDate(viewHolder.txtDateFrom.getTag().toString()).toDate();
        //        }
        //        // Date to
        //        if (viewHolder.txtDateTo.getTag() != null) {
        //            String dateString = viewHolder.txtDateTo.getTag().toString();
        //            searchParameters.dateTo = new MmxDate(dateString).toDate();
        //        }
        // Payee
        if (viewHolder.txtSelectPayee.getTag() != null) {
            searchParameters.payeeId = Integer.parseInt(viewHolder.txtSelectPayee.getTag().toString());
            searchParameters.payeeName = viewHolder.txtSelectPayee.getText().toString();
        }
        // Category
        if (txtSelectCategory.getTag() != null) {
            searchParameters.category = (CategorySub) txtSelectCategory.getTag();
        }
        // Transaction number
        if (!TextUtils.isEmpty(viewHolder.txtTransNumber.getText())) {
            searchParameters.transactionNumber = viewHolder.txtTransNumber.getText().toString();
        }
        // Notes
        if (!TextUtils.isEmpty(txtNotes.getText())) {
            searchParameters.notes = txtNotes.getText().toString();
        }

        return searchParameters;
    }

    private void displayAmountFrom() {
        FormatUtilities format = new FormatUtilities(getActivity());
        String displayAmount = format.formatWithLocale(getSearchParameters().amountFrom);
        viewHolder.txtAmountFrom.setText(displayAmount);
    }

    private void displayAmountTo() {
        FormatUtilities format = new FormatUtilities(getActivity());
        String displayAmount = format.formatWithLocale(getSearchParameters().amountTo);
        viewHolder.txtAmountTo.setText(displayAmount);
    }

    private void displayCategory(CategorySub categorySub) {
        if (categorySub == null) {
            txtSelectCategory.setText("");
            txtSelectCategory.setTag(null);
        } else {
            txtSelectCategory.setText(categorySub.categName
                    + (!TextUtils.isEmpty(categorySub.subCategName) ? " : " + categorySub.subCategName : ""));
            txtSelectCategory.setTag(categorySub);
        }
    }

    private void displaySearchCriteria() {
        displaySearchCriteria(getView());
    }

    private void displaySearchCriteria(View view) {
        if (view == null)
            return;

        SearchParameters searchParameters = getSearchParameters();

        // Account
        this.spinAccount.setSelection(0);

        // Transaction Type
        viewHolder.cbxDeposit.setChecked(searchParameters.deposit);
        cbxTransfer.setChecked(searchParameters.transfer);
        cbxWithdrawal.setChecked(searchParameters.withdrawal);

        // Status
        this.spinStatus.setSelection(0);

        // Amount from
        if (searchParameters.amountFrom != null) {
            FormatUtilities format = new FormatUtilities(getActivity());
            String displayAmount = format.formatWithLocale(searchParameters.amountFrom);
            viewHolder.txtAmountFrom.setText(displayAmount);

            viewHolder.txtAmountFrom.setTag(searchParameters.amountFrom.toString());
        } else {
            viewHolder.txtAmountFrom.setText("");
            viewHolder.txtAmountFrom.setTag(null);
        }

        // Amount to
        if (searchParameters.amountTo != null) {
            FormatUtilities format = new FormatUtilities(getActivity());
            String displayAmount = format.formatWithLocale(searchParameters.amountTo);
            viewHolder.txtAmountTo.setText(displayAmount);

            viewHolder.txtAmountTo.setTag(searchParameters.amountTo.toString());
        } else {
            viewHolder.txtAmountTo.setText("");
            viewHolder.txtAmountTo.setTag(null);
        }

        // Date from
        //        if (searchParameters.dateFrom == null) {
        //            viewHolder.txtDateFrom.setTag(null);
        //        }
        //        else {
        //            viewHolder.txtDateFrom.setTag(new MmxDate(searchParameters.dateFrom).toIsoString());
        //        }
        viewHolder.txtDateFrom
                .setText(dateTimeUtilsLazy.get().getUserFormattedDate(getContext(), searchParameters.dateFrom));
        // Date to
        //        if (searchParameters.dateTo == null) {
        //            viewHolder.txtDateTo.setTag(null);
        //        }
        //        else {
        //            viewHolder.txtDateTo.setTag(new MmxDate(searchParameters.dateTo).toIsoString());
        //        }
        viewHolder.txtDateTo
                .setText(dateTimeUtilsLazy.get().getUserFormattedDate(getContext(), searchParameters.dateTo));

        // Payee
        viewHolder.txtSelectPayee.setTag(searchParameters.payeeId);
        viewHolder.txtSelectPayee.setText(searchParameters.payeeName);
        // Category
        displayCategory(searchParameters.category);
        // Transaction number
        viewHolder.txtTransNumber.setText(searchParameters.transactionNumber);
        // Notes
        txtNotes.setText(searchParameters.notes);
    }

    private void initializeUiControlVariables(View view) {
        if (view == null)
            return;

        spinAccount = (Spinner) view.findViewById(R.id.spinnerAccount);

        // Transaction Type checkboxes.
        cbxTransfer = (CheckBox) view.findViewById(R.id.checkBoxTransfer);
        cbxWithdrawal = (CheckBox) view.findViewById(R.id.checkBoxWithdrawal);

        txtSelectCategory = (TextView) view.findViewById(R.id.textViewSelectCategory);

        spinStatus = (Spinner) view.findViewById(R.id.spinnerStatus);

        // notes
        txtNotes = (EditText) view.findViewById(R.id.editTextNotes);
    }
}