From 795ffde0e1dfc06d6ce2024ac8bc974f1a876472 Mon Sep 17 00:00:00 2001 From: Daniele Gobbetti Date: Tue, 20 Aug 2024 18:35:46 +0200 Subject: [PATCH] Pebble: move a bunch of preferences to device specific settings --- .../activities/ExternalPebbleJSActivity.java | 12 +- .../devices/pebble/PebbleCoordinator.java | 47 +++-- .../devices/pebble/AppMessageHandler.java | 5 + .../pebble/AppMessageHandlerMisfit.java | 4 +- .../pebble/AppMessageHandlerMorpheuz.java | 4 +- .../pebble/DatalogSessionPebbleHealth.java | 10 +- .../devices/pebble/PebbleIoThread.java | 25 +-- .../devices/pebble/PebbleProtocol.java | 6 +- .../service/devices/pebble/PebbleSupport.java | 5 +- .../devices/pebble/ble/PebbleLESupport.java | 4 +- .../devices/pebble/webview/GBWebClient.java | 3 +- .../gadgetbridge/util/GBPrefs.java | 6 - .../xml/devicesettings_pebble_preferences.xml | 163 ++++++++++++++++++ app/src/main/res/xml/pebble_preferences.xml | 101 +---------- 14 files changed, 239 insertions(+), 156 deletions(-) create mode 100644 app/src/main/res/xml/devicesettings_pebble_preferences.xml diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ExternalPebbleJSActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ExternalPebbleJSActivity.java index a9a97b356..9f1c46af5 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ExternalPebbleJSActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ExternalPebbleJSActivity.java @@ -44,6 +44,7 @@ import java.util.UUID; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.devices.DeviceManager; +import nodomain.freeyourgadget.gadgetbridge.devices.pebble.PebbleCoordinator; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.model.DeviceService; import nodomain.freeyourgadget.gadgetbridge.model.DeviceType; @@ -51,7 +52,6 @@ import nodomain.freeyourgadget.gadgetbridge.service.DeviceCommunicationService; import nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.webview.GBChromeClient; import nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.webview.GBWebClient; import nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.webview.JSInterface; -import nodomain.freeyourgadget.gadgetbridge.util.DeviceHelper; import nodomain.freeyourgadget.gadgetbridge.util.GB; import nodomain.freeyourgadget.gadgetbridge.util.GBPrefs; import nodomain.freeyourgadget.gadgetbridge.util.WebViewSingleton; @@ -120,14 +120,14 @@ public class ExternalPebbleJSActivity extends AbstractGBActivity { currentDevice = extras.getParcelable(GBDevice.EXTRA_DEVICE); currentUUID = (UUID) extras.getSerializable(DeviceService.EXTRA_APP_UUID); - if (extras.getBoolean(START_BG_WEBVIEW, false)) { + if (currentDevice != null && extras.getBoolean(START_BG_WEBVIEW, false) && ((PebbleCoordinator) currentDevice.getDeviceCoordinator()).isBackgroundJsEnabled(currentDevice)) { startBackgroundWebViewAndFinish(); return; } showConfig = extras.getBoolean(SHOW_CONFIG, false); } - if (GBApplication.getPrefs().isBackgroundJsEnabled()) { + if (currentDevice != null && ((PebbleCoordinator) currentDevice.getDeviceCoordinator()).isBackgroundJsEnabled(currentDevice)) { if (showConfig) { Objects.requireNonNull(currentDevice, "Must provide a device when invoking this activity"); Objects.requireNonNull(currentUUID, "Must provide a uuid when invoking this activity"); @@ -144,11 +144,7 @@ public class ExternalPebbleJSActivity extends AbstractGBActivity { } private void startBackgroundWebViewAndFinish() { - if (GBApplication.getPrefs().isBackgroundJsEnabled()) { - WebViewSingleton.ensureCreated(this); - } else { - LOG.warn("BGJs disabled, not starting webview"); - } + WebViewSingleton.ensureCreated(this); finish(); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleCoordinator.java index 265fd343c..322c7d8da 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleCoordinator.java @@ -36,6 +36,8 @@ import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.GBException; import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.activities.appmanager.AppManagerActivity; +import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettings; +import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettingsScreen; import nodomain.freeyourgadget.gadgetbridge.devices.AbstractBLClassicDeviceCoordinator; import nodomain.freeyourgadget.gadgetbridge.devices.InstallHandler; import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider; @@ -47,14 +49,16 @@ import nodomain.freeyourgadget.gadgetbridge.entities.PebbleHealthActivitySampleD import nodomain.freeyourgadget.gadgetbridge.entities.PebbleMisfitSampleDao; import nodomain.freeyourgadget.gadgetbridge.entities.PebbleMorpheuzSampleDao; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; -import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceCandidate; import nodomain.freeyourgadget.gadgetbridge.model.DeviceType; import nodomain.freeyourgadget.gadgetbridge.service.DeviceSupport; import nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.PebbleSupport; import nodomain.freeyourgadget.gadgetbridge.util.PebbleUtils; -import nodomain.freeyourgadget.gadgetbridge.util.Prefs; +import nodomain.freeyourgadget.gadgetbridge.util.preferences.DevicePrefs; public class PebbleCoordinator extends AbstractBLClassicDeviceCoordinator { + private static final String BG_JS_ENABLED = "pebble_enable_background_javascript"; + private static final boolean BG_JS_ENABLED_DEFAULT = false; + public PebbleCoordinator() { } @@ -83,7 +87,7 @@ public class PebbleCoordinator extends AbstractBLClassicDeviceCoordinator { @Override public SampleProvider getSampleProvider(GBDevice device, DaoSession session) { - Prefs prefs = GBApplication.getPrefs(); + DevicePrefs prefs = GBApplication.getDevicePrefs(device.getAddress()); int activityTracker = prefs.getInt("pebble_activitytracker", SampleProvider.PROVIDER_PEBBLE_HEALTH); switch (activityTracker) { case SampleProvider.PROVIDER_PEBBLE_HEALTH: @@ -223,15 +227,30 @@ public class PebbleCoordinator extends AbstractBLClassicDeviceCoordinator { return true; } +// @Override +// public int[] getSupportedDeviceSpecificSettings(GBDevice device) { +// return new int[]{ +// , +// R.xml.devicesettings_transliteration +// }; +// } + @Override - public int[] getSupportedDeviceSpecificSettings(GBDevice device) { - return new int[]{ - R.xml.devicesettings_autoremove_notifications, - R.xml.devicesettings_canned_reply_16, - R.xml.devicesettings_canned_dismisscall_16, - R.xml.devicesettings_sync_calendar, - R.xml.devicesettings_transliteration - }; + public DeviceSpecificSettings getDeviceSpecificSettings(final GBDevice device) { + final DeviceSpecificSettings deviceSpecificSettings = new DeviceSpecificSettings(); + + final List notifications = deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.CALLS_AND_NOTIFICATIONS); + notifications.add(R.xml.devicesettings_autoremove_notifications); + notifications.add(R.xml.devicesettings_canned_reply_16); + notifications.add(R.xml.devicesettings_canned_dismisscall_16); + notifications.add(R.xml.devicesettings_transliteration); + + final List calendar = deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.CALENDAR); + calendar.add(R.xml.devicesettings_sync_calendar); + + deviceSpecificSettings.addRootScreen(R.xml.devicesettings_pebble_preferences); + + return deviceSpecificSettings; } @NonNull @@ -259,4 +278,10 @@ public class PebbleCoordinator extends AbstractBLClassicDeviceCoordinator { public int getDisabledIconResource() { return R.drawable.ic_device_pebble_disabled; } + + public boolean isBackgroundJsEnabled(final GBDevice device) { + DevicePrefs deviceSpecificPreferences = GBApplication.getDevicePrefs(device.getAddress()); + return deviceSpecificPreferences.getBoolean(BG_JS_ENABLED, BG_JS_ENABLED_DEFAULT); + } + } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/AppMessageHandler.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/AppMessageHandler.java index 9a3caaa30..72b436360 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/AppMessageHandler.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/AppMessageHandler.java @@ -29,21 +29,26 @@ import java.util.ArrayList; import java.util.Map; import java.util.UUID; +import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEvent; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventSendBytes; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec; import nodomain.freeyourgadget.gadgetbridge.util.FileUtils; import nodomain.freeyourgadget.gadgetbridge.util.PebbleUtils; +import nodomain.freeyourgadget.gadgetbridge.util.preferences.DevicePrefs; class AppMessageHandler { final PebbleProtocol mPebbleProtocol; final UUID mUUID; Map messageKeys; + protected final DevicePrefs devicePrefs; + AppMessageHandler(UUID uuid, PebbleProtocol pebbleProtocol) { mUUID = uuid; mPebbleProtocol = pebbleProtocol; + devicePrefs = GBApplication.getDevicePrefs(pebbleProtocol.getDevice().getAddress()); } public boolean isEnabled() { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/AppMessageHandlerMisfit.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/AppMessageHandlerMisfit.java index 378b95eb1..b82a3e600 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/AppMessageHandlerMisfit.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/AppMessageHandlerMisfit.java @@ -37,7 +37,6 @@ import nodomain.freeyourgadget.gadgetbridge.devices.pebble.PebbleMisfitSamplePro import nodomain.freeyourgadget.gadgetbridge.entities.PebbleMisfitSample; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.util.GB; -import nodomain.freeyourgadget.gadgetbridge.util.Prefs; class AppMessageHandlerMisfit extends AppMessageHandler { @@ -59,8 +58,7 @@ class AppMessageHandlerMisfit extends AppMessageHandler { @Override public boolean isEnabled() { - Prefs prefs = GBApplication.getPrefs(); - return prefs.getBoolean("pebble_sync_misfit", true); + return devicePrefs.getBoolean("pebble_sync_misfit", true); } @Override diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/AppMessageHandlerMorpheuz.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/AppMessageHandlerMorpheuz.java index d2f0e4d8e..ef48d300f 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/AppMessageHandlerMorpheuz.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/AppMessageHandlerMorpheuz.java @@ -38,7 +38,6 @@ import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventSendBytes; import nodomain.freeyourgadget.gadgetbridge.devices.pebble.PebbleMorpheuzSampleProvider; import nodomain.freeyourgadget.gadgetbridge.entities.PebbleMorpheuzSample; import nodomain.freeyourgadget.gadgetbridge.util.GB; -import nodomain.freeyourgadget.gadgetbridge.util.Prefs; class AppMessageHandlerMorpheuz extends AppMessageHandler { private Integer keyPoint; @@ -100,8 +99,7 @@ class AppMessageHandlerMorpheuz extends AppMessageHandler { @Override public boolean isEnabled() { - Prefs prefs = GBApplication.getPrefs(); - return prefs.getBoolean("pebble_sync_morpheuz", true); + return devicePrefs.getBoolean("pebble_sync_morpheuz", true); } @Override diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/DatalogSessionPebbleHealth.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/DatalogSessionPebbleHealth.java index 73c1ae100..0133bd42a 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/DatalogSessionPebbleHealth.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/DatalogSessionPebbleHealth.java @@ -21,15 +21,17 @@ import java.util.UUID; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; -import nodomain.freeyourgadget.gadgetbridge.util.Prefs; +import nodomain.freeyourgadget.gadgetbridge.util.preferences.DevicePrefs; abstract class DatalogSessionPebbleHealth extends DatalogSession { private final GBDevice mDevice; + private final DevicePrefs devicePrefs; DatalogSessionPebbleHealth(byte id, UUID uuid, int timestamp, int tag, byte itemType, short itemSize, GBDevice device) { super(id, uuid, timestamp, tag, itemType, itemSize); mDevice = device; + devicePrefs = GBApplication.getDevicePrefs(mDevice.getAddress()); } public GBDevice getDevice() { @@ -37,12 +39,10 @@ abstract class DatalogSessionPebbleHealth extends DatalogSession { } boolean isPebbleHealthEnabled() { - Prefs prefs = GBApplication.getPrefs(); - return prefs.getBoolean("pebble_sync_health", true); + return devicePrefs.getBoolean("pebble_sync_health", true); } boolean storePebbleHealthRawRecord() { - Prefs prefs = GBApplication.getPrefs(); - return prefs.getBoolean("pebble_health_store_raw", true); + return devicePrefs.getBoolean("pebble_health_store_raw", true); } } \ No newline at end of file diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleIoThread.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleIoThread.java index 6d74c58fe..e6998c42f 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleIoThread.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleIoThread.java @@ -22,7 +22,6 @@ import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothSocket; import android.content.Context; import android.content.Intent; -import android.content.SharedPreferences; import android.net.Uri; import android.os.ParcelUuid; import android.webkit.ValueCallback; @@ -59,6 +58,7 @@ import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventAppMessage import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventVersionInfo; import nodomain.freeyourgadget.gadgetbridge.deviceevents.pebble.GBDeviceEventDataLogging; import nodomain.freeyourgadget.gadgetbridge.devices.pebble.PBWReader; +import nodomain.freeyourgadget.gadgetbridge.devices.pebble.PebbleCoordinator; import nodomain.freeyourgadget.gadgetbridge.devices.pebble.PebbleInstallable; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceApp; @@ -69,11 +69,13 @@ import nodomain.freeyourgadget.gadgetbridge.util.GB; import nodomain.freeyourgadget.gadgetbridge.util.PebbleUtils; import nodomain.freeyourgadget.gadgetbridge.util.Prefs; import nodomain.freeyourgadget.gadgetbridge.util.WebViewSingleton; +import nodomain.freeyourgadget.gadgetbridge.util.preferences.DevicePrefs; class PebbleIoThread extends GBDeviceIoThread { private static final Logger LOG = LoggerFactory.getLogger(PebbleIoThread.class); private final Prefs prefs = GBApplication.getPrefs(); + private final DevicePrefs devicePrefs; private final PebbleProtocol mPebbleProtocol; private final PebbleSupport mPebbleSupport; @@ -147,12 +149,12 @@ class PebbleIoThread extends GBDeviceIoThread { PebbleIoThread(PebbleSupport pebbleSupport, GBDevice gbDevice, GBDeviceProtocol gbDeviceProtocol, BluetoothAdapter btAdapter, Context context) { super(gbDevice, context); - final SharedPreferences deviceSpecificSharedPrefsrefs = GBApplication.getDeviceSpecificSharedPrefs(gbDevice.getAddress()); + devicePrefs = GBApplication.getDevicePrefs(gbDevice.getAddress()); mPebbleProtocol = (PebbleProtocol) gbDeviceProtocol; mBtAdapter = btAdapter; mPebbleSupport = pebbleSupport; - mEnablePebblekit = deviceSpecificSharedPrefsrefs.getBoolean("third_party_apps_set_settings", false); - mPebbleProtocol.setAlwaysACKPebbleKit(prefs.getBoolean("pebble_always_ack_pebblekit", false)); + mEnablePebblekit = devicePrefs.getBoolean("third_party_apps_set_settings", false); + mPebbleProtocol.setAlwaysACKPebbleKit(devicePrefs.getBoolean("pebble_always_ack_pebblekit", false)); mPebbleProtocol.setEnablePebbleKit(mEnablePebblekit); mPebbleActiveAppTracker = new PebbleActiveAppTracker(); @@ -183,7 +185,7 @@ class PebbleIoThread extends GBDeviceIoThread { mOutStream = mTCPSocket.getOutputStream(); } else { mIsTCP = false; - if (gbDevice.getVolatileAddress() != null && prefs.getBoolean("pebble_force_le", false)) { + if (gbDevice.getVolatileAddress() != null && devicePrefs.getBoolean("pebble_force_le", false)) { deviceAddress = gbDevice.getVolatileAddress(); } BluetoothDevice btDevice = mBtAdapter.getRemoteDevice(deviceAddress); @@ -211,9 +213,10 @@ class PebbleIoThread extends GBDeviceIoThread { mOutStream = mBtSocket.getOutputStream(); } } - if (GBApplication.getPrefs().isBackgroundJsEnabled()) { + if (((PebbleCoordinator) gbDevice.getDeviceCoordinator()).isBackgroundJsEnabled(gbDevice)) { Intent startIntent = new Intent(getContext(), ExternalPebbleJSActivity.class); startIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startIntent.putExtra(GBDevice.EXTRA_DEVICE, gbDevice); startIntent.putExtra(ExternalPebbleJSActivity.START_BG_WEBVIEW, true); getContext().startActivity(startIntent); } else { @@ -230,7 +233,7 @@ class PebbleIoThread extends GBDeviceIoThread { return false; } - mPebbleProtocol.setForceProtocol(prefs.getBoolean("pebble_force_protocol", false)); + mPebbleProtocol.setForceProtocol(devicePrefs.getBoolean("pebble_force_protocol", false)); mIsConnected = true; write(mPebbleProtocol.encodeFirmwareVersionReq()); @@ -414,7 +417,7 @@ class PebbleIoThread extends GBDeviceIoThread { gbDevice.setState(GBDevice.State.WAITING_FOR_RECONNECT); } - if (GBApplication.getPrefs().isBackgroundJsEnabled()) { + if (((PebbleCoordinator) gbDevice.getDeviceCoordinator()).isBackgroundJsEnabled(gbDevice)) { WebViewSingleton.getInstance().disposeWebView(); } @@ -478,7 +481,7 @@ class PebbleIoThread extends GBDeviceIoThread { LOG.info("syncing time"); write(mPebbleProtocol.encodeSetTime()); } - write(mPebbleProtocol.encodeEnableAppLogs(prefs.getBoolean("pebble_enable_applogs", false))); + write(mPebbleProtocol.encodeEnableAppLogs(devicePrefs.getBoolean("pebble_enable_applogs", false))); write(mPebbleProtocol.encodeReportDataLogSessions()); gbDevice.setState(GBDevice.State.INITIALIZED); return false; @@ -542,7 +545,7 @@ class PebbleIoThread extends GBDeviceIoThread { break; case START: LOG.info("got GBDeviceEventAppManagement START event for uuid: " + appMgmt.uuid); - if (GBApplication.getPrefs().isBackgroundJsEnabled()) { + if (((PebbleCoordinator) gbDevice.getDeviceCoordinator()).isBackgroundJsEnabled(gbDevice)) { if (mPebbleProtocol.hasAppMessageHandler(appMgmt.uuid)) { WebViewSingleton.getInstance().stopJavascriptInterface(); } else { @@ -565,7 +568,7 @@ class PebbleIoThread extends GBDeviceIoThread { setInstallSlot(appInfoEvent.freeSlot); return false; } else if (deviceEvent instanceof GBDeviceEventAppMessage) { - if (GBApplication.getPrefs().isBackgroundJsEnabled()) { + if (((PebbleCoordinator) gbDevice.getDeviceCoordinator()).isBackgroundJsEnabled(gbDevice)) { sendAppMessageJS((GBDeviceEventAppMessage) deviceEvent); } if (mEnablePebblekit) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleProtocol.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleProtocol.java index afa9a2250..503143dcb 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleProtocol.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleProtocol.java @@ -28,8 +28,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileOutputStream; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.ByteOrder; @@ -55,6 +53,7 @@ import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventScreenshot import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventSendBytes; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventVersionInfo; import nodomain.freeyourgadget.gadgetbridge.deviceevents.pebble.GBDeviceEventDataLogging; +import nodomain.freeyourgadget.gadgetbridge.devices.pebble.PebbleCoordinator; import nodomain.freeyourgadget.gadgetbridge.devices.pebble.PebbleIconID; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceApp; @@ -69,7 +68,6 @@ import nodomain.freeyourgadget.gadgetbridge.model.NotificationType; import nodomain.freeyourgadget.gadgetbridge.model.Weather; import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec; import nodomain.freeyourgadget.gadgetbridge.service.serial.GBDeviceProtocol; -import nodomain.freeyourgadget.gadgetbridge.util.FileUtils; import nodomain.freeyourgadget.gadgetbridge.util.GB; public class PebbleProtocol extends GBDeviceProtocol { @@ -423,7 +421,7 @@ public class PebbleProtocol extends GBDeviceProtocol { super(device); mAppMessageHandlers.put(UUID_MORPHEUZ, new AppMessageHandlerMorpheuz(UUID_MORPHEUZ, PebbleProtocol.this)); mAppMessageHandlers.put(UUID_MISFIT, new AppMessageHandlerMisfit(UUID_MISFIT, PebbleProtocol.this)); - if (!GBApplication.getPrefs().isBackgroundJsEnabled()) { + if (!((PebbleCoordinator) device.getDeviceCoordinator()).isBackgroundJsEnabled(device)) { mAppMessageHandlers.put(UUID_PEBBLE_TIMESTYLE, new AppMessageHandlerTimeStylePebble(UUID_PEBBLE_TIMESTYLE, PebbleProtocol.this)); mAppMessageHandlers.put(UUID_PEBSTYLE, new AppMessageHandlerPebStyle(UUID_PEBSTYLE, PebbleProtocol.this)); mAppMessageHandlers.put(UUID_MARIOTIME, new AppMessageHandlerMarioTime(UUID_MARIOTIME, PebbleProtocol.this)); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleSupport.java index 3538b50ae..17763af74 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleSupport.java @@ -35,7 +35,6 @@ import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; -import nodomain.freeyourgadget.gadgetbridge.model.Alarm; import nodomain.freeyourgadget.gadgetbridge.model.CalendarEventSpec; import nodomain.freeyourgadget.gadgetbridge.model.CallSpec; import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec; @@ -153,7 +152,7 @@ public class PebbleSupport extends AbstractSerialDeviceSupport { @Override public void onNotification(NotificationSpec notificationSpec) { - String currentPrivacyMode = GBApplication.getPrefs().getString("pebble_pref_privacy_mode", getContext().getString(R.string.p_pebble_privacy_mode_off)); + String currentPrivacyMode = GBApplication.getDevicePrefs(gbDevice.getAddress()).getString("pebble_pref_privacy_mode", getContext().getString(R.string.p_pebble_privacy_mode_off)); if (getContext().getString(R.string.p_pebble_privacy_mode_complete).equals(currentPrivacyMode)) { notificationSpec.body = null; notificationSpec.sender = null; @@ -177,7 +176,7 @@ public class PebbleSupport extends AbstractSerialDeviceSupport { @Override public void onSetCallState(CallSpec callSpec) { if (reconnect()) { - if ((callSpec.command != CallSpec.CALL_OUTGOING) || GBApplication.getPrefs().getBoolean("pebble_enable_outgoing_call", true)) { + if ((callSpec.command != CallSpec.CALL_OUTGOING) || GBApplication.getDevicePrefs(gbDevice.getAddress()).getBoolean("pebble_enable_outgoing_call", true)) { super.onSetCallState(callSpec); } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/ble/PebbleLESupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/ble/PebbleLESupport.java index c7a3df121..925cf3fe5 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/ble/PebbleLESupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/ble/PebbleLESupport.java @@ -60,11 +60,11 @@ public class PebbleLESupport { mWriteHandlerThread.start(); mWriteHandler = new Handler(mWriteHandlerThread.getLooper()); - mMTULimit = GBApplication.getPrefs().getInt("pebble_mtu_limit", 512); + mMTULimit = GBApplication.getDevicePrefs(mBtDevice.getAddress()).getInt("pebble_mtu_limit", 512); mMTULimit = Math.max(mMTULimit, 20); mMTULimit = Math.min(mMTULimit, 512); - clientOnly = GBApplication.getPrefs().getBoolean("pebble_gatt_clientonly", false); + clientOnly = GBApplication.getDevicePrefs(mBtDevice.getAddress()).getBoolean("pebble_gatt_clientonly", false); if (!clientOnly) { mPebbleGATTServer = new PebbleGATTServer(this, context, mBtDevice); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/webview/GBWebClient.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/webview/GBWebClient.java index 56a737b1f..328892529 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/webview/GBWebClient.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/webview/GBWebClient.java @@ -44,6 +44,7 @@ import java.util.HashMap; import java.util.Map; import nodomain.freeyourgadget.gadgetbridge.GBApplication; +import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.model.Weather; import nodomain.freeyourgadget.gadgetbridge.util.WebViewSingleton; @@ -79,7 +80,7 @@ public class GBWebClient extends WebViewClient { private WebResourceResponse mimicReply(Uri requestedUri) { if (requestedUri.getHost() != null && (StringUtils.indexOfAny(requestedUri.getHost(), AllowedDomains) != -1)) { - if (GBApplication.getPrefs().isBackgroundJsEnabled() && WebViewSingleton.getInstance().internetHelperBound) { + if (WebViewSingleton.getInstance().internetHelperBound) { LOG.debug("WEBVIEW forwarding request to the internet helper"); Bundle bundle = new Bundle(); bundle.putString("URL", requestedUri.toString()); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/GBPrefs.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/GBPrefs.java index 2047b6efa..2e4bf8cce 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/GBPrefs.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/GBPrefs.java @@ -54,8 +54,6 @@ public class GBPrefs extends Prefs { public static final String PING_TONE = "ping_tone"; public static final String AUTO_EXPORT_INTERVAL = "auto_export_interval"; private static final boolean AUTO_START_DEFAULT = true; - private static final String BG_JS_ENABLED = "pebble_enable_background_javascript"; - private static final boolean BG_JS_ENABLED_DEFAULT = false; public static final String RTL_SUPPORT = "rtl"; public static final String RTL_CONTEXTUAL_ARABIC = "contextualArabic"; public static boolean AUTO_RECONNECT_DEFAULT = true; @@ -96,10 +94,6 @@ public class GBPrefs extends Prefs { return getBoolean(AUTO_START, AUTO_START_DEFAULT); } - public boolean isBackgroundJsEnabled() { - return getBoolean(BG_JS_ENABLED, BG_JS_ENABLED_DEFAULT); - } - public String getUserName() { return getString(USER_NAME, USER_NAME_DEFAULT); } diff --git a/app/src/main/res/xml/devicesettings_pebble_preferences.xml b/app/src/main/res/xml/devicesettings_pebble_preferences.xml new file mode 100644 index 000000000..d335cfaf1 --- /dev/null +++ b/app/src/main/res/xml/devicesettings_pebble_preferences.xml @@ -0,0 +1,163 @@ + + + + + + + + + + + + + > + + + + + + + + + + + + + + diff --git a/app/src/main/res/xml/pebble_preferences.xml b/app/src/main/res/xml/pebble_preferences.xml index 62141bedf..9299ad9da 100644 --- a/app/src/main/res/xml/pebble_preferences.xml +++ b/app/src/main/res/xml/pebble_preferences.xml @@ -1,16 +1,9 @@ - - - - - - - - > - - - - - - - - - +