Skip to content

Commit 036605d

Browse files
defHLTfacebook-github-bot
authored andcommitted
Drawee: support multiple controller listeners 2
Reviewed By: oprisnik Differential Revision: D21763220 fbshipit-source-id: 25745b235e9cd5e53c5f9a334fc9f71e16cbe851
1 parent e442337 commit 036605d

File tree

6 files changed

+34
-15
lines changed

6 files changed

+34
-15
lines changed

drawee-backends/drawee-pipeline/src/main/java/com/facebook/drawee/backends/pipeline/PipelineDraweeControllerBuilder.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.facebook.drawee.controller.AbstractDraweeControllerBuilder;
2121
import com.facebook.drawee.controller.ControllerListener;
2222
import com.facebook.drawee.interfaces.DraweeController;
23+
import com.facebook.fresco.ui.common.ControllerListener2;
2324
import com.facebook.imagepipeline.cache.CacheKeyFactory;
2425
import com.facebook.imagepipeline.common.RotationOptions;
2526
import com.facebook.imagepipeline.core.ImagePipeline;
@@ -56,8 +57,9 @@ public PipelineDraweeControllerBuilder(
5657
Context context,
5758
PipelineDraweeControllerFactory pipelineDraweeControllerFactory,
5859
ImagePipeline imagePipeline,
59-
Set<ControllerListener> boundControllerListeners) {
60-
super(context, boundControllerListeners);
60+
Set<ControllerListener> boundControllerListeners,
61+
Set<ControllerListener2> boundControllerListeners2) {
62+
super(context, boundControllerListeners, boundControllerListeners2);
6163
mImagePipeline = imagePipeline;
6264
mPipelineDraweeControllerFactory = pipelineDraweeControllerFactory;
6365
}

drawee-backends/drawee-pipeline/src/main/java/com/facebook/drawee/backends/pipeline/PipelineDraweeControllerBuilderSupplier.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.facebook.drawee.backends.pipeline.info.ImagePerfDataListener;
1414
import com.facebook.drawee.components.DeferredReleaser;
1515
import com.facebook.drawee.controller.ControllerListener;
16+
import com.facebook.fresco.ui.common.ControllerListener2;
1617
import com.facebook.imagepipeline.core.ImagePipeline;
1718
import com.facebook.imagepipeline.core.ImagePipelineFactory;
1819
import java.util.Set;
@@ -25,6 +26,7 @@ public class PipelineDraweeControllerBuilderSupplier
2526
private final ImagePipeline mImagePipeline;
2627
private final PipelineDraweeControllerFactory mPipelineDraweeControllerFactory;
2728
private final Set<ControllerListener> mBoundControllerListeners;
29+
private final Set<ControllerListener2> mBoundControllerListeners2;
2830
private final @Nullable ImagePerfDataListener mDefaultImagePerfDataListener;
2931

