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; List<UploadableFile> uploadableFiles;
private Callback callback; private Callback callback;
private OnThumbnailDeletedListener listener;
private ItemUploadThumbnailBinding binding; private ItemUploadThumbnailBinding binding;
public ThumbnailsAdapter(Callback callback) { public ThumbnailsAdapter(Callback callback) {
@ -45,6 +47,10 @@ class ThumbnailsAdapter extends RecyclerView.Adapter<ThumbnailsAdapter.ViewHolde
notifyDataSetChanged(); notifyDataSetChanged();
} }
public void setOnThumbnailDeletedListener(OnThumbnailDeletedListener listener) {
this.listener = listener;
}
@NonNull @NonNull
@Override @Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
@ -69,11 +75,14 @@ class ThumbnailsAdapter extends RecyclerView.Adapter<ThumbnailsAdapter.ViewHolde
SimpleDraweeView background; SimpleDraweeView background;
ImageView ivError; ImageView ivError;
ImageView ivCross;
public ViewHolder(@NonNull View itemView) { public ViewHolder(@NonNull View itemView) {
super(itemView); super(itemView);
rlContainer = binding.rlContainer; rlContainer = binding.rlContainer;
background = binding.ivThumbnail; background = binding.ivThumbnail;
ivError = binding.ivError; ivError = binding.ivError;
ivCross = binding.icCross;
} }
/** /**
@ -104,6 +113,12 @@ class ThumbnailsAdapter extends RecyclerView.Adapter<ThumbnailsAdapter.ViewHolde
rlContainer.setElevation(0); 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(); 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 javax.inject.Named;
import timber.log.Timber; 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 @Inject
ContributionController contributionController; ContributionController contributionController;
@ -199,6 +199,7 @@ public class UploadActivity extends BaseActivity implements UploadContract.View,
binding.rvThumbnails.setLayoutManager(new LinearLayoutManager(this, binding.rvThumbnails.setLayoutManager(new LinearLayoutManager(this,
LinearLayoutManager.HORIZONTAL, false)); LinearLayoutManager.HORIZONTAL, false));
thumbnailsAdapter = new ThumbnailsAdapter(() -> currentSelectedPosition); thumbnailsAdapter = new ThumbnailsAdapter(() -> currentSelectedPosition);
thumbnailsAdapter.setOnThumbnailDeletedListener(this);
binding.rvThumbnails.setAdapter(thumbnailsAdapter); binding.rvThumbnails.setAdapter(thumbnailsAdapter);
} }
@ -454,7 +455,7 @@ public class UploadActivity extends BaseActivity implements UploadContract.View,
.getQuantityString(R.plurals.upload_count_title, uploadableFiles.size(), uploadableFiles.size())); .getQuantityString(R.plurals.upload_count_title, uploadableFiles.size(), uploadableFiles.size()));
if(fragments==null){ if(fragments == null){
fragments = new ArrayList<>(); fragments = new ArrayList<>();
} }
@ -799,9 +800,15 @@ public class UploadActivity extends BaseActivity implements UploadContract.View,
fragments.get(index - 1).onBecameVisible(); fragments.get(index - 1).onBecameVisible();
((LinearLayoutManager) binding.rvThumbnails.getLayoutManager()) ((LinearLayoutManager) binding.rvThumbnails.getLayoutManager())
.scrollToPositionWithOffset((index > 3) ? index-2 : 0, 0); .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 * The adapter used to show image upload intermediate fragments
*/ */

View file

@ -138,9 +138,6 @@ public class UploadPresenter implements UploadContract.UserActionListener {
@Override @Override
public void deletePictureAtIndex(int index) { public void deletePictureAtIndex(int index) {
List<UploadableFile> uploadableFiles = view.getUploadableFiles(); 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); view.setImageCancelled(true);
repository.deletePicture(uploadableFiles.get(index).getFilePath()); repository.deletePicture(uploadableFiles.get(index).getFilePath());
if (uploadableFiles.size() == 1) { if (uploadableFiles.size() == 1) {
@ -156,7 +153,6 @@ public class UploadPresenter implements UploadContract.UserActionListener {
//In case lets update the number of uploadable media //In case lets update the number of uploadable media
view.updateTopCardTitle(); view.updateTopCardTitle();
view.highlightNextImageOnCancelledImage(index, uploadableFiles.size());
} }

View file

@ -26,4 +26,14 @@
android:visibility="gone" android:visibility="gone"
app:srcCompat="@drawable/ic_error_red_24dp" app:srcCompat="@drawable/ic_error_red_24dp"
tools:visibility="visible"/> 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> </RelativeLayout>

View file

@ -157,7 +157,6 @@ class UploadPresenterTest {
deletePictureBaseTest() deletePictureBaseTest()
uploadableFiles.add(uploadableFile) uploadableFiles.add(uploadableFile)
uploadPresenter.deletePictureAtIndex(0) uploadPresenter.deletePictureAtIndex(0)
verify(view).showHideTopCard(false)
verify(repository).deletePicture(ArgumentMatchers.anyString()) verify(repository).deletePicture(ArgumentMatchers.anyString())
} }
@ -169,7 +168,6 @@ class UploadPresenterTest {
deletePictureBaseTest() deletePictureBaseTest()
uploadableFiles.add(uploadableFile) uploadableFiles.add(uploadableFile)
uploadPresenter.deletePictureAtIndex(0) uploadPresenter.deletePictureAtIndex(0)
verify(view).showHideTopCard(false)
verify(repository).deletePicture(ArgumentMatchers.anyString()) 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).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() verify(view).finish()