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