mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-26 12:23:58 +01:00
Remove Image From Upload Wizard (#5636)
* Added Remove Icon to Image Thumnails * fix * fix * fix tests
This commit is contained in:
parent
78a53fd40d
commit
f404ac9b47
5 changed files with 43 additions and 8 deletions
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -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());
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue