package ru.orangesoftware.financisto2.activity; import android.app.Activity; import android.content.Intent; import android.view.View; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.Bean; import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.Extra; import org.androidannotations.annotations.OptionsItem; import org.androidannotations.annotations.ViewById; import ru.orangesoftware.financisto2.R; import ru.orangesoftware.financisto2.model.Account; import ru.orangesoftware.financisto2.model.Currency; import ru.orangesoftware.financisto2.model.Transaction; import ru.orangesoftware.financisto2.utils.CurrencyCache; import ru.orangesoftware.financisto2.utils.MyPreferences; import ru.orangesoftware.financisto2.utils.Utils; import static ru.orangesoftware.financisto2.utils.Utils.text; /** * Created by IntelliJ IDEA. * User: Denis Solonenko * Date: 4/21/11 7:17 PM */ @EActivity public abstract class AbstractSplitActivity extends AbstractActivity { @Bean protected Utils utils; @Extra protected Transaction split; protected Account fromAccount; protected Currency originalCurrency; private ProjectSelector projectSelector; @ViewById(R.id.list) protected LinearLayout layout; protected EditText noteText; protected TextView unsplitAmountText; @AfterViews public void afterViews() { fetchData(); projectSelector = new ProjectSelector(this, x); projectSelector.fetchProjects(); if (split.fromAccountId > 0) { fromAccount = db.getAccount(split.fromAccountId); } if (split.originalCurrencyId > 0) { originalCurrency = CurrencyCache.getCurrency(db, split.originalCurrencyId); } createUI(layout); createCommonUI(layout); updateUI(); } private void createCommonUI(LinearLayout layout) { unsplitAmountText = x.addInfoNode(layout, R.id.add_split, R.string.unsplit_amount, "0"); noteText = new EditText(this); x.addEditNode(layout, R.string.note, noteText); projectSelector.createNode(layout); } protected abstract void fetchData(); protected abstract void createUI(LinearLayout layout); @Override protected void onClick(View v, int id) { projectSelector.onClick(id); } @Override public void onSelectedPos(int id, int selectedPos) { projectSelector.onSelectedPos(id, selectedPos); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); projectSelector.onActivityResult(requestCode, resultCode, data); } @OptionsItem(R.id.menu_save) protected void saveAndFinish() { Intent data = new Intent(); if (updateFromUI()) { split.toIntentAsSplit(data); setResult(Activity.RESULT_OK, data); finish(); } } @OptionsItem(R.id.menu_cancel) protected void cancel() { setResult(RESULT_CANCELED); finish(); } protected boolean updateFromUI() { split.note = text(noteText); split.projectId = projectSelector.getSelectedProjectId(); return true; } protected void updateUI() { projectSelector.selectProject(split.projectId); setNote(split.note); } private void setNote(String note) { noteText.setText(note); } protected void setUnsplitAmount(long amount) { Currency currency = getCurrency(); utils.setAmountText(unsplitAmountText, currency, amount, false); } protected Currency getCurrency() { return originalCurrency != null ? originalCurrency : (fromAccount != null ? fromAccount.currency : Currency.defaultCurrency()); } @Override protected boolean shouldLock() { return MyPreferences.isPinProtectedNewTransaction(this); } }