Skip to content

Commit f4a6203

Browse files
committed
fix(fcm): Address gemini review
1 parent 2452e3d commit f4a6203

1 file changed

Lines changed: 18 additions & 8 deletions

File tree

src/main/java/com/google/firebase/messaging/AndroidNotificationV2.java

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,22 @@
1717
package com.google.firebase.messaging;
1818

1919
import static com.google.common.base.Preconditions.checkArgument;
20+
import static com.google.common.base.Preconditions.checkNotNull;
2021

2122
import com.google.api.client.util.Key;
2223
import com.google.common.base.Strings;
2324
import com.google.common.collect.ImmutableList;
2425
import com.google.common.collect.ImmutableMap;
2526
import com.google.firebase.internal.NonNull;
26-
import java.text.SimpleDateFormat;
27+
import java.time.Instant;
28+
import java.time.ZoneOffset;
29+
import java.time.format.DateTimeFormatter;
2730
import java.util.ArrayList;
28-
import java.util.Date;
2931
import java.util.List;
32+
import java.util.Locale;
3033
import java.util.Map;
31-
import java.util.TimeZone;
3234
import java.util.concurrent.TimeUnit;
35+
import java.util.regex.Pattern;
3336

3437
/**
3538
* Represents the Android-specific notification options that can be included in a
@@ -125,12 +128,18 @@ public final class AndroidNotificationV2 {
125128
.put(NotificationPriority.MAX, "PRIORITY_MAX")
126129
.build();
127130

131+
private static final Pattern COLOR_PATTERN = Pattern.compile("^#[0-9a-fA-F]{6}$");
132+
133+
private static final DateTimeFormatter EVENT_TIME_FORMATTER =
134+
DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS000000'Z'")
135+
.withZone(ZoneOffset.UTC);
136+
128137
private AndroidNotificationV2(Builder builder) {
129138
this.title = builder.title;
130139
this.body = builder.body;
131140
this.icon = builder.icon;
132141
if (builder.color != null) {
133-
checkArgument(builder.color.matches("^#[0-9a-fA-F]{6}$"),
142+
checkArgument(COLOR_PATTERN.matcher(builder.color).matches(),
134143
"color must be in the form #RRGGBB");
135144
}
136145
this.color = builder.color;
@@ -173,7 +182,7 @@ private AndroidNotificationV2(Builder builder) {
173182
this.defaultLightSettings = builder.defaultLightSettings;
174183
this.visibility = (builder.visibility != null
175184
&& builder.visibility != Visibility.UNSPECIFIED)
176-
? builder.visibility.name().toLowerCase() : null;
185+
? builder.visibility.name().toLowerCase(Locale.ENGLISH) : null;
177186
if (builder.notificationCount != null) {
178187
checkArgument(builder.notificationCount >= 0,
179188
"notificationCount if specified must be zero or positive valued");
@@ -354,6 +363,7 @@ public Builder addBodyLocalizationArg(String arg) {
354363
* @return This builder.
355364
*/
356365
public Builder addAllBodyLocalizationArgs(@NonNull List<String> args) {
366+
checkNotNull(args, "args must not be null");
357367
this.bodyLocArgs.addAll(args);
358368
return this;
359369
}
@@ -390,6 +400,7 @@ public Builder addTitleLocalizationArg(String arg) {
390400
* @return This builder.
391401
*/
392402
public Builder addAllTitleLocalizationArgs(@NonNull List<String> args) {
403+
checkNotNull(args, "args must not be null");
393404
this.titleLocArgs.addAll(args);
394405
return this;
395406
}
@@ -457,9 +468,7 @@ public Builder setSticky(boolean sticky) {
457468
* @return This builder.
458469
*/
459470
public Builder setEventTimeInMillis(long eventTimeInMillis) {
460-
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS000000'Z'");
461-
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
462-
this.eventTime = dateFormat.format(new Date(eventTimeInMillis));
471+
this.eventTime = EVENT_TIME_FORMATTER.format(Instant.ofEpochMilli(eventTimeInMillis));
463472
return this;
464473
}
465474

@@ -503,6 +512,7 @@ public Builder setNotificationPriority(NotificationPriority priority) {
503512
* @return This builder.
504513
*/
505514
public Builder setVibrateTimingsInMillis(long[] vibrateTimingsInMillis) {
515+
checkNotNull(vibrateTimingsInMillis, "vibrateTimingsInMillis must not be null");
506516
List<String> list = new ArrayList<>();
507517
for (long value : vibrateTimingsInMillis) {
508518
checkArgument(value >= 0, "elements in vibrateTimingsInMillis must not be negative");

0 commit comments

Comments
 (0)