summaryrefslogtreecommitdiff
path: root/java/src
diff options
context:
space:
mode:
author Andrey Epin <ayepin@google.com> 2023-04-11 17:56:14 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2023-04-11 17:56:14 +0000
commitb5cae0b01b3910b9c75c131a7f41938f4d9295ce (patch)
tree9820a39d7de64f4c17eca4bfd96c2155161ed31d /java/src
parent1f5b7f50a8a452f207e6bb336146e116f3295724 (diff)
parent11b9cf84dc1c3a8bf1add401423e48cb44293a10 (diff)
Merge "Hide thumbnail prview if no preview has loaded" into udc-dev am: 11b9cf84dc
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/modules/IntentResolver/+/22540113 Change-Id: I474a76fda06cc3d487cf1735a33ed7a800bdf598 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
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