From b74105cf95170781ad8c24ab0599a78e9ce0d415 Mon Sep 17 00:00:00 2001 From: Arjan Schrijver Date: Tue, 9 Sep 2025 16:12:34 +0200 Subject: [PATCH] Request permission to use internethelper --- .../capabilities/loyaltycards/CatimaManager.java | 11 ++--------- .../externalevents/OsmandEventReceiver.java | 11 ++--------- .../gadgetbridge/util/AndroidUtils.java | 9 +++++++++ .../gadgetbridge/util/PermissionsUtils.java | 9 +++++++++ .../gadgetbridge/util/WebViewSingleton.java | 3 +++ 5 files changed, 25 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/capabilities/loyaltycards/CatimaManager.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/capabilities/loyaltycards/CatimaManager.java index 88715f4d3e..d7f0d5c301 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/capabilities/loyaltycards/CatimaManager.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/capabilities/loyaltycards/CatimaManager.java @@ -39,6 +39,7 @@ import java.util.Set; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; +import nodomain.freeyourgadget.gadgetbridge.util.AndroidUtils; import nodomain.freeyourgadget.gadgetbridge.util.GB; import nodomain.freeyourgadget.gadgetbridge.util.Prefs; @@ -111,18 +112,10 @@ public class CatimaManager { public List findInstalledCatimaPackages() { final List installedCatimaPackages = new ArrayList<>(); for (final String knownPackage : CatimaContentProvider.KNOWN_PACKAGES) { - if (isPackageInstalled(knownPackage)) { + if (AndroidUtils.isPackageInstalled(knownPackage)) { installedCatimaPackages.add(knownPackage); } } return installedCatimaPackages; } - - private boolean isPackageInstalled(final String packageName) { - try { - return context.getPackageManager().getApplicationInfo(packageName, 0).enabled; - } catch (final PackageManager.NameNotFoundException e) { - return false; - } - } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/OsmandEventReceiver.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/OsmandEventReceiver.java index c33a508d24..05c6fe5cde 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/OsmandEventReceiver.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/OsmandEventReceiver.java @@ -46,6 +46,7 @@ import java.util.List; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.model.NavigationInfoSpec; +import nodomain.freeyourgadget.gadgetbridge.util.AndroidUtils; import nodomain.freeyourgadget.gadgetbridge.util.Prefs; public class OsmandEventReceiver { @@ -220,18 +221,10 @@ public class OsmandEventReceiver { public List findInstalledOsmandPackages() { List installedPackages = new ArrayList<>(); for (String knownPackage : app.getBaseContext().getResources().getStringArray(R.array.osmand_package_names)) { - if (isPackageInstalled(knownPackage)) { + if (AndroidUtils.isPackageInstalled(knownPackage)) { installedPackages.add(knownPackage); } } return installedPackages; } - - private boolean isPackageInstalled(final String packageName) { - try { - return app.getBaseContext().getPackageManager().getApplicationInfo(packageName, 0).enabled; - } catch (PackageManager.NameNotFoundException e) { - return false; - } - } } \ No newline at end of file diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/AndroidUtils.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/AndroidUtils.java index 76d34d7747..e65df2b6f1 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/AndroidUtils.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/AndroidUtils.java @@ -24,6 +24,7 @@ import android.content.BroadcastReceiver; import android.content.ContentUris; import android.content.Context; import android.content.Intent; +import android.content.pm.PackageManager; import android.content.res.Configuration; import android.content.res.TypedArray; import android.database.Cursor; @@ -356,4 +357,12 @@ public class AndroidUtils { return null; } } + + public static boolean isPackageInstalled(final String packageName) { + try { + return GBApplication.getContext().getPackageManager().getApplicationInfo(packageName, 0).enabled; + } catch (PackageManager.NameNotFoundException e) { + return false; + } + } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/PermissionsUtils.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/PermissionsUtils.java index 8ade96664f..fcb2c97646 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/PermissionsUtils.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/PermissionsUtils.java @@ -60,6 +60,8 @@ public class PermissionsUtils { public static final String CUSTOM_PERM_NOTIFICATION_LISTENER = "custom_perm_notifications_listener"; public static final String CUSTOM_PERM_NOTIFICATION_SERVICE = "custom_perm_notifications_service"; public static final String CUSTOM_PERM_DISPLAY_OVER = "custom_perm_display_over"; + public static final String CUSTOM_PERM_INTERNET_HELPER = "nodomain.freeyourgadget.internethelper.INTERNET"; + public static final String PACKAGE_INTERNET_HELPER = "nodomain.freeyourgadget.internethelper"; public static final List specialPermissions = new ArrayList<>() {{ add(CUSTOM_PERM_IGNORE_BATT_OPTIM); @@ -142,6 +144,13 @@ public class PermissionsUtils { activity.getString(R.string.permission_internet_access_title), activity.getString(R.string.permission_internet_access_summary))); } + if (AndroidUtils.isPackageInstalled(PACKAGE_INTERNET_HELPER)) { + permissionsList.add(new PermissionDetails( + CUSTOM_PERM_INTERNET_HELPER, + "Internet helper", + "Permit access to the Gadgetbridge-internethelper add-on app" + )); + } // permissionsList.add(new PermissionDetails( // NOTE: can't request this, it's only allowed for system apps // Manifest.permission.MEDIA_CONTENT_CONTROL, // "Media content control", 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 fd1d4e74c1..880be7d97d 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/WebViewSingleton.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/WebViewSingleton.java @@ -208,6 +208,9 @@ public class WebViewSingleton { } catch (PackageManager.NameNotFoundException e) { internetHelperInstalled = false; LOG.info("WEBVIEW: Internet helper not installed, only mimicked HTTP requests will work."); + } catch (SecurityException e) { + internetHelperInstalled = false; + LOG.info("WEBVIEW: Permission for internet helper not granted, only mimicked HTTP requests will work."); } } }