Added MiscellaneousPreferences activity

pull/253/head
Alex Baker 9 years ago
parent b9d7a9ff05
commit 0cb0b056de

@ -171,6 +171,10 @@
android:name="com.todoroo.astrid.activity.EditPreferences"
android:theme="@android:style/Theme" />
<activity
android:name=".preferences.MiscellaneousPreferences"
android:theme="@android:style/Theme" />
<!-- Activity that configures widget -->
<activity android:name="com.todoroo.astrid.widget.WidgetConfigActivity">
<intent-filter>

@ -6,41 +6,29 @@
package com.todoroo.astrid.activity;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceGroup;
import android.preference.PreferenceScreen;
import android.speech.tts.TextToSpeech;
import android.text.TextUtils;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.backup.BackupPreferences;
import com.todoroo.astrid.core.DefaultsPreferences;
import com.todoroo.astrid.core.OldTaskPreferences;
import com.todoroo.astrid.data.TaskAttachment;
import com.todoroo.astrid.files.FileExplore;
import com.todoroo.astrid.gcal.CalendarAlarmScheduler;
import com.todoroo.astrid.gtasks.GtasksPreferences;
import com.todoroo.astrid.reminders.ReminderPreferences;
import com.todoroo.astrid.service.StartupService;
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.preferences.Preferences;
import org.tasks.preferences.MiscellaneousPreferences;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import static com.todoroo.andlib.utility.AndroidUtilities.preFroyo;
/**
* Displays the preference screen for users to edit their preferences
*
@ -49,18 +37,11 @@ import static com.todoroo.andlib.utility.AndroidUtilities.preFroyo;
*/
public class EditPreferences extends TodorooPreferenceActivity {
private static final Logger log = LoggerFactory.getLogger(EditPreferences.class);
private static final int REQUEST_CODE_FILES_DIR = 2;
private static final int REQUEST_CODE_TTS_CHECK = 2534;
public static final int RESULT_CODE_PERFORMANCE_PREF_CHANGED = 3;
// --- instance variables
@Inject StartupService startupService;
@Inject Preferences preferences;
@Inject CalendarAlarmScheduler calendarAlarmScheduler;
@Inject VoiceOutputAssistant voiceOutputAssistant;
private class SetResultOnPreferenceChangeListener implements OnPreferenceChangeListener {
private final int resultCode;
@ -90,24 +71,14 @@ public class EditPreferences extends TodorooPreferenceActivity {
addPreferences(screen);
addPreferencesFromResource(R.xml.preferences_misc);
// first-order preferences
findPreference(getString(R.string.p_beastMode)).setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference p) {
showBeastMode();
return true;
}
});
screen.findPreference(getString(R.string.p_files_dir)).setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference p) {
Intent filesDir = new Intent(EditPreferences.this, FileExplore.class);
filesDir.putExtra(FileExplore.EXTRA_DIRECTORIES_SELECTABLE, true);
startActivityForResult(filesDir, REQUEST_CODE_FILES_DIR);
startActivity(new Intent(EditPreferences.this, BeastModePreferences.class) {{
setAction(AstridApiConstants.ACTION_SETTINGS);
}});
return true;
}
});
@ -115,32 +86,6 @@ public class EditPreferences extends TodorooPreferenceActivity {
addPreferenceListeners();
}
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;
}
}
}
return false;
}
private void showBeastMode() {
Intent intent = new Intent(this, BeastModePreferences.class);
intent.setAction(AstridApiConstants.ACTION_SETTINGS);
startActivity(intent);
}
private void addPreferences(PreferenceScreen screen) {
List<Preference> preferences = new ArrayList<Preference>() {{
add(getPreference(ReminderPreferences.class, R.string.notifications));
@ -148,6 +93,7 @@ public class EditPreferences extends TodorooPreferenceActivity {
add(getPreference(GtasksPreferences.class, R.string.gtasks_GPr_header));
add(getPreference(BackupPreferences.class, R.string.backup_BPr_header));
add(getPreference(OldTaskPreferences.class, R.string.EPr_manage_header));
add(getPreference(MiscellaneousPreferences.class, R.string.miscellaneous));
}};
for (Preference preference : preferences) {
@ -164,83 +110,15 @@ public class EditPreferences extends TodorooPreferenceActivity {
}};
}
@SuppressWarnings("StatementWithEmptyBody")
@Override
public void updatePreferences(final 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);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
voiceOutputAssistant.shutdown();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_FILES_DIR && resultCode == RESULT_OK) {
if (data != null) {
String dir = data.getStringExtra(FileExplore.RESULT_DIR_SELECTED);
preferences.setString(TaskAttachment.FILES_DIRECTORY_PREF, dir);
}
return;
}
try {
if (requestCode == REQUEST_CODE_TTS_CHECK) {
if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
// success, create the TTS instance
voiceOutputAssistant.initTTS();
} else {
// missing data, install it
Intent installIntent = new Intent();
installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
startActivity(installIntent);
}
}
} catch (VerifyError e) {
// unavailable
log.error(e.getMessage(), e);
}
super.onActivityResult(requestCode, resultCode, data);
}
public void addPreferenceListeners() {
private void addPreferenceListeners() {
findPreference(getString(R.string.p_use_dark_theme)).setOnPreferenceChangeListener(new SetResultOnPreferenceChangeListener(RESULT_CODE_PERFORMANCE_PREF_CHANGED));
findPreference(getString(R.string.p_fontSize)).setOnPreferenceChangeListener(new SetResultOnPreferenceChangeListener(RESULT_CODE_PERFORMANCE_PREF_CHANGED));
findPreference(getString(R.string.p_debug_logging)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
preferences.setupLogger((boolean) newValue);
return true;
}
});
if (preFroyo()) {
searchForAndRemovePreference(getPreferenceScreen(), getString(R.string.p_calendar_reminders));
} else {
findPreference(getString(R.string.p_calendar_reminders)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (newValue != null && ((Boolean) newValue)) {
calendarAlarmScheduler.scheduleCalendarAlarms(EditPreferences.this, true);
}
return true;
}
});
}
findPreference(getString(R.string.p_fullTaskTitle)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
@ -249,20 +127,4 @@ public class EditPreferences extends TodorooPreferenceActivity {
}
});
}
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);
}
}
}

