1/*
2 * Copyright (C) 2020 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16syntax = "proto2";
17
18option java_package = "com.android.launcher3.logger";
19option java_outer_classname = "LauncherAtom";
20
21import "launcher_atom_extension.proto";
22
23//
24// ItemInfos
25message ItemInfo {
26  reserved 8;
27
28  oneof Item {
29    Application application = 1;
30    Task task = 2;
31    Shortcut shortcut = 3;
32    Widget widget = 4;
33    FolderIcon folder_icon = 9;
34    Slice slice = 10;
35    SearchActionItem search_action_item = 11;
36    TaskView task_view = 15;
37  }
38  // When used for launch event, stores the global predictive rank
39  optional int32 rank = 5;
40
41  // Stores whether the Item belows to non primary user
42  optional bool is_work = 6 [deprecated = true];
43
44  // Item can be child node to parent container or parent containers (nested)
45  optional ContainerInfo container_info = 7;
46
47  // Stores the origin of the Item
48  repeated Attribute item_attributes = 12;
49
50  // Stores whether the navigation bar is in kids mode.
51  optional bool is_kids_mode = 13;
52
53  // Stores type of the user the Item belong to
54  optional int32 user_type = 14;
55}
56
57message LauncherAttributes{
58
59  // Integer value of item attribute enum
60  // (e.g. SUGGESTED_LABEL, ALL_APPS_SEARCH_RESULT_SETTING etc)
61  repeated int32 item_attributes = 1;
62}
63
64// Represents various launcher surface where items are placed.
65message ContainerInfo {
66  oneof Container {
67    WorkspaceContainer workspace = 1;
68    HotseatContainer hotseat = 2;
69    FolderContainer folder = 3;
70    AllAppsContainer all_apps_container = 4;
71    WidgetsContainer widgets_container = 5;
72    PredictionContainer prediction_container = 6;
73    SearchResultContainer search_result_container = 7;
74    ShortcutsContainer shortcuts_container = 8;
75    SettingsContainer settings_container = 9;
76    PredictedHotseatContainer predicted_hotseat_container = 10;
77    TaskSwitcherContainer task_switcher_container = 11;
78    TaskBarContainer task_bar_container = 12;
79    WallpapersContainer wallpapers_container = 13;
80    ExtendedContainers extended_containers = 20;
81  }
82}
83
84// Represents the apps list sorted alphabetically inside the all-apps view.
85message AllAppsContainer {
86  oneof ParentContainer {
87    TaskBarContainer taskbar_container = 1;
88  }
89}
90
91message WidgetsContainer {
92}
93
94// Represents the predicted apps row(top row) in the all-apps view.
95message PredictionContainer {
96  oneof ParentContainer {
97    TaskBarContainer taskbar_container = 1;
98  }
99}
100
101// Represents the apps container within search results.
102message SearchResultContainer {
103
104  // Length of search term.
105  optional int32 query_length = 1;
106
107  // Container from where search was invoked.
108  oneof ParentContainer {
109    WorkspaceContainer workspace = 2;
110    AllAppsContainer all_apps_container = 3;
111  }
112}
113
114// Container for package specific shortcuts to deep links and notifications.
115// Typically shown as popup window by longpressing on an icon.
116message ShortcutsContainer {
117}
118
119// Container for generic system shortcuts for launcher specific settings.
120// Typically shown up as popup window by longpressing on empty space on workspace.
121message SettingsContainer {
122}
123
124message TaskSwitcherContainer {
125  /**
126   * Indicates the current OrientationHandler in use in Overview.
127   * In fake landscape, the value will be
128   * {@link com.android.quickstep.orientation.LandscapePagedViewHandler} and in real landscape,
129   * the value will be {@link com.android.quickstep.orientation.PortraitPagedViewHandler} for
130   * example.
131   */
132  optional OrientationHandler orientation_handler = 1;
133
134  enum OrientationHandler {
135    PORTRAIT = 0;
136    LANDSCAPE = 1;
137    SEASCAPE = 2;
138  }
139}
140
141// Container for taskbar.
142// Configured to show up on large screens(tablet-sized) such as foldables in expanded state, within
143// an app view(not in launcher screen).
144message TaskBarContainer {
145  optional int32 index = 1;
146
147  // Bit encoded value to capture pinned and predicted taskbar positions.
148  optional int32 cardinality = 2;
149
150  // Container where taskbar was invoked.
151  oneof ParentContainer {
152    TaskSwitcherContainer task_switcher_container = 3;
153  }
154}
155
156// Next value 54
157enum Attribute {
158  option allow_alias = true;
159
160  UNKNOWN = 0;
161  DEFAULT_LAYOUT = 1;       // icon automatically placed in workspace, folder, hotseat
162  BACKUP_RESTORE = 2;       // icon layout restored from backup
163  PINITEM = 3;              // from another app (e.g., Chrome's "Add to Home screen")
164  ALLAPPS_ATOZ = 4;         // within launcher surface, all aps a-z
165  WIDGETS = 5;              // within launcher, widgets tray
166  ADD_TO_HOMESCREEN = 6;    // play install + launcher home setting
167  ALLAPPS_PREDICTION = 7;   // from prediction bar in all apps container
168  HOTSEAT_PREDICTION = 8;   // from prediction bar in hotseat container
169
170  // Folder's label is one of the non-empty suggested values.
171  SUGGESTED_LABEL = 9;
172
173  // Folder's label is non-empty, manually entered by the user
174  // and different from any of suggested values.
175  MANUAL_LABEL = 10;
176
177  // Folder's label is not yet assigned( i.e., title == null).
178  // Eligible for auto-labeling.
179  UNLABELED = 11;
180
181  // Folder's label is empty(i.e., title == "").
182  // Not eligible for auto-labeling.
183  EMPTY_LABEL = 12;
184
185  ALL_APPS_SEARCH_RESULT_APPLICATION = 13;
186  ALL_APPS_SEARCH_RESULT_SHORTCUT = 14;
187  ALL_APPS_SEARCH_RESULT_PEOPLE = 15;
188  ALL_APPS_SEARCH_RESULT_ACTION = 16;
189  ALL_APPS_SEARCH_RESULT_SETTING = 17;
190  ALL_APPS_SEARCH_RESULT_SCREENSHOT = 18;
191  ALL_APPS_SEARCH_RESULT_SLICE = 19;
192  ALL_APPS_SEARCH_RESULT_WIDGETS = 20;
193  ALL_APPS_SEARCH_RESULT_PLAY = 21;
194  ALL_APPS_SEARCH_RESULT_PLAY_GMS = 44;
195  ALL_APPS_SEARCH_RESULT_FALLBACK = 22;
196  ALL_APPS_SEARCH_RESULT_SUGGEST = 22 [deprecated = true];
197  ALL_APPS_SEARCH_RESULT_ASSISTANT = 23;
198  ALL_APPS_SEARCH_RESULT_CHROMETAB = 24;
199  ALL_APPS_SEARCH_RESULT_NAVVYSITE = 25 [deprecated = true];
200  ALL_APPS_SEARCH_RESULT_TIPS = 26;
201  ALL_APPS_SEARCH_RESULT_QS_TILE = 27;
202  ALL_APPS_SEARCH_RESULT_PEOPLE_TILE = 27 [deprecated = true];
203  ALL_APPS_SEARCH_RESULT_LEGACY_SHORTCUT = 30;
204  ALL_APPS_SEARCH_RESULT_ASSISTANT_MEMORY = 31;
205  ALL_APPS_SEARCH_RESULT_VIDEO = 41;
206  ALL_APPS_SEARCH_RESULT_SYSTEM_POINTER = 42;
207  ALL_APPS_SEARCH_RESULT_EDUCARD = 43;
208  ALL_APPS_SEARCH_RESULT_LOCATION = 50;
209  ALL_APPS_SEARCH_RESULT_TEXT_HEADER = 51;
210  ALL_APPS_SEARCH_RESULT_NO_FULFILLMENT = 52;
211
212  // Result sources
213  DATA_SOURCE_APPSEARCH_APP_PREVIEW = 45;
214  DATA_SOURCE_APPSEARCH_APP_SRP_PREVIEW = 46;
215  DATA_SOURCE_APPSEARCH_CATEGORY_SRP_PREVIEW = 48;
216  DATA_SOURCE_APPSEARCH_ENTITY_SRP_PREVIEW = 49;
217  DATA_SOURCE_AIAI_SEARCH_ROOT = 47;
218  DATA_SOURCE_LAUNCHER = 53;
219
220  // Web suggestions provided by AGA
221  ALL_APPS_SEARCH_RESULT_WEB_SUGGEST = 39;
222
223  // Suggestion Type provided by AGA
224  WEB_SEARCH_RESULT_QUERY = 32;
225  WEB_SEARCH_RESULT_TRENDING = 33;
226  WEB_SEARCH_RESULT_ENTITY = 34;
227  WEB_SEARCH_RESULT_ANSWER = 35;
228  WEB_SEARCH_RESULT_PERSONAL = 36;
229  WEB_SEARCH_RESULT_CALCULATOR = 37;
230  WEB_SEARCH_RESULT_URL = 38;
231  WEB_SEARCH_RESULT_RICH_ANSWER = 40;
232
233  WIDGETS_BOTTOM_TRAY = 28;
234  WIDGETS_TRAY_PREDICTION = 29;
235}
236
237// Main app icons
238message Application {
239  optional string package_name = 1;
240  optional string component_name = 2;
241}
242
243// Legacy shortcuts and shortcuts handled by ShortcutManager
244message Shortcut {
245  optional string shortcut_name = 1;
246  optional string shortcut_id = 2;
247}
248
249// AppWidgets handled by AppWidgetManager
250message Widget {
251  optional int32 span_x = 1 [default = 1];
252  optional int32 span_y = 2 [default = 1];
253  optional int32 app_widget_id = 3;
254  optional string package_name = 4; // only populated during snapshot if from workspace
255  optional string component_name = 5; // only populated during snapshot if from workspace
256  optional int32 widget_features = 6;
257}
258
259// Tasks handled by PackageManager
260message Task {
261  optional string package_name = 1;
262  optional string component_name = 2;
263  optional int32 index = 3;
264}
265
266// TaskView in RecentsView.
267message TaskView {
268  // TaskViewType.
269  optional int32 type = 1;
270
271  // Index of TaskView in RecentsView.
272  optional int32 index = 2;
273
274  // ComponentName of the Task.
275  optional string component_name = 3;
276
277  // Number of tasks in the TaskView.
278  optional int32 cardinality = 4;
279}
280
281// Represents folder in a closed state.
282message FolderIcon {
283  // Number of items inside folder.
284  optional int32 cardinality = 1;
285
286  // State of the folder label before the event.
287  optional FromState from_label_state = 2;
288
289  // State of the folder label after the event.
290  optional ToState to_label_state = 3;
291
292  // Details about actual folder label.
293  // Populated when folder label is not a PII.
294  optional string label_info = 4;
295}
296
297// Contains Slice details for logging.
298message Slice{
299  optional string uri = 1;
300}
301
302// Represents SearchAction with in launcher
303message SearchActionItem{
304  optional string package_name = 1;
305  optional string title = 2;
306}
307
308//////////////////////////////////////////////
309// Containers
310
311message WorkspaceContainer {
312  optional int32 page_index = 1 [default = -2]; // range [-1, l], 0 is the index of the main homescreen
313  optional int32 grid_x = 2 [default = -1]; // [0, m], m varies based on the display density and resolution
314  optional int32 grid_y = 3 [default = -1]; // [0, n], n varies based on the display density and resolution
315}
316
317message HotseatContainer {
318  optional int32 index = 1;
319}
320
321// Represents hotseat container with prediction feature enabled.
322message PredictedHotseatContainer {
323  optional int32 index = 1;
324
325  // No of hotseat positions filled with predicted items.
326  optional int32 cardinality = 2;
327}
328
329message FolderContainer {
330  optional int32 page_index = 1 [default = -1];
331  optional int32 grid_x = 2 [default = -1];
332  optional int32 grid_y = 3 [default = -1];
333  oneof ParentContainer {
334    WorkspaceContainer workspace = 4;
335    HotseatContainer hotseat = 5;
336    TaskBarContainer taskbar = 6;
337  }
338}
339
340// Represents wallpapers container for quick switching.
341message WallpapersContainer {
342  // Number of wallpapers in the container.
343  optional int32 cardinality = 1;
344}
345
346// Represents state of EditText field before update.
347enum FromState {
348  // Default value.
349  // Used when a FromState is not applicable, for example, during folder creation.
350  FROM_STATE_UNSPECIFIED = 0;
351
352  // EditText was empty.
353  // Eg: When a folder label is updated from empty string.
354  FROM_EMPTY = 1;
355
356  // EditText was non-empty and manually entered by the user.
357  // Eg: When a folder label is updated from a user-entered value.
358  FROM_CUSTOM = 2;
359
360  // EditText was non-empty and one of the suggestions.
361  // Eg: When a folder label is updated from a suggested value.
362  FROM_SUGGESTED = 3;
363}
364
365// Represents state of EditText field after update.
366enum ToState {
367  // Default value.
368  // Used when ToState is not applicable, for example, when folder label is updated to a different
369  // value when folder label suggestion feature is disabled.
370  TO_STATE_UNSPECIFIED = 0;
371
372  // User attempted to change the EditText, but was not changed.
373  UNCHANGED = 1;
374
375  // New label matches with primary(aka top) suggestion.
376  TO_SUGGESTION0 = 2;
377
378  // New value matches with second top suggestion even though the top suggestion was non-empty.
379  TO_SUGGESTION1_WITH_VALID_PRIMARY = 3;
380
381  // New value matches with second top suggestion given that top suggestion was empty.
382  TO_SUGGESTION1_WITH_EMPTY_PRIMARY = 4;
383
384  // New value matches with third top suggestion even though the top suggestion was non-empty.
385  TO_SUGGESTION2_WITH_VALID_PRIMARY = 5;
386
387  // New value matches with third top suggestion given that top suggestion was empty.
388  TO_SUGGESTION2_WITH_EMPTY_PRIMARY = 6;
389
390  // New value matches with 4th top suggestion even though the top suggestion was non-empty.
391  TO_SUGGESTION3_WITH_VALID_PRIMARY = 7;
392
393  // New value matches with 4th top suggestion given that top suggestion was empty.
394  TO_SUGGESTION3_WITH_EMPTY_PRIMARY = 8;
395
396  // New value is empty even though the top suggestion was non-empty.
397  TO_EMPTY_WITH_VALID_PRIMARY = 9;
398
399  // New value is empty given that top suggestion was empty.
400  TO_EMPTY_WITH_VALID_SUGGESTIONS_AND_EMPTY_PRIMARY = 10;
401
402  // New value is empty given that no suggestions were provided.
403  TO_EMPTY_WITH_EMPTY_SUGGESTIONS = 11;
404
405  // New value is empty given that suggestions feature was disabled.
406  TO_EMPTY_WITH_SUGGESTIONS_DISABLED = 12;
407
408  // New value is non-empty and does not match with any of the suggestions even though the top suggestion was non-empty.
409  TO_CUSTOM_WITH_VALID_PRIMARY = 13;
410
411  // New value is non-empty and not match with any suggestions given that top suggestion was empty.
412  TO_CUSTOM_WITH_VALID_SUGGESTIONS_AND_EMPTY_PRIMARY = 14;
413
414  // New value is non-empty and also no suggestions were provided.
415  TO_CUSTOM_WITH_EMPTY_SUGGESTIONS = 15;
416
417  // New value is non-empty and also suggestions feature was disable.
418  TO_CUSTOM_WITH_SUGGESTIONS_DISABLED = 16;
419}
420