summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--java/src/com/android/intentresolver/ChooserActivity.java3
-rw-r--r--java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java10
-rw-r--r--java/src/com/android/intentresolver/contentpreview/ContentPreviewUi.java4
-rw-r--r--java/src/com/android/intentresolver/contentpreview/CursorUriReader.kt1
-rw-r--r--java/src/com/android/intentresolver/contentpreview/PreviewDataProvider.kt1
-rw-r--r--java/src/com/android/intentresolver/contentpreview/ShareouselContentPreviewUi.kt4
-rw-r--r--java/src/com/android/intentresolver/v2/ChooserActivity.java6
-rw-r--r--tests/unit/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUiTest.kt98
8 files changed, 51 insertions, 76 deletions
diff --git a/java/src/com/android/intentresolver/ChooserActivity.java b/java/src/com/android/intentresolver/ChooserActivity.java
index 9b4582df..039fad56 100644
--- a/java/src/com/android/intentresolver/ChooserActivity.java
+++ b/java/src/com/android/intentresolver/ChooserActivity.java
@@ -318,7 +318,8 @@ public class ChooserActivity extends Hilt_ChooserActivity implements
mEnterTransitionAnimationDelegate,
new HeadlineGeneratorImpl(this),
ContentTypeHint.NONE,
- mChooserRequest.getMetadataText()
+ mChooserRequest.getMetadataText(),
+ /*isPayloadTogglingEnabled =*/ false
);
updateStickyContentPreview();
diff --git a/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java
index acdf6ec6..6f201ad5 100644
--- a/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java
+++ b/java/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUi.java
@@ -25,7 +25,6 @@ import android.content.ClipData;
import android.content.Intent;
import android.content.res.Resources;
import android.net.Uri;
-import android.service.chooser.Flags;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
@@ -51,6 +50,7 @@ import kotlinx.coroutines.CoroutineScope;
public final class ChooserContentPreviewUi {
private final CoroutineScope mScope;
+ private final boolean mIsPayloadTogglingEnabled;
/**
* Delegate to build the default system action buttons to display in the preview layout, if/when
@@ -103,8 +103,11 @@ public final class ChooserContentPreviewUi {
TransitionElementStatusCallback transitionElementStatusCallback,
HeadlineGenerator headlineGenerator,
ContentTypeHint contentTypeHint,
- @Nullable CharSequence metadata) {
+ @Nullable CharSequence metadata,
+ // TODO: replace with the FeatureFlag ref when v1 is gone
+ boolean isPayloadTogglingEnabled) {
mScope = scope;
+ mIsPayloadTogglingEnabled = isPayloadTogglingEnabled;
mContentPreviewUi = createContentPreview(
previewData,
targetIntent,
@@ -157,8 +160,7 @@ public final class ChooserContentPreviewUi {
return fileContentPreviewUi;
}
- //TODO: use flags injection
- if (previewType == CONTENT_PREVIEW_PAYLOAD_SELECTION && Flags.chooserPayloadToggling()) {
+ if (previewType == CONTENT_PREVIEW_PAYLOAD_SELECTION && mIsPayloadTogglingEnabled) {
transitionElementStatusCallback.onAllTransitionElementsReady(); // TODO
return new ShareouselContentPreviewUi(actionFactory);
}
diff --git a/java/src/com/android/intentresolver/contentpreview/ContentPreviewUi.java b/java/src/com/android/intentresolver/contentpreview/ContentPreviewUi.java
index c35f93b4..b0fb278e 100644
--- a/java/src/com/android/intentresolver/contentpreview/ContentPreviewUi.java
+++ b/java/src/com/android/intentresolver/contentpreview/ContentPreviewUi.java
@@ -30,12 +30,14 @@ import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
import com.android.intentresolver.R;
import com.android.intentresolver.widget.ActionRow;
import com.android.intentresolver.widget.ScrollableImagePreviewView;
-abstract class ContentPreviewUi {
+@VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
+public abstract class ContentPreviewUi {
private static final int IMAGE_FADE_IN_MILLIS = 150;
static final String TAG = "ChooserPreview";
diff --git a/java/src/com/android/intentresolver/contentpreview/CursorUriReader.kt b/java/src/com/android/intentresolver/contentpreview/CursorUriReader.kt
index e9e60040..6a12f56c 100644
--- a/java/src/com/android/intentresolver/contentpreview/CursorUriReader.kt
+++ b/java/src/com/android/intentresolver/contentpreview/CursorUriReader.kt
@@ -140,7 +140,6 @@ class CursorUriReader(
cursor.extras?.getInt(CursorExtraKeys.POSITION, 0) ?: 0,
128,
) {
- // TODO: check that authority is case-sensitive for resolution reasons
it.authority != uri.authority
}
}
diff --git a/java/src/com/android/intentresolver/contentpreview/PreviewDataProvider.kt b/java/src/com/android/intentresolver/contentpreview/PreviewDataProvider.kt
index 8073cfec..3f306a80 100644
--- a/java/src/com/android/intentresolver/contentpreview/PreviewDataProvider.kt
+++ b/java/src/com/android/intentresolver/contentpreview/PreviewDataProvider.kt
@@ -155,7 +155,6 @@ constructor(
val extraContentUri = additionalContentUri ?: return false
return runCatching {
val authority = extraContentUri.authority
- // TODO: verify that authority is case-sensitive
records.firstOrNull { authority == it.uri.authority } == null
}
.onFailure {
diff --git a/java/src/com/android/intentresolver/contentpreview/ShareouselContentPreviewUi.kt b/java/src/com/android/intentresolver/contentpreview/ShareouselContentPreviewUi.kt
index cc89f5bf..82c09986 100644
--- a/java/src/com/android/intentresolver/contentpreview/ShareouselContentPreviewUi.kt
+++ b/java/src/com/android/intentresolver/contentpreview/ShareouselContentPreviewUi.kt
@@ -20,6 +20,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
+import androidx.annotation.VisibleForTesting
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height
@@ -43,7 +44,8 @@ import com.android.intentresolver.contentpreview.shareousel.ui.composable.Shareo
import com.android.intentresolver.contentpreview.shareousel.ui.viewmodel.ShareouselViewModel
import com.android.intentresolver.contentpreview.shareousel.ui.viewmodel.toShareouselViewModel
-internal class ShareouselContentPreviewUi(
+@VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
+class ShareouselContentPreviewUi(
private val actionFactory: ActionFactory,
) : ContentPreviewUi() {
diff --git a/java/src/com/android/intentresolver/v2/ChooserActivity.java b/java/src/com/android/intentresolver/v2/ChooserActivity.java
index 072c56de..1a7dd9d6 100644
--- a/java/src/com/android/intentresolver/v2/ChooserActivity.java
+++ b/java/src/com/android/intentresolver/v2/ChooserActivity.java
@@ -493,7 +493,7 @@ public class ChooserActivity extends Hilt_ChooserActivity implements
ChooserContentPreviewUi.ActionFactory actionFactory = chooserActionFactory;
if (previewViewModel.getPreviewDataProvider().getPreviewType()
== CONTENT_PREVIEW_PAYLOAD_SELECTION
- && android.service.chooser.Flags.chooserPayloadToggling()) {
+ && mChooserServiceFeatureFlags.chooserPayloadToggling()) {
PayloadToggleInteractor payloadToggleInteractor =
previewViewModel.getPayloadToggleInteractor();
if (payloadToggleInteractor != null) {
@@ -515,8 +515,8 @@ public class ChooserActivity extends Hilt_ChooserActivity implements
mEnterTransitionAnimationDelegate,
new HeadlineGeneratorImpl(this),
chooserRequest.getContentTypeHint(),
- chooserRequest.getMetadataText()
- );
+ chooserRequest.getMetadataText(),
+ mChooserServiceFeatureFlags.chooserPayloadToggling());
updateStickyContentPreview();
if (shouldShowStickyContentPreview()
|| mChooserMultiProfilePagerAdapter
diff --git a/tests/unit/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUiTest.kt b/tests/unit/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUiTest.kt
index ad53eef4..c7c3c516 100644
--- a/tests/unit/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUiTest.kt
+++ b/tests/unit/src/com/android/intentresolver/contentpreview/ChooserContentPreviewUiTest.kt
@@ -18,7 +18,6 @@ package com.android.intentresolver.contentpreview
import android.content.Intent
import android.net.Uri
-import android.platform.test.annotations.RequiresFlagsDisabled
import android.platform.test.flag.junit.CheckFlagsRule
import android.platform.test.flag.junit.DeviceFlagsValueProvider
import com.android.intentresolver.ContentTypeHint
@@ -49,29 +48,40 @@ class ChooserContentPreviewUiTest {
private val actionFactory =
object : ActionFactory {
override fun getCopyButtonRunnable(): Runnable? = null
+
override fun getEditButtonRunnable(): Runnable? = null
+
override fun createCustomActions(): List<ActionRow.Action> = emptyList()
+
override fun getModifyShareAction(): ActionRow.Action? = null
+
override fun getExcludeSharedTextAction(): Consumer<Boolean> = Consumer<Boolean> {}
}
private val transitionCallback = mock<ImagePreviewView.TransitionElementStatusCallback>()
@get:Rule val checkFlagsRule: CheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule()
+ private fun createContentPreviewUi(
+ targetIntent: Intent,
+ isPayloadTogglingEnabled: Boolean = false
+ ) =
+ ChooserContentPreviewUi(
+ testScope,
+ previewData,
+ targetIntent,
+ imageLoader,
+ actionFactory,
+ transitionCallback,
+ headlineGenerator,
+ ContentTypeHint.NONE,
+ testMetadataText,
+ isPayloadTogglingEnabled,
+ )
+
@Test
fun test_textPreviewType_useTextPreviewUi() {
whenever(previewData.previewType).thenReturn(ContentPreviewType.CONTENT_PREVIEW_TEXT)
- val testSubject =
- ChooserContentPreviewUi(
- testScope,
- previewData,
- Intent(Intent.ACTION_VIEW),
- imageLoader,
- actionFactory,
- transitionCallback,
- headlineGenerator,
- ContentTypeHint.NONE,
- testMetadataText,
- )
+ val testSubject = createContentPreviewUi(targetIntent = Intent(Intent.ACTION_VIEW))
+
assertThat(testSubject.preferredContentPreview)
.isEqualTo(ContentPreviewType.CONTENT_PREVIEW_TEXT)
assertThat(testSubject.mContentPreviewUi).isInstanceOf(TextContentPreviewUi::class.java)
@@ -81,18 +91,7 @@ class ChooserContentPreviewUiTest {
@Test
fun test_filePreviewType_useFilePreviewUi() {
whenever(previewData.previewType).thenReturn(ContentPreviewType.CONTENT_PREVIEW_FILE)
- val testSubject =
- ChooserContentPreviewUi(
- testScope,
- previewData,
- Intent(Intent.ACTION_SEND),
- imageLoader,
- actionFactory,
- transitionCallback,
- headlineGenerator,
- ContentTypeHint.NONE,
- testMetadataText,
- )
+ val testSubject = createContentPreviewUi(targetIntent = Intent(Intent.ACTION_SEND))
assertThat(testSubject.preferredContentPreview)
.isEqualTo(ContentPreviewType.CONTENT_PREVIEW_FILE)
assertThat(testSubject.mContentPreviewUi).isInstanceOf(FileContentPreviewUi::class.java)
@@ -108,16 +107,9 @@ class ChooserContentPreviewUiTest {
.thenReturn(FileInfo.Builder(uri).withPreviewUri(uri).withMimeType("image/png").build())
whenever(previewData.imagePreviewFileInfoFlow).thenReturn(MutableSharedFlow())
val testSubject =
- ChooserContentPreviewUi(
- testScope,
- previewData,
- Intent(Intent.ACTION_SEND).apply { putExtra(Intent.EXTRA_TEXT, "Shared text") },
- imageLoader,
- actionFactory,
- transitionCallback,
- headlineGenerator,
- ContentTypeHint.NONE,
- testMetadataText,
+ createContentPreviewUi(
+ targetIntent =
+ Intent(Intent.ACTION_SEND).apply { putExtra(Intent.EXTRA_TEXT, "Shared text") }
)
assertThat(testSubject.mContentPreviewUi)
.isInstanceOf(FilesPlusTextContentPreviewUi::class.java)
@@ -133,18 +125,7 @@ class ChooserContentPreviewUiTest {
whenever(previewData.firstFileInfo)
.thenReturn(FileInfo.Builder(uri).withPreviewUri(uri).withMimeType("image/png").build())
whenever(previewData.imagePreviewFileInfoFlow).thenReturn(MutableSharedFlow())
- val testSubject =
- ChooserContentPreviewUi(
- testScope,
- previewData,
- Intent(Intent.ACTION_SEND),
- imageLoader,
- actionFactory,
- transitionCallback,
- headlineGenerator,
- ContentTypeHint.NONE,
- testMetadataText,
- )
+ val testSubject = createContentPreviewUi(targetIntent = Intent(Intent.ACTION_SEND))
assertThat(testSubject.preferredContentPreview)
.isEqualTo(ContentPreviewType.CONTENT_PREVIEW_IMAGE)
assertThat(testSubject.mContentPreviewUi).isInstanceOf(UnifiedContentPreviewUi::class.java)
@@ -153,8 +134,7 @@ class ChooserContentPreviewUiTest {
}
@Test
- @RequiresFlagsDisabled(android.service.chooser.Flags.FLAG_CHOOSER_PAYLOAD_TOGGLING)
- fun test_imagePayloadSelectionType_useImagePreviewUi() {
+ fun test_imagePayloadSelectionTypeWithEnabledFlag_usePayloadSelectionPreviewUi() {
// Event if we returned wrong type due to a bug, we should not use payload selection UI
val uri = Uri.parse("content://org.pkg.app/img.png")
whenever(previewData.previewType)
@@ -164,21 +144,11 @@ class ChooserContentPreviewUiTest {
.thenReturn(FileInfo.Builder(uri).withPreviewUri(uri).withMimeType("image/png").build())
whenever(previewData.imagePreviewFileInfoFlow).thenReturn(MutableSharedFlow())
val testSubject =
- ChooserContentPreviewUi(
- testScope,
- previewData,
- Intent(Intent.ACTION_SEND),
- imageLoader,
- actionFactory,
- transitionCallback,
- headlineGenerator,
- ContentTypeHint.NONE,
- testMetadataText,
+ createContentPreviewUi(
+ targetIntent = Intent(Intent.ACTION_SEND),
+ isPayloadTogglingEnabled = true
)
- assertThat(testSubject.preferredContentPreview)
- .isEqualTo(ContentPreviewType.CONTENT_PREVIEW_IMAGE)
- assertThat(testSubject.mContentPreviewUi).isInstanceOf(UnifiedContentPreviewUi::class.java)
- verify(previewData, times(1)).imagePreviewFileInfoFlow
- verify(transitionCallback, never()).onAllTransitionElementsReady()
+ assertThat(testSubject.mContentPreviewUi)
+ .isInstanceOf(ShareouselContentPreviewUi::class.java)
}
}