From 423ecc003bd4994203449da70abb7a2b7e506e50 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Tue, 5 Feb 2019 16:53:12 -0200 Subject: [PATCH] [android] Get notified when all image previews have been loaded Also fix crash when attaching image fails --- .../briar/android/view/ImagePreview.java | 7 ++++++ .../android/view/ImagePreviewAdapter.java | 1 + .../android/view/ImagePreviewViewHolder.java | 3 ++- .../view/TextAttachmentController.java | 24 ++++++++++++++++++- 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/view/ImagePreview.java b/briar-android/src/main/java/org/briarproject/briar/android/view/ImagePreview.java index 8921b668c..f4158a495 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/view/ImagePreview.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/view/ImagePreview.java @@ -79,6 +79,13 @@ public class ImagePreview extends ConstraintLayout { interface ImagePreviewListener { + void onPreviewLoaded(); + + /** + * Called when Glide can't load a preview image. + * + * Warning: Glide may call this multiple times. + */ void onUriError(Uri uri); void onCancel(); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/view/ImagePreviewAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/view/ImagePreviewAdapter.java index 20bf9d4c3..a6508e4eb 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/view/ImagePreviewAdapter.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/view/ImagePreviewAdapter.java @@ -54,6 +54,7 @@ class ImagePreviewAdapter extends Adapter { void removeUri(Uri uri) { int pos = items.indexOf(uri); + if (pos == -1) return; items.remove(uri); notifyItemRemoved(pos); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/view/ImagePreviewViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/view/ImagePreviewViewHolder.java index d63569024..c16ce14ca 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/view/ImagePreviewViewHolder.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/view/ImagePreviewViewHolder.java @@ -54,8 +54,8 @@ class ImagePreviewViewHolder extends ViewHolder { public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) { - listener.onUriError(uri); progressBar.setVisibility(INVISIBLE); + listener.onUriError(uri); return false; } @@ -64,6 +64,7 @@ class ImagePreviewViewHolder extends ViewHolder { Object model, Target target, DataSource dataSource, boolean isFirstResource) { progressBar.setVisibility(INVISIBLE); + listener.onPreviewLoaded(); return false; } }) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/view/TextAttachmentController.java b/briar-android/src/main/java/org/briarproject/briar/android/view/TextAttachmentController.java index 6248b6669..c3afded7a 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/view/TextAttachmentController.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/view/TextAttachmentController.java @@ -54,6 +54,7 @@ public class TextAttachmentController extends TextSendController private CharSequence textHint; private boolean hasImageSupport = false; private List imageUris = emptyList(); + private int previewsLoaded = 0; public TextAttachmentController(TextInputView v, ImagePreview imagePreview, SendListener listener, AttachImageListener imageListener) { @@ -185,6 +186,8 @@ public class TextAttachmentController extends TextSendController imageUris = emptyList(); // show the image button again, so images can get attached showImageButton(true); + // no preview has been loaded + previewsLoaded = 0; } @Override @@ -204,21 +207,40 @@ public class TextAttachmentController extends TextSendController return state.getSuperState(); } + @Override + public void onPreviewLoaded() { + previewsLoaded++; + checkAllPreviewsLoaded(); + } + @Override public void onUriError(Uri uri) { - imageUris.remove(uri); + boolean removed = imageUris.remove(uri); + if (!removed) { + // we have removed this Uri already, do not remove it again + return; + } imagePreview.removeUri(uri); if (imageUris.isEmpty()) onCancel(); Toast.makeText(textInput.getContext(), R.string.image_attach_error, LENGTH_LONG).show(); + checkAllPreviewsLoaded(); } @Override public void onCancel() { textInput.clearText(); + sendButton.setEnabled(true); reset(); } + private void checkAllPreviewsLoaded() { + if (previewsLoaded == imageUris.size()) { + // all previews were loaded + // TODO allow sending + } + } + public void showImageOnboarding(Activity activity, Runnable onOnboardingSeen) { PromptStateChangeListener listener = (prompt, state) -> {