summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
author Andrey Yepin <ayepin@google.com> 2024-10-07 15:43:44 -0700
committer Andrey Yepin <ayepin@google.com> 2024-10-08 15:45:57 -0700
commitde09e2d769cbffdc3ce206e5bd28aec85ddaf635 (patch)
tree3ab4c3cb3941f8e2761a3d77209bf6c9df9114db /tests
parentf6400db571602fbbb3c5fa88276c3e5ed40792da (diff)
CachingTargetDataLoader to cache bitmaps and not drawables
A preparation refactoring. Make ChachingTargetDataLoader to cache icon bitmaps instead of the end drawables. Drawables carry state and the same drawable can be used in two places in the target grid (i.e. in the ranked targets row and in the all-target grid) yet the new hover effect needs to be provided independently for each position. Bug: 295175912 Test: manual basic functinality testing including Shareousel selection change. Test: atest IntentResolver-tests-unit Flag: EXEMPT refactoring Change-Id: I1c5e6333310e0984e39e22cab8cf162f2f31d6e8 Change-Id: I4a3b5dff8fcfcffe7742be8ea3bd348351332c9e
Diffstat (limited to 'tests')
-rw-r--r--tests/activity/src/com/android/intentresolver/ResolverWrapperActivity.java2
-rw-r--r--tests/unit/src/com/android/intentresolver/icons/CachingTargetDataLoaderTest.kt61
2 files changed, 60 insertions, 3 deletions
diff --git a/tests/activity/src/com/android/intentresolver/ResolverWrapperActivity.java b/tests/activity/src/com/android/intentresolver/ResolverWrapperActivity.java
index 22633085..0d317dc3 100644
--- a/tests/activity/src/com/android/intentresolver/ResolverWrapperActivity.java
+++ b/tests/activity/src/com/android/intentresolver/ResolverWrapperActivity.java
@@ -160,7 +160,7 @@ public class ResolverWrapperActivity extends ResolverActivity {
}
}
- private static class TargetDataLoaderWrapper extends TargetDataLoader {
+ private static class TargetDataLoaderWrapper implements TargetDataLoader {
private final TargetDataLoader mTargetDataLoader;
private final CountingIdlingResource mLabelIdlingResource;
diff --git a/tests/unit/src/com/android/intentresolver/icons/CachingTargetDataLoaderTest.kt b/tests/unit/src/com/android/intentresolver/icons/CachingTargetDataLoaderTest.kt
index a36b512b..c5063eed 100644
--- a/tests/unit/src/com/android/intentresolver/icons/CachingTargetDataLoaderTest.kt
+++ b/tests/unit/src/com/android/intentresolver/icons/CachingTargetDataLoaderTest.kt
@@ -21,11 +21,16 @@ import android.content.Context
import android.content.Intent
import android.content.pm.ShortcutInfo
import android.graphics.Bitmap
+import android.graphics.Color
import android.graphics.drawable.BitmapDrawable
+import android.graphics.drawable.ColorDrawable
import android.graphics.drawable.Drawable
import android.graphics.drawable.Icon
import android.os.UserHandle
+import com.android.intentresolver.ResolverDataProvider.createResolveInfo
+import com.android.intentresolver.chooser.DisplayResolveInfo
import com.android.intentresolver.chooser.SelectableTargetInfo
+import com.android.intentresolver.chooser.TargetInfo
import java.util.function.Consumer
import org.junit.Test
import org.mockito.kotlin.any
@@ -37,6 +42,7 @@ import org.mockito.kotlin.verify
import org.mockito.kotlin.whenever
class CachingTargetDataLoaderTest {
+ private val context = mock<Context>()
private val userHandle = UserHandle.of(1)
@Test
@@ -61,7 +67,7 @@ class CachingTargetDataLoaderTest {
on { getOrLoadDirectShareIcon(eq(callerTarget), eq(userHandle), any()) } doReturn
null
}
- val testSubject = CachingTargetDataLoader(targetDataLoader)
+ val testSubject = CachingTargetDataLoader(context, targetDataLoader)
val callback = Consumer<Drawable> {}
testSubject.getOrLoadDirectShareIcon(callerTarget, userHandle, callback)
@@ -102,7 +108,7 @@ class CachingTargetDataLoaderTest {
}
.whenever(targetDataLoader)
.getOrLoadDirectShareIcon(eq(targetInfo), eq(userHandle), any())
- val testSubject = CachingTargetDataLoader(targetDataLoader)
+ val testSubject = CachingTargetDataLoader(context, targetDataLoader)
val callback = Consumer<Drawable> {}
testSubject.getOrLoadDirectShareIcon(targetInfo, userHandle, callback)
@@ -112,6 +118,57 @@ class CachingTargetDataLoaderTest {
1 * { getOrLoadDirectShareIcon(eq(targetInfo), eq(userHandle), any()) }
}
}
+
+ @Test
+ fun onlyBitmapsAreCached() {
+ val context =
+ mock<Context> {
+ on { userId } doReturn 1
+ on { packageName } doReturn "package"
+ }
+ val colorTargetInfo =
+ DisplayResolveInfo.newDisplayResolveInfo(
+ Intent(),
+ createResolveInfo(1, userHandle.identifier),
+ Intent(),
+ ) as DisplayResolveInfo
+ val bitmapTargetInfo =
+ DisplayResolveInfo.newDisplayResolveInfo(
+ Intent(),
+ createResolveInfo(2, userHandle.identifier),
+ Intent(),
+ ) as DisplayResolveInfo
+
+ val targetDataLoader = mock<TargetDataLoader>()
+ doAnswer {
+ val target = it.arguments[0] as TargetInfo
+ val callback = it.arguments[2] as Consumer<Drawable>
+ val drawable =
+ if (target === bitmapTargetInfo) {
+ BitmapDrawable(createBitmap())
+ } else {
+ ColorDrawable(Color.RED)
+ }
+ callback.accept(drawable)
+ null
+ }
+ .whenever(targetDataLoader)
+ .getOrLoadAppTargetIcon(any(), eq(userHandle), any())
+ val testSubject = CachingTargetDataLoader(context, targetDataLoader)
+ val callback = Consumer<Drawable> {}
+
+ testSubject.getOrLoadAppTargetIcon(colorTargetInfo, userHandle, callback)
+ testSubject.getOrLoadAppTargetIcon(colorTargetInfo, userHandle, callback)
+ testSubject.getOrLoadAppTargetIcon(bitmapTargetInfo, userHandle, callback)
+ testSubject.getOrLoadAppTargetIcon(bitmapTargetInfo, userHandle, callback)
+
+ verify(targetDataLoader) {
+ 2 * { getOrLoadAppTargetIcon(eq(colorTargetInfo), eq(userHandle), any()) }
+ }
+ verify(targetDataLoader) {
+ 1 * { getOrLoadAppTargetIcon(eq(bitmapTargetInfo), eq(userHandle), any()) }
+ }
+ }
}
private fun createBitmap() = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888)