Skip to content

Commit 5d6a6bf

Browse files
DownSample Upload image to be shown in UploadMediaDetailFragment to handle OOM, Bitmap Too large exception (commons-app#3830)
* Fixes commons-app#3829 * DownSample Upload image to be shown in UploadMediaDetailFragment to handle OOM, Bitmap Too large exception * removed unused imports, handled possible exceptions * Let Fresco handle the downsampling of image * invalidate in onTransformEnd * Expose an interface TransformationListener in ZoomableDraweeView to listen to transformation change end * removed photoView dependency * removed unused imports in ZoomableActivity * Bugfix, expand/collapse * changed functio name
1 parent e48dd4e commit 5d6a6bf

File tree

3 files changed

+177
-141
lines changed

3 files changed

+177
-141
lines changed

app/build.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ dependencies {
3737

3838
// UI
3939
implementation 'fr.avianey.com.viewpagerindicator:library:2.4.1.1@aar'
40-
implementation 'com.github.chrisbanes:PhotoView:2.0.0'
4140
implementation 'com.github.pedrovgs:renderers:3.3.3'
4241
implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:8.6.2'
4342
implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v8:0.11.0'

app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.java

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import android.annotation.SuppressLint;
66
import android.content.Context;
7+
import android.net.Uri;
78
import android.os.Bundle;
89
import android.text.TextUtils;
910
import android.util.DisplayMetrics;
@@ -23,13 +24,19 @@
2324
import butterknife.BindView;
2425
import butterknife.ButterKnife;
2526
import butterknife.OnClick;
26-
import com.github.chrisbanes.photoview.PhotoView;
27+
import com.facebook.drawee.backends.pipeline.Fresco;
28+
import com.facebook.drawee.drawable.ScalingUtils.ScaleType;
29+
import com.facebook.drawee.generic.GenericDraweeHierarchy;
30+
import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder;
31+
import com.facebook.drawee.interfaces.DraweeController;
2732
import com.jakewharton.rxbinding2.widget.RxTextView;
2833
import fr.free.nrw.commons.R;
2934
import fr.free.nrw.commons.Utils;
3035
import fr.free.nrw.commons.filepicker.UploadableFile;
3136
import fr.free.nrw.commons.kvstore.JsonKvStore;
3237
import fr.free.nrw.commons.location.LatLng;
38+
import fr.free.nrw.commons.media.zoomControllers.zoomable.DoubleTapGestureListener;
39+
import fr.free.nrw.commons.media.zoomControllers.zoomable.ZoomableDraweeView;
3340
import fr.free.nrw.commons.nearby.Place;
3441
import fr.free.nrw.commons.settings.Prefs;
3542
import fr.free.nrw.commons.upload.Description;
@@ -44,6 +51,7 @@
4451
import fr.free.nrw.commons.utils.ImageUtils;
4552
import fr.free.nrw.commons.utils.ViewUtil;
4653
import io.reactivex.disposables.Disposable;
54+
import java.io.File;
4755
import java.util.ArrayList;
4856
import java.util.Arrays;
4957
import java.util.List;
@@ -69,7 +77,7 @@ public class UploadMediaDetailFragment extends UploadBaseFragment implements
6977
@BindView(R.id.rv_descriptions)
7078
RecyclerView rvDescriptions;
7179
@BindView(R.id.backgroundImage)
72-
PhotoView photoViewBackgroundImage;
80+
ZoomableDraweeView photoViewBackgroundImage;
7381
@BindView(R.id.btn_next)
7482
AppCompatButton btnNext;
7583
@BindView(R.id.btn_previous)
@@ -164,11 +172,26 @@ private void init() {
164172
btnCopyPreviousTitleDesc.setVisibility(View.VISIBLE);
165173
}
166174

167-
attachImageViewScaleChangeListener();
168-
169175
addEtTitleTouchListener();
170176
}
171177

178+
private void showImageWithLocalUri(Uri imageUri) {
179+
if (imageUri != null) {
180+
GenericDraweeHierarchy hierarchy = GenericDraweeHierarchyBuilder.newInstance(getResources())
181+
.setActualImageScaleType(ScaleType.FIT_XY)
182+
.build();
183+
photoViewBackgroundImage.setHierarchy(hierarchy);
184+
photoViewBackgroundImage
185+
.setTapListener(new DoubleTapGestureListener(photoViewBackgroundImage));
186+
DraweeController controller = Fresco.newDraweeControllerBuilder()
187+
.setUri(Uri.fromFile(new File(imageUri.getPath())))
188+
.build();
189+
photoViewBackgroundImage.setTransformationListener(
190+
() -> expandCollapseMediaDetail(false));
191+
photoViewBackgroundImage.setController(controller);
192+
}
193+
}
194+
172195
/**
173196
* Handles the drawable click listener for Edit Text
174197
*/
@@ -200,17 +223,6 @@ private float convertDpToPixel(float dp, Context context) {
200223
return dp * ((float) context.getResources().getDisplayMetrics().densityDpi / DisplayMetrics.DENSITY_DEFAULT);
201224
}
202225

203-
/**
204-
* Attaches the scale change listener to the image view
205-
*/
206-
private void attachImageViewScaleChangeListener() {
207-
photoViewBackgroundImage.setOnScaleChangeListener(
208-
(scaleFactor, focusX, focusY) -> {
209-
//Whenever the uses plays with the image, lets collapse the media detail container
210-
expandCollapseLlMediaDetail(false);
211-
});
212-
}
213-
214226
/**
215227
* attach the presenter with the view
216228
*/
@@ -286,7 +298,7 @@ public void onImageProcessed(UploadItem uploadItem, Place place) {
286298
}
287299

288300
descriptions = uploadItem.getDescriptions();
289-
photoViewBackgroundImage.setImageURI(uploadItem.getMediaUri());
301+
showImageWithLocalUri(uploadItem.getMediaUri());
290302
setDescriptionsInAdapter(descriptions);
291303
}
292304

@@ -395,14 +407,17 @@ public void onDestroyView() {
395407

396408
@OnClick(R.id.rl_container_title)
397409
public void onRlContainerTitleClicked() {
398-
expandCollapseLlMediaDetail(!isExpanded);
410+
expandCollapseMediaDetail(!isExpanded);
399411
}
400412

401413
/**
402414
* show hide media detail based on
403415
* @param shouldExpand
404416
*/
405-
private void expandCollapseLlMediaDetail(boolean shouldExpand){
417+
private void expandCollapseMediaDetail(boolean shouldExpand){
418+
if (isExpanded == shouldExpand) {
419+
return;
420+
}
406421
llContainerMediaDetail.setVisibility(shouldExpand ? View.VISIBLE : View.GONE);
407422
isExpanded = !isExpanded;
408423
ibExpandCollapse.setRotation(ibExpandCollapse.getRotation() + 180);

0 commit comments

Comments
 (0)