From 595406bb7e40baf06e4ca3c8863c1578b31df4ff Mon Sep 17 00:00:00 2001 From: estevez-dev Date: Wed, 8 Jul 2020 18:30:31 +0300 Subject: [PATCH] Resolves #577 request_location_update notification support --- .../hassclient/LocationUtils.java | 23 ++++++++++++++----- .../hassclient/MessagingService.java | 16 ++++++++----- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/android/app/src/main/java/com/keyboardcrumbs/hassclient/LocationUtils.java b/android/app/src/main/java/com/keyboardcrumbs/hassclient/LocationUtils.java index 99f7c0a..f3cb0df 100644 --- a/android/app/src/main/java/com/keyboardcrumbs/hassclient/LocationUtils.java +++ b/android/app/src/main/java/com/keyboardcrumbs/hassclient/LocationUtils.java @@ -9,6 +9,8 @@ import android.os.Build; import androidx.core.app.NotificationCompat; import androidx.work.ExistingPeriodicWorkPolicy; +import androidx.work.ExistingWorkPolicy; +import androidx.work.OneTimeWorkRequest; import androidx.work.PeriodicWorkRequest; import androidx.work.WorkManager; @@ -28,7 +30,10 @@ class LocationUtils { static final String SERVICE_NOTIFICATION_CHANNEL_ID = "location_service"; static final int SERVICE_NOTIFICATION_ID = 954311; + static final String REQUEST_LOCATION_NOTIFICATION = "request_location_update"; + static final String LOCATION_WORK_NAME = "HALocationWorker"; + static final String LOCATION_REQUEST_NAME = "HALocationRequest"; static final int LOCATION_UPDATES_DISABLED = 0; static final int LOCATION_UPDATES_SERVICE = 1; @@ -83,6 +88,18 @@ class LocationUtils { } } + static void startWorker(Context context, long interval) { + PeriodicWorkRequest periodicWork = new PeriodicWorkRequest.Builder(LocationUpdatesWorker.class, interval, TimeUnit.MILLISECONDS) + .build(); + WorkManager.getInstance(context).enqueueUniquePeriodicWork(LocationUtils.LOCATION_WORK_NAME, ExistingPeriodicWorkPolicy.REPLACE, periodicWork); + } + + static void requestLocationOnce(Context context) { + OneTimeWorkRequest oneTimeWork = new OneTimeWorkRequest.Builder(LocationUpdatesWorker.class) + .build(); + WorkManager.getInstance(context).enqueueUniqueWork(LocationUtils.LOCATION_REQUEST_NAME, ExistingWorkPolicy.REPLACE, oneTimeWork); + } + static Notification getNotification(Context context, Location location, String channelId) { CharSequence title = "Location tracking"; CharSequence text = location == null ? "Accuracy: unknown" : "Accuracy: " + location.getAccuracy() + " m"; @@ -106,10 +123,4 @@ class LocationUtils { return builder.build(); } - - static void startWorker(Context context, long interval) { - PeriodicWorkRequest periodicWork = new PeriodicWorkRequest.Builder(LocationUpdatesWorker.class, interval, TimeUnit.MILLISECONDS) - .build(); - WorkManager.getInstance(context).enqueueUniquePeriodicWork(LocationUtils.LOCATION_WORK_NAME, ExistingPeriodicWorkPolicy.REPLACE, periodicWork); - } } diff --git a/android/app/src/main/java/com/keyboardcrumbs/hassclient/MessagingService.java b/android/app/src/main/java/com/keyboardcrumbs/hassclient/MessagingService.java index 943d8fa..ddfd233 100644 --- a/android/app/src/main/java/com/keyboardcrumbs/hassclient/MessagingService.java +++ b/android/app/src/main/java/com/keyboardcrumbs/hassclient/MessagingService.java @@ -47,6 +47,15 @@ public class MessagingService extends FirebaseMessagingService { private void sendNotification(Map data) { String channelId, messageBody, messageTitle, imageUrl, nTag, channelDescription; boolean autoCancel; + if (!data.containsKey("body")) { + messageBody = ""; + } else { + messageBody = data.get("body"); + } + if (messageBody != null && messageBody.equals(LocationUtils.REQUEST_LOCATION_NOTIFICATION)) { + LocationUtils.requestLocationOnce(this); + return; + } String customChannelId = data.get("channelId"); if (customChannelId == null) { channelId = "ha_notify"; @@ -55,11 +64,6 @@ public class MessagingService extends FirebaseMessagingService { channelId = customChannelId; channelDescription = channelId; } - if (!data.containsKey("body")) { - messageBody = ""; - } else { - messageBody = data.get("body"); - } if (!data.containsKey("title")) { messageTitle = "HA Client"; } else { @@ -106,7 +110,7 @@ public class MessagingService extends FirebaseMessagingService { .setAutoCancel(autoCancel) .setSound(defaultSoundUri) .setContentIntent(pendingIntent); - Bitmap image; + Bitmap image = null; if (URLUtil.isValidUrl(imageUrl)) { image = getBitmapFromURL(imageUrl); }