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

Commit 1d4d8d17 authored by Dave Mankoff's avatar Dave Mankoff
Browse files

Remove DozeFactory. Add DozeComponent/DozeScope.

This replaces DozeFactory with some Dagger idioms. The DozeComponent
is a subcomponent, created by DozeService, for all your Doze related
needs. Items that should only live within the DozeService can be
annotated with @DozeScope.

Fixes: 159701507
Test: atest SystemUITests && manual
Change-Id: I76d0709b1689408d95b4913d0d46761174cf5ea9
parent 492a1399
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.BootCompleteCache;
import com.android.systemui.BootCompleteCacheImpl;
import com.android.systemui.assist.AssistModule;
import com.android.systemui.doze.dagger.DozeComponent;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.log.dagger.LogModule;
import com.android.systemui.model.SysUiState;
@@ -68,6 +69,7 @@ import dagger.Provides;
        },
        subcomponents = {StatusBarComponent.class,
                NotificationRowComponent.class,
                DozeComponent.class,
                ExpandableNotificationRowComponent.class})
public abstract class SystemUIModule {

+10 −0
Original line number Diff line number Diff line
@@ -51,6 +51,14 @@ public class AlwaysOnDisplayPolicy {
    static final String KEY_WALLPAPER_VISIBILITY_MS = "wallpaper_visibility_timeout";
    static final String KEY_WALLPAPER_FADE_OUT_MS = "wallpaper_fade_out_duration";


    /**
     * Integer used to dim the screen while dozing.
     *
     * @see R.integer.config_screenBrightnessDoze
     */
    public int defaultDozeBrightness;

    /**
     * Integer array to map ambient brightness type to real screen brightness.
     *
@@ -165,6 +173,8 @@ public class AlwaysOnDisplayPolicy {
                        DEFAULT_WALLPAPER_FADE_OUT_MS);
                wallpaperVisibilityDuration = mParser.getLong(KEY_WALLPAPER_VISIBILITY_MS,
                        DEFAULT_WALLPAPER_VISIBILITY_MS);
                defaultDozeBrightness = resources.getInteger(
                        com.android.internal.R.integer.config_screenBrightnessDoze);
                screenBrightnessArray = mParser.getIntArray(KEY_SCREEN_BRIGHTNESS_ARRAY,
                        resources.getIntArray(
                                R.array.config_doze_brightness_sensor_to_brightness));
+7 −5
Original line number Diff line number Diff line
@@ -16,20 +16,22 @@

package com.android.systemui.doze;

import android.content.Context;

import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.Dependency;
import com.android.systemui.doze.dagger.DozeScope;

import javax.inject.Inject;

/**
 * Controls removing Keyguard authorization when the phone goes to sleep.
 */
@DozeScope
public class DozeAuthRemover implements DozeMachine.Part {

    private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;

    public DozeAuthRemover(Context context) {
        mKeyguardUpdateMonitor = Dependency.get(KeyguardUpdateMonitor.class);
    @Inject
    public DozeAuthRemover(KeyguardUpdateMonitor keyguardUpdateMonitor) {
        mKeyguardUpdateMonitor = keyguardUpdateMonitor;
    }

    @Override
+12 −4
Original line number Diff line number Diff line
@@ -22,32 +22,40 @@ import android.util.Log;

import com.android.systemui.dock.DockManager;
import com.android.systemui.doze.DozeMachine.State;
import com.android.systemui.doze.dagger.DozeScope;

import java.io.PrintWriter;

import javax.inject.Inject;

/**
 * Handles dock events for ambient state changes.
 */
@DozeScope
public class DozeDockHandler implements DozeMachine.Part {

    private static final String TAG = "DozeDockHandler";
    private static final boolean DEBUG = DozeService.DEBUG;

    private final AmbientDisplayConfiguration mConfig;
    private final DozeMachine mMachine;
    private DozeMachine mMachine;
    private final DockManager mDockManager;
    private final DockEventListener mDockEventListener;

    private int mDockState = DockManager.STATE_NONE;

    DozeDockHandler(AmbientDisplayConfiguration config, DozeMachine machine,
            DockManager dockManager) {
        mMachine = machine;
    @Inject
    DozeDockHandler(AmbientDisplayConfiguration config, DockManager dockManager) {
        mConfig = config;
        mDockManager = dockManager;
        mDockEventListener = new DockEventListener();
    }

    @Override
    public void setDozeMachine(DozeMachine dozeMachine) {
        mMachine = dozeMachine;
    }

    @Override
    public void transitionTo(DozeMachine.State oldState, DozeMachine.State newState) {
        switch (newState) {
+0 −157
Original line number Diff line number Diff line
/*
 * Copyright (C) 2016 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.doze;

import android.annotation.Nullable;
import android.app.AlarmManager;
import android.app.IWallpaperManager;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.hardware.display.AmbientDisplayConfiguration;
import android.os.Handler;

import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.R;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dock.DockManager;
import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.statusbar.phone.BiometricUnlockController;
import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.util.sensors.AsyncSensorManager;
import com.android.systemui.util.sensors.ProximitySensor;
import com.android.systemui.util.wakelock.DelayedWakeLock;
import com.android.systemui.util.wakelock.WakeLock;

import javax.inject.Inject;

public class DozeFactory {

    private final FalsingManager mFalsingManager;
    private final DozeLog mDozeLog;
    private final DozeParameters mDozeParameters;
    private final BatteryController mBatteryController;
    private final AsyncSensorManager mAsyncSensorManager;
    private final AlarmManager mAlarmManager;
    private final WakefulnessLifecycle mWakefulnessLifecycle;
    private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
    private final DockManager mDockManager;
    private final IWallpaperManager mWallpaperManager;
    private final ProximitySensor mProximitySensor;
    private final ProximitySensor.ProximityCheck mProximityCheck;
    private final DelayedWakeLock.Builder mDelayedWakeLockBuilder;
    private final Handler mHandler;
    private final BiometricUnlockController mBiometricUnlockController;
    private final BroadcastDispatcher mBroadcastDispatcher;
    private final DozeHost mDozeHost;

    @Inject
    public DozeFactory(FalsingManager falsingManager, DozeLog dozeLog,
            DozeParameters dozeParameters, BatteryController batteryController,
            AsyncSensorManager asyncSensorManager, AlarmManager alarmManager,
            WakefulnessLifecycle wakefulnessLifecycle, KeyguardUpdateMonitor keyguardUpdateMonitor,
            DockManager dockManager, @Nullable IWallpaperManager wallpaperManager,
            ProximitySensor proximitySensor, ProximitySensor.ProximityCheck proximityCheck,
            DelayedWakeLock.Builder delayedWakeLockBuilder, @Main Handler handler,
            BiometricUnlockController biometricUnlockController,
            BroadcastDispatcher broadcastDispatcher, DozeHost dozeHost) {
        mFalsingManager = falsingManager;
        mDozeLog = dozeLog;
        mDozeParameters = dozeParameters;
        mBatteryController = batteryController;
        mAsyncSensorManager = asyncSensorManager;
        mAlarmManager = alarmManager;
        mWakefulnessLifecycle = wakefulnessLifecycle;
        mKeyguardUpdateMonitor = keyguardUpdateMonitor;
        mDockManager = dockManager;
        mWallpaperManager = wallpaperManager;
        mProximitySensor = proximitySensor;
        mProximityCheck = proximityCheck;
        mDelayedWakeLockBuilder = delayedWakeLockBuilder;
        mHandler = handler;
        mBiometricUnlockController = biometricUnlockController;
        mBroadcastDispatcher = broadcastDispatcher;
        mDozeHost = dozeHost;
    }

    /** Creates a DozeMachine with its parts for {@code dozeService}. */
    DozeMachine assembleMachine(DozeService dozeService) {
        AmbientDisplayConfiguration config = new AmbientDisplayConfiguration(dozeService);
        WakeLock wakeLock = mDelayedWakeLockBuilder.setHandler(mHandler).setTag("Doze").build();

        DozeMachine.Service wrappedService = dozeService;
        wrappedService = new DozeBrightnessHostForwarder(wrappedService, mDozeHost);
        wrappedService = DozeScreenStatePreventingAdapter.wrapIfNeeded(
                wrappedService, mDozeParameters);
        wrappedService = DozeSuspendScreenStatePreventingAdapter.wrapIfNeeded(
                wrappedService, mDozeParameters);

        DozeMachine machine = new DozeMachine(wrappedService, config, wakeLock,
                mWakefulnessLifecycle, mBatteryController, mDozeLog, mDockManager,
                mDozeHost);
        machine.setParts(new DozeMachine.Part[]{
                new DozePauser(mHandler, machine, mAlarmManager, mDozeParameters.getPolicy()),
                new DozeFalsingManagerAdapter(mFalsingManager),
                createDozeTriggers(dozeService, mAsyncSensorManager, mDozeHost,
                        mAlarmManager, config, mDozeParameters, wakeLock,
                        machine, mDockManager, mDozeLog, mProximityCheck),
                createDozeUi(dozeService, mDozeHost, wakeLock, machine, mHandler,
                        mAlarmManager, mDozeParameters, mDozeLog),
                new DozeScreenState(wrappedService, mHandler, mDozeHost, mDozeParameters,
                        wakeLock),
                createDozeScreenBrightness(dozeService, wrappedService, mAsyncSensorManager,
                        mDozeHost, mDozeParameters, mHandler),
                new DozeWallpaperState(mWallpaperManager, mBiometricUnlockController,
                        mDozeParameters),
                new DozeDockHandler(config, machine, mDockManager),
                new DozeAuthRemover(dozeService)
        });

        return machine;
    }

    private DozeMachine.Part createDozeScreenBrightness(Context context,
            DozeMachine.Service service, SensorManager sensorManager, DozeHost host,
            DozeParameters params, Handler handler) {
        Sensor sensor = DozeSensors.findSensorWithType(sensorManager,
                context.getString(R.string.doze_brightness_sensor_type));
        return new DozeScreenBrightness(context, service, sensorManager, sensor,
                mBroadcastDispatcher, host, handler, params.getPolicy());
    }

    private DozeTriggers createDozeTriggers(Context context, AsyncSensorManager sensorManager,
            DozeHost host, AlarmManager alarmManager, AmbientDisplayConfiguration config,
            DozeParameters params, WakeLock wakeLock,
            DozeMachine machine, DockManager dockManager, DozeLog dozeLog,
            ProximitySensor.ProximityCheck proximityCheck) {
        boolean allowPulseTriggers = true;
        return new DozeTriggers(context, machine, host, alarmManager, config, params,
                sensorManager, wakeLock, allowPulseTriggers, dockManager,
                mProximitySensor, proximityCheck, dozeLog, mBroadcastDispatcher);

    }

    private DozeMachine.Part createDozeUi(Context context, DozeHost host, WakeLock wakeLock,
            DozeMachine machine, Handler handler, AlarmManager alarmManager,
            DozeParameters params, DozeLog dozeLog) {
        return new DozeUi(context, alarmManager, machine, wakeLock, host, handler, params,
                          mKeyguardUpdateMonitor, dozeLog);
    }
}
Loading