Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit be3f79a8 authored by Chandru S's avatar Chandru S Committed by Android (Google) Code Review
Browse files

Merge "Move all binder calls to PowerManger#userActivity to bg thread." into main

parents cf570fc5 a2df950a
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -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();
+12 −9
Original line number Diff line number Diff line
@@ -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) }
    }
}
+13 −3
Original line number Diff line number Diff line
@@ -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.
        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();
+20 −6
Original line number Diff line number Diff line
@@ -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,13 +167,23 @@ constructor(
        )
    }

    @SuppressLint("MissingPermission")
    override fun userTouch(noChangeLights: Boolean) {
        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,
            if (noChangeLights) PowerManager.USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS else 0,
                pmFlags,
            )
        }
    }

    companion object {
        private const val TAG = "PowerRepository"
+13 −5
Original line number Diff line number Diff line
@@ -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,6 +657,11 @@ constructor(
            }
            return handled || hubShowing
        } finally {
            if (Flags.bouncerUiRevamp()) {
                userActivityNotifier.notifyUserActivity(
                    event = PowerManager.USER_ACTIVITY_EVENT_TOUCH
                )
            } else {
                powerManager.userActivity(
                    SystemClock.uptimeMillis(),
                    PowerManager.USER_ACTIVITY_EVENT_TOUCH,
@@ -662,6 +669,7 @@ constructor(
                )
            }
        }
    }

    override val lifecycle: Lifecycle
        get() = lifecycleRegistry
Loading