/*
 * 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.
 */

syntax = "proto2";

import "frameworks/base/core/proto/android/app/statusbarmanager.proto";
import "frameworks/base/core/proto/android/content/activityinfo.proto";
import "frameworks/base/core/proto/android/content/configuration.proto";
import "frameworks/base/core/proto/android/graphics/rect.proto";
import "frameworks/base/core/proto/android/server/appwindowthumbnail.proto";
import "frameworks/base/core/proto/android/server/surfaceanimator.proto";
import "frameworks/base/core/proto/android/view/displaycutout.proto";
import "frameworks/base/core/proto/android/view/displayinfo.proto";
import "frameworks/base/core/proto/android/view/enums.proto";
import "frameworks/base/core/proto/android/view/surface.proto";
import "frameworks/base/core/proto/android/view/windowlayoutparams.proto";
import "frameworks/base/core/proto/android/privacy.proto";

package com.android.server.wm;

option java_multiple_files = true;

message WindowManagerServiceDumpProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional WindowManagerPolicyProto policy = 1;
    /* window hierarchy root */
    optional RootWindowContainerProto root_window_container = 2;
    optional IdentifierProto focused_window = 3;
    optional string focused_app = 4;
    optional IdentifierProto input_method_window = 5;
    optional bool display_frozen = 6;
    optional int32 rotation = 7;
    optional int32 last_orientation = 8;
}

/* represents RootWindowContainer object */
message RootWindowContainerProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional WindowContainerProto window_container = 1;
    repeated DisplayContentProto displays = 2;
    /* window references in top down z order */
    repeated IdentifierProto windows = 3;
}

message BarControllerProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional .android.app.StatusBarManagerProto.WindowState state = 1;
    optional .android.app.StatusBarManagerProto.TransientWindowState transient_state = 2;
}

message WindowOrientationListenerProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional bool enabled = 1;
    optional .android.view.SurfaceProto.Rotation rotation = 2;
}

message KeyguardServiceDelegateProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional bool showing = 1;
    optional bool occluded = 2;
    optional bool secure = 3;
    enum ScreenState {
        SCREEN_STATE_OFF = 0;
        SCREEN_STATE_TURNING_ON = 1;
        SCREEN_STATE_ON = 2;
        SCREEN_STATE_TURNING_OFF = 3;
    }
    optional ScreenState screen_state = 4;
    enum InteractiveState {
        INTERACTIVE_STATE_SLEEP = 0;
        INTERACTIVE_STATE_WAKING = 1;
        INTERACTIVE_STATE_AWAKE = 2;
        INTERACTIVE_STATE_GOING_TO_SLEEP = 3;
    }
    optional InteractiveState interactive_state = 5;
}

/* represents PhoneWindowManager */
message WindowManagerPolicyProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional int32 last_system_ui_flags = 1 [deprecated=true];
    enum UserRotationMode {
        USER_ROTATION_FREE = 0;
        USER_ROTATION_LOCKED = 1;
    }
    optional UserRotationMode rotation_mode = 2;
    optional .android.view.SurfaceProto.Rotation rotation = 3;
    optional .android.content.ActivityInfoProto.ScreenOrientation orientation = 4;
    optional bool screen_on_fully = 5;
    optional bool keyguard_draw_complete = 6;
    optional bool window_manager_draw_complete = 7;
    optional string focused_app_token = 8 [deprecated=true];
    optional IdentifierProto focused_window = 9 [deprecated=true];
    optional IdentifierProto top_fullscreen_opaque_window = 10 [deprecated=true];
    optional IdentifierProto top_fullscreen_opaque_or_dimming_window = 11 [deprecated=true];
    optional bool keyguard_occluded = 12;
    optional bool keyguard_occluded_changed = 13;
    optional bool keyguard_occluded_pending = 14;
    optional bool force_status_bar = 15 [deprecated=true];
    optional bool force_status_bar_from_keyguard = 16 [deprecated=true];
    optional BarControllerProto status_bar = 17 [deprecated=true];
    optional BarControllerProto navigation_bar = 18 [deprecated=true];
    optional WindowOrientationListenerProto orientation_listener = 19 [deprecated=true];
    optional KeyguardServiceDelegateProto keyguard_delegate = 20;
}

/* represents AppTransition */
message AppTransitionProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    enum AppState {
        APP_STATE_IDLE = 0;
        APP_STATE_READY = 1;
        APP_STATE_RUNNING = 2;
        APP_STATE_TIMEOUT = 3;
    }
    optional AppState app_transition_state = 1;

    optional .android.view.TransitionTypeEnum last_used_app_transition = 2;
}

