diff options
| author | 2022-10-06 18:40:29 -0700 | |
|---|---|---|
| committer | 2022-11-04 16:00:15 -0700 | |
| commit | 0c7df5fef314e451cac57521b10e5f34cc269d92 (patch) | |
| tree | cd6fb7fadc3a10b6589a293634ee3d840c533d96 /java/tests/src | |
| parent | d98c446b684a41d073a28093d139b94642f45ac9 (diff) | |
Simplify SelectableTargetInfo dependencies
Remove “functional” (Context, PackageManager, and
SelectableTargetInfoCommunicator) and obsolete dependencies from
SelectableTargetInfo.
Changes to SelectableTargetInfo:
1. Fields mBadgeIcon, mBadgeContentDescriptor were never read and thus
removed.
2. Values previously provided by SelectableTargetInfoCommunicator are
inlined or pre-calculated:
- getTargetIntent() used in the resolved intent calculation replaced
with a pre-calculated resolved intent value (we can do it as target
intent does not change);
- getReferrerFillInIntent() passed as an argument (we can do it as the
value does not change).
3. As ChooserListAdapter.LoadDirectShareIconTask was the only place that
invoked SelectableTargetInfo#loadIcon(), icon loading logic,
SelectableTargetInfo#getChooserTargetIconDrawable method, is moved
over there and the related code is deleted from SelectableTargetInfo.
4. SelectableTargetInfo.SelectableTargetInfoCommunicator
#makePresentatinGetter() removed as not used.
Changes to TargetInfo (and related classes):
1. TargetInfo#setDrawableIcon() is added to the interface as a way for
ChooserListAdapter#LoadDirectShareIconTask to update the icon.
2. NotSelectableTargetInfo#newPlaceHolderInfo() changed to receive a
context that would be used by the target it creates.
3. After the aforementioned changes no implementation of the
TargetInfo#getDisplayIcon actually uses its Context argument, thus it
is deleted.
4. A default implementation added for TargetInfo#hasDisplayIcon method
as all implementations, essentially, were the same.
5. TargetInfo#loadIcon removed as not used.
Fix: 257285229
Test: manual functinality test
Test: atest IntentResolverUnitTests
Change-Id: I448ebed9c5346092ebca6c4e356830c55288d55b
Diffstat (limited to 'java/tests/src')
3 files changed, 81 insertions, 50 deletions
diff --git a/java/tests/src/com/android/intentresolver/ChooserListAdapterTest.kt b/java/tests/src/com/android/intentresolver/ChooserListAdapterTest.kt index 6ca7c5d1..c43b014c 100644 --- a/java/tests/src/com/android/intentresolver/ChooserListAdapterTest.kt +++ b/java/tests/src/com/android/intentresolver/ChooserListAdapterTest.kt @@ -17,10 +17,9 @@ package com.android.intentresolver import android.content.ComponentName +import android.content.Intent import android.content.pm.PackageManager import android.content.pm.PackageManager.ResolveInfoFlags -import android.os.Bundle -import android.service.chooser.ChooserTarget import android.view.View import android.widget.FrameLayout import android.widget.ImageView @@ -71,7 +70,7 @@ class ChooserListAdapterTest { chooserActivityLogger, ) { override fun createLoadDirectShareIconTask( - info: TargetInfo? + info: SelectableTargetInfo ): LoadDirectShareIconTask = taskProvider(info) } @@ -122,22 +121,16 @@ class ChooserListAdapterTest { private fun createSelectableTargetInfo(): TargetInfo = SelectableTargetInfo.newSelectableTargetInfo( - context, - null, - createChooserTarget(), - 1f, - selectableTargetInfoCommunicator, - null, - null - ) - - private fun createChooserTarget(): ChooserTarget = - ChooserTarget( - "Title", - null, - 1f, - ComponentName("package", "package.Class"), - Bundle() + /* sourceInfo = */ mock(), + /* backupResolveInfo = */ mock(), + /* resolvedIntent = */ Intent(), + /* chooserTarget = */ createChooserTarget( + "Target", 0.5f, ComponentName("pkg", "Class"), "id-1" + ), + /* modifiedScore = */ 1f, + /* shortcutInfo = */ createShortcutInfo("id-1", ComponentName("pkg", "Class"), 1), + /* appTarget */ null, + /* referrerFillInIntent = */ Intent() ) private fun createView(): View { diff --git a/java/tests/src/com/android/intentresolver/ShortcutSelectionLogicTest.kt b/java/tests/src/com/android/intentresolver/ShortcutSelectionLogicTest.kt index 8581ed0c..2c56e613 100644 --- a/java/tests/src/com/android/intentresolver/ShortcutSelectionLogicTest.kt +++ b/java/tests/src/com/android/intentresolver/ShortcutSelectionLogicTest.kt @@ -18,11 +18,10 @@ package com.android.intentresolver import android.content.ComponentName import android.content.Context -import android.content.Intent import android.content.pm.ShortcutInfo import android.service.chooser.ChooserTarget import com.android.intentresolver.chooser.TargetInfo -import com.android.intentresolver.chooser.SelectableTargetInfo.SelectableTargetInfoCommunicator +import androidx.test.filters.SmallTest import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue import org.junit.Test @@ -31,6 +30,7 @@ private const val PACKAGE_A = "package.a" private const val PACKAGE_B = "package.b" private const val CLASS_NAME = "./MainActivity" +@SmallTest class ShortcutSelectionLogicTest { private val packageTargets = HashMap<String, Array<ChooserTarget>>().apply { arrayOf(PACKAGE_A, PACKAGE_B).forEach { pkg -> @@ -68,7 +68,8 @@ class ShortcutSelectionLogicTest { /* directShareToShortcutInfos = */ emptyMap(), /* directShareToAppTargets = */ emptyMap(), /* userContext = */ mock(), - /* mSelectableTargetInfoCommunicator = */ mock(), + /* targetIntent = */ mock(), + /* refererFillInIntent = */ mock(), /* maxRankedTargets = */ 4, /* serviceTargets = */ serviceResults ) @@ -99,7 +100,8 @@ class ShortcutSelectionLogicTest { /* directShareToShortcutInfos = */ emptyMap(), /* directShareToAppTargets = */ emptyMap(), /* userContext = */ mock(), - /* mSelectableTargetInfoCommunicator = */ mock(), + /* targetIntent = */ mock(), + /* refererFillInIntent = */ mock(), /* maxRankedTargets = */ 4, /* serviceTargets = */ serviceResults ) @@ -130,7 +132,8 @@ class ShortcutSelectionLogicTest { /* directShareToShortcutInfos = */ emptyMap(), /* directShareToAppTargets = */ emptyMap(), /* userContext = */ mock(), - /* mSelectableTargetInfoCommunicator = */ mock(), + /* targetIntent = */ mock(), + /* refererFillInIntent = */ mock(), /* maxRankedTargets = */ 1, /* serviceTargets = */ serviceResults ) @@ -163,7 +166,8 @@ class ShortcutSelectionLogicTest { /* directShareToShortcutInfos = */ emptyMap(), /* directShareToAppTargets = */ emptyMap(), /* userContext = */ mock(), - /* mSelectableTargetInfoCommunicator = */ mock(), + /* targetIntent = */ mock(), + /* refererFillInIntent = */ mock(), /* maxRankedTargets = */ 4, /* serviceTargets = */ serviceResults ) @@ -175,7 +179,8 @@ class ShortcutSelectionLogicTest { /* directShareToShortcutInfos = */ emptyMap(), /* directShareToAppTargets = */ emptyMap(), /* userContext = */ mock(), - /* mSelectableTargetInfoCommunicator = */ mock(), + /* targetIntent = */ mock(), + /* refererFillInIntent = */ mock(), /* maxRankedTargets = */ 4, /* serviceTargets = */ serviceResults ) @@ -211,7 +216,8 @@ class ShortcutSelectionLogicTest { ), /* directShareToAppTargets = */ emptyMap(), /* userContext = */ mock(), - /* mSelectableTargetInfoCommunicator = */ mock(), + /* targetIntent = */ mock(), + /* refererFillInIntent = */ mock(), /* maxRankedTargets = */ 4, /* serviceTargets = */ serviceResults ) @@ -234,9 +240,6 @@ class ShortcutSelectionLogicTest { /* maxShortcutTargetsPerApp = */ 1, /* applySharingAppLimits = */ true ) - val targetInfoCommunicator = mock<SelectableTargetInfoCommunicator> { - whenever(targetIntent).thenReturn(Intent()) - } val context = mock<Context> { whenever(packageManager).thenReturn(mock()) } @@ -249,7 +252,8 @@ class ShortcutSelectionLogicTest { /* directShareToShortcutInfos = */ emptyMap(), /* directShareToAppTargets = */ emptyMap(), /* userContext = */ context, - /* mSelectableTargetInfoCommunicator = */ targetInfoCommunicator, + /* targetIntent = */ mock(), + /* refererFillInIntent = */ mock(), /* maxRankedTargets = */ 4, /* serviceTargets = */ serviceResults ) diff --git a/java/tests/src/com/android/intentresolver/chooser/TargetInfoTest.kt b/java/tests/src/com/android/intentresolver/chooser/TargetInfoTest.kt index ae9c0f8d..11837e08 100644 --- a/java/tests/src/com/android/intentresolver/chooser/TargetInfoTest.kt +++ b/java/tests/src/com/android/intentresolver/chooser/TargetInfoTest.kt @@ -18,16 +18,16 @@ package com.android.intentresolver.chooser import android.app.prediction.AppTarget import android.app.prediction.AppTargetId +import android.content.ComponentName import android.content.Intent -import android.content.pm.ShortcutInfo +import android.content.pm.ActivityInfo +import android.content.pm.ResolveInfo import android.os.UserHandle -import android.service.chooser.ChooserTarget import androidx.test.platform.app.InstrumentationRegistry import com.android.intentresolver.createChooserTarget import com.android.intentresolver.createShortcutInfo import com.android.intentresolver.mock import com.android.intentresolver.ResolverDataProvider -import com.android.intentresolver.chooser.SelectableTargetInfo.SelectableTargetInfoCommunicator import com.google.common.truth.Truth.assertThat import org.junit.Test @@ -40,12 +40,12 @@ class TargetInfoTest { assertThat(info.isEmptyTargetInfo()).isTrue() assertThat(info.isChooserTargetInfo()).isTrue() // From legacy inheritance model. assertThat(info.hasDisplayIcon()).isFalse() - assertThat(info.getDisplayIcon(context)).isNull() + assertThat(info.getDisplayIcon()).isNull() } @Test fun testNewPlaceholderTargetInfo() { - val info = NotSelectableTargetInfo.newPlaceHolderTargetInfo() + val info = NotSelectableTargetInfo.newPlaceHolderTargetInfo(context) assertThat(info.isPlaceHolderTargetInfo()).isTrue() assertThat(info.isChooserTargetInfo()).isTrue() // From legacy inheritance model. assertThat(info.hasDisplayIcon()).isTrue() @@ -57,34 +57,68 @@ class TargetInfoTest { val displayInfo: DisplayResolveInfo = mock() val chooserTarget = createChooserTarget( "title", 0.3f, ResolverDataProvider.createComponentName(1), "test_shortcut_id") - val selectableTargetInfoCommunicator: SelectableTargetInfoCommunicator = mock() val shortcutInfo = createShortcutInfo("id", ResolverDataProvider.createComponentName(2), 3) val appTarget = AppTarget( AppTargetId("id"), - chooserTarget.getComponentName().getPackageName(), - chooserTarget.getComponentName().getClassName(), + chooserTarget.componentName.packageName, + chooserTarget.componentName.className, UserHandle.CURRENT) + val resolvedIntent = mock<Intent>() val targetInfo = SelectableTargetInfo.newSelectableTargetInfo( - context, displayInfo, + mock(), + resolvedIntent, chooserTarget, 0.1f, - selectableTargetInfoCommunicator, shortcutInfo, - appTarget) - assertThat(targetInfo.isSelectableTargetInfo()).isTrue() - assertThat(targetInfo.isChooserTargetInfo()).isTrue() // From legacy inheritance model. - assertThat(targetInfo.getDisplayResolveInfo()).isSameInstanceAs(displayInfo) - assertThat(targetInfo.getChooserTargetComponentName()) - .isEqualTo(chooserTarget.getComponentName()) - assertThat(targetInfo.getDirectShareShortcutId()).isEqualTo(shortcutInfo.getId()) - assertThat(targetInfo.getDirectShareShortcutInfo()).isSameInstanceAs(shortcutInfo) - assertThat(targetInfo.getDirectShareAppTarget()).isSameInstanceAs(appTarget) + appTarget, + mock(), + ) + assertThat(targetInfo.isSelectableTargetInfo).isTrue() + assertThat(targetInfo.isChooserTargetInfo).isTrue() // From legacy inheritance model. + assertThat(targetInfo.displayResolveInfo).isSameInstanceAs(displayInfo) + assertThat(targetInfo.chooserTargetComponentName).isEqualTo(chooserTarget.componentName) + assertThat(targetInfo.directShareShortcutId).isEqualTo(shortcutInfo.id) + assertThat(targetInfo.directShareShortcutInfo).isSameInstanceAs(shortcutInfo) + assertThat(targetInfo.directShareAppTarget).isSameInstanceAs(appTarget) + assertThat(targetInfo.resolvedIntent).isSameInstanceAs(resolvedIntent) // TODO: make more meaningful assertions about the behavior of a selectable target. } @Test + fun test_SelectableTargetInfo_componentName_no_source_info() { + val chooserTarget = createChooserTarget( + "title", 0.3f, ResolverDataProvider.createComponentName(1), "test_shortcut_id") + val shortcutInfo = createShortcutInfo("id", ResolverDataProvider.createComponentName(2), 3) + val appTarget = AppTarget( + AppTargetId("id"), + chooserTarget.componentName.packageName, + chooserTarget.componentName.className, + UserHandle.CURRENT) + val pkgName = "org.package" + val className = "MainActivity" + val backupResolveInfo = ResolveInfo().apply { + activityInfo = ActivityInfo().apply { + packageName = pkgName + name = className + } + } + + val targetInfo = SelectableTargetInfo.newSelectableTargetInfo( + null, + backupResolveInfo, + mock(), + chooserTarget, + 0.1f, + shortcutInfo, + appTarget, + mock(), + ) + assertThat(targetInfo.resolvedComponentName).isEqualTo(ComponentName(pkgName, className)) + } + + @Test fun testNewDisplayResolveInfo() { val intent = Intent(Intent.ACTION_SEND) intent.putExtra(Intent.EXTRA_TEXT, "testing intent sending") |