• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
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 
17 package com.android.systemui.doze;
18 
19 import android.annotation.Nullable;
20 import android.app.AlarmManager;
21 import android.app.IWallpaperManager;
22 import android.content.Context;
23 import android.hardware.Sensor;
24 import android.hardware.SensorManager;
25 import android.hardware.display.AmbientDisplayConfiguration;
26 import android.os.Handler;
27 
28 import com.android.keyguard.KeyguardUpdateMonitor;
29 import com.android.systemui.R;
30 import com.android.systemui.broadcast.BroadcastDispatcher;
31 import com.android.systemui.dagger.qualifiers.Main;
32 import com.android.systemui.dock.DockManager;
33 import com.android.systemui.keyguard.WakefulnessLifecycle;
34 import com.android.systemui.plugins.FalsingManager;
35 import com.android.systemui.statusbar.phone.BiometricUnlockController;
36 import com.android.systemui.statusbar.phone.DozeParameters;
37 import com.android.systemui.statusbar.policy.BatteryController;
38 import com.android.systemui.util.sensors.AsyncSensorManager;
39 import com.android.systemui.util.sensors.ProximitySensor;
40 import com.android.systemui.util.wakelock.DelayedWakeLock;
41 import com.android.systemui.util.wakelock.WakeLock;
42 
43 import javax.inject.Inject;
44 
45 public class DozeFactory {
46 
47     private final FalsingManager mFalsingManager;
48     private final DozeLog mDozeLog;
49     private final DozeParameters mDozeParameters;
50     private final BatteryController mBatteryController;
51     private final AsyncSensorManager mAsyncSensorManager;
52     private final AlarmManager mAlarmManager;
53     private final WakefulnessLifecycle mWakefulnessLifecycle;
54     private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
55     private final DockManager mDockManager;
56     private final IWallpaperManager mWallpaperManager;
57     private final ProximitySensor mProximitySensor;
58     private final ProximitySensor.ProximityCheck mProximityCheck;
59     private final DelayedWakeLock.Builder mDelayedWakeLockBuilder;
60     private final Handler mHandler;
61     private final BiometricUnlockController mBiometricUnlockController;
62     private final BroadcastDispatcher mBroadcastDispatcher;
63     private final DozeHost mDozeHost;
64 
65     @Inject
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)66     public DozeFactory(FalsingManager falsingManager, DozeLog dozeLog,
67             DozeParameters dozeParameters, BatteryController batteryController,
68             AsyncSensorManager asyncSensorManager, AlarmManager alarmManager,
69             WakefulnessLifecycle wakefulnessLifecycle, KeyguardUpdateMonitor keyguardUpdateMonitor,
70             DockManager dockManager, @Nullable IWallpaperManager wallpaperManager,
71             ProximitySensor proximitySensor, ProximitySensor.ProximityCheck proximityCheck,
72             DelayedWakeLock.Builder delayedWakeLockBuilder, @Main Handler handler,
73             BiometricUnlockController biometricUnlockController,
74             BroadcastDispatcher broadcastDispatcher, DozeHost dozeHost) {
75         mFalsingManager = falsingManager;
76         mDozeLog = dozeLog;
77         mDozeParameters = dozeParameters;
78         mBatteryController = batteryController;
79         mAsyncSensorManager = asyncSensorManager;
80         mAlarmManager = alarmManager;
81         mWakefulnessLifecycle = wakefulnessLifecycle;
82         mKeyguardUpdateMonitor = keyguardUpdateMonitor;
83         mDockManager = dockManager;
84         mWallpaperManager = wallpaperManager;
85         mProximitySensor = proximitySensor;
86         mProximityCheck = proximityCheck;
87         mDelayedWakeLockBuilder = delayedWakeLockBuilder;
88         mHandler = handler;
89         mBiometricUnlockController = biometricUnlockController;
90         mBroadcastDispatcher = broadcastDispatcher;
91         mDozeHost = dozeHost;
92     }
93 
94     /** Creates a DozeMachine with its parts for {@code dozeService}. */
assembleMachine(DozeService dozeService)95     DozeMachine assembleMachine(DozeService dozeService) {
96         AmbientDisplayConfiguration config = new AmbientDisplayConfiguration(dozeService);
97         WakeLock wakeLock = mDelayedWakeLockBuilder.setHandler(mHandler).setTag("Doze").build();
98 
99         DozeMachine.Service wrappedService = dozeService;
100         wrappedService = new DozeBrightnessHostForwarder(wrappedService, mDozeHost);
101         wrappedService = DozeScreenStatePreventingAdapter.wrapIfNeeded(
102                 wrappedService, mDozeParameters);
103         wrappedService = DozeSuspendScreenStatePreventingAdapter.wrapIfNeeded(
104                 wrappedService, mDozeParameters);
105 
106         DozeMachine machine = new DozeMachine(wrappedService, config, wakeLock,
107                 mWakefulnessLifecycle, mBatteryController, mDozeLog, mDockManager,
108                 mDozeHost);
109         machine.setParts(new DozeMachine.Part[]{
110                 new DozePauser(mHandler, machine, mAlarmManager, mDozeParameters.getPolicy()),
111                 new DozeFalsingManagerAdapter(mFalsingManager),
112                 createDozeTriggers(dozeService, mAsyncSensorManager, mDozeHost,
113                         mAlarmManager, config, mDozeParameters, wakeLock,
114                         machine, mDockManager, mDozeLog, mProximityCheck),
115                 createDozeUi(dozeService, mDozeHost, wakeLock, machine, mHandler,
116                         mAlarmManager, mDozeParameters, mDozeLog),
117                 new DozeScreenState(wrappedService, mHandler, mDozeHost, mDozeParameters,
118                         wakeLock),
119                 createDozeScreenBrightness(dozeService, wrappedService, mAsyncSensorManager,
120                         mDozeHost, mDozeParameters, mHandler),
121                 new DozeWallpaperState(mWallpaperManager, mBiometricUnlockController,
122                         mDozeParameters),
123                 new DozeDockHandler(config, machine, mDockManager),
124                 new DozeAuthRemover(dozeService)
125         });
126 
127         return machine;
128     }
129 
createDozeScreenBrightness(Context context, DozeMachine.Service service, SensorManager sensorManager, DozeHost host, DozeParameters params, Handler handler)130     private DozeMachine.Part createDozeScreenBrightness(Context context,
131             DozeMachine.Service service, SensorManager sensorManager, DozeHost host,
132             DozeParameters params, Handler handler) {
133         Sensor sensor = DozeSensors.findSensorWithType(sensorManager,
134                 context.getString(R.string.doze_brightness_sensor_type));
135         return new DozeScreenBrightness(context, service, sensorManager, sensor,
136                 mBroadcastDispatcher, host, handler, params.getPolicy());
137     }
138 
createDozeTriggers(Context context, AsyncSensorManager sensorManager, DozeHost host, AlarmManager alarmManager, AmbientDisplayConfiguration config, DozeParameters params, WakeLock wakeLock, DozeMachine machine, DockManager dockManager, DozeLog dozeLog, ProximitySensor.ProximityCheck proximityCheck)139     private DozeTriggers createDozeTriggers(Context context, AsyncSensorManager sensorManager,
140             DozeHost host, AlarmManager alarmManager, AmbientDisplayConfiguration config,
141             DozeParameters params, WakeLock wakeLock,
142             DozeMachine machine, DockManager dockManager, DozeLog dozeLog,
143             ProximitySensor.ProximityCheck proximityCheck) {
144         boolean allowPulseTriggers = true;
145         return new DozeTriggers(context, machine, host, alarmManager, config, params,
146                 sensorManager, wakeLock, allowPulseTriggers, dockManager,
147                 mProximitySensor, proximityCheck, dozeLog, mBroadcastDispatcher);
148 
149     }
150 
createDozeUi(Context context, DozeHost host, WakeLock wakeLock, DozeMachine machine, Handler handler, AlarmManager alarmManager, DozeParameters params, DozeLog dozeLog)151     private DozeMachine.Part createDozeUi(Context context, DozeHost host, WakeLock wakeLock,
152             DozeMachine machine, Handler handler, AlarmManager alarmManager,
153             DozeParameters params, DozeLog dozeLog) {
154         return new DozeUi(context, alarmManager, machine, wakeLock, host, handler, params,
155                           mKeyguardUpdateMonitor, dozeLog);
156     }
157 }
158