From 242be31ecd10119e94cd29c250433d7491e467c1 Mon Sep 17 00:00:00 2001 From: Kieran Coldron Date: Thu, 9 Aug 2018 03:50:05 +0100 Subject: [PATCH 1/3] Persistent notifications and disable alerts on edits --- app/src/main/java/com/termux/api/NotificationAPI.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/src/main/java/com/termux/api/NotificationAPI.java b/app/src/main/java/com/termux/api/NotificationAPI.java index e77e3a622..433a7c928 100644 --- a/app/src/main/java/com/termux/api/NotificationAPI.java +++ b/app/src/main/java/com/termux/api/NotificationAPI.java @@ -10,6 +10,7 @@ import android.os.Build; import android.provider.Settings; import android.text.TextUtils; +import android.util.Log; import com.termux.api.util.ResultReturner; import com.termux.api.util.TermuxApiLogger; @@ -72,6 +73,8 @@ static void onReceiveShowNotification(TermuxApiReceiver apiReceiver, final Conte long[] vibratePattern = intent.getLongArrayExtra("vibrate"); boolean useSound = intent.getBooleanExtra("sound", false); + boolean ongoing = intent.getBooleanExtra("ongoing", false); + boolean alertOnce = intent.getBooleanExtra("alert-once", true); String actionExtra = intent.getStringExtra("action"); @@ -79,13 +82,19 @@ static void onReceiveShowNotification(TermuxApiReceiver apiReceiver, final Conte if (id == null) id = UUID.randomUUID().toString(); final String notificationId = id; + String groupKey = intent.getStringExtra("group"); + final Notification.Builder notification = new Notification.Builder(context); notification.setSmallIcon(R.drawable.ic_event_note_black_24dp); notification.setColor(0xFF000000); notification.setContentTitle(title); notification.setPriority(priority); + notification.setOngoing(ongoing); + notification.setOnlyAlertOnce(alertOnce); notification.setWhen(System.currentTimeMillis()); + if (groupKey != null) notification.setGroup(groupKey); + if (ledColor != 0) { notification.setLights(ledColor, ledOnMs, ledOffMs); From 95ce85f5b8704bc84288031b80aa1a5de1e9b467 Mon Sep 17 00:00:00 2001 From: Kieran Coldron Date: Thu, 9 Aug 2018 23:16:03 +0100 Subject: [PATCH 2/3] Add images, add media style, refactor PendingIntent code --- .../java/com/termux/api/NotificationAPI.java | 90 ++++++++++++------- 1 file changed, 59 insertions(+), 31 deletions(-) diff --git a/app/src/main/java/com/termux/api/NotificationAPI.java b/app/src/main/java/com/termux/api/NotificationAPI.java index 433a7c928..c1daeadff 100644 --- a/app/src/main/java/com/termux/api/NotificationAPI.java +++ b/app/src/main/java/com/termux/api/NotificationAPI.java @@ -6,15 +6,17 @@ import android.app.PendingIntent; import android.content.Context; import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Build; import android.provider.Settings; import android.text.TextUtils; -import android.util.Log; import com.termux.api.util.ResultReturner; import com.termux.api.util.TermuxApiLogger; +import java.io.File; import java.io.PrintWriter; import java.util.Arrays; import java.util.UUID; @@ -93,6 +95,46 @@ static void onReceiveShowNotification(TermuxApiReceiver apiReceiver, final Conte notification.setOnlyAlertOnce(alertOnce); notification.setWhen(System.currentTimeMillis()); + + + String ImagePath = intent.getStringExtra("image-path"); + + if(ImagePath != null){ + File imgFile = new File(ImagePath); + if(imgFile.exists()) { + Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath()); + + notification.setLargeIcon(myBitmap) + .setStyle(new Notification.BigPictureStyle() + .bigPicture(myBitmap)); + } + } + + String styleType = intent.getStringExtra("type"); + if(styleType.equals("media")) { + String mediaPrevious = intent.getStringExtra("media-previous"); + String mediaPause = intent.getStringExtra("media-pause"); + String mediaPlay = intent.getStringExtra("media-play"); + String mediaNext = intent.getStringExtra("media-next"); + + if (mediaPrevious != null && mediaPause != null && mediaPlay != null && mediaNext != null) { + notification.setSmallIcon(android.R.drawable.ic_media_play); + + PendingIntent previousIntent = createAction(context, mediaPrevious); + PendingIntent pauseIntent = createAction(context, mediaPause); + PendingIntent playIntent = createAction(context, mediaPlay); + PendingIntent nextIntent = createAction(context, mediaNext); + + notification.addAction(new Notification.Action(android.R.drawable.ic_media_previous, "previous", previousIntent)); + notification.addAction(new Notification.Action(android.R.drawable.ic_media_pause, "pause", pauseIntent)); + notification.addAction(new Notification.Action(android.R.drawable.ic_media_play, "play", playIntent)); + notification.addAction(new Notification.Action(android.R.drawable.ic_media_next, "next", nextIntent)); + + notification.setStyle(new Notification.MediaStyle() + .setShowActionsInCompactView(0, 1, 3)); + } + } + if (groupKey != null) notification.setGroup(groupKey); if (ledColor != 0) { @@ -116,16 +158,7 @@ static void onReceiveShowNotification(TermuxApiReceiver apiReceiver, final Conte notification.setAutoCancel(true); if (actionExtra != null) { - String[] arguments = new String[]{"-c", actionExtra}; - Uri executeUri = new Uri.Builder().scheme("com.termux.file") - .path(BIN_SH) - .appendQueryParameter("arguments", Arrays.toString(arguments)) - .build(); - Intent executeIntent = new Intent(ACTION_EXECUTE, executeUri); - executeIntent.setClassName("com.termux", TERMUX_SERVICE); - executeIntent.putExtra(EXTRA_EXECUTE_IN_BACKGROUND, true); - executeIntent.putExtra(EXTRA_ARGUMENTS, arguments); - PendingIntent pi = PendingIntent.getService(context, 0, executeIntent, 0); + PendingIntent pi = createAction(context, actionExtra); notification.setContentIntent(pi); } @@ -133,32 +166,14 @@ static void onReceiveShowNotification(TermuxApiReceiver apiReceiver, final Conte String buttonText = intent.getStringExtra("button_text_" + button); String buttonAction = intent.getStringExtra("button_action_" + button); if (buttonText != null && buttonAction != null) { - String[] arguments = new String[]{"-c", buttonAction}; - Uri executeUri = new Uri.Builder().scheme("com.termux.file") - .path(BIN_SH) - .appendQueryParameter("arguments", Arrays.toString(arguments)) - .build(); - Intent executeIntent = new Intent(ACTION_EXECUTE, executeUri); - executeIntent.setClassName("com.termux", TERMUX_SERVICE); - executeIntent.putExtra(EXTRA_EXECUTE_IN_BACKGROUND, true); - executeIntent.putExtra(EXTRA_ARGUMENTS, arguments); - PendingIntent pi = PendingIntent.getService(context, 0, executeIntent, 0); + PendingIntent pi = createAction(context, buttonAction); notification.addAction(new Notification.Action(android.R.drawable.ic_input_add, buttonText, pi)); } } String onDeleteActionExtra = intent.getStringExtra("on_delete_action"); if (onDeleteActionExtra != null) { - String[] arguments = new String[]{"-c", onDeleteActionExtra}; - Uri executeUri = new Uri.Builder().scheme("com.termux.file") - .path(BIN_SH) - .appendQueryParameter("arguments", Arrays.toString(arguments)) - .build(); - Intent executeIntent = new Intent(ACTION_EXECUTE, executeUri); - executeIntent.setClassName("com.termux", TERMUX_SERVICE); - executeIntent.putExtra(EXTRA_EXECUTE_IN_BACKGROUND, true); - executeIntent.putExtra(EXTRA_ARGUMENTS, arguments); - PendingIntent pi = PendingIntent.getService(context, 0, executeIntent, 0); + PendingIntent pi = createAction(context, onDeleteActionExtra); notification.setDeleteIntent(pi); } @@ -198,4 +213,17 @@ static void onReceiveRemoveNotification(TermuxApiReceiver apiReceiver, final Con } } + static PendingIntent createAction(final Context context, String action){ + String[] arguments = new String[]{"-c", action}; + Uri executeUri = new Uri.Builder().scheme("com.termux.file") + .path(BIN_SH) + .appendQueryParameter("arguments", Arrays.toString(arguments)) + .build(); + Intent executeIntent = new Intent(ACTION_EXECUTE, executeUri); + executeIntent.setClassName("com.termux", TERMUX_SERVICE); + executeIntent.putExtra(EXTRA_EXECUTE_IN_BACKGROUND, true); + executeIntent.putExtra(EXTRA_ARGUMENTS, arguments); + PendingIntent pi = PendingIntent.getService(context, 0, executeIntent, 0); + return pi; + } } From 14c38cee5dcb729171dad408fea0b4ccef702eb7 Mon Sep 17 00:00:00 2001 From: Kieran Coldron Date: Sat, 11 Aug 2018 03:48:31 +0100 Subject: [PATCH 3/3] Make styletype check null safe --- app/src/main/java/com/termux/api/NotificationAPI.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/termux/api/NotificationAPI.java b/app/src/main/java/com/termux/api/NotificationAPI.java index c1daeadff..935a97e27 100644 --- a/app/src/main/java/com/termux/api/NotificationAPI.java +++ b/app/src/main/java/com/termux/api/NotificationAPI.java @@ -19,6 +19,7 @@ import java.io.File; import java.io.PrintWriter; import java.util.Arrays; +import java.util.Objects; import java.util.UUID; public class NotificationAPI { @@ -111,7 +112,7 @@ static void onReceiveShowNotification(TermuxApiReceiver apiReceiver, final Conte } String styleType = intent.getStringExtra("type"); - if(styleType.equals("media")) { + if(Objects.equals(styleType, "media")) { String mediaPrevious = intent.getStringExtra("media-previous"); String mediaPause = intent.getStringExtra("media-pause"); String mediaPlay = intent.getStringExtra("media-play");