/*
 * 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/graphics/pixelformat.proto";
import "frameworks/base/core/proto/android/view/display.proto";
import "frameworks/base/core/proto/android/privacy.proto";

package android.view;
option java_multiple_files = true;

/* represents WindowManager.LayoutParams */
message WindowLayoutParamsProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional int32 type = 1;
    optional int32 x = 2;
    optional int32 y = 3;
    optional int32 width = 4;
    optional int32 height = 5;
    optional float horizontal_margin = 6;
    optional float vertical_margin = 7;
    optional int32 gravity = 8;
    optional int32 soft_input_mode = 9;
    optional .android.graphics.PixelFormatProto.Format format = 10;
    optional int32 window_animations = 11;
    optional float alpha = 12;
    optional float screen_brightness = 13;
    optional float button_brightness = 14;

    enum RotationAnimation {
        ROTATION_ANIMATION_UNSPECIFIED = -1;
        ROTATION_ANIMATION_CROSSFADE = 1;
        ROTATION_ANIMATION_JUMPCUT = 2;
        ROTATION_ANIMATION_SEAMLESS = 3;
    }
    optional RotationAnimation rotation_animation = 15;

    optional float preferred_refresh_rate = 16;
    optional int32 preferred_display_mode_id = 17;
    optional bool has_system_ui_listeners = 18;
    optional uint32 input_feature_flags = 19;
    optional int64 user_activity_timeout = 20;

    optional DisplayProto.ColorMode color_mode = 23;
    optional uint32 flags = 24;
    optional uint32 private_flags = 26;
    optional uint32 system_ui_visibility_flags = 27;
    optional uint32 subtree_system_ui_visibility_flags = 28;
    optional uint32 appearance = 29;
    optional uint32 behavior = 30;
    optional uint32 fit_insets_types = 31;
    optional uint32 fit_insets_sides = 32;
    optional bool fit_ignore_visibility = 33;
}
