/******************************************************************************* * Copyright (c) 2010 Denis Solonenko. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v2.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * * Contributors: * Denis Solonenko - initial API and implementation ******************************************************************************/ package ru.orangesoftware.financisto2.activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.CheckBox; import android.widget.Spinner; import java.util.ArrayList; import java.util.List; import ru.orangesoftware.financisto2.R; import ru.orangesoftware.financisto2.db.DatabaseAdapter; import ru.orangesoftware.financisto2.db.DatabaseAdapter_; import ru.orangesoftware.financisto2.model.Account; import ru.orangesoftware.financisto2.model.MultiChoiceItem; import ru.orangesoftware.financisto2.utils.CurrencyExportPreferences; import ru.orangesoftware.financisto2.view.NodeInflater; public class QifExportActivity extends AbstractExportActivity implements ActivityLayoutListener { public static final String QIF_EXPORT_SELECTED_ACCOUNTS = "QIF_EXPORT_SELECTED_ACCOUNTS"; public static final String QIF_EXPORT_DATE_FORMAT = "QIF_EXPORT_DATE_FORMAT"; public static final String QIF_EXPORT_UPLOAD_TO_DROPBOX = "QIF_EXPORT_UPLOAD_TO_DROPBOX"; private final CurrencyExportPreferences currencyPreferences = new CurrencyExportPreferences("qif"); private DatabaseAdapter db; private List<Account> accounts; private Button bAccounts; public QifExportActivity() { super(R.layout.qif_export); } @Override protected void internalOnCreate() { LayoutInflater layoutInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); NodeInflater nodeInflater = new NodeInflater(layoutInflater); final ActivityLayout activityLayout = new ActivityLayout(nodeInflater, this); db = DatabaseAdapter_.getInstance_(this); accounts = db.getAllAccountsList(); bAccounts = (Button)findViewById(R.id.bAccounts); bAccounts.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { activityLayout.selectMultiChoice(QifExportActivity.this, R.id.bAccounts, R.string.accounts, accounts); } }); clearFilter(); } @Override public void onSelected(int id, List<? extends MultiChoiceItem> items) { List<Account> selectedAccounts = getSelectedAccounts(); if (selectedAccounts.size() == 0 || selectedAccounts.size() == accounts.size()) { bAccounts.setText(R.string.all_accounts); } else { StringBuilder sb = new StringBuilder(); for (Account a : selectedAccounts) { appendItemTo(sb, a.title); } bAccounts.setText(sb.toString()); } } private ArrayList<Account> getSelectedAccounts() { ArrayList<Account> selected = new ArrayList<Account>(); for (MultiChoiceItem i : accounts) { if (i.isChecked()) { selected.add((Account)i); } } return selected; } private void appendItemTo(StringBuilder sb, String s) { if (sb.length() > 0) { sb.append(", "); } sb.append(s); } @Override public void onSelectedPos(int id, int selectedPos) { } @Override public void onSelectedId(int id, long selectedId) { } @Override public void onClick(View view) { } @Override protected void updateResultIntentFromUi(Intent data) { currencyPreferences.updateIntentFromUI(this, data); long[] selectedIds = getSelectedAccountsIds(); if (selectedIds.length > 0) { data.putExtra(QIF_EXPORT_SELECTED_ACCOUNTS, selectedIds); } Spinner dateFormats = (Spinner)findViewById(R.id.spinnerDateFormats); data.putExtra(QIF_EXPORT_DATE_FORMAT, dateFormats.getSelectedItem().toString()); CheckBox uploadToDropbox = (CheckBox)findViewById(R.id.checkboxUploadToDropbox); data.putExtra(QIF_EXPORT_UPLOAD_TO_DROPBOX, uploadToDropbox.isChecked()); } private long[] getSelectedAccountsIds() { List<Long> selectedAccounts = new ArrayList<Long>(accounts.size()); for (Account account : accounts) { if (account.isChecked()) { selectedAccounts.add(account.id); } } int count = selectedAccounts.size(); long[] ids = new long[count]; for (int i=0; i<count; i++) { ids[i] = selectedAccounts.get(i); } return ids; } protected void savePreferences() { SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit(); currencyPreferences.savePreferences(this, editor); long[] selectedIds = getSelectedAccountsIds(); if (selectedIds.length > 0) { editor.putString(QIF_EXPORT_SELECTED_ACCOUNTS, joinSelectedAccounts(selectedIds)); } Spinner dateFormats = (Spinner)findViewById(R.id.spinnerDateFormats); editor.putInt(QIF_EXPORT_DATE_FORMAT, dateFormats.getSelectedItemPosition()); CheckBox uploadToDropbox = (CheckBox)findViewById(R.id.checkboxUploadToDropbox); editor.putBoolean(QIF_EXPORT_UPLOAD_TO_DROPBOX, uploadToDropbox.isChecked()); editor.commit(); } private String joinSelectedAccounts(long[] selectedIds) { StringBuilder sb = new StringBuilder(); for (long selectedId : selectedIds) { if (sb.length() > 0) sb.append(","); sb.append(selectedId); } return sb.toString(); } protected void restorePreferences() { SharedPreferences preferences = getPreferences(MODE_PRIVATE); currencyPreferences.restorePreferences(this, preferences); String selectedIds = preferences.getString(QIF_EXPORT_SELECTED_ACCOUNTS, ""); parseSelectedAccounts(selectedIds); onSelected(-1, accounts); Spinner dateFormats = (Spinner)findViewById(R.id.spinnerDateFormats); dateFormats.setSelection(preferences.getInt(QIF_EXPORT_DATE_FORMAT, 0)); CheckBox uploadToDropbox = (CheckBox)findViewById(R.id.checkboxUploadToDropbox); uploadToDropbox.setChecked(preferences.getBoolean(QIF_EXPORT_UPLOAD_TO_DROPBOX, false)); } private void parseSelectedAccounts(String selectedIds) { try { TextUtils.SimpleStringSplitter splitter = new TextUtils.SimpleStringSplitter(','); splitter.setString(selectedIds); for (String s : splitter) { long id = Long.parseLong(s); for (Account account : accounts) { if (account.id == id) { account.setChecked(true); break; } } } } catch (Exception ex) { // ignore } } }