blob: eaa72dc4fb8ccf3db2bd79f19657bb275a005108 [file] [log] [blame]
Adrian Roosff2c4562016-11-03 12:13:36 -07001/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.systemui.doze;
18
Dave Mankoffa8749962019-10-18 10:44:07 -040019import android.annotation.Nullable;
Adrian Roosfe54aa02016-11-07 14:14:25 -080020import android.app.AlarmManager;
Adrian Roosff2c4562016-11-03 12:13:36 -070021import android.app.Application;
Dave Mankoff2aff6c32019-10-14 17:40:37 -040022import android.app.IWallpaperManager;
Adrian Roosff2c4562016-11-03 12:13:36 -070023import android.content.Context;
Adrian Roos2981eb02017-05-26 18:40:09 -070024import android.hardware.Sensor;
Adrian Roosff2c4562016-11-03 12:13:36 -070025import android.hardware.SensorManager;
Issei Suzukica19e6e2019-02-26 12:39:11 +010026import android.hardware.display.AmbientDisplayConfiguration;
Adrian Roosff2c4562016-11-03 12:13:36 -070027import android.os.Handler;
Adrian Roosff2c4562016-11-03 12:13:36 -070028
Lucas Dupin16cfe452018-02-08 13:14:50 -080029import com.android.keyguard.KeyguardUpdateMonitor;
Adrian Roos2981eb02017-05-26 18:40:09 -070030import com.android.systemui.R;
Adrian Roosff2c4562016-11-03 12:13:36 -070031import com.android.systemui.SystemUIApplication;
Fabian Kozynski5ca7a512019-10-16 19:56:11 +000032import com.android.systemui.broadcast.BroadcastDispatcher;
lpeter8a5f4702019-01-18 16:53:07 +080033import com.android.systemui.dock.DockManager;
Lucas Dupin737b8512019-08-09 10:35:34 -070034import com.android.systemui.keyguard.WakefulnessLifecycle;
Dave Mankoffe2294692019-08-14 11:53:13 -040035import com.android.systemui.plugins.FalsingManager;
Lucas Dupinc1d20412019-07-17 09:49:52 -070036import com.android.systemui.statusbar.phone.BiometricUnlockController;
Adrian Roosff2c4562016-11-03 12:13:36 -070037import com.android.systemui.statusbar.phone.DozeParameters;
Lucas Dupinbd7366d2019-09-25 13:39:21 -070038import com.android.systemui.statusbar.policy.BatteryController;
Dave Mankoff63a12822019-09-16 14:38:06 -040039import com.android.systemui.util.sensors.AsyncSensorManager;
Dave Mankoffbf52f4b2019-09-20 14:34:28 -040040import com.android.systemui.util.sensors.ProximitySensor;
Adrian Roos0fb55ae2017-04-14 14:49:11 -070041import com.android.systemui.util.wakelock.DelayedWakeLock;
Adrian Roosc1b50322017-02-27 21:07:58 +010042import com.android.systemui.util.wakelock.WakeLock;
Adrian Roosff2c4562016-11-03 12:13:36 -070043
Dave Mankoff2aff6c32019-10-14 17:40:37 -040044import javax.inject.Inject;
45
Adrian Roosff2c4562016-11-03 12:13:36 -070046public class DozeFactory {
47
Dave Mankoff2aff6c32019-10-14 17:40:37 -040048 private final FalsingManager mFalsingManager;
49 private final DozeLog mDozeLog;
50 private final DozeParameters mDozeParameters;
51 private final BatteryController mBatteryController;
52 private final AsyncSensorManager mAsyncSensorManager;
53 private final AlarmManager mAlarmManager;
54 private final WakefulnessLifecycle mWakefulnessLifecycle;
55 private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
56 private final DockManager mDockManager;
57 private final IWallpaperManager mWallpaperManager;
Dave Mankoffd94c9692019-10-18 12:38:21 -040058 private final ProximitySensor mProximitySensor;
Dave Mankoffa8749962019-10-18 10:44:07 -040059 private final DelayedWakeLock.Builder mDelayedWakeLockBuilder;
60 private final Handler mHandler;
Dave Mankoffbbc2f8f2019-10-21 12:21:29 -040061 private final BiometricUnlockController mBiometricUnlockController;
Fabian Kozynski5ca7a512019-10-16 19:56:11 +000062 private final BroadcastDispatcher mBroadcastDispatcher;
Dave Mankoff2aff6c32019-10-14 17:40:37 -040063
64 @Inject
65 public DozeFactory(FalsingManager falsingManager, DozeLog dozeLog,
66 DozeParameters dozeParameters, BatteryController batteryController,
67 AsyncSensorManager asyncSensorManager, AlarmManager alarmManager,
68 WakefulnessLifecycle wakefulnessLifecycle, KeyguardUpdateMonitor keyguardUpdateMonitor,
Dave Mankoffa8749962019-10-18 10:44:07 -040069 DockManager dockManager, @Nullable IWallpaperManager wallpaperManager,
70 ProximitySensor proximitySensor,
Dave Mankoffbbc2f8f2019-10-21 12:21:29 -040071 DelayedWakeLock.Builder delayedWakeLockBuilder, Handler handler,
Fabian Kozynski5ca7a512019-10-16 19:56:11 +000072 BiometricUnlockController biometricUnlockController,
73 BroadcastDispatcher broadcastDispatcher) {
Dave Mankoff2aff6c32019-10-14 17:40:37 -040074 mFalsingManager = falsingManager;
75 mDozeLog = dozeLog;
76 mDozeParameters = dozeParameters;
77 mBatteryController = batteryController;
78 mAsyncSensorManager = asyncSensorManager;
79 mAlarmManager = alarmManager;
80 mWakefulnessLifecycle = wakefulnessLifecycle;
81 mKeyguardUpdateMonitor = keyguardUpdateMonitor;
82 mDockManager = dockManager;
83 mWallpaperManager = wallpaperManager;
Dave Mankoffd94c9692019-10-18 12:38:21 -040084 mProximitySensor = proximitySensor;
Dave Mankoffa8749962019-10-18 10:44:07 -040085 mDelayedWakeLockBuilder = delayedWakeLockBuilder;
86 mHandler = handler;
Dave Mankoffbbc2f8f2019-10-21 12:21:29 -040087 mBiometricUnlockController = biometricUnlockController;
Fabian Kozynski5ca7a512019-10-16 19:56:11 +000088 mBroadcastDispatcher = broadcastDispatcher;
Adrian Roosf9d13f62016-11-08 15:42:20 -080089 }
90
Adrian Roosff2c4562016-11-03 12:13:36 -070091 /** Creates a DozeMachine with its parts for {@code dozeService}. */
Dave Mankoffa8749962019-10-18 10:44:07 -040092 DozeMachine assembleMachine(DozeService dozeService) {
Adrian Roosff2c4562016-11-03 12:13:36 -070093 DozeHost host = getHost(dozeService);
Dave Mankoff2aff6c32019-10-14 17:40:37 -040094 AmbientDisplayConfiguration config = new AmbientDisplayConfiguration(dozeService);
Dave Mankoffa8749962019-10-18 10:44:07 -040095 WakeLock wakeLock = mDelayedWakeLockBuilder.setHandler(mHandler).setTag("Doze").build();
Adrian Roosff2c4562016-11-03 12:13:36 -070096
Adrian Roos3e23eb52017-07-07 15:58:57 +020097 DozeMachine.Service wrappedService = dozeService;
98 wrappedService = new DozeBrightnessHostForwarder(wrappedService, host);
Dave Mankoff2aff6c32019-10-14 17:40:37 -040099 wrappedService = DozeScreenStatePreventingAdapter.wrapIfNeeded(
100 wrappedService, mDozeParameters);
101 wrappedService = DozeSuspendScreenStatePreventingAdapter.wrapIfNeeded(
102 wrappedService, mDozeParameters);
Adrian Roos3e23eb52017-07-07 15:58:57 +0200103
Lucas Dupin737b8512019-08-09 10:35:34 -0700104 DozeMachine machine = new DozeMachine(wrappedService, config, wakeLock,
Dave Mankoff2aff6c32019-10-14 17:40:37 -0400105 mWakefulnessLifecycle, mBatteryController, mDozeLog);
Adrian Roosff2c4562016-11-03 12:13:36 -0700106 machine.setParts(new DozeMachine.Part[]{
Dave Mankoffa8749962019-10-18 10:44:07 -0400107 new DozePauser(mHandler, machine, mAlarmManager, mDozeParameters.getPolicy()),
Dave Mankoff2aff6c32019-10-14 17:40:37 -0400108 new DozeFalsingManagerAdapter(mFalsingManager),
109 createDozeTriggers(dozeService, mAsyncSensorManager, host, mAlarmManager, config,
Dave Mankoffa8749962019-10-18 10:44:07 -0400110 mDozeParameters, mHandler, wakeLock, machine, mDockManager, mDozeLog),
111 createDozeUi(dozeService, host, wakeLock, machine, mHandler, mAlarmManager,
Dave Mankoff2aff6c32019-10-14 17:40:37 -0400112 mDozeParameters, mDozeLog),
Dave Mankoffa8749962019-10-18 10:44:07 -0400113 new DozeScreenState(wrappedService, mHandler, host, mDozeParameters, wakeLock),
Dave Mankoff2aff6c32019-10-14 17:40:37 -0400114 createDozeScreenBrightness(dozeService, wrappedService, mAsyncSensorManager, host,
Dave Mankoffa8749962019-10-18 10:44:07 -0400115 mDozeParameters, mHandler),
Dave Mankoff2aff6c32019-10-14 17:40:37 -0400116 new DozeWallpaperState(
Dave Mankoffbbc2f8f2019-10-21 12:21:29 -0400117 mWallpaperManager, mBiometricUnlockController, mDozeParameters),
Dave Mankoffa8749962019-10-18 10:44:07 -0400118 new DozeDockHandler(dozeService, machine, host, config, mHandler, mDockManager),
Aran Ink4c0d5602019-06-21 14:27:32 -0400119 new DozeAuthRemover(dozeService)
Adrian Roosff2c4562016-11-03 12:13:36 -0700120 });
121
122 return machine;
123 }
124
Adrian Roosc7fd6962017-09-06 16:46:46 +0200125 private DozeMachine.Part createDozeScreenBrightness(Context context,
Adrian Roosc8e29e72017-08-03 18:25:42 +0200126 DozeMachine.Service service, SensorManager sensorManager, DozeHost host,
Adrian Roos2f5a3852018-04-23 17:48:08 +0200127 DozeParameters params, Handler handler) {
Adrian Roos2981eb02017-05-26 18:40:09 -0700128 Sensor sensor = DozeSensors.findSensorWithType(sensorManager,
129 context.getString(R.string.doze_brightness_sensor_type));
Fabian Kozynski5ca7a512019-10-16 19:56:11 +0000130 return new DozeScreenBrightness(context, service, sensorManager, sensor,
131 mBroadcastDispatcher, host, handler, params.getPolicy());
Adrian Roos2981eb02017-05-26 18:40:09 -0700132 }
133
Dave Mankoff63a12822019-09-16 14:38:06 -0400134 private DozeTriggers createDozeTriggers(Context context, AsyncSensorManager sensorManager,
Adrian Roos6023ccb2017-06-28 16:22:02 +0200135 DozeHost host, AlarmManager alarmManager, AmbientDisplayConfiguration config,
lpeter8a5f4702019-01-18 16:53:07 +0800136 DozeParameters params, Handler handler, WakeLock wakeLock, DozeMachine machine,
Beverlycc4a62f2019-09-26 14:55:28 -0400137 DockManager dockManager, DozeLog dozeLog) {
Adrian Roos664c9d72017-04-28 15:52:24 -0700138 boolean allowPulseTriggers = true;
Adrian Roos6023ccb2017-06-28 16:22:02 +0200139 return new DozeTriggers(context, machine, host, alarmManager, config, params,
Dave Mankoffbf52f4b2019-09-20 14:34:28 -0400140 sensorManager, handler, wakeLock, allowPulseTriggers, dockManager,
Fabian Kozynski5ca7a512019-10-16 19:56:11 +0000141 mProximitySensor, dozeLog, mBroadcastDispatcher);
Beverlycc4a62f2019-09-26 14:55:28 -0400142
Adrian Roosf9d13f62016-11-08 15:42:20 -0800143 }
144
145 private DozeMachine.Part createDozeUi(Context context, DozeHost host, WakeLock wakeLock,
Lucas Dupin43d0d732017-11-16 11:23:49 -0800146 DozeMachine machine, Handler handler, AlarmManager alarmManager,
Beverlycc4a62f2019-09-26 14:55:28 -0400147 DozeParameters params, DozeLog dozeLog) {
Lucas Dupin16cfe452018-02-08 13:14:50 -0800148 return new DozeUi(context, alarmManager, machine, wakeLock, host, handler, params,
Dave Mankoff2aff6c32019-10-14 17:40:37 -0400149 mKeyguardUpdateMonitor, dozeLog);
Adrian Roosf9d13f62016-11-08 15:42:20 -0800150 }
151
Adrian Roos0b2e23a2017-01-03 12:13:49 -0800152 public static DozeHost getHost(DozeService service) {
Adrian Roosff2c4562016-11-03 12:13:36 -0700153 Application appCandidate = service.getApplication();
154 final SystemUIApplication app = (SystemUIApplication) appCandidate;
155 return app.getComponent(DozeHost.class);
156 }
Adrian Roosff2c4562016-11-03 12:13:36 -0700157}