/* * SicMu Player - Lightweight music player for Android * Copyright (C) 2015 Mathieu Souchaud * * 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 souch.smp; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Bundle; import android.os.IBinder; import android.preference.CheckBoxPreference; import android.preference.EditTextPreference; import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceActivity; import android.util.Log; import android.widget.Toast; import java.io.File; import java.util.Formatter; public class Settings extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener, Preference.OnPreferenceClickListener { private Parameters params; private MusicService musicSrv; private Intent playIntent; private boolean serviceBound = false; // todo: improve preference default value @Override protected void onCreate(Bundle savedInstanceState) { Log.d("Settings", "onCreate"); super.onCreate(savedInstanceState); params = new ParametersImpl(this); // fixme: everything should be put in onResume? addPreferencesFromResource(R.xml.preferences); playIntent = new Intent(this, MusicService.class); bindService(playIntent, musicConnection, Context.BIND_AUTO_CREATE); SharedPreferences sharedPreferences = getPreferenceScreen().getSharedPreferences(); String thresholdKeys = PrefKeys.SHAKE_THRESHOLD.name(); EditTextPreference prefShakeThreshold = (EditTextPreference) findPreference(thresholdKeys); CheckBoxPreference prefEnableShake = (CheckBoxPreference) findPreference(PrefKeys.ENABLE_SHAKE.name()); if(getPackageManager().hasSystemFeature(PackageManager.FEATURE_SENSOR_ACCELEROMETER)) { prefShakeThreshold.setSummary(String.valueOf(params.getShakeThreshold())); prefEnableShake.setChecked(params.getEnableShake()); } else { prefShakeThreshold.setEnabled(false); prefEnableShake.setEnabled(false); Toast.makeText(getApplicationContext(), getResources().getString(R.string.settings_no_accelerometer), Toast.LENGTH_LONG).show(); } findPreference(PrefKeys.TEXT_SIZE_NORMAL.name()).setSummary(String.valueOf(params.getNormalTextSize())); findPreference(PrefKeys.TEXT_SIZE_BIG.name()).setSummary(String.valueOf(params.getBigTextSize())); findPreference(PrefKeys.TEXT_SIZE_RATIO.name()).setSummary(String.valueOf(params.getTextSizeRatio())); Preference rescan = findPreference(getResources().getString(R.string.settings_rescan_key)); rescan.setOnPreferenceClickListener(this); Preference donate = findPreference(getResources().getString(R.string.settings_donate_key)); donate.setOnPreferenceClickListener(this); setUnfoldSubgroup(); setUnfoldThresholdSummary(); String rootFoldersKey = PrefKeys.ROOT_FOLDERS.name(); EditTextPreference prefRootFolders = (EditTextPreference) findPreference(rootFoldersKey); prefRootFolders.setSummary(params.getRootFolders()); if(!sharedPreferences.contains(rootFoldersKey)) prefRootFolders.setText(Path.getMusicStoragesStr(getBaseContext())); setFoldSummary(); this.onContentChanged(); } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if(!serviceBound) return; Log.d("MusicService", "onSharedPreferenceChanged: " + key); if(key.equals(PrefKeys.DEFAULT_FOLD.name())) { setFoldSummary(); } else if(key.equals(PrefKeys.TEXT_SIZE_NORMAL.name())) { findPreference(key).setSummary(String.valueOf(params.getNormalTextSize())); Main.applyTextSize(params); musicSrv.setChanged(); } else if(key.equals(PrefKeys.TEXT_SIZE_BIG.name())) { findPreference(key).setSummary(String.valueOf(params.getBigTextSize())); Main.applyTextSize(params); musicSrv.setChanged(); } else if(key.equals(PrefKeys.TEXT_SIZE_RATIO.name())) { findPreference(key).setSummary(String.valueOf(String.valueOf(params.getTextSizeRatio()))); Main.applyTextSize(params); musicSrv.setChanged(); } else if(key.equals(PrefKeys.ENABLE_SHAKE.name())) { musicSrv.setEnableShake(params.getEnableShake()); } else if(key.equals(PrefKeys.SHAKE_THRESHOLD.name())) { final float threshold = params.getShakeThreshold(); musicSrv.setShakeThreshold(threshold); findPreference(key).setSummary(String.valueOf(threshold)); } else if(key.equals(PrefKeys.UNFOLD_SUBGROUP.name())) { setUnfoldSubgroup(); } else if(key.equals(PrefKeys.UNFOLD_SUBGROUP_THRESHOLD.name())) { setUnfoldThresholdSummary(); } else if(key.equals(PrefKeys.ROOT_FOLDERS.name())) { final String rootFolder = params.getRootFolders(); findPreference(key).setSummary(rootFolder); if(!(new File(rootFolder)).exists()) { Formatter formatter = new Formatter(); formatter.format(getResources().getString(R.string.settings_root_folder_summary), rootFolder); Toast.makeText(getApplicationContext(), formatter.toString(), Toast.LENGTH_LONG).show(); } boolean reinited = musicSrv.getRows().setRootFolders(rootFolder); if(reinited) musicSrv.setChanged(); } } private void setUnfoldSubgroup() { findPreference(PrefKeys.UNFOLD_SUBGROUP_THRESHOLD.name()).setEnabled(!params.getUnfoldSubGroup()); } private void setUnfoldThresholdSummary() { Formatter formatter = new Formatter(); formatter.format(getResources().getString(R.string.settings_unfold_subgroup_threshold_summary), params.getUnfoldSubGroupThreshold()); findPreference(PrefKeys.UNFOLD_SUBGROUP_THRESHOLD.name()).setSummary(formatter.toString()); } private void setFoldSummary() { int idx = params.getDefaultFold(); ListPreference prefFold = (ListPreference) findPreference(PrefKeys.DEFAULT_FOLD.name()); String[] foldEntries = getResources().getStringArray(R.array.settings_fold_entries); if (idx >= foldEntries.length) idx = foldEntries.length - 1; if (idx >= 0) prefFold.setSummary(foldEntries[idx]); } private void showDonateWebsite() { Intent webIntent = new Intent(Intent.ACTION_VIEW); webIntent.setData(Uri.parse(getString(R.string.settings_donate_www))); this.startActivity(webIntent); } private ServiceConnection musicConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { Log.d("Settings", "onServiceConnected"); MusicService.MusicBinder binder = (MusicService.MusicBinder) service; musicSrv = binder.getService(); serviceBound = true; } @Override public void onServiceDisconnected(ComponentName name) { Log.d("Settings", "onServiceDisconnected"); serviceBound = false; } }; @Override protected void onDestroy() { unbindService(musicConnection); serviceBound = false; musicSrv = null; super.onDestroy(); } @Override protected void onResume() { super.onResume(); // Set up a listener whenever a key changes getPreferenceScreen().getSharedPreferences() .registerOnSharedPreferenceChangeListener(this); } @Override protected void onPause() { super.onPause(); // Unregister the listener whenever a key changes getPreferenceScreen().getSharedPreferences() .unregisterOnSharedPreferenceChangeListener(this); } @Override public boolean onPreferenceClick(Preference preference) { if(preference.getKey().equals(getResources().getString(R.string.settings_rescan_key))) { rescan(); } else if (preference.getKey().equals(getResources().getString(R.string.settings_donate_key))) { showDonateWebsite(); } return false; } public void rescan() { Path.rescanWhole(getBaseContext()); } }