diff options
-rw-r--r-- | java/src/com/android/intentresolver/shortcuts/ShortcutLoader.kt | 38 | ||||
-rw-r--r-- | tests/unit/src/com/android/intentresolver/contentpreview/PreviewImageLoaderTest.kt | 45 |
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 { |