Improve internet access checking logic

This commit is contained in:
Arjan Schrijver
2025-12-25 14:45:08 +01:00
committed by Arjan Schrijver
parent 77f0dbbad8
commit 20652f2b05
4 changed files with 45 additions and 38 deletions
@@ -20,8 +20,23 @@
along with this program. If not, see <https://www.gnu.org/licenses/>. */
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;
}
@@ -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);
@@ -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);
@@ -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;
}