diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java index 4e07072c77..11622c575a 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java @@ -20,8 +20,23 @@ along with this program. If not, see . */ package nodomain.freeyourgadget.gadgetbridge; +import static nodomain.freeyourgadget.gadgetbridge.model.DeviceType.AMAZFITBIP; +import static nodomain.freeyourgadget.gadgetbridge.model.DeviceType.AMAZFITCOR; +import static nodomain.freeyourgadget.gadgetbridge.model.DeviceType.AMAZFITCOR2; +import static nodomain.freeyourgadget.gadgetbridge.model.DeviceType.FITPRO; +import static nodomain.freeyourgadget.gadgetbridge.model.DeviceType.GALAXY_BUDS; +import static nodomain.freeyourgadget.gadgetbridge.model.DeviceType.LEFUN; +import static nodomain.freeyourgadget.gadgetbridge.model.DeviceType.MIBAND; +import static nodomain.freeyourgadget.gadgetbridge.model.DeviceType.MIBAND2; +import static nodomain.freeyourgadget.gadgetbridge.model.DeviceType.MIBAND2_HRX; +import static nodomain.freeyourgadget.gadgetbridge.model.DeviceType.MIBAND3; +import static nodomain.freeyourgadget.gadgetbridge.model.DeviceType.PEBBLE; +import static nodomain.freeyourgadget.gadgetbridge.model.DeviceType.TLW64; +import static nodomain.freeyourgadget.gadgetbridge.model.DeviceType.WATCHXPLUS; +import static nodomain.freeyourgadget.gadgetbridge.util.GB.NOTIFICATION_CHANNEL_HIGH_PRIORITY_ID; +import static nodomain.freeyourgadget.gadgetbridge.util.GB.NOTIFICATION_ID_ERROR; + import android.Manifest; -import android.annotation.TargetApi; import android.app.Activity; import android.app.AlarmManager; import android.app.Application; @@ -59,6 +74,10 @@ import androidx.core.app.NotificationCompat; import androidx.core.content.ContextCompat; import androidx.localbroadcastmanager.content.LocalBroadcastManager; +import org.apache.commons.lang3.StringUtils; +import org.json.JSONObject; +import org.slf4j.LoggerFactory; + import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -101,32 +120,13 @@ import nodomain.freeyourgadget.gadgetbridge.util.BondingUtil; import nodomain.freeyourgadget.gadgetbridge.util.FileUtils; import nodomain.freeyourgadget.gadgetbridge.util.GB; import nodomain.freeyourgadget.gadgetbridge.util.GBPrefs; +import nodomain.freeyourgadget.gadgetbridge.util.InternetHelperSingleton; import nodomain.freeyourgadget.gadgetbridge.util.LimitedQueue; import nodomain.freeyourgadget.gadgetbridge.util.PermissionsUtils; import nodomain.freeyourgadget.gadgetbridge.util.Prefs; import nodomain.freeyourgadget.gadgetbridge.util.backup.PeriodicZipExporter; import nodomain.freeyourgadget.gadgetbridge.util.preferences.DevicePrefs; -import static nodomain.freeyourgadget.gadgetbridge.model.DeviceType.AMAZFITBIP; -import static nodomain.freeyourgadget.gadgetbridge.model.DeviceType.AMAZFITCOR; -import static nodomain.freeyourgadget.gadgetbridge.model.DeviceType.AMAZFITCOR2; -import static nodomain.freeyourgadget.gadgetbridge.model.DeviceType.FITPRO; -import static nodomain.freeyourgadget.gadgetbridge.model.DeviceType.GALAXY_BUDS; -import static nodomain.freeyourgadget.gadgetbridge.model.DeviceType.LEFUN; -import static nodomain.freeyourgadget.gadgetbridge.model.DeviceType.MIBAND; -import static nodomain.freeyourgadget.gadgetbridge.model.DeviceType.MIBAND2; -import static nodomain.freeyourgadget.gadgetbridge.model.DeviceType.MIBAND2_HRX; -import static nodomain.freeyourgadget.gadgetbridge.model.DeviceType.MIBAND3; -import static nodomain.freeyourgadget.gadgetbridge.model.DeviceType.PEBBLE; -import static nodomain.freeyourgadget.gadgetbridge.model.DeviceType.TLW64; -import static nodomain.freeyourgadget.gadgetbridge.model.DeviceType.WATCHXPLUS; -import static nodomain.freeyourgadget.gadgetbridge.util.GB.NOTIFICATION_CHANNEL_HIGH_PRIORITY_ID; -import static nodomain.freeyourgadget.gadgetbridge.util.GB.NOTIFICATION_ID_ERROR; - -import org.apache.commons.lang3.StringUtils; -import org.json.JSONObject; -import org.slf4j.LoggerFactory; - /** * Main Application class that initializes and provides access to certain things like * logging and DB access. @@ -2279,6 +2279,10 @@ public class GBApplication extends Application { return BuildConfig.INTERNET_ACCESS && PermissionsUtils.checkPermission(getContext(), Manifest.permission.INTERNET); } + public static boolean hasInternetAccess() { + return hasDirectInternetAccess() || InternetHelperSingleton.INSTANCE.ensureInternetHelperBound(); + } + public static GBPrefs getPrefs() { return prefs; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/appmanager/AbstractAppManagerFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/appmanager/AbstractAppManagerFragment.java index 0b66186831..9fb1efd4f1 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/appmanager/AbstractAppManagerFragment.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/appmanager/AbstractAppManagerFragment.java @@ -450,10 +450,8 @@ public abstract class AbstractAppManagerFragment extends Fragment { if (watchfaceDesignerActivity != null) { appListFabNew.show(); } - if (appStoreActivity != null && mGBDevice.getDeviceCoordinator() instanceof PebbleCoordinator) { - if (InternetHelperSingleton.INSTANCE.ensureInternetHelperBound()) { - appListFabStore.show(); - } + if (appStoreActivity != null && GBApplication.hasInternetAccess()) { + appListFabStore.show(); } } } @@ -481,14 +479,19 @@ public abstract class AbstractAppManagerFragment extends Fragment { appListFabNew.show(); } - boolean appStoreAllowed = GBApplication.getPrefs().getBoolean("pref_key_internethelper_allow_pebble_appstore", false); - if (appStoreAllowed && appStoreActivity != null && mGBDevice.getDeviceCoordinator() instanceof PebbleCoordinator) { - if (InternetHelperSingleton.INSTANCE.ensureInternetHelperBound()) { - appListFabStore.setOnClickListener(v -> { - Intent startIntent = new Intent(getContext(), appStoreActivity); - startIntent.putExtra(GBDevice.EXTRA_DEVICE, mGBDevice); - getContext().startActivity(startIntent); - }); + if (appStoreActivity != null) { + appListFabStore.setOnClickListener(v -> { + Intent startIntent = new Intent(getContext(), appStoreActivity); + startIntent.putExtra(GBDevice.EXTRA_DEVICE, mGBDevice); + getContext().startActivity(startIntent); + }); + if (mGBDevice.getDeviceCoordinator() instanceof PebbleCoordinator) { + boolean pebbleAppStoreAllowed = GBApplication.getPrefs().getBoolean("pref_key_internethelper_allow_pebble_appstore", false); + if (GBApplication.hasDirectInternetAccess() || (pebbleAppStoreAllowed && InternetHelperSingleton.INSTANCE.ensureInternetHelperBound())) { + appListFabStore.show(); + } + } else { + // If other devices use a webview for their app store too, add the same logic here as for Pebble above appListFabStore.show(); } } @@ -659,7 +662,7 @@ public abstract class AbstractAppManagerFragment extends Fragment { } else if (itemId == R.id.appmanager_app_openinstore) { boolean appStoreAllowed = GBApplication.getPrefs().getBoolean("pref_key_internethelper_allow_pebble_appstore", false); final String url = "https://apps.rebble.io/en_US/search/" + ((selectedApp.getType() == GBDeviceApp.Type.WATCHFACE) ? "watchfaces" : "watchapps") + "/1/?native=true&query=" + Uri.encode(selectedApp.getUUID().toString()); - if (appStoreAllowed && InternetHelperSingleton.INSTANCE.ensureInternetHelperBound()) { + if (appStoreAllowed && GBApplication.hasInternetAccess()) { final Intent startIntent = new Intent(getContext().getApplicationContext(), RebbleAppStoreActivity.class); startIntent.putExtra(DeviceService.EXTRA_URI, url); startIntent.putExtra(GBDevice.EXTRA_DEVICE, mGBDevice); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/banglejs/BangleJSCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/banglejs/BangleJSCoordinator.java index c2074fb6a7..eda2f1000d 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/banglejs/BangleJSCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/banglejs/BangleJSCoordinator.java @@ -169,7 +169,7 @@ public class BangleJSCoordinator extends AbstractBLEDeviceCoordinator { @Override public boolean supportsAppsManagement(final GBDevice device) { - return GBApplication.hasDirectInternetAccess() || InternetHelperSingleton.INSTANCE.isInternetHelperBound(); + return GBApplication.hasInternetAccess(); } @Override @@ -233,7 +233,7 @@ public class BangleJSCoordinator extends AbstractBLEDeviceCoordinator { settings.add(R.xml.devicesettings_header_connection); settings.add(R.xml.devicesettings_high_mtu); - if (GBApplication.hasDirectInternetAccess() || InternetHelperSingleton.INSTANCE.isInternetHelperBound()) + if (GBApplication.hasInternetAccess()) settings.add(R.xml.devicesettings_device_internet_access); settings.add(R.xml.devicesettings_banglejs_activity); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/banglejs/BangleJSDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/banglejs/BangleJSDeviceSupport.java index 40f1e9d38b..509f9c9809 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/banglejs/BangleJSDeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/banglejs/BangleJSDeviceSupport.java @@ -918,8 +918,8 @@ public class BangleJSDeviceSupport extends AbstractBTLESingleDeviceSupport { } final String id = _id; - if (!GBApplication.hasDirectInternetAccess() && !InternetHelperSingleton.INSTANCE.ensureInternetHelperBound()) { - uartTxJSONError("http", "Internet access not enabled, check Gadgetbridge Device Settings", id); + if (!GBApplication.hasInternetAccess()) { + uartTxJSONError("http", "Internet access not enabled in Gadgetbridge", id); return; }