Skip to content

Commit c43ae16

Browse files
author
rohandandavati
authored
add data bundles to sdk (#974)
* add data bundles to sdk * delete empty line * try to add a data bundle test * add test for data bundle * add test for data bundles * remove unnecessary casts * be less dumb * remove unnecessary casts, add nullable tags * sad man * sadder man * I live in fear * deep fear * fix formatting on fiamui-app MainActivity * fix java format * fix java formatting * add arguments in ModalBindingWrapperTest
1 parent 21b0eda commit c43ae16

File tree

19 files changed

+170
-60
lines changed

19 files changed

+170
-60
lines changed

fiamui-app/fiamui-app.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ dependencies {
5757
implementation project(path: ":firebase-inappmessaging-display")
5858
implementation project(path: ":firebase-inappmessaging")
5959
implementation "com.google.firebase:firebase-measurement-connector:18.0.0"
60+
implementation 'com.google.guava:guava:24.1-jre-android'
6061

6162
implementation('com.google.firebase:firebase-analytics:17.0.0') {
6263
exclude group: 'com.google.firebase', module: 'firebase-common'

fiamui-app/src/main/java/com/example/firebase/fiamui/MainActivity.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import butterknife.ButterKnife;
2828
import butterknife.OnClick;
2929
import com.google.android.material.textfield.TextInputEditText;
30+
import com.google.common.collect.ImmutableMap;
3031
import com.google.firebase.analytics.FirebaseAnalytics;
3132
import com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplay;
3233
import com.google.firebase.inappmessaging.model.*;
@@ -35,6 +36,7 @@
3536
import me.priyesh.chroma.ColorSelectListener;
3637

3738
public class MainActivity extends AppCompatActivity {
39+
3840
@BindView(R.id.start)
3941
Button mStart;
4042

@@ -154,13 +156,14 @@ public void onStartClick(View v) {
154156
String secondaryActionButtonTextString = secondaryActionButtonText.getText().toString();
155157

156158
CampaignMetadata campaignMetadata = new CampaignMetadata("test_campaign", "name", true);
159+
ImmutableMap<String, String> data = ImmutableMap.of("up", "dog");
157160

158161
if (useImageFiam.isChecked()) {
159162
ImageOnlyMessage.Builder builder = ImageOnlyMessage.builder();
160163
Action action = Action.builder().setActionUrl(actionButtonUrlString).build();
161164

162165
ImageOnlyMessage message =
163-
builder.setImageData(imageData).setAction(action).build(campaignMetadata);
166+
builder.setImageData(imageData).setAction(action).build(campaignMetadata, data);
164167

165168
FirebaseInAppMessagingDisplay.getInstance()
166169
.testMessage(this, message, new NoOpDisplayCallbacks());
@@ -181,7 +184,7 @@ public void onStartClick(View v) {
181184
.setBody(body)
182185
.setImageData(imageData)
183186
.setAction(action)
184-
.build(campaignMetadata);
187+
.build(campaignMetadata, data);
185188

186189
FirebaseInAppMessagingDisplay.getInstance()
187190
.testMessage(this, message, new NoOpDisplayCallbacks());
@@ -250,7 +253,7 @@ public void onStartClick(View v) {
250253
.setLandscapeImageData(landscapeImageData)
251254
.setPrimaryAction(primaryAction)
252255
.setSecondaryAction(secondaryAction)
253-
.build(campaignMetadata);
256+
.build(campaignMetadata, data);
254257

255258
FirebaseInAppMessagingDisplay.getInstance()
256259
.testMessage(this, message, new NoOpDisplayCallbacks());
@@ -290,7 +293,7 @@ public void onStartClick(View v) {
290293
.setBody(body)
291294
.setImageData(imageData)
292295
.setAction(modalAction)
293-
.build(campaignMetadata);
296+
.build(campaignMetadata, data);
294297

295298
FirebaseInAppMessagingDisplay.getInstance()
296299
.testMessage(this, message, new NoOpDisplayCallbacks());

firebase-inappmessaging-display/firebase-inappmessaging-display.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ dependencies {
8989
testImplementation "junit:junit:4.12"
9090
testImplementation "org.mockito:mockito-core:2.25.0"
9191
testImplementation "com.google.truth:truth:0.44"
92+
testImplementation 'com.google.guava:guava:27.1-android'
9293

9394
androidTestImplementation "org.mockito:mockito-core:2.25.0"
9495
androidTestImplementation "com.google.dexmaker:dexmaker:1.2"

firebase-inappmessaging-display/src/androidTest/java/com/google/firebase/inappmessaging/display/internal/bindingwrappers/CardBindingWrapperTest.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import static com.google.firebase.inappmessaging.testutil.TestData.ACTION_MODEL_WITH_BUTTON;
1919
import static com.google.firebase.inappmessaging.testutil.TestData.CAMPAIGN_METADATA_MODEL;
2020
import static com.google.firebase.inappmessaging.testutil.TestData.CARD_MESSAGE_MODEL;
21+
import static com.google.firebase.inappmessaging.testutil.TestData.DATA;
2122
import static com.google.firebase.inappmessaging.testutil.TestData.IMAGE_DATA;
2223
import static com.google.firebase.inappmessaging.testutil.TestData.MESSAGE_BACKGROUND_HEX_STRING;
2324
import static com.google.firebase.inappmessaging.testutil.TestData.TITLE_MODEL;
@@ -171,7 +172,7 @@ public void inflate_setsSecondaryButtonInvisibleWithNoButton() throws Exception
171172
.setBackgroundHexColor(MESSAGE_BACKGROUND_HEX_STRING)
172173
.setTitle(TITLE_MODEL)
173174
.setPortraitImageData(IMAGE_DATA)
174-
.build(CAMPAIGN_METADATA_MODEL);
175+
.build(CAMPAIGN_METADATA_MODEL, DATA);
175176

176177
cardBindingWrapper = new CardBindingWrapper(cardPortraitLayoutConfig, layoutInflater, message);
177178

@@ -195,7 +196,7 @@ public void inflate_setsPrimaryButtonVisibleWithoutUrl() throws Exception {
195196
.setBackgroundHexColor(MESSAGE_BACKGROUND_HEX_STRING)
196197
.setTitle(TITLE_MODEL)
197198
.setPortraitImageData(IMAGE_DATA)
198-
.build(CAMPAIGN_METADATA_MODEL);
199+
.build(CAMPAIGN_METADATA_MODEL, DATA);
199200

200201
cardBindingWrapper = new CardBindingWrapper(cardPortraitLayoutConfig, layoutInflater, message);
201202

@@ -220,7 +221,7 @@ public void inflate_setsBodyInvisibleWithNoBody() throws Exception {
220221
.setBackgroundHexColor(MESSAGE_BACKGROUND_HEX_STRING)
221222
.setTitle(TITLE_MODEL)
222223
.setPortraitImageData(IMAGE_DATA)
223-
.build(CAMPAIGN_METADATA_MODEL);
224+
.build(CAMPAIGN_METADATA_MODEL, DATA);
224225

225226
cardBindingWrapper = new CardBindingWrapper(cardPortraitLayoutConfig, layoutInflater, message);
226227

firebase-inappmessaging-display/src/androidTest/java/com/google/firebase/inappmessaging/display/internal/bindingwrappers/ModalBindingWrapperTest.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import static com.google.firebase.inappmessaging.testutil.TestData.ACTION_MODEL_WITH_BUTTON;
1818
import static com.google.firebase.inappmessaging.testutil.TestData.CAMPAIGN_METADATA_MODEL;
19+
import static com.google.firebase.inappmessaging.testutil.TestData.DATA;
1920
import static com.google.firebase.inappmessaging.testutil.TestData.IMAGE_DATA;
2021
import static com.google.firebase.inappmessaging.testutil.TestData.MESSAGE_BACKGROUND_HEX_STRING;
2122
import static com.google.firebase.inappmessaging.testutil.TestData.MODAL_MESSAGE_MODEL;
@@ -145,7 +146,7 @@ public void inflate_setsButtonInvisibleWithNoButton() throws Exception {
145146
.setImageData(IMAGE_DATA)
146147
.setTitle(TITLE_MODEL)
147148
.setBackgroundHexColor(MESSAGE_BACKGROUND_HEX_STRING)
148-
.build(CAMPAIGN_METADATA_MODEL);
149+
.build(CAMPAIGN_METADATA_MODEL, DATA);
149150

150151
modalBindingWrapper =
151152
new ModalBindingWrapper(modalPortraitLayoutConfig, layoutInflater, message);
@@ -168,7 +169,7 @@ public void inflate_setsImageInvisibleWithNoImage() throws Exception {
168169
.setAction(ACTION_MODEL_WITH_BUTTON)
169170
.setTitle(TITLE_MODEL)
170171
.setBackgroundHexColor(MESSAGE_BACKGROUND_HEX_STRING)
171-
.build(CAMPAIGN_METADATA_MODEL);
172+
.build(CAMPAIGN_METADATA_MODEL, DATA);
172173

173174
modalBindingWrapper =
174175
new ModalBindingWrapper(modalPortraitLayoutConfig, layoutInflater, message);
@@ -190,7 +191,7 @@ public void inflate_setsBodyInvisibleWithNoBody() throws Exception {
190191
.setImageData(IMAGE_DATA)
191192
.setTitle(TITLE_MODEL)
192193
.setBackgroundHexColor(MESSAGE_BACKGROUND_HEX_STRING)
193-
.build(CAMPAIGN_METADATA_MODEL);
194+
.build(CAMPAIGN_METADATA_MODEL, DATA);
194195

195196
modalBindingWrapper =
196197
new ModalBindingWrapper(modalPortraitLayoutConfig, layoutInflater, message);

firebase-inappmessaging/firebase-inappmessaging.gradle

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,11 @@ dependencies {
139139
testImplementation "com.google.truth:truth:$googleTruthVersion"
140140
testImplementation 'junit:junit:4.12'
141141
testImplementation 'androidx.test:runner:1.2.0'
142-
testImplementation 'org.robolectric:robolectric:4.2'
142+
testImplementation ('org.robolectric:robolectric:4.2') {
143+
exclude group: 'com.google.protobuf', module: 'protobuf-java'
144+
}
143145
testImplementation 'io.grpc:grpc-testing:1.21.0'
146+
testImplementation 'com.google.guava:guava:27.1-android'
144147

145148
androidTestImplementation 'junit:junit:4.12'
146149
androidTestImplementation 'androidx.test:runner:1.2.0'

firebase-inappmessaging/src/main/java/com/google/firebase/inappmessaging/internal/InAppMessageStreamManager.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,8 @@ private Maybe<TriggeredInAppMessage> triggeredInAppMessage(
305305
thickContent.getContent(),
306306
thickContent.getVanillaPayload().getCampaignId(),
307307
thickContent.getVanillaPayload().getCampaignName(),
308-
thickContent.getIsTestCampaign());
308+
thickContent.getIsTestCampaign(),
309+
thickContent.getDataBundleMap());
309310
if (inAppMessage.getMessageType().equals(MessageType.UNSUPPORTED)) {
310311
return Maybe.empty();
311312
}

firebase-inappmessaging/src/main/java/com/google/firebase/inappmessaging/model/BannerMessage.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import android.text.TextUtils;
1818
import androidx.annotation.NonNull;
19+
import java.util.Map;
1920
import javax.annotation.Nullable;
2021

2122
/** Encapsulates a Firebase In App Banner Message. */
@@ -81,8 +82,9 @@ private BannerMessage(
8182
@Nullable Text body,
8283
@Nullable ImageData imageData,
8384
@Nullable Action action,
84-
@NonNull String backgroundHexColor) {
85-
super(campaignMetadata, MessageType.BANNER);
85+
@NonNull String backgroundHexColor,
86+
@Nullable Map<String, String> data) {
87+
super(campaignMetadata, MessageType.BANNER, data);
8688
this.title = title;
8789
this.body = body;
8890
this.imageData = imageData;
@@ -171,7 +173,8 @@ public Builder setBackgroundHexColor(@Nullable String backgroundHexColor) {
171173
return this;
172174
}
173175

174-
public BannerMessage build(CampaignMetadata campaignMetadata) {
176+
public BannerMessage build(
177+
CampaignMetadata campaignMetadata, @Nullable Map<String, String> data) {
175178
if (title == null) {
176179
throw new IllegalArgumentException("Banner model must have a title");
177180
}
@@ -180,7 +183,7 @@ public BannerMessage build(CampaignMetadata campaignMetadata) {
180183
}
181184
// We know backgroundColor is not null here because isEmpty checks for null.
182185
return new BannerMessage(
183-
campaignMetadata, title, body, imageData, action, backgroundHexColor);
186+
campaignMetadata, title, body, imageData, action, backgroundHexColor, data);
184187
}
185188
}
186189
}

firebase-inappmessaging/src/main/java/com/google/firebase/inappmessaging/model/CardMessage.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import android.text.TextUtils;
1818
import androidx.annotation.NonNull;
1919
import androidx.annotation.Nullable;
20+
import java.util.Map;
2021

2122
/** Encapsulates a Firebase In App Card Message. */
2223
public class CardMessage extends InAppMessage {
@@ -100,8 +101,9 @@ private CardMessage(
100101
@Nullable ImageData landscapeImageData,
101102
@NonNull String backgroundHexColor,
102103
@NonNull Action primaryAction,
103-
@Nullable Action secondaryAction) {
104-
super(campaignMetadata, MessageType.CARD);
104+
@Nullable Action secondaryAction,
105+
@Nullable Map<String, String> data) {
106+
super(campaignMetadata, MessageType.CARD, data);
105107
this.title = title;
106108
this.body = body;
107109
this.portraitImageData = portraitImageData;
@@ -239,7 +241,8 @@ public Builder setBody(@Nullable Text body) {
239241
return this;
240242
}
241243

242-
public CardMessage build(CampaignMetadata campaignMetadata) {
244+
public CardMessage build(
245+
CampaignMetadata campaignMetadata, @Nullable Map<String, String> data) {
243246
if (primaryAction == null) {
244247
throw new IllegalArgumentException("Card model must have a primary action");
245248
}
@@ -269,7 +272,8 @@ public CardMessage build(CampaignMetadata campaignMetadata) {
269272
landscapeImageData,
270273
backgroundHexColor,
271274
primaryAction,
272-
secondaryAction);
275+
secondaryAction,
276+
data);
273277
}
274278
}
275279
}

firebase-inappmessaging/src/main/java/com/google/firebase/inappmessaging/model/ImageOnlyMessage.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
package com.google.firebase.inappmessaging.model;
1616

1717
import androidx.annotation.NonNull;
18+
import java.util.Map;
1819
import javax.annotation.Nullable;
1920

2021
/** Encapsulates a Firebase In App ImageOnly Message. */
@@ -62,8 +63,9 @@ public boolean equals(Object o) {
6263
private ImageOnlyMessage(
6364
@NonNull CampaignMetadata campaignMetadata,
6465
@NonNull ImageData imageData,
65-
@Nullable Action action) {
66-
super(campaignMetadata, MessageType.IMAGE_ONLY);
66+
@Nullable Action action,
67+
@Nullable Map<String, String> data) {
68+
super(campaignMetadata, MessageType.IMAGE_ONLY, data);
6769
this.imageData = imageData;
6870
this.action = action;
6971
}
@@ -110,11 +112,12 @@ public Builder setAction(@Nullable Action action) {
110112
return this;
111113
}
112114

113-
public ImageOnlyMessage build(CampaignMetadata campaignMetadata) {
115+
public ImageOnlyMessage build(
116+
CampaignMetadata campaignMetadata, @Nullable Map<String, String> data) {
114117
if (imageData == null) {
115118
throw new IllegalArgumentException("ImageOnly model must have image data");
116119
}
117-
return new ImageOnlyMessage(campaignMetadata, imageData, action);
120+
return new ImageOnlyMessage(campaignMetadata, imageData, action, data);
118121
}
119122
}
120123
}

firebase-inappmessaging/src/main/java/com/google/firebase/inappmessaging/model/InAppMessage.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
package com.google.firebase.inappmessaging.model;
1616

1717
import androidx.annotation.Nullable;
18+
import java.util.Map;
1819

1920
/** Encapsulates a Firebase In App Message. */
2021
public abstract class InAppMessage {
@@ -30,6 +31,7 @@ public abstract class InAppMessage {
3031
@Deprecated Boolean isTestMessage;
3132
MessageType messageType;
3233
CampaignMetadata campaignMetadata;
34+
@Nullable private Map<String, String> data;
3335

3436
/** @hide */
3537
@Deprecated
@@ -44,7 +46,8 @@ public InAppMessage(
4446
String campaignId,
4547
String campaignName,
4648
Boolean isTestMessage,
47-
MessageType messageType) {
49+
MessageType messageType,
50+
Map<String, String> data) {
4851
this.title = title;
4952
this.body = body;
5053
this.imageUrl = imageUrl;
@@ -56,12 +59,15 @@ public InAppMessage(
5659
this.isTestMessage = isTestMessage;
5760
this.messageType = messageType;
5861
this.campaignMetadata = new CampaignMetadata(campaignId, campaignName, isTestMessage);
62+
this.data = data;
5963
}
6064

6165
/** @hide */
62-
public InAppMessage(CampaignMetadata campaignMetadata, MessageType messageType) {
66+
public InAppMessage(
67+
CampaignMetadata campaignMetadata, MessageType messageType, Map<String, String> data) {
6368
this.campaignMetadata = campaignMetadata;
6469
this.messageType = messageType;
70+
this.data = data;
6571
}
6672

6773
/** Deprecated - Use the message specific methods instead. */
@@ -145,4 +151,9 @@ public MessageType getMessageType() {
145151
public CampaignMetadata getCampaignMetadata() {
146152
return campaignMetadata;
147153
}
154+
155+
@Nullable
156+
public Map<String, String> getData() {
157+
return data;
158+
}
148159
}

firebase-inappmessaging/src/main/java/com/google/firebase/inappmessaging/model/ModalMessage.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import android.text.TextUtils;
1818
import androidx.annotation.NonNull;
19+
import java.util.Map;
1920
import javax.annotation.Nullable;
2021

2122
/** Encapsulates a Firebase In App Modal Message. */
@@ -81,8 +82,9 @@ private ModalMessage(
8182
@Nullable Text body,
8283
@Nullable ImageData imageData,
8384
@Nullable Action action,
84-
@NonNull String backgroundHexColor) {
85-
super(campaignMetadata, MessageType.MODAL);
85+
@NonNull String backgroundHexColor,
86+
@Nullable Map<String, String> data) {
87+
super(campaignMetadata, MessageType.MODAL, data);
8688
this.title = title;
8789
this.body = body;
8890
this.imageData = imageData;
@@ -171,7 +173,8 @@ public Builder setBackgroundHexColor(@Nullable String backgroundHexColor) {
171173
return this;
172174
}
173175

174-
public ModalMessage build(CampaignMetadata campaignMetadata) {
176+
public ModalMessage build(
177+
CampaignMetadata campaignMetadata, @Nullable Map<String, String> data) {
175178
if (title == null) {
176179
throw new IllegalArgumentException("Modal model must have a title");
177180
}
@@ -183,7 +186,8 @@ public ModalMessage build(CampaignMetadata campaignMetadata) {
183186
}
184187

185188
// We know backgroundColor is not null here because isEmpty checks for null.
186-
return new ModalMessage(campaignMetadata, title, body, imageData, action, backgroundHexColor);
189+
return new ModalMessage(
190+
campaignMetadata, title, body, imageData, action, backgroundHexColor, data);
187191
}
188192
}
189193
}

0 commit comments

Comments
 (0)