package net.bonysoft.mapsmuzei; import android.animation.LayoutTransition; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.view.View; import android.view.ViewGroup; import android.widget.*; public class SettingsActivity extends Activity { private ViewGroup mMainView; private TextView mZoomValue; private Spinner mUpdateInterval; private Spinner mMapType; private CheckBox mInvertLightness; private SeekBar mZoom; private Switch mWiFiOnly; private SharedPreferences mPrefs; private boolean isSomethingModified = false; private boolean isVisibilityInitDone = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_settings); mMainView = (ViewGroup) findViewById(R.id.layout_main); mMapType = (Spinner) findViewById(R.id.map_type_spinner); mUpdateInterval = (Spinner) findViewById(R.id.update_interval_spinner); mInvertLightness = (CheckBox) findViewById(R.id.check_inverse); mZoom = (SeekBar) findViewById(R.id.zoom_bar); mZoomValue = (TextView) findViewById(R.id.zoom_value); mWiFiOnly = (Switch) findViewById(R.id.wifi_only_switch); ArrayAdapter<CharSequence> mapTypesAdapter = ArrayAdapter.createFromResource(this, R.array.map_types_titles, android.R.layout.simple_spinner_item); mapTypesAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); mMapType.setAdapter(mapTypesAdapter); mMapType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { savePreference(Constants.PREF_MAP_TYPE, position); boolean goingToVisible = position == MapTheme.MODE_MAP || position == MapTheme.MODE_TERRAIN; mInvertLightness.setVisibility(goingToVisible ? View.VISIBLE : View.GONE); enableAnimateLayoutChanges(); } @Override public void onNothingSelected(AdapterView<?> parent) {} }); ArrayAdapter<CharSequence> intervalsAdapter = ArrayAdapter.createFromResource(this, R.array.update_frequency_titles, android.R.layout.simple_spinner_item); intervalsAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); mUpdateInterval.setAdapter(intervalsAdapter); mUpdateInterval.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { savePreference(Constants.PREF_UPDATE_INTERVAL, position); } @Override public void onNothingSelected(AdapterView<?> parent) {} }); mZoom.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { mZoomValue.setText(String.valueOf(progress)); savePreference(Constants.PREF_ZOOM, progress); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); mInvertLightness.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { saveBooleanPreference(Constants.PREF_INVERTED, isChecked); } }); mWiFiOnly.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { saveBooleanPreference(Constants.PREF_WIFI_ONLY, checked); } }); initFromPreferences(); } /** * Enable the layout animations for the container layout */ private void enableAnimateLayoutChanges() { if (!isVisibilityInitDone) { isVisibilityInitDone = true; mMainView.setLayoutTransition(new LayoutTransition()); } } @Override protected void onPause() { super.onPause(); if (isSomethingModified) { Intent intent = new Intent(MapsArtSource.ACTION_SETTINGS_MODIFIED); intent.setClass(this, MapsArtSource.class); startService(intent); } } /** * Load the the settings from SharedPreferencies and set the views accordingly */ private void initFromPreferences() { if (mPrefs == null) { mPrefs = PreferenceManager.getDefaultSharedPreferences(this); } boolean isInverted = mPrefs.getBoolean(Constants.PREF_INVERTED, Constants.PREF_INVERTED_DEFAULT); int mapMode = mPrefs.getInt(Constants.PREF_MAP_TYPE, Constants.PREF_MAP_TYPE_DEFAULT); int zoom = mPrefs.getInt(Constants.PREF_ZOOM, Constants.PREF_ZOOM_DEFAULT); int updateInterval = mPrefs.getInt(Constants.PREF_UPDATE_INTERVAL, Constants.PREF_UPDATE_INTERVAL_DEFAULT); boolean wifiOnly = mPrefs.getBoolean(Constants.PREF_WIFI_ONLY, Constants.PREF_WIFI_ONLY_DEFAULT); mInvertLightness.setChecked(isInverted); mMapType.setSelection(mapMode); mUpdateInterval.setSelection(updateInterval); mZoom.setProgress(zoom); mZoomValue.setText(String.valueOf(zoom)); mWiFiOnly.setChecked(wifiOnly); } private void saveBooleanPreference(String key, boolean value) { if (mPrefs == null) { mPrefs = PreferenceManager.getDefaultSharedPreferences(this); } isSomethingModified = true; mPrefs.edit().putBoolean(key, value).apply(); } private void savePreference(String key, int value) { if (mPrefs == null) { mPrefs = PreferenceManager.getDefaultSharedPreferences(this); } isSomethingModified = true; mPrefs.edit().putInt(key, value).apply(); } }