summaryrefslogtreecommitdiff
path: root/java/tests
diff options
context:
space:
mode:
Diffstat (limited to 'java/tests')
-rw-r--r--java/tests/src/com/android/intentresolver/ChooserListAdapterTest.kt86
-rw-r--r--java/tests/src/com/android/intentresolver/ChooserWrapperActivity.java7
-rw-r--r--java/tests/src/com/android/intentresolver/ResolverActivityTest.java12
-rw-r--r--java/tests/src/com/android/intentresolver/ResolverWrapperActivity.java83
-rw-r--r--java/tests/src/com/android/intentresolver/ResolverWrapperAdapter.java86
5 files changed, 135 insertions, 139 deletions
diff --git a/java/tests/src/com/android/intentresolver/ChooserListAdapterTest.kt b/java/tests/src/com/android/intentresolver/ChooserListAdapterTest.kt
index 9504f377..4612b430 100644
--- a/java/tests/src/com/android/intentresolver/ChooserListAdapterTest.kt
+++ b/java/tests/src/com/android/intentresolver/ChooserListAdapterTest.kt
@@ -27,10 +27,10 @@ import android.widget.ImageView
import android.widget.TextView
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
-import com.android.intentresolver.ChooserListAdapter.LoadDirectShareIconTask
import com.android.intentresolver.chooser.DisplayResolveInfo
import com.android.intentresolver.chooser.SelectableTargetInfo
import com.android.intentresolver.chooser.TargetInfo
+import com.android.intentresolver.icons.TargetDataLoader
import com.android.internal.R
import org.junit.Before
import org.junit.Test
@@ -40,47 +40,43 @@ import org.mockito.Mockito.verify
@RunWith(AndroidJUnit4::class)
class ChooserListAdapterTest {
- private val PERSONAL_USER_HANDLE: UserHandle = InstrumentationRegistry
- .getInstrumentation().getTargetContext().getUser()
+ private val userHandle: UserHandle =
+ InstrumentationRegistry.getInstrumentation().targetContext.user
- private val packageManager = mock<PackageManager> {
- whenever(
- resolveActivity(any(), any<ResolveInfoFlags>())
- ).thenReturn(mock())
- }
- private val context = InstrumentationRegistry.getInstrumentation().getContext()
+ private val packageManager =
+ mock<PackageManager> {
+ whenever(resolveActivity(any(), any<ResolveInfoFlags>())).thenReturn(mock())
+ }
+ private val context = InstrumentationRegistry.getInstrumentation().context
private val resolverListController = mock<ResolverListController>()
private val chooserActivityLogger = mock<ChooserActivityLogger>()
+ private val mTargetDataLoader = mock<TargetDataLoader>()
- private fun createChooserListAdapter(
- taskProvider: (TargetInfo?) -> LoadDirectShareIconTask
- ) = object : ChooserListAdapter(
+ private val testSubject by lazy {
+ ChooserListAdapter(
context,
emptyList(),
emptyArray(),
emptyList(),
false,
resolverListController,
- null,
+ userHandle,
Intent(),
mock(),
packageManager,
chooserActivityLogger,
mock(),
0,
- null
- ) {
- override fun createLoadDirectShareIconTask(
- info: SelectableTargetInfo
- ): LoadDirectShareIconTask = taskProvider(info)
- }
+ null,
+ mTargetDataLoader
+ )
+ }
@Before
fun setup() {
// ChooserListAdapter reads DeviceConfig and needs a permission for that.
- InstrumentationRegistry
- .getInstrumentation()
- .getUiAutomation()
+ InstrumentationRegistry.getInstrumentation()
+ .uiAutomation
.adoptShellPermissionIdentity("android.permission.READ_DEVICE_CONFIG")
}
@@ -90,41 +86,56 @@ class ChooserListAdapterTest {
val viewHolder = ResolverListAdapter.ViewHolder(view)
view.tag = viewHolder
val targetInfo = createSelectableTargetInfo()
- val iconTask = mock<LoadDirectShareIconTask>()
- val testSubject = createChooserListAdapter { iconTask }
testSubject.onBindView(view, targetInfo, 0)
- verify(iconTask, times(1)).loadIcon()
+ verify(mTargetDataLoader, times(1)).loadDirectShareIcon(any(), any(), any())
}
@Test
- fun testOnlyOneTaskPerTarget() {
+ fun onBindView_DirectShareTargetIconAndLabelLoadedOnlyOnce() {
val view = createView()
val viewHolderOne = ResolverListAdapter.ViewHolder(view)
view.tag = viewHolderOne
val targetInfo = createSelectableTargetInfo()
- val iconTaskOne = mock<LoadDirectShareIconTask>()
- val testTaskProvider = mock<() -> LoadDirectShareIconTask> {
- whenever(invoke()).thenReturn(iconTaskOne)
- }
- val testSubject = createChooserListAdapter { testTaskProvider.invoke() }
testSubject.onBindView(view, targetInfo, 0)
val viewHolderTwo = ResolverListAdapter.ViewHolder(view)
view.tag = viewHolderTwo
- whenever(testTaskProvider()).thenReturn(mock())
testSubject.onBindView(view, targetInfo, 0)
- verify(iconTaskOne, times(1)).loadIcon()
- verify(testTaskProvider, times(1)).invoke()
+ verify(mTargetDataLoader, times(1)).loadDirectShareIcon(any(), any(), any())
+ }
+
+ @Test
+ fun onBindView_AppTargetIconAndLabelLoadedOnlyOnce() {
+ val view = createView()
+ val viewHolderOne = ResolverListAdapter.ViewHolder(view)
+ view.tag = viewHolderOne
+ val targetInfo =
+ DisplayResolveInfo.newDisplayResolveInfo(
+ Intent(),
+ ResolverDataProvider.createResolveInfo(2, 0, userHandle),
+ null,
+ "extended info",
+ Intent(),
+ /* resolveInfoPresentationGetter= */ null
+ )
+ testSubject.onBindView(view, targetInfo, 0)
+
+ val viewHolderTwo = ResolverListAdapter.ViewHolder(view)
+ view.tag = viewHolderTwo
+
+ testSubject.onBindView(view, targetInfo, 0)
+
+ verify(mTargetDataLoader, times(1)).loadAppTargetIcon(any(), any(), any())
}
private fun createSelectableTargetInfo(): TargetInfo =
SelectableTargetInfo.newSelectableTargetInfo(
/* sourceInfo = */ DisplayResolveInfo.newDisplayResolveInfo(
Intent(),
- ResolverDataProvider.createResolveInfo(2, 0, PERSONAL_USER_HANDLE),
+ ResolverDataProvider.createResolveInfo(2, 0, userHandle),
"label",
"extended info",
Intent(),
@@ -133,7 +144,10 @@ class ChooserListAdapterTest {
/* backupResolveInfo = */ mock(),
/* resolvedIntent = */ Intent(),
/* chooserTarget = */ createChooserTarget(
- "Target", 0.5f, ComponentName("pkg", "Class"), "id-1"
+ "Target",
+ 0.5f,
+ ComponentName("pkg", "Class"),
+ "id-1"
),
/* modifiedScore = */ 1f,
/* shortcutInfo = */ createShortcutInfo("id-1", ComponentName("pkg", "Class"), 1),
diff --git a/java/tests/src/com/android/intentresolver/ChooserWrapperActivity.java b/java/tests/src/com/android/intentresolver/ChooserWrapperActivity.java
index fa934f87..6ac6b6d3 100644
--- a/java/tests/src/com/android/intentresolver/ChooserWrapperActivity.java
+++ b/java/tests/src/com/android/intentresolver/ChooserWrapperActivity.java
@@ -39,6 +39,7 @@ import com.android.intentresolver.chooser.DisplayResolveInfo;
import com.android.intentresolver.chooser.TargetInfo;
import com.android.intentresolver.flags.FeatureFlagRepository;
import com.android.intentresolver.grid.ChooserGridAdapter;
+import com.android.intentresolver.icons.TargetDataLoader;
import com.android.intentresolver.shortcuts.ShortcutLoader;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -72,7 +73,8 @@ public class ChooserWrapperActivity
UserHandle userHandle,
Intent targetIntent,
ChooserRequestParameters chooserRequest,
- int maxTargetsPerRow) {
+ int maxTargetsPerRow,
+ TargetDataLoader targetDataLoader) {
PackageManager packageManager =
sOverrides.packageManager == null ? context.getPackageManager()
: sOverrides.packageManager;
@@ -90,7 +92,8 @@ public class ChooserWrapperActivity
getChooserActivityLogger(),
chooserRequest,
maxTargetsPerRow,
- userHandle);
+ userHandle,
+ targetDataLoader);
}
@Override
diff --git a/java/tests/src/com/android/intentresolver/ResolverActivityTest.java b/java/tests/src/com/android/intentresolver/ResolverActivityTest.java
index 31c0a498..7233fd3d 100644
--- a/java/tests/src/com/android/intentresolver/ResolverActivityTest.java
+++ b/java/tests/src/com/android/intentresolver/ResolverActivityTest.java
@@ -109,7 +109,7 @@ public class ResolverActivityTest {
setupResolverControllers(resolvedComponentInfos);
final ResolverWrapperActivity activity = mActivityRule.launchActivity(sendIntent);
- Espresso.registerIdlingResources(activity.getAdapter().getLabelIdlingResource());
+ Espresso.registerIdlingResources(activity.getLabelIdlingResource());
waitForIdle();
assertThat(activity.getAdapter().getCount(), is(2));
@@ -246,7 +246,7 @@ public class ResolverActivityTest {
ResolveInfo toChoose = personalResolvedComponentInfos.get(1).getResolveInfoAt(0);
Intent sendIntent = createSendImageIntent();
final ResolverWrapperActivity activity = mActivityRule.launchActivity(sendIntent);
- Espresso.registerIdlingResources(activity.getAdapter().getLabelIdlingResource());
+ Espresso.registerIdlingResources(activity.getLabelIdlingResource());
waitForIdle();
// The other entry is filtered to the last used slot
@@ -280,7 +280,7 @@ public class ResolverActivityTest {
setupResolverControllers(resolvedComponentInfos);
final ResolverWrapperActivity activity = mActivityRule.launchActivity(sendIntent);
- Espresso.registerIdlingResources(activity.getAdapter().getLabelIdlingResource());
+ Espresso.registerIdlingResources(activity.getLabelIdlingResource());
waitForIdle();
// The other entry is filtered to the other profile slot
@@ -321,7 +321,7 @@ public class ResolverActivityTest {
.thenReturn(resolvedComponentInfos.get(1).getResolveInfoAt(0));
final ResolverWrapperActivity activity = mActivityRule.launchActivity(sendIntent);
- Espresso.registerIdlingResources(activity.getAdapter().getLabelIdlingResource());
+ Espresso.registerIdlingResources(activity.getLabelIdlingResource());
waitForIdle();
// The other entry is filtered to the other profile slot
@@ -782,7 +782,7 @@ public class ResolverActivityTest {
.thenReturn(resolvedComponentInfos.get(1).getResolveInfoAt(0));
final ResolverWrapperActivity activity = mActivityRule.launchActivity(sendIntent);
- Espresso.registerIdlingResources(activity.getAdapter().getLabelIdlingResource());
+ Espresso.registerIdlingResources(activity.getLabelIdlingResource());
waitForIdle();
// The other entry is filtered to the last used slot
@@ -848,7 +848,7 @@ public class ResolverActivityTest {
.thenReturn(resolvedComponentInfos.get(0).getResolveInfoAt(0));
final ResolverWrapperActivity activity = mActivityRule.launchActivity(sendIntent);
- Espresso.registerIdlingResources(activity.getAdapter().getLabelIdlingResource());
+ Espresso.registerIdlingResources(activity.getLabelIdlingResource());
waitForIdle();
assertThat(activity.getAdapter().hasFilteredItem(), is(false));
diff --git a/java/tests/src/com/android/intentresolver/ResolverWrapperActivity.java b/java/tests/src/com/android/intentresolver/ResolverWrapperActivity.java
index 645e8c72..401ede26 100644
--- a/java/tests/src/com/android/intentresolver/ResolverWrapperActivity.java
+++ b/java/tests/src/com/android/intentresolver/ResolverWrapperActivity.java
@@ -22,19 +22,26 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import android.annotation.Nullable;
-import android.app.usage.UsageStatsManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
+import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.UserHandle;
import android.util.Pair;
+import androidx.annotation.NonNull;
+import androidx.test.espresso.idling.CountingIdlingResource;
+
import com.android.intentresolver.AbstractMultiProfilePagerAdapter.CrossProfileIntentsChecker;
+import com.android.intentresolver.chooser.DisplayResolveInfo;
+import com.android.intentresolver.chooser.SelectableTargetInfo;
import com.android.intentresolver.chooser.TargetInfo;
+import com.android.intentresolver.icons.TargetDataLoader;
import java.util.List;
+import java.util.function.Consumer;
import java.util.function.Function;
/*
@@ -42,7 +49,9 @@ import java.util.function.Function;
*/
public class ResolverWrapperActivity extends ResolverActivity {
static final OverrideData sOverrides = new OverrideData();
- private UsageStatsManager mUsm;
+
+ private final CountingIdlingResource mLabelIdlingResource =
+ new CountingIdlingResource("LoadLabelTask");
public ResolverWrapperActivity() {
super(/* isIntentPicker= */ true);
@@ -55,11 +64,20 @@ public class ResolverWrapperActivity extends ResolverActivity {
return 1234;
}
+ public CountingIdlingResource getLabelIdlingResource() {
+ return mLabelIdlingResource;
+ }
+
@Override
- public ResolverListAdapter createResolverListAdapter(Context context,
- List<Intent> payloadIntents, Intent[] initialIntents, List<ResolveInfo> rList,
- boolean filterLastUsed, UserHandle userHandle) {
- return new ResolverWrapperAdapter(
+ public ResolverListAdapter createResolverListAdapter(
+ Context context,
+ List<Intent> payloadIntents,
+ Intent[] initialIntents,
+ List<ResolveInfo> rList,
+ boolean filterLastUsed,
+ UserHandle userHandle,
+ TargetDataLoader targetDataLoader) {
+ return new ResolverListAdapter(
context,
payloadIntents,
initialIntents,
@@ -69,7 +87,8 @@ public class ResolverWrapperActivity extends ResolverActivity {
userHandle,
payloadIntents.get(0), // TODO: extract upstream
this,
- userHandle);
+ userHandle,
+ new TargetDataLoaderWrapper(targetDataLoader, mLabelIdlingResource));
}
@Override
@@ -88,8 +107,8 @@ public class ResolverWrapperActivity extends ResolverActivity {
return super.createWorkProfileAvailabilityManager();
}
- ResolverWrapperAdapter getAdapter() {
- return (ResolverWrapperAdapter) mMultiProfilePagerAdapter.getActiveListAdapter();
+ ResolverListAdapter getAdapter() {
+ return mMultiProfilePagerAdapter.getActiveListAdapter();
}
ResolverListAdapter getPersonalListAdapter() {
@@ -226,4 +245,50 @@ public class ResolverWrapperActivity extends ResolverActivity {
.thenAnswer(invocation -> hasCrossProfileIntents);
}
}
+
+ private static class TargetDataLoaderWrapper extends TargetDataLoader {
+ private final TargetDataLoader mTargetDataLoader;
+ private final CountingIdlingResource mLabelIdlingResource;
+
+ private TargetDataLoaderWrapper(
+ TargetDataLoader targetDataLoader, CountingIdlingResource labelIdlingResource) {
+ mTargetDataLoader = targetDataLoader;
+ mLabelIdlingResource = labelIdlingResource;
+ }
+
+ @Override
+ public void loadAppTargetIcon(
+ @NonNull DisplayResolveInfo info,
+ @NonNull UserHandle userHandle,
+ @NonNull Consumer<Drawable> callback) {
+ mTargetDataLoader.loadAppTargetIcon(info, userHandle, callback);
+ }
+
+ @Override
+ public void loadDirectShareIcon(
+ @NonNull SelectableTargetInfo info,
+ @NonNull UserHandle userHandle,
+ @NonNull Consumer<Drawable> callback) {
+ mTargetDataLoader.loadDirectShareIcon(info, userHandle, callback);
+ }
+
+ @Override
+ public void loadLabel(
+ @NonNull DisplayResolveInfo info,
+ @NonNull Consumer<CharSequence[]> callback) {
+ mLabelIdlingResource.increment();
+ mTargetDataLoader.loadLabel(
+ info,
+ (result) -> {
+ mLabelIdlingResource.decrement();
+ callback.accept(result);
+ });
+ }
+
+ @NonNull
+ @Override
+ public TargetPresentationGetter createPresentationGetter(@NonNull ResolveInfo info) {
+ return mTargetDataLoader.createPresentationGetter(info);
+ }
+ }
}
diff --git a/java/tests/src/com/android/intentresolver/ResolverWrapperAdapter.java b/java/tests/src/com/android/intentresolver/ResolverWrapperAdapter.java
deleted file mode 100644
index fd310fd8..00000000
--- a/java/tests/src/com/android/intentresolver/ResolverWrapperAdapter.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.intentresolver;
-
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.ResolveInfo;
-import android.os.UserHandle;
-
-import androidx.test.espresso.idling.CountingIdlingResource;
-
-import com.android.intentresolver.chooser.DisplayResolveInfo;
-
-import java.util.List;
-
-public class ResolverWrapperAdapter extends ResolverListAdapter {
-
- private CountingIdlingResource mLabelIdlingResource =
- new CountingIdlingResource("LoadLabelTask");
-
- public ResolverWrapperAdapter(
- Context context,
- List<Intent> payloadIntents,
- Intent[] initialIntents,
- List<ResolveInfo> rList,
- boolean filterLastUsed,
- ResolverListController resolverListController,
- UserHandle userHandle,
- Intent targetIntent,
- ResolverListCommunicator resolverListCommunicator,
- UserHandle initialIntentsUserHandle) {
- super(
- context,
- payloadIntents,
- initialIntents,
- rList,
- filterLastUsed,
- resolverListController,
- userHandle,
- targetIntent,
- resolverListCommunicator,
- false,
- initialIntentsUserHandle);
- }
-
- public CountingIdlingResource getLabelIdlingResource() {
- return mLabelIdlingResource;
- }
-
- @Override
- protected LoadLabelTask createLoadLabelTask(DisplayResolveInfo info) {
- return new LoadLabelWrapperTask(info);
- }
-
- class LoadLabelWrapperTask extends LoadLabelTask {
-
- protected LoadLabelWrapperTask(DisplayResolveInfo dri) {
- super(dri);
- }
-
- @Override
- protected void onPreExecute() {
- mLabelIdlingResource.increment();
- }
-
- @Override
- protected void onPostExecute(CharSequence[] result) {
- super.onPostExecute(result);
- mLabelIdlingResource.decrement();
- }
- }
-}