From bf2977684f6518a140e44035e01b8873a4c76453 Mon Sep 17 00:00:00 2001 From: Andrey Epin Date: Sun, 26 Mar 2023 23:06:37 -0700 Subject: Fallback to ShortcutManager if AppPredictor has crashed Bug: 269230501 Test: unit tests Change-Id: If5ac83d0f301bda8d00721f56ed8df88332a147f --- .../com/android/intentresolver/shortcuts/ShortcutLoader.kt | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'java/src') diff --git a/java/src/com/android/intentresolver/shortcuts/ShortcutLoader.kt b/java/src/com/android/intentresolver/shortcuts/ShortcutLoader.kt index 6f7542f1..29e706d4 100644 --- a/java/src/com/android/intentresolver/shortcuts/ShortcutLoader.kt +++ b/java/src/com/android/intentresolver/shortcuts/ShortcutLoader.kt @@ -77,6 +77,7 @@ open class ShortcutLoader @VisibleForTesting constructor( private val userManager = context.getSystemService(Context.USER_SERVICE) as UserManager private val activeRequest = AtomicReference(NO_REQUEST) private val appPredictorCallback = AppPredictor.Callback { onAppPredictorCallback(it) } + @Volatile private var isDestroyed = false @MainThread @@ -134,8 +135,14 @@ open class ShortcutLoader @VisibleForTesting constructor( @WorkerThread private fun queryDirectShareTargets(skipAppPredictionService: Boolean) { if (!skipAppPredictionService && appPredictor != null) { - appPredictor.requestPredictionUpdate() - return + try { + appPredictor.requestPredictionUpdate() + return + } catch (e: Throwable) { + // we might have been destroyed concurrently, nothing left to do + if (isDestroyed) return + Log.e(TAG, "Failed to query AppPredictor", e) + } } // Default to just querying ShortcutManager if AppPredictor not present. if (targetIntentFilter == null) return -- cgit v1.2.3-59-g8ed1b