Loading protos/launcher_atom.proto +12 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,7 @@ message ContainerInfo { SettingsContainer settings_container = 9; PredictedHotseatContainer predicted_hotseat_container = 10; TaskSwitcherContainer task_switcher_container = 11; TaskBarContainer task_bar_container = 12; ExtendedContainers extended_containers = 20; } } Loading Loading @@ -100,6 +101,16 @@ message SettingsContainer { message TaskSwitcherContainer { } // Container for taskbar. // Configured to show up on large screens(tablet-sized) such as foldables in expanded state, within // an app view(not in launcher screen). message TaskBarContainer { optional int32 index = 1; // Bit encoded value to capture pinned and predicted taskbar positions. optional int32 cardinality = 2; } enum Attribute { UNKNOWN = 0; DEFAULT_LAYOUT = 1; // icon automatically placed in workspace, folder, hotseat Loading Loading @@ -230,6 +241,7 @@ message FolderContainer { oneof ParentContainer { WorkspaceContainer workspace = 4; HotseatContainer hotseat = 5; TaskBarContainer taskbar = 6; } } Loading quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java +16 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.launcher3.taskbar; import static com.android.launcher3.LauncherState.HOTSEAT_ICONS; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_LONGPRESS_HIDE; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_LONGPRESS_SHOW; import static com.android.launcher3.taskbar.TaskbarStashController.FLAG_IN_APP; import static com.android.launcher3.taskbar.TaskbarViewController.ALPHA_INDEX_HOME; Loading @@ -36,7 +38,10 @@ import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.anim.AnimatorListeners; import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.logging.InstanceId; import com.android.launcher3.logging.InstanceIdSequence; import com.android.launcher3.model.data.ItemInfoWithIcon; import com.android.launcher3.model.data.WorkspaceItemInfo; import com.android.launcher3.util.MultiValueAlpha; import com.android.launcher3.util.MultiValueAlpha.AlphaProperty; import com.android.launcher3.util.OnboardingPrefs; Loading Loading @@ -262,6 +267,11 @@ public class LauncherTaskbarUIController extends TaskbarUIController { @Override protected void onStashedInAppChanged() { onStashedInAppChanged(mLauncher.getDeviceProfile()); if (mControllers.taskbarStashController.isStashedInApp()) { mContext.getStatsLogManager().logger().log(LAUNCHER_TASKBAR_LONGPRESS_HIDE); } else { mContext.getStatsLogManager().logger().log(LAUNCHER_TASKBAR_LONGPRESS_SHOW); } } private void onStashedInAppChanged(DeviceProfile deviceProfile) { Loading Loading @@ -306,6 +316,12 @@ public class LauncherTaskbarUIController extends TaskbarUIController { mControllers.taskbarEduController.hideEdu(); } @Override public void onTaskbarIconLaunched(WorkspaceItemInfo item) { InstanceId instanceId = new InstanceIdSequence().newInstanceId(); mLauncher.logAppLaunch(mContext.getStatsLogManager(), item, instanceId); } private final class TaskBarRecentsAnimationListener implements RecentsAnimationListener { private final RecentsAnimationCallbacks mCallbacks; Loading quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java +59 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_FOLDER_OPEN; import static com.android.systemui.shared.system.WindowManagerWrapper.ITYPE_BOTTOM_TAPPABLE_ELEMENT; import static com.android.systemui.shared.system.WindowManagerWrapper.ITYPE_EXTRA_NAVIGATION_BAR; Loading Loading @@ -52,6 +53,7 @@ import com.android.launcher3.LauncherSettings.Favorites; import com.android.launcher3.R; import com.android.launcher3.folder.Folder; import com.android.launcher3.folder.FolderIcon; import com.android.launcher3.logger.LauncherAtom; import com.android.launcher3.model.data.FolderInfo; import com.android.launcher3.model.data.WorkspaceItemInfo; import com.android.launcher3.taskbar.contextual.RotationButtonController; Loading Loading @@ -231,6 +233,60 @@ public class TaskbarActivityContext extends ContextThemeWrapper implements Activ return false; } /** * Change from hotseat/predicted hotseat to taskbar container. */ @Override public void applyOverwritesToLogItem(LauncherAtom.ItemInfo.Builder itemInfoBuilder) { if (!itemInfoBuilder.hasContainerInfo()) { return; } LauncherAtom.ContainerInfo oldContainer = itemInfoBuilder.getContainerInfo(); if (oldContainer.hasPredictedHotseatContainer()) { LauncherAtom.PredictedHotseatContainer predictedHotseat = oldContainer.getPredictedHotseatContainer(); LauncherAtom.TaskBarContainer.Builder taskbarBuilder = LauncherAtom.TaskBarContainer.newBuilder(); if (predictedHotseat.hasIndex()) { taskbarBuilder.setIndex(predictedHotseat.getIndex()); } if (predictedHotseat.hasCardinality()) { taskbarBuilder.setCardinality(predictedHotseat.getCardinality()); } itemInfoBuilder.setContainerInfo(LauncherAtom.ContainerInfo.newBuilder() .setTaskBarContainer(taskbarBuilder)); } else if (oldContainer.hasHotseat()) { LauncherAtom.HotseatContainer hotseat = oldContainer.getHotseat(); LauncherAtom.TaskBarContainer.Builder taskbarBuilder = LauncherAtom.TaskBarContainer.newBuilder(); if (hotseat.hasIndex()) { taskbarBuilder.setIndex(hotseat.getIndex()); } itemInfoBuilder.setContainerInfo(LauncherAtom.ContainerInfo.newBuilder() .setTaskBarContainer(taskbarBuilder)); } else if (oldContainer.hasFolder() && oldContainer.getFolder().hasHotseat()) { LauncherAtom.FolderContainer.Builder folderBuilder = oldContainer.getFolder() .toBuilder(); LauncherAtom.HotseatContainer hotseat = folderBuilder.getHotseat(); LauncherAtom.TaskBarContainer.Builder taskbarBuilder = LauncherAtom.TaskBarContainer.newBuilder(); if (hotseat.hasIndex()) { taskbarBuilder.setIndex(hotseat.getIndex()); } folderBuilder.setTaskbar(taskbarBuilder); folderBuilder.clearHotseat(); itemInfoBuilder.setContainerInfo(LauncherAtom.ContainerInfo.newBuilder() .setFolder(folderBuilder)); } } /** * Sets a new data-source for this taskbar instance */ Loading Loading @@ -328,6 +384,7 @@ public class TaskbarActivityContext extends ContextThemeWrapper implements Activ getDragLayer().post(() -> { folder.animateOpen(); getStatsLogManager().logger().withItemInfo(folder.mInfo).log(LAUNCHER_FOLDER_OPEN); folder.iterateOverItems((itemInfo, itemView) -> { mControllers.taskbarViewController Loading Loading @@ -365,6 +422,8 @@ public class TaskbarActivityContext extends ContextThemeWrapper implements Activ getSystemService(LauncherApps.class).startMainActivity( intent.getComponent(), info.user, intent.getSourceBounds(), null); } mControllers.uiController.onTaskbarIconLaunched(info); } catch (NullPointerException | ActivityNotFoundException | SecurityException e) { Toast.makeText(this, R.string.activity_not_found, Toast.LENGTH_SHORT) .show(); Loading quickstep/src/com/android/launcher3/taskbar/TaskbarDragController.java +15 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,8 @@ import android.view.View; import androidx.annotation.Nullable; import com.android.internal.logging.InstanceId; import com.android.internal.logging.InstanceIdSequence; import com.android.launcher3.AbstractFloatingView; import com.android.launcher3.BubbleTextView; import com.android.launcher3.DragSource; Loading @@ -48,6 +50,7 @@ import com.android.launcher3.dragndrop.DragView; import com.android.launcher3.dragndrop.DraggableView; import com.android.launcher3.graphics.DragPreviewProvider; import com.android.launcher3.icons.FastBitmapDrawable; import com.android.launcher3.logging.StatsLogManager; import com.android.launcher3.model.data.ItemInfo; import com.android.launcher3.model.data.WorkspaceItemInfo; import com.android.systemui.shared.recents.model.Task; Loading Loading @@ -284,10 +287,22 @@ public class TaskbarDragController extends DragController<TaskbarActivityContext } if (clipDescription != null && intent != null) { // Need to share the same InstanceId between launcher3 and WM Shell (internal). InstanceId internalInstanceId = new InstanceIdSequence( com.android.launcher3.logging.InstanceId.INSTANCE_ID_MAX).newInstanceId(); com.android.launcher3.logging.InstanceId launcherInstanceId = new com.android.launcher3.logging.InstanceId(internalInstanceId.getId()); intent.putExtra(ClipDescription.EXTRA_LOGGING_INSTANCE_ID, internalInstanceId); ClipData clipData = new ClipData(clipDescription, new ClipData.Item(intent)); if (btv.startDragAndDrop(clipData, shadowBuilder, null /* localState */, View.DRAG_FLAG_GLOBAL | View.DRAG_FLAG_OPAQUE)) { onSystemDragStarted(); mActivity.getStatsLogManager().logger().withItemInfo(mDragObject.dragInfo) .withInstanceId(launcherInstanceId) .log(StatsLogManager.LauncherEvent.LAUNCHER_ITEM_DRAG_STARTED); } } } Loading quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java +3 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.launcher3.taskbar; import android.graphics.Rect; import com.android.launcher3.model.data.ItemInfoWithIcon; import com.android.launcher3.model.data.WorkspaceItemInfo; import java.util.stream.Stream; Loading @@ -43,4 +44,6 @@ public class TaskbarUIController { public Stream<ItemInfoWithIcon> getAppIconsForEdu() { return Stream.empty(); } public void onTaskbarIconLaunched(WorkspaceItemInfo item) { } } Loading
protos/launcher_atom.proto +12 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,7 @@ message ContainerInfo { SettingsContainer settings_container = 9; PredictedHotseatContainer predicted_hotseat_container = 10; TaskSwitcherContainer task_switcher_container = 11; TaskBarContainer task_bar_container = 12; ExtendedContainers extended_containers = 20; } } Loading Loading @@ -100,6 +101,16 @@ message SettingsContainer { message TaskSwitcherContainer { } // Container for taskbar. // Configured to show up on large screens(tablet-sized) such as foldables in expanded state, within // an app view(not in launcher screen). message TaskBarContainer { optional int32 index = 1; // Bit encoded value to capture pinned and predicted taskbar positions. optional int32 cardinality = 2; } enum Attribute { UNKNOWN = 0; DEFAULT_LAYOUT = 1; // icon automatically placed in workspace, folder, hotseat Loading Loading @@ -230,6 +241,7 @@ message FolderContainer { oneof ParentContainer { WorkspaceContainer workspace = 4; HotseatContainer hotseat = 5; TaskBarContainer taskbar = 6; } } Loading
quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java +16 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.launcher3.taskbar; import static com.android.launcher3.LauncherState.HOTSEAT_ICONS; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_LONGPRESS_HIDE; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_LONGPRESS_SHOW; import static com.android.launcher3.taskbar.TaskbarStashController.FLAG_IN_APP; import static com.android.launcher3.taskbar.TaskbarViewController.ALPHA_INDEX_HOME; Loading @@ -36,7 +38,10 @@ import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.anim.AnimatorListeners; import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.logging.InstanceId; import com.android.launcher3.logging.InstanceIdSequence; import com.android.launcher3.model.data.ItemInfoWithIcon; import com.android.launcher3.model.data.WorkspaceItemInfo; import com.android.launcher3.util.MultiValueAlpha; import com.android.launcher3.util.MultiValueAlpha.AlphaProperty; import com.android.launcher3.util.OnboardingPrefs; Loading Loading @@ -262,6 +267,11 @@ public class LauncherTaskbarUIController extends TaskbarUIController { @Override protected void onStashedInAppChanged() { onStashedInAppChanged(mLauncher.getDeviceProfile()); if (mControllers.taskbarStashController.isStashedInApp()) { mContext.getStatsLogManager().logger().log(LAUNCHER_TASKBAR_LONGPRESS_HIDE); } else { mContext.getStatsLogManager().logger().log(LAUNCHER_TASKBAR_LONGPRESS_SHOW); } } private void onStashedInAppChanged(DeviceProfile deviceProfile) { Loading Loading @@ -306,6 +316,12 @@ public class LauncherTaskbarUIController extends TaskbarUIController { mControllers.taskbarEduController.hideEdu(); } @Override public void onTaskbarIconLaunched(WorkspaceItemInfo item) { InstanceId instanceId = new InstanceIdSequence().newInstanceId(); mLauncher.logAppLaunch(mContext.getStatsLogManager(), item, instanceId); } private final class TaskBarRecentsAnimationListener implements RecentsAnimationListener { private final RecentsAnimationCallbacks mCallbacks; Loading
quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java +59 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_FOLDER_OPEN; import static com.android.systemui.shared.system.WindowManagerWrapper.ITYPE_BOTTOM_TAPPABLE_ELEMENT; import static com.android.systemui.shared.system.WindowManagerWrapper.ITYPE_EXTRA_NAVIGATION_BAR; Loading Loading @@ -52,6 +53,7 @@ import com.android.launcher3.LauncherSettings.Favorites; import com.android.launcher3.R; import com.android.launcher3.folder.Folder; import com.android.launcher3.folder.FolderIcon; import com.android.launcher3.logger.LauncherAtom; import com.android.launcher3.model.data.FolderInfo; import com.android.launcher3.model.data.WorkspaceItemInfo; import com.android.launcher3.taskbar.contextual.RotationButtonController; Loading Loading @@ -231,6 +233,60 @@ public class TaskbarActivityContext extends ContextThemeWrapper implements Activ return false; } /** * Change from hotseat/predicted hotseat to taskbar container. */ @Override public void applyOverwritesToLogItem(LauncherAtom.ItemInfo.Builder itemInfoBuilder) { if (!itemInfoBuilder.hasContainerInfo()) { return; } LauncherAtom.ContainerInfo oldContainer = itemInfoBuilder.getContainerInfo(); if (oldContainer.hasPredictedHotseatContainer()) { LauncherAtom.PredictedHotseatContainer predictedHotseat = oldContainer.getPredictedHotseatContainer(); LauncherAtom.TaskBarContainer.Builder taskbarBuilder = LauncherAtom.TaskBarContainer.newBuilder(); if (predictedHotseat.hasIndex()) { taskbarBuilder.setIndex(predictedHotseat.getIndex()); } if (predictedHotseat.hasCardinality()) { taskbarBuilder.setCardinality(predictedHotseat.getCardinality()); } itemInfoBuilder.setContainerInfo(LauncherAtom.ContainerInfo.newBuilder() .setTaskBarContainer(taskbarBuilder)); } else if (oldContainer.hasHotseat()) { LauncherAtom.HotseatContainer hotseat = oldContainer.getHotseat(); LauncherAtom.TaskBarContainer.Builder taskbarBuilder = LauncherAtom.TaskBarContainer.newBuilder(); if (hotseat.hasIndex()) { taskbarBuilder.setIndex(hotseat.getIndex()); } itemInfoBuilder.setContainerInfo(LauncherAtom.ContainerInfo.newBuilder() .setTaskBarContainer(taskbarBuilder)); } else if (oldContainer.hasFolder() && oldContainer.getFolder().hasHotseat()) { LauncherAtom.FolderContainer.Builder folderBuilder = oldContainer.getFolder() .toBuilder(); LauncherAtom.HotseatContainer hotseat = folderBuilder.getHotseat(); LauncherAtom.TaskBarContainer.Builder taskbarBuilder = LauncherAtom.TaskBarContainer.newBuilder(); if (hotseat.hasIndex()) { taskbarBuilder.setIndex(hotseat.getIndex()); } folderBuilder.setTaskbar(taskbarBuilder); folderBuilder.clearHotseat(); itemInfoBuilder.setContainerInfo(LauncherAtom.ContainerInfo.newBuilder() .setFolder(folderBuilder)); } } /** * Sets a new data-source for this taskbar instance */ Loading Loading @@ -328,6 +384,7 @@ public class TaskbarActivityContext extends ContextThemeWrapper implements Activ getDragLayer().post(() -> { folder.animateOpen(); getStatsLogManager().logger().withItemInfo(folder.mInfo).log(LAUNCHER_FOLDER_OPEN); folder.iterateOverItems((itemInfo, itemView) -> { mControllers.taskbarViewController Loading Loading @@ -365,6 +422,8 @@ public class TaskbarActivityContext extends ContextThemeWrapper implements Activ getSystemService(LauncherApps.class).startMainActivity( intent.getComponent(), info.user, intent.getSourceBounds(), null); } mControllers.uiController.onTaskbarIconLaunched(info); } catch (NullPointerException | ActivityNotFoundException | SecurityException e) { Toast.makeText(this, R.string.activity_not_found, Toast.LENGTH_SHORT) .show(); Loading
quickstep/src/com/android/launcher3/taskbar/TaskbarDragController.java +15 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,8 @@ import android.view.View; import androidx.annotation.Nullable; import com.android.internal.logging.InstanceId; import com.android.internal.logging.InstanceIdSequence; import com.android.launcher3.AbstractFloatingView; import com.android.launcher3.BubbleTextView; import com.android.launcher3.DragSource; Loading @@ -48,6 +50,7 @@ import com.android.launcher3.dragndrop.DragView; import com.android.launcher3.dragndrop.DraggableView; import com.android.launcher3.graphics.DragPreviewProvider; import com.android.launcher3.icons.FastBitmapDrawable; import com.android.launcher3.logging.StatsLogManager; import com.android.launcher3.model.data.ItemInfo; import com.android.launcher3.model.data.WorkspaceItemInfo; import com.android.systemui.shared.recents.model.Task; Loading Loading @@ -284,10 +287,22 @@ public class TaskbarDragController extends DragController<TaskbarActivityContext } if (clipDescription != null && intent != null) { // Need to share the same InstanceId between launcher3 and WM Shell (internal). InstanceId internalInstanceId = new InstanceIdSequence( com.android.launcher3.logging.InstanceId.INSTANCE_ID_MAX).newInstanceId(); com.android.launcher3.logging.InstanceId launcherInstanceId = new com.android.launcher3.logging.InstanceId(internalInstanceId.getId()); intent.putExtra(ClipDescription.EXTRA_LOGGING_INSTANCE_ID, internalInstanceId); ClipData clipData = new ClipData(clipDescription, new ClipData.Item(intent)); if (btv.startDragAndDrop(clipData, shadowBuilder, null /* localState */, View.DRAG_FLAG_GLOBAL | View.DRAG_FLAG_OPAQUE)) { onSystemDragStarted(); mActivity.getStatsLogManager().logger().withItemInfo(mDragObject.dragInfo) .withInstanceId(launcherInstanceId) .log(StatsLogManager.LauncherEvent.LAUNCHER_ITEM_DRAG_STARTED); } } } Loading
quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java +3 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.launcher3.taskbar; import android.graphics.Rect; import com.android.launcher3.model.data.ItemInfoWithIcon; import com.android.launcher3.model.data.WorkspaceItemInfo; import java.util.stream.Stream; Loading @@ -43,4 +44,6 @@ public class TaskbarUIController { public Stream<ItemInfoWithIcon> getAppIconsForEdu() { return Stream.empty(); } public void onTaskbarIconLaunched(WorkspaceItemInfo item) { } }