public
class
SearchForm
extends
LinearLayout {
@InjectView
(R.id.account)
private
Spinner mAccountSpinner;
private
AccountAdapter mAccountAdapter;
@InjectView
(R.id.keyword)
private
EditText mKeywordField;
@InjectView
(R.id.min_amount)
private
CurrencyEditText mMinAmountField;
@InjectView
(R.id.max_amount)
private
CurrencyEditText mMaxAmountField;
public
SearchFormModel(Context context, AttributeSet attrs) {
super
(context, attrs);
setup(context);
}
private
void
setup(Context context) {
LayoutInflater.from(context).inflate(R.layout.search_form,
this
,
true
);
ButterKnife.inject(
this
);
mAccountAdapter =
new
AccountAdapter(context);
mAccountSpinner.setAdapter(mAccountAdapter);
}
public
initialize(List<Account> accounts) {
mAccountAdapter.setItems(accounts);
}
public
String getKeywords() {
return
mKeywordField.getText().toString();
}
public
void
setKeywords(String keywords) {
mKeywordField.setText(keywords);
}
public
MoneyAmount getMinimumAmount() {
return
mMinAmountField.getAmount();
}
public
void
setMinimumAmount(
double
amount) {
mMinmountField.setAmountFromDouble(amount);
}
public
MoneyAmount getMaximumAmount() {
return
mMaxAmountField.getAmount();
}
public
void
setMaximumAmount(
double
amount) {
mMaxAmountField.setAmountFromDouble(amount);
}
public
Account getSelectedAccount() {
return
mAccountSpinner.getSelectedItem();
}
public
boolean
validate() {
clearErrors();
boolean
isValid =
true
;
if
(!isValidAmountRange()) {
isValid =
false
;
mMinAmountField.setError(
"Invalid range"
);
mMaxAmountField.setError(
"Invalid range"
);
}
return
isValid;
}
private
boolean
isValidAmountRange() {
return
getMinimumAmount() <= getMaximumAmount();
}
private
void
clearErrors() {
mMinAmountField.setError(
null
);
mMaxAmountField.setError(
null
);
}
public
SearchParameters buildParameters() {
return
new
SearchParameters(getSelectedAccount(),
getKeywords(),
getMinimumAmount(),
getMaximumAmount());
}
public
void
persist(Bundle outState) {
outState.putInt(
"SELECTED_ACCT_INDEX"
, mAccountSpinner.getSelectedItemPosition());
}
public
void
restore(Bundle bundle) {
int
accountPosition = bundle.getInt(
"SELECTED_ACCT_INDEX"
);
mAccountSpinner.setSelection(accountPosition,
false
);
}
}