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