/*
 * Copyright (C) 2020 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.demomode;

import com.google.android.collect.Lists;

import java.util.ArrayList;
import java.util.List;

/**
 * Interface defining what it means to implement DemoMode. A DemoMode implementation should
 * register with DemoModeController, providing a list of commands for wish to listen.
 *
 * If you only need to listen to commands, but *do not* care about demo mode state changes, you
 * can implement DemoModeCommandReceiver instead
 */
public interface DemoMode extends DemoModeCommandReceiver {

    List<String> NO_COMMANDS = new ArrayList<>();

    /** Provide a set of commands to listen to, only acceptable values are the COMMAND_* keys */
    default List<String> demoCommands() {
        return NO_COMMANDS;
    }

    String ACTION_DEMO = "com.android.systemui.demo";

    String EXTRA_COMMAND = "command";

    /** Enter and exit are non-register-able; override started/finished to observe these states */
    String COMMAND_ENTER = "enter";
    String COMMAND_EXIT = "exit";

    /** Observable commands to register a listener for  */
    String COMMAND_CLOCK = "clock";
    String COMMAND_BATTERY = "battery";
    String COMMAND_NETWORK = "network";
    String COMMAND_BARS = "bars";
    String COMMAND_STATUS = "status";
    String COMMAND_NOTIFICATIONS = "notifications";
    String COMMAND_VOLUME = "volume";
    String COMMAND_OPERATOR = "operator";

    /** New keys need to be added here */
    List<String> COMMANDS = Lists.newArrayList(
            COMMAND_BARS,
            COMMAND_BATTERY,
            COMMAND_CLOCK,
            COMMAND_NETWORK,
            COMMAND_NOTIFICATIONS,
            COMMAND_OPERATOR,
            COMMAND_STATUS,
            COMMAND_VOLUME
    );
}

