/*
 * 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/windowcontainerthumbnail.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;
    optional int32 focused_display_id = 9;
}

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

    optional WindowContainerProto window_container = 1;
    repeated DisplayContentProto displays = 2 [deprecated=true];
    reserved 3; // IdentifierProto windows
    /* window references in top down z order */
    repeated WindowStateProto windows = 4 [deprecated=true];
    optional KeyguardControllerProto keyguard_controller = 5;
    // Whether or not the home activity is the recents activity. This is needed for the CTS tests to
    // know what activity types to check for when invoking splitscreen multi-window.
    optional bool is_home_recents_component = 6;
    repeated IdentifierProto pending_activities = 7;
}

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;
}

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

    optional bool keyguard_showing = 1;
    repeated KeyguardOccludedProto keyguard_occluded_states = 2;
    optional bool aod_showing = 3;
}

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

    optional int32 display_id = 1;
    optional bool keyguard_occluded = 2;
}

/* 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;
    reserved 3; // stacks
    optional DockedStackDividerControllerProto docked_stack_divider_controller = 4 [deprecated=true];
    // Will be removed soon.
    optional PinnedStackControllerProto pinned_stack_controller = 5 [deprecated=true];
    /* non app windows */
    repeated WindowTokenProto above_app_windows = 6 [deprecated=true];
    repeated WindowTokenProto below_app_windows = 7 [deprecated=true];
    repeated WindowTokenProto ime_windows = 8 [deprecated=true];
    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;
    repeated WindowTokenProto overlay_windows = 20;
    optional DisplayAreaProto root_display_area = 21;


    optional bool single_task_instance = 22;
    optional int32 focused_root_task_id = 23;
    optional .com.android.server.wm.IdentifierProto resumed_activity = 24;
    repeated TaskProto tasks = 25 [deprecated=true];
    optional bool display_ready = 26;
}

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

    optional WindowContainerProto window_container = 1;
    optional string name = 2 [ (.android.privacy).dest = DEST_EXPLICIT ];
    repeated DisplayAreaChildProto children = 3 [deprecated=true];
}

/* represents a generic child of a DisplayArea */
message DisplayAreaChildProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    /* At most one of the following should be present: */

    /* represents a DisplayArea child */
    optional DisplayAreaProto display_area = 1;
    /* represents a WindowToken child */
    optional WindowTokenProto window = 2;
    /* represents an unknown child - the class name is recorded */
    repeated string unknown = 3;
}

/* 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 [deprecated=true];
}

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

    optional .android.graphics.RectProto default_bounds = 1 [deprecated=true];
    optional .android.graphics.RectProto movement_bounds = 2 [deprecated=true];
}

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

    optional WindowContainerProto window_container = 1;
    optional int32 id = 2;
    reserved 3; // activity
    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;

    repeated TaskProto tasks = 10 [deprecated=true];
    repeated ActivityRecordProto activities = 11 [deprecated=true];

    optional .com.android.server.wm.IdentifierProto resumed_activity = 12;
    optional string real_activity = 13;
    optional string orig_activity = 14;

    optional int32 display_id = 15;
    optional int32 root_task_id = 16;
    optional int32 activity_type = 17;
    optional int32 resize_mode = 18;
    optional int32 min_width = 19;
    optional int32 min_height = 20;

    optional .android.graphics.RectProto adjusted_bounds = 21;
    optional .android.graphics.RectProto last_non_fullscreen_bounds = 22;
    optional bool adjusted_for_ime = 23;
    optional float adjust_ime_amount = 24;
    optional float adjust_divider_amount = 25;
    optional bool animating_bounds = 26;
    optional float minimize_amount = 27;
    optional bool created_by_organizer = 28;
}

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

    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_animating = 5;
    optional WindowContainerThumbnailProto thumbnail = 6;
    optional bool fills_parent = 7;
    optional bool app_stopped = 8;
    optional bool visible_requested = 9;
    optional bool client_visible = 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;
    reserved 18; // removed
    optional IdentifierProto starting_window = 19;
    optional bool starting_displayed = 20;
    optional bool starting_moved = 201;
    optional bool visible_set_from_transferred_starting_window = 22;
    repeated .android.graphics.RectProto frozen_bounds = 23;
    optional bool visible = 24;
    reserved 25; // configuration_container
    optional IdentifierProto identifier = 26;
    optional string state = 27;
    optional bool front_of_task = 28;
    optional int32 proc_id = 29;
    optional bool translucent = 30;
}

/* 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 [deprecated=true];
    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 [deprecated=true];
    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;
    repeated WindowContainerChildProto children = 5;
}

/* represents a generic child of a WindowContainer */
message WindowContainerChildProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    /* A window container can have multiple children of different types stored as
     * a WindowContainerChildProto but each instance of WindowContainerChildProto
     * can only contain a single type.
     */
    /* We do not know the derived typ and the class is dumped
     * as a WindowContainer */
    optional WindowContainerProto window_container = 2;
    /* represents a DisplayContent child */
    optional DisplayContentProto display_content = 3;
    /* represents a DisplayArea child */
    optional DisplayAreaProto display_area = 4;
    /* represents a Task child */
    optional TaskProto task = 5;
    /* represents an ActivityRecord child */
    optional ActivityRecordProto activity = 6;
    /* represents a WindowToken child */
    optional WindowTokenProto window_token = 7;
    /* represents a WindowState child */
    optional WindowStateProto window = 8;
}

/* 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 [deprecated=true];
    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 [deprecated=true];
    optional .android.graphics.RectProto visible_insets = 13;
    optional .android.graphics.RectProto stable_insets = 14;
    optional .android.graphics.RectProto outsets = 15;
}
