summaryrefslogtreecommitdiff
path: root/java/src
diff options
context:
space:
mode:
author Andrey Epin <ayepin@google.com> 2024-05-29 14:41:37 -0700
committer Andrey Epin <ayepin@google.com> 2024-05-29 15:08:08 -0700
commit797c10869157ed583225d82ebda0c9e52f4ff56a (patch)
treec9a9098ddff302b4fe4c0de37e3f485dca192ea1 /java/src
parent26930b3207d85a07c26b722dcab81a8513ddebe0 (diff)
Fix shared element animation for partially visible image
When launching an image editor, do not run the shared element transition animation for a paritally visible image. Fix: 339583191 Test: atest IntentResolver-tests-unit Test: atest IntentResolver-tests-activity Test: manual testing Flag: com.android.intentresolver.fix_partial_image_edit_transition Change-Id: Idbcf3712d4d13966e656387b803d56486fa8e1a2
Diffstat (limited to 'java/src')
-rw-r--r--java/src/com/android/intentresolver/ChooserActionFactory.java14
-rw-r--r--java/src/com/android/intentresolver/ChooserActivity.java3
-rw-r--r--java/src/com/android/intentresolver/widget/ViewExtensions.kt7
3 files changed, 19 insertions, 5 deletions
diff --git a/java/src/com/android/intentresolver/ChooserActionFactory.java b/java/src/com/android/intentresolver/ChooserActionFactory.java
index 79998fbc..4dff2177 100644
--- a/java/src/com/android/intentresolver/ChooserActionFactory.java
+++ b/java/src/com/android/intentresolver/ChooserActionFactory.java
@@ -16,6 +16,8 @@
package com.android.intentresolver;
+import static com.android.intentresolver.widget.ViewExtensionsKt.isFullyVisible;
+
import android.app.Activity;
import android.app.ActivityOptions;
import android.app.PendingIntent;
@@ -129,7 +131,8 @@ public final class ChooserActionFactory implements ChooserContentPreviewUi.Actio
ActionActivityStarter activityStarter,
@Nullable ShareResultSender shareResultSender,
Consumer</* @Nullable */ Integer> finishCallback,
- ClipboardManager clipboardManager) {
+ ClipboardManager clipboardManager,
+ FeatureFlags featureFlags) {
this(
context,
makeCopyButtonRunnable(
@@ -145,7 +148,8 @@ public final class ChooserActionFactory implements ChooserContentPreviewUi.Actio
imageEditor),
firstVisibleImageQuery,
activityStarter,
- log),
+ log,
+ featureFlags.fixPartialImageEditTransition()),
chooserActions,
onUpdateSharedTextIsExcluded,
log,
@@ -333,7 +337,8 @@ public final class ChooserActionFactory implements ChooserContentPreviewUi.Actio
@Nullable TargetInfo editSharingTarget,
Callable</* @Nullable */ View> firstVisibleImageQuery,
ActionActivityStarter activityStarter,
- EventLog log) {
+ EventLog log,
+ boolean requireFullVisibility) {
if (editSharingTarget == null) return null;
return () -> {
// Log share completion via edit.
@@ -344,7 +349,8 @@ public final class ChooserActionFactory implements ChooserContentPreviewUi.Actio
firstImageView = firstVisibleImageQuery.call();
} catch (Exception e) { /* ignore */ }
// Action bar is user-independent; always start as primary.
- if (firstImageView == null) {
+ if (firstImageView == null
+ || (requireFullVisibility && !isFullyVisible(firstImageView))) {
activityStarter.safelyStartActivityAsPersonalProfileUser(editSharingTarget);
} else {
activityStarter.safelyStartActivityAsPersonalProfileUserWithSharedElementTransition(
diff --git a/java/src/com/android/intentresolver/ChooserActivity.java b/java/src/com/android/intentresolver/ChooserActivity.java
index 9643b9f0..1b2e2a3f 100644
--- a/java/src/com/android/intentresolver/ChooserActivity.java
+++ b/java/src/com/android/intentresolver/ChooserActivity.java
@@ -2198,7 +2198,8 @@ public class ChooserActivity extends Hilt_ChooserActivity implements
},
mShareResultSender,
this::finishWithStatus,
- mClipboardManager);
+ mClipboardManager,
+ mFeatureFlags);
}
private Supplier<ActionRow.Action> createModifyShareActionFactory() {
diff --git a/java/src/com/android/intentresolver/widget/ViewExtensions.kt b/java/src/com/android/intentresolver/widget/ViewExtensions.kt
index d19933f5..64aa9352 100644
--- a/java/src/com/android/intentresolver/widget/ViewExtensions.kt
+++ b/java/src/com/android/intentresolver/widget/ViewExtensions.kt
@@ -16,6 +16,7 @@
package com.android.intentresolver.widget
+import android.graphics.Rect
import android.util.Log
import android.view.View
import androidx.core.view.OneShotPreDrawListener
@@ -42,3 +43,9 @@ internal suspend fun View.waitForPreDraw(): Unit = suspendCancellableCoroutine {
)
continuation.invokeOnCancellation { callback.removeListener() }
}
+
+internal fun View.isFullyVisible(): Boolean {
+ val rect = Rect()
+ val isVisible = getLocalVisibleRect(rect)
+ return isVisible && rect.width() == width && rect.height() == height
+}