mirror of
https://github.com/KDE/kdeconnect-android
synced 2025-08-30 21:55:10 +00:00
notifications: try to decode payload into largeIcon
Newer API levels scale large icons in notifications automatically, olders don't. Therefore we downscale manually if necessary to avoid too big icons. REVIEW: 126667
This commit is contained in:
@@ -29,6 +29,8 @@ import android.app.PendingIntent;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.graphics.Bitmap;
|
||||||
|
import android.graphics.BitmapFactory;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
@@ -44,6 +46,8 @@ import org.kde.kdeconnect.Plugins.Plugin;
|
|||||||
import org.kde.kdeconnect.UserInterface.SettingsActivity;
|
import org.kde.kdeconnect.UserInterface.SettingsActivity;
|
||||||
import org.kde.kdeconnect_tp.R;
|
import org.kde.kdeconnect_tp.R;
|
||||||
|
|
||||||
|
import java.io.InputStream;
|
||||||
|
|
||||||
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
|
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
|
||||||
public class NotificationsPlugin extends Plugin implements NotificationReceiver.NotificationListener {
|
public class NotificationsPlugin extends Plugin implements NotificationReceiver.NotificationListener {
|
||||||
/*
|
/*
|
||||||
@@ -322,18 +326,37 @@ public class NotificationsPlugin extends Plugin implements NotificationReceiver.
|
|||||||
PendingIntent.FLAG_UPDATE_CURRENT
|
PendingIntent.FLAG_UPDATE_CURRENT
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Bitmap largeIcon = null;
|
||||||
|
if (np.hasPayload()) {
|
||||||
|
int width = 64; // default icon dimensions
|
||||||
|
int height = 64;
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
|
||||||
|
width = context.getResources().getDimensionPixelSize(android.R.dimen.notification_large_icon_width);
|
||||||
|
height = context.getResources().getDimensionPixelSize(android.R.dimen.notification_large_icon_height);
|
||||||
|
}
|
||||||
|
final InputStream input = np.getPayload();
|
||||||
|
largeIcon = BitmapFactory.decodeStream(np.getPayload());
|
||||||
|
try { input.close(); } catch (Exception e) { }
|
||||||
|
if (largeIcon != null) {
|
||||||
|
//Log.i("NotificationsPlugin", "hasPayload: size=" + largeIcon.getWidth() + "/" + largeIcon.getHeight() + " opti=" + width + "/" + height);
|
||||||
|
if (largeIcon.getWidth() > width || largeIcon.getHeight() > height) {
|
||||||
|
// older API levels don't scale notification icons automatically, therefore:
|
||||||
|
largeIcon = Bitmap.createScaledBitmap(largeIcon, width, height, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Notification noti = new NotificationCompat.Builder(context)
|
Notification noti = new NotificationCompat.Builder(context)
|
||||||
.setContentTitle(np.getString("appName"))
|
.setContentTitle(np.getString("appName"))
|
||||||
.setContentText(np.getString("ticker"))
|
.setContentText(np.getString("ticker"))
|
||||||
.setContentIntent(resultPendingIntent)
|
.setContentIntent(resultPendingIntent)
|
||||||
.setTicker(np.getString("ticker"))
|
.setTicker(np.getString("ticker"))
|
||||||
.setSmallIcon(android.R.drawable.ic_dialog_alert)
|
.setSmallIcon(android.R.drawable.ic_dialog_alert)
|
||||||
|
.setLargeIcon(largeIcon)
|
||||||
.setAutoCancel(true)
|
.setAutoCancel(true)
|
||||||
.setLocalOnly(true) // to avoid bouncing the notification back to other kdeconnect nodes
|
.setLocalOnly(true) // to avoid bouncing the notification back to other kdeconnect nodes
|
||||||
.setDefaults(Notification.DEFAULT_ALL)
|
.setDefaults(Notification.DEFAULT_ALL)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
|
||||||
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
|
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||||
try {
|
try {
|
||||||
// tag all incoming notifications
|
// tag all incoming notifications
|
||||||
|
Reference in New Issue
Block a user