summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--java/src/com/android/intentresolver/shortcuts/ShortcutLoader.kt38
-rw-r--r--tests/unit/src/com/android/intentresolver/contentpreview/PreviewImageLoaderTest.kt45
2 files changed, 41 insertions, 42 deletions
diff --git a/java/src/com/android/intentresolver/shortcuts/ShortcutLoader.kt b/java/src/com/android/intentresolver/shortcuts/ShortcutLoader.kt
index 1fedee30..828d8561 100644
--- a/java/src/com/android/intentresolver/shortcuts/ShortcutLoader.kt
+++ b/java/src/com/android/intentresolver/shortcuts/ShortcutLoader.kt
@@ -41,8 +41,8 @@ import com.android.intentresolver.chooser.DisplayResolveInfo
import com.android.intentresolver.measurements.Tracer
import com.android.intentresolver.measurements.runTracing
import java.util.concurrent.Executor
+import java.util.concurrent.atomic.AtomicReference
import java.util.function.Consumer
-import kotlinx.atomicfu.atomic
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.CoroutineStart
@@ -78,20 +78,20 @@ constructor(
private val isPersonalProfile: Boolean,
private val targetIntentFilter: IntentFilter?,
private val dispatcher: CoroutineDispatcher,
- private val callback: Consumer<Result>
+ private val callback: Consumer<Result>,
) {
private val scope =
if (fixShortcutLoaderJobLeak()) parentScope.createChildScope() else parentScope
private val shortcutToChooserTargetConverter = ShortcutToChooserTargetConverter()
private val userManager = context.getSystemService(Context.USER_SERVICE) as UserManager
- private val appPredictorWatchdog = atomic<Job?>(null)
+ private val appPredictorWatchdog = AtomicReference<Job?>(null)
private val appPredictorCallback =
ScopedAppTargetListCallback(scope) { onAppPredictorCallback(it) }.toAppPredictorCallback()
private val appTargetSource =
MutableSharedFlow<Array<DisplayResolveInfo>?>(
replay = 1,
- onBufferOverflow = BufferOverflow.DROP_OLDEST
+ onBufferOverflow = BufferOverflow.DROP_OLDEST,
)
private val shortcutSource =
MutableSharedFlow<ShortcutData?>(replay = 1, onBufferOverflow = BufferOverflow.DROP_OLDEST)
@@ -108,7 +108,7 @@ constructor(
appPredictor: AppPredictor?,
userHandle: UserHandle,
targetIntentFilter: IntentFilter?,
- callback: Consumer<Result>
+ callback: Consumer<Result>,
) : this(
context,
scope,
@@ -117,7 +117,7 @@ constructor(
userHandle == UserHandle.of(ActivityManager.getCurrentUser()),
targetIntentFilter,
Dispatchers.IO,
- callback
+ callback,
)
init {
@@ -134,7 +134,7 @@ constructor(
appTargets,
shortcutData.shortcuts,
shortcutData.isFromAppPredictor,
- shortcutData.appPredictorTargets
+ shortcutData.appPredictorTargets,
)
}
}
@@ -230,7 +230,7 @@ constructor(
sendShareShortcutInfoList(
emptyList(),
isFromAppPredictor = false,
- appPredictorTargets = null
+ appPredictorTargets = null,
)
return
}
@@ -256,7 +256,7 @@ constructor(
@WorkerThread
private fun onAppPredictorCallback(appPredictorTargets: List<AppTarget>) {
- appPredictorWatchdog.value?.cancel()
+ appPredictorWatchdog.get()?.cancel()
endAppPredictorQueryTrace(userHandle)
Log.d(TAG, "[$id] receive app targets from AppPredictor")
if (appPredictorTargets.isEmpty() && shouldQueryDirectShareTargets()) {
@@ -288,7 +288,7 @@ constructor(
private fun sendShareShortcutInfoList(
shortcuts: List<ShareShortcutInfo>,
isFromAppPredictor: Boolean,
- appPredictorTargets: List<AppTarget>?
+ appPredictorTargets: List<AppTarget>?,
) {
shortcutSource.tryEmit(ShortcutData(shortcuts, isFromAppPredictor, appPredictorTargets))
}
@@ -297,7 +297,7 @@ constructor(
appTargets: Array<DisplayResolveInfo>,
shortcuts: List<ShareShortcutInfo>,
isFromAppPredictor: Boolean,
- appPredictorTargets: List<AppTarget>?
+ appPredictorTargets: List<AppTarget>?,
): Result {
if (appPredictorTargets != null && appPredictorTargets.size != shortcuts.size) {
throw RuntimeException(
@@ -324,7 +324,7 @@ constructor(
shortcuts,
appPredictorTargets,
directShareAppTargetCache,
- directShareShortcutInfoCache
+ directShareShortcutInfoCache,
)
val resultRecord = ShortcutResultInfo(displayResolveInfo, chooserTargets)
resultRecords.add(resultRecord)
@@ -334,7 +334,7 @@ constructor(
appTargets,
resultRecords.toTypedArray(),
directShareAppTargetCache,
- directShareShortcutInfoCache
+ directShareShortcutInfoCache,
)
}
@@ -354,7 +354,7 @@ constructor(
private class ShortcutData(
val shortcuts: List<ShareShortcutInfo>,
val isFromAppPredictor: Boolean,
- val appPredictorTargets: List<AppTarget>?
+ val appPredictorTargets: List<AppTarget>?,
)
/** Resolved shortcuts with corresponding app targets. */
@@ -368,7 +368,7 @@ constructor(
/** Shortcuts grouped by app target. */
val shortcutsByApp: Array<ShortcutResultInfo>,
val directShareAppTargetCache: Map<ChooserTarget, AppTarget>,
- val directShareShortcutInfoCache: Map<ChooserTarget, ShortcutInfo>
+ val directShareShortcutInfoCache: Map<ChooserTarget, ShortcutInfo>,
)
private fun endAppPredictorQueryTrace(userHandle: UserHandle) {
@@ -379,12 +379,12 @@ constructor(
/** Shortcuts grouped by app. */
class ShortcutResultInfo(
val appTarget: DisplayResolveInfo,
- val shortcuts: List<ChooserTarget?>
+ val shortcuts: List<ChooserTarget?>,
)
private class ShortcutsAppTargetsPair(
val shortcuts: List<ShareShortcutInfo>,
- val appTargets: List<AppTarget>?
+ val appTargets: List<AppTarget>?,
)
/** A wrapper around AppPredictor to facilitate unit-testing. */
@@ -393,7 +393,7 @@ constructor(
/** [AppPredictor.registerPredictionUpdates] */
open fun registerPredictionUpdates(
callbackExecutor: Executor,
- callback: AppPredictor.Callback
+ callback: AppPredictor.Callback,
) = mAppPredictor.registerPredictionUpdates(callbackExecutor, callback)
/** [AppPredictor.unregisterPredictionUpdates] */
@@ -418,7 +418,7 @@ constructor(
packageName,
PackageManager.ApplicationInfoFlags.of(
PackageManager.GET_META_DATA.toLong()
- )
+ ),
)
appInfo.enabled && (appInfo.flags and ApplicationInfo.FLAG_SUSPENDED) == 0
}
diff --git a/tests/unit/src/com/android/intentresolver/contentpreview/PreviewImageLoaderTest.kt b/tests/unit/src/com/android/intentresolver/contentpreview/PreviewImageLoaderTest.kt
index 8293264c..8c810058 100644
--- a/tests/unit/src/com/android/intentresolver/contentpreview/PreviewImageLoaderTest.kt
+++ b/tests/unit/src/com/android/intentresolver/contentpreview/PreviewImageLoaderTest.kt
@@ -21,7 +21,6 @@ import android.net.Uri
import android.util.Size
import com.google.common.truth.Truth.assertThat
import java.util.concurrent.atomic.AtomicInteger
-import kotlinx.atomicfu.atomic
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.CoroutineScope
@@ -55,7 +54,7 @@ class PreviewImageLoaderTest {
1,
100,
thumbnailLoader,
- StandardTestDispatcher(scope.testScheduler)
+ StandardTestDispatcher(scope.testScheduler),
)
val b1 = testSubject.invoke(uri, Size(200, 100))
@@ -78,7 +77,7 @@ class PreviewImageLoaderTest {
1,
100,
thumbnailLoader,
- StandardTestDispatcher(scope.testScheduler)
+ StandardTestDispatcher(scope.testScheduler),
)
testSubject.invoke(uri, Size(200, 100), caching = false)
@@ -105,7 +104,7 @@ class PreviewImageLoaderTest {
1,
100,
thumbnailLoader,
- StandardTestDispatcher(scope.testScheduler)
+ StandardTestDispatcher(scope.testScheduler),
)
val b1Deferred = async { testSubject.invoke(uri, Size(200, 100), caching = false) }
@@ -148,7 +147,7 @@ class PreviewImageLoaderTest {
cacheSize = 1,
defaultPreviewSize = 100,
thumbnailLoader,
- StandardTestDispatcher(scope.testScheduler)
+ StandardTestDispatcher(scope.testScheduler),
)
val jobOne = launch { testSubject.invoke(uriOne, Size(200, 100)) }
@@ -189,7 +188,7 @@ class PreviewImageLoaderTest {
cacheSize = 1,
defaultPreviewSize = 100,
thumbnailLoader,
- StandardTestDispatcher(scope.testScheduler)
+ StandardTestDispatcher(scope.testScheduler),
)
val job = launch { testSubject.invoke(uri, Size(200, 100), caching = false) }
@@ -214,7 +213,7 @@ class PreviewImageLoaderTest {
1,
100,
thumbnailLoader,
- StandardTestDispatcher(scope.testScheduler)
+ StandardTestDispatcher(scope.testScheduler),
)
val b1 = testSubject.invoke(uri, Size(100, 100))
@@ -240,7 +239,7 @@ class PreviewImageLoaderTest {
1,
100,
thumbnailLoader,
- StandardTestDispatcher(scope.testScheduler)
+ StandardTestDispatcher(scope.testScheduler),
)
val bitmap = testSubject.invoke(uri, Size(100, 100))
@@ -251,7 +250,7 @@ class PreviewImageLoaderTest {
fun test_requestHigherResImage_cancelsLowerResLoading() =
scope.runTest {
val uri = createUri(0)
- val cancelledRequestCount = atomic(0)
+ val cancelledRequestCount = AtomicInteger(0)
val imageLoadingStarted = CompletableDeferred<Unit>()
val bitmapDeferred = CompletableDeferred<Bitmap>()
val thumbnailLoader =
@@ -272,7 +271,7 @@ class PreviewImageLoaderTest {
1,
100,
thumbnailLoader,
- StandardTestDispatcher(scope.testScheduler)
+ StandardTestDispatcher(scope.testScheduler),
)
val lowResSize = 100
@@ -283,7 +282,7 @@ class PreviewImageLoaderTest {
imageLoadingStarted.await()
val result = async { testSubject.invoke(uri, Size(highResSize, highResSize)) }
runCurrent()
- assertThat(cancelledRequestCount.value).isEqualTo(1)
+ assertThat(cancelledRequestCount.get()).isEqualTo(1)
bitmapDeferred.complete(createBitmap(highResSize, highResSize))
val bitmap = result.await()
@@ -308,7 +307,7 @@ class PreviewImageLoaderTest {
1,
100,
thumbnailLoader,
- StandardTestDispatcher(scope.testScheduler)
+ StandardTestDispatcher(scope.testScheduler),
)
val b1 = testSubject.invoke(uri, Size(highResSize, highResSize))
@@ -333,7 +332,7 @@ class PreviewImageLoaderTest {
cacheSize = 1,
defaultPreviewSize,
thumbnailLoader,
- StandardTestDispatcher(scope.testScheduler)
+ StandardTestDispatcher(scope.testScheduler),
)
val b1 = testSubject(uri, Size(0, 0))
@@ -349,7 +348,7 @@ class PreviewImageLoaderTest {
scope.runTest {
val previewSize = Size(100, 100)
val uris = List(2) { createUri(it) }
- val loadingCount = atomic(0)
+ val loadingCount = AtomicInteger(0)
val thumbnailLoader =
FakeThumbnailLoader().apply {
for (uri in uris) {
@@ -365,19 +364,19 @@ class PreviewImageLoaderTest {
1,
100,
thumbnailLoader,
- StandardTestDispatcher(scope.testScheduler)
+ StandardTestDispatcher(scope.testScheduler),
)
testSubject.prePopulate(uris.map { it to previewSize })
runCurrent()
- assertThat(loadingCount.value).isEqualTo(1)
+ assertThat(loadingCount.get()).isEqualTo(1)
assertThat(thumbnailLoader.invokeCalls).containsExactly(uris[0])
testSubject(uris[0], previewSize)
runCurrent()
- assertThat(loadingCount.value).isEqualTo(1)
+ assertThat(loadingCount.get()).isEqualTo(1)
}
@Test
@@ -402,7 +401,7 @@ class PreviewImageLoaderTest {
1,
100,
thumbnailLoader,
- StandardTestDispatcher(scope.testScheduler)
+ StandardTestDispatcher(scope.testScheduler),
)
testSubject(uriOne, previewSize)
@@ -419,7 +418,7 @@ class PreviewImageLoaderTest {
scope.runTest {
val previewSize = Size(100, 100)
val uri = createUri(1)
- val loadingCount = atomic(0)
+ val loadingCount = AtomicInteger(0)
val thumbnailLoader =
FakeThumbnailLoader().apply {
fakeInvoke[uri] = {
@@ -433,13 +432,13 @@ class PreviewImageLoaderTest {
1,
100,
thumbnailLoader,
- StandardTestDispatcher(scope.testScheduler)
+ StandardTestDispatcher(scope.testScheduler),
)
testSubject(uri, previewSize)
testSubject(uri, previewSize)
- assertThat(loadingCount.value).isEqualTo(2)
+ assertThat(loadingCount.get()).isEqualTo(2)
}
@Test(expected = CancellationException::class)
@@ -454,7 +453,7 @@ class PreviewImageLoaderTest {
1,
100,
thumbnailLoader,
- StandardTestDispatcher(scope.testScheduler)
+ StandardTestDispatcher(scope.testScheduler),
)
imageLoaderScope.cancel()
testSubject(uri, Size(200, 200))
@@ -480,7 +479,7 @@ class PreviewImageLoaderTest {
1,
100,
thumbnailLoader,
- StandardTestDispatcher(scope.testScheduler)
+ StandardTestDispatcher(scope.testScheduler),
)
launch {