@ -26,6 +26,7 @@ import com.todoroo.astrid.tags.DeleteTagActivity;
import com.todoroo.astrid.tags.RenameTagActivity;
import com.todoroo.astrid.widget.WidgetConfigActivity;
import org.tasks.preferences.MiscellaneousPreferences;
import org.tasks.reminders.SnoozeActivity;
import org.tasks.voice.VoiceCommandActivity;
@ -60,7 +61,8 @@ import dagger.Provides;
DefaultsPreferences.class,
ReminderPreferences.class,
AACRecordingActivity.class,
SnoozeActivity.class
SnoozeActivity.class,
MiscellaneousPreferences.class
})
public class ActivityModule {

@ -0,0 +1,167 @@
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 javax.inject.Inject;
import static com.todoroo.andlib.utility.AndroidUtilities.preFroyo;
public class MiscellaneousPreferences extends TodorooPreferenceActivity {
private static final Logger log = LoggerFactory.getLogger(MiscellaneousPreferences.class);
private static final int REQUEST_CODE_FILES_DIR = 2;
private static final int REQUEST_CODE_TTS_CHECK = 2534;
@Inject Preferences preferences;
@Inject CalendarAlarmScheduler calendarAlarmScheduler;
@Inject VoiceOutputAssistant voiceOutputAssistant;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
PreferenceScreen screen = getPreferenceScreen();
screen.findPreference(getString(R.string.p_files_dir)).setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@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);
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);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_FILES_DIR && resultCode == RESULT_OK) {
if (data != null) {
String dir = data.getStringExtra(FileExplore.RESULT_DIR_SELECTED);
preferences.setString(TaskAttachment.FILES_DIRECTORY_PREF, dir);
}
return;
}
try {
if (requestCode == REQUEST_CODE_TTS_CHECK) {
if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
// success, create the TTS instance
voiceOutputAssistant.initTTS();
} else {
// missing data, install it
Intent installIntent = new Intent();
installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
startActivity(installIntent);
}
}
} catch (VerifyError e) {
// unavailable
log.error(e.getMessage(), e);
}
super.onActivityResult(requestCode, resultCode, data);
}
@Override
protected void onDestroy() {
super.onDestroy();
voiceOutputAssistant.shutdown();
}
private void addPreferenceListeners() {
findPreference(getString(R.string.p_debug_logging)).setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
preferences.setupLogger((boolean) newValue);
return true;
}
});
if (preFroyo()) {
searchForAndRemovePreference(getPreferenceScreen(), getString(R.string.p_calendar_reminders));
} else {
findPreference(getString(R.string.p_calendar_reminders)).setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (newValue != null && ((Boolean) newValue)) {
calendarAlarmScheduler.scheduleCalendarAlarms(MiscellaneousPreferences.this, true);
}
return true;
}
});
}
}
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;
}
}
}
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);
}
}
}

