From aa1e2f6b3afb8e8e4319958450056e62dac964a7 Mon Sep 17 00:00:00 2001 From: Arjan Schrijver Date: Fri, 3 Oct 2025 13:35:02 +0200 Subject: [PATCH] Let BangleJS implementation use the generic webview --- .../activities/ExternalPebbleJSActivity.java | 4 +- .../appmanager/RebbleAppStoreActivity.kt | 4 +- .../banglejs/AppsManagementActivity.java | 89 +------------------ .../gps/providers/MockLocationProvider.java | 2 +- .../cmfwatchpro/CmfWatchProSupport.java | 2 +- .../devices/garmin/ProtocolBufferHandler.java | 2 +- .../devices/garmin/http/WeatherHandler.java | 2 +- .../service/devices/hplus/HPlusSupport.java | 2 +- .../huami/zeppos/ZeppOsWeatherHandler.java | 2 +- .../devices/huawei/HuaweiWeatherManager.java | 2 +- .../SendGpsAndTimeToDeviceRequest.java | 9 -- .../devices/pebble/webview/JSInterface.java | 38 ++++---- .../fossil_hr/FossilHRWatchAdapter.java | 2 +- .../gadgetbridge/util/WebViewSingleton.java | 4 +- .../pebble => }/webview/CurrentPosition.java | 5 +- .../pebble => }/webview/GBChromeClient.java | 2 +- .../pebble => }/webview/GBWebClient.java | 2 +- 17 files changed, 40 insertions(+), 133 deletions(-) rename app/src/main/java/nodomain/freeyourgadget/gadgetbridge/{service/devices/pebble => }/webview/CurrentPosition.java (97%) rename app/src/main/java/nodomain/freeyourgadget/gadgetbridge/{service/devices/pebble => }/webview/GBChromeClient.java (95%) rename app/src/main/java/nodomain/freeyourgadget/gadgetbridge/{service/devices/pebble => }/webview/GBWebClient.java (99%) 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 a9f606ae23..2d75901b0f 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ExternalPebbleJSActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ExternalPebbleJSActivity.java @@ -51,8 +51,8 @@ import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.model.DeviceService; import nodomain.freeyourgadget.gadgetbridge.model.DeviceType; 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.webview.GBChromeClient; +import nodomain.freeyourgadget.gadgetbridge.webview.GBWebClient; import nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.webview.JSInterface; import nodomain.freeyourgadget.gadgetbridge.util.GB; import nodomain.freeyourgadget.gadgetbridge.util.GBPrefs; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/appmanager/RebbleAppStoreActivity.kt b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/appmanager/RebbleAppStoreActivity.kt index f1a4c11f2c..397f113d0c 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/appmanager/RebbleAppStoreActivity.kt +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/appmanager/RebbleAppStoreActivity.kt @@ -35,8 +35,8 @@ import nodomain.freeyourgadget.gadgetbridge.activities.AbstractGBActivity import nodomain.freeyourgadget.gadgetbridge.devices.InstallHandler import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice import nodomain.freeyourgadget.gadgetbridge.model.DeviceService -import nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.webview.GBChromeClient -import nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.webview.GBWebClient +import nodomain.freeyourgadget.gadgetbridge.webview.GBChromeClient +import nodomain.freeyourgadget.gadgetbridge.webview.GBWebClient import nodomain.freeyourgadget.gadgetbridge.util.GB import nodomain.freeyourgadget.gadgetbridge.util.InternetHelperSingleton import nodomain.freeyourgadget.internethelper.aidl.http.HttpGetRequest diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/banglejs/AppsManagementActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/banglejs/AppsManagementActivity.java index fc4cfc7546..baf2de1e44 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/banglejs/AppsManagementActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/banglejs/AppsManagementActivity.java @@ -20,18 +20,13 @@ import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.Dev import android.app.Activity; import android.content.BroadcastReceiver; -import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; -import android.content.ServiceConnection; import android.net.Uri; import android.os.Bundle; import android.os.Handler; -import android.os.IBinder; import android.os.Looper; -import android.os.ParcelFileDescriptor; -import android.os.RemoteException; import android.util.Base64; import android.webkit.DownloadListener; import android.webkit.JavascriptInterface; @@ -39,7 +34,6 @@ import android.webkit.PermissionRequest; import android.webkit.ValueCallback; import android.webkit.WebChromeClient; import android.webkit.WebResourceRequest; -import android.webkit.WebResourceResponse; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; @@ -53,8 +47,6 @@ import org.slf4j.LoggerFactory; import java.io.IOException; import java.io.OutputStream; -import java.util.Map; -import java.util.concurrent.CountDownLatch; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; @@ -62,13 +54,8 @@ import nodomain.freeyourgadget.gadgetbridge.activities.AbstractGBActivity; import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.service.devices.banglejs.BangleJSDeviceSupport; -import nodomain.freeyourgadget.gadgetbridge.util.Capsule; +import nodomain.freeyourgadget.gadgetbridge.webview.GBWebClient; import nodomain.freeyourgadget.gadgetbridge.util.Prefs; -import nodomain.freeyourgadget.internethelper.aidl.http.HttpGetRequest; -import nodomain.freeyourgadget.internethelper.aidl.http.HttpHeaders; -import nodomain.freeyourgadget.internethelper.aidl.http.HttpResponse; -import nodomain.freeyourgadget.internethelper.aidl.http.IHttpCallback; -import nodomain.freeyourgadget.internethelper.aidl.http.IHttpService; public class AppsManagementActivity extends AbstractGBActivity { private static final Logger LOG = LoggerFactory.getLogger(AppsManagementActivity.class); @@ -95,15 +82,6 @@ public class AppsManagementActivity extends AbstractGBActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_banglejs_apps_management); - final Intent intent1 = new Intent("nodomain.freeyourgadget.internethelper.HttpService"); - intent1.setPackage("nodomain.freeyourgadget.internethelper"); - boolean res = getApplicationContext().bindService(intent1, mHttpConnection, Context.BIND_AUTO_CREATE); - if (res) { - LOG.info("Bound to HttpService"); - } else { - LOG.warn("Could not bind to HttpService"); - } - Intent intent = getIntent(); Bundle bundle = intent.getExtras(); if (bundle != null) { @@ -214,21 +192,6 @@ public class AppsManagementActivity extends AbstractGBActivity { // see onActivityResult } - private volatile IHttpService iHttpService; - private final CountDownLatch latchInit = new CountDownLatch(1); - - private final ServiceConnection mHttpConnection = new ServiceConnection() { - public void onServiceConnected(final ComponentName className, final IBinder service) { - LOG.info("onServiceConnected: {}", className); - iHttpService = IHttpService.Stub.asInterface(service); - } - - public void onServiceDisconnected(final ComponentName className) { - LOG.error("Service has unexpectedly disconnected: {}", className); - iHttpService = null; - } - }; - private void initViews() { //https://stackoverflow.com/questions/4325639/android-calling-javascript-functions-in-webview webView = findViewById(R.id.webview); @@ -247,7 +210,7 @@ public class AppsManagementActivity extends AbstractGBActivity { Prefs devicePrefs = new Prefs(GBApplication.getDeviceSpecificSharedPrefs(mGBDevice.getAddress())); final String url = devicePrefs.getString(PREF_BANGLEJS_WEBVIEW_URL, "https://banglejs.com/apps/android.html").trim(); - webView.setWebViewClient(new WebViewClient(){ + webView.setWebViewClient(new GBWebClient(){ @Override public void onPageFinished(WebView view, String weburl){ //webView.loadUrl("javascript:showToast('WebView in Espruino')"); @@ -259,54 +222,6 @@ public class AppsManagementActivity extends AbstractGBActivity { return true; } - @Override - public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { - LOG.info("shouldIntercept {} {} {}", request.getMethod(), request.getUrl(), iHttpService != null); - if (!request.getMethod().equalsIgnoreCase("get")) { - return super.shouldInterceptRequest(view, request); - } - if (iHttpService == null) { - return super.shouldInterceptRequest(view, request); - } - final HttpHeaders httpHeaders = new HttpHeaders(); - for (Map.Entry header : request.getRequestHeaders().entrySet()) { - httpHeaders.addHeader(header.getKey(), header.getValue()); - } - final HttpGetRequest httpGetRequest = new HttpGetRequest(request.getUrl().toString(), httpHeaders); - CountDownLatch latch = new CountDownLatch(1); - final Capsule internetResponseCapsule = new Capsule<>(); - try { - iHttpService.get(httpGetRequest, new IHttpCallback.Stub() { - @Override - public void onResponse(HttpResponse response) throws RemoteException { - WebResourceResponse internetResponse = new WebResourceResponse( - response.getHeaders().get("content-type"), - response.getHeaders().get("content-encoding"), - response.getStatus(), "OK", - response.getHeaders().toMap(), - new ParcelFileDescriptor.AutoCloseInputStream(response.getBody()) - ); - internetResponseCapsule.set(internetResponse); - latch.countDown(); - } - - @Override - public void onException(String message) throws RemoteException { - throw new RuntimeException(message); - } - }); - } catch (RemoteException e) { - throw new RuntimeException(e); - } - try { - latch.await(); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - - return internetResponseCapsule.get(); - } - @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { Toast.makeText(AppsManagementActivity.this, "Error:" + description, Toast.LENGTH_SHORT).show(); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/gps/providers/MockLocationProvider.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/gps/providers/MockLocationProvider.java index 06cce41711..338b99386c 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/gps/providers/MockLocationProvider.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/gps/providers/MockLocationProvider.java @@ -27,7 +27,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import nodomain.freeyourgadget.gadgetbridge.externalevents.gps.GBLocationProvider; -import nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.webview.CurrentPosition; +import nodomain.freeyourgadget.gadgetbridge.webview.CurrentPosition; /** * A mock location provider which keeps updating the location at a constant speed, starting from the diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/cmfwatchpro/CmfWatchProSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/cmfwatchpro/CmfWatchProSupport.java index a7144a658f..ce856bd70c 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/cmfwatchpro/CmfWatchProSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/cmfwatchpro/CmfWatchProSupport.java @@ -77,7 +77,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec; import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport; import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions; import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder; -import nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.webview.CurrentPosition; +import nodomain.freeyourgadget.gadgetbridge.webview.CurrentPosition; import nodomain.freeyourgadget.gadgetbridge.service.serial.GBDeviceProtocol; import nodomain.freeyourgadget.gadgetbridge.util.GB; import nodomain.freeyourgadget.gadgetbridge.util.MediaManager; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/ProtocolBufferHandler.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/ProtocolBufferHandler.java index 5105e01c22..75183edf22 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/ProtocolBufferHandler.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/ProtocolBufferHandler.java @@ -53,7 +53,7 @@ import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.http.HttpHand import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.messages.GFDIMessage; import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.messages.ProtobufMessage; import nodomain.freeyourgadget.gadgetbridge.service.devices.garmin.messages.status.ProtobufStatusMessage; -import nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.webview.CurrentPosition; +import nodomain.freeyourgadget.gadgetbridge.webview.CurrentPosition; import nodomain.freeyourgadget.gadgetbridge.util.DateTimeUtils; import nodomain.freeyourgadget.gadgetbridge.util.GB; import nodomain.freeyourgadget.gadgetbridge.util.calendar.CalendarEvent; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/http/WeatherHandler.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/http/WeatherHandler.java index fcf5792b30..7ab1270b6d 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/http/WeatherHandler.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/garmin/http/WeatherHandler.java @@ -27,7 +27,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather; import nodomain.freeyourgadget.gadgetbridge.model.weather.WeatherMapper; import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec; import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions; -import nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.webview.CurrentPosition; +import nodomain.freeyourgadget.gadgetbridge.webview.CurrentPosition; @SuppressWarnings("unused") public class WeatherHandler { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusSupport.java index 71a3a7bc04..1be9d2621a 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusSupport.java @@ -57,7 +57,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather; import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLESingleDeviceSupport; import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder; import nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.deviceinfo.DeviceInfo; -import nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.webview.CurrentPosition; +import nodomain.freeyourgadget.gadgetbridge.webview.CurrentPosition; import nodomain.freeyourgadget.gadgetbridge.util.AlarmUtils; import nodomain.freeyourgadget.gadgetbridge.util.GB; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/ZeppOsWeatherHandler.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/ZeppOsWeatherHandler.java index e03d464314..af794e0fb0 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/ZeppOsWeatherHandler.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/ZeppOsWeatherHandler.java @@ -52,7 +52,7 @@ import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiWeatherConditions import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather; import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec; -import nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.webview.CurrentPosition; +import nodomain.freeyourgadget.gadgetbridge.webview.CurrentPosition; /** * The weather models that the bands expect as an http response to weather requests. Base URL usually diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/HuaweiWeatherManager.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/HuaweiWeatherManager.java index 653f16807f..9b1612cfd4 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/HuaweiWeatherManager.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/HuaweiWeatherManager.java @@ -43,7 +43,7 @@ import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests.Send import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests.SendWeatherSunMoonSupportRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests.SendWeatherSupportRequest; import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests.SendWeatherUnitRequest; -import nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.webview.CurrentPosition; +import nodomain.freeyourgadget.gadgetbridge.webview.CurrentPosition; import nodomain.freeyourgadget.gadgetbridge.util.DateTimeUtils; import nodomain.freeyourgadget.gadgetbridge.util.GB; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SendGpsAndTimeToDeviceRequest.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SendGpsAndTimeToDeviceRequest.java index 5d433a8b23..0bb28be51f 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SendGpsAndTimeToDeviceRequest.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SendGpsAndTimeToDeviceRequest.java @@ -17,20 +17,11 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests; -import android.location.Location; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.math.BigDecimal; -import java.util.Calendar; import java.util.List; import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiPacket; import nodomain.freeyourgadget.gadgetbridge.devices.huawei.packets.GpsAndTime; import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.HuaweiSupportProvider; -import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.p2p.HuaweiP2PContactsService; -import nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.webview.CurrentPosition; public class SendGpsAndTimeToDeviceRequest extends Request { private final int timestamp; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/webview/JSInterface.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/webview/JSInterface.java index b03c210650..11db5a9d26 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/webview/JSInterface.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/webview/JSInterface.java @@ -17,9 +17,12 @@ along with this program. If not, see . */ package nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.webview; +import android.location.Location; import android.webkit.JavascriptInterface; import android.widget.Toast; +import androidx.annotation.NonNull; + import org.json.JSONException; import org.json.JSONObject; import org.slf4j.Logger; @@ -37,13 +40,13 @@ import java.util.Iterator; import java.util.Scanner; import java.util.UUID; -import androidx.annotation.NonNull; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.util.CheckSums; import nodomain.freeyourgadget.gadgetbridge.util.FileUtils; import nodomain.freeyourgadget.gadgetbridge.util.GB; import nodomain.freeyourgadget.gadgetbridge.util.PebbleUtils; +import nodomain.freeyourgadget.gadgetbridge.webview.CurrentPosition; public class JSInterface { @@ -54,13 +57,12 @@ public class JSInterface { private static final Logger LOG = LoggerFactory.getLogger(JSInterface.class); public JSInterface(@NonNull GBDevice device, @NonNull UUID mUuid) { - LOG.debug("Creating JS interface for UUID: " + mUuid.toString()); + LOG.debug("Creating JS interface for UUID: {}", mUuid); this.device = device; this.mUuid = mUuid; this.lastTransaction = 0; } - private boolean isLocationEnabledForWatchApp() { return true; //FIXME: as long as we don't give watchapp internet access it's not a problem } @@ -73,10 +75,10 @@ public class JSInterface { @JavascriptInterface public String sendAppMessage(String msg, String needsTransactionMsg) { boolean needsTransaction = "true".equals(needsTransactionMsg); - LOG.debug("from WEBVIEW: " + msg + " needs a transaction: " + needsTransaction); + LOG.debug("from WEBVIEW: {} needs a transaction: {}", msg, needsTransaction); JSONObject knownKeys = PebbleUtils.getAppConfigurationKeys(this.mUuid); if (knownKeys == null) { - LOG.warn("No app configuration keys for: " + mUuid); + LOG.warn("No app configuration keys for: {}", mUuid); return null; } @@ -110,7 +112,7 @@ public class JSInterface { } } - LOG.info("WEBVIEW message to pebble: " + out.toString()); + LOG.info("WEBVIEW message to pebble: {}", out); if (needsTransaction) { this.lastTransaction++; GBApplication.deviceService().onAppConfiguration(this.mUuid, out.toString(), this.lastTransaction); @@ -135,7 +137,7 @@ public class JSInterface { //TODO: use real info wi.put("language", "en"); } catch (JSONException e) { - LOG.warn("Error building the ActiveWathcInfo JSON object", e); + LOG.warn("Error building the ActiveWatchInfo JSON object", e); } //Json not supported apparently, we need to cast back and forth return wi.toString(); @@ -143,7 +145,7 @@ public class JSInterface { @JavascriptInterface public String getAppConfigurationFile() { - LOG.debug("WEBVIEW loading config file of " + this.mUuid.toString()); + LOG.debug("WEBVIEW loading config file of {}", this.mUuid.toString()); try { File destDir = PebbleUtils.getPbwCacheDir(); File configurationFile = new File(destDir, this.mUuid.toString() + "_config.js"); @@ -226,7 +228,6 @@ public class JSInterface { return "gb" + this.mUuid.toString(); } - @JavascriptInterface public String getCurrentPosition() { if (!isLocationEnabledForWatchApp()) { @@ -236,28 +237,27 @@ public class JSInterface { JSONObject geoPosition = new JSONObject(); JSONObject coords = new JSONObject(); try { + final Location location = new CurrentPosition().getLastKnownLocation(); - CurrentPosition currentPosition = new CurrentPosition(); + geoPosition.put("timestamp", location.getTime()); - geoPosition.put("timestamp", currentPosition.timestamp); - - coords.put("latitude", currentPosition.getLatitude()); - coords.put("longitude", currentPosition.getLongitude()); - coords.put("accuracy", currentPosition.accuracy); - coords.put("altitude", currentPosition.altitude); - coords.put("speed", currentPosition.speed); + coords.put("latitude", location.getLatitude()); + coords.put("longitude", location.getLongitude()); + coords.put("accuracy", location.getAccuracy()); + coords.put("altitude", location.getAltitude()); + coords.put("speed", location.getSpeed()); geoPosition.put("coords", coords); } catch (JSONException e) { LOG.warn(e.getMessage()); } - LOG.info("WEBVIEW - geo position" + geoPosition.toString()); + LOG.info("WEBVIEW - geo position {}", geoPosition); return geoPosition.toString(); } @JavascriptInterface public void eventFinished(String event) { - LOG.debug("WEBVIEW event finished: " + event); + LOG.debug("WEBVIEW event finished: {}", event); } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/adapter/fossil_hr/FossilHRWatchAdapter.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/adapter/fossil_hr/FossilHRWatchAdapter.java index 016988cd46..ff0f1b6e3e 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/adapter/fossil_hr/FossilHRWatchAdapter.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/qhybrid/adapter/fossil_hr/FossilHRWatchAdapter.java @@ -129,7 +129,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.NavigationInfoSpec; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather; import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec; -import nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.webview.CurrentPosition; +import nodomain.freeyourgadget.gadgetbridge.webview.CurrentPosition; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.QHybridSupport; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.adapter.fossil.FossilWatchAdapter; import nodomain.freeyourgadget.gadgetbridge.service.devices.qhybrid.file.FileHandle; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/WebViewSingleton.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/WebViewSingleton.java index 0831b5079c..d12eb1c82c 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/WebViewSingleton.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/WebViewSingleton.java @@ -33,8 +33,8 @@ import org.slf4j.LoggerFactory; import java.util.UUID; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; -import nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.webview.GBChromeClient; -import nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.webview.GBWebClient; +import nodomain.freeyourgadget.gadgetbridge.webview.GBChromeClient; +import nodomain.freeyourgadget.gadgetbridge.webview.GBWebClient; import nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.webview.JSInterface; public class WebViewSingleton { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/webview/CurrentPosition.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/webview/CurrentPosition.java similarity index 97% rename from app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/webview/CurrentPosition.java rename to app/src/main/java/nodomain/freeyourgadget/gadgetbridge/webview/CurrentPosition.java index 2db5f39120..22b0ee373e 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/webview/CurrentPosition.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/webview/CurrentPosition.java @@ -14,7 +14,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.webview; +package nodomain.freeyourgadget.gadgetbridge.webview; import android.Manifest; import android.content.Context; @@ -23,10 +23,11 @@ import android.location.Criteria; import android.location.Location; import android.location.LocationManager; +import androidx.core.app.ActivityCompat; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import androidx.core.app.ActivityCompat; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.util.Prefs; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/webview/GBChromeClient.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/webview/GBChromeClient.java similarity index 95% rename from app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/webview/GBChromeClient.java rename to app/src/main/java/nodomain/freeyourgadget/gadgetbridge/webview/GBChromeClient.java index c7406b1996..9ccd3958dd 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/webview/GBChromeClient.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/webview/GBChromeClient.java @@ -14,7 +14,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.webview; +package nodomain.freeyourgadget.gadgetbridge.webview; import android.webkit.ConsoleMessage; import android.webkit.WebChromeClient; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/webview/GBWebClient.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/webview/GBWebClient.java similarity index 99% rename from app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/webview/GBWebClient.java rename to app/src/main/java/nodomain/freeyourgadget/gadgetbridge/webview/GBWebClient.java index 57a32fb03c..554759624c 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/webview/GBWebClient.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/webview/GBWebClient.java @@ -15,7 +15,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.webview; +package nodomain.freeyourgadget.gadgetbridge.webview; import android.content.Intent; import android.content.SharedPreferences;