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

package com.android.server.wm.proto;

option java_multiple_files = true;

message WindowManagerServiceProto {
  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 {
  optional WindowContainerProto window_container = 1;
  repeated DisplayProto displays = 2;
  /* window references in top down z order */
  repeated IdentifierProto windows = 3;
}

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

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

message KeyguardServiceDelegateProto {
  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 {
  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 {
  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 {
  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 {
  optional .android.graphics.RectProto stable_bounds = 1;
}

/* represents DockedStackDividerController */
message DockedStackDividerControllerProto {
  optional bool minimized_dock = 1;
}

/* represents PinnedStackController */
message PinnedStackControllerProto {
  optional .android.graphics.RectProto default_bounds = 1;
  optional .android.graphics.RectProto movement_bounds = 2;
}

/* represents TaskStack */
message StackProto {
  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 {
  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 {
  /* obtained from ActivityRecord */
  optional string name = 1;
  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 {
  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 {
  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 .android.graphics.RectProto shown_position = 17;
  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 {
  optional int32 hash_code = 1;
  optional int32 user_id = 2;
  optional string title = 3;
}

/* represents WindowStateAnimator */
message WindowStateAnimatorProto {
  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 {
  optional bool shown = 1;
  optional int32 layer = 2;
}

/* represents ScreenRotationAnimation */
message ScreenRotationAnimationProto {
  optional bool started = 1;
  optional bool animation_running = 2;
}

/* represents WindowContainer */
message WindowContainerProto {
  optional ConfigurationContainerProto configuration_container = 1;
  optional int32 orientation = 2;
  optional bool visible = 3;
  optional SurfaceAnimatorProto surface_animator = 4;
}

/* represents ConfigurationContainer */
message ConfigurationContainerProto {
  optional .android.content.ConfigurationProto override_configuration = 1;
  optional .android.content.ConfigurationProto full_configuration = 2;
  optional .android.content.ConfigurationProto merged_override_configuration = 3;
}
