blob: 705147f5d0c84d9fba4656d72d45dfd7ad8b8e04 [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
Adrian Roosfe54aa02016-11-07 14:14:25 -080019import android.app.AlarmManager;
Adrian Roosff2c4562016-11-03 12:13:36 -070020import android.app.Application;
Dave Mankoff2aff6c32019-10-14 17:40:37 -040021import android.app.IWallpaperManager;
Adrian Roosff2c4562016-11-03 12:13:36 -070022import android.content.Context;
Adrian Roos2981eb02017-05-26 18:40:09 -070023import android.hardware.Sensor;
Adrian Roosff2c4562016-11-03 12:13:36 -070024import android.hardware.SensorManager;
Issei Suzukica19e6e2019-02-26 12:39:11 +010025import android.hardware.display.AmbientDisplayConfiguration;
Adrian Roosff2c4562016-11-03 12:13:36 -070026import android.os.Handler;
Adrian Roosff2c4562016-11-03 12:13:36 -070027
Lucas Dupin16cfe452018-02-08 13:14:50 -080028import com.android.keyguard.KeyguardUpdateMonitor;
Adrian Roos2981eb02017-05-26 18:40:09 -070029import com.android.systemui.R;
Adrian Roosff2c4562016-11-03 12:13:36 -070030import com.android.systemui.SystemUIApplication;
lpeter8a5f4702019-01-18 16:53:07 +080031import com.android.systemui.dock.DockManager;
Lucas Dupin737b8512019-08-09 10:35:34 -070032import com.android.systemui.keyguard.WakefulnessLifecycle;
Dave Mankoffe2294692019-08-14 11:53:13 -040033import com.android.systemui.plugins.FalsingManager;
Lucas Dupinc1d20412019-07-17 09:49:52 -070034import com.android.systemui.statusbar.phone.BiometricUnlockController;
Adrian Roosff2c4562016-11-03 12:13:36 -070035import com.android.systemui.statusbar.phone.DozeParameters;
Lucas Dupinbd7366d2019-09-25 13:39:21 -070036import com.android.systemui.statusbar.policy.BatteryController;
Dave Mankoff63a12822019-09-16 14:38:06 -040037import com.android.systemui.util.sensors.AsyncSensorManager;
Dave Mankoffbf52f4b2019-09-20 14:34:28 -040038import com.android.systemui.util.sensors.ProximitySensor;
Adrian Roos0fb55ae2017-04-14 14:49:11 -070039import com.android.systemui.util.wakelock.DelayedWakeLock;
Adrian Roosc1b50322017-02-27 21:07:58 +010040import com.android.systemui.util.wakelock.WakeLock;
Adrian Roosff2c4562016-11-03 12:13:36 -070041
Dave Mankoff2aff6c32019-10-14 17:40:37 -040042import javax.inject.Inject;
43
Adrian Roosff2c4562016-11-03 12:13:36 -070044public class DozeFactory {
45
Dave Mankoff2aff6c32019-10-14 17:40:37 -040046 private final FalsingManager mFalsingManager;
47 private final DozeLog mDozeLog;
48 private final DozeParameters mDozeParameters;
49 private final BatteryController mBatteryController;
50 private final AsyncSensorManager mAsyncSensorManager;
51 private final AlarmManager mAlarmManager;
52 private final WakefulnessLifecycle mWakefulnessLifecycle;
53 private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
54 private final DockManager mDockManager;
55 private final IWallpaperManager mWallpaperManager;
Dave Mankoffd94c9692019-10-18 12:38:21 -040056 private final ProximitySensor mProximitySensor;
Dave Mankoff2aff6c32019-10-14 17:40:37 -040057
58 @Inject
59 public DozeFactory(FalsingManager falsingManager, DozeLog dozeLog,
60 DozeParameters dozeParameters, BatteryController batteryController,
61 AsyncSensorManager asyncSensorManager, AlarmManager alarmManager,
62 WakefulnessLifecycle wakefulnessLifecycle, KeyguardUpdateMonitor keyguardUpdateMonitor,
Dave Mankoffd94c9692019-10-18 12:38:21 -040063 DockManager dockManager, IWallpaperManager wallpaperManager,
64 ProximitySensor proximitySensor) {
Dave Mankoff2aff6c32019-10-14 17:40:37 -040065 mFalsingManager = falsingManager;
66 mDozeLog = dozeLog;
67 mDozeParameters = dozeParameters;
68 mBatteryController = batteryController;
69 mAsyncSensorManager = asyncSensorManager;
70 mAlarmManager = alarmManager;
71 mWakefulnessLifecycle = wakefulnessLifecycle;
72 mKeyguardUpdateMonitor = keyguardUpdateMonitor;
73 mDockManager = dockManager;
74 mWallpaperManager = wallpaperManager;
Dave Mankoffd94c9692019-10-18 12:38:21 -040075 mProximitySensor = proximitySensor;
Adrian Roosf9d13f62016-11-08 15:42:20 -080076 }
77
Adrian Roosff2c4562016-11-03 12:13:36 -070078 /** Creates a DozeMachine with its parts for {@code dozeService}. */
Dave Mankoff2aff6c32019-10-14 17:40:37 -040079 public DozeMachine assembleMachine(DozeService dozeService) {
Adrian Roosff2c4562016-11-03 12:13:36 -070080 DozeHost host = getHost(dozeService);
Dave Mankoff2aff6c32019-10-14 17:40:37 -040081 AmbientDisplayConfiguration config = new AmbientDisplayConfiguration(dozeService);
Adrian Roosff2c4562016-11-03 12:13:36 -070082 Handler handler = new Handler();
Adrian Roos0fb55ae2017-04-14 14:49:11 -070083 WakeLock wakeLock = new DelayedWakeLock(handler,
Dave Mankoff2aff6c32019-10-14 17:40:37 -040084 WakeLock.createPartial(dozeService, "Doze"));
Adrian Roosff2c4562016-11-03 12:13:36 -070085
Adrian Roos3e23eb52017-07-07 15:58:57 +020086 DozeMachine.Service wrappedService = dozeService;
87 wrappedService = new DozeBrightnessHostForwarder(wrappedService, host);
Dave Mankoff2aff6c32019-10-14 17:40:37 -040088 wrappedService = DozeScreenStatePreventingAdapter.wrapIfNeeded(
89 wrappedService, mDozeParameters);
90 wrappedService = DozeSuspendScreenStatePreventingAdapter.wrapIfNeeded(
91 wrappedService, mDozeParameters);
Adrian Roos3e23eb52017-07-07 15:58:57 +020092
Lucas Dupin737b8512019-08-09 10:35:34 -070093 DozeMachine machine = new DozeMachine(wrappedService, config, wakeLock,
Dave Mankoff2aff6c32019-10-14 17:40:37 -040094 mWakefulnessLifecycle, mBatteryController, mDozeLog);
Adrian Roosff2c4562016-11-03 12:13:36 -070095 machine.setParts(new DozeMachine.Part[]{
Dave Mankoff2aff6c32019-10-14 17:40:37 -040096 new DozePauser(handler, machine, mAlarmManager, mDozeParameters.getPolicy()),
97 new DozeFalsingManagerAdapter(mFalsingManager),
98 createDozeTriggers(dozeService, mAsyncSensorManager, host, mAlarmManager, config,
99 mDozeParameters, handler, wakeLock, machine, mDockManager, mDozeLog),
100 createDozeUi(dozeService, host, wakeLock, machine, handler, mAlarmManager,
101 mDozeParameters, mDozeLog),
102 new DozeScreenState(wrappedService, handler, host, mDozeParameters, wakeLock),
103 createDozeScreenBrightness(dozeService, wrappedService, mAsyncSensorManager, host,
104 mDozeParameters, handler),
105 new DozeWallpaperState(
106 mWallpaperManager,
107 getBiometricUnlockController(dozeService),
108 mDozeParameters),
109 new DozeDockHandler(dozeService, machine, host, config, handler, mDockManager),
Aran Ink4c0d5602019-06-21 14:27:32 -0400110 new DozeAuthRemover(dozeService)
Adrian Roosff2c4562016-11-03 12:13:36 -0700111 });
112
113 return machine;
114 }
115
Adrian Roosc7fd6962017-09-06 16:46:46 +0200116 private DozeMachine.Part createDozeScreenBrightness(Context context,
Adrian Roosc8e29e72017-08-03 18:25:42 +0200117 DozeMachine.Service service, SensorManager sensorManager, DozeHost host,
Adrian Roos2f5a3852018-04-23 17:48:08 +0200118 DozeParameters params, Handler handler) {
Adrian Roos2981eb02017-05-26 18:40:09 -0700119 Sensor sensor = DozeSensors.findSensorWithType(sensorManager,
120 context.getString(R.string.doze_brightness_sensor_type));
jackqdyulei8443dd02017-08-24 16:14:34 -0700121 return new DozeScreenBrightness(context, service, sensorManager, sensor, host, handler,
Adrian Roos2f5a3852018-04-23 17:48:08 +0200122 params.getPolicy());
Adrian Roos2981eb02017-05-26 18:40:09 -0700123 }
124
Dave Mankoff63a12822019-09-16 14:38:06 -0400125 private DozeTriggers createDozeTriggers(Context context, AsyncSensorManager sensorManager,
Adrian Roos6023ccb2017-06-28 16:22:02 +0200126 DozeHost host, AlarmManager alarmManager, AmbientDisplayConfiguration config,
lpeter8a5f4702019-01-18 16:53:07 +0800127 DozeParameters params, Handler handler, WakeLock wakeLock, DozeMachine machine,
Beverlycc4a62f2019-09-26 14:55:28 -0400128 DockManager dockManager, DozeLog dozeLog) {
Adrian Roos664c9d72017-04-28 15:52:24 -0700129 boolean allowPulseTriggers = true;
Adrian Roos6023ccb2017-06-28 16:22:02 +0200130 return new DozeTriggers(context, machine, host, alarmManager, config, params,
Dave Mankoffbf52f4b2019-09-20 14:34:28 -0400131 sensorManager, handler, wakeLock, allowPulseTriggers, dockManager,
Dave Mankoffd94c9692019-10-18 12:38:21 -0400132 mProximitySensor, dozeLog);
Beverlycc4a62f2019-09-26 14:55:28 -0400133
Adrian Roosf9d13f62016-11-08 15:42:20 -0800134 }
135
136 private DozeMachine.Part createDozeUi(Context context, DozeHost host, WakeLock wakeLock,
Lucas Dupin43d0d732017-11-16 11:23:49 -0800137 DozeMachine machine, Handler handler, AlarmManager alarmManager,
Beverlycc4a62f2019-09-26 14:55:28 -0400138 DozeParameters params, DozeLog dozeLog) {
Lucas Dupin16cfe452018-02-08 13:14:50 -0800139 return new DozeUi(context, alarmManager, machine, wakeLock, host, handler, params,
Dave Mankoff2aff6c32019-10-14 17:40:37 -0400140 mKeyguardUpdateMonitor, dozeLog);
Adrian Roosf9d13f62016-11-08 15:42:20 -0800141 }
142
Adrian Roos0b2e23a2017-01-03 12:13:49 -0800143 public static DozeHost getHost(DozeService service) {
Adrian Roosff2c4562016-11-03 12:13:36 -0700144 Application appCandidate = service.getApplication();
145 final SystemUIApplication app = (SystemUIApplication) appCandidate;
146 return app.getComponent(DozeHost.class);
147 }
Lucas Dupinc1d20412019-07-17 09:49:52 -0700148
149 public static BiometricUnlockController getBiometricUnlockController(DozeService service) {
150 Application appCandidate = service.getApplication();
151 final SystemUIApplication app = (SystemUIApplication) appCandidate;
152 return app.getComponent(BiometricUnlockController.class);
153 }
Adrian Roosff2c4562016-11-03 12:13:36 -0700154}