DozeFactory.java revision 75c94b87882a483c199c6bd51b0ffd849dd7a12e
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 17package com.android.systemui.doze; 18 19import android.app.AlarmManager; 20import android.app.Application; 21import android.content.Context; 22import android.hardware.Sensor; 23import android.hardware.SensorManager; 24import android.os.Handler; 25 26import com.android.internal.hardware.AmbientDisplayConfiguration; 27import com.android.systemui.R; 28import com.android.systemui.SystemUIApplication; 29import com.android.systemui.classifier.FalsingManager; 30import com.android.systemui.statusbar.phone.DozeParameters; 31import com.android.systemui.util.wakelock.DelayedWakeLock; 32import com.android.systemui.util.wakelock.WakeLock; 33 34public class DozeFactory { 35 36 public DozeFactory() { 37 } 38 39 /** Creates a DozeMachine with its parts for {@code dozeService}. */ 40 public DozeMachine assembleMachine(DozeService dozeService) { 41 Context context = dozeService; 42 SensorManager sensorManager = context.getSystemService(SensorManager.class); 43 AlarmManager alarmManager = context.getSystemService(AlarmManager.class); 44 45 DozeHost host = getHost(dozeService); 46 AmbientDisplayConfiguration config = new AmbientDisplayConfiguration(context); 47 DozeParameters params = new DozeParameters(context); 48 Handler handler = new Handler(); 49 WakeLock wakeLock = new DelayedWakeLock(handler, 50 WakeLock.createPartial(context, "Doze")); 51 52 DozeMachine.Service wrappedService = DozeSuspendScreenStatePreventingAdapter.wrapIfNeeded( 53 DozeScreenStatePreventingAdapter.wrapIfNeeded(dozeService, params), params); 54 DozeMachine machine = new DozeMachine(wrappedService, config, wakeLock); 55 machine.setParts(new DozeMachine.Part[]{ 56 new DozePauser(handler, machine, alarmManager), 57 new DozeFalsingManagerAdapter(FalsingManager.getInstance(context)), 58 createDozeTriggers(context, sensorManager, host, alarmManager, config, params, 59 handler, wakeLock, machine), 60 createDozeUi(context, host, wakeLock, machine, handler, alarmManager), 61 createDozeScreenState(wrappedService), 62 createDozeScreenBrightness(context, wrappedService, sensorManager, handler), 63 }); 64 65 return machine; 66 } 67 68 private DozeMachine.Part createDozeScreenState(DozeMachine.Service service) { 69 return new DozeScreenState(service); 70 } 71 72 private DozeMachine.Part createDozeScreenBrightness(Context context, 73 DozeMachine.Service service, SensorManager sensorManager, Handler handler) { 74 Sensor sensor = DozeSensors.findSensorWithType(sensorManager, 75 context.getString(R.string.doze_brightness_sensor_type)); 76 return new DozeScreenBrightness(context, service, sensorManager, sensor, handler); 77 } 78 79 private DozeTriggers createDozeTriggers(Context context, SensorManager sensorManager, 80 DozeHost host, AlarmManager alarmManager, AmbientDisplayConfiguration config, 81 DozeParameters params, Handler handler, WakeLock wakeLock, DozeMachine machine) { 82 boolean allowPulseTriggers = true; 83 return new DozeTriggers(context, machine, host, alarmManager, config, params, 84 sensorManager, handler, wakeLock, allowPulseTriggers); 85 } 86 87 private DozeMachine.Part createDozeUi(Context context, DozeHost host, WakeLock wakeLock, 88 DozeMachine machine, Handler handler, AlarmManager alarmManager) { 89 return new DozeUi(context, alarmManager, machine, wakeLock, host, handler); 90 } 91 92 public static DozeHost getHost(DozeService service) { 93 Application appCandidate = service.getApplication(); 94 final SystemUIApplication app = (SystemUIApplication) appCandidate; 95 return app.getComponent(DozeHost.class); 96 } 97} 98