summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorthiruram <thiruram@google.com>2020-04-15 10:22:28 -0700
committerthiruram <thiruram@google.com>2020-04-30 15:03:43 -0700
commitf81e8b002a4e7242795718b5fc6061173e98af33 (patch)
treeb815c545796419a633e8eaa4f0ba2c76cdd4ae62
parent28ad91b01bf1774a5d1288177b3dfbcb8a2ee186 (diff)
downloadLauncher3-f81e8b002a4e7242795718b5fc6061173e98af33.tar.gz
Implement LAUNCHER_ITEM_DRAG_STARTED event.
* Fixes null component issue when ItemInfo object copiedFrom. * Fixes missing container when item is dragged from hybrid hotseat. Sample Logs: 2020-04-30 14:09:45.499 30472-30472/com.google.android.apps.nexuslauncher D/StatsLogManager: LAUNCHER_ITEM_DRAG_STARTED # com.android.launcher3.logger.LauncherAtom$ItemInfo@260f31f8 application { component_name: "com.android.chrome/com.google.android.apps.chrome.Main" package_name: "com.android.chrome" } container_info { workspace { grid_x: 2 grid_y: 2 page_index: 2 } } is_work: false 2020-04-30 14:23:15.230 31320-31320/com.google.android.apps.nexuslauncher D/StatsLogManager: LAUNCHER_ITEM_DRAG_STARTED # com.android.launcher3.logger.LauncherAtom$ItemInfo@608f101 application { component_name: "com.google.android.gm/.ConversationListActivityGmail" package_name: "com.google.android.gm" } container_info { hotseat { index: 1 } } is_work: false Bug: 152978018 Change-Id: I3d3ce213fd2fc6eb5ffb239e048ceb7c0fa88b53
-rw-r--r--protos/launcher_atom.proto2
-rw-r--r--quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java11
-rw-r--r--src/com/android/launcher3/BaseDraggingActivity.java2
-rw-r--r--src/com/android/launcher3/Workspace.java6
-rw-r--r--src/com/android/launcher3/logging/StatsLogManager.java19
-rw-r--r--src/com/android/launcher3/model/data/ItemInfo.java20
6 files changed, 40 insertions, 20 deletions
diff --git a/protos/launcher_atom.proto b/protos/launcher_atom.proto
index f0ecba39e8..036fb02243 100644
--- a/protos/launcher_atom.proto
+++ b/protos/launcher_atom.proto
@@ -25,7 +25,7 @@ message ItemInfo {
Application application = 1;
Task task = 2;
Shortcut shortcut = 3;
- Widget widget = 4;
+ Widget widget = 4;
}
// When used for launch event, stores the global predictive rank
optional int32 rank = 5;
diff --git a/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java b/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java
index ac2200dcc4..2d51732e54 100644
--- a/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java
+++ b/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java
@@ -57,11 +57,6 @@ public class StatsLogCompatManager extends StatsLogManager {
}
@Override
- public void log(LauncherEvent eventId, LauncherAtom.ItemInfo item) {
- // Call StatsLog method
- }
-
- @Override
public void verify() {
if (!(StatsLogUtils.LAUNCHER_STATE_ALLAPPS == ALLAPPS
&& StatsLogUtils.LAUNCHER_STATE_BACKGROUND == BACKGROUND
@@ -88,17 +83,17 @@ public class StatsLogCompatManager extends StatsLogManager {
ArrayList<LauncherAppWidgetInfo> appWidgets = (ArrayList) dataModel.appWidgets.clone();
for (ItemInfo info : workspaceItems) {
- LauncherAtom.ItemInfo atomInfo = info.buildProto(null, null);
+ LauncherAtom.ItemInfo atomInfo = info.buildProto(null);
// call StatsLog method
}
for (FolderInfo fInfo : folders) {
for (ItemInfo info : fInfo.contents) {
- LauncherAtom.ItemInfo atomInfo = info.buildProto(null, fInfo);
+ LauncherAtom.ItemInfo atomInfo = info.buildProto(fInfo);
// call StatsLog method
}
}
for (ItemInfo info : appWidgets) {
- LauncherAtom.ItemInfo atomInfo = info.buildProto(null, null);
+ LauncherAtom.ItemInfo atomInfo = info.buildProto(null);
// call StatsLog method
}
}
diff --git a/src/com/android/launcher3/BaseDraggingActivity.java b/src/com/android/launcher3/BaseDraggingActivity.java
index db69341b4f..09fe64a89b 100644
--- a/src/com/android/launcher3/BaseDraggingActivity.java
+++ b/src/com/android/launcher3/BaseDraggingActivity.java
@@ -185,7 +185,7 @@ public abstract class BaseDraggingActivity extends BaseActivity
getUserEventDispatcher().logAppLaunch(v, intent, user);
getStatsLogManager().log(APP_LAUNCH_TAP, item == null ? null
- : item.buildProto(null, null));
+ : item.buildProto(null));
return true;
} catch (NullPointerException|ActivityNotFoundException|SecurityException e) {
Toast.makeText(this, R.string.activity_not_found, Toast.LENGTH_SHORT).show();
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index 10c05d315b..2111162a31 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -79,6 +79,8 @@ import com.android.launcher3.folder.PreviewBackground;
import com.android.launcher3.graphics.DragPreviewProvider;
import com.android.launcher3.graphics.PreloadIconDrawable;
import com.android.launcher3.icons.BitmapRenderer;
+import com.android.launcher3.logging.StatsLogManager;
+import com.android.launcher3.logging.StatsLogManager.LauncherEvent;
import com.android.launcher3.logging.UserEventDispatcher;
import com.android.launcher3.model.data.AppInfo;
import com.android.launcher3.model.data.FolderInfo;
@@ -409,6 +411,10 @@ public class Workspace extends PagedView<WorkspacePageIndicator>
// Always enter the spring loaded mode
mLauncher.getStateManager().goToState(SPRING_LOADED);
+ StatsLogManager.newInstance(getContext())
+ .log(
+ LauncherEvent.LAUNCHER_ITEM_DRAG_STARTED,
+ dragObject.originalDragInfo.buildProto(null));
}
public void deferRemoveExtraEmptyScreen() {
diff --git a/src/com/android/launcher3/logging/StatsLogManager.java b/src/com/android/launcher3/logging/StatsLogManager.java
index 2829951da2..05dd473ea7 100644
--- a/src/com/android/launcher3/logging/StatsLogManager.java
+++ b/src/com/android/launcher3/logging/StatsLogManager.java
@@ -16,6 +16,7 @@
package com.android.launcher3.logging;
import android.content.Context;
+import android.util.Log;
import com.android.launcher3.R;
import com.android.launcher3.logger.LauncherAtom;
@@ -28,6 +29,8 @@ import com.android.launcher3.util.ResourceBasedOverride;
*/
public class StatsLogManager implements ResourceBasedOverride {
+ private static final String TAG = "StatsLogManager";
+
interface EventEnum {
int getId();
}
@@ -40,7 +43,9 @@ public class StatsLogManager implements ResourceBasedOverride {
@LauncherUiEvent(doc = "Task launched from overview using SWIPE DOWN")
TASK_LAUNCH_SWIPE_DOWN(2),
@LauncherUiEvent(doc = "TASK dismissed from overview using SWIPE UP")
- TASK_DISMISS_SWIPE_UP(3);
+ TASK_DISMISS_SWIPE_UP(3),
+ @LauncherUiEvent(doc = "User dragged a launcher item")
+ LAUNCHER_ITEM_DRAG_STARTED(383);
// ADD MORE
private final int mId;
@@ -54,6 +59,13 @@ public class StatsLogManager implements ResourceBasedOverride {
protected LogStateProvider mStateProvider;
+ /**
+ * Creates a new instance of {@link StatsLogManager} based on provided context.
+ */
+ public static StatsLogManager newInstance(Context context) {
+ return newInstance(context, null);
+ }
+
public static StatsLogManager newInstance(Context context, LogStateProvider stateProvider) {
StatsLogManager mgr = Overrides.getObject(StatsLogManager.class,
context.getApplicationContext(), R.string.stats_log_manager_class);
@@ -65,7 +77,10 @@ public class StatsLogManager implements ResourceBasedOverride {
/**
* Logs an event and accompanying {@link ItemInfo}
*/
- public void log(LauncherEvent eventId, LauncherAtom.ItemInfo itemInfo) { }
+ public void log(LauncherEvent event, LauncherAtom.ItemInfo itemInfo) {
+ Log.d(TAG, String.format("%s\n%s", event.name(), itemInfo));
+ // Call StatsLog method
+ }
/**
* Logs snapshot, or impression of the current workspace.
diff --git a/src/com/android/launcher3/model/data/ItemInfo.java b/src/com/android/launcher3/model/data/ItemInfo.java
index 7ee2090c13..14f9934314 100644
--- a/src/com/android/launcher3/model/data/ItemInfo.java
+++ b/src/com/android/launcher3/model/data/ItemInfo.java
@@ -18,6 +18,7 @@ package com.android.launcher3.model.data;
import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_DESKTOP;
import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_HOTSEAT;
+import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_HOTSEAT_PREDICTION;
import static com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE_APPLICATION;
import static com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET;
import static com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE_DEEP_SHORTCUT;
@@ -123,6 +124,12 @@ public class ItemInfo {
*/
public CharSequence contentDescription;
+ /**
+ * When the instance is created using {@link #copyFrom}, this field is used to keep track of
+ * original {@link ComponentName}.
+ */
+ private ComponentName mComponentName;
+
public UserHandle user;
public ItemInfo() {
@@ -145,6 +152,7 @@ public class ItemInfo {
container = info.container;
user = info.user;
contentDescription = info.contentDescription;
+ mComponentName = info.getTargetComponent();
}
public Intent getIntent() {
@@ -153,12 +161,7 @@ public class ItemInfo {
@Nullable
public ComponentName getTargetComponent() {
- Intent intent = getIntent();
- if (intent != null) {
- return intent.getComponent();
- } else {
- return null;
- }
+ return Optional.ofNullable(getIntent()).map(Intent::getComponent).orElse(mComponentName);
}
public void writeToValues(ContentWriter writer) {
@@ -247,8 +250,7 @@ public class ItemInfo {
/**
* Creates {@link LauncherAtom.ItemInfo} with important fields and parent container info.
*/
- public LauncherAtom.ItemInfo buildProto(Intent intent, FolderInfo fInfo) {
-
+ public LauncherAtom.ItemInfo buildProto(FolderInfo fInfo) {
LauncherAtom.ItemInfo.Builder itemBuilder = LauncherAtom.ItemInfo.newBuilder();
itemBuilder.setIsWork(user != Process.myUserHandle());
Optional<ComponentName> nullableComponent = Optional.ofNullable(getTargetComponent());
@@ -282,6 +284,7 @@ public class ItemInfo {
switch (fInfo.container) {
case CONTAINER_HOTSEAT:
+ case CONTAINER_HOTSEAT_PREDICTION:
folderBuilder.setHotseat(LauncherAtom.HotseatContainer.newBuilder()
.setIndex(fInfo.screenId));
break;
@@ -295,6 +298,7 @@ public class ItemInfo {
} else {
switch (container) {
case CONTAINER_HOTSEAT:
+ case CONTAINER_HOTSEAT_PREDICTION:
itemBuilder.setContainerInfo(
ContainerInfo.newBuilder().setHotseat(
LauncherAtom.HotseatContainer.newBuilder().setIndex(screenId)));