summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Andrey Yepin <ayepin@google.com> 2024-05-31 18:53:14 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-05-31 18:53:14 +0000
commit8c889a3e6495cc76208cbad829a6a2d47bbdf28c (patch)
tree1b52f857cc8a698162def7b792daaa2abb72c3e2
parentb4f32dac1da25d614f3ef284ab499a4577177372 (diff)
parent797c10869157ed583225d82ebda0c9e52f4ff56a (diff)
Merge "Fix shared element animation for partially visible image" into main
-rw-r--r--aconfig/FeatureFlags.aconfig10
-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
-rw-r--r--tests/unit/src/com/android/intentresolver/ChooserActionFactoryTest.kt6
5 files changed, 35 insertions, 5 deletions
diff --git a/aconfig/FeatureFlags.aconfig b/aconfig/FeatureFlags.aconfig
index a102328a..71974cf8 100644
--- a/aconfig/FeatureFlags.aconfig
+++ b/aconfig/FeatureFlags.aconfig
@@ -71,6 +71,16 @@ flag {
}
flag {
+ name: "fix_partial_image_edit_transition"
+ namespace: "intentresolver"
+ description: "Do not run the shared element transition animation for a partially visible image"
+ bug: "339583191"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
+flag {
name: "fix_private_space_locked_on_restart"
namespace: "intentresolver"
description: "Dismiss Share sheet on restart if private space became locked while stopped"
diff --git a/java/src/com/android/intentresolver/ChooserActionFactory.java b/java/src/com/android/intentresolver/ChooserActionFactory.java
index dae1ab52..cc7091e4 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;
@@ -131,7 +133,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(
@@ -147,7 +150,8 @@ public final class ChooserActionFactory implements ChooserContentPreviewUi.Actio
imageEditor),
firstVisibleImageQuery,
activityStarter,
- log),
+ log,
+ featureFlags.fixPartialImageEditTransition()),
chooserActions,
onUpdateSharedTextIsExcluded,
log,
@@ -336,7 +340,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.
@@ -347,7 +352,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 7353ff37..670512ac 100644
--- a/java/src/com/android/intentresolver/ChooserActivity.java
+++ b/java/src/com/android/intentresolver/ChooserActivity.java
@@ -2212,7 +2212,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
+}
diff --git a/tests/unit/src/com/android/intentresolver/ChooserActionFactoryTest.kt b/tests/unit/src/com/android/intentresolver/ChooserActionFactoryTest.kt
index 8dfbdbdd..c8e17de4 100644
--- a/tests/unit/src/com/android/intentresolver/ChooserActionFactoryTest.kt
+++ b/tests/unit/src/com/android/intentresolver/ChooserActionFactoryTest.kt
@@ -69,6 +69,8 @@ class ChooserActionFactoryTest {
latestReturn = resultCode
}
}
+ private val featureFlags =
+ FakeFeatureFlagsImpl().apply { setFlag(Flags.FLAG_FIX_PARTIAL_IMAGE_EDIT_TRANSITION, true) }
@Before
fun setup() {
@@ -119,6 +121,7 @@ class ChooserActionFactoryTest {
/* shareResultSender = */ null,
/* finishCallback = */ {},
/* clipboardManager = */ mock(),
+ /* featureFlags = */ featureFlags,
)
assertThat(testSubject.copyButtonRunnable).isNull()
}
@@ -140,6 +143,7 @@ class ChooserActionFactoryTest {
/* shareResultSender = */ null,
/* finishCallback = */ {},
/* clipboardManager = */ mock(),
+ /* featureFlags = */ featureFlags,
)
assertThat(testSubject.copyButtonRunnable).isNull()
}
@@ -162,6 +166,7 @@ class ChooserActionFactoryTest {
/* shareResultSender = */ resultSender,
/* finishCallback = */ {},
/* clipboardManager = */ mock(),
+ /* featureFlags = */ featureFlags,
)
assertThat(testSubject.copyButtonRunnable).isNotNull()
@@ -194,6 +199,7 @@ class ChooserActionFactoryTest {
/* shareResultSender = */ null,
/* finishCallback = */ resultConsumer,
/* clipboardManager = */ mock(),
+ /* featureFlags = */ featureFlags,
)
}
}