summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/UdfpsControllerTest.java9
-rw-r--r--packages/SystemUI/src/com/android/keyguard/UserActivityNotifier.kt21
-rw-r--r--packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java16
-rw-r--r--packages/SystemUI/src/com/android/systemui/power/data/repository/PowerRepository.kt26
-rw-r--r--packages/SystemUI/src/com/android/systemui/shade/GlanceableHubContainerController.kt18
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/power/data/repository/PowerRepositoryImplTest.kt15
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/shade/GlanceableHubContainerControllerTest.kt5
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/UserActivityNotifierKosmos.kt27
8 files changed, 108 insertions, 29 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/UdfpsControllerTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/UdfpsControllerTest.java
index 675c9deaff23..56c018218269 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/UdfpsControllerTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/UdfpsControllerTest.java
@@ -16,6 +16,8 @@
package com.android.systemui.biometrics;
+import static com.android.systemui.SysuiTestCaseExtKt.testKosmos;
+
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
@@ -69,7 +71,9 @@ import com.android.systemui.deviceentry.domain.interactor.DeviceEntryFaceAuthInt
import com.android.systemui.dump.DumpManager;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.keyguard.ScreenLifecycle;
+import com.android.systemui.keyguard.UserActivityNotifierKosmosKt;
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor;
+import com.android.systemui.kosmos.Kosmos;
import com.android.systemui.log.SessionTracker;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
@@ -115,7 +119,7 @@ import java.util.List;
@RunWith(AndroidJUnit4.class)
@RunWithLooper(setAsMainLooper = true)
public class UdfpsControllerTest extends SysuiTestCase {
-
+ private final Kosmos mKosmos = testKosmos(this);
private static final long TEST_REQUEST_ID = 70;
@Rule
@@ -325,7 +329,8 @@ public class UdfpsControllerTest extends SysuiTestCase {
mDefaultUdfpsTouchOverlayViewModel,
mUdfpsOverlayInteractor,
mPowerInteractor,
- mock(CoroutineScope.class)
+ mock(CoroutineScope.class),
+ UserActivityNotifierKosmosKt.getUserActivityNotifier(mKosmos)
);
verify(mFingerprintManager).setUdfpsOverlayController(mOverlayCaptor.capture());
mOverlayController = mOverlayCaptor.getValue();
diff --git a/packages/SystemUI/src/com/android/keyguard/UserActivityNotifier.kt b/packages/SystemUI/src/com/android/keyguard/UserActivityNotifier.kt
index 9b1ddb74c3b2..76c032a616ef 100644
--- a/packages/SystemUI/src/com/android/keyguard/UserActivityNotifier.kt
+++ b/packages/SystemUI/src/com/android/keyguard/UserActivityNotifier.kt
@@ -15,27 +15,30 @@
*/
package com.android.keyguard
+import android.annotation.SuppressLint
import android.os.PowerManager
import android.os.SystemClock
+import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.UiBackground
import java.util.concurrent.Executor
import javax.inject.Inject
/** Wrapper class for notifying the system about user activity in the background. */
+@SysUISingleton
class UserActivityNotifier
@Inject
constructor(
@UiBackground private val uiBgExecutor: Executor,
- private val powerManager: PowerManager
+ private val powerManager: PowerManager,
) {
- fun notifyUserActivity() {
- uiBgExecutor.execute {
- powerManager.userActivity(
- SystemClock.uptimeMillis(),
- PowerManager.USER_ACTIVITY_EVENT_OTHER,
- 0
- )
- }
+ @SuppressLint("MissingPermission")
+ @JvmOverloads
+ fun notifyUserActivity(
+ timeOfActivity: Long = SystemClock.uptimeMillis(),
+ event: Int = PowerManager.USER_ACTIVITY_EVENT_OTHER,
+ flags: Int = 0,
+ ) {
+ uiBgExecutor.execute { powerManager.userActivity(timeOfActivity, event, flags) }
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java
index dbaa90c10313..9064966b25c6 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java
@@ -69,7 +69,9 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.InstanceId;
import com.android.internal.util.LatencyTracker;
import com.android.keyguard.KeyguardUpdateMonitor;
+import com.android.keyguard.UserActivityNotifier;
import com.android.systemui.Dumpable;
+import com.android.systemui.Flags;
import com.android.systemui.animation.ActivityTransitionAnimator;
import com.android.systemui.biometrics.dagger.BiometricsBackground;
import com.android.systemui.biometrics.domain.interactor.UdfpsOverlayInteractor;
@@ -146,6 +148,7 @@ public class UdfpsController implements DozeReceiver, Dumpable {
private final Execution mExecution;
private final FingerprintManager mFingerprintManager;
@NonNull private final LayoutInflater mInflater;
+ private final UserActivityNotifier mUserActivityNotifier;
private final WindowManager mWindowManager;
private final DelayableExecutor mFgExecutor;
@NonNull private final Executor mBiometricExecutor;
@@ -696,11 +699,13 @@ public class UdfpsController implements DozeReceiver, Dumpable {
Lazy<DefaultUdfpsTouchOverlayViewModel> defaultUdfpsTouchOverlayViewModel,
@NonNull UdfpsOverlayInteractor udfpsOverlayInteractor,
@NonNull PowerInteractor powerInteractor,
- @Application CoroutineScope scope) {
+ @Application CoroutineScope scope,
+ UserActivityNotifier userActivityNotifier) {
mContext = context;
mExecution = execution;
mVibrator = vibrator;
mInflater = inflater;
+ mUserActivityNotifier = userActivityNotifier;
mIgnoreRefreshRate = mContext.getResources()
.getBoolean(R.bool.config_ignoreUdfpsVote);
// The fingerprint manager is queried for UDFPS before this class is constructed, so the
@@ -1045,8 +1050,13 @@ public class UdfpsController implements DozeReceiver, Dumpable {
mLatencyTracker.onActionStart(ACTION_UDFPS_ILLUMINATE);
}
// Refresh screen timeout and boost process priority if possible.
- mPowerManager.userActivity(mSystemClock.uptimeMillis(),
- PowerManager.USER_ACTIVITY_EVENT_TOUCH, 0);
+ if (Flags.bouncerUiRevamp()) {
+ mUserActivityNotifier.notifyUserActivity(mSystemClock.uptimeMillis(),
+ PowerManager.USER_ACTIVITY_EVENT_TOUCH);
+ } else {
+ mPowerManager.userActivity(mSystemClock.uptimeMillis(),
+ PowerManager.USER_ACTIVITY_EVENT_TOUCH, 0);
+ }
if (!mOnFingerDown) {
playStartHaptic();
diff --git a/packages/SystemUI/src/com/android/systemui/power/data/repository/PowerRepository.kt b/packages/SystemUI/src/com/android/systemui/power/data/repository/PowerRepository.kt
index faa77e51ec24..e38a0a78fbfd 100644
--- a/packages/SystemUI/src/com/android/systemui/power/data/repository/PowerRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/power/data/repository/PowerRepository.kt
@@ -17,14 +17,16 @@
package com.android.systemui.power.data.repository
+import android.annotation.SuppressLint
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.os.PowerManager
+import com.android.keyguard.UserActivityNotifier
+import com.android.systemui.Flags
import com.android.systemui.broadcast.BroadcastDispatcher
import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLogging
-import com.android.systemui.utils.coroutines.flow.conflatedCallbackFlow
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.power.shared.model.DozeScreenStateModel
@@ -33,6 +35,7 @@ import com.android.systemui.power.shared.model.WakeSleepReason
import com.android.systemui.power.shared.model.WakefulnessModel
import com.android.systemui.power.shared.model.WakefulnessState
import com.android.systemui.util.time.SystemClock
+import com.android.systemui.utils.coroutines.flow.conflatedCallbackFlow
import javax.inject.Inject
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.Flow
@@ -102,6 +105,7 @@ constructor(
@Application private val applicationContext: Context,
private val systemClock: SystemClock,
dispatcher: BroadcastDispatcher,
+ private val userActivityNotifier: UserActivityNotifier,
) : PowerRepository {
override val dozeScreenState = MutableStateFlow(DozeScreenStateModel.UNKNOWN)
@@ -163,12 +167,22 @@ constructor(
)
}
+ @SuppressLint("MissingPermission")
override fun userTouch(noChangeLights: Boolean) {
- manager.userActivity(
- systemClock.uptimeMillis(),
- PowerManager.USER_ACTIVITY_EVENT_TOUCH,
- if (noChangeLights) PowerManager.USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS else 0,
- )
+ val pmFlags = if (noChangeLights) PowerManager.USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS else 0
+ if (Flags.bouncerUiRevamp()) {
+ userActivityNotifier.notifyUserActivity(
+ timeOfActivity = systemClock.uptimeMillis(),
+ event = PowerManager.USER_ACTIVITY_EVENT_TOUCH,
+ flags = pmFlags,
+ )
+ } else {
+ manager.userActivity(
+ systemClock.uptimeMillis(),
+ PowerManager.USER_ACTIVITY_EVENT_TOUCH,
+ pmFlags,
+ )
+ }
}
companion object {
diff --git a/packages/SystemUI/src/com/android/systemui/shade/GlanceableHubContainerController.kt b/packages/SystemUI/src/com/android/systemui/shade/GlanceableHubContainerController.kt
index 362b5db012e1..c800ab3d0bf2 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/GlanceableHubContainerController.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/GlanceableHubContainerController.kt
@@ -43,6 +43,7 @@ import androidx.lifecycle.repeatOnLifecycle
import com.android.app.tracing.coroutines.launchTraced as launch
import com.android.compose.theme.PlatformTheme
import com.android.internal.annotations.VisibleForTesting
+import com.android.keyguard.UserActivityNotifier
import com.android.systemui.Flags
import com.android.systemui.ambient.touch.TouchMonitor
import com.android.systemui.ambient.touch.dagger.AmbientTouchComponent
@@ -101,6 +102,7 @@ constructor(
private val keyguardMediaController: KeyguardMediaController,
private val lockscreenSmartspaceController: LockscreenSmartspaceController,
@CommunalTouchLog logBuffer: LogBuffer,
+ private val userActivityNotifier: UserActivityNotifier,
) : LifecycleOwner {
private val logger = Logger(logBuffer, TAG)
@@ -655,11 +657,17 @@ constructor(
}
return handled || hubShowing
} finally {
- powerManager.userActivity(
- SystemClock.uptimeMillis(),
- PowerManager.USER_ACTIVITY_EVENT_TOUCH,
- 0,
- )
+ if (Flags.bouncerUiRevamp()) {
+ userActivityNotifier.notifyUserActivity(
+ event = PowerManager.USER_ACTIVITY_EVENT_TOUCH
+ )
+ } else {
+ powerManager.userActivity(
+ SystemClock.uptimeMillis(),
+ PowerManager.USER_ACTIVITY_EVENT_TOUCH,
+ 0,
+ )
+ }
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/power/data/repository/PowerRepositoryImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/power/data/repository/PowerRepositoryImplTest.kt
index 02a3429f9111..41a099a22085 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/power/data/repository/PowerRepositoryImplTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/power/data/repository/PowerRepositoryImplTest.kt
@@ -21,10 +21,14 @@ import android.content.BroadcastReceiver
import android.content.Intent
import android.content.IntentFilter
import android.os.PowerManager
+import android.os.powerManager
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.broadcast.BroadcastDispatcher
+import com.android.systemui.concurrency.fakeExecutor
+import com.android.systemui.keyguard.userActivityNotifier
+import com.android.systemui.testKosmos
import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.argumentCaptor
import com.android.systemui.util.mockito.capture
@@ -50,10 +54,10 @@ import org.mockito.MockitoAnnotations
@SmallTest
@RunWith(AndroidJUnit4::class)
class PowerRepositoryImplTest : SysuiTestCase() {
-
+ private val kosmos = testKosmos()
private val systemClock = FakeSystemClock()
- @Mock private lateinit var manager: PowerManager
+ val manager: PowerManager = kosmos.powerManager
@Mock private lateinit var dispatcher: BroadcastDispatcher
@Captor private lateinit var receiverCaptor: ArgumentCaptor<BroadcastReceiver>
@Captor private lateinit var filterCaptor: ArgumentCaptor<IntentFilter>
@@ -74,6 +78,7 @@ class PowerRepositoryImplTest : SysuiTestCase() {
context.applicationContext,
systemClock,
dispatcher,
+ kosmos.userActivityNotifier,
)
}
@@ -198,13 +203,14 @@ class PowerRepositoryImplTest : SysuiTestCase() {
systemClock.setUptimeMillis(345000)
underTest.userTouch()
+ kosmos.fakeExecutor.runAllReady()
val flagsCaptor = argumentCaptor<Int>()
verify(manager)
.userActivity(
eq(345000L),
eq(PowerManager.USER_ACTIVITY_EVENT_TOUCH),
- capture(flagsCaptor)
+ capture(flagsCaptor),
)
assertThat(flagsCaptor.value).isNotEqualTo(PowerManager.USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS)
assertThat(flagsCaptor.value).isNotEqualTo(PowerManager.USER_ACTIVITY_FLAG_INDIRECT)
@@ -215,13 +221,14 @@ class PowerRepositoryImplTest : SysuiTestCase() {
systemClock.setUptimeMillis(345000)
underTest.userTouch(noChangeLights = true)
+ kosmos.fakeExecutor.runAllReady()
val flagsCaptor = argumentCaptor<Int>()
verify(manager)
.userActivity(
eq(345000L),
eq(PowerManager.USER_ACTIVITY_EVENT_TOUCH),
- capture(flagsCaptor)
+ capture(flagsCaptor),
)
assertThat(flagsCaptor.value).isEqualTo(PowerManager.USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS)
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/GlanceableHubContainerControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/GlanceableHubContainerControllerTest.kt
index ae8b52aa6553..7728f684f0f2 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/GlanceableHubContainerControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/GlanceableHubContainerControllerTest.kt
@@ -56,6 +56,7 @@ import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInterac
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.TransitionState
import com.android.systemui.keyguard.shared.model.TransitionStep
+import com.android.systemui.keyguard.userActivityNotifier
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.collectLastValue
import com.android.systemui.kosmos.runTest
@@ -137,6 +138,7 @@ class GlanceableHubContainerControllerTest : SysuiTestCase() {
keyguardMediaController,
lockscreenSmartspaceController,
logcatLogBuffer("GlanceableHubContainerControllerTest"),
+ kosmos.userActivityNotifier,
)
}
@@ -177,6 +179,7 @@ class GlanceableHubContainerControllerTest : SysuiTestCase() {
keyguardMediaController,
lockscreenSmartspaceController,
logcatLogBuffer("GlanceableHubContainerControllerTest"),
+ kosmos.userActivityNotifier,
)
// First call succeeds.
@@ -206,6 +209,7 @@ class GlanceableHubContainerControllerTest : SysuiTestCase() {
keyguardMediaController,
lockscreenSmartspaceController,
logcatLogBuffer("GlanceableHubContainerControllerTest"),
+ kosmos.userActivityNotifier,
)
assertThat(controller.lifecycle.currentState).isEqualTo(Lifecycle.State.INITIALIZED)
@@ -231,6 +235,7 @@ class GlanceableHubContainerControllerTest : SysuiTestCase() {
keyguardMediaController,
lockscreenSmartspaceController,
logcatLogBuffer("GlanceableHubContainerControllerTest"),
+ kosmos.userActivityNotifier,
)
// Only initView without attaching a view as we don't want the flows to start collecting
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/UserActivityNotifierKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/UserActivityNotifierKosmos.kt
new file mode 100644
index 000000000000..91d15017f75e
--- /dev/null
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/UserActivityNotifierKosmos.kt
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2025 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.keyguard
+
+import android.os.powerManager
+import com.android.keyguard.UserActivityNotifier
+import com.android.systemui.concurrency.fakeExecutor
+import com.android.systemui.kosmos.Kosmos
+
+var Kosmos.userActivityNotifier by
+ Kosmos.Fixture {
+ UserActivityNotifier(uiBgExecutor = fakeExecutor, powerManager = powerManager)
+ }