Skip to content

Commit 9385b50

Browse files
authored
Merge 9d54fca into 833a1cc
2 parents 833a1cc + 9d54fca commit 9385b50

File tree

9 files changed

+48
-38
lines changed

9 files changed

+48
-38
lines changed

firebase-inappmessaging-display/CHANGELOG.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# Unreleased
2-
2+
* [fixed] Fixed FirebaseInAppMessagingDisplayErrorListener not being called
3+
(GitHub [#5644](//github.com/firebase/firebase-android-sdk/issues/5644))
34

45
# 20.4.0
56
* [changed] Added Kotlin extensions (KTX) APIs from `com.google.firebase:firebase-inappmessaging-display-ktx`

firebase-inappmessaging-display/src/main/java/com/google/firebase/inappmessaging/display/FirebaseInAppMessagingDisplay.java

+16-9
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import com.google.firebase.inappmessaging.display.internal.FiamImageLoader;
4141
import com.google.firebase.inappmessaging.display.internal.FiamWindowManager;
4242
import com.google.firebase.inappmessaging.display.internal.FirebaseInAppMessagingDisplayImpl;
43+
import com.google.firebase.inappmessaging.display.internal.GlideErrorListener;
4344
import com.google.firebase.inappmessaging.display.internal.InAppMessageLayoutConfig;
4445
import com.google.firebase.inappmessaging.display.internal.Logging;
4546
import com.google.firebase.inappmessaging.display.internal.RenewableTimer;
@@ -144,9 +145,18 @@ public void testMessage(
144145
Activity activity,
145146
InAppMessage inAppMessage,
146147
FirebaseInAppMessagingDisplayCallbacks callbacks) {
148+
setInAppMessageAndCallbacks(inAppMessage, callbacks);
149+
showActiveFiam(activity);
150+
}
151+
152+
private void setInAppMessageAndCallbacks(
153+
InAppMessage inAppMessage, FirebaseInAppMessagingDisplayCallbacks callbacks) {
147154
this.inAppMessage = inAppMessage;
148155
this.callbacks = callbacks;
149-
showActiveFiam(activity);
156+
}
157+
158+
private void clearInAppMessageAndCallbacks() {
159+
setInAppMessageAndCallbacks(null, null);
150160
}
151161

152162
/**
@@ -204,8 +214,7 @@ private void bindFiamToActivity(Activity activity) {
204214
Logging.logd("Active FIAM exists. Skipping trigger");
205215
return;
206216
}
207-
inAppMessage = iam;
208-
callbacks = cb;
217+
setInAppMessageAndCallbacks(iam, cb);
209218
showActiveFiam(activity);
210219
});
211220
// set the current activity to be the one passed in so that we know not to bind again to the
@@ -329,8 +338,7 @@ public void onClick(View v) {
329338
// Ensure that we remove the displayed FIAM, and ensure that on re-load, the message
330339
// isn't re-displayed
331340
removeDisplayedFiam(activity);
332-
inAppMessage = null;
333-
callbacks = null;
341+
clearInAppMessageAndCallbacks();
334342
}
335343
};
336344
} else {
@@ -432,8 +440,7 @@ public void onError(Exception e) {
432440
.removeGlobalOnLayoutListener(layoutListener);
433441
}
434442
cancelTimers(); // Not strictly necessary.
435-
inAppMessage = null;
436-
callbacks = null;
443+
clearInAppMessageAndCallbacks();
437444
}
438445
});
439446
}
@@ -492,6 +499,7 @@ private void loadNullableImage(
492499
if (isValidImageData(imageData)) {
493500
imageLoader
494501
.load(imageData.getImageUrl())
502+
.addErrorListener(new GlideErrorListener(inAppMessage, callbacks))
495503
.tag(activity.getClass())
496504
.placeholder(R.drawable.image_placeholder)
497505
.into(fiam.getImageView(), callback);
@@ -506,8 +514,7 @@ private void dismissFiam(Activity activity) {
506514
Logging.logd("Dismissing fiam");
507515
notifyFiamDismiss();
508516
removeDisplayedFiam(activity);
509-
inAppMessage = null;
510-
callbacks = null;
517+
clearInAppMessageAndCallbacks();
511518
}
512519

513520
private void removeDisplayedFiam(Activity activity) {

firebase-inappmessaging-display/src/main/java/com/google/firebase/inappmessaging/display/internal/FiamImageLoader.java

+5
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,11 @@ public FiamImageRequestCreator placeholder(int placeholderResId) {
9797
return this;
9898
}
9999

100+
public FiamImageRequestCreator addErrorListener(GlideErrorListener glideErrorListener) {
101+
requestBuilder.addListener(glideErrorListener);
102+
return this;
103+
}
104+
100105
public FiamImageRequestCreator tag(Class c) {
101106
tag = c.getSimpleName();
102107
checkAndTag();

firebase-inappmessaging-display/src/main/java/com/google/firebase/inappmessaging/display/internal/GlideErrorListener.java

+8-20
Original file line numberDiff line numberDiff line change
@@ -14,40 +14,28 @@
1414

1515
package com.google.firebase.inappmessaging.display.internal;
1616

17-
// Picasso 's api forces us to listen to errors only using a global listener set on the picasso
18-
// singleton. Since we initialize picasso from a static context and the in app message param to the
19-
// logError method is not available statically, we are forced to introduce a error listener with
20-
// mutable state so that the error from picasso can be translated to a logError on
21-
// fiam headless, with the in app message as a parameter
22-
17+
import android.graphics.drawable.Drawable;
2318
import androidx.annotation.Nullable;
2419
import com.bumptech.glide.load.DataSource;
2520
import com.bumptech.glide.load.engine.GlideException;
2621
import com.bumptech.glide.request.RequestListener;
2722
import com.bumptech.glide.request.target.Target;
2823
import com.google.firebase.inappmessaging.FirebaseInAppMessagingDisplayCallbacks;
29-
import com.google.firebase.inappmessaging.display.internal.injection.scopes.FirebaseAppScope;
3024
import com.google.firebase.inappmessaging.model.InAppMessage;
31-
import javax.inject.Inject;
32-
33-
/** @hide */
34-
@FirebaseAppScope
35-
public class GlideErrorListener implements RequestListener<Object> {
36-
private InAppMessage inAppMessage;
37-
private FirebaseInAppMessagingDisplayCallbacks displayCallbacks;
3825

39-
@Inject
40-
GlideErrorListener() {}
26+
public class GlideErrorListener implements RequestListener<Drawable> {
27+
private final InAppMessage inAppMessage;
28+
private final FirebaseInAppMessagingDisplayCallbacks displayCallbacks;
4129

42-
public void setInAppMessage(
30+
public GlideErrorListener(
4331
InAppMessage inAppMessage, FirebaseInAppMessagingDisplayCallbacks displayCallbacks) {
4432
this.inAppMessage = inAppMessage;
4533
this.displayCallbacks = displayCallbacks;
4634
}
4735

4836
@Override
4937
public boolean onLoadFailed(
50-
@Nullable GlideException e, Object model, Target<Object> target, boolean isFirstResource) {
38+
@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
5139
Logging.logd("Image Downloading Error : " + e.getMessage() + ":" + e.getCause());
5240

5341
if (inAppMessage != null && displayCallbacks != null) {
@@ -67,9 +55,9 @@ public boolean onLoadFailed(
6755

6856
@Override
6957
public boolean onResourceReady(
70-
Object resource,
58+
Drawable resource,
7159
Object model,
72-
Target<Object> target,
60+
Target<Drawable> target,
7361
DataSource dataSource,
7462
boolean isFirstResource) {
7563
Logging.logd("Image Downloading Success : " + resource);

firebase-inappmessaging-display/src/main/java/com/google/firebase/inappmessaging/display/internal/injection/components/AppComponent.java

-3
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
import com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplay;
1818
import com.google.firebase.inappmessaging.display.internal.FiamImageLoader;
19-
import com.google.firebase.inappmessaging.display.internal.GlideErrorListener;
2019
import com.google.firebase.inappmessaging.display.internal.injection.modules.GlideModule;
2120
import com.google.firebase.inappmessaging.display.internal.injection.modules.HeadlessInAppMessagingModule;
2221
import com.google.firebase.inappmessaging.display.internal.injection.scopes.FirebaseAppScope;
@@ -31,7 +30,5 @@ public interface AppComponent {
3130
@FirebaseAppScope
3231
FirebaseInAppMessagingDisplay providesFirebaseInAppMessagingUI();
3332

34-
GlideErrorListener glideErrorListener();
35-
3633
FiamImageLoader fiamImageLoader();
3734
}

firebase-inappmessaging-display/src/main/java/com/google/firebase/inappmessaging/display/internal/injection/modules/GlideModule.java

+2-4
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import android.app.Application;
1818
import com.bumptech.glide.Glide;
1919
import com.bumptech.glide.RequestManager;
20-
import com.google.firebase.inappmessaging.display.internal.GlideErrorListener;
2120
import com.google.firebase.inappmessaging.display.internal.injection.scopes.FirebaseAppScope;
2221
import dagger.Module;
2322
import dagger.Provides;
@@ -27,8 +26,7 @@
2726
public class GlideModule {
2827
@Provides
2928
@FirebaseAppScope
30-
RequestManager providesGlideRequestManager(
31-
Application application, GlideErrorListener glideErrorListener) {
32-
return Glide.with(application).addDefaultRequestListener(glideErrorListener);
29+
RequestManager providesGlideRequestManager(Application application) {
30+
return Glide.with(application);
3331
}
3432
}

firebase-inappmessaging-display/src/test/java/com/google/firebase/inappmessaging/display/FirebaseInAppMessagingDisplayTest.java

+5
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import static org.mockito.ArgumentMatchers.any;
2727
import static org.mockito.ArgumentMatchers.anyLong;
2828
import static org.mockito.ArgumentMatchers.eq;
29+
import static org.mockito.ArgumentMatchers.refEq;
2930
import static org.mockito.Mockito.atLeastOnce;
3031
import static org.mockito.Mockito.doReturn;
3132
import static org.mockito.Mockito.mock;
@@ -61,6 +62,7 @@
6162
import com.google.firebase.inappmessaging.display.internal.FiamImageLoader;
6263
import com.google.firebase.inappmessaging.display.internal.FiamImageLoader.Callback;
6364
import com.google.firebase.inappmessaging.display.internal.FiamWindowManager;
65+
import com.google.firebase.inappmessaging.display.internal.GlideErrorListener;
6466
import com.google.firebase.inappmessaging.display.internal.InAppMessageLayoutConfig;
6567
import com.google.firebase.inappmessaging.display.internal.RenewableTimer;
6668
import com.google.firebase.inappmessaging.display.internal.bindingwrappers.BannerBindingWrapper;
@@ -419,6 +421,8 @@ public void streamListener_whenImageUrlExists_loadsImage() {
419421

420422
verify(fiamImageRequestCreator).tag(TestActivity.class);
421423
verify(fiamImageRequestCreator).placeholder(R.drawable.image_placeholder);
424+
verify(fiamImageRequestCreator)
425+
.addErrorListener(refEq(new GlideErrorListener(IMAGE_MESSAGE_MODEL, callbacks)));
422426
verify(fiamImageRequestCreator).into(any(ImageView.class), any(Callback.class));
423427
}
424428

@@ -428,6 +432,7 @@ public void streamListener_whenNoImageUrlExists_doesNotLoadImage() {
428432
listener.displayMessage(null, callbacks);
429433
verify(fiamImageRequestCreator, times(0)).tag(TestActivity.class);
430434
verify(fiamImageRequestCreator, times(0)).placeholder(R.drawable.image_placeholder);
435+
verify(fiamImageRequestCreator, times(0)).addErrorListener(any(GlideErrorListener.class));
431436
verify(fiamImageRequestCreator, times(0)).into(any(ImageView.class), any(Callback.class));
432437
}
433438

firebase-inappmessaging-display/src/test/java/com/google/firebase/inappmessaging/display/internal/FiamImageLoaderTest.java

+8
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,14 @@ public void placeholder_setsPlaceholderOnUnderlyingRequestCreator() {
6464
verify(requestBuilder).placeholder(1);
6565
}
6666

67+
@Test
68+
public void addErrorListener_setsErrorListenerOnUnderlyingRequestCreator() {
69+
FiamImageLoader.FiamImageRequestCreator fiamImageRequestCreator = imageLoader.load(IMAGE_URL);
70+
GlideErrorListener errorListener = new GlideErrorListener(null, null);
71+
fiamImageRequestCreator.addErrorListener(errorListener);
72+
verify(requestBuilder).addListener(errorListener);
73+
}
74+
6775
@Test
6876
public void tag_tagsUnderlyingRequestCreator() {
6977
ImageView imageView = mock(ImageView.class);

firebase-inappmessaging/CHANGELOG.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# Unreleased
2-
2+
* [fixed] Fixed FirebaseInAppMessagingDisplayErrorListener not being called
3+
(GitHub [#5644](//github.com/firebase/firebase-android-sdk/issues/5644))
34

45
# 20.4.0
56
* [changed] Added Kotlin extensions (KTX) APIs from `com.google.firebase:firebase-inappmessaging-ktx`

0 commit comments

Comments
 (0)