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