/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.systemui.doze;

import android.view.Display;

import androidx.annotation.VisibleForTesting;

import com.android.systemui.statusbar.phone.DozeParameters;

/**
 * Prevents usage of doze screen states on devices that don't support them.
 */
public class DozeSuspendScreenStatePreventingAdapter extends DozeMachine.Service.Delegate {

    @VisibleForTesting
    DozeSuspendScreenStatePreventingAdapter(DozeMachine.Service inner) {
        super(inner);
    }

    @Override
    public void setDozeScreenState(int state) {
        if (state == Display.STATE_DOZE_SUSPEND) {
            state = Display.STATE_DOZE;
        }
        super.setDozeScreenState(state);
    }

    /**
     * If the device supports the doze display state, return {@code inner}. Otherwise
     * return a new instance of {@link DozeSuspendScreenStatePreventingAdapter} wrapping {@code inner}.
     */
    public static DozeMachine.Service wrapIfNeeded(DozeMachine.Service inner,
            DozeParameters params) {
        return isNeeded(params) ? new DozeSuspendScreenStatePreventingAdapter(inner) : inner;
    }

    private static boolean isNeeded(DozeParameters params) {
        return !params.getDozeSuspendDisplayStateSupported();
    }
}
