diff options
-rw-r--r-- | protos/launcher_atom.proto | 6 | ||||
-rw-r--r-- | quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java | 34 | ||||
-rw-r--r-- | src/com/android/launcher3/logging/StatsLogManager.java | 33 |
3 files changed, 70 insertions, 3 deletions
diff --git a/protos/launcher_atom.proto b/protos/launcher_atom.proto index dc9f8dd3fa..fe81b4cbeb 100644 --- a/protos/launcher_atom.proto +++ b/protos/launcher_atom.proto @@ -29,6 +29,7 @@ message ItemInfo { Shortcut shortcut = 3; Widget widget = 4; FolderIcon folder_icon = 9; + Slice slice = 10; SearchActionItem search_action_item = 11; } // When used for launch event, stores the global predictive rank @@ -170,6 +171,11 @@ message FolderIcon { optional string label_info = 4; } +// Contains Slice details for logging. +message Slice{ + optional string uri = 1; +} + // Represents SearchAction with in launcher message SearchActionItem{ optional string package_name = 1; diff --git a/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java b/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java index 4f211d7f2f..a762cb7d92 100644 --- a/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java +++ b/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java @@ -16,6 +16,9 @@ package com.android.quickstep.logging; +import static androidx.core.util.Preconditions.checkNotNull; +import static androidx.core.util.Preconditions.checkState; + import static com.android.launcher3.logger.LauncherAtom.ContainerInfo.ContainerCase.EXTENDED_CONTAINERS; import static com.android.launcher3.logger.LauncherAtom.ContainerInfo.ContainerCase.FOLDER; import static com.android.launcher3.logger.LauncherAtom.ContainerInfo.ContainerCase.SEARCH_RESULT_CONTAINER; @@ -29,7 +32,9 @@ import static com.android.systemui.shared.system.SysUiStatsLog.LAUNCHER_UICHANGE import android.content.Context; import android.util.Log; +import androidx.annotation.NonNull; import androidx.annotation.WorkerThread; +import androidx.slice.SliceItem; import com.android.launcher3.LauncherAppState; import com.android.launcher3.Utilities; @@ -140,6 +145,7 @@ public class StatsLogCompatManager extends StatsLogManager { private Optional<FromState> mFromState = Optional.empty(); private Optional<ToState> mToState = Optional.empty(); private Optional<String> mEditText = Optional.empty(); + private SliceItem mSliceItem; @Override public StatsLogger withItemInfo(ItemInfo itemInfo) { @@ -177,10 +183,8 @@ public class StatsLogCompatManager extends StatsLogManager { @Override public StatsLogger withContainerInfo(ContainerInfo containerInfo) { - if (mItemInfo != DEFAULT_ITEM_INFO) { - throw new IllegalArgumentException( + checkState(mItemInfo == DEFAULT_ITEM_INFO, "ItemInfo and ContainerInfo are mutual exclusive; cannot log both."); - } this.mContainerInfo = Optional.of(containerInfo); return this; } @@ -204,12 +208,34 @@ public class StatsLogCompatManager extends StatsLogManager { } @Override + public StatsLogger withSliceItem(@NonNull SliceItem sliceItem) { + this.mSliceItem = checkNotNull(sliceItem, "expected valid sliceItem but received null"); + checkState(mItemInfo == DEFAULT_ITEM_INFO, + "ItemInfo and SliceItem are mutual exclusive; cannot log both."); + return this; + } + + @Override public void log(EventEnum event) { if (!Utilities.ATLEAST_R) { return; } LauncherAppState appState = LauncherAppState.getInstanceNoCreate(); + + if (mSliceItem != null) { + Executors.MODEL_EXECUTOR.execute( + () -> { + LauncherAtom.ItemInfo.Builder itemInfoBuilder = + LauncherAtom.ItemInfo.newBuilder().setSlice( + LauncherAtom.Slice.newBuilder().setUri( + mSliceItem.getSlice().getUri().toString())); + mContainerInfo.ifPresent(itemInfoBuilder::setContainerInfo); + write(event, applyOverwrites(itemInfoBuilder.build())); + }); + return; + } + if (mItemInfo.container < 0 || appState == null) { // Write log on the model thread so that logs do not go out of order // (for eg: drop comes after drag) @@ -346,6 +372,8 @@ public class StatsLogCompatManager extends StatsLogManager { return info.getTask().getComponentName(); case SEARCH_ACTION_ITEM: return info.getSearchActionItem().getTitle(); + case SLICE: + return info.getSlice().getUri(); default: return null; } diff --git a/src/com/android/launcher3/logging/StatsLogManager.java b/src/com/android/launcher3/logging/StatsLogManager.java index 0802f8a574..bf420d9766 100644 --- a/src/com/android/launcher3/logging/StatsLogManager.java +++ b/src/com/android/launcher3/logging/StatsLogManager.java @@ -23,6 +23,7 @@ import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCH import android.content.Context; import androidx.annotation.Nullable; +import androidx.slice.SliceItem; import com.android.launcher3.R; import com.android.launcher3.logger.LauncherAtom.ContainerInfo; @@ -366,6 +367,31 @@ public class StatsLogManager implements ResourceBasedOverride { @UiEvent(doc = "User switched to Work tab in AllApps screen.") LAUNCHER_ALLAPPS_SWITCHED_TO_WORK_TAB(696), + + @UiEvent(doc = "Default event when dedicated UI event is not available for the user action" + + " on slice .") + LAUNCHER_SLICE_DEFAULT_ACTION(700), + + @UiEvent(doc = "User toggled-on a Slice item.") + LAUNCHER_SLICE_TOGGLE_ON(701), + + @UiEvent(doc = "User toggled-off a Slice item.") + LAUNCHER_SLICE_TOGGLE_OFF(702), + + @UiEvent(doc = "User acted on a Slice item with a button.") + LAUNCHER_SLICE_BUTTON_ACTION(703), + + @UiEvent(doc = "User acted on a Slice item with a slider.") + LAUNCHER_SLICE_SLIDER_ACTION(704), + + @UiEvent(doc = "User tapped on the entire row of a Slice.") + LAUNCHER_SLICE_CONTENT_ACTION(705), + + @UiEvent(doc = "User tapped on the see more button of a Slice.") + LAUNCHER_SLICE_SEE_MORE_ACTION(706), + + @UiEvent(doc = "User selected from a selection row of Slice.") + LAUNCHER_SLICE_SELECTION_ACTION(707), ; // ADD MORE @@ -473,6 +499,13 @@ public class StatsLogManager implements ResourceBasedOverride { } /** + * Sets logging fields from provided {@link SliceItem}. + */ + default StatsLogger withSliceItem(SliceItem sliceItem) { + return this; + } + + /** * Builds the final message and logs it as {@link EventEnum}. */ default void log(EventEnum event) { |