3032
public PipelineDraweeControllerBuilderSupplier(Context context) {
@@ -40,13 +42,14 @@ public PipelineDraweeControllerBuilderSupplier(
4042
Context context,
4143
ImagePipelineFactory imagePipelineFactory,
4244
@Nullable DraweeConfig draweeConfig) {
43-
this(context, imagePipelineFactory, null, draweeConfig);
45+
this(context, imagePipelineFactory, null, null, draweeConfig);
4446
}
4547

4648
public PipelineDraweeControllerBuilderSupplier(
4749
Context context,
4850
ImagePipelineFactory imagePipelineFactory,
4951
Set<ControllerListener> boundControllerListeners,
52+
Set<ControllerListener2> boundControllerListeners2,
5053
@Nullable DraweeConfig draweeConfig) {
5154
mContext = context;
5255
mImagePipeline = imagePipelineFactory.getImagePipeline();
@@ -65,6 +68,7 @@ public PipelineDraweeControllerBuilderSupplier(
6568
draweeConfig != null ? draweeConfig.getCustomDrawableFactories() : null,
6669
draweeConfig != null ? draweeConfig.getDebugOverlayEnabledSupplier() : null);
6770
mBoundControllerListeners = boundControllerListeners;
71+
mBoundControllerListeners2 = boundControllerListeners2;
6872

6973
mDefaultImagePerfDataListener =
7074
draweeConfig != null ? draweeConfig.getImagePerfDataListener() : null;
@@ -74,7 +78,11 @@ public PipelineDraweeControllerBuilderSupplier(
7478
public PipelineDraweeControllerBuilder get() {
7579
PipelineDraweeControllerBuilder pipelineDraweeControllerBuilder =
7680
new PipelineDraweeControllerBuilder(
77-
mContext, mPipelineDraweeControllerFactory, mImagePipeline, mBoundControllerListeners);
81+
mContext,
82+
mPipelineDraweeControllerFactory,
83+
mImagePipeline,
84+
mBoundControllerListeners,
85+
mBoundControllerListeners2);
7886
return pipelineDraweeControllerBuilder.setPerfDataListener(mDefaultImagePerfDataListener);
7987
}
8088
}

drawee-backends/drawee-pipeline/src/main/java/com/facebook/drawee/backends/pipeline/info/ImagePerfMonitor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public void setEnabled(boolean enabled) {
8484
mPipelineDraweeController.removeImageOriginListener(mImageOriginListener);
8585
}
8686
if (mImagePerfControllerListener2 != null) {
87-
mPipelineDraweeController.removeControllerListener2();
87+
mPipelineDraweeController.removeControllerListener2(mImagePerfControllerListener2);
8888
}
8989
if (mForwardingRequestListener != null) {
9090
mPipelineDraweeController.removeRequestListener(mForwardingRequestListener);

drawee-backends/drawee-pipeline/src/test/java/com/facebook/drawee/backends/pipeline/info/ImagePerfMonitorTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public void testEnableDisable() {
6767
verify(mController).addRequestListener(any(RequestListener.class));
6868
verify(mController).getId();
6969
verify(mController).removeImageOriginListener(any(ImagePerfImageOriginListener.class));
70-
verify(mController).removeControllerListener2();
70+
verify(mController).removeControllerListener2(any(ImagePerfControllerListener2.class));
7171
verify(mController).removeRequestListener(any(RequestListener.class));
7272
verifyNoMoreInteractions(mController);
7373
}

drawee/src/main/java/com/facebook/drawee/controller/AbstractDraweeController.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import com.facebook.fresco.ui.common.BaseControllerListener2;
3434
import com.facebook.fresco.ui.common.ControllerListener2;
3535
import com.facebook.fresco.ui.common.ControllerListener2.Extras;
36+
import com.facebook.fresco.ui.common.ForwardingControllerListener2;
3637
import com.facebook.fresco.ui.common.LoggingListener;
3738
import com.facebook.imagepipeline.systrace.FrescoSystrace;
3839
import com.facebook.infer.annotation.ReturnsOwnership;
@@ -93,7 +94,8 @@ public static <INFO> InternalForwardingListener<INFO> createInternal(
9394
private @Nullable GestureDetector mGestureDetector;
9495
private @Nullable ControllerViewportVisibilityListener mControllerViewportVisibilityListener;
9596
protected @Nullable ControllerListener<INFO> mControllerListener;
96-
protected @Nullable ControllerListener2 mControllerListener2;
97+
protected ForwardingControllerListener2<INFO> mControllerListener2 =
98+
new ForwardingControllerListener2<>();
9799
protected @Nullable LoggingListener mLoggingListener;
98100

99101
// Hierarchy
@@ -296,12 +298,12 @@ public void addControllerListener(ControllerListener<? super INFO> controllerLis
296298
mControllerListener = (ControllerListener<INFO>) controllerListener;
297299
}
298300

299-
public void addControllerListener2(ControllerListener2 controllerListener2) {
300-
mControllerListener2 = controllerListener2;
301+
public void addControllerListener2(ControllerListener2<INFO> controllerListener2) {
302+
mControllerListener2.addListener(controllerListener2);
301303
}
302304

303-
public void removeControllerListener2() {
304-
mControllerListener2 = BaseControllerListener2.getNoOpListener();
305+
public void removeControllerListener2(ControllerListener2<INFO> controllerListener2) {
306+
mControllerListener2.removeListener(controllerListener2);
305307
}
306308

307309
public void setLoggingListener(final LoggingListener loggingListener) {
@@ -333,9 +335,6 @@ protected ControllerListener<INFO> getControllerListener() {
333335
}
334336

335337
protected ControllerListener2 getControllerListener2() {
336-
if (mControllerListener2 == null) {
337-
mControllerListener2 = BaseControllerListener2.getNoOpListener();
338-
}
339338
return mControllerListener2;
340339
}
341340

drawee/src/main/java/com/facebook/drawee/controller/AbstractDraweeControllerBuilder.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.facebook.drawee.gestures.GestureDetector;
2020
import com.facebook.drawee.interfaces.DraweeController;
2121
import com.facebook.drawee.interfaces.SimpleDraweeControllerBuilder;
22+
import com.facebook.fresco.ui.common.ControllerListener2;
2223
import com.facebook.fresco.ui.common.LoggingListener;
2324
import com.facebook.imagepipeline.systrace.FrescoSystrace;
2425
import com.facebook.infer.annotation.ReturnsOwnership;
@@ -52,6 +53,7 @@ public void onFinalImageSet(String id, @Nullable Object info, @Nullable Animatab
5253
// components
5354
private final Context mContext;
5455
private final Set<ControllerListener> mBoundControllerListeners;
56+
private final Set<ControllerListener2> mBoundControllerListeners2;
5557

5658
// builder parameters
5759
private @Nullable Object mCallerContext;
@@ -73,9 +75,12 @@ public void onFinalImageSet(String id, @Nullable Object info, @Nullable Animatab
7375
private static final AtomicLong sIdCounter = new AtomicLong();
7476

7577
protected AbstractDraweeControllerBuilder(
76-
Context context, Set<ControllerListener> boundControllerListeners) {
78+
Context context,
79+
Set<ControllerListener> boundControllerListeners,
80+
Set<ControllerListener2> boundControllerListeners2) {
7781
mContext = context;
7882
mBoundControllerListeners = boundControllerListeners;
83+
mBoundControllerListeners2 = boundControllerListeners2;
7984
init();
8085
}
8186

@@ -431,6 +436,11 @@ protected void maybeAttachListeners(AbstractDraweeController controller) {
431436
controller.addControllerListener(listener);
432437
}
433438
}
439+
if (mBoundControllerListeners2 != null) {
440+
for (ControllerListener2<INFO> listener : mBoundControllerListeners2) {
441+
controller.addControllerListener2(listener);
442+
}
443+
}
434444
if (mControllerListener != null) {
435445
controller.addControllerListener(mControllerListener);
436446
}

0 commit comments

Comments
 (0)