diff options
5 files changed, 49 insertions, 13 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragAndDropEventLogger.java b/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragAndDropEventLogger.java index 6e4b81563441..2a7dd5aeb341 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragAndDropEventLogger.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragAndDropEventLogger.java @@ -25,6 +25,8 @@ import android.content.ClipDescription;  import android.content.pm.ActivityInfo;  import android.view.DragEvent; +import androidx.annotation.Nullable; +  import com.android.internal.logging.InstanceId;  import com.android.internal.logging.InstanceIdSequence;  import com.android.internal.logging.UiEvent; @@ -61,9 +63,7 @@ public class DragAndDropEventLogger {              mInstanceId = mIdSequence.newInstanceId();          }          mActivityInfo = item.getActivityInfo(); -        mUiEventLogger.logWithInstanceId(getStartEnum(description), -                mActivityInfo.applicationInfo.uid, -                mActivityInfo.applicationInfo.packageName, mInstanceId); +        log(getStartEnum(description), mActivityInfo);          return mInstanceId;      } @@ -71,18 +71,21 @@ public class DragAndDropEventLogger {       * Logs a successful drop.       */      public void logDrop() { -        mUiEventLogger.logWithInstanceId(DragAndDropUiEventEnum.GLOBAL_APP_DRAG_DROPPED, -                mActivityInfo.applicationInfo.uid, -                mActivityInfo.applicationInfo.packageName, mInstanceId); +        log(DragAndDropUiEventEnum.GLOBAL_APP_DRAG_DROPPED, mActivityInfo);      }      /**       * Logs the end of a drag.       */      public void logEnd() { -        mUiEventLogger.logWithInstanceId(DragAndDropUiEventEnum.GLOBAL_APP_DRAG_END, -                mActivityInfo.applicationInfo.uid, -                mActivityInfo.applicationInfo.packageName, mInstanceId); +        log(DragAndDropUiEventEnum.GLOBAL_APP_DRAG_END, mActivityInfo); +    } + +    private void log(UiEventLogger.UiEventEnum event, @Nullable ActivityInfo activityInfo) { +        mUiEventLogger.logWithInstanceId(event, +                activityInfo == null ? 0 : activityInfo.applicationInfo.uid, +                activityInfo == null ? null : activityInfo.applicationInfo.packageName, +                mInstanceId);      }      /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java index ccd4843e9ac6..1bbd45192bea 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java @@ -1760,7 +1760,9 @@ public class ExpandableNotificationRow extends ActivatableNotificationView       * Called when a notification is dropped on proper target window.       */      public void dragAndDropSuccess() { -        mOnDragSuccessListener.onDragSuccess(getEntry()); +        if (mOnDragSuccessListener != null) { +            mOnDragSuccessListener.onDragSuccess(getEntry()); +        }      }      private void doLongClickCallback() { diff --git a/services/core/java/com/android/server/wm/TaskDisplayArea.java b/services/core/java/com/android/server/wm/TaskDisplayArea.java index f5e7967de410..662b3d578b30 100644 --- a/services/core/java/com/android/server/wm/TaskDisplayArea.java +++ b/services/core/java/com/android/server/wm/TaskDisplayArea.java @@ -148,7 +148,8 @@ final class TaskDisplayArea extends DisplayArea<WindowContainer> {      /**       * A launch root task for activity launching with {@link FLAG_ACTIVITY_LAUNCH_ADJACENT} flag.       */ -    private Task mLaunchAdjacentFlagRootTask; +    @VisibleForTesting +    Task mLaunchAdjacentFlagRootTask;      /**       * A focusable root task that is purposely to be positioned at the top. Although the root diff --git a/services/core/java/com/android/server/wm/WindowOrganizerController.java b/services/core/java/com/android/server/wm/WindowOrganizerController.java index 6e706e9df003..c69a734d2fe8 100644 --- a/services/core/java/com/android/server/wm/WindowOrganizerController.java +++ b/services/core/java/com/android/server/wm/WindowOrganizerController.java @@ -566,17 +566,17 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub              case HIERARCHY_OP_TYPE_SET_LAUNCH_ADJACENT_FLAG_ROOT: {                  final WindowContainer wc = WindowContainer.fromBinder(hop.getContainer());                  final Task task = wc != null ? wc.asTask() : null; +                final boolean clearRoot = hop.getToTop();                  if (task == null) {                      throw new IllegalArgumentException("Cannot set non-task as launch root: " + wc);                  } else if (!task.mCreatedByOrganizer) {                      throw new UnsupportedOperationException(                              "Cannot set non-organized task as adjacent flag root: " + wc); -                } else if (task.getAdjacentTaskFragment() == null) { +                } else if (task.getAdjacentTaskFragment() == null && !clearRoot) {                      throw new UnsupportedOperationException(                              "Cannot set non-adjacent task as adjacent flag root: " + wc);                  } -                final boolean clearRoot = hop.getToTop();                  task.getDisplayArea().setLaunchAdjacentFlagRootTask(clearRoot ? null : task);                  break;              } diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java index a482bdacfc82..1eed79f189a8 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java @@ -543,6 +543,36 @@ public class WindowOrganizerTests extends WindowTestsBase {      }      @Test +    public void testSetAdjacentLaunchRoot() { +        DisplayContent dc = mWm.mRoot.getDisplayContent(Display.DEFAULT_DISPLAY); + +        final Task task1 = mWm.mAtmService.mTaskOrganizerController.createRootTask( +                dc, WINDOWING_MODE_MULTI_WINDOW, null); +        final RunningTaskInfo info1 = task1.getTaskInfo(); +        final Task task2 = mWm.mAtmService.mTaskOrganizerController.createRootTask( +                dc, WINDOWING_MODE_MULTI_WINDOW, null); +        final RunningTaskInfo info2 = task2.getTaskInfo(); + +        WindowContainerTransaction wct = new WindowContainerTransaction(); +        wct.setAdjacentRoots(info1.token, info2.token); +        mWm.mAtmService.mWindowOrganizerController.applyTransaction(wct); +        assertEquals(task1.getAdjacentTaskFragment(), task2); +        assertEquals(task2.getAdjacentTaskFragment(), task1); + +        wct = new WindowContainerTransaction(); +        wct.setLaunchAdjacentFlagRoot(info1.token); +        mWm.mAtmService.mWindowOrganizerController.applyTransaction(wct); +        assertEquals(dc.getDefaultTaskDisplayArea().mLaunchAdjacentFlagRootTask, task1); + +        task1.setAdjacentTaskFragment(null); +        task2.setAdjacentTaskFragment(null); +        wct = new WindowContainerTransaction(); +        wct.clearLaunchAdjacentFlagRoot(info1.token); +        mWm.mAtmService.mWindowOrganizerController.applyTransaction(wct); +        assertEquals(dc.getDefaultTaskDisplayArea().mLaunchAdjacentFlagRootTask, null); +    } + +    @Test      public void testTileAddRemoveChild() {          final StubOrganizer listener = new StubOrganizer();          mWm.mAtmService.mTaskOrganizerController.registerTaskOrganizer(listener);  |