1726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song/* 2726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song * Copyright (C) 2016 The Android Open Source Project 3726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song * 4726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song * Licensed under the Apache License, Version 2.0 (the "License"); 5726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song * you may not use this file except in compliance with the License. 6726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song * You may obtain a copy of the License at 7726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song * 8726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song * http://www.apache.org/licenses/LICENSE-2.0 9726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song * 10726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song * Unless required by applicable law or agreed to in writing, software 11726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song * distributed under the License is distributed on an "AS IS" BASIS, 12726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song * See the License for the specific language governing permissions and 14726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song * limitations under the License. 15726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song */ 16726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Songsyntax = "proto2"; 17726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song 18726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Songoption java_package = "com.android.launcher3.userevent.nano"; 19726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Songoption java_outer_classname = "LauncherLogProto"; 20726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song 21726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Songpackage userevent; 22726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song 23726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Songmessage Target { 24726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song enum Type { 25726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song NONE = 0; 26726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song ITEM = 1; 27726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song CONTROL = 2; 28726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song CONTAINER = 3; 29726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song } 30726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song 31726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song optional Type type = 1; 32726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song 33726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song // For container type and item type 34726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song // Used mainly for ContainerType.FOLDER, ItemType.* 35ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song optional int32 page_index = 2; 36ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song optional int32 rank = 3; 37ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song optional int32 grid_x = 4; 38ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song optional int32 grid_y = 5; 39726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song 40726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song // For container types only 41ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song optional ContainerType container_type = 6; 42ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song optional int32 cardinality = 7; 43726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song 44726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song // For control types only 45ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song optional ControlType control_type = 8; 46726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song 47726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song // For item types only 48ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song optional ItemType item_type = 9; 49ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song optional int32 package_name_hash = 10; 50ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song optional int32 component_hash = 11; // Used for ItemType.WIDGET 51ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song optional int32 intent_hash = 12; // Used for ItemType.SHORTCUT 52ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song optional int32 span_x = 13 [default = 1];// Used for ItemType.WIDGET 53ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song optional int32 span_y = 14 [default = 1];// Used for ItemType.WIDGET 54ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song optional int32 predictedRank = 15; 55726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song} 56726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song 57ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song// Used to define what type of item a Target would represent. 58726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Songenum ItemType { 59ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song DEFAULT_ITEMTYPE = 0; 60ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song APP_ICON = 1; 61ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song SHORTCUT = 2; 62ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song WIDGET = 3; 63ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song FOLDER_ICON = 4; 645aa2714959405043639cb2d0b8d9ab8c6eef0bd2Hyunyoung Song DEEPSHORTCUT = 5; 65ffad962092e2b42e336918c2f1e8f5ec48cc08a9Hyunyoung Song SEARCHBOX = 6; 66726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song} 67726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song 68ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song// Used to define what type of container a Target would represent. 69726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Songenum ContainerType { 70ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song DEFAULT_CONTAINERTYPE = 0; 71ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song WORKSPACE = 1; 72ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song HOTSEAT = 2; 73ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song FOLDER = 3; 74ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song ALLAPPS = 4; 75ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song WIDGETS = 5; 76ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song OVERVIEW = 6; 77ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song PREDICTION = 7; 78ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song SEARCHRESULT = 8; 795aa2714959405043639cb2d0b8d9ab8c6eef0bd2Hyunyoung Song DEEPSHORTCUTS = 9; 80726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song} 81726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song 82ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song// Used to define what type of control a Target would represent. 83726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Songenum ControlType { 84ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song DEFAULT_CONTROLTYPE = 0; 85ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song ALL_APPS_BUTTON = 1; 86ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song WIDGETS_BUTTON = 2; 87ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song WALLPAPER_BUTTON = 3; 88ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song SETTINGS_BUTTON = 4; 89ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song REMOVE_TARGET = 5; 90ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song UNINSTALL_TARGET = 6; 91ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song APPINFO_TARGET = 7; 92ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song RESIZE_HANDLE = 8; 93ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song VERTICAL_SCROLL = 9; 94726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song // HOME, BACK, GO_TO_PLAYSTORE 95726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song} 96726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song 97ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song// Used to define the action component of the LauncherEvent. 98726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Songmessage Action { 99726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song enum Type { 100726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song TOUCH = 0; 101726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song AUTOMATED = 1; 102726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song // SOFT_KEYBOARD, HARD_KEYBOARD, ASSIST 103726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song } 104726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song enum Touch { 105726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song TAP = 0; 106726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song LONGPRESS = 1; 107726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song DRAGDROP = 2; 108726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song SWIPE = 3; 109726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song FLING = 4; 110726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song PINCH = 5; 111726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song } 1125aa2714959405043639cb2d0b8d9ab8c6eef0bd2Hyunyoung Song enum Direction { 1135aa2714959405043639cb2d0b8d9ab8c6eef0bd2Hyunyoung Song NONE = 0; 1145aa2714959405043639cb2d0b8d9ab8c6eef0bd2Hyunyoung Song UP = 1; 1155aa2714959405043639cb2d0b8d9ab8c6eef0bd2Hyunyoung Song DOWN = 2; 1165aa2714959405043639cb2d0b8d9ab8c6eef0bd2Hyunyoung Song LEFT = 3; 1175aa2714959405043639cb2d0b8d9ab8c6eef0bd2Hyunyoung Song RIGHT = 4; 1185aa2714959405043639cb2d0b8d9ab8c6eef0bd2Hyunyoung Song } 119726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song optional Type type = 1; 120726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song optional Touch touch = 2; 1215aa2714959405043639cb2d0b8d9ab8c6eef0bd2Hyunyoung Song optional Direction dir = 3; 122726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song} 123726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song 124726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song// 125726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song// Context free grammar of typical user interaction: 126726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song// Action (Touch) + Target 127726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song// Action (Touch) + Target + Target 128726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song// 129726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Songmessage LauncherEvent { 130726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song 131726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song required Action action = 1; 132726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song 133726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song // List of targets that touch actions can be operated on. 134ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song repeated Target src_target = 2; 135ddec1c739ef37c3a042982b8943fe42e04b65f4cHyunyoung Song repeated Target dest_target = 3; 136726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song 137726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song optional int64 action_duration_millis = 4; 138726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song optional int64 elapsed_container_millis = 5; 139726eb822d38ad422f37b74c4b0fc504a423ab926Hyunyoung Song optional int64 elapsed_session_millis = 6; 1405aa2714959405043639cb2d0b8d9ab8c6eef0bd2Hyunyoung Song} 141