diff options
author | 2024-07-31 15:03:41 -0700 | |
---|---|---|
committer | 2024-08-05 15:37:14 -0700 | |
commit | 38ee8332d767014a9c69a737511bbc5aa705d5ec (patch) | |
tree | f7861ee3a717f1d0d3387ac63b06eae73e4992b4 | |
parent | dd8b67226177c51bf5bb1019aff66fb7f138a03c (diff) |
Update excluded components from payload selection callback
Bug: 352496527
Test: atest IntentResolver-tests-unit
Test: manual testing using ShareTest app
Flag: com.android.intentresolver.shareousel_update_exclude_components_extra
Change-Id: I610edf2c11a5beb114185c8724347b0eb0487ef1
9 files changed, 112 insertions, 21 deletions
diff --git a/aconfig/FeatureFlags.aconfig b/aconfig/FeatureFlags.aconfig index c449bb43..b58b4daa 100644 --- a/aconfig/FeatureFlags.aconfig +++ b/aconfig/FeatureFlags.aconfig @@ -89,3 +89,10 @@ flag { description: "Use the unified preview image loader for all preview variations; support variable preview sizes." bug: "348665058" } + +flag { + name: "shareousel_update_exclude_components_extra" + namespace: "intentresolver" + description: "Allow Shareousel selection change callback to update Intent#EXTRA_EXCLUDE_COMPONENTS" + bug: "352496527" +} diff --git a/java/src/com/android/intentresolver/ChooserActivity.java b/java/src/com/android/intentresolver/ChooserActivity.java index 84f29e21..7b43a21d 100644 --- a/java/src/com/android/intentresolver/ChooserActivity.java +++ b/java/src/com/android/intentresolver/ChooserActivity.java @@ -23,6 +23,7 @@ import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTE import static androidx.lifecycle.LifecycleKt.getCoroutineScope; import static com.android.intentresolver.ChooserActionFactory.EDIT_SOURCE; +import static com.android.intentresolver.Flags.shareouselUpdateExcludeComponentsExtra; import static com.android.intentresolver.ext.CreationExtrasExtKt.addDefaultArgs; import static com.android.intentresolver.profiles.MultiProfilePagerAdapter.PROFILE_PERSONAL; import static com.android.intentresolver.profiles.MultiProfilePagerAdapter.PROFILE_WORK; @@ -749,10 +750,15 @@ public class ChooserActivity extends Hilt_ChooserActivity implements Intent newTargetIntent = newChooserRequest.getTargetIntent(); List<Intent> oldAltIntents = oldChooserRequest.getAdditionalTargets(); List<Intent> newAltIntents = newChooserRequest.getAdditionalTargets(); + List<ComponentName> oldExcluded = oldChooserRequest.getFilteredComponentNames(); + List<ComponentName> newExcluded = newChooserRequest.getFilteredComponentNames(); // TODO: a workaround for the unnecessary target reloading caused by multiple flow updates - // an artifact of the current implementation; revisit. - return !oldTargetIntent.equals(newTargetIntent) || !oldAltIntents.equals(newAltIntents); + return !oldTargetIntent.equals(newTargetIntent) + || !oldAltIntents.equals(newAltIntents) + || (shareouselUpdateExcludeComponentsExtra() + && !oldExcluded.equals(newExcluded)); } private void recreatePagerAdapter() { diff --git a/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/UpdateChooserRequestInteractor.kt b/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/UpdateChooserRequestInteractor.kt index dd16f0c1..4fe5e8d5 100644 --- a/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/UpdateChooserRequestInteractor.kt +++ b/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/UpdateChooserRequestInteractor.kt @@ -17,6 +17,7 @@ package com.android.intentresolver.contentpreview.payloadtoggle.domain.interactor import android.content.Intent +import com.android.intentresolver.Flags.shareouselUpdateExcludeComponentsExtra import com.android.intentresolver.contentpreview.payloadtoggle.domain.intent.CustomAction import com.android.intentresolver.contentpreview.payloadtoggle.domain.intent.PendingIntentSender import com.android.intentresolver.contentpreview.payloadtoggle.domain.intent.toCustomActionModel @@ -49,6 +50,12 @@ constructor( update.refinementIntentSender.getOrDefault(current.refinementIntentSender), metadataText = update.metadataText.getOrDefault(current.metadataText), chooserActions = update.customActions.getOrDefault(current.chooserActions), + filteredComponentNames = + if (shareouselUpdateExcludeComponentsExtra()) { + update.excludeComponents.getOrDefault(current.filteredComponentNames) + } else { + current.filteredComponentNames + } ) } update.customActions.onValue { actions -> diff --git a/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/model/ShareouselUpdate.kt b/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/model/ShareouselUpdate.kt index 821e88a5..77f196e6 100644 --- a/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/model/ShareouselUpdate.kt +++ b/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/model/ShareouselUpdate.kt @@ -16,6 +16,7 @@ package com.android.intentresolver.contentpreview.payloadtoggle.domain.model +import android.content.ComponentName import android.content.Intent import android.content.IntentSender import android.service.chooser.ChooserAction @@ -31,4 +32,5 @@ data class ShareouselUpdate( val refinementIntentSender: ValueUpdate<IntentSender?> = ValueUpdate.Absent, val resultIntentSender: ValueUpdate<IntentSender?> = ValueUpdate.Absent, val metadataText: ValueUpdate<CharSequence?> = ValueUpdate.Absent, + val excludeComponents: ValueUpdate<List<ComponentName>> = ValueUpdate.Absent, ) diff --git a/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/update/SelectionChangeCallback.kt b/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/update/SelectionChangeCallback.kt index 479bff77..184cc027 100644 --- a/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/update/SelectionChangeCallback.kt +++ b/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/update/SelectionChangeCallback.kt @@ -16,6 +16,7 @@ package com.android.intentresolver.contentpreview.payloadtoggle.domain.update +import android.content.ComponentName import android.content.ContentInterface import android.content.Intent import android.content.Intent.EXTRA_ALTERNATE_INTENTS @@ -24,6 +25,7 @@ import android.content.Intent.EXTRA_CHOOSER_MODIFY_SHARE_ACTION import android.content.Intent.EXTRA_CHOOSER_REFINEMENT_INTENT_SENDER import android.content.Intent.EXTRA_CHOOSER_RESULT_INTENT_SENDER import android.content.Intent.EXTRA_CHOOSER_TARGETS +import android.content.Intent.EXTRA_EXCLUDE_COMPONENTS import android.content.Intent.EXTRA_INTENT import android.content.Intent.EXTRA_METADATA_TEXT import android.content.IntentSender @@ -32,11 +34,11 @@ import android.os.Bundle import android.service.chooser.AdditionalContentContract.MethodNames.ON_SELECTION_CHANGED import android.service.chooser.ChooserAction import android.service.chooser.ChooserTarget +import com.android.intentresolver.Flags.shareouselUpdateExcludeComponentsExtra import com.android.intentresolver.contentpreview.payloadtoggle.domain.model.ShareouselUpdate import com.android.intentresolver.contentpreview.payloadtoggle.domain.model.ValueUpdate import com.android.intentresolver.inject.AdditionalContent import com.android.intentresolver.inject.ChooserIntent -import com.android.intentresolver.inject.ChooserServiceFlags import com.android.intentresolver.ui.viewmodel.readAlternateIntents import com.android.intentresolver.ui.viewmodel.readChooserActions import com.android.intentresolver.validation.Invalid @@ -70,7 +72,6 @@ constructor( @AdditionalContent private val uri: Uri, @ChooserIntent private val chooserIntent: Intent, private val contentResolver: ContentInterface, - private val flags: ChooserServiceFlags, ) : SelectionChangeCallback { private val mutex = Mutex() @@ -90,7 +91,7 @@ constructor( ) } ?.let { bundle -> - return when (val result = readCallbackResponse(bundle, flags)) { + return when (val result = readCallbackResponse(bundle)) { is Valid -> { result.warnings.forEach { it.log(TAG) } result.value @@ -105,7 +106,6 @@ constructor( private fun readCallbackResponse( bundle: Bundle, - flags: ChooserServiceFlags ): ValidationResult<ShareouselUpdate> { return validateFrom(bundle::get) { // An error is treated as an empty collection or null as the presence of a value indicates @@ -139,6 +139,14 @@ private fun readCallbackResponse( bundle.readValueUpdate(EXTRA_METADATA_TEXT) { key -> optional(value<CharSequence>(key)) } + val excludedComponents: ValueUpdate<List<ComponentName>> = + if (shareouselUpdateExcludeComponentsExtra()) { + bundle.readValueUpdate(EXTRA_EXCLUDE_COMPONENTS) { key -> + optional(array<ComponentName>(key)) ?: emptyList() + } + } else { + ValueUpdate.Absent + } ShareouselUpdate( customActions, @@ -148,6 +156,7 @@ private fun readCallbackResponse( refinementIntentSender, resultIntentSender, metadataText, + excludedComponents, ) } } diff --git a/tests/shared/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/update/SelectionChangeCallbackKosmos.kt b/tests/shared/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/update/SelectionChangeCallbackKosmos.kt index 548b1f37..b26b562e 100644 --- a/tests/shared/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/update/SelectionChangeCallbackKosmos.kt +++ b/tests/shared/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/update/SelectionChangeCallbackKosmos.kt @@ -19,7 +19,6 @@ package com.android.intentresolver.contentpreview.payloadtoggle.domain.update import com.android.intentresolver.contentInterface import com.android.intentresolver.inject.additionalContentUri import com.android.intentresolver.inject.chooserIntent -import com.android.intentresolver.inject.chooserServiceFlags import com.android.systemui.kosmos.Kosmos val Kosmos.selectionChangeCallbackImpl by @@ -28,7 +27,6 @@ val Kosmos.selectionChangeCallbackImpl by additionalContentUri, chooserIntent, contentInterface, - chooserServiceFlags, ) } var Kosmos.selectionChangeCallback: SelectionChangeCallback by diff --git a/tests/unit/Android.bp b/tests/unit/Android.bp index 1ae8d883..aa1be2e0 100644 --- a/tests/unit/Android.bp +++ b/tests/unit/Android.bp @@ -33,6 +33,7 @@ android_test { "android.test.mock", "framework", "framework-res", + "flag-junit", ], resource_dirs: ["res"], diff --git a/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/UpdateChooserRequestInteractorTest.kt b/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/UpdateChooserRequestInteractorTest.kt index 570c346c..32d040fe 100644 --- a/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/UpdateChooserRequestInteractorTest.kt +++ b/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/UpdateChooserRequestInteractorTest.kt @@ -18,7 +18,11 @@ package com.android.intentresolver.contentpreview.payloadtoggle.domain.interactor +import android.content.ComponentName import android.content.Intent +import android.platform.test.annotations.EnableFlags +import android.platform.test.flag.junit.SetFlagsRule +import com.android.intentresolver.Flags.FLAG_SHAREOUSEL_UPDATE_EXCLUDE_COMPONENTS_EXTRA import com.android.intentresolver.contentpreview.payloadtoggle.data.repository.pendingSelectionCallbackRepository import com.android.intentresolver.contentpreview.payloadtoggle.domain.model.ShareouselUpdate import com.android.intentresolver.contentpreview.payloadtoggle.domain.model.ValueUpdate @@ -29,9 +33,12 @@ import com.android.intentresolver.util.runKosmosTest import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.launch +import org.junit.Rule import org.junit.Test class UpdateChooserRequestInteractorTest { + @get:Rule val setFlagsRule = SetFlagsRule() + @Test fun updateTargetIntentWithSelection() = runKosmosTest { val selectionCallbackResult = ShareouselUpdate(metadataText = ValueUpdate.Value("update")) @@ -45,4 +52,21 @@ class UpdateChooserRequestInteractorTest { assertThat(pendingSelectionCallbackRepository.pendingTargetIntent.value).isNull() assertThat(chooserRequestRepository.chooserRequest.value.metadataText).isEqualTo("update") } + + @Test + @EnableFlags(FLAG_SHAREOUSEL_UPDATE_EXCLUDE_COMPONENTS_EXTRA) + fun testSelectionResultWithExcludedComponents_chooserRequestIsUpdated() = runKosmosTest { + val excludedComponent = ComponentName("org.pkg.app", "Class") + val selectionCallbackResult = + ShareouselUpdate(excludeComponents = ValueUpdate.Value(listOf(excludedComponent))) + selectionChangeCallback = SelectionChangeCallback { selectionCallbackResult } + + backgroundScope.launch { processTargetIntentUpdatesInteractor.activate() } + + updateTargetIntentInteractor.updateTargetIntent(Intent()) + runCurrent() + + assertThat(chooserRequestRepository.chooserRequest.value.filteredComponentNames) + .containsExactly(excludedComponent) + } } diff --git a/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/update/SelectionChangeCallbackImplTest.kt b/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/update/SelectionChangeCallbackImplTest.kt index fd21ea3f..c1a1833a 100644 --- a/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/update/SelectionChangeCallbackImplTest.kt +++ b/tests/unit/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/update/SelectionChangeCallbackImplTest.kt @@ -29,32 +29,34 @@ import android.content.Intent.EXTRA_CHOOSER_MODIFY_SHARE_ACTION import android.content.Intent.EXTRA_CHOOSER_REFINEMENT_INTENT_SENDER import android.content.Intent.EXTRA_CHOOSER_RESULT_INTENT_SENDER import android.content.Intent.EXTRA_CHOOSER_TARGETS +import android.content.Intent.EXTRA_EXCLUDE_COMPONENTS import android.content.Intent.EXTRA_INTENT import android.content.Intent.EXTRA_METADATA_TEXT import android.content.Intent.EXTRA_STREAM import android.graphics.drawable.Icon import android.net.Uri import android.os.Bundle +import android.platform.test.annotations.EnableFlags +import android.platform.test.flag.junit.SetFlagsRule import android.service.chooser.AdditionalContentContract.MethodNames.ON_SELECTION_CHANGED import android.service.chooser.ChooserAction import android.service.chooser.ChooserTarget -import android.service.chooser.Flags import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.platform.app.InstrumentationRegistry +import com.android.intentresolver.Flags.FLAG_SHAREOUSEL_UPDATE_EXCLUDE_COMPONENTS_EXTRA import com.android.intentresolver.contentpreview.payloadtoggle.domain.model.ValueUpdate import com.android.intentresolver.contentpreview.payloadtoggle.domain.model.ValueUpdate.Absent -import com.android.intentresolver.inject.FakeChooserServiceFlags import com.google.common.truth.Correspondence import com.google.common.truth.Correspondence.BinaryPredicate import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertWithMessage import java.lang.IllegalArgumentException import kotlinx.coroutines.test.runTest +import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mockito.kotlin.any import org.mockito.kotlin.argumentCaptor -import org.mockito.kotlin.capture import org.mockito.kotlin.mock import org.mockito.kotlin.times import org.mockito.kotlin.verify @@ -62,16 +64,16 @@ import org.mockito.kotlin.whenever @RunWith(AndroidJUnit4::class) class SelectionChangeCallbackImplTest { + @get:Rule val setFlagsRule = SetFlagsRule() + private val uri = Uri.parse("content://org.pkg/content-provider") private val chooserIntent = Intent(ACTION_CHOOSER) private val contentResolver = mock<ContentInterface>() private val context = InstrumentationRegistry.getInstrumentation().context - private val flags = - FakeChooserServiceFlags().apply { setFlag(Flags.FLAG_CHOOSER_PAYLOAD_TOGGLING, false) } @Test fun testPayloadChangeCallbackContact() = runTest { - val testSubject = SelectionChangeCallbackImpl(uri, chooserIntent, contentResolver, flags) + val testSubject = SelectionChangeCallbackImpl(uri, chooserIntent, contentResolver) val u1 = createUri(1) val u2 = createUri(2) @@ -166,7 +168,7 @@ class SelectionChangeCallbackImplTest { Bundle().apply { putParcelableArray(EXTRA_CHOOSER_CUSTOM_ACTIONS, arrayOf(a1, a2)) } ) - val testSubject = SelectionChangeCallbackImpl(uri, chooserIntent, contentResolver, flags) + val testSubject = SelectionChangeCallbackImpl(uri, chooserIntent, contentResolver) val targetIntent = Intent(ACTION_SEND_MULTIPLE) val result = testSubject.onSelectionChanged(targetIntent) @@ -183,6 +185,7 @@ class SelectionChangeCallbackImplTest { assertThat(result.refinementIntentSender).isEqualTo(Absent) assertThat(result.resultIntentSender).isEqualTo(Absent) assertThat(result.metadataText).isEqualTo(Absent) + assertThat(result.excludeComponents).isEqualTo(Absent) } @Test @@ -204,7 +207,7 @@ class SelectionChangeCallbackImplTest { Bundle().apply { putParcelable(EXTRA_CHOOSER_MODIFY_SHARE_ACTION, modifyShare) } ) - val testSubject = SelectionChangeCallbackImpl(uri, chooserIntent, contentResolver, flags) + val testSubject = SelectionChangeCallbackImpl(uri, chooserIntent, contentResolver) val targetIntent = Intent(ACTION_SEND) val result = testSubject.onSelectionChanged(targetIntent) @@ -223,6 +226,7 @@ class SelectionChangeCallbackImplTest { assertThat(result.refinementIntentSender).isEqualTo(Absent) assertThat(result.resultIntentSender).isEqualTo(Absent) assertThat(result.metadataText).isEqualTo(Absent) + assertThat(result.excludeComponents).isEqualTo(Absent) } @Test @@ -239,7 +243,7 @@ class SelectionChangeCallbackImplTest { Bundle().apply { putParcelableArray(EXTRA_ALTERNATE_INTENTS, alternateIntents) } ) - val testSubject = SelectionChangeCallbackImpl(uri, chooserIntent, contentResolver, flags) + val testSubject = SelectionChangeCallbackImpl(uri, chooserIntent, contentResolver) val targetIntent = Intent(ACTION_SEND) val result = testSubject.onSelectionChanged(targetIntent) @@ -264,6 +268,7 @@ class SelectionChangeCallbackImplTest { assertThat(result.refinementIntentSender).isEqualTo(Absent) assertThat(result.resultIntentSender).isEqualTo(Absent) assertThat(result.metadataText).isEqualTo(Absent) + assertThat(result.excludeComponents).isEqualTo(Absent) } @Test @@ -289,7 +294,7 @@ class SelectionChangeCallbackImplTest { Bundle().apply { putParcelableArray(EXTRA_CHOOSER_TARGETS, arrayOf(t1, t2)) } ) - val testSubject = SelectionChangeCallbackImpl(uri, chooserIntent, contentResolver, flags) + val testSubject = SelectionChangeCallbackImpl(uri, chooserIntent, contentResolver) val targetIntent = Intent(ACTION_SEND) val result = testSubject.onSelectionChanged(targetIntent) @@ -317,6 +322,7 @@ class SelectionChangeCallbackImplTest { assertThat(result.refinementIntentSender).isEqualTo(Absent) assertThat(result.resultIntentSender).isEqualTo(Absent) assertThat(result.metadataText).isEqualTo(Absent) + assertThat(result.excludeComponents).isEqualTo(Absent) } @Test @@ -331,7 +337,7 @@ class SelectionChangeCallbackImplTest { } ) - val testSubject = SelectionChangeCallbackImpl(uri, chooserIntent, contentResolver, flags) + val testSubject = SelectionChangeCallbackImpl(uri, chooserIntent, contentResolver) val targetIntent = Intent(ACTION_SEND) val result = testSubject.onSelectionChanged(targetIntent) @@ -344,6 +350,7 @@ class SelectionChangeCallbackImplTest { assertThat(result.refinementIntentSender.getOrThrow()).isNotNull() assertThat(result.resultIntentSender).isEqualTo(Absent) assertThat(result.metadataText).isEqualTo(Absent) + assertThat(result.excludeComponents).isEqualTo(Absent) } @Test @@ -358,7 +365,7 @@ class SelectionChangeCallbackImplTest { } ) - val testSubject = SelectionChangeCallbackImpl(uri, chooserIntent, contentResolver, flags) + val testSubject = SelectionChangeCallbackImpl(uri, chooserIntent, contentResolver) val targetIntent = Intent(ACTION_SEND) val result = testSubject.onSelectionChanged(targetIntent) @@ -371,6 +378,7 @@ class SelectionChangeCallbackImplTest { assertThat(result.refinementIntentSender).isEqualTo(Absent) assertThat(result.resultIntentSender.getOrThrow()).isNotNull() assertThat(result.metadataText).isEqualTo(Absent) + assertThat(result.excludeComponents).isEqualTo(Absent) } @Test @@ -379,7 +387,7 @@ class SelectionChangeCallbackImplTest { whenever(contentResolver.call(any<String>(), any(), any(), any())) .thenReturn(Bundle().apply { putCharSequence(EXTRA_METADATA_TEXT, metadataText) }) - val testSubject = SelectionChangeCallbackImpl(uri, chooserIntent, contentResolver, flags) + val testSubject = SelectionChangeCallbackImpl(uri, chooserIntent, contentResolver) val targetIntent = Intent(ACTION_SEND) val result = testSubject.onSelectionChanged(targetIntent) @@ -392,6 +400,35 @@ class SelectionChangeCallbackImplTest { assertThat(result.refinementIntentSender).isEqualTo(Absent) assertThat(result.resultIntentSender).isEqualTo(Absent) assertThat(result.metadataText.getOrThrow()).isEqualTo(metadataText) + assertThat(result.excludeComponents).isEqualTo(Absent) + } + + @Test + @EnableFlags(FLAG_SHAREOUSEL_UPDATE_EXCLUDE_COMPONENTS_EXTRA) + fun testPayloadChangeCallbackUpdatesExcludedComponents_valueUpdated() = runTest { + val excludedComponent = ComponentName("org.pkg.app", "org.pkg.app.TheClass") + whenever(contentResolver.call(any<String>(), any(), any(), any())) + .thenReturn( + Bundle().apply { + putParcelableArray(EXTRA_EXCLUDE_COMPONENTS, arrayOf(excludedComponent)) + } + ) + + val testSubject = SelectionChangeCallbackImpl(uri, chooserIntent, contentResolver) + + val targetIntent = Intent(ACTION_SEND) + val result = testSubject.onSelectionChanged(targetIntent) + + assertWithMessage("Callback result should not be null").that(result).isNotNull() + requireNotNull(result) + assertThat(result.customActions).isEqualTo(Absent) + assertThat(result.modifyShareAction).isEqualTo(Absent) + assertThat(result.alternateIntents).isEqualTo(Absent) + assertThat(result.callerTargets).isEqualTo(Absent) + assertThat(result.refinementIntentSender).isEqualTo(Absent) + assertThat(result.resultIntentSender).isEqualTo(Absent) + assertThat(result.metadataText).isEqualTo(Absent) + assertThat(result.excludeComponents.getOrThrow()).containsExactly(excludedComponent) } @Test @@ -409,7 +446,7 @@ class SelectionChangeCallbackImplTest { } ) - val testSubject = SelectionChangeCallbackImpl(uri, chooserIntent, contentResolver, flags) + val testSubject = SelectionChangeCallbackImpl(uri, chooserIntent, contentResolver) val targetIntent = Intent(ACTION_SEND) val result = testSubject.onSelectionChanged(targetIntent) |