blob: 1815ce42a7617afde43fd272b3a2a177daf26cd6 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
syntax = "proto2";
option optimize_for = LITE_RUNTIME;
option java_package = "org.chromium.chrome.browser.autofill_assistant.proto";
option java_multiple_files = true;
package autofill_assistant;
message ViewProto {
// The unique identifier of the view.
optional string identifier = 1;
// Common view attributes, such as padding and background.
optional ViewAttributesProto attributes = 2;
// Layout parameters such as width, height, and gravity.
optional ViewLayoutParamsProto layout_params = 3;
oneof view {
ViewContainerProto view_container = 4;
// A regular read-only text view.
TextViewProto text_view = 5;
// A horizontal view divider.
DividerViewProto divider_view = 6;
// A regular image view.
ImageViewProto image_view = 7;
// A text input view.
TextInputViewProto text_input_view = 8;
// A vertical expander with fixed title, collapsed, and expanded sections.
VerticalExpanderViewProto vertical_expander_view = 9;
// A toggle button (checkbox or radio button).
ToggleButtonViewProto toggle_button_view = 10;
}
}
message ColorProto {
oneof color {
// The resource identifier of a color.
string resource_identifier = 1;
// A color in the #RRGGBB or #AARRGGBB format.
string parseable_color = 2;
}
}
// Represents a dimension, e.g., width or height.
message ClientDimensionProto {
oneof size {
int32 dp = 1;
// Factor to multiply with the client's total width.
float width_factor = 2;
// Factor to multiply with the client's total height.
float height_factor = 3;
int32 size_in_pixel = 4;
}
}
message ShapeDrawableProto {
message Rectangle { optional ClientDimensionProto corner_radius = 1; }
oneof shape { Rectangle rectangle = 1; }
optional ColorProto background_color = 2;
optional ClientDimensionProto stroke_width = 3;
optional ColorProto stroke_color = 4;
}
message BitmapDrawableProto {
optional string url = 1;
optional ClientDimensionProto width = 2;
optional ClientDimensionProto height = 3;
}
message FaviconDrawableProto {
optional ClientDimensionProto diameter_size = 1;
// If true, we always use the monogram, even if the favicon is available.
optional bool force_monogram = 2;
// If set, this url is used to fetch favicon, otherwise current url is used to
// fetch favicon.
optional string website_url = 3;
}
// A drawable for use in backgrounds or in image views.
message DrawableProto {
enum Icon {
DRAWABLE_ICON_UNDEFINED = 0;
PROGRESSBAR_DEFAULT_INITIAL_STEP = 1;
PROGRESSBAR_DEFAULT_DATA_COLLECTION = 2;
PROGRESSBAR_DEFAULT_PAYMENT = 3;
PROGRESSBAR_DEFAULT_FINAL_STEP = 4;
SITTING_PERSON = 5;
TICKET_STUB = 6;
SHOPPING_BASKET = 7;
FAST_FOOD = 8;
LOCAL_DINING = 9;
COGWHEEL = 10;
KEY = 11;
CAR = 12;
GROCERY = 13;
VISIBILITY_ON = 14;
VISIBILITY_OFF = 15;
}
oneof drawable {
// The resource identifier of a drawable.
string resource_identifier = 1;
// A bitmap retrieved from a URL.
BitmapDrawableProto bitmap = 2;
// A shape, e.g., a rounded rectangle.
ShapeDrawableProto shape = 3;
// An icon from a predefined set of known icons.
Icon icon = 4;
// A Base64 encoded image string.
bytes base64 = 5;
// The favicon for a given URL.
FaviconDrawableProto favicon = 6;
}
}
// Attributes of the view.
message ViewAttributesProto {
optional int32 padding_start = 1;
optional int32 padding_top = 2;
optional int32 padding_end = 3;
optional int32 padding_bottom = 4;
optional DrawableProto background = 5;
// The content description for this view. There are three possible states:
// - unset: content description is auto-inferred by android a11y.
// - set to empty string: this view is not important for a11y.
// - set to non-empty string: the view will have the specified content
// description.
optional string content_description = 6;
// Whether the view is initially visible or not.
optional bool visible = 7 [default = true];
// Whether the view is initially enabled or not.
optional bool enabled = 8 [default = true];
}
// Parameters configuring how views attach to their parents.
message ViewLayoutParamsProto {
// Enum values map directly to corresponding Android values. This was done for
// two reasons: (1), for ease-of-implementation and (2) because it is unlikely
// that any one chosen enum mapping will apply to more than one platform; we
// might as well match one platform directly.
enum Gravity {
UNDEFINED = 0;
CENTER = 17;
CENTER_HORIZONTAL = 1;
CENTER_VERTICAL = 16;
START = 8388611;
TOP = 48;
END = 8388613;
BOTTOM = 80;
FILL_HORIZONTAL = 7;
FILL_VERTICAL = 112;
}
enum Size {
WRAP_CONTENT = -2;
MATCH_PARENT = -1;
}
// The width of the view. Values >= 0 are interpreted as dp. Values < 0
// are special values as defined in the |Size| enum.
optional int32 layout_width = 1 [default = -2];
// The width of the view. Values >= 0 are interpreted as dp.Values < 0
// are special values as defined in the |Size| enum.
optional int32 layout_height = 2 [default = -2];
// The relative weight of the view. Only available in some containers.
optional float layout_weight = 8;
optional int32 margin_start = 3;
optional int32 margin_top = 4;
optional int32 margin_end = 5;
optional int32 margin_bottom = 6;
// A bit-wise OR of the desired |Gravity| values.
optional int32 layout_gravity = 7;
// The minimum width of the view, in dp.
optional int32 minimum_width = 9;
// The minimum height of the view, in dp.
optional int32 minimum_height = 10;
}
message ViewContainerProto {
// The list of views to add to this container.
repeated ViewProto views = 1;
oneof container {
LinearLayoutProto linear_layout = 2;
VerticalExpanderAccordionProto expander_accordion = 3;
}
}
message LinearLayoutProto {
enum Orientation {
HORIZONTAL = 0;
VERTICAL = 1;
}
optional Orientation orientation = 1;
}
// A vertical expander is a special type of vertical linear layout. It has two
// expansion states (expanded vs. collapsed) and toggles between them by tapping
// the title widget. For user guidance, a chevron is shown in the title to
// indicate the current state.
message VerticalExpanderViewProto {
enum ChevronStyle {
// Automatic: will show the chevron only if |expanded_view| is set.
NOT_SET_AUTOMATIC = 0;
ALWAYS = 1;
NEVER = 2;
}
// The view to show in the expander title.
optional ViewProto title_view = 1;
// The view to show in the collapsed state.
optional ViewProto collapsed_view = 2;
// The view to show in the expanded state.
optional ViewProto expanded_view = 3;
// The chevron style controls when to show the expand/collapse chevron.
optional ChevronStyle chevron_style = 4;
}
// This is a special type of linear layout that implements accordion-like
// functionality for all child vertical expanders, i.e., it ensures that at
// most one child vertical expander is expanded at any time.
message VerticalExpanderAccordionProto {
optional LinearLayoutProto.Orientation orientation = 2;
}
message TextViewProto {
oneof kind {
// Static text.
string text = 1;
// Dynamic text. Will update automatically to track the value. Should point
// to a single string value. If specified, view identifier is mandatory!
string model_identifier = 3;
}
optional string text_appearance = 2;
// The text alignment as a bit-wise OR of ViewLayoutParamsProto.Gravity
// values. The default is START|TOP (i.e., top-left-aligned for western
// locales).
optional int32 text_alignment = 4 [default = 8388659];
}
message DividerViewProto {}
message ImageViewProto {
optional DrawableProto image = 1;
}
// A text input widget. Note: View identifier is mandatory!
message TextInputViewProto {
// This mirrors the type hints specified in
// https://cs.chromium.org/chromium/src/chrome/android/java/src/org/chromium/chrome/browser/autofill/prefeditor/EditorFieldModel.java
enum InputTypeHint {
// No special formatting rules.
NONE = 0;
PHONE = 1;
EMAIL = 2;
// A multi-line address field that may include numbers.
STREET_LINES = 3;
PERSON_NAME = 4;
// A region or administrative area, e.g., a state or a province.
REGION = 5;
ALPHA_NUMERIC = 6;
}
// The hint to display when the input is empty.
optional string hint = 1;
// A type hint that the widget may interpret to provide optimized controls.
// Note that the actual impact is version-dependent and not all hints may be
// supported, in which case a regular text input field will be displayed.
optional InputTypeHint type = 2;
// Both input and output. The model identifier containing this view's text.
// Should point to a single string value.
optional string model_identifier = 3;
}
// A generic read-only popup message.
message InfoPopupProto {
// The title of the popup window.
optional string title = 1;
// The text of the popup window.
optional string text = 2;
message DialogButton {
message CloseDialog {}
message OpenUrlInCCT { optional string url = 1; }
// The action to be executed on click.
oneof click_action {
// Closes the popup.
CloseDialog close_dialog = 4;
// Opens the specified url into a new CCT.
OpenUrlInCCT open_url_in_cct = 5;
}
optional string label = 1;
}
// Optional: adds a positive button.
optional DialogButton positive_button = 3;
// Optional: adds a negative button.
optional DialogButton negative_button = 4;
// Optional: adds a neutral button.
optional DialogButton neutral_button = 5;
}
// A toggle button (either a radio button or a check box). Note: view identifier
// is mandatory!
message ToggleButtonViewProto {
message CheckBox {}
message RadioButton {
// This is an arbitrary string that should be shared among all radio buttons
// belonging to the same exclusion group.
optional string radio_group_identifier = 1;
}
// The type of toggle button.
oneof kind {
CheckBox check_box = 1;
RadioButton radio_button = 2;
}
// The view to display to the left of the toggle (if any).
optional ViewProto left_content_view = 3;
// The view to display to the right of the toggle (if any).
optional ViewProto right_content_view = 4;
// The model identifier to keep in sync with the selection. Should point to a
// single bool value.
optional string model_identifier = 5;
}