1b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski/*
2b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski * Copyright (C) 2017 The Android Open Source Project
3b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski *
4b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski * Licensed under the Apache License, Version 2.0 (the "License");
5b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski * you may not use this file except in compliance with the License.
6b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski * You may obtain a copy of the License at
7b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski *
8b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski *      http://www.apache.org/licenses/LICENSE-2.0
9b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski *
10b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski * Unless required by applicable law or agreed to in writing, software
11b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski * distributed under the License is distributed on an "AS IS" BASIS,
12b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski * See the License for the specific language governing permissions and
14b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski * limitations under the License.
15b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski */
16b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
17b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinskisyntax = "proto3";
18b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
19b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinskipackage aapt.pb;
20b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
21b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinskioption java_package = "com.android.aapt";
22b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinskioption optimize_for = LITE_RUNTIME;
23b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
24b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski// A description of the requirements a device must have in order for a
25b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski// resource to be matched and selected.
26b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinskimessage Configuration {
27b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  enum LayoutDirection {
28b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    LAYOUT_DIRECTION_UNSET = 0;
29b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    LAYOUT_DIRECTION_LTR = 1;
30b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    LAYOUT_DIRECTION_RTL = 2;
31b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  }
32b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
33b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  enum ScreenLayoutSize {
34b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    SCREEN_LAYOUT_SIZE_UNSET = 0;
35b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    SCREEN_LAYOUT_SIZE_SMALL = 1;
36b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    SCREEN_LAYOUT_SIZE_NORMAL = 2;
37b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    SCREEN_LAYOUT_SIZE_LARGE = 3;
38b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    SCREEN_LAYOUT_SIZE_XLARGE = 4;
39b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  }
40b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
41b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  enum ScreenLayoutLong {
42b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    SCREEN_LAYOUT_LONG_UNSET = 0;
43b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    SCREEN_LAYOUT_LONG_LONG = 1;
44b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    SCREEN_LAYOUT_LONG_NOTLONG = 2;
45b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  }
46b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
47b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  enum ScreenRound {
48b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    SCREEN_ROUND_UNSET = 0;
49b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    SCREEN_ROUND_ROUND = 1;
50b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    SCREEN_ROUND_NOTROUND = 2;
51b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  }
52b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
53b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  enum WideColorGamut {
54b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    WIDE_COLOR_GAMUT_UNSET = 0;
55b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    WIDE_COLOR_GAMUT_WIDECG = 1;
56b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    WIDE_COLOR_GAMUT_NOWIDECG = 2;
57b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  }
58b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
59b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  enum Hdr {
60b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    HDR_UNSET = 0;
61b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    HDR_HIGHDR = 1;
62b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    HDR_LOWDR = 2;
63b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  }
64b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
65b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  enum Orientation {
66b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    ORIENTATION_UNSET = 0;
67b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    ORIENTATION_PORT = 1;
68b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    ORIENTATION_LAND = 2;
69b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    ORIENTATION_SQUARE = 3;
70b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  }
71b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
72b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  enum UiModeType {
73b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    UI_MODE_TYPE_UNSET = 0;
74b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    UI_MODE_TYPE_NORMAL = 1;
75b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    UI_MODE_TYPE_DESK = 2;
76b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    UI_MODE_TYPE_CAR = 3;
77b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    UI_MODE_TYPE_TELEVISION = 4;
78b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    UI_MODE_TYPE_APPLIANCE = 5;
79b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    UI_MODE_TYPE_WATCH = 6;
80b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    UI_MODE_TYPE_VRHEADSET = 7;
81b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  }
82b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
83b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  enum UiModeNight {
84b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    UI_MODE_NIGHT_UNSET = 0;
85b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    UI_MODE_NIGHT_NIGHT = 1;
86b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    UI_MODE_NIGHT_NOTNIGHT = 2;
87b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  }
88b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
89b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  enum Touchscreen {
90b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    TOUCHSCREEN_UNSET = 0;
91b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    TOUCHSCREEN_NOTOUCH = 1;
92b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    TOUCHSCREEN_STYLUS = 2;
93b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    TOUCHSCREEN_FINGER = 3;
94b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  }
95b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
96b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  enum KeysHidden {
97b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    KEYS_HIDDEN_UNSET = 0;
98b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    KEYS_HIDDEN_KEYSEXPOSED = 1;
99b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    KEYS_HIDDEN_KEYSHIDDEN = 2;
100b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    KEYS_HIDDEN_KEYSSOFT = 3;
101b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  }
102b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
103b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  enum Keyboard {
104b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    KEYBOARD_UNSET = 0;
105b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    KEYBOARD_NOKEYS = 1;
106b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    KEYBOARD_QWERTY = 2;
107b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    KEYBOARD_TWELVEKEY = 3;
108b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  }
109b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
110b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  enum NavHidden {
111b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    NAV_HIDDEN_UNSET = 0;
112b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    NAV_HIDDEN_NAVEXPOSED = 1;
113b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    NAV_HIDDEN_NAVHIDDEN = 2;
114b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  }
115b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
116b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  enum Navigation {
117b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    NAVIGATION_UNSET = 0;
118b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    NAVIGATION_NONAV = 1;
119b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    NAVIGATION_DPAD = 2;
120b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    NAVIGATION_TRACKBALL = 3;
121b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski    NAVIGATION_WHEEL = 4;
122b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  }
123b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
124b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  //
125b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  // Axis/dimensions that are understood by the runtime.
126b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  //
127b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
128b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  // Mobile country code.
129b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  uint32 mcc = 1;
130b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
131b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  // Mobile network code.
132b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  uint32 mnc = 2;
133b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
134b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  // BCP-47 locale tag.
135b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  string locale = 3;
136b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
137b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  // Left-to-right, right-to-left...
138b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  LayoutDirection layout_direction = 4;
139b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
140b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  // Screen width in pixels. Prefer screen_width_dp.
141b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  uint32 screen_width = 5;
142b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
143b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  // Screen height in pixels. Prefer screen_height_dp.
144b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  uint32 screen_height = 6;
145b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
146b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  // Screen width in density independent pixels (dp).
147b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  uint32 screen_width_dp = 7;
148b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
149b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  // Screen height in density independent pixels (dp).
150b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  uint32 screen_height_dp = 8;
151b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
152b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  // The smallest screen dimension, regardless of orientation, in dp.
153b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  uint32 smallest_screen_width_dp = 9;
154b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
155b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  // Whether the device screen is classified as small, normal, large, xlarge.
156b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  ScreenLayoutSize screen_layout_size = 10;
157b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
158b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  // Whether the device screen is long.
159b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  ScreenLayoutLong screen_layout_long = 11;
160b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
161b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  // Whether the screen is round (Android Wear).
162b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  ScreenRound screen_round = 12;
163b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
164b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  // Whether the screen supports wide color gamut.
165b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  WideColorGamut wide_color_gamut = 13;
166b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
167b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  // Whether the screen has high dynamic range.
168b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  Hdr hdr = 14;
169b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
170b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  // Which orientation the device is in (portrait, landscape).
171b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  Orientation orientation = 15;
172b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
173b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  // Which type of UI mode the device is in (television, car, etc.).
174b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  UiModeType ui_mode_type = 16;
175b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
176b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  // Whether the device is in night mode.
177b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  UiModeNight ui_mode_night = 17;
178b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
179b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  // The device's screen density in dots-per-inch (dpi).
180b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  uint32 density = 18;
181b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
182b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  // Whether a touchscreen exists, supports a stylus, or finger.
183b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  Touchscreen touchscreen = 19;
184b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
185b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  // Whether the keyboard hardware keys are currently hidden, exposed, or
186b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  // if the keyboard is a software keyboard.
187b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  KeysHidden keys_hidden = 20;
188b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
189b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  // The type of keyboard present (none, QWERTY, 12-key).
190b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  Keyboard keyboard = 21;
191b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
192b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  // Whether the navigation is exposed or hidden.
193b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  NavHidden nav_hidden = 22;
194b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
195b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  // The type of navigation present on the device
196b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  // (trackball, wheel, dpad, etc.).
197b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  Navigation navigation = 23;
198b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
199b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  // The minimum SDK version of the device.
200b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  uint32 sdk_version = 24;
201b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
202b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  //
203b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  // Build-time only dimensions.
204b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  //
205b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski
206b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski  string product = 25;
207b58c3ef023acf3851e4a0557d04d65d52835d2dfAdam Lesinski}
208