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