Loading libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java +23 −2 Original line number Diff line number Diff line Loading @@ -1295,6 +1295,14 @@ public class BubbleController implements ConfigurationChangeListener, // We still have bubbles, if we dragged an individual bubble to dismiss we were expanded // so re-expand to whatever is selected. showExpandedViewForBubbleBar(); if (bubbleKey.equals(selectedBubbleKey)) { // We dragged the selected bubble to dismiss, log switch event if (mBubbleData.getSelectedBubble() instanceof Bubble) { // Log only bubbles as overflow can't be dragged mLogger.log((Bubble) mBubbleData.getSelectedBubble(), BubbleLogger.Event.BUBBLE_BAR_BUBBLE_SWITCHED); } } } } Loading Loading @@ -1337,10 +1345,16 @@ public class BubbleController implements ConfigurationChangeListener, public void expandStackAndSelectBubbleFromLauncher(String key, int topOnScreen) { mBubblePositioner.setBubbleBarTopOnScreen(topOnScreen); boolean wasExpanded = (mLayerView != null && mLayerView.isExpanded()); if (BubbleOverflow.KEY.equals(key)) { mBubbleData.setSelectedBubbleFromLauncher(mBubbleData.getOverflow()); mLayerView.showExpandedView(mBubbleData.getOverflow()); if (wasExpanded) { mLogger.log(BubbleLogger.Event.BUBBLE_BAR_BUBBLE_SWITCHED); } else { mLogger.log(BubbleLogger.Event.BUBBLE_BAR_EXPANDED); } return; } Loading @@ -1352,7 +1366,11 @@ public class BubbleController implements ConfigurationChangeListener, // already in the stack mBubbleData.setSelectedBubbleFromLauncher(b); mLayerView.showExpandedView(b); if (wasExpanded) { mLogger.log(b, BubbleLogger.Event.BUBBLE_BAR_BUBBLE_SWITCHED); } else { mLogger.log(b, BubbleLogger.Event.BUBBLE_BAR_EXPANDED); } } else if (mBubbleData.hasOverflowBubbleWithKey(b.getKey())) { // TODO: (b/271468319) handle overflow } else { Loading Loading @@ -2081,6 +2099,9 @@ public class BubbleController implements ConfigurationChangeListener, // Only need to update the layer view if we're currently expanded for selection changes. if (mLayerView != null && mLayerView.isExpanded()) { mLayerView.showExpandedView(selectedBubble); if (selectedBubble instanceof Bubble bubble) { mLogger.log(bubble, BubbleLogger.Event.BUBBLE_BAR_BUBBLE_SWITCHED); } } } }; Loading packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java +66 −2 Original line number Diff line number Diff line Loading @@ -49,6 +49,7 @@ import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; Loading Loading @@ -2507,17 +2508,54 @@ public class BubblesTest extends SysuiTestCase { @EnableFlags(FLAG_ENABLE_BUBBLE_BAR) @Test public void testEventLogging_bubbleBar_dragBubbleToDismiss() { public void testEventLogging_bubbleBar_dragSelectedBubbleToDismiss() { mBubbleProperties.mIsBubbleBarEnabled = true; mPositioner.setIsLargeScreen(true); FakeBubbleStateListener bubbleStateListener = new FakeBubbleStateListener(); mBubbleController.registerBubbleStateListener(bubbleStateListener); mEntryListener.onEntryAdded(mRow); mBubbleController.dragBubbleToDismiss(mRow.getKey(), 1L); mEntryListener.onEntryAdded(mRow2); mBubbleController.expandStackAndSelectBubbleFromLauncher(mRow2.getKey(), 0); clearInvocations(mBubbleLogger); // Dismiss selected bubble mBubbleController.startBubbleDrag(mRow2.getKey()); mBubbleController.dragBubbleToDismiss(mRow2.getKey(), System.currentTimeMillis()); // Log bubble dismissed via drag and new bubble selected verify(mBubbleLogger).log(eqBubbleWithKey(mRow2.getKey()), eq(BubbleLogger.Event.BUBBLE_BAR_BUBBLE_DISMISSED_DRAG_BUBBLE)); verify(mBubbleLogger).log(eqBubbleWithKey(mRow.getKey()), eq(BubbleLogger.Event.BUBBLE_BAR_BUBBLE_SWITCHED)); verifyNoMoreInteractions(mBubbleLogger); } @EnableFlags(FLAG_ENABLE_BUBBLE_BAR) @Test public void testEventLogging_bubbleBar_dragOtherBubbleToDismiss() { mBubbleProperties.mIsBubbleBarEnabled = true; mPositioner.setIsLargeScreen(true); FakeBubbleStateListener bubbleStateListener = new FakeBubbleStateListener(); mBubbleController.registerBubbleStateListener(bubbleStateListener); mEntryListener.onEntryAdded(mRow); mEntryListener.onEntryAdded(mRow2); mBubbleController.expandStackAndSelectBubbleFromLauncher(mRow2.getKey(), 0); clearInvocations(mBubbleLogger); // Dismiss other bubble mBubbleController.startBubbleDrag(mRow.getKey()); mBubbleController.dragBubbleToDismiss(mRow.getKey(), System.currentTimeMillis()); // Log bubble dismissed via drag, but no switch event verify(mBubbleLogger).log(eqBubbleWithKey(mRow.getKey()), eq(BubbleLogger.Event.BUBBLE_BAR_BUBBLE_DISMISSED_DRAG_BUBBLE)); verifyNoMoreInteractions(mBubbleLogger); } @EnableFlags(FLAG_ENABLE_BUBBLE_BAR) Loading Loading @@ -2643,6 +2681,32 @@ public class BubblesTest extends SysuiTestCase { eq(BubbleLogger.Event.BUBBLE_BAR_EXPANDED)); } @EnableFlags(FLAG_ENABLE_BUBBLE_BAR) @Test public void testEventLogging_bubbleBar_switchBubble() { mBubbleProperties.mIsBubbleBarEnabled = true; mPositioner.setIsLargeScreen(true); FakeBubbleStateListener bubbleStateListener = new FakeBubbleStateListener(); mBubbleController.registerBubbleStateListener(bubbleStateListener); mEntryListener.onEntryAdded(mRow); mEntryListener.onEntryAdded(mRow2); mBubbleController.expandStackAndSelectBubbleFromLauncher(mRow.getKey(), 0); // First select is expand verify(mBubbleLogger).log(eqBubbleWithKey(mRow.getKey()), eq(BubbleLogger.Event.BUBBLE_BAR_EXPANDED)); verify(mBubbleLogger, never()).log(eqBubbleWithKey(mRow.getKey()), eq(BubbleLogger.Event.BUBBLE_BAR_BUBBLE_SWITCHED)); // Second select is switch mBubbleController.expandStackAndSelectBubbleFromLauncher(mRow2.getKey(), 0); verify(mBubbleLogger).log(eqBubbleWithKey(mRow2.getKey()), eq(BubbleLogger.Event.BUBBLE_BAR_BUBBLE_SWITCHED)); verify(mBubbleLogger, never()).log(eqBubbleWithKey(mRow2.getKey()), eq(BubbleLogger.Event.BUBBLE_BAR_EXPANDED)); } /** Creates a bubble using the userId and package. */ private Bubble createBubble(int userId, String pkg) { final UserHandle userHandle = new UserHandle(userId); Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java +23 −2 Original line number Diff line number Diff line Loading @@ -1295,6 +1295,14 @@ public class BubbleController implements ConfigurationChangeListener, // We still have bubbles, if we dragged an individual bubble to dismiss we were expanded // so re-expand to whatever is selected. showExpandedViewForBubbleBar(); if (bubbleKey.equals(selectedBubbleKey)) { // We dragged the selected bubble to dismiss, log switch event if (mBubbleData.getSelectedBubble() instanceof Bubble) { // Log only bubbles as overflow can't be dragged mLogger.log((Bubble) mBubbleData.getSelectedBubble(), BubbleLogger.Event.BUBBLE_BAR_BUBBLE_SWITCHED); } } } } Loading Loading @@ -1337,10 +1345,16 @@ public class BubbleController implements ConfigurationChangeListener, public void expandStackAndSelectBubbleFromLauncher(String key, int topOnScreen) { mBubblePositioner.setBubbleBarTopOnScreen(topOnScreen); boolean wasExpanded = (mLayerView != null && mLayerView.isExpanded()); if (BubbleOverflow.KEY.equals(key)) { mBubbleData.setSelectedBubbleFromLauncher(mBubbleData.getOverflow()); mLayerView.showExpandedView(mBubbleData.getOverflow()); if (wasExpanded) { mLogger.log(BubbleLogger.Event.BUBBLE_BAR_BUBBLE_SWITCHED); } else { mLogger.log(BubbleLogger.Event.BUBBLE_BAR_EXPANDED); } return; } Loading @@ -1352,7 +1366,11 @@ public class BubbleController implements ConfigurationChangeListener, // already in the stack mBubbleData.setSelectedBubbleFromLauncher(b); mLayerView.showExpandedView(b); if (wasExpanded) { mLogger.log(b, BubbleLogger.Event.BUBBLE_BAR_BUBBLE_SWITCHED); } else { mLogger.log(b, BubbleLogger.Event.BUBBLE_BAR_EXPANDED); } } else if (mBubbleData.hasOverflowBubbleWithKey(b.getKey())) { // TODO: (b/271468319) handle overflow } else { Loading Loading @@ -2081,6 +2099,9 @@ public class BubbleController implements ConfigurationChangeListener, // Only need to update the layer view if we're currently expanded for selection changes. if (mLayerView != null && mLayerView.isExpanded()) { mLayerView.showExpandedView(selectedBubble); if (selectedBubble instanceof Bubble bubble) { mLogger.log(bubble, BubbleLogger.Event.BUBBLE_BAR_BUBBLE_SWITCHED); } } } }; Loading
packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java +66 −2 Original line number Diff line number Diff line Loading @@ -49,6 +49,7 @@ import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; Loading Loading @@ -2507,17 +2508,54 @@ public class BubblesTest extends SysuiTestCase { @EnableFlags(FLAG_ENABLE_BUBBLE_BAR) @Test public void testEventLogging_bubbleBar_dragBubbleToDismiss() { public void testEventLogging_bubbleBar_dragSelectedBubbleToDismiss() { mBubbleProperties.mIsBubbleBarEnabled = true; mPositioner.setIsLargeScreen(true); FakeBubbleStateListener bubbleStateListener = new FakeBubbleStateListener(); mBubbleController.registerBubbleStateListener(bubbleStateListener); mEntryListener.onEntryAdded(mRow); mBubbleController.dragBubbleToDismiss(mRow.getKey(), 1L); mEntryListener.onEntryAdded(mRow2); mBubbleController.expandStackAndSelectBubbleFromLauncher(mRow2.getKey(), 0); clearInvocations(mBubbleLogger); // Dismiss selected bubble mBubbleController.startBubbleDrag(mRow2.getKey()); mBubbleController.dragBubbleToDismiss(mRow2.getKey(), System.currentTimeMillis()); // Log bubble dismissed via drag and new bubble selected verify(mBubbleLogger).log(eqBubbleWithKey(mRow2.getKey()), eq(BubbleLogger.Event.BUBBLE_BAR_BUBBLE_DISMISSED_DRAG_BUBBLE)); verify(mBubbleLogger).log(eqBubbleWithKey(mRow.getKey()), eq(BubbleLogger.Event.BUBBLE_BAR_BUBBLE_SWITCHED)); verifyNoMoreInteractions(mBubbleLogger); } @EnableFlags(FLAG_ENABLE_BUBBLE_BAR) @Test public void testEventLogging_bubbleBar_dragOtherBubbleToDismiss() { mBubbleProperties.mIsBubbleBarEnabled = true; mPositioner.setIsLargeScreen(true); FakeBubbleStateListener bubbleStateListener = new FakeBubbleStateListener(); mBubbleController.registerBubbleStateListener(bubbleStateListener); mEntryListener.onEntryAdded(mRow); mEntryListener.onEntryAdded(mRow2); mBubbleController.expandStackAndSelectBubbleFromLauncher(mRow2.getKey(), 0); clearInvocations(mBubbleLogger); // Dismiss other bubble mBubbleController.startBubbleDrag(mRow.getKey()); mBubbleController.dragBubbleToDismiss(mRow.getKey(), System.currentTimeMillis()); // Log bubble dismissed via drag, but no switch event verify(mBubbleLogger).log(eqBubbleWithKey(mRow.getKey()), eq(BubbleLogger.Event.BUBBLE_BAR_BUBBLE_DISMISSED_DRAG_BUBBLE)); verifyNoMoreInteractions(mBubbleLogger); } @EnableFlags(FLAG_ENABLE_BUBBLE_BAR) Loading Loading @@ -2643,6 +2681,32 @@ public class BubblesTest extends SysuiTestCase { eq(BubbleLogger.Event.BUBBLE_BAR_EXPANDED)); } @EnableFlags(FLAG_ENABLE_BUBBLE_BAR) @Test public void testEventLogging_bubbleBar_switchBubble() { mBubbleProperties.mIsBubbleBarEnabled = true; mPositioner.setIsLargeScreen(true); FakeBubbleStateListener bubbleStateListener = new FakeBubbleStateListener(); mBubbleController.registerBubbleStateListener(bubbleStateListener); mEntryListener.onEntryAdded(mRow); mEntryListener.onEntryAdded(mRow2); mBubbleController.expandStackAndSelectBubbleFromLauncher(mRow.getKey(), 0); // First select is expand verify(mBubbleLogger).log(eqBubbleWithKey(mRow.getKey()), eq(BubbleLogger.Event.BUBBLE_BAR_EXPANDED)); verify(mBubbleLogger, never()).log(eqBubbleWithKey(mRow.getKey()), eq(BubbleLogger.Event.BUBBLE_BAR_BUBBLE_SWITCHED)); // Second select is switch mBubbleController.expandStackAndSelectBubbleFromLauncher(mRow2.getKey(), 0); verify(mBubbleLogger).log(eqBubbleWithKey(mRow2.getKey()), eq(BubbleLogger.Event.BUBBLE_BAR_BUBBLE_SWITCHED)); verify(mBubbleLogger, never()).log(eqBubbleWithKey(mRow2.getKey()), eq(BubbleLogger.Event.BUBBLE_BAR_EXPANDED)); } /** Creates a bubble using the userId and package. */ private Bubble createBubble(int userId, String pkg) { final UserHandle userHandle = new UserHandle(userId); Loading