Loading quickstep/src/com/android/quickstep/TouchInteractionService.java +2 −1 Original line number Diff line number Diff line Loading @@ -523,7 +523,8 @@ public class TouchInteractionService extends Service { } protected void onOverviewTargetChange() { for (Runnable listener : mOnOverviewTargetChangeListeners) { Set<Runnable> listeners = new HashSet<>(mOnOverviewTargetChangeListeners); for (Runnable listener : listeners) { listener.run(); } } Loading quickstep/src/com/android/quickstep/fallback/window/RecentsWindowManager.kt +5 −0 Original line number Diff line number Diff line Loading @@ -36,11 +36,13 @@ import com.android.launcher3.BaseActivity import com.android.launcher3.LauncherAnimationRunner import com.android.launcher3.LauncherAnimationRunner.RemoteAnimationFactory import com.android.launcher3.R import com.android.launcher3.compat.AccessibilityManagerCompat import com.android.launcher3.statehandlers.DesktopVisibilityController import com.android.launcher3.statemanager.StateManager import com.android.launcher3.statemanager.StateManager.AtomicAnimationFactory import com.android.launcher3.statemanager.StatefulContainer import com.android.launcher3.taskbar.TaskbarUIController import com.android.launcher3.testing.shared.TestProtocol.OVERVIEW_STATE_ORDINAL import com.android.launcher3.util.ContextTracker import com.android.launcher3.util.DisplayController import com.android.launcher3.util.RunnableList Loading Loading @@ -355,6 +357,9 @@ class RecentsWindowManager(context: Context) : if (state == HOME || state == BG_LAUNCHER) { cleanupRecentsWindow() } if (state === DEFAULT) { AccessibilityManagerCompat.sendStateEventToTest(baseContext, OVERVIEW_STATE_ORDINAL) } } private fun getStateName(state: RecentsState?): String { Loading quickstep/src/com/android/quickstep/views/TaskView.kt +1 −0 Original line number Diff line number Diff line Loading @@ -1566,6 +1566,7 @@ constructor( } private fun onModalnessUpdated(modalness: Float) { isClickable = modalness == 0f taskContainers.forEach { it.iconView.setModalAlpha(1 - modalness) it.digitalWellBeingToast?.bannerOffsetPercentage = modalness Loading quickstep/tests/multivalentTests/src/com/android/launcher3/model/data/TaskViewItemInfoTest.kt +39 −9 Original line number Diff line number Diff line Loading @@ -17,14 +17,17 @@ package com.android.launcher3.model.data import android.content.ComponentName import android.content.Context import android.content.Intent import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.platform.app.InstrumentationRegistry import com.android.launcher3.Flags.enableRefactorTaskThumbnail import com.android.launcher3.model.data.ItemInfoWithIcon.FLAG_NOT_PINNABLE import com.android.launcher3.model.data.TaskViewItemInfo.Companion.createTaskViewAtom import com.android.launcher3.pm.UserCache import com.android.launcher3.util.MainThreadInitializedObject.SandboxContext import com.android.launcher3.util.SplitConfigurationOptions import com.android.launcher3.util.TransformingTouchDelegate import com.android.launcher3.util.UserIconInfo import com.android.quickstep.TaskOverlayFactory import com.android.quickstep.TaskOverlayFactory.TaskOverlay import com.android.quickstep.recents.di.RecentsDependencies Loading @@ -48,10 +51,12 @@ import org.mockito.kotlin.whenever /** Test for [TaskViewItemInfo] */ @RunWith(AndroidJUnit4::class) class TaskViewItemInfoTest { private val context = mock<Context>() private val context = SandboxContext(InstrumentationRegistry.getInstrumentation().targetContext) private val taskView = mock<TaskView>() private val recentsView = mock<RecentsView<*, *>>() private val overlayFactory = mock<TaskOverlayFactory>() private val userCache = mock<UserCache>() private val userInfo = mock<UserIconInfo>() @Before fun setUp() { Loading @@ -59,7 +64,10 @@ class TaskViewItemInfoTest { whenever(taskView.context).thenReturn(context) whenever(taskView.recentsView).thenReturn(recentsView) whenever(recentsView.indexOfChild(taskView)).thenReturn(TASK_VIEW_INDEX) RecentsDependencies.initialize(InstrumentationRegistry.getInstrumentation().targetContext) whenever(userInfo.isPrivate).thenReturn(false) whenever(userCache.getUserInfo(any())).thenReturn(userInfo) context.putObject(UserCache.INSTANCE, userCache) RecentsDependencies.initialize(context) } @Test Loading @@ -69,9 +77,8 @@ class TaskViewItemInfoTest { whenever(taskView.taskContainers).thenReturn(taskContainers) val taskViewItemInfo = TaskViewItemInfo(taskContainers[0]) val taskViewAtom = taskViewItemInfo.taskViewAtom assertThat(taskViewAtom) assertThat(taskViewItemInfo.taskViewAtom) .isEqualTo( createTaskViewAtom( type = 0, Loading @@ -80,6 +87,7 @@ class TaskViewItemInfoTest { cardinality = 1, ) ) assertThat(taskViewItemInfo.runtimeStatusFlags and FLAG_NOT_PINNABLE).isEqualTo(0) } @Test Loading @@ -90,9 +98,8 @@ class TaskViewItemInfoTest { whenever(taskView.taskContainers).thenReturn(taskContainers) val taskViewItemInfo = TaskViewItemInfo(taskContainers[0]) val taskViewAtom = taskViewItemInfo.taskViewAtom assertThat(taskViewAtom) assertThat(taskViewItemInfo.taskViewAtom) .isEqualTo( createTaskViewAtom( type = 1, Loading @@ -101,6 +108,7 @@ class TaskViewItemInfoTest { cardinality = 2, ) ) assertThat(taskViewItemInfo.runtimeStatusFlags and FLAG_NOT_PINNABLE).isEqualTo(0) } @Test Loading @@ -115,9 +123,8 @@ class TaskViewItemInfoTest { whenever(taskView.taskContainers).thenReturn(taskContainers) val taskViewItemInfo = TaskViewItemInfo(taskContainers[0]) val taskViewAtom = taskViewItemInfo.taskViewAtom assertThat(taskViewAtom) assertThat(taskViewItemInfo.taskViewAtom) .isEqualTo( createTaskViewAtom( type = 2, Loading @@ -126,6 +133,29 @@ class TaskViewItemInfoTest { cardinality = 3, ) ) assertThat(taskViewItemInfo.runtimeStatusFlags and FLAG_NOT_PINNABLE).isEqualTo(0) } @Test fun privateTask() { val taskContainers = listOf(createTaskContainer(createTask(1))) whenever(taskView.type).thenReturn(TaskViewType.SINGLE) whenever(taskView.taskContainers).thenReturn(taskContainers) whenever(userInfo.isPrivate).thenReturn(true) val taskViewItemInfo = TaskViewItemInfo(taskContainers[0]) assertThat(taskViewItemInfo.taskViewAtom) .isEqualTo( createTaskViewAtom( type = 0, index = TASK_VIEW_INDEX, componentName = "${PACKAGE}/${CLASS}", cardinality = 1, ) ) assertThat(taskViewItemInfo.runtimeStatusFlags and FLAG_NOT_PINNABLE) .isEqualTo(FLAG_NOT_PINNABLE) } private fun createTask(id: Int) = Loading src/com/android/launcher3/CellLayout.java +10 −0 Original line number Diff line number Diff line Loading @@ -71,6 +71,7 @@ import com.android.launcher3.model.data.ItemInfo; import com.android.launcher3.model.data.LauncherAppWidgetInfo; import com.android.launcher3.util.CellAndSpan; import com.android.launcher3.util.GridOccupancy; import com.android.launcher3.util.MSDLPlayerWrapper; import com.android.launcher3.util.MultiTranslateDelegate; import com.android.launcher3.util.ParcelableSparseArray; import com.android.launcher3.util.Themes; Loading @@ -78,6 +79,8 @@ import com.android.launcher3.util.Thunk; import com.android.launcher3.views.ActivityContext; import com.android.launcher3.widget.LauncherAppWidgetHostView; import com.google.android.msdl.data.model.MSDLToken; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; Loading Loading @@ -204,6 +207,8 @@ public class CellLayout extends ViewGroup { private static final Paint sPaint = new Paint(); private final MSDLPlayerWrapper mMSDLPlayerWrapper; // Related to accessible drag and drop DragAndDropAccessibilityDelegate mTouchHelper; Loading Loading @@ -237,6 +242,8 @@ public class CellLayout extends ViewGroup { mContainerType = a.getInteger(R.styleable.CellLayout_containerType, WORKSPACE); a.recycle(); mMSDLPlayerWrapper = MSDLPlayerWrapper.INSTANCE.get(context); // A ViewGroup usually does not draw, but CellLayout needs to draw a rectangle to show // the user where a dragged item will land when dropped. setWillNotDraw(false); Loading Loading @@ -1153,6 +1160,9 @@ public class CellLayout extends ViewGroup { DropTarget.DragObject dragObject) { if (mDragCell[0] != cellX || mDragCell[1] != cellY || mDragCellSpan[0] != spanX || mDragCellSpan[1] != spanY) { if (Flags.msdlFeedback()) { mMSDLPlayerWrapper.playToken(MSDLToken.DRAG_INDICATOR_DISCRETE); } mDragCell[0] = cellX; mDragCell[1] = cellY; mDragCellSpan[0] = spanX; Loading Loading
quickstep/src/com/android/quickstep/TouchInteractionService.java +2 −1 Original line number Diff line number Diff line Loading @@ -523,7 +523,8 @@ public class TouchInteractionService extends Service { } protected void onOverviewTargetChange() { for (Runnable listener : mOnOverviewTargetChangeListeners) { Set<Runnable> listeners = new HashSet<>(mOnOverviewTargetChangeListeners); for (Runnable listener : listeners) { listener.run(); } } Loading
quickstep/src/com/android/quickstep/fallback/window/RecentsWindowManager.kt +5 −0 Original line number Diff line number Diff line Loading @@ -36,11 +36,13 @@ import com.android.launcher3.BaseActivity import com.android.launcher3.LauncherAnimationRunner import com.android.launcher3.LauncherAnimationRunner.RemoteAnimationFactory import com.android.launcher3.R import com.android.launcher3.compat.AccessibilityManagerCompat import com.android.launcher3.statehandlers.DesktopVisibilityController import com.android.launcher3.statemanager.StateManager import com.android.launcher3.statemanager.StateManager.AtomicAnimationFactory import com.android.launcher3.statemanager.StatefulContainer import com.android.launcher3.taskbar.TaskbarUIController import com.android.launcher3.testing.shared.TestProtocol.OVERVIEW_STATE_ORDINAL import com.android.launcher3.util.ContextTracker import com.android.launcher3.util.DisplayController import com.android.launcher3.util.RunnableList Loading Loading @@ -355,6 +357,9 @@ class RecentsWindowManager(context: Context) : if (state == HOME || state == BG_LAUNCHER) { cleanupRecentsWindow() } if (state === DEFAULT) { AccessibilityManagerCompat.sendStateEventToTest(baseContext, OVERVIEW_STATE_ORDINAL) } } private fun getStateName(state: RecentsState?): String { Loading
quickstep/src/com/android/quickstep/views/TaskView.kt +1 −0 Original line number Diff line number Diff line Loading @@ -1566,6 +1566,7 @@ constructor( } private fun onModalnessUpdated(modalness: Float) { isClickable = modalness == 0f taskContainers.forEach { it.iconView.setModalAlpha(1 - modalness) it.digitalWellBeingToast?.bannerOffsetPercentage = modalness Loading
quickstep/tests/multivalentTests/src/com/android/launcher3/model/data/TaskViewItemInfoTest.kt +39 −9 Original line number Diff line number Diff line Loading @@ -17,14 +17,17 @@ package com.android.launcher3.model.data import android.content.ComponentName import android.content.Context import android.content.Intent import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.platform.app.InstrumentationRegistry import com.android.launcher3.Flags.enableRefactorTaskThumbnail import com.android.launcher3.model.data.ItemInfoWithIcon.FLAG_NOT_PINNABLE import com.android.launcher3.model.data.TaskViewItemInfo.Companion.createTaskViewAtom import com.android.launcher3.pm.UserCache import com.android.launcher3.util.MainThreadInitializedObject.SandboxContext import com.android.launcher3.util.SplitConfigurationOptions import com.android.launcher3.util.TransformingTouchDelegate import com.android.launcher3.util.UserIconInfo import com.android.quickstep.TaskOverlayFactory import com.android.quickstep.TaskOverlayFactory.TaskOverlay import com.android.quickstep.recents.di.RecentsDependencies Loading @@ -48,10 +51,12 @@ import org.mockito.kotlin.whenever /** Test for [TaskViewItemInfo] */ @RunWith(AndroidJUnit4::class) class TaskViewItemInfoTest { private val context = mock<Context>() private val context = SandboxContext(InstrumentationRegistry.getInstrumentation().targetContext) private val taskView = mock<TaskView>() private val recentsView = mock<RecentsView<*, *>>() private val overlayFactory = mock<TaskOverlayFactory>() private val userCache = mock<UserCache>() private val userInfo = mock<UserIconInfo>() @Before fun setUp() { Loading @@ -59,7 +64,10 @@ class TaskViewItemInfoTest { whenever(taskView.context).thenReturn(context) whenever(taskView.recentsView).thenReturn(recentsView) whenever(recentsView.indexOfChild(taskView)).thenReturn(TASK_VIEW_INDEX) RecentsDependencies.initialize(InstrumentationRegistry.getInstrumentation().targetContext) whenever(userInfo.isPrivate).thenReturn(false) whenever(userCache.getUserInfo(any())).thenReturn(userInfo) context.putObject(UserCache.INSTANCE, userCache) RecentsDependencies.initialize(context) } @Test Loading @@ -69,9 +77,8 @@ class TaskViewItemInfoTest { whenever(taskView.taskContainers).thenReturn(taskContainers) val taskViewItemInfo = TaskViewItemInfo(taskContainers[0]) val taskViewAtom = taskViewItemInfo.taskViewAtom assertThat(taskViewAtom) assertThat(taskViewItemInfo.taskViewAtom) .isEqualTo( createTaskViewAtom( type = 0, Loading @@ -80,6 +87,7 @@ class TaskViewItemInfoTest { cardinality = 1, ) ) assertThat(taskViewItemInfo.runtimeStatusFlags and FLAG_NOT_PINNABLE).isEqualTo(0) } @Test Loading @@ -90,9 +98,8 @@ class TaskViewItemInfoTest { whenever(taskView.taskContainers).thenReturn(taskContainers) val taskViewItemInfo = TaskViewItemInfo(taskContainers[0]) val taskViewAtom = taskViewItemInfo.taskViewAtom assertThat(taskViewAtom) assertThat(taskViewItemInfo.taskViewAtom) .isEqualTo( createTaskViewAtom( type = 1, Loading @@ -101,6 +108,7 @@ class TaskViewItemInfoTest { cardinality = 2, ) ) assertThat(taskViewItemInfo.runtimeStatusFlags and FLAG_NOT_PINNABLE).isEqualTo(0) } @Test Loading @@ -115,9 +123,8 @@ class TaskViewItemInfoTest { whenever(taskView.taskContainers).thenReturn(taskContainers) val taskViewItemInfo = TaskViewItemInfo(taskContainers[0]) val taskViewAtom = taskViewItemInfo.taskViewAtom assertThat(taskViewAtom) assertThat(taskViewItemInfo.taskViewAtom) .isEqualTo( createTaskViewAtom( type = 2, Loading @@ -126,6 +133,29 @@ class TaskViewItemInfoTest { cardinality = 3, ) ) assertThat(taskViewItemInfo.runtimeStatusFlags and FLAG_NOT_PINNABLE).isEqualTo(0) } @Test fun privateTask() { val taskContainers = listOf(createTaskContainer(createTask(1))) whenever(taskView.type).thenReturn(TaskViewType.SINGLE) whenever(taskView.taskContainers).thenReturn(taskContainers) whenever(userInfo.isPrivate).thenReturn(true) val taskViewItemInfo = TaskViewItemInfo(taskContainers[0]) assertThat(taskViewItemInfo.taskViewAtom) .isEqualTo( createTaskViewAtom( type = 0, index = TASK_VIEW_INDEX, componentName = "${PACKAGE}/${CLASS}", cardinality = 1, ) ) assertThat(taskViewItemInfo.runtimeStatusFlags and FLAG_NOT_PINNABLE) .isEqualTo(FLAG_NOT_PINNABLE) } private fun createTask(id: Int) = Loading
src/com/android/launcher3/CellLayout.java +10 −0 Original line number Diff line number Diff line Loading @@ -71,6 +71,7 @@ import com.android.launcher3.model.data.ItemInfo; import com.android.launcher3.model.data.LauncherAppWidgetInfo; import com.android.launcher3.util.CellAndSpan; import com.android.launcher3.util.GridOccupancy; import com.android.launcher3.util.MSDLPlayerWrapper; import com.android.launcher3.util.MultiTranslateDelegate; import com.android.launcher3.util.ParcelableSparseArray; import com.android.launcher3.util.Themes; Loading @@ -78,6 +79,8 @@ import com.android.launcher3.util.Thunk; import com.android.launcher3.views.ActivityContext; import com.android.launcher3.widget.LauncherAppWidgetHostView; import com.google.android.msdl.data.model.MSDLToken; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; Loading Loading @@ -204,6 +207,8 @@ public class CellLayout extends ViewGroup { private static final Paint sPaint = new Paint(); private final MSDLPlayerWrapper mMSDLPlayerWrapper; // Related to accessible drag and drop DragAndDropAccessibilityDelegate mTouchHelper; Loading Loading @@ -237,6 +242,8 @@ public class CellLayout extends ViewGroup { mContainerType = a.getInteger(R.styleable.CellLayout_containerType, WORKSPACE); a.recycle(); mMSDLPlayerWrapper = MSDLPlayerWrapper.INSTANCE.get(context); // A ViewGroup usually does not draw, but CellLayout needs to draw a rectangle to show // the user where a dragged item will land when dropped. setWillNotDraw(false); Loading Loading @@ -1153,6 +1160,9 @@ public class CellLayout extends ViewGroup { DropTarget.DragObject dragObject) { if (mDragCell[0] != cellX || mDragCell[1] != cellY || mDragCellSpan[0] != spanX || mDragCellSpan[1] != spanY) { if (Flags.msdlFeedback()) { mMSDLPlayerWrapper.playToken(MSDLToken.DRAG_INDICATOR_DISCRETE); } mDragCell[0] = cellX; mDragCell[1] = cellY; mDragCellSpan[0] = spanX; Loading