blob: 951dc9936e1c28288b61155a065cf767fde7d631 [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;
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;
Fabian Kozynski5ca7a512019-10-16 19:56:11 +000030import com.android.systemui.broadcast.BroadcastDispatcher;
Dave Mankoff10d4b8de2020-05-26 15:05:07 -040031import com.android.systemui.dagger.qualifiers.Main;
lpeter8a5f4702019-01-18 16:53:07 +080032import com.android.systemui.dock.DockManager;
Lucas Dupin737b8512019-08-09 10:35:34 -070033import com.android.systemui.keyguard.WakefulnessLifecycle;
Dave Mankoffe2294692019-08-14 11:53:13 -040034import com.android.systemui.plugins.FalsingManager;
Lucas Dupinc1d20412019-07-17 09:49:52 -070035import com.android.systemui.statusbar.phone.BiometricUnlockController;
Adrian Roosff2c4562016-11-03 12:13:36 -070036import com.android.systemui.statusbar.phone.DozeParameters;
Lucas Dupinbd7366d2019-09-25 13:39:21 -070037import com.android.systemui.statusbar.policy.BatteryController;
Dave Mankoffdddcae92020-05-13 12:46:18 -040038import com.android.systemui.util.concurrency.DelayableExecutor;
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 Mankoffdddcae92020-05-13 12:46:18 -040061 private final DelayableExecutor mDelayableExecutor;
Dave Mankoffbbc2f8f2019-10-21 12:21:29 -040062 private final BiometricUnlockController mBiometricUnlockController;
Fabian Kozynski5ca7a512019-10-16 19:56:11 +000063 private final BroadcastDispatcher mBroadcastDispatcher;
Heemin Seog4764fba2020-05-12 13:33:18 -070064 private final DozeHost mDozeHost;
Dave Mankoff2aff6c32019-10-14 17:40:37 -040065
66 @Inject
67 public DozeFactory(FalsingManager falsingManager, DozeLog dozeLog,
68 DozeParameters dozeParameters, BatteryController batteryController,
69 AsyncSensorManager asyncSensorManager, AlarmManager alarmManager,
70 WakefulnessLifecycle wakefulnessLifecycle, KeyguardUpdateMonitor keyguardUpdateMonitor,
Dave Mankoffa8749962019-10-18 10:44:07 -040071 DockManager dockManager, @Nullable IWallpaperManager wallpaperManager,
72 ProximitySensor proximitySensor,
Dave Mankoff10d4b8de2020-05-26 15:05:07 -040073 DelayedWakeLock.Builder delayedWakeLockBuilder, @Main Handler handler,
Dave Mankoffe957af6d2020-06-03 10:28:20 -040074 @Main DelayableExecutor delayableExecutor,
Fabian Kozynski5ca7a512019-10-16 19:56:11 +000075 BiometricUnlockController biometricUnlockController,
Heemin Seog4764fba2020-05-12 13:33:18 -070076 BroadcastDispatcher broadcastDispatcher, DozeHost dozeHost) {
Dave Mankoff2aff6c32019-10-14 17:40:37 -040077 mFalsingManager = falsingManager;
78 mDozeLog = dozeLog;
79 mDozeParameters = dozeParameters;
80 mBatteryController = batteryController;
81 mAsyncSensorManager = asyncSensorManager;
82 mAlarmManager = alarmManager;
83 mWakefulnessLifecycle = wakefulnessLifecycle;
84 mKeyguardUpdateMonitor = keyguardUpdateMonitor;
85 mDockManager = dockManager;
86 mWallpaperManager = wallpaperManager;
Dave Mankoffd94c9692019-10-18 12:38:21 -040087 mProximitySensor = proximitySensor;
Dave Mankoffa8749962019-10-18 10:44:07 -040088 mDelayedWakeLockBuilder = delayedWakeLockBuilder;
89 mHandler = handler;
Dave Mankoffdddcae92020-05-13 12:46:18 -040090 mDelayableExecutor = delayableExecutor;
Dave Mankoffbbc2f8f2019-10-21 12:21:29 -040091 mBiometricUnlockController = biometricUnlockController;
Fabian Kozynski5ca7a512019-10-16 19:56:11 +000092 mBroadcastDispatcher = broadcastDispatcher;
Heemin Seog4764fba2020-05-12 13:33:18 -070093 mDozeHost = dozeHost;
Adrian Roosf9d13f62016-11-08 15:42:20 -080094 }
95
Adrian Roosff2c4562016-11-03 12:13:36 -070096 /** Creates a DozeMachine with its parts for {@code dozeService}. */
Dave Mankoffa8749962019-10-18 10:44:07 -040097 DozeMachine assembleMachine(DozeService dozeService) {
Dave Mankoff2aff6c32019-10-14 17:40:37 -040098 AmbientDisplayConfiguration config = new AmbientDisplayConfiguration(dozeService);
Dave Mankoffa8749962019-10-18 10:44:07 -040099 WakeLock wakeLock = mDelayedWakeLockBuilder.setHandler(mHandler).setTag("Doze").build();
Adrian Roosff2c4562016-11-03 12:13:36 -0700100
Adrian Roos3e23eb52017-07-07 15:58:57 +0200101 DozeMachine.Service wrappedService = dozeService;
Heemin Seog4764fba2020-05-12 13:33:18 -0700102 wrappedService = new DozeBrightnessHostForwarder(wrappedService, mDozeHost);
Dave Mankoff2aff6c32019-10-14 17:40:37 -0400103 wrappedService = DozeScreenStatePreventingAdapter.wrapIfNeeded(
104 wrappedService, mDozeParameters);
105 wrappedService = DozeSuspendScreenStatePreventingAdapter.wrapIfNeeded(
106 wrappedService, mDozeParameters);
Adrian Roos3e23eb52017-07-07 15:58:57 +0200107
Lucas Dupin737b8512019-08-09 10:35:34 -0700108 DozeMachine machine = new DozeMachine(wrappedService, config, wakeLock,
Yogisha Dixit65f26b72020-02-07 17:30:49 +0000109 mWakefulnessLifecycle, mBatteryController, mDozeLog, mDockManager,
Heemin Seog4764fba2020-05-12 13:33:18 -0700110 mDozeHost);
Adrian Roosff2c4562016-11-03 12:13:36 -0700111 machine.setParts(new DozeMachine.Part[]{
Dave Mankoffa8749962019-10-18 10:44:07 -0400112 new DozePauser(mHandler, machine, mAlarmManager, mDozeParameters.getPolicy()),
Dave Mankoff2aff6c32019-10-14 17:40:37 -0400113 new DozeFalsingManagerAdapter(mFalsingManager),
Heemin Seog4764fba2020-05-12 13:33:18 -0700114 createDozeTriggers(dozeService, mAsyncSensorManager, mDozeHost,
Dave Mankoffdddcae92020-05-13 12:46:18 -0400115 mAlarmManager, config, mDozeParameters, mDelayableExecutor, wakeLock,
116 machine, mDockManager, mDozeLog),
Heemin Seog4764fba2020-05-12 13:33:18 -0700117 createDozeUi(dozeService, mDozeHost, wakeLock, machine, mHandler,
Dave Mankoff6be8b382019-11-05 21:30:07 -0500118 mAlarmManager, mDozeParameters, mDozeLog),
Heemin Seog4764fba2020-05-12 13:33:18 -0700119 new DozeScreenState(wrappedService, mHandler, mDozeHost, mDozeParameters,
Dave Mankoff6be8b382019-11-05 21:30:07 -0500120 wakeLock),
121 createDozeScreenBrightness(dozeService, wrappedService, mAsyncSensorManager,
Heemin Seog4764fba2020-05-12 13:33:18 -0700122 mDozeHost, mDozeParameters, mHandler),
Dave Mankoff6be8b382019-11-05 21:30:07 -0500123 new DozeWallpaperState(mWallpaperManager, mBiometricUnlockController,
124 mDozeParameters),
Jerry Changae4dc4b2019-10-16 18:45:03 +0800125 new DozeDockHandler(config, machine, mDockManager),
Aran Ink4c0d5602019-06-21 14:27:32 -0400126 new DozeAuthRemover(dozeService)
Adrian Roosff2c4562016-11-03 12:13:36 -0700127 });
128
129 return machine;
130 }
131
Adrian Roosc7fd6962017-09-06 16:46:46 +0200132 private DozeMachine.Part createDozeScreenBrightness(Context context,
Adrian Roosc8e29e72017-08-03 18:25:42 +0200133 DozeMachine.Service service, SensorManager sensorManager, DozeHost host,
Adrian Roos2f5a3852018-04-23 17:48:08 +0200134 DozeParameters params, Handler handler) {
Adrian Roos2981eb02017-05-26 18:40:09 -0700135 Sensor sensor = DozeSensors.findSensorWithType(sensorManager,
136 context.getString(R.string.doze_brightness_sensor_type));
Fabian Kozynski5ca7a512019-10-16 19:56:11 +0000137 return new DozeScreenBrightness(context, service, sensorManager, sensor,
138 mBroadcastDispatcher, host, handler, params.getPolicy());
Adrian Roos2981eb02017-05-26 18:40:09 -0700139 }
140
Dave Mankoff63a12822019-09-16 14:38:06 -0400141 private DozeTriggers createDozeTriggers(Context context, AsyncSensorManager sensorManager,
Adrian Roos6023ccb2017-06-28 16:22:02 +0200142 DozeHost host, AlarmManager alarmManager, AmbientDisplayConfiguration config,
Dave Mankoffdddcae92020-05-13 12:46:18 -0400143 DozeParameters params, DelayableExecutor delayableExecutor, WakeLock wakeLock,
144 DozeMachine machine, DockManager dockManager, DozeLog dozeLog) {
Adrian Roos664c9d72017-04-28 15:52:24 -0700145 boolean allowPulseTriggers = true;
Adrian Roos6023ccb2017-06-28 16:22:02 +0200146 return new DozeTriggers(context, machine, host, alarmManager, config, params,
Dave Mankoffdddcae92020-05-13 12:46:18 -0400147 sensorManager, delayableExecutor, wakeLock, allowPulseTriggers, dockManager,
Fabian Kozynski5ca7a512019-10-16 19:56:11 +0000148 mProximitySensor, dozeLog, mBroadcastDispatcher);
Beverlycc4a62f2019-09-26 14:55:28 -0400149
Adrian Roosf9d13f62016-11-08 15:42:20 -0800150 }
151
152 private DozeMachine.Part createDozeUi(Context context, DozeHost host, WakeLock wakeLock,
Lucas Dupin43d0d732017-11-16 11:23:49 -0800153 DozeMachine machine, Handler handler, AlarmManager alarmManager,
Beverlycc4a62f2019-09-26 14:55:28 -0400154 DozeParameters params, DozeLog dozeLog) {
Lucas Dupin16cfe452018-02-08 13:14:50 -0800155 return new DozeUi(context, alarmManager, machine, wakeLock, host, handler, params,
Dave Mankoff2aff6c32019-10-14 17:40:37 -0400156 mKeyguardUpdateMonitor, dozeLog);
Adrian Roosf9d13f62016-11-08 15:42:20 -0800157 }
Adrian Roosff2c4562016-11-03 12:13:36 -0700158}