/*
 * 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/surface.proto";
import "frameworks/base/core/proto/android/view/windowlayoutparams.proto";
import "frameworks/base/libs/incident/proto/android/privacy.proto";

package com.android.server.wm.proto;

option java_multiple_files = true;

message WindowManagerServiceProto {
  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 AppTransitionProto app_transition = 9;
}

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

  optional WindowContainerProto window_container = 1;
  repeated DisplayProto 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;
  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;
  optional IdentifierProto focused_window = 9;
  optional IdentifierProto top_fullscreen_opaque_window = 10;
  optional IdentifierProto top_fullscreen_opaque_or_dimming_window = 11;
  optional bool keyguard_occluded = 12;
  optional bool keyguard_occluded_changed = 13;
  optional bool keyguard_occluded_pending = 14;
  optional bool force_status_bar = 15;
  optional bool force_status_bar_from_keyguard = 16;
  optional BarControllerProto status_bar = 17;
  optional BarControllerProto navigation_bar = 18;
  optional WindowOrientationListenerProto orientation_listener = 19;
  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;
  /* definitions for constants found in {@link com.android.server.wm.AppTransition} */
  enum TransitionType {
    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;
  }
  optional TransitionType last_used_app_transition = 2;
}

/* represents DisplayContent */
message DisplayProto {
  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;
}

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

/* 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 temp_inset_bounds = 6;
  optional bool defer_removal = 7;
}

/* 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;
  optional int32 display_id = 3;
  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;
  optional .android.graphics.RectProto containing_frame = 8;
  optional .android.graphics.RectProto parent_frame = 9;
  optional .android.graphics.RectProto content_frame = 10;
  optional .android.graphics.RectProto content_insets = 11;
  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;
  optional .android.graphics.RectProto overscan_frame = 25;
  optional .android.graphics.RectProto visible_frame = 26;
  optional .android.graphics.RectProto decor_frame = 27;
  optional .android.graphics.RectProto outset_frame = 28;
  optional .android.graphics.RectProto overscan_insets = 29;
  optional .android.graphics.RectProto visible_insets = 30;
  optional .android.graphics.RectProto stable_insets = 31;
  optional .android.graphics.RectProto outsets = 32;
  optional .android.view.DisplayCutoutProto cutout = 33;
  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;
}

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

  optional int32 hash_code = 1;
  optional int32 user_id = 2;
  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;
}
