package ru.orangesoftware.financisto2.fragment; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.Bean; import org.androidannotations.annotations.EFragment; import org.androidannotations.annotations.OptionsItem; import org.androidannotations.annotations.OptionsMenu; import org.androidannotations.annotations.ViewById; import greendroid.widget.QuickAction; import greendroid.widget.QuickActionGrid; import greendroid.widget.QuickActionWidget; import ru.orangesoftware.financisto2.R; import ru.orangesoftware.financisto2.activity.AccountActivity_; import ru.orangesoftware.financisto2.activity.AccountBlotterActivity_; import ru.orangesoftware.financisto2.activity.PurgeAccountActivity_; import ru.orangesoftware.financisto2.activity.TransactionActivity_; import ru.orangesoftware.financisto2.activity.TransferActivity_; import ru.orangesoftware.financisto2.adapter.AccountListAdapter; import ru.orangesoftware.financisto2.bus.AccountList; import ru.orangesoftware.financisto2.bus.GetAccountList; import ru.orangesoftware.financisto2.db.DatabaseAdapter; import ru.orangesoftware.financisto2.model.Account; import static ru.orangesoftware.financisto2.utils.MyPreferences.isQuickMenuEnabledForAccount; @EFragment(R.layout.fragment_accounts) @OptionsMenu(R.menu.account_list_menu) public class AccountListFragment extends AbstractFragment implements QuickActionWidget.OnQuickActionClickListener { @Bean protected DatabaseAdapter db; @ViewById(R.id.recyclerView) RecyclerView recyclerView; private QuickActionWidget actionGrid; private long selectedId = -1; @AfterViews public void initViews() { LinearLayoutManager layoutManager = new LinearLayoutManager(getContext()); layoutManager.setOrientation(LinearLayoutManager.VERTICAL); recyclerView.setHasFixedSize(true); recyclerView.setLayoutManager(layoutManager); recyclerView.setItemAnimator(new DefaultItemAnimator()); ItemClickSupport.addTo(recyclerView).setOnItemClickListener(new ItemClickSupport.OnItemClickListener() { @Override public void onItemClicked(RecyclerView recyclerView, int position, long id, View v) { onListItemClick(v, position, id); } }); } @Override protected void reload() { bus.post(new GetAccountList()); } public void onEventMainThread(AccountList event) { AccountListAdapter adapter = new AccountListAdapter(getActivity(), event.accounts); recyclerView.setAdapter(adapter); } @OptionsItem(R.id.menu_add_account) public void addAccount() { AccountActivity_.intent(this).start(); } public void onListItemClick(View v, int position, long id) { if (isQuickMenuEnabledForAccount(getActivity())) { selectedId = id; prepareAccountActionGrid(); actionGrid.show(v); } else { showAccountTransactions(id); } } private void prepareAccountActionGrid() { Context context = getActivity(); Account a = db.getAccount(selectedId); actionGrid = new QuickActionGrid(context); actionGrid.addQuickAction(new QuickAction(context, R.drawable.ic_action_info, R.string.info)); actionGrid.addQuickAction(new QuickAction(context, R.drawable.ic_action_list, R.string.blotter)); actionGrid.addQuickAction(new QuickAction(context, R.drawable.ic_action_edit, R.string.edit)); actionGrid.addQuickAction(new QuickAction(context, R.drawable.ic_action_add, R.string.transaction)); actionGrid.addQuickAction(new QuickAction(context, R.drawable.ic_action_transfer_thin, R.string.transfer)); actionGrid.addQuickAction(new QuickAction(context, R.drawable.ic_action_tick, R.string.balance)); actionGrid.addQuickAction(new QuickAction(context, R.drawable.ic_action_flash, R.string.delete_old_transactions)); if (a.isActive) { actionGrid.addQuickAction(new QuickAction(context, R.drawable.ic_action_lock_closed, R.string.close_account)); } else { actionGrid.addQuickAction(new QuickAction(context, R.drawable.ic_action_lock_open, R.string.reopen_account)); } actionGrid.addQuickAction(new QuickAction(context, R.drawable.ic_action_trash, R.string.delete_account)); actionGrid.setOnQuickActionClickListener(this); } @Override public void onQuickActionClicked(QuickActionWidget widget, int position) { switch (position) { case 0: showAccountInfo(); break; case 1: showAccountTransactions(selectedId); break; case 2: editAccount(); break; case 3: addTransaction(); break; case 4: addTransaction(); break; case 5: updateAccountBalance(); break; case 6: purgeAccount(); break; case 7: flipAccount(); break; case 8: deleteAccount(); break; } } private void showAccountInfo() { } private void showAccountTransactions(long id) { AccountBlotterActivity_.intent(getActivity()).accountId(id).start(); } private void editAccount() { AccountActivity_.intent(this).accountId(selectedId).start(); } private void addTransaction() { TransactionActivity_.intent(this).accountId(selectedId).start(); } private void addTransfer() { TransferActivity_.intent(this).accountId(selectedId).start(); } private void updateAccountBalance() { Account a = db.getAccount(selectedId); if (a != null) { TransactionActivity_.intent(this).accountId(selectedId) .currentBalance(a.totalAmount).isUpdateBalanceMode(true).start(); } } private void purgeAccount() { PurgeAccountActivity_.intent(this).accountId(selectedId).startForResult(0); } private void flipAccount() { Account a = db.getAccount(selectedId); a.isActive = !a.isActive; db.saveAccount(a); reload(); } private void deleteAccount() { new AlertDialog.Builder(getActivity()) .setMessage(R.string.delete_account_confirm) .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener(){ @Override public void onClick(DialogInterface arg0, int arg1) { db.deleteAccount(selectedId); reload(); } }) .setNegativeButton(R.string.no, null) .show(); } }