/*
* Copyright (c) 2013 Ngewi Fet <ngewif@gmail.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.gnucash.android.ui.settings;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.preference.ListPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceFragmentCompat;
import org.gnucash.android.R;
import org.gnucash.android.app.GnuCashApplication;
import org.gnucash.android.db.DatabaseSchema;
import org.gnucash.android.db.adapter.CommoditiesDbAdapter;
import org.gnucash.android.model.Money;
import org.gnucash.android.ui.account.AccountsActivity;
import org.gnucash.android.ui.settings.dialog.DeleteAllAccountsConfirmationDialog;
import java.util.ArrayList;
import java.util.List;
/**
* Account settings fragment inside the Settings activity
*
* @author Ngewi Fet <ngewi.fet@gmail.com>
* @author Oleksandr Tyshkovets <olexandr.tyshkovets@gmail.com>
*/
public class AccountPreferencesFragment extends PreferenceFragmentCompat implements
Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener{
List<CharSequence> mCurrencyEntries = new ArrayList<>();
List<CharSequence> mCurrencyEntryValues = new ArrayList<>();
@Override
public void onCreatePreferences(Bundle bundle, String s) {
addPreferencesFromResource(R.xml.fragment_account_preferences);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
actionBar.setTitle(R.string.title_account_preferences);
Cursor cursor = CommoditiesDbAdapter.getInstance().fetchAllRecords(DatabaseSchema.CommodityEntry.COLUMN_MNEMONIC + " ASC");
while(cursor.moveToNext()){
String code = cursor.getString(cursor.getColumnIndexOrThrow(DatabaseSchema.CommodityEntry.COLUMN_MNEMONIC));
String name = cursor.getString(cursor.getColumnIndexOrThrow(DatabaseSchema.CommodityEntry.COLUMN_FULLNAME));
mCurrencyEntries.add(code + " - " + name);
mCurrencyEntryValues.add(code);
}
cursor.close();
}
@Override
public void onResume() {
super.onResume();
String defaultCurrency = GnuCashApplication.getDefaultCurrencyCode();
Preference pref = findPreference(getString(R.string.key_default_currency));
String currencyName = CommoditiesDbAdapter.getInstance().getCommodity(defaultCurrency).getFullname();
pref.setSummary(currencyName);
pref.setOnPreferenceChangeListener(this);
CharSequence[] entries = new CharSequence[mCurrencyEntries.size()];
CharSequence[] entryValues = new CharSequence[mCurrencyEntryValues.size()];
((ListPreference) pref).setEntries(mCurrencyEntries.toArray(entries));
((ListPreference) pref).setEntryValues(mCurrencyEntryValues.toArray(entryValues));
Preference preference = findPreference(getString(R.string.key_import_accounts));
preference.setOnPreferenceClickListener(this);
preference = findPreference(getString(R.string.key_delete_all_accounts));
preference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
showDeleteAccountsDialog();
return true;
}
});
preference = findPreference(getString(R.string.key_create_default_accounts));
preference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
new AlertDialog.Builder(getActivity())
.setTitle(R.string.title_create_default_accounts)
.setMessage(R.string.msg_confirm_create_default_accounts_setting)
.setIcon(R.drawable.ic_warning_black_24dp)
.setPositiveButton(R.string.btn_create_accounts, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
AccountsActivity.createDefaultAccounts(Money.DEFAULT_CURRENCY_CODE, getActivity());
}
})
.setNegativeButton(R.string.btn_cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
}
})
.create()
.show();
return true;
}
});
}
@Override
public boolean onPreferenceClick(Preference preference) {
String key = preference.getKey();
if (key.equals(getString(R.string.key_import_accounts))){
AccountsActivity.startXmlFileChooser(this);
return true;
}
return false;
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (preference.getKey().equals(getString(R.string.key_default_currency))){
GnuCashApplication.setDefaultCurrencyCode(newValue.toString());
String fullname = CommoditiesDbAdapter.getInstance().getCommodity(newValue.toString()).getFullname();
preference.setSummary(fullname);
return true;
}
return false;
}
/**
* Show the dialog for deleting accounts
*/
public void showDeleteAccountsDialog(){
DeleteAllAccountsConfirmationDialog deleteConfirmationDialog = DeleteAllAccountsConfirmationDialog.newInstance();
deleteConfirmationDialog.show(getActivity().getSupportFragmentManager(), "account_settings");
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode){
case AccountsActivity.REQUEST_PICK_ACCOUNTS_FILE:
if (resultCode == Activity.RESULT_OK && data != null) {
AccountsActivity.importXmlFileFromIntent(getActivity(), data, null);
}
break;
}
}
}