diff --git a/api/src/main/java/com/todoroo/andlib/utility/Preferences.java b/api/src/main/java/com/todoroo/andlib/utility/Preferences.java index f05fb2b73..91cea7ab8 100644 --- a/api/src/main/java/com/todoroo/andlib/utility/Preferences.java +++ b/api/src/main/java/com/todoroo/andlib/utility/Preferences.java @@ -21,13 +21,6 @@ import com.todoroo.andlib.service.ContextManager; */ public class Preferences { - public static void setIntIfUnset(SharedPreferences prefs, Editor editor, Resources r, int keyResource, int value) { - String key = r.getString(keyResource); - if(!prefs.contains(key)) { - editor.putInt(key, value); - } - } - /** * Helper to write to editor if key specified is null. Writes a String * property with the given integer @@ -49,16 +42,6 @@ public class Preferences { } } - /** - * Helper to write to editor if key specified is null - */ - public static void setIfUnset(SharedPreferences prefs, Editor editor, Resources r, int keyResource, String value) { - String key = r.getString(keyResource); - if(!prefs.contains(key) || !(prefs.getAll().get(key) instanceof String)) { - editor.putString(key, value); - } - } - /* ====================================================================== * ======================================================= helper methods * ====================================================================== */ diff --git a/astrid/src/androidTest/java/com/todoroo/astrid/model/TaskTest.java b/astrid/src/androidTest/java/com/todoroo/astrid/model/TaskTest.java index 296587e06..6daab56e4 100644 --- a/astrid/src/androidTest/java/com/todoroo/astrid/model/TaskTest.java +++ b/astrid/src/androidTest/java/com/todoroo/astrid/model/TaskTest.java @@ -7,9 +7,9 @@ import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.test.TodorooTestCase; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.service.TaskService; -import com.todoroo.astrid.utility.AstridPreferences; import org.tasks.Snippet; +import org.tasks.preferences.Preferences; import static org.tasks.Freeze.freezeClock; import static org.tasks.RemoteModelHelpers.asQueryProperties; @@ -19,6 +19,7 @@ import static org.tasks.date.DateTimeUtils.currentTimeMillis; public class TaskTest extends TodorooTestCase { @Autowired private TaskService taskService; + @Autowired private Preferences preferences; public void testNewTaskHasNoCreationDate() { assertFalse(new Task().containsValue(Task.CREATION_DATE)); @@ -41,7 +42,7 @@ public class TaskTest extends TodorooTestCase { } public void testDefaults() { - AstridPreferences.setPreferenceDefaults(); + preferences.setDefaults(); ContentValues defaults = new Task().getDefaultValues(); assertTrue(defaults.containsKey(Task.TITLE.name)); assertTrue(defaults.containsKey(Task.DUE_DATE.name)); diff --git a/astrid/src/androidTest/java/com/todoroo/astrid/service/AstridDependencyInjector.java b/astrid/src/androidTest/java/com/todoroo/astrid/service/AstridDependencyInjector.java index ca48fdf4d..b052e40ed 100644 --- a/astrid/src/androidTest/java/com/todoroo/astrid/service/AstridDependencyInjector.java +++ b/astrid/src/androidTest/java/com/todoroo/astrid/service/AstridDependencyInjector.java @@ -31,6 +31,7 @@ import com.todoroo.astrid.tags.TagService; import org.tasks.Broadcaster; import org.tasks.filters.FilterCounter; import org.tasks.injection.TestInjector; +import org.tasks.preferences.Preferences; import org.tasks.scheduling.RefreshScheduler; import org.tasks.widget.WidgetHelper; @@ -105,6 +106,7 @@ public class AstridDependencyInjector extends AbstractDependencyInjector { @Inject WidgetHelper widgetHelper; @Inject GtasksScheduler gtasksScheduler; @Inject ReminderService reminderService; + @Inject Preferences preferences; /** * Initialize list of injectables. Special care must used when @@ -151,6 +153,7 @@ public class AstridDependencyInjector extends AbstractDependencyInjector { injectables.put("widgetHelper", widgetHelper); injectables.put("gtasksScheduler", gtasksScheduler); injectables.put("reminderService", reminderService); + injectables.put("preferences", preferences); } /** diff --git a/astrid/src/androidTest/java/org/tasks/TestUtilities.java b/astrid/src/androidTest/java/org/tasks/TestUtilities.java index 1f5f7acd1..92e93c994 100644 --- a/astrid/src/androidTest/java/org/tasks/TestUtilities.java +++ b/astrid/src/androidTest/java/org/tasks/TestUtilities.java @@ -2,20 +2,10 @@ package org.tasks; import android.content.Context; -import com.todoroo.astrid.utility.AstridPreferences; - -import static com.todoroo.andlib.utility.Preferences.getPrefs; +import org.tasks.preferences.Preferences; public class TestUtilities { public static void clearPreferences(Context context) { - getPrefs(context) - .edit() - .clear() - .commit(); - } - - public static void resetPreferences(Context context) { - clearPreferences(context); - AstridPreferences.setPreferenceDefaults(); + new Preferences(context).clear(); } } diff --git a/astrid/src/main/java/com/todoroo/astrid/core/OldTaskPreferences.java b/astrid/src/main/java/com/todoroo/astrid/core/OldTaskPreferences.java index 7835fe060..b183f699a 100644 --- a/astrid/src/main/java/com/todoroo/astrid/core/OldTaskPreferences.java +++ b/astrid/src/main/java/com/todoroo/astrid/core/OldTaskPreferences.java @@ -8,7 +8,6 @@ package com.todoroo.astrid.core; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; -import android.content.SharedPreferences.Editor; import android.os.Bundle; import android.preference.Preference; import android.preference.Preference.OnPreferenceClickListener; @@ -19,16 +18,15 @@ import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DialogUtilities; -import com.todoroo.andlib.utility.Preferences; import com.todoroo.astrid.dao.Database; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.gcal.GCalHelper; import com.todoroo.astrid.service.MetadataService; import com.todoroo.astrid.service.TaskService; -import com.todoroo.astrid.utility.AstridPreferences; import org.tasks.R; import org.tasks.injection.InjectingTodorooPreferenceActivity; +import org.tasks.preferences.Preferences; import javax.inject.Inject; @@ -44,6 +42,7 @@ public class OldTaskPreferences extends InjectingTodorooPreferenceActivity { @Inject MetadataService metadataService; @Inject Database database; @Inject GCalHelper gcalHelper; + @Inject Preferences preferences; ProgressDialog pd; @@ -107,18 +106,13 @@ public class OldTaskPreferences extends InjectingTodorooPreferenceActivity { private void showClearDataDialog() { DialogUtilities.okCancelDialog( this, - getResources().getString( - R.string.EPr_manage_clear_all_message), - new OnClickListener() { + getResources().getString(R.string.EPr_manage_clear_all_message), + new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - Editor editor = Preferences.getPrefs(OldTaskPreferences.this).edit(); - editor.clear(); - editor.commit(); - deleteDatabase(database.getName()); - AstridPreferences.setPreferenceDefaults(); + preferences.reset(); System.exit(0); } diff --git a/astrid/src/main/java/com/todoroo/astrid/service/StartupService.java b/astrid/src/main/java/com/todoroo/astrid/service/StartupService.java index 31590a0a6..f50f78afe 100644 --- a/astrid/src/main/java/com/todoroo/astrid/service/StartupService.java +++ b/astrid/src/main/java/com/todoroo/astrid/service/StartupService.java @@ -27,7 +27,6 @@ import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.DialogUtilities; -import com.todoroo.andlib.utility.Preferences; import com.todoroo.astrid.backup.BackupConstants; import com.todoroo.astrid.backup.BackupService; import com.todoroo.astrid.backup.TasksXmlImporter; @@ -50,6 +49,7 @@ import com.todoroo.astrid.utility.Constants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.tasks.R; +import org.tasks.preferences.Preferences; import java.io.File; import java.util.List; @@ -76,13 +76,15 @@ public class StartupService { private final Database database; private final GtasksPreferenceService gtasksPreferenceService; private final GtasksSyncService gtasksSyncService; - private MetadataService metadataService; + private final MetadataService metadataService; + private final Preferences preferences; @Inject public StartupService(UpgradeService upgradeService, TaskService taskService, TagDataDao tagDataDao, Database database, GtasksPreferenceService gtasksPreferenceService, - GtasksSyncService gtasksSyncService, MetadataService metadataService) { + GtasksSyncService gtasksSyncService, MetadataService metadataService, + Preferences preferences) { this.upgradeService = upgradeService; this.taskService = taskService; this.tagDataDao = tagDataDao; @@ -90,6 +92,7 @@ public class StartupService { this.gtasksPreferenceService = gtasksPreferenceService; this.gtasksSyncService = gtasksSyncService; this.metadataService = metadataService; + this.preferences = preferences; } /** @@ -126,7 +129,7 @@ public class StartupService { if(context instanceof Activity) { AudioManager audioManager = (AudioManager)context.getSystemService( Context.AUDIO_SERVICE); - if(!Preferences.getBoolean(R.string.p_rmd_enabled, true)) { + if(!preferences.getBoolean(R.string.p_rmd_enabled, true)) { Toast.makeText(context, R.string.TLA_notification_disabled, Toast.LENGTH_LONG).show(); } else if(audioManager.getStreamVolume(AudioManager.STREAM_NOTIFICATION) == 0) { Toast.makeText(context, R.string.TLA_notification_volume_low, Toast.LENGTH_LONG).show(); @@ -193,7 +196,8 @@ public class StartupService { } }).start(); - AstridPreferences.setPreferenceDefaults(); + preferences.setDefaults(); + CalendarStartupReceiver.scheduleCalendarAlarms(context, false); // This needs to be after set preference defaults for the purposes of ab testing showTaskKillerHelp(context); @@ -273,8 +277,8 @@ public class StartupService { /** * Show task killer helper */ - private static void showTaskKillerHelp(final Context context) { - if(!Preferences.getBoolean(P_TASK_KILLER_HELP, false)) { + private void showTaskKillerHelp(final Context context) { + if(!preferences.getBoolean(P_TASK_KILLER_HELP, false)) { return; } @@ -297,7 +301,7 @@ public class StartupService { @Override public void onClick(DialogInterface arg0, int arg1) { - Preferences.setBoolean(P_TASK_KILLER_HELP, true); + preferences.setBoolean(P_TASK_KILLER_HELP, true); } }; diff --git a/astrid/src/main/java/com/todoroo/astrid/utility/AstridDefaultPreferenceSpec.java b/astrid/src/main/java/com/todoroo/astrid/utility/AstridDefaultPreferenceSpec.java index ab02852c3..4244edeba 100644 --- a/astrid/src/main/java/com/todoroo/astrid/utility/AstridDefaultPreferenceSpec.java +++ b/astrid/src/main/java/com/todoroo/astrid/utility/AstridDefaultPreferenceSpec.java @@ -5,7 +5,6 @@ import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.content.res.Resources; -import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.utility.Preferences; import com.todoroo.astrid.activity.BeastModePreferences; import com.todoroo.astrid.core.SortHelper; @@ -15,41 +14,16 @@ import org.joda.time.DateTime; import org.tasks.R; import static com.todoroo.andlib.utility.Preferences.setBoolean; -import static com.todoroo.andlib.utility.Preferences.setIntIfUnset; -public class AstridDefaultPreferenceSpec extends AstridPreferenceSpec { +public class AstridDefaultPreferenceSpec { - public static interface PreferenceExtras { - public void setExtras(Context context); - } - - @Override - public void setIfUnset() { - PreferenceExtras extras = new PreferenceExtras() { - @Override - public void setExtras(Context context) { - String dragDropTestInitialized = "android_drag_drop_initialized"; //$NON-NLS-1$ - if (!Preferences.getBoolean(dragDropTestInitialized, false)) { - SharedPreferences publicPrefs = AstridPreferences.getPublicPrefs(context); - if (publicPrefs != null) { - Editor edit = publicPrefs.edit(); - if (edit != null) { - edit.putInt(SortHelper.PREF_SORT_SORT, SortHelper.SORT_AUTO); - edit.commit(); - Preferences.setInt(AstridPreferences.P_SUBTASKS_HELP, 1); - } - } - setBoolean(dragDropTestInitialized, true); - } - BeastModePreferences.setDefaultOrder(context); - } - }; + private Context context; - setPrefs(extras); + public AstridDefaultPreferenceSpec(Context context) { + this.context = context; } - private static void setPrefs(PreferenceExtras extras) { - Context context = ContextManager.getContext(); + public void setIfUnset() { SharedPreferences prefs = Preferences.getPrefs(context); Editor editor = prefs.edit(); Resources r = context.getResources(); @@ -96,7 +70,20 @@ public class AstridDefaultPreferenceSpec extends AstridPreferenceSpec { setIntIfUnset(prefs, editor, r, R.string.p_rmd_quietEnd, r.getInteger(R.integer.default_quiet_hours_end)); setIntIfUnset(prefs, editor, r, R.string.p_rmd_time, r.getInteger(R.integer.default_remind_time)); - extras.setExtras(context); + String dragDropTestInitialized = "android_drag_drop_initialized"; //$NON-NLS-1$ + if (!Preferences.getBoolean(dragDropTestInitialized, false)) { + SharedPreferences publicPrefs = AstridPreferences.getPublicPrefs(context); + if (publicPrefs != null) { + Editor edit = publicPrefs.edit(); + if (edit != null) { + edit.putInt(SortHelper.PREF_SORT_SORT, SortHelper.SORT_AUTO); + edit.commit(); + Preferences.setInt(AstridPreferences.P_SUBTASKS_HELP, 1); + } + } + setBoolean(dragDropTestInitialized, true); + } + BeastModePreferences.setDefaultOrder(context); editor.commit(); @@ -118,4 +105,30 @@ public class AstridDefaultPreferenceSpec extends AstridPreferenceSpec { int millisOfDay = new DateTime().withMillisOfDay(0).withHourOfDay(hour).getMillisOfDay(); Preferences.setInt(newResourceId, millisOfDay); } + + private static void setPreference(SharedPreferences prefs, Editor editor, Resources r, int key, int value) { + Preferences.setIfUnset(prefs, editor, r, key, value); + } + + private static void setPreference(SharedPreferences prefs, Editor editor, Resources r, int key, boolean value) { + Preferences.setIfUnset(prefs, editor, r, key, value); + } + + private static void setPreference(SharedPreferences prefs, Editor editor, Resources r, int key, String value) { + setIfUnset(prefs, editor, r, key, value); + } + + private static void setIfUnset(SharedPreferences prefs, Editor editor, Resources r, int keyResource, String value) { + String key = r.getString(keyResource); + if(!prefs.contains(key) || !(prefs.getAll().get(key) instanceof String)) { + editor.putString(key, value); + } + } + + private static void setIntIfUnset(SharedPreferences prefs, Editor editor, Resources r, int keyResource, int value) { + String key = r.getString(keyResource); + if(!prefs.contains(key)) { + editor.putInt(key, value); + } + } } diff --git a/astrid/src/main/java/com/todoroo/astrid/utility/AstridPreferenceSpec.java b/astrid/src/main/java/com/todoroo/astrid/utility/AstridPreferenceSpec.java deleted file mode 100644 index e745ad977..000000000 --- a/astrid/src/main/java/com/todoroo/astrid/utility/AstridPreferenceSpec.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.todoroo.astrid.utility; - -import android.content.SharedPreferences; -import android.content.SharedPreferences.Editor; -import android.content.res.Resources; - -import com.todoroo.andlib.utility.Preferences; - -public abstract class AstridPreferenceSpec { - public abstract void setIfUnset(); - - protected static void setPreference(SharedPreferences prefs, Editor editor, Resources r, int key, int value) { - Preferences.setIfUnset(prefs, editor, r, key, value); - } - - protected static void setPreference(SharedPreferences prefs, Editor editor, Resources r, int key, boolean value) { - Preferences.setIfUnset(prefs, editor, r, key, value); - } - - protected static void setPreference(SharedPreferences prefs, Editor editor, Resources r, int key, String value) { - Preferences.setIfUnset(prefs, editor, r, key, value); - } -} diff --git a/astrid/src/main/java/com/todoroo/astrid/utility/AstridPreferences.java b/astrid/src/main/java/com/todoroo/astrid/utility/AstridPreferences.java index 7c65d5357..3a7748610 100644 --- a/astrid/src/main/java/com/todoroo/astrid/utility/AstridPreferences.java +++ b/astrid/src/main/java/com/todoroo/astrid/utility/AstridPreferences.java @@ -27,14 +27,6 @@ public class AstridPreferences { public static final String P_SUBTASKS_HELP = "sthelp"; //$NON-NLS-1$ - /** Set preference defaults, if unset. called at startup */ - public static void setPreferenceDefaults() { - AstridPreferenceSpec spec; - spec = new AstridDefaultPreferenceSpec(); - - spec.setIfUnset(); - } - /* ====================================================================== * ========================================================= public prefs * ====================================================================== */ diff --git a/astrid/src/main/java/org/tasks/preferences/Preferences.java b/astrid/src/main/java/org/tasks/preferences/Preferences.java new file mode 100644 index 000000000..a70f2603d --- /dev/null +++ b/astrid/src/main/java/org/tasks/preferences/Preferences.java @@ -0,0 +1,147 @@ +package org.tasks.preferences; + +import android.content.Context; +import android.content.SharedPreferences; +import android.content.res.Resources; +import android.preference.PreferenceManager; + +import com.todoroo.andlib.service.ContextManager; +import com.todoroo.astrid.utility.AstridDefaultPreferenceSpec; + +import javax.inject.Inject; + +import static org.tasks.injection.TasksModule.ForApplication; + +public class Preferences { + + private final Context context; + private final SharedPreferences prefs; + + @Inject + public Preferences(@ForApplication Context context) { + this.context = context; + prefs = PreferenceManager.getDefaultSharedPreferences(context); + } + + public void clear() { + prefs + .edit() + .clear() + .commit(); + } + + public void setDefaults() { + new AstridDefaultPreferenceSpec(context).setIfUnset(); + } + + public void reset() { + clear(); + setDefaults(); + } + + public boolean isSet(String key) { + return prefs.contains(key); + } + + public String getStringValue(String key) { + return prefs.getString(key, null); + } + + public String getStringValue(int keyResource) { + return prefs.getString(context.getResources().getString(keyResource), null); + } + + public int getIntegerFromString(int keyResource, int defaultValue) { + Resources r = context.getResources(); + String value = prefs.getString(r.getString(keyResource), null); + if (value == null) { + return defaultValue; + } + + try { + return Integer.parseInt(value); + } catch (Exception e) { + return defaultValue; + } + } + + public void setString(int resourceId, String value) { + setString(ContextManager.getContext().getString(resourceId), value); + } + + public void setString(String key, String newValue) { + SharedPreferences.Editor editor = prefs.edit(); + editor.putString(key, newValue); + editor.commit(); + } + + public void setStringFromInteger(int keyResource, int newValue) { + SharedPreferences.Editor editor = prefs.edit(); + editor.putString(context.getString(keyResource), Integer.toString(newValue)); + editor.commit(); + } + + public boolean getBoolean(String key, boolean defValue) { + try { + return prefs.getBoolean(key, defValue); + } catch (ClassCastException e) { + return defValue; + } + } + + public boolean getBoolean(int keyResources) { + return getBoolean(keyResources, false); + } + + public boolean getBoolean(int keyResources, boolean defValue) { + return getBoolean(context.getString(keyResources), defValue); + } + + public void setBoolean(int keyResource, boolean value) { + setBoolean(context.getString(keyResource), value); + } + + public void setBoolean(String key, boolean value) { + SharedPreferences.Editor editor = prefs.edit(); + editor.putBoolean(key, value); + editor.commit(); + } + + public int getInt(int resourceId) { + return getInt(resourceId, 0); + } + + public int getInt(int resourceId, int defValue) { + return getInt(ContextManager.getContext().getString(resourceId), defValue); + } + + public int getInt(String key, int defValue) { + return prefs.getInt(key, defValue); + } + + public void setInt(int resourceId, int value) { + setInt(ContextManager.getContext().getString(resourceId), value); + } + + public void setInt(String key, int value) { + SharedPreferences.Editor editor = prefs.edit(); + editor.putInt(key, value); + editor.commit(); + } + + public long getLong(String key, long defValue) { + return prefs.getLong(key, defValue); + } + + public void setLong(String key, long value) { + SharedPreferences.Editor editor = prefs.edit(); + editor.putLong(key, value); + editor.commit(); + } + + public void clear(String key) { + SharedPreferences.Editor editor = prefs.edit(); + editor.remove(key); + editor.commit(); + } +}