Wrap access to SharedPreferences with "Prefs"

(to centralize quirk handling)
here
cpfeiffer 2016-04-25 23:18:55 +02:00
parent b89eb14be7
commit 0c715a2669
20 changed files with 198 additions and 70 deletions

View File

@ -36,6 +36,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.DeviceService;
import nodomain.freeyourgadget.gadgetbridge.util.FileUtils; import nodomain.freeyourgadget.gadgetbridge.util.FileUtils;
import nodomain.freeyourgadget.gadgetbridge.util.GB; import nodomain.freeyourgadget.gadgetbridge.util.GB;
import nodomain.freeyourgadget.gadgetbridge.util.LimitedQueue; import nodomain.freeyourgadget.gadgetbridge.util.LimitedQueue;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
//import nodomain.freeyourgadget.gadgetbridge.externalevents.BluetoothConnectReceiver; //import nodomain.freeyourgadget.gadgetbridge.externalevents.BluetoothConnectReceiver;
@ -56,6 +57,7 @@ public class GBApplication extends Application {
private static final int CURRENT_PREFS_VERSION = 2; private static final int CURRENT_PREFS_VERSION = 2;
private static LimitedQueue mIDSenderLookup = new LimitedQueue(16); private static LimitedQueue mIDSenderLookup = new LimitedQueue(16);
private static Appender<ILoggingEvent> fileLogger; private static Appender<ILoggingEvent> fileLogger;
private static Prefs prefs;
public static final String ACTION_QUIT public static final String ACTION_QUIT
= "nodomain.freeyourgadget.gadgetbridge.gbapplication.action.quit"; = "nodomain.freeyourgadget.gadgetbridge.gbapplication.action.quit";
@ -89,6 +91,7 @@ public class GBApplication extends Application {
super.onCreate(); super.onCreate();
sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context); sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
prefs = new Prefs(sharedPrefs);
// don't do anything here before we set up logging, otherwise // don't do anything here before we set up logging, otherwise
// slf4j may be implicitly initialized before we properly configured it. // slf4j may be implicitly initialized before we properly configured it.
@ -125,7 +128,7 @@ public class GBApplication extends Application {
} }
public static boolean isFileLoggingEnabled() { public static boolean isFileLoggingEnabled() {
return sharedPrefs.getBoolean("log_to_file", false); return prefs.getBoolean("log_to_file", false);
} }
public static void setupLogging(boolean enable) { public static void setupLogging(boolean enable) {
@ -345,7 +348,7 @@ public class GBApplication extends Application {
} }
public static boolean isDarkThemeEnabled() { public static boolean isDarkThemeEnabled() {
return sharedPrefs.getString("pref_key_theme", context.getString(R.string.pref_theme_value_light)).equals(context.getString(R.string.pref_theme_value_dark)); return prefs.getString("pref_key_theme", context.getString(R.string.pref_theme_value_light)).equals(context.getString(R.string.pref_theme_value_dark));
} }
public static int getTextColor(Context context) { public static int getTextColor(Context context) {
@ -361,4 +364,7 @@ public class GBApplication extends Application {
return typedValue.data; return typedValue.data;
} }
public static Prefs getPrefs() {
return prefs;
}
} }

View File

