/*
 * Copyright (C) 2018 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.
 */

syntax = "proto2";
package android.view;

option java_outer_classname = "ViewProtoEnums";
option java_multiple_files = true;

// Screen states, primarily used by android/view/Display.java.
enum DisplayStateEnum {
    // The display state is unknown.
    DISPLAY_STATE_UNKNOWN = 0;
    // The display state is off.
    DISPLAY_STATE_OFF = 1;
    // The display state is on.
    DISPLAY_STATE_ON = 2;
    // The display is dozing in a low power state; it is still on but is
    // optimized for showing system-provided content while the device is
    // non-interactive.
    DISPLAY_STATE_DOZE = 3;
    // The display is dozing in a suspended low power state; it is still on
    // but is optimized for showing static system-provided content while the
    // device is non-interactive.
    DISPLAY_STATE_DOZE_SUSPEND = 4;
    // The display is on and optimized for VR mode.
    DISPLAY_STATE_VR = 5;
    // The display is in a suspended full power state; it is still on but the
    // CPU is not updating it.
    DISPLAY_STATE_ON_SUSPEND = 6;
}

// Constants found in android.view.WindowManager.
enum TransitionTypeEnum {
    TRANSIT_NONE = 0;
    TRANSIT_UNSET = -1;
    TRANSIT_ACTIVITY_OPEN = 6;
    TRANSIT_ACTIVITY_CLOSE = 7;
    TRANSIT_TASK_OPEN = 8;
    TRANSIT_TASK_CLOSE = 9;
    TRANSIT_TASK_TO_FRONT = 10;
    TRANSIT_TASK_TO_BACK = 11;
    TRANSIT_WALLPAPER_CLOSE = 12;
    TRANSIT_WALLPAPER_OPEN = 13;
    TRANSIT_WALLPAPER_INTRA_OPEN = 14;
    TRANSIT_WALLPAPER_INTRA_CLOSE = 15;
    TRANSIT_TASK_OPEN_BEHIND = 16;
    TRANSIT_TASK_IN_PLACE = 17;
    TRANSIT_ACTIVITY_RELAUNCH = 18;
    TRANSIT_DOCK_TASK_FROM_RECENTS = 19;
    TRANSIT_KEYGUARD_GOING_AWAY = 20;
    TRANSIT_KEYGUARD_GOING_AWAY_ON_WALLPAPER = 21;
    TRANSIT_KEYGUARD_OCCLUDE = 22;
    TRANSIT_KEYGUARD_UNOCCLUDE = 23;
    TRANSIT_TRANSLUCENT_ACTIVITY_OPEN = 24;
    TRANSIT_TRANSLUCENT_ACTIVITY_CLOSE = 25;
    TRANSIT_CRASHING_ACTIVITY_CLOSE = 26;
}
