Skip to content
This repository was archived by the owner on Jan 14, 2025. It is now read-only.

Commit c12315c

Browse files
vanso-hubsihubsif
andauthored
implement 'bigLargeIcon' for Android notifications (#1730)
* implement 'bigLargeIcon' for Android notifications * fix (non-url) bigLargeIcon Co-authored-by: hubsif <hubsif@gmx.de>
1 parent b343f50 commit c12315c

File tree

3 files changed

+63
-7
lines changed

3 files changed

+63
-7
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,8 @@ PushNotification.localNotification({
313313
bigText: "My big text that will be shown when notification is expanded", // (optional) default: "message" prop
314314
subText: "This is a subText", // (optional) default: none
315315
bigPictureUrl: "https://www.example.tld/picture.jpg", // (optional) default: undefined
316+
bigLargeIcon: "ic_launcher", // (optional) default: undefined
317+
bigLargeIconUrl: "https://www.example.tld/bigicon.jpg", // (optional) default: undefined
316318
color: "red", // (optional) default: system default
317319
vibrate: true, // (optional) default: true
318320
vibration: 300, // vibration length in milliseconds, ignored if vibrate=false, default: 1000

android/src/main/java/com/dieam/reactnativepushnotification/modules/RNPushNotificationHelper.java

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -191,16 +191,17 @@ public void sendNotificationScheduledCore(Bundle bundle) {
191191

192192
public void sendToNotificationCentre(final Bundle bundle) {
193193
RNPushNotificationPicturesAggregator aggregator = new RNPushNotificationPicturesAggregator(new RNPushNotificationPicturesAggregator.Callback() {
194-
public void call(Bitmap largeIconImage, Bitmap bigPictureImage) {
195-
sendToNotificationCentreWithPicture(bundle, largeIconImage, bigPictureImage);
194+
public void call(Bitmap largeIconImage, Bitmap bigPictureImage, Bitmap bigLargeIconImage) {
195+
sendToNotificationCentreWithPicture(bundle, largeIconImage, bigPictureImage, bigLargeIconImage);
196196
}
197197
});
198198

199199
aggregator.setLargeIconUrl(context, bundle.getString("largeIconUrl"));
200+
aggregator.setBigLargeIconUrl(context, bundle.getString("bigLargeIconUrl"));
200201
aggregator.setBigPictureUrl(context, bundle.getString("bigPictureUrl"));
201202
}
202203

203-
public void sendToNotificationCentreWithPicture(Bundle bundle, Bitmap largeIconBitmap, Bitmap bigPictureBitmap) {
204+
public void sendToNotificationCentreWithPicture(Bundle bundle, Bitmap largeIconBitmap, Bitmap bigPictureBitmap, Bitmap bigLargeIconBitmap) {
204205
try {
205206
Class intentClass = getMainActivityClass();
206207
if (intentClass == null) {
@@ -380,10 +381,26 @@ public void sendToNotificationCentreWithPicture(Bundle bundle, Bitmap largeIconB
380381
NotificationCompat.Style style;
381382

382383
if(bigPictureBitmap != null) {
384+
385+
// Big large icon
386+
if(bigLargeIconBitmap == null) {
387+
int bigLargeIconResId = 0;
388+
389+
String bigLargeIcon = bundle.getString("bigLargeIcon");
390+
391+
if (bigLargeIcon != null && !bigLargeIcon.isEmpty()) {
392+
bigLargeIconResId = res.getIdentifier(bigLargeIcon, "mipmap", packageName);
393+
if (bigLargeIconResId != 0) {
394+
bigLargeIconBitmap = BitmapFactory.decodeResource(res, bigLargeIconResId);
395+
}
396+
}
397+
}
398+
383399
style = new NotificationCompat.BigPictureStyle()
384400
.bigPicture(bigPictureBitmap)
385401
.setBigContentTitle(title)
386-
.setSummaryText(message);
402+
.setSummaryText(message)
403+
.bigLargeIcon(bigLargeIconBitmap);
387404
}
388405
else {
389406
style = new NotificationCompat.BigTextStyle().bigText(bigText);

android/src/main/java/com/dieam/reactnativepushnotification/modules/RNPushNotificationPicturesAggregator.java

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,14 @@
2222

2323
public class RNPushNotificationPicturesAggregator {
2424
interface Callback {
25-
public void call(Bitmap largeIconImage, Bitmap bigPictureImage);
25+
public void call(Bitmap largeIconImage, Bitmap bigPictureImage, Bitmap bigLargeIconImage);
2626
}
2727

2828
private AtomicInteger count = new AtomicInteger(0);
2929

3030
private Bitmap largeIconImage;
3131
private Bitmap bigPictureImage;
32+
private Bitmap bigLargeIconImage;
3233

3334
private Callback callback;
3435

@@ -108,6 +109,42 @@ public void onFailureImpl(DataSource dataSource) {
108109
});
109110
}
110111

112+
public void setBigLargeIcon(Bitmap bitmap) {
113+
this.bigLargeIconImage = bitmap;
114+
this.finished();
115+
}
116+
117+
public void setBigLargeIconUrl(Context context, String url) {
118+
if(null == url) {
119+
this.setBigLargeIcon(null);
120+
return;
121+
}
122+
123+
Uri uri = null;
124+
125+
try {
126+
uri = Uri.parse(url);
127+
} catch(Exception ex) {
128+
Log.e(LOG_TAG, "Failed to parse bigLargeIconUrl", ex);
129+
this.setBigLargeIcon(null);
130+
return;
131+
}
132+
133+
final RNPushNotificationPicturesAggregator aggregator = this;
134+
135+
this.downloadRequest(context, uri, new BaseBitmapDataSubscriber() {
136+
@Override
137+
public void onNewResultImpl(@Nullable Bitmap bitmap) {
138+
aggregator.setBigLargeIcon(bitmap);
139+
}
140+
141+
@Override
142+
public void onFailureImpl(DataSource dataSource) {
143+
aggregator.setBigLargeIcon(null);
144+
}
145+
});
146+
}
147+
111148
private void downloadRequest(Context context, Uri uri, BaseBitmapDataSubscriber subscriber) {
112149
ImageRequest imageRequest = ImageRequestBuilder
113150
.newBuilderWithSource(uri)
@@ -128,8 +165,8 @@ private void finished() {
128165
synchronized(this.count) {
129166
int val = this.count.incrementAndGet();
130167

131-
if(val >= 2 && this.callback != null) {
132-
this.callback.call(this.largeIconImage, this.bigPictureImage);
168+
if(val >= 3 && this.callback != null) {
169+
this.callback.call(this.largeIconImage, this.bigPictureImage, this.bigLargeIconImage);
133170
}
134171
}
135172
}

0 commit comments

Comments
 (0)