/* represents DisplayContent object */
message DisplayContentProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional WindowContainerProto window_container = 1;
    optional int32 id = 2;
    repeated StackProto stacks = 3;
    optional DockedStackDividerControllerProto docked_stack_divider_controller = 4;
    optional PinnedStackControllerProto pinned_stack_controller = 5;
    /* non app windows */
    repeated WindowTokenProto above_app_windows = 6;
    repeated WindowTokenProto below_app_windows = 7;
    repeated WindowTokenProto ime_windows = 8;
    optional int32 dpi = 9;
    optional .android.view.DisplayInfoProto display_info = 10;
    optional int32 rotation = 11;
    optional ScreenRotationAnimationProto screen_rotation_animation = 12;
    optional DisplayFramesProto display_frames = 13;
    optional int32 surface_size = 14 [deprecated=true];
    optional string focused_app = 15;
    optional AppTransitionProto app_transition = 16;
    repeated IdentifierProto opening_apps = 17;
    repeated IdentifierProto closing_apps = 18;
    repeated IdentifierProto changing_apps = 19;
}

/* represents DisplayFrames */
message DisplayFramesProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional .android.graphics.RectProto stable_bounds = 1;
}

/* represents DockedStackDividerController */
message DockedStackDividerControllerProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional bool minimized_dock = 1;
}

/* represents PinnedStackController */
message PinnedStackControllerProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional .android.graphics.RectProto default_bounds = 1;
    optional .android.graphics.RectProto movement_bounds = 2;
}

/* represents TaskStack */
message StackProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional WindowContainerProto window_container = 1;
    optional int32 id = 2;
    repeated TaskProto tasks = 3;
    optional bool fills_parent = 4;
    optional .android.graphics.RectProto bounds = 5;
    optional bool animation_background_surface_is_dimming = 6;
    optional bool defer_removal = 7;
    optional float minimize_amount = 8;
    optional bool adjusted_for_ime = 9;
    optional float adjust_ime_amount = 10;
    optional float adjust_divider_amount = 11;
    optional .android.graphics.RectProto adjusted_bounds = 12;
    optional bool animating_bounds = 13;
}

/* represents Task */
message TaskProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional WindowContainerProto window_container = 1;
    optional int32 id = 2;
    repeated AppWindowTokenProto app_window_tokens = 3;
    optional bool fills_parent = 4;
    optional .android.graphics.RectProto bounds = 5;
    optional .android.graphics.RectProto displayed_bounds = 6;
    optional bool defer_removal = 7;
    optional int32 surface_width = 8;
    optional int32 surface_height = 9;
}

/* represents AppWindowToken */
message AppWindowTokenProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    /* obtained from ActivityRecord */
    optional string name = 1 [ (.android.privacy).dest = DEST_EXPLICIT ];
    optional WindowTokenProto window_token = 2;
    optional bool last_surface_showing = 3;
    optional bool is_waiting_for_transition_start = 4;
    optional bool is_really_animating = 5;
    optional AppWindowThumbnailProto thumbnail = 6;
    optional bool fills_parent = 7;
    optional bool app_stopped = 8;
    optional bool hidden_requested = 9;
    optional bool client_hidden = 10;
    optional bool defer_hiding_client = 11;
    optional bool reported_drawn = 12;
    optional bool reported_visible = 13;
    optional int32 num_interesting_windows = 14;
    optional int32 num_drawn_windows = 15;
    optional bool all_drawn = 16;
    optional bool last_all_drawn = 17;
    optional bool removed = 18;
    optional IdentifierProto starting_window = 19;
    optional bool starting_displayed = 20;
    optional bool starting_moved = 21;
    optional bool hidden_set_from_transferred_starting_window = 22;
    repeated .android.graphics.RectProto frozen_bounds = 23;
}

/* represents WindowToken */
message WindowTokenProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional WindowContainerProto window_container = 1;
    optional int32 hash_code = 2;
    repeated WindowStateProto windows = 3;
    optional bool hidden = 4;
    optional bool waiting_to_show = 5;
    optional bool paused = 6;
}

