Skip to content

Commit 3d1ffbb

Browse files
authored
Fixes #3479: Implement Progress Bar for Zoom Activity (#3481)
* ZoomableActivity: add hierarchy to view for displaying progress bar * CircularProgressBar: circular progress bar for ZoomableDraweeView * ZoomableActivity: add indeterministic loading spinner * activity_zoomable: add inderterministic Progressbar * remove circular progressbar and make changes to controller listener
1 parent 8a5944d commit 3d1ffbb

File tree

2 files changed

+49
-0
lines changed

2 files changed

+49
-0
lines changed

app/src/main/java/fr/free/nrw/commons/media/ZoomableActivity.java

+40
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,30 @@
66
import butterknife.BindView;
77
import butterknife.ButterKnife;
88
import fr.free.nrw.commons.R;
9+
import com.facebook.drawee.drawable.ProgressBarDrawable;
910
import fr.free.nrw.commons.media.zoomControllers.zoomable.DoubleTapGestureListener;
1011
import fr.free.nrw.commons.media.zoomControllers.zoomable.ZoomableDraweeView;
1112
import timber.log.Timber;
1213

1314
import android.graphics.Bitmap;
1415
import android.graphics.BitmapFactory;
16+
import android.graphics.drawable.Animatable;
1517
import android.net.Uri;
1618
import android.os.Bundle;
1719
import com.facebook.drawee.backends.pipeline.Fresco;
20+
import com.facebook.drawee.controller.BaseControllerListener;
21+
import com.facebook.drawee.controller.ControllerListener;
22+
import com.facebook.drawee.drawable.ScalingUtils;
23+
import com.facebook.drawee.generic.GenericDraweeHierarchy;
24+
import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder;
1825
import com.facebook.drawee.interfaces.DraweeController;
1926
import android.view.LayoutInflater;
2027
import android.view.View;
2128
import android.view.ViewGroup;
29+
import android.widget.ProgressBar;
2230

2331
import com.facebook.drawee.view.SimpleDraweeView;
32+
import com.facebook.imagepipeline.image.ImageInfo;
2433
import com.github.chrisbanes.photoview.PhotoView;
2534

2635
import java.io.InputStream;
@@ -32,6 +41,8 @@ public class ZoomableActivity extends AppCompatActivity {
3241

3342
@BindView(R.id.zoomable)
3443
ZoomableDraweeView photo;
44+
@BindView(R.id.zoom_progress_bar)
45+
ProgressBar spinner;
3546

3647
@Override
3748
protected void onCreate(Bundle savedInstanceState) {
@@ -48,13 +59,42 @@ protected void onCreate(Bundle savedInstanceState) {
4859
init();
4960
}
5061

62+
/**
63+
* Two types of loading indicators have been added to the zoom activity:
64+
* 1. An Indeterminate spinner for showing the time lapsed between dispatch of the image request
65+
* and starting to receiving the image.
66+
* 2. ProgressBarDrawable that reflects how much image has been downloaded
67+
*/
68+
private final ControllerListener loadingListener = new BaseControllerListener<ImageInfo>() {
69+
@Override
70+
public void onSubmit(String id, Object callerContext) {
71+
// Sometimes the spinner doesn't appear when rapidly switching between images, this fixes that
72+
spinner.setVisibility(View.VISIBLE);
73+
}
74+
75+
@Override
76+
public void onIntermediateImageSet(String id, @Nullable ImageInfo imageInfo) {
77+
spinner.setVisibility(View.GONE);
78+
}
79+
@Override
80+
public void onFinalImageSet(String id, @Nullable ImageInfo imageInfo, @Nullable Animatable animatable) {
81+
spinner.setVisibility(View.GONE);
82+
}
83+
};
5184
private void init() {
5285
if( imageUri != null ) {
86+
GenericDraweeHierarchy hierarchy = GenericDraweeHierarchyBuilder.newInstance(getResources())
87+
.setActualImageScaleType(ScalingUtils.ScaleType.FIT_CENTER)
88+
.setProgressBarImage(new ProgressBarDrawable())
89+
.setProgressBarImageScaleType(ScalingUtils.ScaleType.FIT_CENTER)
90+
.build();
91+
photo.setHierarchy(hierarchy);
5392
photo.setAllowTouchInterceptionWhileZoomed(true);
5493
photo.setIsLongpressEnabled(false);
5594
photo.setTapListener(new DoubleTapGestureListener(photo));
5695
DraweeController controller = Fresco.newDraweeControllerBuilder()
5796
.setUri(imageUri)
97+
.setControllerListener(loadingListener)
5898
.build();
5999
photo.setController(controller);
60100
}

app/src/main/res/layout/activity_zoomable.xml

+9
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,14 @@
1313
android:layout_width="match_parent"
1414
app:actualImageScaleType="fitCenter"
1515
/>
16+
<ProgressBar
17+
android:layout_width="@dimen/dimen_72"
18+
android:layout_height="@dimen/dimen_72"
19+
android:id="@+id/zoom_progress_bar"
20+
app:layout_constraintBottom_toBottomOf="parent"
21+
app:layout_constraintLeft_toLeftOf="parent"
22+
app:layout_constraintRight_toRightOf="parent"
23+
app:layout_constraintTop_toTopOf="parent"
24+
/>
1625

1726
</androidx.constraintlayout.widget.ConstraintLayout>

0 commit comments

Comments
 (0)