126d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos/* 226d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos * Copyright (C) 2017 The Android Open Source Project 326d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos * 426d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos * Licensed under the Apache License, Version 2.0 (the "License"); 526d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos * you may not use this file except in compliance with the License. 626d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos * You may obtain a copy of the License at 726d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos * 826d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos * http://www.apache.org/licenses/LICENSE-2.0 926d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos * 1026d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos * Unless required by applicable law or agreed to in writing, software 1126d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos * distributed under the License is distributed on an "AS IS" BASIS, 1226d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1326d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos * See the License for the specific language governing permissions and 1426d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos * limitations under the License 1526d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos */ 1626d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos 1726d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roospackage com.android.systemui.doze; 1826d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos 1926d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roosimport android.support.annotation.VisibleForTesting; 2026d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roosimport android.view.Display; 2126d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos 2226d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roosimport com.android.systemui.statusbar.phone.DozeParameters; 2326d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos 2426d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos/** 2526d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos * Prevents usage of doze screen states on devices that don't support them. 2626d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos */ 2726d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roospublic class DozeScreenStatePreventingAdapter implements DozeMachine.Service { 2826d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos 2926d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos private final DozeMachine.Service mInner; 3026d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos 3126d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos @VisibleForTesting 3226d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos DozeScreenStatePreventingAdapter(DozeMachine.Service inner) { 3326d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos mInner = inner; 3426d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos } 3526d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos 3626d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos @Override 3726d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos public void finish() { 3826d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos mInner.finish(); 3926d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos } 4026d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos 4126d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos @Override 4226d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos public void setDozeScreenState(int state) { 4326d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos if (state == Display.STATE_DOZE || state == Display.STATE_DOZE_SUSPEND) { 4426d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos state = Display.STATE_ON; 4526d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos } 4626d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos mInner.setDozeScreenState(state); 4726d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos } 4826d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos 4926d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos @Override 5026d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos public void requestWakeUp() { 5126d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos mInner.requestWakeUp(); 5226d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos } 5326d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos 5426d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos /** 5526d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos * If the device supports the doze display state, return {@code inner}. Otherwise 5626d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos * return a new instance of {@link DozeScreenStatePreventingAdapter} wrapping {@code inner}. 5726d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos */ 5826d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos public static DozeMachine.Service wrapIfNeeded(DozeMachine.Service inner, 5926d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos DozeParameters params) { 6026d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos return isNeeded(params) ? new DozeScreenStatePreventingAdapter(inner) : inner; 6126d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos } 6226d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos 6326d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos private static boolean isNeeded(DozeParameters params) { 6426d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos return !params.getDisplayStateSupported(); 6526d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos } 6626d8184d46d48aae37cc739cb548edf891fc2ce1Adrian Roos} 67