/* represents WindowState */
message WindowStateProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional WindowContainerProto window_container = 1;
    optional IdentifierProto identifier = 2;
    // Unique identifier of a DisplayContent stack.
    optional int32 display_id = 3;
    // Unique identifier for the task stack.
    optional int32 stack_id = 4;
    optional .android.view.WindowLayoutParamsProto attributes = 5;
    optional .android.graphics.RectProto given_content_insets = 6;
    optional .android.graphics.RectProto frame = 7 [deprecated=true];
    optional .android.graphics.RectProto containing_frame = 8 [deprecated=true];
    optional .android.graphics.RectProto parent_frame = 9 [deprecated=true];
    optional .android.graphics.RectProto content_frame = 10 [deprecated=true];
    optional .android.graphics.RectProto content_insets = 11 [deprecated=true];
    optional .android.graphics.RectProto surface_insets = 12;
    optional WindowStateAnimatorProto animator = 13;
    optional bool animating_exit = 14;
    repeated WindowStateProto child_windows = 15;
    optional .android.graphics.RectProto surface_position = 16;
    optional int32 requested_width = 18;
    optional int32 requested_height = 19;
    optional int32 view_visibility = 20;
    optional int32 system_ui_visibility = 21;
    optional bool has_surface = 22;
    optional bool is_ready_for_display = 23;
    optional .android.graphics.RectProto display_frame = 24 [deprecated=true];
    optional .android.graphics.RectProto overscan_frame = 25 [deprecated=true];
    optional .android.graphics.RectProto visible_frame = 26 [deprecated=true];
    optional .android.graphics.RectProto decor_frame = 27 [deprecated=true];
    optional .android.graphics.RectProto outset_frame = 28 [deprecated=true];
    optional .android.graphics.RectProto overscan_insets = 29 [deprecated=true];
    optional .android.graphics.RectProto visible_insets = 30 [deprecated=true];
    optional .android.graphics.RectProto stable_insets = 31 [deprecated=true];
    optional .android.graphics.RectProto outsets = 32 [deprecated=true];
    optional .android.view.DisplayCutoutProto cutout = 33 [deprecated=true];
    optional bool remove_on_exit = 34;
    optional bool destroying = 35;
    optional bool removed = 36;
    optional bool is_on_screen = 37;
    optional bool is_visible = 38;
    optional bool pending_seamless_rotation = 39;
    optional int64 finished_seamless_rotation_frame = 40;
    optional WindowFramesProto window_frames = 41;
    optional bool force_seamless_rotation = 42;
}

message IdentifierProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional int32 hash_code = 1;
    optional int32 user_id = 2;
    // Either a component name/string (eg: "com.android.settings/.FallbackHome")
    // or a window title ("NavigationBar").
    optional string title = 3 [ (.android.privacy).dest = DEST_EXPLICIT ];
}

/* represents WindowStateAnimator */
message WindowStateAnimatorProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional .android.graphics.RectProto last_clip_rect = 1;
    optional WindowSurfaceControllerProto surface = 2;
    enum DrawState {
        NO_SURFACE = 0;
        DRAW_PENDING = 1;
        COMMIT_DRAW_PENDING = 2;
        READY_TO_SHOW = 3;
        HAS_DRAWN = 4;
    }
    optional DrawState draw_state = 3;
    optional .android.graphics.RectProto system_decor_rect = 4;
}

/* represents WindowSurfaceController */
message WindowSurfaceControllerProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional bool shown = 1;
    optional int32 layer = 2;
}

/* represents ScreenRotationAnimation */
message ScreenRotationAnimationProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional bool started = 1;
    optional bool animation_running = 2;
}

/* represents WindowContainer */
message WindowContainerProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional ConfigurationContainerProto configuration_container = 1;
    optional int32 orientation = 2;
    optional bool visible = 3;
    optional SurfaceAnimatorProto surface_animator = 4;
}

/* represents ConfigurationContainer */
message ConfigurationContainerProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional .android.content.ConfigurationProto override_configuration = 1;
    optional .android.content.ConfigurationProto full_configuration = 2;
    optional .android.content.ConfigurationProto merged_override_configuration = 3;
}

/* represents WindowFrames */
message WindowFramesProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional .android.graphics.RectProto containing_frame = 1;
    optional .android.graphics.RectProto content_frame = 2;
    optional .android.graphics.RectProto decor_frame = 3;
    optional .android.graphics.RectProto display_frame = 4;
    optional .android.graphics.RectProto frame = 5;
    optional .android.graphics.RectProto outset_frame = 6;
    optional .android.graphics.RectProto overscan_frame = 7;
    optional .android.graphics.RectProto parent_frame = 8;
    optional .android.graphics.RectProto visible_frame = 9;
    optional .android.view.DisplayCutoutProto cutout = 10;
    optional .android.graphics.RectProto content_insets = 11;
    optional .android.graphics.RectProto overscan_insets = 12;
    optional .android.graphics.RectProto visible_insets = 13;
    optional .android.graphics.RectProto stable_insets = 14;
    optional .android.graphics.RectProto outsets = 15;
}
