// Copyright 2020 Google LLC // // 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 = "proto3"; option java_multiple_files = true; option java_package = "com.android.emulator.control"; option objc_class_prefix = "AEC"; package android.emulation.control; import "google/protobuf/empty.proto"; service UiController { // PaneEntry specifies which pane will be selected when // the extended control is shown. If the extended is visible already, // this method will set visibilityChangedto to false. rpc showExtendedControls(PaneEntry) returns (ExtendedControlsStatus) {} // this method has no effect if the extended controls are hidden. // In that case, visibilityChanged will be set to false; rpc closeExtendedControls(google.protobuf.Empty) returns (ExtendedControlsStatus) {} rpc setUiTheme(ThemingStyle) returns (google.protobuf.Empty) {} // Returns the user configuration of the running emulator. The user // configuration contains information about the user interface. rpc getUserConfig(google.protobuf.Empty) returns (UserConfig) {} } message UserConfigEntry { string key = 1; string value = 2; } // The user configuration of the running emulator as // key value pairs. This contains the data you normally find // in emulator-user.ini message UserConfig { repeated UserConfigEntry entries = 1; } message ThemingStyle { enum Style { LIGHT = 0; DARK = 1; CONTRAST = 2; } Style style = 1; } message ExtendedControlsStatus { bool visibilityChanged = 1; } // The pixel coordinates are resolution independent, meaning the coordinates // are independent from the pixel grid, resulting in a graphical user // interface that is displayed at a consistent location, regardless of the // resolution of the screen. // // For technical details: https://doc.qt.io/qt-5/highdpi.html // // Some things to note: // // - You cannot move a window offscreen. // - There is a padding of around 10px around the frame. // // This means that moving to (0, 0) or (10, 10) will have the same result. // This means that anchoring might not exactly behave as requested. message WindowPosition { // Anchor that is used to determine horizontal window placement. enum HorizontalAnchor { LEFT = 0; // The x coordinate will be treated as the left edge of the // window. HCENTER = 1; // The x coordinate will be treated as the middle between // the left and right edges of the window. RIGHT = 2; // The x coordinate will be treated as the right edge of // the window. } // Anchor that is used to determine vertical window placement. enum VerticalAnchor { TOP = 0; // The y coordinate will be treated as the top edge of the // window. VCENTER = 1; // The y coordinate will be treated as the middle between // the top and bottom edges of the window. BOTTOM = 3; // The y coordinate will be treated as the bottom edge of // the window. } // Corresponds to the x and y coordinate of the window geometry. The window // geometry includes the window frame. // See: https://doc.qt.io/qt-5/application-windows.html#window-geometry for // details and pecularities on linux. uint32 x = 1; uint32 y = 2; HorizontalAnchor horizontalAnchor = 3; VerticalAnchor verticalAnchor = 4; } message PaneEntry { enum PaneIndex { // When specified as KEEP_CURRENT, extended controls will display the // current pane. // If it is the first time for extended controls to be shown, LOCATION // will be used. KEEP_CURRENT = 0; // Referenced from // external/qemu/android/android-emu/android/skin/qt/extended-window-styles.h LOCATION = 1; MULTIDISPLAY = 2; CELLULAR = 3; BATTERY = 4; CAMERA = 5; TELEPHONE = 6; DPAD = 7; TV_REMOTE = 8; ROTARY = 9; MICROPHONE = 10; FINGER = 11; VIRT_SENSORS = 12; SNAPSHOT = 13; BUGREPORT = 14; RECORD = 15; GOOGLE_PLAY = 16; SETTINGS = 17; HELP = 18; CAR = 19; CAR_ROTARY = 20; SENSOR_REPLAY = 21; }; PaneIndex index = 1; // Set the window position to the specified coordinates if no coordinates are // present in the AVD, otherwise this value will be igonred. WindowPosition position = 2; }