From 933f17ecad35d0b5365b84a46fce18b00db61fbf Mon Sep 17 00:00:00 2001 From: Govinda Wasserman Date: Wed, 27 Jul 2022 15:29:16 -0400 Subject: [PATCH] Fix NPE when assistant component name is null Also moves user ID retrieval to UserTracker instead of binder call. Test: Ensure device is provisioned and assistant invocation is enabled Test: Add new user Test: Perform assistant invocation Test: Observe that no crash occurs BUG: 236751191 FIX: 236751191 Change-Id: I3d3bb12cbfdcc62ec62ddc0d54889e71f2d85704 --- .../android/systemui/assist/AssistLogger.kt | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistLogger.kt b/packages/SystemUI/src/com/android/systemui/assist/AssistLogger.kt index e30f2e440d7a2..7326ab36bd04e 100644 --- a/packages/SystemUI/src/com/android/systemui/assist/AssistLogger.kt +++ b/packages/SystemUI/src/com/android/systemui/assist/AssistLogger.kt @@ -25,10 +25,10 @@ import com.android.internal.logging.InstanceId import com.android.internal.logging.InstanceIdSequence import com.android.internal.logging.UiEventLogger import com.android.internal.util.FrameworkStatsLog -import com.android.keyguard.KeyguardUpdateMonitor import com.android.systemui.assist.AssistantInvocationEvent.Companion.deviceStateFromLegacyDeviceState import com.android.systemui.assist.AssistantInvocationEvent.Companion.eventFromLegacyInvocationType import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.settings.UserTracker import javax.inject.Inject /** Class for reporting events related to Assistant sessions. */ @@ -37,7 +37,8 @@ open class AssistLogger @Inject constructor( protected val context: Context, protected val uiEventLogger: UiEventLogger, private val assistUtils: AssistUtils, - private val phoneStateMonitor: PhoneStateMonitor + private val phoneStateMonitor: PhoneStateMonitor, + private val userTracker: UserTracker, ) { private val instanceIdSequence = InstanceIdSequence(INSTANCE_ID_MAX) @@ -78,7 +79,7 @@ open class AssistLogger @Inject constructor( FrameworkStatsLog.ASSISTANT_INVOCATION_REPORTED, invocationEvent.id, assistantUid, - assistComponentFinal.flattenToString(), + assistComponentFinal?.flattenToString() ?: "", getOrCreateInstanceId().id, deviceStateFinal, false) @@ -91,7 +92,7 @@ open class AssistLogger @Inject constructor( uiEventLogger.logWithInstanceId( sessionEvent, assistantUid, - assistantComponent.flattenToString(), + assistantComponent?.flattenToString(), getOrCreateInstanceId()) if (SESSION_END_EVENTS.contains(sessionEvent)) { @@ -112,11 +113,15 @@ open class AssistLogger @Inject constructor( currentInstanceId = null } - protected fun getAssistantComponentForCurrentUser(): ComponentName { - return assistUtils.getAssistComponentForUser(KeyguardUpdateMonitor.getCurrentUser()) + protected fun getAssistantComponentForCurrentUser(): ComponentName? { + return assistUtils.getAssistComponentForUser(userTracker.userId) } - protected fun getAssistantUid(assistantComponent: ComponentName): Int { + protected fun getAssistantUid(assistantComponent: ComponentName?): Int { + if (assistantComponent == null) { + return 0 + } + var assistantUid = 0 try { assistantUid = context.packageManager.getApplicationInfo( @@ -138,4 +143,4 @@ open class AssistLogger @Inject constructor( AssistantSessionEvent.ASSISTANT_SESSION_INVOCATION_CANCELLED, AssistantSessionEvent.ASSISTANT_SESSION_CLOSE) } -} \ No newline at end of file +}