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 21// 22// ItemInfos 23message ItemInfo { 24 oneof Item { 25 Application application = 1; 26 Task task = 2; 27 Shortcut shortcut = 3; 28 Widget widget = 4; 29 FolderIcon folder_icon = 9; 30 } 31 // When used for launch event, stores the global predictive rank 32 optional int32 rank = 5; 33 34 // Stores whether the Item belows to non primary user 35 optional bool is_work = 6; 36 37 // Item can be child node to parent container or parent containers (nested) 38 optional ContainerInfo container_info = 7; 39 40 // Stores the origin of the Item 41 optional Attribute attribute = 8; 42} 43 44// Represents various launcher surface where items are placed. 45message ContainerInfo { 46 oneof Container { 47 WorkspaceContainer workspace = 1; 48 HotseatContainer hotseat = 2; 49 FolderContainer folder = 3; 50 AllAppsContainer all_apps_container = 4; 51 WidgetsContainer widgets_container = 5; 52 PredictionContainer prediction_container = 6; 53 SearchResultContainer search_result_container = 7; 54 ShortcutsContainer shortcuts_container = 8; 55 SettingsContainer settings_container = 9; 56 PredictedHotseatContainer predicted_hotseat_container = 10; 57 TaskSwitcherContainer task_switcher_container = 11; 58 TaskForegroundContainer task_foreground_container = 12; 59 } 60} 61 62// Represents the apps list sorted alphabetically inside the all-apps view. 63message AllAppsContainer { 64} 65 66message WidgetsContainer { 67} 68 69// Represents the predicted apps row(top row) in the all-apps view. 70message PredictionContainer { 71} 72 73// Represents the apps container within search results. 74message SearchResultContainer { 75 76 // Length of search term. 77 optional int32 query_length = 1; 78 79 // Container from where search was invoked. 80 oneof ParentContainer { 81 WorkspaceContainer workspace = 2; 82 AllAppsContainer all_apps_container = 3; 83 } 84} 85 86// Container for package specific shortcuts to deep links and notifications. 87// Typically shown as popup window by longpressing on an icon. 88message ShortcutsContainer { 89} 90 91// Container for generic system shortcuts for launcher specific settings. 92// Typically shown up as popup window by longpressing on empty space on workspace. 93message SettingsContainer { 94} 95 96// Container for tasks in the Overview UI. 97// Typically entered using either the overview gesture or overview button. 98message TaskSwitcherContainer {} 99 100// Container for tasks from another foreground app, when not on launcher screen. 101// Typically home gesture or overview gesture can be triggered from 102// this container. 103message TaskForegroundContainer {} 104 105enum Attribute { 106 UNKNOWN = 0; 107 DEFAULT_LAYOUT = 1; // icon automatically placed in workspace, folder, hotseat 108 BACKUP_RESTORE = 2; // icon layout restored from backup 109 PINITEM = 3; // from another app (e.g., Chrome's "Add to Home screen") 110 ALLAPPS_ATOZ = 4; // within launcher surface, all aps a-z 111 WIDGETS = 5; // within launcher, widgets tray 112 ADD_TO_HOMESCREEN = 6; // play install + launcher home setting 113 ALLAPPS_PREDICTION = 7; // from prediction bar in all apps container 114 HOTSEAT_PREDICTION = 8; // from prediction bar in hotseat container 115 116 // Folder's label is one of the non-empty suggested values. 117 SUGGESTED_LABEL = 9; 118 119 // Folder's label is non-empty, manually entered by the user 120 // and different from any of suggested values. 121 MANUAL_LABEL = 10; 122 123 // Folder's label is not yet assigned( i.e., title == null). 124 // Eligible for auto-labeling. 125 UNLABELED = 11; 126 127 // Folder's label is empty(i.e., title == ""). 128 // Not eligible for auto-labeling. 129 EMPTY_LABEL = 12; 130} 131 132// Main app icons 133message Application { 134 optional string package_name = 1; 135 optional string component_name = 2; 136} 137 138// Legacy shortcuts and shortcuts handled by ShortcutManager 139message Shortcut { 140 optional string shortcut_name = 1; 141} 142 143// AppWidgets handled by AppWidgetManager 144message Widget { 145 optional int32 span_x = 1 [default = 1]; 146 optional int32 span_y = 2 [default = 1]; 147 optional int32 app_widget_id = 3; 148 optional string package_name = 4; // only populated during snapshot if from workspace 149 optional string component_name = 5; // only populated during snapshot if from workspace 150} 151 152// Tasks handled by PackageManager 153message Task { 154 optional string package_name = 1; 155 optional string component_name = 2; 156 optional int32 index = 3; 157} 158 159// Represents folder in a closed state. 160message FolderIcon { 161 // Number of items inside folder. 162 optional int32 cardinality = 1; 163 164 // State of the folder label before the event. 165 optional FromState from_label_state = 2; 166 167 // State of the folder label after the event. 168 optional ToState to_label_state = 3; 169 170 // Details about actual folder label. 171 // Populated when folder label is not a PII. 172 optional string label_info = 4; 173} 174 175////////////////////////////////////////////// 176// Containers 177 178message WorkspaceContainer { 179 optional int32 page_index = 1 [default = -2]; // range [-1, l], 0 is the index of the main homescreen 180 optional int32 grid_x = 2 [default = -1]; // [0, m], m varies based on the display density and resolution 181 optional int32 grid_y = 3 [default = -1]; // [0, n], n varies based on the display density and resolution 182} 183 184message HotseatContainer { 185 optional int32 index = 1; 186} 187 188// Represents hotseat container with prediction feature enabled. 189message PredictedHotseatContainer { 190 optional int32 index = 1; 191 192 // No of hotseat positions filled with predicted items. 193 optional int32 cardinality = 2; 194} 195 196message FolderContainer { 197 optional int32 page_index = 1 [default = -1]; 198 optional int32 grid_x = 2 [default = -1]; 199 optional int32 grid_y = 3 [default = -1]; 200 oneof ParentContainer { 201 WorkspaceContainer workspace = 4; 202 HotseatContainer hotseat = 5; 203 } 204} 205 206// Represents state of EditText field before update. 207enum FromState { 208 // Default value. 209 // Used when a FromState is not applicable, for example, during folder creation. 210 FROM_STATE_UNSPECIFIED = 0; 211 212 // EditText was empty. 213 // Eg: When a folder label is updated from empty string. 214 FROM_EMPTY = 1; 215 216 // EditText was non-empty and manually entered by the user. 217 // Eg: When a folder label is updated from a user-entered value. 218 FROM_CUSTOM = 2; 219 220 // EditText was non-empty and one of the suggestions. 221 // Eg: When a folder label is updated from a suggested value. 222 FROM_SUGGESTED = 3; 223} 224 225// Represents state of EditText field after update. 226enum ToState { 227 // Default value. 228 // Used when ToState is not applicable, for example, when folder label is updated to a different 229 // value when folder label suggestion feature is disabled. 230 TO_STATE_UNSPECIFIED = 0; 231 232 // User attempted to change the EditText, but was not changed. 233 UNCHANGED = 1; 234 235 // New label matches with primary(aka top) suggestion. 236 TO_SUGGESTION0 = 2; 237 238 // New value matches with second top suggestion even though the top suggestion was non-empty. 239 TO_SUGGESTION1_WITH_VALID_PRIMARY = 3; 240 241 // New value matches with second top suggestion given that top suggestion was empty. 242 TO_SUGGESTION1_WITH_EMPTY_PRIMARY = 4; 243 244 // New value matches with third top suggestion even though the top suggestion was non-empty. 245 TO_SUGGESTION2_WITH_VALID_PRIMARY = 5; 246 247 // New value matches with third top suggestion given that top suggestion was empty. 248 TO_SUGGESTION2_WITH_EMPTY_PRIMARY = 6; 249 250 // New value matches with 4th top suggestion even though the top suggestion was non-empty. 251 TO_SUGGESTION3_WITH_VALID_PRIMARY = 7; 252 253 // New value matches with 4th top suggestion given that top suggestion was empty. 254 TO_SUGGESTION3_WITH_EMPTY_PRIMARY = 8; 255 256 // New value is empty even though the top suggestion was non-empty. 257 TO_EMPTY_WITH_VALID_PRIMARY = 9; 258 259 // New value is empty given that top suggestion was empty. 260 TO_EMPTY_WITH_VALID_SUGGESTIONS_AND_EMPTY_PRIMARY = 10; 261 262 // New value is empty given that no suggestions were provided. 263 TO_EMPTY_WITH_EMPTY_SUGGESTIONS = 11; 264 265 // New value is empty given that suggestions feature was disabled. 266 TO_EMPTY_WITH_SUGGESTIONS_DISABLED = 12; 267 268 // New value is non-empty and does not match with any of the suggestions even though the top suggestion was non-empty. 269 TO_CUSTOM_WITH_VALID_PRIMARY = 13; 270 271 // New value is non-empty and not match with any suggestions given that top suggestion was empty. 272 TO_CUSTOM_WITH_VALID_SUGGESTIONS_AND_EMPTY_PRIMARY = 14; 273 274 // New value is non-empty and also no suggestions were provided. 275 TO_CUSTOM_WITH_EMPTY_SUGGESTIONS = 15; 276 277 // New value is non-empty and also suggestions feature was disable. 278 TO_CUSTOM_WITH_SUGGESTIONS_DISABLED = 16; 279} 280