From 70acf47a2e40789ed03c57e7b3bd84ccb5e6b4c6 Mon Sep 17 00:00:00 2001 From: Arjan Schrijver Date: Tue, 14 Nov 2023 12:59:29 +0100 Subject: [PATCH] Make GMaps navigation handler follow the "navigation forwarding" setting --- .../externalevents/NotificationListener.java | 4 +-- .../GoogleMapsNotificationHandler.java | 29 +++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/NotificationListener.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/NotificationListener.java index 4b8fb7c5e..db1c3cdc8 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/NotificationListener.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/NotificationListener.java @@ -731,8 +731,6 @@ public class NotificationListener extends NotificationListenerService { notificationStack.remove(sbn.getPackageName()); - googleMapsNotificationHandler.handleRemove(sbn); - if (isServiceNotRunningAndShouldIgnoreNotifications()) return; final Prefs prefs = GBApplication.getPrefs(); @@ -750,6 +748,8 @@ public class NotificationListener extends NotificationListenerService { if (shouldIgnoreSource(sbn)) return; + googleMapsNotificationHandler.handleRemove(sbn); + // If media notifications do NOT ignore app list, check them after if (!mediaIgnoresAppList && handleMediaSessionNotification(sbn)) return; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/notifications/GoogleMapsNotificationHandler.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/notifications/GoogleMapsNotificationHandler.java index 7e0e2f3c4..0417c53cb 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/notifications/GoogleMapsNotificationHandler.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/notifications/GoogleMapsNotificationHandler.java @@ -6,6 +6,7 @@ import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.graphics.drawable.Icon; +import android.os.PowerManager; import android.service.notification.StatusBarNotification; import androidx.core.app.NotificationCompat; @@ -18,11 +19,14 @@ import java.util.List; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.model.NavigationInfoSpec; +import nodomain.freeyourgadget.gadgetbridge.util.Prefs; public class GoogleMapsNotificationHandler { private static final Logger LOG = LoggerFactory.getLogger(GoogleMapsNotificationHandler.class); + private boolean shouldSendNavigation = false; + static class IconType { int[] icon; int iconType; @@ -891,6 +895,8 @@ public class GoogleMapsNotificationHandler { public boolean handle(Context context, StatusBarNotification sbn) { if (sbn.getPackageName().equals("com.google.android.apps.maps")) { + checkShouldSendNavigation(context); + if (!shouldSendNavigation) return false; Notification notification = sbn.getNotification(); if (!NotificationCompat.getLocalOnly(notification)) return false; // ignore non-local notifications @@ -971,6 +977,7 @@ public class GoogleMapsNotificationHandler { public boolean handleRemove(StatusBarNotification sbn) { if (sbn.getPackageName().equals("com.google.android.apps.maps")) { + if (!shouldSendNavigation) return false; Notification notification = sbn.getNotification(); if (!NotificationCompat.getLocalOnly(notification)) return false; // ignore non-local notifications @@ -980,4 +987,26 @@ public class GoogleMapsNotificationHandler { } return false; } + + private void checkShouldSendNavigation(Context context) { + Prefs prefs = GBApplication.getPrefs(); + + boolean navigationForward = prefs.getBoolean("navigation_forward", true); + if (!navigationForward) { + shouldSendNavigation = false; + return; + } + + boolean navigationScreenOn = prefs.getBoolean("nagivation_screen_on", true); + if (!navigationScreenOn) { + PowerManager powermanager = (PowerManager) context.getSystemService(Context.POWER_SERVICE); + if (powermanager != null && powermanager.isScreenOn()) { + LOG.info("Not forwarding navigation instructions, screen seems to be on and settings do not allow this"); + shouldSendNavigation = false; + return; + } + } + + shouldSendNavigation = true; + } }