/*
* Copyright (C) 2012-2016 The Android Money Manager Ex Project Team
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 3
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.money.manager.ex.settings;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v7.preference.ListPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceFragmentCompat;
import com.money.manager.ex.R;
import com.money.manager.ex.common.AmountInputDialog;
import com.money.manager.ex.common.events.AmountEnteredEvent;
import com.money.manager.ex.investment.QuoteProviders;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import info.javaperformance.money.Money;
/**
* Look & feel preferences.
*/
public class InvestmentSettingsFragment
extends PreferenceFragmentCompat {
private static final String KEY_THRESHOLD = "AssetAllocationThreshold";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
PreferenceManager.getDefaultSharedPreferences(getActivity());
InvestmentPreferencesViewHolder viewHolder = new InvestmentPreferencesViewHolder(this);
initializeAssetAllocationThreshold(viewHolder);
initializeQuotesProvider(viewHolder);
initializeExchangeRatesProvider(viewHolder);
}
@Override
public void onCreatePreferences(Bundle bundle, String s) {
// use either setPreferenceScreen(PreferenceScreen) or addPreferencesFromResource(int).
addPreferencesFromResource(R.xml.preferences_investment);
}
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
// Events
@Subscribe
public void onEvent(AmountEnteredEvent event) {
if (event.requestId.equals(KEY_THRESHOLD)) {
InvestmentSettings settings = new InvestmentSettings(getActivity());
settings.setAssetAllocationDifferenceThreshold(event.amount);
}
}
// Private
private void displayQuotesProvider(String providerName) {
ListPreference preference = (ListPreference) findPreference(getString(R.string.pref_quote_provider));
if (preference == null) return;
preference.setSummary(providerName); // show current value
}
private void displayExchangeRatesProvider(String providerName) {
ListPreference preference = (ListPreference) findPreference(getString(R.string.pref_exchange_rate_provider));
if (preference == null) return;
preference.setSummary(providerName); // show current value
}
private void initializeAssetAllocationThreshold(InvestmentPreferencesViewHolder viewHolder) {
if (viewHolder.threshold == null) return;
final InvestmentSettings settings = new InvestmentSettings(getActivity());
Preference.OnPreferenceClickListener listener = new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Money value = settings.getAssetAllocationDifferenceThreshold();
// show number entry form
AmountInputDialog
.getInstance(KEY_THRESHOLD, value)
.show(getFragmentManager(), KEY_THRESHOLD);
return true;
}
};
viewHolder.threshold.setOnPreferenceClickListener(listener);
}
private void initializeQuotesProvider(InvestmentPreferencesViewHolder viewHolder) {
ListPreference preference = viewHolder.quoteProvider;
if (preference == null) return;
// initialize
preference.setEntries(QuoteProviders.names());
preference.setEntryValues(QuoteProviders.names());
preference.setDefaultValue(QuoteProviders.YahooYql.name());
final InvestmentSettings settings = new InvestmentSettings(getContext());
QuoteProviders currentProvider = settings.getQuoteProvider();
preference.setSummary(currentProvider.name()); // show current value
// preference.setValue(currentProvider.name());
displayQuotesProvider(currentProvider.name());
Preference.OnPreferenceChangeListener listener = new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object o) {
// update
String name = (String) o;
QuoteProviders provider = QuoteProviders.valueOf(name);
settings.setQuoteProvider(provider);
displayQuotesProvider(name);
return true;
}
};
preference.setOnPreferenceChangeListener(listener);
}
private void initializeExchangeRatesProvider(InvestmentPreferencesViewHolder viewHolder) {
ListPreference preference = viewHolder.exchangeRateProvider;
if (preference == null) return;
// initialize
preference.setEntries(QuoteProviders.names());
preference.setEntryValues(QuoteProviders.names());
preference.setDefaultValue(QuoteProviders.YahooYql.name());
final InvestmentSettings settings = new InvestmentSettings(getContext());
QuoteProviders currentProvider = settings.getExchangeRateProvider();
preference.setSummary(currentProvider.name()); // show current value
// preference.setValue(currentProvider.name());
displayExchangeRatesProvider(currentProvider.name());
Preference.OnPreferenceChangeListener listener = new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object o) {
// update
String name = (String) o;
QuoteProviders provider = QuoteProviders.valueOf(name);
settings.setExchangeRateProvider(provider);
displayExchangeRatesProvider(name);
return true;
}
};
preference.setOnPreferenceChangeListener(listener);
}
}