diff --git a/src/main/java/org/tasks/preferences/MiscellaneousPreferences.java b/src/main/java/org/tasks/preferences/MiscellaneousPreferences.java index 8b1d16f7e..c3c75f597 100644 --- a/src/main/java/org/tasks/preferences/MiscellaneousPreferences.java +++ b/src/main/java/org/tasks/preferences/MiscellaneousPreferences.java @@ -1,29 +1,26 @@ package org.tasks.preferences; import android.content.Intent; -import android.content.res.Resources; import android.os.Bundle; import android.preference.Preference; -import android.preference.PreferenceGroup; -import android.preference.PreferenceScreen; import android.speech.tts.TextToSpeech; import android.text.TextUtils; import com.todoroo.astrid.data.TaskAttachment; import com.todoroo.astrid.files.FileExplore; import com.todoroo.astrid.gcal.CalendarAlarmScheduler; -import com.todoroo.astrid.utility.TodorooPreferenceActivity; import com.todoroo.astrid.voice.VoiceOutputAssistant; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.tasks.R; +import org.tasks.injection.InjectingPreferenceActivity; import javax.inject.Inject; import static com.todoroo.andlib.utility.AndroidUtilities.preFroyo; -public class MiscellaneousPreferences extends TodorooPreferenceActivity { +public class MiscellaneousPreferences extends InjectingPreferenceActivity { private static final Logger log = LoggerFactory.getLogger(MiscellaneousPreferences.class); private static final int REQUEST_CODE_FILES_DIR = 2; @@ -37,37 +34,19 @@ public class MiscellaneousPreferences extends TodorooPreferenceActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - PreferenceScreen screen = getPreferenceScreen(); + addPreferencesFromResource(R.xml.preferences_misc); - screen.findPreference(getString(R.string.p_files_dir)).setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + findPreference(getString(R.string.p_debug_logging)).setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override - public boolean onPreferenceClick(Preference p) { - Intent filesDir = new Intent(MiscellaneousPreferences.this, FileExplore.class); - filesDir.putExtra(FileExplore.EXTRA_DIRECTORIES_SELECTABLE, true); - startActivityForResult(filesDir, REQUEST_CODE_FILES_DIR); + public boolean onPreferenceChange(Preference preference, Object newValue) { + preferences.setupLogger((boolean) newValue); return true; } }); - addPreferenceListeners(); - } - - @Override - public int getPreferenceResource() { - return R.xml.preferences_misc; - } - - @Override - public void updatePreferences(Preference preference, Object value) { - final Resources r = getResources(); - if (r.getString(R.string.p_files_dir).equals(preference.getKey())) { - String dir = preferences.getStringValue(TaskAttachment.FILES_DIRECTORY_PREF); - preference.setSummary(TextUtils.isEmpty(dir) - ? r.getString(R.string.p_files_dir_desc_default) - : dir); - } else if (r.getString(R.string.p_voiceRemindersEnabled).equals(preference.getKey())) { - onVoiceReminderStatusChanged(preference, (Boolean) value); - } + initializeAttachmentDirectoryPreference(); + initializeCalendarReminderPreference(); + initializeVoiceReminderPreference(); } @Override @@ -76,6 +55,7 @@ public class MiscellaneousPreferences extends TodorooPreferenceActivity { if (data != null) { String dir = data.getStringExtra(FileExplore.RESULT_DIR_SELECTED); preferences.setString(TaskAttachment.FILES_DIRECTORY_PREF, dir); + updateAttachmentDirectory(); } return; } @@ -105,19 +85,32 @@ public class MiscellaneousPreferences extends TodorooPreferenceActivity { voiceOutputAssistant.shutdown(); } - private void addPreferenceListeners() { - findPreference(getString(R.string.p_debug_logging)).setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { + private void initializeAttachmentDirectoryPreference() { + findPreference(getString(R.string.p_files_dir)).setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override - public boolean onPreferenceChange(Preference preference, Object newValue) { - preferences.setupLogger((boolean) newValue); + public boolean onPreferenceClick(Preference p) { + Intent filesDir = new Intent(MiscellaneousPreferences.this, FileExplore.class); + filesDir.putExtra(FileExplore.EXTRA_DIRECTORIES_SELECTABLE, true); + startActivityForResult(filesDir, REQUEST_CODE_FILES_DIR); return true; } }); + updateAttachmentDirectory(); + } + + private void updateAttachmentDirectory() { + String dir = preferences.getStringValue(TaskAttachment.FILES_DIRECTORY_PREF); + findPreference(getString(R.string.p_files_dir)).setSummary(TextUtils.isEmpty(dir) + ? getString(R.string.p_files_dir_desc_default) + : dir); + } + private void initializeCalendarReminderPreference() { + Preference calendarReminderPreference = findPreference(getString(R.string.p_calendar_reminders)); if (preFroyo()) { - searchForAndRemovePreference(getPreferenceScreen(), getString(R.string.p_calendar_reminders)); + getPreferenceScreen().removePreference(calendarReminderPreference); } else { - findPreference(getString(R.string.p_calendar_reminders)).setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { + calendarReminderPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { if (newValue != null && ((Boolean) newValue)) { @@ -129,39 +122,26 @@ public class MiscellaneousPreferences extends TodorooPreferenceActivity { } } - private static boolean searchForAndRemovePreference(PreferenceGroup group, String key) { - int preferenceCount = group.getPreferenceCount(); - for (int i = 0; i < preferenceCount; i++) { - final Preference preference = group.getPreference(i); - final String curKey = preference.getKey(); - - if (curKey != null && curKey.equals(key)) { - group.removePreference(preference); - return true; - } - - if (preference instanceof PreferenceGroup) { - if (searchForAndRemovePreference((PreferenceGroup) preference, key)) { - return true; + private void initializeVoiceReminderPreference() { + findPreference(getString(R.string.p_voiceRemindersEnabled)).setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + boolean enabled = (boolean) newValue; + try { + if (enabled && !voiceOutputAssistant.isTTSInitialized()) { + Intent checkIntent = new Intent(); + checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); + startActivityForResult(checkIntent, REQUEST_CODE_TTS_CHECK); + } else if (!enabled && voiceOutputAssistant.isTTSInitialized()) { + voiceOutputAssistant.shutdown(); + } + } catch (VerifyError e) { + log.error(e.getMessage(), e); + preference.setEnabled(false); + preferences.setBoolean(preference.getKey(), false); } + return true; } - } - return false; - } - - private void onVoiceReminderStatusChanged(final Preference preference, boolean enabled) { - try { - if(enabled && !voiceOutputAssistant.isTTSInitialized()) { - Intent checkIntent = new Intent(); - checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); - startActivityForResult(checkIntent, REQUEST_CODE_TTS_CHECK); - } else if (!enabled && voiceOutputAssistant.isTTSInitialized()) { - voiceOutputAssistant.shutdown(); - } - } catch (VerifyError e) { - log.error(e.getMessage(), e); - preference.setEnabled(false); - preferences.setBoolean(preference.getKey(), false); - } + }); } } diff --git a/src/main/res/xml/preferences_misc.xml b/src/main/res/xml/preferences_misc.xml index a4aa3e8d8..d09704a25 100644 --- a/src/main/res/xml/preferences_misc.xml +++ b/src/main/res/xml/preferences_misc.xml @@ -2,7 +2,7 @@ -