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