@ -1,46 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/miscellaneous">
<PreferenceScreen
android:title="@string/miscellaneous">
<PreferenceScreen
android:title="@string/attachment_directory"
android:key="@string/p_files_dir" />
<com.todoroo.astrid.ui.MultilineCheckboxPreference
android:key="@string/p_voiceRemindersEnabled"
android:summaryOff="@string/EPr_voiceRemindersEnabled_desc_disabled"
android:summaryOn="@string/EPr_voiceRemindersEnabled_desc_enabled"
android:title="@string/EPr_voiceRemindersEnabled_title"
android:defaultValue="false" />
<CheckBoxPreference
android:key="@string/p_field_missed_calls"
android:summaryOff="@string/MCA_missed_calls_pref_desc_disabled"
android:summaryOn="@string/MCA_missed_calls_pref_desc_enabled"
android:title="@string/MCA_missed_calls_pref_title"/>
<CheckBoxPreference
android:key="@string/p_calendar_reminders"
android:summaryOff="@string/CRA_calendar_reminders_pref_desc_disabled"
android:summaryOn="@string/CRA_calendar_reminders_pref_desc_enabled"
android:title="@string/CRA_calendar_reminders_pref_title" />
<CheckBoxPreference
android:title="@string/EPr_cal_end_or_start_at_due_time"
android:summaryOff="@string/EPr_cal_end_at_due_time"
android:summaryOn="@string/EPr_cal_start_at_due_time"
android:key = "@string/p_end_at_deadline" />
<com.todoroo.astrid.ui.MultilineCheckboxPreference
android:key="@string/p_showSmartConfirmation_key"
android:title="@string/EPr_showSmartConfirmation_title"
android:defaultValue="true"/>
<PreferenceScreen
android:key="@string/p_files_dir"
android:title="@string/attachment_directory" />
<CheckBoxPreference
android:title="@string/debug_logging"
android:key="@string/p_debug_logging"/>
</PreferenceScreen>
<com.todoroo.astrid.ui.MultilineCheckboxPreference
android:defaultValue="false"
android:key="@string/p_voiceRemindersEnabled"
android:summaryOff="@string/EPr_voiceRemindersEnabled_desc_disabled"
android:summaryOn="@string/EPr_voiceRemindersEnabled_desc_enabled"
android:title="@string/EPr_voiceRemindersEnabled_title" />
<CheckBoxPreference
android:key="@string/p_field_missed_calls"
android:summaryOff="@string/MCA_missed_calls_pref_desc_disabled"
android:summaryOn="@string/MCA_missed_calls_pref_desc_enabled"
android:title="@string/MCA_missed_calls_pref_title" />
<CheckBoxPreference
android:key="@string/p_calendar_reminders"
android:summaryOff="@string/CRA_calendar_reminders_pref_desc_disabled"
android:summaryOn="@string/CRA_calendar_reminders_pref_desc_enabled"
android:title="@string/CRA_calendar_reminders_pref_title" />
<CheckBoxPreference
android:key="@string/p_end_at_deadline"
android:summaryOff="@string/EPr_cal_end_at_due_time"
android:summaryOn="@string/EPr_cal_start_at_due_time"
android:title="@string/EPr_cal_end_or_start_at_due_time" />
<com.todoroo.astrid.ui.MultilineCheckboxPreference
android:defaultValue="true"
android:key="@string/p_showSmartConfirmation_key"
android:title="@string/EPr_showSmartConfirmation_title" />
<CheckBoxPreference
android:key="@string/p_debug_logging"
android:title="@string/debug_logging" />
</PreferenceScreen>

Loading…
Cancel
Save