/* * Copyright (c) 2012 - 2015 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.content.SharedPreferences; import android.os.Bundle; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceFragmentCompat; import android.support.v7.preference.SwitchPreferenceCompat; import org.gnucash.android.R; import org.gnucash.android.db.DatabaseSchema; import org.gnucash.android.db.adapter.AccountsDbAdapter; import org.gnucash.android.db.adapter.BooksDbAdapter; import org.gnucash.android.db.adapter.CommoditiesDbAdapter; import org.gnucash.android.model.Commodity; import org.gnucash.android.ui.settings.dialog.DeleteAllTransactionsConfirmationDialog; import java.util.Currency; import java.util.List; /** * Fragment for displaying transaction preferences * @author Ngewi Fet <ngewif@gmail.com> * */ public class TransactionsPreferenceFragment extends PreferenceFragmentCompat implements Preference.OnPreferenceChangeListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getPreferenceManager().setSharedPreferencesName(BooksDbAdapter.getInstance().getActiveBookUID()); ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar(); actionBar.setHomeButtonEnabled(true); actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setTitle(R.string.title_transaction_preferences); } @Override public void onCreatePreferences(Bundle bundle, String s) { addPreferencesFromResource(R.xml.fragment_transaction_preferences); } @Override public void onResume() { super.onResume(); SharedPreferences sharedPreferences = getPreferenceManager().getSharedPreferences(); String defaultTransactionType = sharedPreferences.getString( getString(R.string.key_default_transaction_type), getString(R.string.label_debit)); Preference pref = findPreference(getString(R.string.key_default_transaction_type)); setLocalizedSummary(pref, defaultTransactionType); pref.setOnPreferenceChangeListener(this); pref = findPreference(getString(R.string.key_use_double_entry)); pref.setOnPreferenceChangeListener(this); String keyCompactView = getString(R.string.key_use_compact_list); SwitchPreferenceCompat switchPref = (SwitchPreferenceCompat) findPreference(keyCompactView); switchPref.setChecked(sharedPreferences.getBoolean(keyCompactView, false)); String keySaveBalance = getString(R.string.key_save_opening_balances); switchPref = (SwitchPreferenceCompat) findPreference(keySaveBalance); switchPref.setChecked(sharedPreferences.getBoolean(keySaveBalance, false)); String keyDoubleEntry = getString(R.string.key_use_double_entry); switchPref = (SwitchPreferenceCompat) findPreference(keyDoubleEntry); switchPref.setChecked(sharedPreferences.getBoolean(keyDoubleEntry, true)); Preference preference = findPreference(getString(R.string.key_delete_all_transactions)); preference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { showDeleteTransactionsDialog(); return true; } }); } @Override public boolean onPreferenceChange(Preference preference, Object newValue) { if (preference.getKey().equals(getString(R.string.key_use_double_entry))){ boolean useDoubleEntry = (Boolean) newValue; setImbalanceAccountsHidden(useDoubleEntry); } else { setLocalizedSummary(preference, newValue.toString()); } return true; } /** * Deletes all transactions in the system */ public void showDeleteTransactionsDialog(){ DeleteAllTransactionsConfirmationDialog deleteTransactionsConfirmationDialog = DeleteAllTransactionsConfirmationDialog.newInstance(); deleteTransactionsConfirmationDialog.show(getActivity().getSupportFragmentManager(), "transaction_settings"); } /** * Hide all imbalance accounts when double-entry mode is disabled * @param useDoubleEntry flag if double entry is enabled or not */ private void setImbalanceAccountsHidden(boolean useDoubleEntry) { String isHidden = useDoubleEntry ? "0" : "1"; AccountsDbAdapter accountsDbAdapter = AccountsDbAdapter.getInstance(); List<Commodity> commodities = accountsDbAdapter.getCommoditiesInUse(); for (Commodity commodity : commodities) { String uid = accountsDbAdapter.getImbalanceAccountUID(commodity); if (uid != null){ accountsDbAdapter.updateRecord(uid, DatabaseSchema.AccountEntry.COLUMN_HIDDEN, isHidden); } } } /** * Localizes the label for DEBIT/CREDIT in the settings summary * @param preference Preference whose summary is to be localized * @param value New value for the preference summary */ private void setLocalizedSummary(Preference preference, String value){ String localizedLabel = value.equals("DEBIT") ? getString(R.string.label_debit) : getActivity().getString(R.string.label_credit); preference.setSummary(localizedLabel); } }