package cy.agorise.crystalwallet.activities; import androidx.lifecycle.LiveData; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import android.os.Bundle; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import android.widget.ArrayAdapter; import android.widget.Spinner; import java.util.ArrayList; import java.util.Collections; import java.util.Currency; import java.util.HashMap; import java.util.List; import java.util.Locale; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnItemSelected; import cy.agorise.crystalwallet.R; import cy.agorise.crystalwallet.models.GeneralSetting; import cy.agorise.crystalwallet.viewmodels.GeneralSettingListViewModel; public class GeneralSettingsActivity extends AppCompatActivity { @BindView(R.id.spPreferedCountry) Spinner spPreferedCountry; private GeneralSettingListViewModel generalSettingListViewModel; private LiveData> generalSettingListLiveData; private HashMap countriesMap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.general_settings); ButterKnife.bind(this); this.generalSettingListViewModel = ViewModelProviders.of(this).get(GeneralSettingListViewModel.class); generalSettingListLiveData = generalSettingListViewModel.getGeneralSettingList(); // Initializes the countries spinner countriesMap = new HashMap(); String[] countryCodeList = Locale.getISOCountries(); ArrayList countryAndCurrencyList = new ArrayList(); String countryAndCurrencyLabel = ""; for (String countryCode : countryCodeList) { Locale locale = new Locale("", countryCode); try { Currency currency = Currency.getInstance(locale); countryAndCurrencyLabel = locale.getDisplayCountry() + " (" + currency.getCurrencyCode() + ")"; countryAndCurrencyList.add(countryAndCurrencyLabel); countriesMap.put(countryCode, countryAndCurrencyLabel); countriesMap.put(countryAndCurrencyLabel, countryCode); } catch (Exception e) { } } Collections.sort(countryAndCurrencyList); countryAndCurrencyList.add(0,"SELECT COUNTRY"); ArrayAdapter countryAdapter = new ArrayAdapter(this.getApplicationContext(), android.R.layout.simple_spinner_item, countryAndCurrencyList); spPreferedCountry.setAdapter(countryAdapter); //Observes the general settings data generalSettingListLiveData.observe(this, new Observer>() { @Override public void onChanged(@Nullable List generalSettings) { loadSettings(generalSettings); } }); } public GeneralSetting getSetting(String name){ for (GeneralSetting generalSetting:this.generalSettingListLiveData.getValue()) { if (generalSetting.getName().equals(name)) { return generalSetting; } } return null; } @OnItemSelected(R.id.spPreferedCountry) void onItemSelected(int position) { if (position != 0) { GeneralSetting generalSettingCountryCode = this.getSetting(GeneralSetting.SETTING_NAME_PREFERRED_COUNTRY); GeneralSetting generalSettingCurrency = this.getSetting(GeneralSetting.SETTING_NAME_PREFERRED_CURRENCY); if (generalSettingCountryCode == null){ generalSettingCountryCode = new GeneralSetting(); generalSettingCountryCode.setName(GeneralSetting.SETTING_NAME_PREFERRED_COUNTRY); } if (generalSettingCurrency == null){ generalSettingCurrency = new GeneralSetting(); generalSettingCurrency.setName(GeneralSetting.SETTING_NAME_PREFERRED_CURRENCY); } String countryCode = countriesMap.get((String) spPreferedCountry.getSelectedItem()); Locale locale = new Locale("", countryCode); Currency currency = Currency.getInstance(locale); generalSettingCountryCode.setValue(countryCode); generalSettingCurrency.setValue(currency.getCurrencyCode()); this.generalSettingListViewModel.saveGeneralSettings(generalSettingCountryCode, generalSettingCurrency); } } public void loadSettings(List generalSettings){ for (GeneralSetting generalSetting:generalSettings) { if (generalSetting.getName().equals(GeneralSetting.SETTING_NAME_PREFERRED_COUNTRY)){ String preferedCountryCode = generalSetting.getValue(); spPreferedCountry.setSelection(((ArrayAdapter)spPreferedCountry.getAdapter()).getPosition(countriesMap.get(preferedCountryCode))); } } } }