@ -4,11 +4,9 @@ import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.os.Bundle; import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.app.NavUtils; import android.support.v4.app.NavUtils;
import android.support.v4.content.LocalBroadcastManager; import android.support.v4.content.LocalBroadcastManager;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -47,7 +45,6 @@ public class AppBlacklistActivity extends GBActivity {
} }
}; };
private SharedPreferences sharedPrefs;
private IdentityHashMap<ApplicationInfo, String> nameMap; private IdentityHashMap<ApplicationInfo, String> nameMap;
@Override @Override
@ -56,7 +53,6 @@ public class AppBlacklistActivity extends GBActivity {
setContentView(R.layout.activity_appblacklist); setContentView(R.layout.activity_appblacklist);
final PackageManager pm = getPackageManager(); final PackageManager pm = getPackageManager();
sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
final List<ApplicationInfo> packageList = pm.getInstalledApplications(PackageManager.GET_META_DATA); final List<ApplicationInfo> packageList = pm.getInstalledApplications(PackageManager.GET_META_DATA);
ListView appListView = (ListView) findViewById(R.id.appListView); ListView appListView = (ListView) findViewById(R.id.appListView);

View File

@ -4,10 +4,8 @@ import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.app.NavUtils; import android.support.v4.app.NavUtils;
import android.support.v4.content.LocalBroadcastManager; import android.support.v4.content.LocalBroadcastManager;
import android.view.ContextMenu; import android.view.ContextMenu;
@ -34,6 +32,7 @@ import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceApp;
import nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.PebbleProtocol; import nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.PebbleProtocol;
import nodomain.freeyourgadget.gadgetbridge.util.FileUtils; import nodomain.freeyourgadget.gadgetbridge.util.FileUtils;
import nodomain.freeyourgadget.gadgetbridge.util.PebbleUtils; import nodomain.freeyourgadget.gadgetbridge.util.PebbleUtils;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
public class AppManagerActivity extends GBActivity { public class AppManagerActivity extends GBActivity {
@ -59,7 +58,7 @@ public class AppManagerActivity extends GBActivity {
appList.add(new GBDeviceApp(uuid, appName, appCreator, "", appType)); appList.add(new GBDeviceApp(uuid, appName, appCreator, "", appType));
} }
if (sharedPrefs.getBoolean("pebble_force_untested", false)) { if (prefs.getBoolean("pebble_force_untested", false)) {
appList.addAll(getSystemApps()); appList.addAll(getSystemApps());
} }
@ -68,7 +67,7 @@ public class AppManagerActivity extends GBActivity {
} }
}; };
private SharedPreferences sharedPrefs; private Prefs prefs;
private final List<GBDeviceApp> appList = new ArrayList<>(); private final List<GBDeviceApp> appList = new ArrayList<>();
private GBDeviceAppAdapter mGBDeviceAppAdapter; private GBDeviceAppAdapter mGBDeviceAppAdapter;
@ -130,7 +129,7 @@ public class AppManagerActivity extends GBActivity {
throw new IllegalArgumentException("Must provide a device when invoking this activity"); throw new IllegalArgumentException("Must provide a device when invoking this activity");
} }
sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); prefs = GBApplication.getPrefs();
setContentView(R.layout.activity_appmanager); setContentView(R.layout.activity_appmanager);
@ -150,7 +149,7 @@ public class AppManagerActivity extends GBActivity {
appList.addAll(getCachedApps()); appList.addAll(getCachedApps());
if (sharedPrefs.getBoolean("pebble_force_untested", false)) { if (prefs.getBoolean("pebble_force_untested", false)) {
appList.addAll(getSystemApps()); appList.addAll(getSystemApps());
} }

View File

@ -16,6 +16,7 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.adapter.GBAlarmListAdapter; import nodomain.freeyourgadget.gadgetbridge.adapter.GBAlarmListAdapter;
import nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst; import nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst;
import nodomain.freeyourgadget.gadgetbridge.impl.GBAlarm; import nodomain.freeyourgadget.gadgetbridge.impl.GBAlarm;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_MIBAND_ALARMS; import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_MIBAND_ALARMS;
@ -34,12 +35,12 @@ public class ConfigureAlarms extends GBActivity {
setContentView(R.layout.activity_configure_alarms); setContentView(R.layout.activity_configure_alarms);
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); Prefs prefs = GBApplication.getPrefs();
preferencesAlarmListSet = sharedPrefs.getStringSet(PREF_MIBAND_ALARMS, new HashSet<String>()); preferencesAlarmListSet = prefs.getStringSet(PREF_MIBAND_ALARMS, new HashSet<String>());
if (preferencesAlarmListSet.isEmpty()) { if (preferencesAlarmListSet.isEmpty()) {
//initialize the preferences //initialize the preferences
preferencesAlarmListSet = new HashSet<>(Arrays.asList(GBAlarm.DEFAULT_ALARMS)); preferencesAlarmListSet = new HashSet<>(Arrays.asList(GBAlarm.DEFAULT_ALARMS));
sharedPrefs.edit().putStringSet(PREF_MIBAND_ALARMS, preferencesAlarmListSet).apply(); prefs.getPreferences().edit().putStringSet(PREF_MIBAND_ALARMS, preferencesAlarmListSet).apply();
} }
mGBAlarmListAdapter = new GBAlarmListAdapter(this, preferencesAlarmListSet); mGBAlarmListAdapter = new GBAlarmListAdapter(this, preferencesAlarmListSet);
@ -66,9 +67,9 @@ public class ConfigureAlarms extends GBActivity {
} }
private void updateAlarmsFromPrefs() { private void updateAlarmsFromPrefs() {
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); Prefs prefs = GBApplication.getPrefs();
preferencesAlarmListSet = sharedPrefs.getStringSet(PREF_MIBAND_ALARMS, new HashSet<String>()); preferencesAlarmListSet = prefs.getStringSet(PREF_MIBAND_ALARMS, new HashSet<String>());
int reservedSlots = Integer.parseInt(sharedPrefs.getString(MiBandConst.PREF_MIBAND_RESERVE_ALARM_FOR_CALENDAR, "0")); int reservedSlots = Integer.parseInt(prefs.getString(MiBandConst.PREF_MIBAND_RESERVE_ALARM_FOR_CALENDAR, "0"));
mGBAlarmListAdapter.setAlarmList(preferencesAlarmListSet, reservedSlots); mGBAlarmListAdapter.setAlarmList(preferencesAlarmListSet, reservedSlots);
mGBAlarmListAdapter.notifyDataSetChanged(); mGBAlarmListAdapter.notifyDataSetChanged();

View File

@ -46,6 +46,7 @@ import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.util.DeviceHelper; import nodomain.freeyourgadget.gadgetbridge.util.DeviceHelper;
import nodomain.freeyourgadget.gadgetbridge.util.GB; import nodomain.freeyourgadget.gadgetbridge.util.GB;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
public class ControlCenter extends GBActivity { public class ControlCenter extends GBActivity {
@ -184,9 +185,9 @@ public class ControlCenter extends GBActivity {
/* /*
* Ask for permission to intercept notifications on first run. * Ask for permission to intercept notifications on first run.
*/ */
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); Prefs prefs = GBApplication.getPrefs();
if (sharedPrefs.getBoolean("firstrun", true)) { if (prefs.getBoolean("firstrun", true)) {
sharedPrefs.edit().putBoolean("firstrun", false).apply(); prefs.getPreferences().edit().putBoolean("firstrun", false).apply();
Intent enableIntent = new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"); Intent enableIntent = new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS");
startActivity(enableIntent); startActivity(enableIntent);
} }

View File

@ -14,8 +14,10 @@ import android.preference.PreferenceManager;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.v4.content.LocalBroadcastManager; import android.support.v4.content.LocalBroadcastManager;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType; import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
public class PebbleContentProvider extends ContentProvider { public class PebbleContentProvider extends ContentProvider {
@ -59,8 +61,8 @@ public class PebbleContentProvider extends ContentProvider {
MatrixCursor mc = new MatrixCursor(columnNames); MatrixCursor mc = new MatrixCursor(columnNames);
int connected = 0; int connected = 0;
int appMessage = 0; int appMessage = 0;
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this.getContext()); Prefs prefs = GBApplication.getPrefs();
if (sharedPrefs.getBoolean("pebble_enable_pebblekit", false)) { if (prefs.getBoolean("pebble_enable_pebblekit", false)) {
appMessage = 1; appMessage = 1;
} }
if (mGBDevice != null && mGBDevice.getType() == DeviceType.PEBBLE && mGBDevice.isInitialized()) { if (mGBDevice != null && mGBDevice.getType() == DeviceType.PEBBLE && mGBDevice.isInitialized()) {

View File

@ -26,6 +26,7 @@ import nodomain.freeyourgadget.gadgetbridge.activities.DiscoveryActivity;
import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator; import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.util.GB; import nodomain.freeyourgadget.gadgetbridge.util.GB;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
public class MiBandPairingActivity extends Activity { public class MiBandPairingActivity extends Activity {
private static final Logger LOG = LoggerFactory.getLogger(MiBandPairingActivity.class); private static final Logger LOG = LoggerFactory.getLogger(MiBandPairingActivity.class);
@ -170,8 +171,8 @@ public class MiBandPairingActivity extends Activity {
unregisterReceiver(mBondingReceiver); unregisterReceiver(mBondingReceiver);
if (pairedSuccessfully) { if (pairedSuccessfully) {
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); Prefs prefs = GBApplication.getPrefs();
sharedPrefs.edit().putString(MiBandConst.PREF_MIBAND_ADDRESS, macAddress).apply(); prefs.getPreferences().edit().putString(MiBandConst.PREF_MIBAND_ADDRESS, macAddress).apply();
} }
Intent intent = new Intent(this, ControlCenter.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); Intent intent = new Intent(this, ControlCenter.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

View File

@ -14,6 +14,7 @@ import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceCandidate; import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceCandidate;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType; import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
public class PebbleCoordinator extends AbstractDeviceCoordinator { public class PebbleCoordinator extends AbstractDeviceCoordinator {
public PebbleCoordinator() { public PebbleCoordinator() {
@ -45,8 +46,8 @@ public class PebbleCoordinator extends AbstractDeviceCoordinator {
@Override @Override
public SampleProvider getSampleProvider() { public SampleProvider getSampleProvider() {
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(GBApplication.getContext()); Prefs prefs = GBApplication.getPrefs();
int activityTracker = Integer.parseInt(sharedPrefs.getString("pebble_activitytracker", Integer.toString(SampleProvider.PROVIDER_PEBBLE_HEALTH))); int activityTracker = Integer.parseInt(prefs.getString("pebble_activitytracker", Integer.toString(SampleProvider.PROVIDER_PEBBLE_HEALTH)));
switch (activityTracker) { switch (activityTracker) {
case SampleProvider.PROVIDER_PEBBLE_HEALTH: case SampleProvider.PROVIDER_PEBBLE_HEALTH:
return new HealthSampleProvider(); return new HealthSampleProvider();

View File

@ -10,6 +10,7 @@ import android.support.v4.content.LocalBroadcastManager;
import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.activities.ControlCenter; import nodomain.freeyourgadget.gadgetbridge.activities.ControlCenter;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
public class BluetoothStateChangeReceiver extends BroadcastReceiver { public class BluetoothStateChangeReceiver extends BroadcastReceiver {
@Override @Override
@ -22,8 +23,8 @@ public class BluetoothStateChangeReceiver extends BroadcastReceiver {
Intent refreshIntent = new Intent(ControlCenter.ACTION_REFRESH_DEVICELIST); Intent refreshIntent = new Intent(ControlCenter.ACTION_REFRESH_DEVICELIST);
LocalBroadcastManager.getInstance(context).sendBroadcast(refreshIntent); LocalBroadcastManager.getInstance(context).sendBroadcast(refreshIntent);
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context); Prefs prefs = GBApplication.getPrefs();
if (!sharedPrefs.getBoolean("general_autoconnectonbluetooth", false)) { if (!prefs.getBoolean("general_autoconnectonbluetooth", false)) {
return; return;
} }

View File

@ -15,6 +15,7 @@ import org.slf4j.LoggerFactory;
import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
import nodomain.freeyourgadget.gadgetbridge.model.NotificationType; import nodomain.freeyourgadget.gadgetbridge.model.NotificationType;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
public class K9Receiver extends BroadcastReceiver { public class K9Receiver extends BroadcastReceiver {
@ -24,11 +25,11 @@ public class K9Receiver extends BroadcastReceiver {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context); Prefs prefs = GBApplication.getPrefs();
if ("never".equals(sharedPrefs.getString("notification_mode_k9mail", "when_screen_off"))) { if ("never".equals(prefs.getString("notification_mode_k9mail", "when_screen_off"))) {
return; return;
} }
if ("when_screen_off".equals(sharedPrefs.getString("notification_mode_k9mail", "when_screen_off"))) { if ("when_screen_off".equals(prefs.getString("notification_mode_k9mail", "when_screen_off"))) {
PowerManager powermanager = (PowerManager) context.getSystemService(Context.POWER_SERVICE); PowerManager powermanager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
if (powermanager.isScreenOn()) { if (powermanager.isScreenOn()) {
return; return;

View File

@ -30,6 +30,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
import nodomain.freeyourgadget.gadgetbridge.model.NotificationType; import nodomain.freeyourgadget.gadgetbridge.model.NotificationType;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceCommunicationService; import nodomain.freeyourgadget.gadgetbridge.service.DeviceCommunicationService;
import nodomain.freeyourgadget.gadgetbridge.util.LimitedQueue; import nodomain.freeyourgadget.gadgetbridge.util.LimitedQueue;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
public class NotificationListener extends NotificationListenerService { public class NotificationListener extends NotificationListenerService {
@ -161,8 +162,8 @@ public class NotificationListener extends NotificationListenerService {
return; return;
} }
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); Prefs prefs = GBApplication.getPrefs();
if (!sharedPrefs.getBoolean("notifications_generic_whenscreenon", false)) { if (!prefs.getBoolean("notifications_generic_whenscreenon", false)) {
PowerManager powermanager = (PowerManager) getSystemService(POWER_SERVICE); PowerManager powermanager = (PowerManager) getSystemService(POWER_SERVICE);
if (powermanager.isScreenOn()) { if (powermanager.isScreenOn()) {
return; return;
@ -189,13 +190,13 @@ public class NotificationListener extends NotificationListenerService {
} }
if (source.equals("eu.siacs.conversations")) { if (source.equals("eu.siacs.conversations")) {
if (!"never".equals(sharedPrefs.getString("notification_mode_pebblemsg", "when_screen_off"))) { if (!"never".equals(prefs.getString("notification_mode_pebblemsg", "when_screen_off"))) {
return; return;
} }
} }
if (source.equals("com.fsck.k9")) { if (source.equals("com.fsck.k9")) {
if (!"never".equals(sharedPrefs.getString("notification_mode_k9mail", "when_screen_off"))) { if (!"never".equals(prefs.getString("notification_mode_k9mail", "when_screen_off"))) {
return; return;
} }
} }
@ -205,7 +206,7 @@ public class NotificationListener extends NotificationListenerService {
source.equals("com.sonyericsson.conversations") || source.equals("com.sonyericsson.conversations") ||
source.equals("com.android.messaging") || source.equals("com.android.messaging") ||
source.equals("org.smssecure.smssecure")) { source.equals("org.smssecure.smssecure")) {
if (!"never".equals(sharedPrefs.getString("notification_mode_sms", "when_screen_off"))) { if (!"never".equals(prefs.getString("notification_mode_sms", "when_screen_off"))) {
return; return;
} }
} }

View File

@ -15,6 +15,7 @@ import org.slf4j.LoggerFactory;
import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
import nodomain.freeyourgadget.gadgetbridge.model.NotificationType; import nodomain.freeyourgadget.gadgetbridge.model.NotificationType;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
public class PebbleReceiver extends BroadcastReceiver { public class PebbleReceiver extends BroadcastReceiver {
@ -23,11 +24,11 @@ public class PebbleReceiver extends BroadcastReceiver {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context); Prefs prefs = GBApplication.getPrefs();
if ("never".equals(sharedPrefs.getString("notification_mode_pebblemsg", "when_screen_off"))) { if ("never".equals(prefs.getString("notification_mode_pebblemsg", "when_screen_off"))) {
return; return;
} }
if ("when_screen_off".equals(sharedPrefs.getString("notification_mode_pebblemsg", "when_screen_off"))) { if ("when_screen_off".equals(prefs.getString("notification_mode_pebblemsg", "when_screen_off"))) {
PowerManager powermanager = (PowerManager) context.getSystemService(Context.POWER_SERVICE); PowerManager powermanager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
if (powermanager.isScreenOn()) { if (powermanager.isScreenOn()) {
return; return;

View File

@ -9,6 +9,7 @@ import android.telephony.TelephonyManager;
import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec; import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
public class PhoneCallReceiver extends BroadcastReceiver { public class PhoneCallReceiver extends BroadcastReceiver {
@ -64,8 +65,8 @@ public class PhoneCallReceiver extends BroadcastReceiver {
break; break;
} }
if (callCommand != CallSpec.CALL_UNDEFINED) { if (callCommand != CallSpec.CALL_UNDEFINED) {
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context); Prefs prefs = GBApplication.getPrefs();
if ("never".equals(sharedPrefs.getString("notification_mode_calls", "always"))) { if ("never".equals(prefs.getString("notification_mode_calls", "always"))) {
return; return;
} }
CallSpec callSpec = new CallSpec(); CallSpec callSpec = new CallSpec();

View File

@ -12,17 +12,17 @@ import android.telephony.SmsMessage;
import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
import nodomain.freeyourgadget.gadgetbridge.model.NotificationType; import nodomain.freeyourgadget.gadgetbridge.model.NotificationType;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
public class SMSReceiver extends BroadcastReceiver { public class SMSReceiver extends BroadcastReceiver {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
Prefs prefs = GBApplication.getPrefs();
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context); if ("never".equals(prefs.getString("notification_mode_sms", "when_screen_off"))) {
if ("never".equals(sharedPrefs.getString("notification_mode_sms", "when_screen_off"))) {
return; return;
} }
if ("when_screen_off".equals(sharedPrefs.getString("notification_mode_sms", "when_screen_off"))) { if ("when_screen_off".equals(prefs.getString("notification_mode_sms", "when_screen_off"))) {
PowerManager powermanager = (PowerManager) context.getSystemService(Context.POWER_SERVICE); PowerManager powermanager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
if (powermanager.isScreenOn()) { if (powermanager.isScreenOn()) {
return; return;

View File

@ -14,6 +14,7 @@ import java.util.GregorianCalendar;
import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.util.DateTimeUtils; import nodomain.freeyourgadget.gadgetbridge.util.DateTimeUtils;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
public class TimeChangeReceiver extends BroadcastReceiver { public class TimeChangeReceiver extends BroadcastReceiver {
@ -22,10 +23,10 @@ public class TimeChangeReceiver extends BroadcastReceiver {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context); Prefs prefs = GBApplication.getPrefs();
final String action = intent.getAction(); final String action = intent.getAction();
if (sharedPrefs.getBoolean("datetime_synconconnect", true) && (action.equals(Intent.ACTION_TIME_CHANGED) || action.equals(Intent.ACTION_TIMEZONE_CHANGED))) { if (prefs.getBoolean("datetime_synconconnect", true) && (action.equals(Intent.ACTION_TIME_CHANGED) || action.equals(Intent.ACTION_TIMEZONE_CHANGED))) {
Date newTime = GregorianCalendar.getInstance().getTime(); Date newTime = GregorianCalendar.getInstance().getTime();
LOG.info("Time or Timezone changed, syncing with device: " + DateTimeUtils.formatDate(newTime) + " (" + newTime.toGMTString() + "), " + intent.getAction()); LOG.info("Time or Timezone changed, syncing with device: " + DateTimeUtils.formatDate(newTime) + " (" + newTime.toGMTString() + "), " + intent.getAction());
GBApplication.deviceService().onSetTime(); GBApplication.deviceService().onSetTime();

View File

@ -6,11 +6,9 @@ import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.database.Cursor; import android.database.Cursor;
import android.net.Uri; import android.net.Uri;
import android.os.IBinder; import android.os.IBinder;
import android.preference.PreferenceManager;
import android.provider.ContactsContract; import android.provider.ContactsContract;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v4.content.LocalBroadcastManager; import android.support.v4.content.LocalBroadcastManager;
@ -39,6 +37,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
import nodomain.freeyourgadget.gadgetbridge.model.NotificationType; import nodomain.freeyourgadget.gadgetbridge.model.NotificationType;
import nodomain.freeyourgadget.gadgetbridge.util.DeviceHelper; import nodomain.freeyourgadget.gadgetbridge.util.DeviceHelper;
import nodomain.freeyourgadget.gadgetbridge.util.GB; import nodomain.freeyourgadget.gadgetbridge.util.GB;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.ACTION_APP_CONFIGURE; import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.ACTION_APP_CONFIGURE;
import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.ACTION_CALLSTATE; import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.ACTION_CALLSTATE;
@ -170,7 +169,7 @@ public class DeviceCommunicationService extends Service {
// when we get past this, we should have valid mDeviceSupport and mGBDevice instances // when we get past this, we should have valid mDeviceSupport and mGBDevice instances
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); Prefs prefs = GBApplication.getPrefs();
switch (action) { switch (action) {
case ACTION_START: case ACTION_START:
start(); start();
@ -181,8 +180,8 @@ public class DeviceCommunicationService extends Service {
String btDeviceAddress = null; String btDeviceAddress = null;
if (gbDevice == null) { if (gbDevice == null) {
btDeviceAddress = intent.getStringExtra(EXTRA_DEVICE_ADDRESS); btDeviceAddress = intent.getStringExtra(EXTRA_DEVICE_ADDRESS);
if (btDeviceAddress == null && sharedPrefs != null) { // may be null in test cases if (btDeviceAddress == null && prefs != null) { // may be null in test cases
btDeviceAddress = sharedPrefs.getString("last_device_address", null); btDeviceAddress = prefs.getString("last_device_address", null);
} }
if (btDeviceAddress != null) { if (btDeviceAddress != null) {
gbDevice = DeviceHelper.getInstance().findAvailableDevice(btDeviceAddress, this); gbDevice = DeviceHelper.getInstance().findAvailableDevice(btDeviceAddress, this);
@ -191,8 +190,8 @@ public class DeviceCommunicationService extends Service {
btDeviceAddress = gbDevice.getAddress(); btDeviceAddress = gbDevice.getAddress();
} }
if (sharedPrefs != null) { if (prefs != null) {
sharedPrefs.edit().putString("last_device_address", btDeviceAddress).apply(); prefs.getPreferences().edit().putString("last_device_address", btDeviceAddress).apply();
} }
if (gbDevice != null && !isConnecting() && !isConnected()) { if (gbDevice != null && !isConnecting() && !isConnected()) {
@ -241,12 +240,12 @@ public class DeviceCommunicationService extends Service {
if (((notificationSpec.flags & NotificationSpec.FLAG_WEARABLE_REPLY) > 0) if (((notificationSpec.flags & NotificationSpec.FLAG_WEARABLE_REPLY) > 0)
|| (notificationSpec.type == NotificationType.SMS && notificationSpec.phoneNumber != null)) { || (notificationSpec.type == NotificationType.SMS && notificationSpec.phoneNumber != null)) {
// NOTE: maybe not where it belongs // NOTE: maybe not where it belongs
if (sharedPrefs.getBoolean("pebble_force_untested", false)) { if (prefs.getBoolean("pebble_force_untested", false)) {
// I would rather like to save that as an array in ShadredPreferences // I would rather like to save that as an array in ShadredPreferences
// this would work but I dont know how to do the same in the Settings Activity's xml // this would work but I dont know how to do the same in the Settings Activity's xml
ArrayList<String> replies = new ArrayList<>(); ArrayList<String> replies = new ArrayList<>();
for (int i = 1; i <= 16; i++) { for (int i = 1; i <= 16; i++) {
String reply = sharedPrefs.getString("canned_reply_" + i, null); String reply = prefs.getString("canned_reply_" + i, null);
if (reply != null && !reply.equals("")) { if (reply != null && !reply.equals("")) {
replies.add(reply); replies.add(reply);
} }

View File

@ -8,10 +8,8 @@ import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.net.Uri; import android.net.Uri;
import android.os.ParcelUuid; import android.os.ParcelUuid;
import android.preference.PreferenceManager;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
@ -29,6 +27,7 @@ import java.nio.ByteBuffer;
import java.nio.ByteOrder; import java.nio.ByteOrder;
import java.util.UUID; import java.util.UUID;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEvent; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEvent;
import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventAppInfo; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventAppInfo;
@ -44,6 +43,7 @@ import nodomain.freeyourgadget.gadgetbridge.service.serial.GBDeviceProtocol;
import nodomain.freeyourgadget.gadgetbridge.util.FileUtils; import nodomain.freeyourgadget.gadgetbridge.util.FileUtils;
import nodomain.freeyourgadget.gadgetbridge.util.GB; import nodomain.freeyourgadget.gadgetbridge.util.GB;
import nodomain.freeyourgadget.gadgetbridge.util.PebbleUtils; import nodomain.freeyourgadget.gadgetbridge.util.PebbleUtils;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
public class PebbleIoThread extends GBDeviceIoThread { public class PebbleIoThread extends GBDeviceIoThread {
private static final Logger LOG = LoggerFactory.getLogger(PebbleIoThread.class); private static final Logger LOG = LoggerFactory.getLogger(PebbleIoThread.class);
@ -62,7 +62,7 @@ public class PebbleIoThread extends GBDeviceIoThread {
public static final String PEBBLEKIT_ACTION_APP_START = "com.getpebble.action.app.START"; public static final String PEBBLEKIT_ACTION_APP_START = "com.getpebble.action.app.START";
public static final String PEBBLEKIT_ACTION_APP_STOP = "com.getpebble.action.app.STOP"; public static final String PEBBLEKIT_ACTION_APP_STOP = "com.getpebble.action.app.STOP";
final SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getContext()); final Prefs prefs = GBApplication.getPrefs();
private final PebbleProtocol mPebbleProtocol; private final PebbleProtocol mPebbleProtocol;
private final PebbleSupport mPebbleSupport; private final PebbleSupport mPebbleSupport;
@ -160,7 +160,7 @@ public class PebbleIoThread extends GBDeviceIoThread {
mPebbleProtocol = (PebbleProtocol) gbDeviceProtocol; mPebbleProtocol = (PebbleProtocol) gbDeviceProtocol;
mBtAdapter = btAdapter; mBtAdapter = btAdapter;
mPebbleSupport = pebbleSupport; mPebbleSupport = pebbleSupport;
mEnablePebblekit = sharedPrefs.getBoolean("pebble_enable_pebblekit", false); mEnablePebblekit = prefs.getBoolean("pebble_enable_pebblekit", false);
} }
@Override @Override
@ -199,7 +199,7 @@ public class PebbleIoThread extends GBDeviceIoThread {
return false; return false;
} }
mPebbleProtocol.setForceProtocol(sharedPrefs.getBoolean("pebble_force_protocol", false)); mPebbleProtocol.setForceProtocol(prefs.getBoolean("pebble_force_protocol", false));
mIsConnected = true; mIsConnected = true;
if (originalState == GBDevice.State.WAITING_FOR_RECONNECT) { if (originalState == GBDevice.State.WAITING_FOR_RECONNECT) {
@ -364,7 +364,7 @@ public class PebbleIoThread extends GBDeviceIoThread {
if (e.getMessage().contains("socket closed")) { //FIXME: this does not feel right if (e.getMessage().contains("socket closed")) { //FIXME: this does not feel right
LOG.info(e.getMessage()); LOG.info(e.getMessage());
mIsConnected = false; mIsConnected = false;
int reconnectAttempts = Integer.valueOf(sharedPrefs.getString("pebble_reconnect_attempts", "10")); int reconnectAttempts = Integer.valueOf(prefs.getString("pebble_reconnect_attempts", "10"));
if (reconnectAttempts > 0) { if (reconnectAttempts > 0) {
gbDevice.setState(GBDevice.State.CONNECTING); gbDevice.setState(GBDevice.State.CONNECTING);
gbDevice.sendDeviceUpdateIntent(getContext()); gbDevice.sendDeviceUpdateIntent(getContext());
@ -480,7 +480,7 @@ public class PebbleIoThread extends GBDeviceIoThread {
private boolean evaluateGBDeviceEventPebble(GBDeviceEvent deviceEvent) { private boolean evaluateGBDeviceEventPebble(GBDeviceEvent deviceEvent) {
if (deviceEvent instanceof GBDeviceEventVersionInfo) { if (deviceEvent instanceof GBDeviceEventVersionInfo) {
if (sharedPrefs.getBoolean("datetime_synconconnect", true)) { if (prefs.getBoolean("datetime_synconconnect", true)) {
LOG.info("syncing time"); LOG.info("syncing time");
write(mPebbleProtocol.encodeSetTime()); write(mPebbleProtocol.encodeSetTime());
} }

View File

@ -12,7 +12,9 @@ import android.view.KeyEvent;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventMusicControl; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventMusicControl;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
public class GBMusicControlReceiver extends BroadcastReceiver { public class GBMusicControlReceiver extends BroadcastReceiver {
private static final Logger LOG = LoggerFactory.getLogger(GBMusicControlReceiver.class); private static final Logger LOG = LoggerFactory.getLogger(GBMusicControlReceiver.class);
@ -53,8 +55,8 @@ public class GBMusicControlReceiver extends BroadcastReceiver {
} }
if (keyCode != -1) { if (keyCode != -1) {
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context); Prefs prefs = GBApplication.getPrefs();
String audioPlayer = sharedPrefs.getString("audio_player", "default"); String audioPlayer = prefs.getString("audio_player", "default");
long eventtime = SystemClock.uptimeMillis(); long eventtime = SystemClock.uptimeMillis();

View File

@ -12,6 +12,7 @@ import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator; import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.UnknownDeviceCoordinator; import nodomain.freeyourgadget.gadgetbridge.devices.UnknownDeviceCoordinator;
@ -75,8 +76,8 @@ public class DeviceHelper {
} }
} }
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context); Prefs prefs = GBApplication.getPrefs();
String miAddr = sharedPrefs.getString(MiBandConst.PREF_MIBAND_ADDRESS, ""); String miAddr = prefs.getString(MiBandConst.PREF_MIBAND_ADDRESS, "");
if (miAddr.length() > 0) { if (miAddr.length() > 0) {
GBDevice miDevice = new GBDevice(miAddr, "MI", DeviceType.MIBAND); GBDevice miDevice = new GBDevice(miAddr, "MI", DeviceType.MIBAND);
if (!availableDevices.contains(miDevice)) { if (!availableDevices.contains(miDevice)) {
@ -84,8 +85,8 @@ public class DeviceHelper {
} }
} }
String pebbleEmuAddr = sharedPrefs.getString("pebble_emu_addr", ""); String pebbleEmuAddr = prefs.getString("pebble_emu_addr", "");
String pebbleEmuPort = sharedPrefs.getString("pebble_emu_port", ""); String pebbleEmuPort = prefs.getString("pebble_emu_port", "");
if (pebbleEmuAddr.length() >= 7 && pebbleEmuPort.length() > 0) { if (pebbleEmuAddr.length() >= 7 && pebbleEmuPort.length() > 0) {
GBDevice pebbleEmuDevice = new GBDevice(pebbleEmuAddr + ":" + pebbleEmuPort, "Pebble qemu", DeviceType.PEBBLE); GBDevice pebbleEmuDevice = new GBDevice(pebbleEmuAddr + ":" + pebbleEmuPort, "Pebble qemu", DeviceType.PEBBLE);
availableDevices.add(pebbleEmuDevice); availableDevices.add(pebbleEmuDevice);

View File

@ -0,0 +1,113 @@
package nodomain.freeyourgadget.gadgetbridge.util;
import android.content.SharedPreferences;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Set;
/**
* Wraps SharedPreferences to avoid ClassCastExceptions and others.
*/
public class Prefs {
private static final Logger LOG = LoggerFactory.getLogger(Prefs.class);
private final SharedPreferences preferences;
public Prefs(SharedPreferences preferences) {
this.preferences = preferences;
}
public SharedPreferences getPreferences() {
return preferences;
}
public String getString(String key, String defaultValue) {
String value = preferences.getString(key, defaultValue);
if (value == null || "".equals(value)) {
return defaultValue;
}
return value;
}
public Set<String> getStringSet(String key, Set<String> defaultValue) {
Set<String> value = preferences.getStringSet(key, defaultValue);
if (value == null || value.isEmpty()) {
return defaultValue;
}
return value;
}
public int getInt(String key, int defaultValue) {
try {
return preferences.getInt(key, defaultValue);
} catch (Exception ex) {
try {
String value = preferences.getString(key, String.valueOf(defaultValue));
if ("".equals(value)) {
return defaultValue;
}
return Integer.parseInt(value);
} catch (Exception ex2) {
logReadError(key, ex);
return defaultValue;
}
}
}
public long getLong(String key, long defaultValue) {
try {
return preferences.getLong(key, defaultValue);
} catch (Exception ex) {
try {
String value = preferences.getString(key, String.valueOf(defaultValue));
if ("".equals(value)) {
return defaultValue;
}
return Long.parseLong(value);
} catch (Exception ex2) {
logReadError(key, ex);
return defaultValue;
}
}
}
public float getFloat(String key, float defaultValue) {
try {
return preferences.getFloat(key, defaultValue);
} catch (Exception ex) {
try {
String value = preferences.getString(key, String.valueOf(defaultValue));
if ("".equals(value)) {
return defaultValue;
}
return Float.parseFloat(value);
} catch (Exception ex2) {
logReadError(key, ex);
return defaultValue;
}
}
}
public boolean getBoolean(String key, boolean defaultValue) {
try {
return preferences.getBoolean(key, defaultValue);
} catch (Exception ex) {
try {
String value = preferences.getString(key, String.valueOf(defaultValue));
if ("".equals(value)) {
return defaultValue;
}
return Boolean.parseBoolean(value);
} catch (Exception ex2) {
logReadError(key, ex);
return defaultValue;
}
}
}
private void logReadError(String key, Exception ex) {
LOG.error("Error reading preference value: " + key + "; returning default value", ex); // log the first exception
}
}