diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java
index 451a7c435..4d3c7ec49 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java
@@ -90,7 +90,7 @@ import static nodomain.freeyourgadget.gadgetbridge.model.DeviceType.MIBAND4;
import static nodomain.freeyourgadget.gadgetbridge.model.DeviceType.ZETIME;
import static nodomain.freeyourgadget.gadgetbridge.model.DeviceType.fromKey;
import static nodomain.freeyourgadget.gadgetbridge.util.GB.NOTIFICATION_CHANNEL_ID;
-
+import static nodomain.freeyourgadget.gadgetbridge.util.GB.NOTIFICATION_CHANNEL_HIGH_PRIORITY_ID;
/**
* Main Application class that initializes and provides access to certain things like
* logging and DB access.
@@ -211,6 +211,14 @@ public class GBApplication extends Application {
notificationManager.createNotificationChannel(channel);
}
+ NotificationChannel channelHighPr = notificationManager.getNotificationChannel(NOTIFICATION_CHANNEL_HIGH_PRIORITY_ID );
+ if (channelHighPr == null) {
+ channelHighPr = new NotificationChannel(NOTIFICATION_CHANNEL_HIGH_PRIORITY_ID,
+ getString(R.string.notification_channel_high_priority_name),
+ NotificationManager.IMPORTANCE_HIGH);
+ notificationManager.createNotificationChannel(channelHighPr);
+ }
+
bluetoothStateChangeReceiver = new BluetoothStateChangeReceiver();
registerReceiver(bluetoothStateChangeReceiver, new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED));
}
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/FindPhoneActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/FindPhoneActivity.java
index 5b76a620e..cec7e72fe 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/FindPhoneActivity.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/FindPhoneActivity.java
@@ -17,6 +17,7 @@
along with this program. If not, see . */
package nodomain.freeyourgadget.gadgetbridge.activities;
+import android.app.NotificationManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -39,6 +40,7 @@ import java.io.IOException;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import nodomain.freeyourgadget.gadgetbridge.R;
+import nodomain.freeyourgadget.gadgetbridge.util.GB;
public class FindPhoneActivity extends AbstractGBActivity {
@@ -84,6 +86,9 @@ public class FindPhoneActivity extends AbstractGBActivity {
}
});
+ NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
+ notificationManager.cancel( GB.NOTIFICATION_ID_PHONE_FIND );
+
vibrate();
playRingtone();
}
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/AbstractDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/AbstractDeviceSupport.java
index 0f91fe373..c3701fb5a 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/AbstractDeviceSupport.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/AbstractDeviceSupport.java
@@ -26,6 +26,7 @@ import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
+import android.os.Build;
import android.telephony.SmsManager;
import org.slf4j.Logger;
@@ -67,6 +68,7 @@ import nodomain.freeyourgadget.gadgetbridge.service.receivers.GBMusicControlRece
import nodomain.freeyourgadget.gadgetbridge.util.GB;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
+import static nodomain.freeyourgadget.gadgetbridge.util.GB.NOTIFICATION_CHANNEL_HIGH_PRIORITY_ID;
import static nodomain.freeyourgadget.gadgetbridge.util.GB.NOTIFICATION_CHANNEL_ID;
// TODO: support option for a single reminder notification when notifications could not be delivered?
@@ -86,6 +88,8 @@ public abstract class AbstractDeviceSupport implements DeviceSupport {
private Context context;
private boolean autoReconnect;
+
+
@Override
public void setContext(GBDevice gbDevice, BluetoothAdapter btAdapter, Context context) {
this.gbDevice = gbDevice;
@@ -170,9 +174,7 @@ public abstract class AbstractDeviceSupport implements DeviceSupport {
LOG.info("Got GBDeviceEventFindPhone");
switch (deviceEvent.event) {
case START:
- Intent startIntent = new Intent(getContext(), FindPhoneActivity.class);
- startIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- context.startActivity(startIntent);
+ handleGBDeviceEventFindPhoneStart();
break;
case STOP:
Intent intent = new Intent(FindPhoneActivity.ACTION_FOUND);
@@ -183,6 +185,38 @@ public abstract class AbstractDeviceSupport implements DeviceSupport {
}
}
+ private void handleGBDeviceEventFindPhoneStart() {
+ if ( Build.VERSION.SDK_INT < 29 ) { // this could be used if app in foreground
+ Intent startIntent = new Intent(getContext(), FindPhoneActivity.class);
+ startIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ context.startActivity(startIntent);
+ }
+ else {
+ handleGBDeviceEventFindPhoneStartNotification();
+ }
+ }
+
+ private void handleGBDeviceEventFindPhoneStartNotification() {
+ LOG.info("Got handleGBDeviceEventFindPhoneStartNotification");
+ Intent intent = new Intent(context, FindPhoneActivity.class);
+
+ PendingIntent pi = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
+ NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
+
+ NotificationCompat.Builder notification = new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_HIGH_PRIORITY_ID );
+ notification
+ .setSmallIcon(R.drawable.ic_notification)
+ .setOngoing(false)
+ .setFullScreenIntent(pi, true)
+ .setPriority(NotificationCompat.PRIORITY_HIGH)
+ .setAutoCancel(true)
+ .setContentTitle( context.getString( R.string.find_my_phone_notification ) );
+ notification.setGroup("BackgroundService");
+
+ notificationManager.notify( GB.NOTIFICATION_ID_PHONE_FIND, notification.build());
+ }
+
+
private void handleGBDeviceEvent(GBDeviceEventMusicControl musicEvent) {
Context context = getContext();
LOG.info("Got event for MUSIC_CONTROL");
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/GB.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/GB.java
index 9b69e6a3f..f77f07964 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/GB.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/GB.java
@@ -59,6 +59,7 @@ import static nodomain.freeyourgadget.gadgetbridge.GBApplication.isRunningOreoOr
public class GB {
public static final String NOTIFICATION_CHANNEL_ID = "gadgetbridge";
+ public static final String NOTIFICATION_CHANNEL_HIGH_PRIORITY_ID = "gadgetbridge_high_priority";
public static final String NOTIFICATION_CHANNEL_ID_TRANSFER = "gadgetbridge transfer";
public static final int NOTIFICATION_ID = 1;
@@ -66,6 +67,7 @@ public class GB {
public static final int NOTIFICATION_ID_LOW_BATTERY = 3;
public static final int NOTIFICATION_ID_TRANSFER = 4;
public static final int NOTIFICATION_ID_EXPORT_FAILED = 5;
+ public static final int NOTIFICATION_ID_PHONE_FIND = 6;
private static final Logger LOG = LoggerFactory.getLogger(GB.class);
public static final int INFO = 1;
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index f2028fb8b..4b9d64175 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -267,6 +267,7 @@
Test
Test notification
This is a test notification from Gadgetbridge
+ Find my phone
Bluetooth is not supported.
Bluetooth is disabled.
Tap connected device for App manager
@@ -700,6 +701,7 @@
Bangle.js
Choose export location
Gadgetbridge notifications
+ Gadgetbridge notifications high priority
Amazfit GTS
Alipay (Shortcut)