Remove Image From Upload Wizard (#5636)

* Added Remove Icon to Image Thumnails

* fix

* fix

* fix tests
This commit is contained in:
Shashank Kumar 2024-03-24 14:02:56 +05:30 committed by GitHub
parent 78a53fd40d
commit f404ac9b47
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 43 additions and 8 deletions

View file

@ -28,6 +28,8 @@ class ThumbnailsAdapter extends RecyclerView.Adapter<ThumbnailsAdapter.ViewHolde
List<UploadableFile> uploadableFiles;
private Callback callback;
private OnThumbnailDeletedListener listener;
private ItemUploadThumbnailBinding binding;
public ThumbnailsAdapter(Callback callback) {
@ -45,6 +47,10 @@ class ThumbnailsAdapter extends RecyclerView.Adapter<ThumbnailsAdapter.ViewHolde
notifyDataSetChanged();
}
public void setOnThumbnailDeletedListener(OnThumbnailDeletedListener listener) {
this.listener = listener;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
@ -69,11 +75,14 @@ class ThumbnailsAdapter extends RecyclerView.Adapter<ThumbnailsAdapter.ViewHolde
SimpleDraweeView background;
ImageView ivError;
ImageView ivCross;
public ViewHolder(@NonNull View itemView) {
super(itemView);
rlContainer = binding.rlContainer;
background = binding.ivThumbnail;
ivError = binding.ivError;
ivCross = binding.icCross;
}
/**
@ -104,6 +113,12 @@ class ThumbnailsAdapter extends RecyclerView.Adapter<ThumbnailsAdapter.ViewHolde
rlContainer.setElevation(0);
}
}
ivCross.setOnClickListener(v -> {
if(listener != null) {
listener.onThumbnailDeleted(position);
}
});
}
}
@ -114,4 +129,13 @@ class ThumbnailsAdapter extends RecyclerView.Adapter<ThumbnailsAdapter.ViewHolde
int getCurrentSelectedFilePosition();
}
/**
* Interface to listen to thumbnail delete events
*/
public interface OnThumbnailDeletedListener {
void onThumbnailDeleted(int position);
}
}

View file

@ -70,7 +70,7 @@ import javax.inject.Inject;
import javax.inject.Named;
import timber.log.Timber;
public class UploadActivity extends BaseActivity implements UploadContract.View, UploadBaseFragment.Callback {
public class UploadActivity extends BaseActivity implements UploadContract.View, UploadBaseFragment.Callback, ThumbnailsAdapter.OnThumbnailDeletedListener {
@Inject
ContributionController contributionController;
@ -199,6 +199,7 @@ public class UploadActivity extends BaseActivity implements UploadContract.View,
binding.rvThumbnails.setLayoutManager(new LinearLayoutManager(this,
LinearLayoutManager.HORIZONTAL, false));
thumbnailsAdapter = new ThumbnailsAdapter(() -> currentSelectedPosition);
thumbnailsAdapter.setOnThumbnailDeletedListener(this);
binding.rvThumbnails.setAdapter(thumbnailsAdapter);
}
@ -799,9 +800,15 @@ public class UploadActivity extends BaseActivity implements UploadContract.View,
fragments.get(index - 1).onBecameVisible();
((LinearLayoutManager) binding.rvThumbnails.getLayoutManager())
.scrollToPositionWithOffset((index > 3) ? index-2 : 0, 0);
binding.llContainerTopCard.setVisibility(View.VISIBLE);
}
}
@Override
public void onThumbnailDeleted(int position) {
presenter.deletePictureAtIndex(position);
}
/**
* The adapter used to show image upload intermediate fragments
*/

View file

@ -138,9 +138,6 @@ public class UploadPresenter implements UploadContract.UserActionListener {
@Override
public void deletePictureAtIndex(int index) {
List<UploadableFile> uploadableFiles = view.getUploadableFiles();
if (index == uploadableFiles.size() - 1) {//If the next fragment to be shown is not one of the MediaDetailsFragment, lets hide the top card
view.showHideTopCard(false);
}
view.setImageCancelled(true);
repository.deletePicture(uploadableFiles.get(index).getFilePath());
if (uploadableFiles.size() == 1) {
@ -156,7 +153,6 @@ public class UploadPresenter implements UploadContract.UserActionListener {
//In case lets update the number of uploadable media
view.updateTopCardTitle();
view.highlightNextImageOnCancelledImage(index, uploadableFiles.size());
}

View file

@ -26,4 +26,14 @@
android:visibility="gone"
app:srcCompat="@drawable/ic_error_red_24dp"
tools:visibility="visible"/>
<ImageView
android:id="@+id/ic_cross"
android:layout_width="@dimen/half_standard_height"
android:layout_height="@dimen/half_standard_height"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_gravity="end"
app:srcCompat="@drawable/ic_cancel_white"
tools:visibility="visible"/>
</RelativeLayout>

View file

@ -157,7 +157,6 @@ class UploadPresenterTest {
deletePictureBaseTest()
uploadableFiles.add(uploadableFile)
uploadPresenter.deletePictureAtIndex(0)
verify(view).showHideTopCard(false)
verify(repository).deletePicture(ArgumentMatchers.anyString())
}
@ -169,7 +168,6 @@ class UploadPresenterTest {
deletePictureBaseTest()
uploadableFiles.add(uploadableFile)
uploadPresenter.deletePictureAtIndex(0)
verify(view).showHideTopCard(false)
verify(repository).deletePicture(ArgumentMatchers.anyString())
verify(view).showMessage(ArgumentMatchers.anyInt())//As there is only one while which we are asking for deletion, upload should be cancelled and this flow should be triggered
verify(view).finish()