summaryrefslogtreecommitdiff
path: root/java/src
diff options
context:
space:
mode:
author Andrey Epin <ayepin@google.com> 2023-04-11 17:21:22 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-04-11 17:21:22 +0000
commit11b9cf84dc1c3a8bf1add401423e48cb44293a10 (patch)
tree9820a39d7de64f4c17eca4bfd96c2155161ed31d /java/src
parentfc7ddd61dd62105dae67594517b9344afca163ff (diff)
parent8ae8c4a3f25cc5c0da3196fa0a3f0f07dfe87066 (diff)
Merge "Hide thumbnail prview if no preview has loaded" into udc-dev
Diffstat (limited to 'java/src')
-rw-r--r--java/src/com/android/intentresolver/contentpreview/UnifiedContentPreviewUi.java15
-rw-r--r--java/src/com/android/intentresolver/widget/ScrollableImagePreviewView.kt15
2 files changed, 25 insertions, 5 deletions
diff --git a/java/src/com/android/intentresolver/contentpreview/UnifiedContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/UnifiedContentPreviewUi.java
index 748f7421..2e6ecb0e 100644
--- a/java/src/com/android/intentresolver/contentpreview/UnifiedContentPreviewUi.java
+++ b/java/src/com/android/intentresolver/contentpreview/UnifiedContentPreviewUi.java
@@ -91,6 +91,7 @@ class UnifiedContentPreviewUi extends ContentPreviewUi {
R.layout.chooser_grid_preview_image, parent, false);
ScrollableImagePreviewView imagePreview =
contentPreviewLayout.findViewById(R.id.scrollable_image_preview);
+ imagePreview.setOnNoPreviewCallback(() -> imagePreview.setVisibility(View.GONE));
final ActionRow actionRow =
contentPreviewLayout.findViewById(com.android.internal.R.id.chooser_action_row);
@@ -132,7 +133,7 @@ class UnifiedContentPreviewUi extends ContentPreviewUi {
mImageLoader);
if (!TextUtils.isEmpty(mText) && mFiles.size() == 1 && allImages) {
- setTextInImagePreviewVisibility(contentPreviewLayout, mActionFactory);
+ setTextInImagePreviewVisibility(contentPreviewLayout, imagePreview, mActionFactory);
updateTextWithImageHeadline(contentPreviewLayout);
} else {
if (allImages) {
@@ -175,7 +176,9 @@ class UnifiedContentPreviewUi extends ContentPreviewUi {
}
private void setTextInImagePreviewVisibility(
- ViewGroup contentPreview, ChooserContentPreviewUi.ActionFactory actionFactory) {
+ ViewGroup contentPreview,
+ ScrollableImagePreviewView imagePreview,
+ ChooserContentPreviewUi.ActionFactory actionFactory) {
final TextView textView = contentPreview
.requireViewById(com.android.internal.R.id.content_preview_text);
CheckBox actionView = contentPreview
@@ -194,8 +197,12 @@ class UnifiedContentPreviewUi extends ContentPreviewUi {
shareTextAction.accept(false);
actionView.setOnCheckedChangeListener((view, isChecked) -> {
view.setText(actionLabels[isChecked ? 1 : 0]);
- TransitionManager.beginDelayedTransition((ViewGroup) textView.getParent());
- textView.setVisibility(isChecked ? View.VISIBLE : View.GONE);
+ textView.setEnabled(isChecked);
+ if (imagePreview.getVisibility() == View.VISIBLE) {
+ // animate only only if we have preview
+ TransitionManager.beginDelayedTransition((ViewGroup) textView.getParent());
+ textView.setVisibility(isChecked ? View.VISIBLE : View.GONE);
+ }
shareTextAction.accept(!isChecked);
updateTextWithImageHeadline(contentPreview);
});
diff --git a/java/src/com/android/intentresolver/widget/ScrollableImagePreviewView.kt b/java/src/com/android/intentresolver/widget/ScrollableImagePreviewView.kt
index d1b0f5b4..8dcaacb8 100644
--- a/java/src/com/android/intentresolver/widget/ScrollableImagePreviewView.kt
+++ b/java/src/com/android/intentresolver/widget/ScrollableImagePreviewView.kt
@@ -40,6 +40,7 @@ import kotlinx.coroutines.Job
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.cancel
import kotlinx.coroutines.flow.MutableSharedFlow
+import kotlinx.coroutines.flow.onCompletion
import kotlinx.coroutines.flow.takeWhile
import kotlinx.coroutines.joinAll
import kotlinx.coroutines.launch
@@ -129,13 +130,18 @@ class ScrollableImagePreviewView : RecyclerView, ImagePreviewView {
imageLoader,
previews,
otherItemCount,
- ).apply {
+ ) {
+ onNoPreviewCallback?.run()
+ }
+ .apply {
if (isMeasured) {
loadAspectRatios(getMaxWidth(), this@ScrollableImagePreviewView::calcPreviewWidth)
}
}
}
+ var onNoPreviewCallback: Runnable? = null
+
private fun getMaxWidth(): Int =
when {
maxWidthHint > 0 -> maxWidthHint
@@ -187,6 +193,7 @@ class ScrollableImagePreviewView : RecyclerView, ImagePreviewView {
private var totalItemCount: Int = 0
private val hasOtherItem get() = previews.size < totalItemCount
+ val hasPreviews: Boolean get() = previews.isNotEmpty()
var transitionStatusElementCallback: TransitionElementStatusCallback? = null
@@ -369,6 +376,7 @@ class ScrollableImagePreviewView : RecyclerView, ImagePreviewView {
private val imageLoader: ImageLoader,
previews: List<Preview>,
otherItemCount: Int,
+ private val onNoPreviewCallback: (() -> Unit)
) {
private val pendingPreviews = ArrayDeque<Preview>(previews)
private val totalItemCount = previews.size + otherItemCount
@@ -393,6 +401,11 @@ class ScrollableImagePreviewView : RecyclerView, ImagePreviewView {
reportFlow
.takeWhile { it !== completedEvent }
.throttle(ADAPTER_UPDATE_INTERVAL_MS)
+ .onCompletion { cause ->
+ if (cause == null && !adapter.hasPreviews) {
+ onNoPreviewCallback()
+ }
+ }
.collect {
if (isFirstUpdate) {
isFirstUpdate = false