From 75abe9e4aa0564edbffd4a18205e5ac5285db365 Mon Sep 17 00:00:00 2001 From: Cyrille Hemidy Date: Fri, 23 Nov 2018 18:04:25 +0100 Subject: [PATCH 1/8] Add subtitle field in ApsAlert payload + tests --- .../google/firebase/messaging/ApsAlert.java | 68 +++++++++++++++++++ .../messaging/FirebaseMessagingTest.java | 3 +- .../firebase/messaging/MessageTest.java | 7 ++ 3 files changed, 77 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/google/firebase/messaging/ApsAlert.java b/src/main/java/com/google/firebase/messaging/ApsAlert.java index 6f7e249f3..65aaf9d5a 100644 --- a/src/main/java/com/google/firebase/messaging/ApsAlert.java +++ b/src/main/java/com/google/firebase/messaging/ApsAlert.java @@ -34,6 +34,9 @@ public class ApsAlert { @Key("title") private final String title; + @Key("subtitle") + private final String subtitle; + @Key("body") private final String body; @@ -49,6 +52,12 @@ public class ApsAlert { @Key("title-loc-args") private final List titleLocArgs; + @Key("subtitle-loc-key") + private final String subtitleLocKey; + + @Key("subtitle-loc-args") + private final List subtitleLocArgs; + @Key("action-loc-key") private final String actionLocKey; @@ -57,6 +66,7 @@ public class ApsAlert { private ApsAlert(Builder builder) { this.title = builder.title; + this.subtitle = builder.subtitle; this.body = builder.body; this.actionLocKey = builder.actionLocKey; this.locKey = builder.locKey; @@ -76,6 +86,14 @@ private ApsAlert(Builder builder) { } else { this.titleLocArgs = null; } + this.subtitleLocKey = builder.subtitleLocKey; + if (!builder.subtitleLocArgs.isEmpty()) { + checkArgument(!Strings.isNullOrEmpty(builder.subtitleLocKey), + "subtitleLocKey is required when specifying subtitleLocArgs"); + this.subtitleLocArgs = ImmutableList.copyOf(builder.subtitleLocArgs); + } else { + this.subtitleLocArgs = null; + } this.launchImage = builder.launchImage; } @@ -91,11 +109,14 @@ public static Builder builder() { public static class Builder { private String title; + private String subtitle; private String body; private String locKey; private List locArgs = new ArrayList<>(); private String titleLocKey; private List titleLocArgs = new ArrayList<>(); + private String subtitleLocKey; + private List subtitleLocArgs = new ArrayList<>(); private String actionLocKey; private String launchImage; @@ -113,6 +134,17 @@ public Builder setTitle(String title) { return this; } + /** + * Sets the subtitle of the alert. + * + * @param subtitle Subtitle of the notification. + * @return This builder. + */ + public Builder setSubtitle(String subtitle) { + this.subtitle = subtitle; + return this; + } + /** * Sets the body of the alert. When provided, overrides the body sent * via {@link Notification}. @@ -209,6 +241,42 @@ public Builder addAllTitleLocArgs(@NonNull List args) { return this; } + /** + * Sets the key of the subtitle string in the app's string resources to use to localize the subtitle + * text. + * + * @param subtitleLocKey Resource key string. + * @return This builder. + */ + public Builder setSubtitleLocalizationKey(String subtitleLocKey) { + this.subtitleLocKey = subtitleLocKey; + return this; + } + + /** + * Adds a resource key string that will be used in place of the format specifiers in + * {@code subtitleLocKey}. + * + * @param arg Resource key string. + * @return This builder. + */ + public Builder addSubtitleLocalizationArg(@NonNull String arg) { + this.subtitleLocArgs.add(arg); + return this; + } + + /** + * Adds a list of resource keys that will be used in place of the format specifiers in + * {@code subtitleLocKey}. + * + * @param args List of resource key strings. + * @return This builder. + */ + public Builder addAllSubtitleLocArgs(@NonNull List args) { + this.subtitleLocArgs.addAll(args); + return this; + } + /** * Sets the launch image for the notification action. * diff --git a/src/test/java/com/google/firebase/messaging/FirebaseMessagingTest.java b/src/test/java/com/google/firebase/messaging/FirebaseMessagingTest.java index 4b51513be..6dc80e2b2 100644 --- a/src/test/java/com/google/firebase/messaging/FirebaseMessagingTest.java +++ b/src/test/java/com/google/firebase/messaging/FirebaseMessagingTest.java @@ -644,6 +644,7 @@ private static Map> buildTestMessages() { .setBadge(42) .setAlert(ApsAlert.builder() .setTitle("test-title") + .setSubtitle("test-subtitle") .setBody("test-body") .build()) .build()) @@ -657,7 +658,7 @@ private static Map> buildTestMessages() { "payload", ImmutableMap.of("k1", "v1", "k2", true, "aps", ImmutableMap.of("badge", new BigDecimal(42), "alert", ImmutableMap.of( - "title", "test-title", "body", "test-body")))) + "title", "test-title", "test-subtitle", "body", "test-body")))) )); // Webpush message (no notification) diff --git a/src/test/java/com/google/firebase/messaging/MessageTest.java b/src/test/java/com/google/firebase/messaging/MessageTest.java index 3313f2bb3..b50ef2de9 100644 --- a/src/test/java/com/google/firebase/messaging/MessageTest.java +++ b/src/test/java/com/google/firebase/messaging/MessageTest.java @@ -393,14 +393,18 @@ public void testApnsMessageWithPayloadAndAps() throws IOException { .setAps(Aps.builder() .setAlert(ApsAlert.builder() .setTitle("test-title") + .setSubTitle("test-subtitle") .setBody("test-body") .setLocalizationKey("test-loc-key") .setActionLocalizationKey("test-action-loc-key") .setTitleLocalizationKey("test-title-loc-key") + .setSubtitleLocalizationKey("test-subtitle-loc-key") .addLocalizationArg("arg1") .addAllLocalizationArgs(ImmutableList.of("arg2", "arg3")) .addTitleLocalizationArg("arg4") .addAllTitleLocArgs(ImmutableList.of("arg5", "arg6")) + .addSubtitleLocalizationArg("arg7") + .addAllSubTitleLocArgs(ImmutableList.of("arg8", "arg9")) .setLaunchImage("test-image") .build()) .setCategory("test-category") @@ -417,12 +421,15 @@ public void testApnsMessageWithPayloadAndAps() throws IOException { "aps", ImmutableMap.builder() .put("alert", ImmutableMap.builder() .put("title", "test-title") + .put("subtitle", "test-subtitle") .put("body", "test-body") .put("loc-key", "test-loc-key") .put("action-loc-key", "test-action-loc-key") .put("title-loc-key", "test-title-loc-key") + .put("title-loc-key", "test-subtitle-loc-key") .put("loc-args", ImmutableList.of("arg1", "arg2", "arg3")) .put("title-loc-args", ImmutableList.of("arg4", "arg5", "arg6")) + .put("title-loc-args", ImmutableList.of("arg7", "arg8", "arg9")) .put("launch-image", "test-image") .build()) .put("category", "test-category") From 049fd5be081b5318327fb752f32847d3906462c5 Mon Sep 17 00:00:00 2001 From: Cyrille Hemidy Date: Fri, 23 Nov 2018 18:10:29 +0100 Subject: [PATCH 2/8] fix checkstyle --- src/main/java/com/google/firebase/messaging/ApsAlert.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/google/firebase/messaging/ApsAlert.java b/src/main/java/com/google/firebase/messaging/ApsAlert.java index 65aaf9d5a..2efa94433 100644 --- a/src/main/java/com/google/firebase/messaging/ApsAlert.java +++ b/src/main/java/com/google/firebase/messaging/ApsAlert.java @@ -242,8 +242,8 @@ public Builder addAllTitleLocArgs(@NonNull List args) { } /** - * Sets the key of the subtitle string in the app's string resources to use to localize the subtitle - * text. + * Sets the key of the subtitle string in the app's string resources to use to localize + * the subtitle text. * * @param subtitleLocKey Resource key string. * @return This builder. From 0a7c376ee8adab4f85422b61e733a3e19bc57cc4 Mon Sep 17 00:00:00 2001 From: Cyrille Hemidy Date: Fri, 23 Nov 2018 18:14:45 +0100 Subject: [PATCH 3/8] fix test --- .../com/google/firebase/messaging/FirebaseMessagingTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/google/firebase/messaging/FirebaseMessagingTest.java b/src/test/java/com/google/firebase/messaging/FirebaseMessagingTest.java index 6dc80e2b2..dd6f1d1ed 100644 --- a/src/test/java/com/google/firebase/messaging/FirebaseMessagingTest.java +++ b/src/test/java/com/google/firebase/messaging/FirebaseMessagingTest.java @@ -658,7 +658,7 @@ private static Map> buildTestMessages() { "payload", ImmutableMap.of("k1", "v1", "k2", true, "aps", ImmutableMap.of("badge", new BigDecimal(42), "alert", ImmutableMap.of( - "title", "test-title", "test-subtitle", "body", "test-body")))) + "title", "test-title", "sutitle", "test-subtitle", "body", "test-body")))) )); // Webpush message (no notification) From cf9fe521d691579eb24dad70d41eb6892f8d9cfc Mon Sep 17 00:00:00 2001 From: Cyrille Hemidy Date: Fri, 23 Nov 2018 18:21:00 +0100 Subject: [PATCH 4/8] fix checkstyle --- .../com/google/firebase/messaging/FirebaseMessagingTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/google/firebase/messaging/FirebaseMessagingTest.java b/src/test/java/com/google/firebase/messaging/FirebaseMessagingTest.java index dd6f1d1ed..df39f6625 100644 --- a/src/test/java/com/google/firebase/messaging/FirebaseMessagingTest.java +++ b/src/test/java/com/google/firebase/messaging/FirebaseMessagingTest.java @@ -658,7 +658,8 @@ private static Map> buildTestMessages() { "payload", ImmutableMap.of("k1", "v1", "k2", true, "aps", ImmutableMap.of("badge", new BigDecimal(42), "alert", ImmutableMap.of( - "title", "test-title", "sutitle", "test-subtitle", "body", "test-body")))) + "title", "test-title", "sutitle", "test-subtitle", + "body", "test-body")))) )); // Webpush message (no notification) From c04046d4fe13df052df536d21bd26a39a78c4475 Mon Sep 17 00:00:00 2001 From: Cyrille Hemidy Date: Fri, 23 Nov 2018 18:24:51 +0100 Subject: [PATCH 5/8] fix test --- src/test/java/com/google/firebase/messaging/MessageTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/google/firebase/messaging/MessageTest.java b/src/test/java/com/google/firebase/messaging/MessageTest.java index b50ef2de9..ea9366dee 100644 --- a/src/test/java/com/google/firebase/messaging/MessageTest.java +++ b/src/test/java/com/google/firebase/messaging/MessageTest.java @@ -393,7 +393,7 @@ public void testApnsMessageWithPayloadAndAps() throws IOException { .setAps(Aps.builder() .setAlert(ApsAlert.builder() .setTitle("test-title") - .setSubTitle("test-subtitle") + .setSubtitle("test-subtitle") .setBody("test-body") .setLocalizationKey("test-loc-key") .setActionLocalizationKey("test-action-loc-key") @@ -404,7 +404,7 @@ public void testApnsMessageWithPayloadAndAps() throws IOException { .addTitleLocalizationArg("arg4") .addAllTitleLocArgs(ImmutableList.of("arg5", "arg6")) .addSubtitleLocalizationArg("arg7") - .addAllSubTitleLocArgs(ImmutableList.of("arg8", "arg9")) + .addAllSubtitleLocArgs(ImmutableList.of("arg8", "arg9")) .setLaunchImage("test-image") .build()) .setCategory("test-category") From ccc4a6a44513b86145fcd12d17cb2479dae9d44e Mon Sep 17 00:00:00 2001 From: Cyrille Hemidy Date: Fri, 23 Nov 2018 18:32:15 +0100 Subject: [PATCH 6/8] fix test --- src/test/java/com/google/firebase/messaging/MessageTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/google/firebase/messaging/MessageTest.java b/src/test/java/com/google/firebase/messaging/MessageTest.java index ea9366dee..eccfda522 100644 --- a/src/test/java/com/google/firebase/messaging/MessageTest.java +++ b/src/test/java/com/google/firebase/messaging/MessageTest.java @@ -426,10 +426,10 @@ public void testApnsMessageWithPayloadAndAps() throws IOException { .put("loc-key", "test-loc-key") .put("action-loc-key", "test-action-loc-key") .put("title-loc-key", "test-title-loc-key") - .put("title-loc-key", "test-subtitle-loc-key") + .put("subtitle-loc-key", "test-subtitle-loc-key") .put("loc-args", ImmutableList.of("arg1", "arg2", "arg3")) .put("title-loc-args", ImmutableList.of("arg4", "arg5", "arg6")) - .put("title-loc-args", ImmutableList.of("arg7", "arg8", "arg9")) + .put("subtitle-loc-args", ImmutableList.of("arg7", "arg8", "arg9")) .put("launch-image", "test-image") .build()) .put("category", "test-category") From d24c7443fc7f0691bec3d9e0355b87efc361589b Mon Sep 17 00:00:00 2001 From: Cyrille Hemidy Date: Fri, 23 Nov 2018 18:46:26 +0100 Subject: [PATCH 7/8] fix test --- .../com/google/firebase/messaging/FirebaseMessagingTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/google/firebase/messaging/FirebaseMessagingTest.java b/src/test/java/com/google/firebase/messaging/FirebaseMessagingTest.java index df39f6625..1ad74ac33 100644 --- a/src/test/java/com/google/firebase/messaging/FirebaseMessagingTest.java +++ b/src/test/java/com/google/firebase/messaging/FirebaseMessagingTest.java @@ -658,7 +658,7 @@ private static Map> buildTestMessages() { "payload", ImmutableMap.of("k1", "v1", "k2", true, "aps", ImmutableMap.of("badge", new BigDecimal(42), "alert", ImmutableMap.of( - "title", "test-title", "sutitle", "test-subtitle", + "title", "test-title", "subtitle", "test-subtitle", "body", "test-body")))) )); From 3b18de4bbb49ff5d6401fabd83baced43efdd128 Mon Sep 17 00:00:00 2001 From: Cyrille Hemidy Date: Tue, 27 Nov 2018 00:12:28 +0100 Subject: [PATCH 8/8] update test --- src/test/java/com/google/firebase/messaging/MessageTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/google/firebase/messaging/MessageTest.java b/src/test/java/com/google/firebase/messaging/MessageTest.java index eccfda522..b6025c0bb 100644 --- a/src/test/java/com/google/firebase/messaging/MessageTest.java +++ b/src/test/java/com/google/firebase/messaging/MessageTest.java @@ -481,7 +481,8 @@ public void testInvalidApnsConfig() { List notificationBuilders = ImmutableList.of( ApsAlert.builder().addLocalizationArg("foo"), - ApsAlert.builder().addTitleLocalizationArg("foo") + ApsAlert.builder().addTitleLocalizationArg("foo"), + ApsAlert.builder().addSubtitleLocalizationArg("foo") ); for (int i = 0; i < notificationBuilders.size(); i++) { try {