diff options
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/log/SessionTracker.java | 37 | ||||
| -rw-r--r-- | packages/SystemUI/tests/src/com/android/systemui/log/SessionTrackerTest.java | 63 |
2 files changed, 96 insertions, 4 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/log/SessionTracker.java b/packages/SystemUI/src/com/android/systemui/log/SessionTracker.java index b98a92ff8600..d848b431bcc9 100644 --- a/packages/SystemUI/src/com/android/systemui/log/SessionTracker.java +++ b/packages/SystemUI/src/com/android/systemui/log/SessionTracker.java @@ -28,6 +28,8 @@ import androidx.annotation.NonNull; import com.android.internal.logging.InstanceId; import com.android.internal.logging.InstanceIdSequence; +import com.android.internal.logging.UiEvent; +import com.android.internal.logging.UiEventLogger; import com.android.internal.statusbar.IStatusBarService; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitorCallback; @@ -60,6 +62,7 @@ public class SessionTracker implements CoreStartable { private final AuthController mAuthController; private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; private final KeyguardStateController mKeyguardStateController; + private final UiEventLogger mUiEventLogger; private final Map<Integer, InstanceId> mSessionToInstanceId = new HashMap<>(); private boolean mKeyguardSessionStarted; @@ -69,12 +72,14 @@ public class SessionTracker implements CoreStartable { IStatusBarService statusBarService, AuthController authController, KeyguardUpdateMonitor keyguardUpdateMonitor, - KeyguardStateController keyguardStateController + KeyguardStateController keyguardStateController, + UiEventLogger uiEventLogger ) { mStatusBarManagerService = statusBarService; mAuthController = authController; mKeyguardUpdateMonitor = keyguardUpdateMonitor; mKeyguardStateController = keyguardStateController; + mUiEventLogger = uiEventLogger; } @Override @@ -116,6 +121,10 @@ public class SessionTracker implements CoreStartable { } private void endSession(int type) { + endSession(type, null); + } + + private void endSession(int type, @Nullable SessionUiEvent endSessionUiEvent) { if (mSessionToInstanceId.getOrDefault(type, null) == null) { Log.e(TAG, "session [" + getString(type) + "] was not started"); return; @@ -127,6 +136,9 @@ public class SessionTracker implements CoreStartable { if (DEBUG) { Log.d(TAG, "Session end for [" + getString(type) + "] id=" + instanceId); } + if (endSessionUiEvent != null) { + mUiEventLogger.log(endSessionUiEvent, instanceId); + } mStatusBarManagerService.onSessionEnded(type, instanceId); } catch (RemoteException e) { Log.e(TAG, "Unable to send onSessionEnded for session=" @@ -139,7 +151,7 @@ public class SessionTracker implements CoreStartable { @Override public void onStartedGoingToSleep(int why) { if (mKeyguardSessionStarted) { - endSession(SESSION_KEYGUARD); + endSession(SESSION_KEYGUARD, SessionUiEvent.KEYGUARD_SESSION_END_GOING_TO_SLEEP); } // Start a new session whenever the device goes to sleep @@ -162,7 +174,8 @@ public class SessionTracker implements CoreStartable { startSession(SESSION_KEYGUARD); } else if (!keyguardShowing && wasSessionStarted) { mKeyguardSessionStarted = false; - endSession(SESSION_KEYGUARD); + endSession(SESSION_KEYGUARD, + SessionUiEvent.KEYGUARD_SESSION_END_KEYGUARD_GOING_AWAY); } } }; @@ -200,4 +213,22 @@ public class SessionTracker implements CoreStartable { return "unknownType=" + sessionType; } + + enum SessionUiEvent implements UiEventLogger.UiEventEnum { + @UiEvent(doc = "A keyguard session ended due to the keyguard going away.") + KEYGUARD_SESSION_END_KEYGUARD_GOING_AWAY(1354), + + @UiEvent(doc = "A keyguard session ended due to display going to sleep.") + KEYGUARD_SESSION_END_GOING_TO_SLEEP(1355); + + private final int mId; + SessionUiEvent(int id) { + mId = id; + } + + @Override + public int getId() { + return mId; + } + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/log/SessionTrackerTest.java b/packages/SystemUI/tests/src/com/android/systemui/log/SessionTrackerTest.java index aa54a1cdf579..447b333b942f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/log/SessionTrackerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/log/SessionTrackerTest.java @@ -26,6 +26,7 @@ import static junit.framework.Assert.assertNull; import static org.junit.Assert.assertNotEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -37,6 +38,7 @@ import android.testing.TestableLooper; import androidx.test.filters.SmallTest; import com.android.internal.logging.InstanceId; +import com.android.internal.logging.UiEventLogger; import com.android.internal.statusbar.IStatusBarService; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitorCallback; @@ -64,6 +66,8 @@ public class SessionTrackerTest extends SysuiTestCase { private KeyguardUpdateMonitor mKeyguardUpdateMonitor; @Mock private KeyguardStateController mKeyguardStateController; + @Mock + private UiEventLogger mUiEventLogger; @Captor ArgumentCaptor<KeyguardUpdateMonitorCallback> mKeyguardUpdateMonitorCallbackCaptor; @@ -87,7 +91,8 @@ public class SessionTrackerTest extends SysuiTestCase { mStatusBarService, mAuthController, mKeyguardUpdateMonitor, - mKeyguardStateController + mKeyguardStateController, + mUiEventLogger ); } @@ -238,6 +243,62 @@ public class SessionTrackerTest extends SysuiTestCase { eq(SESSION_KEYGUARD), any(InstanceId.class)); } + @Test + public void uiEventLoggedOnEndSessionWhenDeviceStartsSleeping() throws RemoteException { + // GIVEN session tracker start + mSessionTracker.start(); + captureKeyguardUpdateMonitorCallback(); + captureKeyguardStateControllerCallback(); + + // GIVEN keyguard becomes visible (ie: from lockdown), so there's a valid keyguard + // session running + when(mKeyguardStateController.isShowing()).thenReturn(true); + mKeyguardStateCallback.onKeyguardShowingChanged(); + + // WHEN device starts going to sleep + mKeyguardUpdateMonitorCallback.onStartedGoingToSleep(0); + + // THEN UI event is logged + verify(mUiEventLogger).log( + eq(SessionTracker.SessionUiEvent.KEYGUARD_SESSION_END_GOING_TO_SLEEP), + any(InstanceId.class)); + } + + @Test + public void noUiEventLoggedOnEndSessionWhenDeviceStartsSleepingWithoutStartSession() + throws RemoteException { + // GIVEN session tracker start without any valid sessions + mSessionTracker.start(); + captureKeyguardUpdateMonitorCallback(); + + // WHEN device starts going to sleep when there was no started sessions + mKeyguardUpdateMonitorCallback.onStartedGoingToSleep(0); + + // THEN UI event is never logged + verify(mUiEventLogger, never()).log( + eq(SessionTracker.SessionUiEvent.KEYGUARD_SESSION_END_GOING_TO_SLEEP), + any(InstanceId.class)); + } + + @Test + public void uiEventLoggedOnEndSessionWhenKeyguardGoingAway() throws RemoteException { + // GIVEN session tracker started w/o any sessions + mSessionTracker.start(); + captureKeyguardUpdateMonitorCallback(); + captureKeyguardStateControllerCallback(); + + // WHEN keyguard was showing and now it's not + when(mKeyguardStateController.isShowing()).thenReturn(true); + mKeyguardStateCallback.onKeyguardShowingChanged(); + when(mKeyguardStateController.isShowing()).thenReturn(false); + mKeyguardStateCallback.onKeyguardShowingChanged(); + + // THEN UI event is logged + verify(mUiEventLogger).log( + eq(SessionTracker.SessionUiEvent.KEYGUARD_SESSION_END_KEYGUARD_GOING_AWAY), + any(InstanceId.class)); + } + void captureKeyguardUpdateMonitorCallback() { verify(mKeyguardUpdateMonitor).registerCallback( mKeyguardUpdateMonitorCallbackCaptor.capture()); |