Loading libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java +3 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ import static android.app.ActivityTaskManager.INVALID_TASK_ID; import static android.os.AsyncTask.Status.FINISHED; import static com.android.internal.annotations.VisibleForTesting.Visibility.PRIVATE; import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_BUBBLES; import android.annotation.DimenRes; import android.annotation.Hide; Loading Loading @@ -47,6 +48,7 @@ import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.InstanceId; import com.android.internal.protolog.common.ProtoLog; import com.android.launcher3.icons.BubbleIconFactory; import com.android.wm.shell.bubbles.bar.BubbleBarExpandedView; import com.android.wm.shell.bubbles.bar.BubbleBarLayerView; Loading Loading @@ -466,6 +468,7 @@ public class Bubble implements BubbleViewProvider { * Call when all the views should be removed/cleaned up. */ public void cleanupViews() { ProtoLog.d(WM_SHELL_BUBBLES, "Bubble#cleanupViews=%s", getKey()); cleanupViews(true); } Loading libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java +40 −23 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ import static android.view.View.INVISIBLE; import static android.view.View.VISIBLE; import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; import static com.android.wm.shell.bubbles.BubbleDebugConfig.DEBUG_BUBBLE_CONTROLLER; import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_BUBBLES; import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_WITH_CLASS_NAME; import static com.android.wm.shell.bubbles.Bubbles.DISMISS_BLOCKED; Loading Loading @@ -435,6 +434,9 @@ public class BubbleController implements ConfigurationChangeListener, boolean homeTaskVisible, boolean clearedTask, boolean wasVisible) { for (Bubble b : mBubbleData.getBubbles()) { if (task.taskId == b.getTaskId()) { ProtoLog.d(WM_SHELL_BUBBLES, "onActivityRestartAttempt - taskId=%d selecting matching bubble=%s", task.taskId, b.getKey()); mBubbleData.setSelectedBubble(b); mBubbleData.setExpanded(true); return; Loading @@ -442,6 +444,9 @@ public class BubbleController implements ConfigurationChangeListener, } for (Bubble b : mBubbleData.getOverflowBubbles()) { if (task.taskId == b.getTaskId()) { ProtoLog.d(WM_SHELL_BUBBLES, "onActivityRestartAttempt - taskId=%d " + "selecting matching overflow bubble=%s", task.taskId, b.getKey()); promoteBubbleFromOverflow(b); mBubbleData.setExpanded(true); return; Loading Loading @@ -581,10 +586,15 @@ public class BubbleController implements ConfigurationChangeListener, // Hide the stack temporarily if the status bar has been made invisible, and the stack // is collapsed. An expanded stack should remain visible until collapsed. mStackView.setTemporarilyInvisible(!visible && !isStackExpanded()); ProtoLog.d(WM_SHELL_BUBBLES, "onStatusBarVisibilityChanged=%b stackExpanded=%b", visible, isStackExpanded()); } } private void onZenStateChanged() { if (hasBubbles()) { ProtoLog.d(WM_SHELL_BUBBLES, "onZenStateChanged"); } for (Bubble b : mBubbleData.getBubbles()) { b.setShowDot(b.showInShade()); } Loading @@ -593,9 +603,10 @@ public class BubbleController implements ConfigurationChangeListener, @VisibleForTesting public void onStatusBarStateChanged(boolean isShade) { boolean didChange = mIsStatusBarShade != isShade; if (DEBUG_BUBBLE_CONTROLLER) { Log.d(TAG, "onStatusBarStateChanged isShade=" + isShade + " didChange=" + didChange); } ProtoLog.d(WM_SHELL_BUBBLES, "onStatusBarStateChanged " + "isShade=%b didChange=%b mNotifEntryToExpandOnShadeUnlock=%s", isShade, didChange, (mNotifEntryToExpandOnShadeUnlock != null ? mNotifEntryToExpandOnShadeUnlock.getKey() : "null")); mIsStatusBarShade = isShade; if (!mIsStatusBarShade && didChange) { // Only collapse stack on change Loading @@ -611,6 +622,8 @@ public class BubbleController implements ConfigurationChangeListener, @VisibleForTesting public void onBubbleMetadataFlagChanged(Bubble bubble) { ProtoLog.d(WM_SHELL_BUBBLES, "onBubbleMetadataFlagChanged=%s flags=%d", bubble.getKey(), bubble.getFlags()); // Make sure NoMan knows suppression state so that anyone querying it can tell. try { mBarService.onBubbleMetadataFlagChanged(bubble.getKey(), bubble.getFlags()); Loading @@ -623,6 +636,8 @@ public class BubbleController implements ConfigurationChangeListener, /** Called when the current user changes. */ @VisibleForTesting public void onUserChanged(int newUserId) { ProtoLog.d(WM_SHELL_BUBBLES, "onUserChanged currentUser=%d newUser=%d", mCurrentUserId, newUserId); saveBubbles(mCurrentUserId); mCurrentUserId = newUserId; Loading Loading @@ -825,6 +840,7 @@ public class BubbleController implements ConfigurationChangeListener, */ void updateWindowFlagsForBackpress(boolean interceptBack) { if (mAddedToWindowManager) { ProtoLog.d(WM_SHELL_BUBBLES, "updateFlagsForBackPress interceptBack=%b", interceptBack); mWmLayoutParams.flags = interceptBack ? 0 : WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE Loading Loading @@ -1014,8 +1030,9 @@ public class BubbleController implements ConfigurationChangeListener, } private void onNotificationPanelExpandedChanged(boolean expanded) { ProtoLog.d(WM_SHELL_BUBBLES, "onNotificationPanelExpandedChanged: expanded=%b", expanded); if (mStackView != null && mStackView.isExpanded()) { ProtoLog.d(WM_SHELL_BUBBLES, "onNotificationPanelExpandedChanged expanded=%b", expanded); if (expanded) { mStackView.stopMonitoringSwipeUpGesture(); } else { Loading Loading @@ -1096,6 +1113,7 @@ public class BubbleController implements ConfigurationChangeListener, /** Promote the provided bubble from the overflow view. */ public void promoteBubbleFromOverflow(Bubble bubble) { mLogger.log(bubble, BubbleLogger.Event.BUBBLE_OVERFLOW_REMOVE_BACK_TO_STACK); ProtoLog.d(WM_SHELL_BUBBLES, "promoteBubbleFromOverflow=%s", bubble.getKey()); bubble.setInflateSynchronously(mInflateSynchronously); bubble.setShouldAutoExpand(true); bubble.markAsAccessedAt(System.currentTimeMillis()); Loading Loading @@ -1211,11 +1229,8 @@ public class BubbleController implements ConfigurationChangeListener, // Skip update, but store it in user bubbles so it gets restored after user switch mSavedUserBubbleData.get(bubbleUserId, new UserBubbleData()).add(notif.getKey(), true /* shownInShade */); if (DEBUG_BUBBLE_CONTROLLER) { Log.d(TAG, "Ignore update to bubble for not active user. Bubble userId=" + bubbleUserId + " current userId=" + mCurrentUserId); } Log.w(TAG, "updateBubble, ignore update for non-active user=" + bubbleUserId + " currentUser=" + mCurrentUserId); } } Loading Loading @@ -1769,18 +1784,19 @@ public class BubbleController implements ConfigurationChangeListener, @Override public void applyUpdate(BubbleData.Update update) { if (DEBUG_BUBBLE_CONTROLLER) { Log.d(TAG, "applyUpdate:" + " bubbleAdded=" + (update.addedBubble != null) + " bubbleRemoved=" + (update.removedBubbles != null && update.removedBubbles.size() > 0) + " bubbleUpdated=" + (update.updatedBubble != null) + " orderChanged=" + update.orderChanged + " expandedChanged=" + update.expandedChanged + " selectionChanged=" + update.selectionChanged + " suppressed=" + (update.suppressedBubble != null) + " unsuppressed=" + (update.unsuppressedBubble != null) + " shouldShowEducation=" + update.shouldShowEducation); } ProtoLog.d(WM_SHELL_BUBBLES, "mBubbleDataListener#applyUpdate:" + " added=%s removed=%b updated=%s orderChanged=%b expansionChanged=%b" + " expanded=%b selectionChanged=%b selected=%s" + " suppressed=%s unsupressed=%s shouldShowEducation=%b", update.addedBubble != null ? update.addedBubble.getKey() : "null", update.removedBubbles.isEmpty(), update.updatedBubble != null ? update.updatedBubble.getKey() : "null", update.orderChanged, update.expandedChanged, update.expanded, update.selectionChanged, update.selectedBubble != null ? update.selectedBubble.getKey() : "null", update.suppressedBubble != null ? update.suppressedBubble.getKey() : "null", update.unsuppressedBubble != null ? update.unsuppressedBubble.getKey() : "null", update.shouldShowEducation); ensureBubbleViewsAndWindowCreated(); Loading Loading @@ -1974,7 +1990,8 @@ public class BubbleController implements ConfigurationChangeListener, if (mStackView == null && mLayerView == null) { return; } ProtoLog.v(WM_SHELL_BUBBLES, "updateBubbleViews mIsStatusBarShade=%s hasBubbles=%s", mIsStatusBarShade, hasBubbles()); if (!mIsStatusBarShade) { // Bubbles don't appear when the device is locked. if (mStackView != null) { Loading libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleData.java +25 −62 Original line number Diff line number Diff line Loading @@ -16,10 +16,9 @@ package com.android.wm.shell.bubbles; import static com.android.internal.annotations.VisibleForTesting.Visibility.PRIVATE; import static com.android.wm.shell.bubbles.Bubble.KEY_APP_BUBBLE; import static com.android.wm.shell.bubbles.BubbleDebugConfig.DEBUG_BUBBLE_DATA; import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_BUBBLES; import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_WITH_CLASS_NAME; import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_BUBBLES; import android.annotation.NonNull; import android.app.PendingIntent; Loading @@ -36,6 +35,7 @@ import android.view.View; import androidx.annotation.Nullable; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.protolog.common.ProtoLog; import com.android.internal.util.FrameworkStatsLog; import com.android.launcher3.icons.BubbleIconFactory; import com.android.wm.shell.R; Loading Loading @@ -333,9 +333,6 @@ public class BubbleData { } public void setExpanded(boolean expanded) { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "setExpanded: " + expanded); } setExpandedInternal(expanded); dispatchPendingChanges(); } Loading @@ -347,9 +344,8 @@ public class BubbleData { * updated to have the correct state. */ public void setSelectedBubbleFromLauncher(BubbleViewProvider bubble) { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "setSelectedBubbleFromLauncher: " + bubble); } ProtoLog.d(WM_SHELL_BUBBLES, "setSelectedBubbleFromLauncher=%s", (bubble != null ? bubble.getKey() : "null")); mExpanded = true; if (Objects.equals(bubble, mSelectedBubble)) { return; Loading @@ -370,9 +366,6 @@ public class BubbleData { } public void setSelectedBubble(BubbleViewProvider bubble) { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "setSelectedBubble: " + bubble); } setSelectedBubbleInternal(bubble); dispatchPendingChanges(); } Loading Loading @@ -430,12 +423,13 @@ public class BubbleData { * BubbleBarLayerView, BubbleIconFactory, boolean) */ void notificationEntryUpdated(Bubble bubble, boolean suppressFlyout, boolean showInShade) { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "notificationEntryUpdated: " + bubble); } mPendingBubbles.remove(bubble.getKey()); // No longer pending once we're here Bubble prevBubble = getBubbleInStackWithKey(bubble.getKey()); suppressFlyout |= !bubble.isTextChanged(); ProtoLog.d(WM_SHELL_BUBBLES, "notifEntryUpdated=%s prevBubble=%b suppressFlyout=%b showInShade=%b autoExpand=%b", bubble.getKey(), (prevBubble != null), suppressFlyout, showInShade, bubble.shouldAutoExpand()); if (prevBubble == null) { // Create a new bubble Loading Loading @@ -483,9 +477,6 @@ public class BubbleData { * Dismisses the bubble with the matching key, if it exists. */ public void dismissBubbleWithKey(String key, @DismissReason int reason) { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "notificationEntryRemoved: key=" + key + " reason=" + reason); } doRemove(key, reason); dispatchPendingChanges(); } Loading Loading @@ -603,9 +594,7 @@ public class BubbleData { } private void doAdd(Bubble bubble) { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "doAdd: " + bubble); } ProtoLog.d(WM_SHELL_BUBBLES, "doAdd=%s", bubble.getKey()); mBubbles.add(0, bubble); mStateChange.addedBubble = bubble; // Adding the first bubble doesn't change the order Loading Loading @@ -634,9 +623,7 @@ public class BubbleData { } private void doUpdate(Bubble bubble, boolean reorder) { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "doUpdate: " + bubble); } ProtoLog.d(WM_SHELL_BUBBLES, "BubbleData - doUpdate=%s", bubble.getKey()); mStateChange.updatedBubble = bubble; if (!isExpanded() && reorder) { int prevPos = mBubbles.indexOf(bubble); Loading @@ -663,9 +650,6 @@ public class BubbleData { } private void doRemove(String key, @DismissReason int reason) { if (DEBUG_BUBBLE_DATA || (key != null && key.contains(KEY_APP_BUBBLE))) { Log.d(TAG, "doRemove: " + key + " reason: " + reason); } // If it was pending remove it if (mPendingBubbles.containsKey(key)) { mPendingBubbles.remove(key); Loading @@ -686,9 +670,7 @@ public class BubbleData { && shouldRemoveHiddenBubble) { Bubble b = getOverflowBubbleWithKey(key); if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "Cancel overflow bubble: " + b); } ProtoLog.d(WM_SHELL_BUBBLES, "doRemove - cancel overflow bubble=%s", key); if (b != null) { b.stopInflation(); } Loading @@ -699,9 +681,7 @@ public class BubbleData { } if (hasSuppressedBubbleWithKey(key) && shouldRemoveHiddenBubble) { Bubble b = getSuppressedBubbleWithKey(key); if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "Cancel suppressed bubble: " + b); } ProtoLog.d(WM_SHELL_BUBBLES, "doRemove - cancel suppressed bubble=%s", key); if (b != null) { mSuppressedBubbles.remove(b.getLocusId()); b.stopInflation(); Loading @@ -711,6 +691,7 @@ public class BubbleData { return; } Bubble bubbleToRemove = mBubbles.get(indexToRemove); ProtoLog.d(WM_SHELL_BUBBLES, "doRemove=%s", bubbleToRemove.getKey()); bubbleToRemove.stopInflation(); overflowBubble(reason, bubbleToRemove); Loading Loading @@ -744,17 +725,12 @@ public class BubbleData { } // Move selection to the new bubble at the same position. int newIndex = Math.min(indexOfSelected, mBubbles.size() - 1); if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "setNewSelectedIndex: " + indexOfSelected); } BubbleViewProvider newSelected = mBubbles.get(newIndex); setSelectedBubbleInternal(newSelected); } private void doSuppress(Bubble bubble) { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "doSuppressed: " + bubble); } ProtoLog.d(WM_SHELL_BUBBLES, "doSuppress=%s", bubble.getKey()); mStateChange.suppressedBubble = bubble; bubble.setSuppressBubble(true); Loading @@ -777,9 +753,7 @@ public class BubbleData { } private void doUnsuppress(Bubble bubble) { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "doUnsuppressed: " + bubble); } ProtoLog.d(WM_SHELL_BUBBLES, "doUnsuppress=%s", bubble.getKey()); bubble.setSuppressBubble(false); mStateChange.unsuppressedBubble = bubble; mBubbles.add(bubble); Loading @@ -801,9 +775,7 @@ public class BubbleData { || reason == Bubbles.DISMISS_RELOAD_FROM_DISK)) { return; } if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "Overflowing: " + bubble); } ProtoLog.d(WM_SHELL_BUBBLES, "overflowBubble=%s", bubble.getKey()); mLogger.logOverflowAdd(bubble, reason); mOverflowBubbles.remove(bubble); mOverflowBubbles.add(0, bubble); Loading @@ -812,9 +784,7 @@ public class BubbleData { if (mOverflowBubbles.size() == mMaxOverflowBubbles + 1) { // Remove oldest bubble. Bubble oldest = mOverflowBubbles.get(mOverflowBubbles.size() - 1); if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "Overflow full. Remove: " + oldest); } ProtoLog.d(WM_SHELL_BUBBLES, "overflow full, remove=%s", oldest.getKey()); mStateChange.bubbleRemoved(oldest, Bubbles.DISMISS_OVERFLOW_MAX_REACHED); mLogger.log(bubble, BubbleLogger.Event.BUBBLE_OVERFLOW_REMOVE_MAX_REACHED); mOverflowBubbles.remove(oldest); Loading @@ -823,9 +793,7 @@ public class BubbleData { } public void dismissAll(@DismissReason int reason) { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "dismissAll: reason=" + reason); } ProtoLog.d(WM_SHELL_BUBBLES, "dismissAll reason=%d", reason); if (mBubbles.isEmpty() && mSuppressedBubbles.isEmpty()) { return; } Loading @@ -851,9 +819,10 @@ public class BubbleData { * @param visible whether the task with the locusId is visible or not. */ public void onLocusVisibilityChanged(int taskId, LocusId locusId, boolean visible) { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "onLocusVisibilityChanged: " + locusId + " visible=" + visible); } if (locusId == null) return; ProtoLog.d(WM_SHELL_BUBBLES, "onLocusVisibilityChanged=%s visible=%b taskId=%d", locusId.getId(), visible, taskId); Bubble matchingBubble = getBubbleInStackWithLocusId(locusId); // Don't add the locus if it's from a bubble'd activity, we only suppress for non-bubbled. Loading Loading @@ -910,9 +879,8 @@ public class BubbleData { * @param bubble the new selected bubble */ private void setSelectedBubbleInternal(@Nullable BubbleViewProvider bubble) { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "setSelectedBubbleInternal: " + bubble); } ProtoLog.d(WM_SHELL_BUBBLES, "setSelectedBubbleInternal=%s", (bubble != null ? bubble.getKey() : "null")); if (Objects.equals(bubble, mSelectedBubble)) { return; } Loading Loading @@ -969,12 +937,10 @@ public class BubbleData { * @param shouldExpand the new requested state */ private void setExpandedInternal(boolean shouldExpand) { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "setExpandedInternal: shouldExpand=" + shouldExpand); } if (mExpanded == shouldExpand) { return; } ProtoLog.d(WM_SHELL_BUBBLES, "setExpandedInternal=%b", shouldExpand); if (shouldExpand) { if (mBubbles.isEmpty() && !mShowingOverflow) { Log.e(TAG, "Attempt to expand stack when empty!"); Loading Loading @@ -1026,9 +992,6 @@ public class BubbleData { * @return true if the position of any bubbles changed as a result */ private boolean repackAll() { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "repackAll()"); } if (mBubbles.isEmpty()) { return false; } Loading libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleDebugConfig.java +0 −10 Original line number Diff line number Diff line Loading @@ -37,17 +37,7 @@ public class BubbleDebugConfig { // Default log tag for the Bubbles package. public static final String TAG_BUBBLES = "Bubbles"; static final boolean DEBUG_BUBBLE_CONTROLLER = false; static final boolean DEBUG_BUBBLE_DATA = false; static final boolean DEBUG_BUBBLE_STACK_VIEW = false; static final boolean DEBUG_BUBBLE_EXPANDED_VIEW = false; static final boolean DEBUG_EXPERIMENTS = true; static final boolean DEBUG_OVERFLOW = false; public static final boolean DEBUG_USER_EDUCATION = false; static final boolean DEBUG_POSITIONER = false; public static final boolean DEBUG_COLLAPSE_ANIMATOR = false; public static boolean DEBUG_EXPANDED_VIEW_DRAGGING = false; private static final boolean FORCE_SHOW_USER_EDUCATION = false; private static final String FORCE_SHOW_USER_EDUCATION_SETTING = Loading libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java +12 −41 Original line number Diff line number Diff line Loading @@ -23,10 +23,10 @@ import static android.content.Intent.FLAG_ACTIVITY_NEW_DOCUMENT; import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; import static com.android.wm.shell.bubbles.BubbleDebugConfig.DEBUG_BUBBLE_EXPANDED_VIEW; import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_BUBBLES; import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_WITH_CLASS_NAME; import static com.android.wm.shell.bubbles.BubblePositioner.MAX_HEIGHT; import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_BUBBLES; import android.annotation.NonNull; import android.annotation.SuppressLint; Loading Loading @@ -67,6 +67,7 @@ import androidx.annotation.Nullable; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.policy.ScreenDecorationsUtils; import com.android.internal.protolog.common.ProtoLog; import com.android.wm.shell.R; import com.android.wm.shell.common.AlphaOptimizedButton; import com.android.wm.shell.common.TriangleShape; Loading Loading @@ -199,13 +200,9 @@ public class BubbleExpandedView extends LinearLayout { @Override public void onInitialized() { if (DEBUG_BUBBLE_EXPANDED_VIEW) { Log.d(TAG, "onInitialized: destroyed=" + mDestroyed + " initialized=" + mInitialized + " bubble=" + getBubbleKey()); } if (mDestroyed || mInitialized) { ProtoLog.d(WM_SHELL_BUBBLES, "onInitialized: destroyed=%b initialized=%b bubble=%s", mDestroyed, mInitialized, getBubbleKey()); return; } Loading @@ -216,10 +213,8 @@ public class BubbleExpandedView extends LinearLayout { // TODO: I notice inconsistencies in lifecycle // Post to keep the lifecycle normal post(() -> { if (DEBUG_BUBBLE_EXPANDED_VIEW) { Log.d(TAG, "onInitialized: calling startActivity, bubble=" + getBubbleKey()); } ProtoLog.d(WM_SHELL_BUBBLES, "onInitialized: calling startActivity, bubble=%s", getBubbleKey()); try { Rect launchBounds = new Rect(); mTaskView.getBoundsOnScreen(launchBounds); Loading Loading @@ -279,10 +274,8 @@ public class BubbleExpandedView extends LinearLayout { @Override public void onTaskCreated(int taskId, ComponentName name) { if (DEBUG_BUBBLE_EXPANDED_VIEW) { Log.d(TAG, "onTaskCreated: taskId=" + taskId + " bubble=" + getBubbleKey()); } ProtoLog.d(WM_SHELL_BUBBLES, "onTaskCreated: taskId=%d bubble=%s", taskId, getBubbleKey()); // The taskId is saved to use for removeTask, preventing appearance in recent tasks. mTaskId = taskId; Loading @@ -298,15 +291,15 @@ public class BubbleExpandedView extends LinearLayout { @Override public void onTaskVisibilityChanged(int taskId, boolean visible) { ProtoLog.d(WM_SHELL_BUBBLES, "onTaskVisibilityChanged=%b bubble=%s taskId=%d", visible, getBubbleKey(), taskId); setContentVisibility(visible); } @Override public void onTaskRemovalStarted(int taskId) { if (DEBUG_BUBBLE_EXPANDED_VIEW) { Log.d(TAG, "onTaskRemovalStarted: taskId=" + taskId + " bubble=" + getBubbleKey()); } ProtoLog.d(WM_SHELL_BUBBLES, "onTaskRemovalStarted: taskId=%d bubble=%s", taskId, getBubbleKey()); if (mBubble != null) { mController.removeBubble(mBubble.getKey(), Bubbles.DISMISS_TASK_FINISHED); } Loading Loading @@ -644,9 +637,6 @@ public class BubbleExpandedView extends LinearLayout { super.onDetachedFromWindow(); mImeVisible = false; mNeedsNewHeight = false; if (DEBUG_BUBBLE_EXPANDED_VIEW) { Log.d(TAG, "onDetachedFromWindow: bubble=" + getBubbleKey()); } } /** Loading Loading @@ -805,10 +795,6 @@ public class BubbleExpandedView extends LinearLayout { * and setting {@code false} actually means rendering the contents in transparent. */ public void setContentVisibility(boolean visibility) { if (DEBUG_BUBBLE_EXPANDED_VIEW) { Log.d(TAG, "setContentVisibility: visibility=" + visibility + " bubble=" + getBubbleKey()); } mIsContentVisible = visibility; if (mTaskView != null && !mIsAnimating) { mTaskView.setAlpha(visibility ? 1f : 0f); Loading Loading @@ -867,9 +853,6 @@ public class BubbleExpandedView extends LinearLayout { * Sets the bubble used to populate this view. */ void update(Bubble bubble) { if (DEBUG_BUBBLE_EXPANDED_VIEW) { Log.d(TAG, "update: bubble=" + bubble); } if (mStackView == null) { Log.w(TAG, "Stack is null for bubble: " + bubble); return; Loading Loading @@ -958,11 +941,6 @@ public class BubbleExpandedView extends LinearLayout { } mNeedsNewHeight = false; } if (DEBUG_BUBBLE_EXPANDED_VIEW) { Log.d(TAG, "updateHeight: bubble=" + getBubbleKey() + " height=" + height + " mNeedsNewHeight=" + mNeedsNewHeight); } } } Loading @@ -974,10 +952,6 @@ public class BubbleExpandedView extends LinearLayout { * waiting for layout. */ public void updateView(int[] containerLocationOnScreen) { if (DEBUG_BUBBLE_EXPANDED_VIEW) { Log.d(TAG, "updateView: bubble=" + getBubbleKey()); } mExpandedViewContainerLocation = containerLocationOnScreen; updateHeight(); if (mTaskView != null Loading Loading @@ -1103,9 +1077,6 @@ public class BubbleExpandedView extends LinearLayout { /** Hide the task view. */ public void cleanUpExpandedState() { if (DEBUG_BUBBLE_EXPANDED_VIEW) { Log.d(TAG, "cleanUpExpandedState: bubble=" + getBubbleKey() + " task=" + mTaskId); } if (mTaskView != null) { mTaskView.setVisibility(GONE); } Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java +3 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ import static android.app.ActivityTaskManager.INVALID_TASK_ID; import static android.os.AsyncTask.Status.FINISHED; import static com.android.internal.annotations.VisibleForTesting.Visibility.PRIVATE; import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_BUBBLES; import android.annotation.DimenRes; import android.annotation.Hide; Loading Loading @@ -47,6 +48,7 @@ import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.InstanceId; import com.android.internal.protolog.common.ProtoLog; import com.android.launcher3.icons.BubbleIconFactory; import com.android.wm.shell.bubbles.bar.BubbleBarExpandedView; import com.android.wm.shell.bubbles.bar.BubbleBarLayerView; Loading Loading @@ -466,6 +468,7 @@ public class Bubble implements BubbleViewProvider { * Call when all the views should be removed/cleaned up. */ public void cleanupViews() { ProtoLog.d(WM_SHELL_BUBBLES, "Bubble#cleanupViews=%s", getKey()); cleanupViews(true); } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java +40 −23 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ import static android.view.View.INVISIBLE; import static android.view.View.VISIBLE; import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; import static com.android.wm.shell.bubbles.BubbleDebugConfig.DEBUG_BUBBLE_CONTROLLER; import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_BUBBLES; import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_WITH_CLASS_NAME; import static com.android.wm.shell.bubbles.Bubbles.DISMISS_BLOCKED; Loading Loading @@ -435,6 +434,9 @@ public class BubbleController implements ConfigurationChangeListener, boolean homeTaskVisible, boolean clearedTask, boolean wasVisible) { for (Bubble b : mBubbleData.getBubbles()) { if (task.taskId == b.getTaskId()) { ProtoLog.d(WM_SHELL_BUBBLES, "onActivityRestartAttempt - taskId=%d selecting matching bubble=%s", task.taskId, b.getKey()); mBubbleData.setSelectedBubble(b); mBubbleData.setExpanded(true); return; Loading @@ -442,6 +444,9 @@ public class BubbleController implements ConfigurationChangeListener, } for (Bubble b : mBubbleData.getOverflowBubbles()) { if (task.taskId == b.getTaskId()) { ProtoLog.d(WM_SHELL_BUBBLES, "onActivityRestartAttempt - taskId=%d " + "selecting matching overflow bubble=%s", task.taskId, b.getKey()); promoteBubbleFromOverflow(b); mBubbleData.setExpanded(true); return; Loading Loading @@ -581,10 +586,15 @@ public class BubbleController implements ConfigurationChangeListener, // Hide the stack temporarily if the status bar has been made invisible, and the stack // is collapsed. An expanded stack should remain visible until collapsed. mStackView.setTemporarilyInvisible(!visible && !isStackExpanded()); ProtoLog.d(WM_SHELL_BUBBLES, "onStatusBarVisibilityChanged=%b stackExpanded=%b", visible, isStackExpanded()); } } private void onZenStateChanged() { if (hasBubbles()) { ProtoLog.d(WM_SHELL_BUBBLES, "onZenStateChanged"); } for (Bubble b : mBubbleData.getBubbles()) { b.setShowDot(b.showInShade()); } Loading @@ -593,9 +603,10 @@ public class BubbleController implements ConfigurationChangeListener, @VisibleForTesting public void onStatusBarStateChanged(boolean isShade) { boolean didChange = mIsStatusBarShade != isShade; if (DEBUG_BUBBLE_CONTROLLER) { Log.d(TAG, "onStatusBarStateChanged isShade=" + isShade + " didChange=" + didChange); } ProtoLog.d(WM_SHELL_BUBBLES, "onStatusBarStateChanged " + "isShade=%b didChange=%b mNotifEntryToExpandOnShadeUnlock=%s", isShade, didChange, (mNotifEntryToExpandOnShadeUnlock != null ? mNotifEntryToExpandOnShadeUnlock.getKey() : "null")); mIsStatusBarShade = isShade; if (!mIsStatusBarShade && didChange) { // Only collapse stack on change Loading @@ -611,6 +622,8 @@ public class BubbleController implements ConfigurationChangeListener, @VisibleForTesting public void onBubbleMetadataFlagChanged(Bubble bubble) { ProtoLog.d(WM_SHELL_BUBBLES, "onBubbleMetadataFlagChanged=%s flags=%d", bubble.getKey(), bubble.getFlags()); // Make sure NoMan knows suppression state so that anyone querying it can tell. try { mBarService.onBubbleMetadataFlagChanged(bubble.getKey(), bubble.getFlags()); Loading @@ -623,6 +636,8 @@ public class BubbleController implements ConfigurationChangeListener, /** Called when the current user changes. */ @VisibleForTesting public void onUserChanged(int newUserId) { ProtoLog.d(WM_SHELL_BUBBLES, "onUserChanged currentUser=%d newUser=%d", mCurrentUserId, newUserId); saveBubbles(mCurrentUserId); mCurrentUserId = newUserId; Loading Loading @@ -825,6 +840,7 @@ public class BubbleController implements ConfigurationChangeListener, */ void updateWindowFlagsForBackpress(boolean interceptBack) { if (mAddedToWindowManager) { ProtoLog.d(WM_SHELL_BUBBLES, "updateFlagsForBackPress interceptBack=%b", interceptBack); mWmLayoutParams.flags = interceptBack ? 0 : WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE Loading Loading @@ -1014,8 +1030,9 @@ public class BubbleController implements ConfigurationChangeListener, } private void onNotificationPanelExpandedChanged(boolean expanded) { ProtoLog.d(WM_SHELL_BUBBLES, "onNotificationPanelExpandedChanged: expanded=%b", expanded); if (mStackView != null && mStackView.isExpanded()) { ProtoLog.d(WM_SHELL_BUBBLES, "onNotificationPanelExpandedChanged expanded=%b", expanded); if (expanded) { mStackView.stopMonitoringSwipeUpGesture(); } else { Loading Loading @@ -1096,6 +1113,7 @@ public class BubbleController implements ConfigurationChangeListener, /** Promote the provided bubble from the overflow view. */ public void promoteBubbleFromOverflow(Bubble bubble) { mLogger.log(bubble, BubbleLogger.Event.BUBBLE_OVERFLOW_REMOVE_BACK_TO_STACK); ProtoLog.d(WM_SHELL_BUBBLES, "promoteBubbleFromOverflow=%s", bubble.getKey()); bubble.setInflateSynchronously(mInflateSynchronously); bubble.setShouldAutoExpand(true); bubble.markAsAccessedAt(System.currentTimeMillis()); Loading Loading @@ -1211,11 +1229,8 @@ public class BubbleController implements ConfigurationChangeListener, // Skip update, but store it in user bubbles so it gets restored after user switch mSavedUserBubbleData.get(bubbleUserId, new UserBubbleData()).add(notif.getKey(), true /* shownInShade */); if (DEBUG_BUBBLE_CONTROLLER) { Log.d(TAG, "Ignore update to bubble for not active user. Bubble userId=" + bubbleUserId + " current userId=" + mCurrentUserId); } Log.w(TAG, "updateBubble, ignore update for non-active user=" + bubbleUserId + " currentUser=" + mCurrentUserId); } } Loading Loading @@ -1769,18 +1784,19 @@ public class BubbleController implements ConfigurationChangeListener, @Override public void applyUpdate(BubbleData.Update update) { if (DEBUG_BUBBLE_CONTROLLER) { Log.d(TAG, "applyUpdate:" + " bubbleAdded=" + (update.addedBubble != null) + " bubbleRemoved=" + (update.removedBubbles != null && update.removedBubbles.size() > 0) + " bubbleUpdated=" + (update.updatedBubble != null) + " orderChanged=" + update.orderChanged + " expandedChanged=" + update.expandedChanged + " selectionChanged=" + update.selectionChanged + " suppressed=" + (update.suppressedBubble != null) + " unsuppressed=" + (update.unsuppressedBubble != null) + " shouldShowEducation=" + update.shouldShowEducation); } ProtoLog.d(WM_SHELL_BUBBLES, "mBubbleDataListener#applyUpdate:" + " added=%s removed=%b updated=%s orderChanged=%b expansionChanged=%b" + " expanded=%b selectionChanged=%b selected=%s" + " suppressed=%s unsupressed=%s shouldShowEducation=%b", update.addedBubble != null ? update.addedBubble.getKey() : "null", update.removedBubbles.isEmpty(), update.updatedBubble != null ? update.updatedBubble.getKey() : "null", update.orderChanged, update.expandedChanged, update.expanded, update.selectionChanged, update.selectedBubble != null ? update.selectedBubble.getKey() : "null", update.suppressedBubble != null ? update.suppressedBubble.getKey() : "null", update.unsuppressedBubble != null ? update.unsuppressedBubble.getKey() : "null", update.shouldShowEducation); ensureBubbleViewsAndWindowCreated(); Loading Loading @@ -1974,7 +1990,8 @@ public class BubbleController implements ConfigurationChangeListener, if (mStackView == null && mLayerView == null) { return; } ProtoLog.v(WM_SHELL_BUBBLES, "updateBubbleViews mIsStatusBarShade=%s hasBubbles=%s", mIsStatusBarShade, hasBubbles()); if (!mIsStatusBarShade) { // Bubbles don't appear when the device is locked. if (mStackView != null) { Loading
libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleData.java +25 −62 Original line number Diff line number Diff line Loading @@ -16,10 +16,9 @@ package com.android.wm.shell.bubbles; import static com.android.internal.annotations.VisibleForTesting.Visibility.PRIVATE; import static com.android.wm.shell.bubbles.Bubble.KEY_APP_BUBBLE; import static com.android.wm.shell.bubbles.BubbleDebugConfig.DEBUG_BUBBLE_DATA; import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_BUBBLES; import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_WITH_CLASS_NAME; import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_BUBBLES; import android.annotation.NonNull; import android.app.PendingIntent; Loading @@ -36,6 +35,7 @@ import android.view.View; import androidx.annotation.Nullable; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.protolog.common.ProtoLog; import com.android.internal.util.FrameworkStatsLog; import com.android.launcher3.icons.BubbleIconFactory; import com.android.wm.shell.R; Loading Loading @@ -333,9 +333,6 @@ public class BubbleData { } public void setExpanded(boolean expanded) { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "setExpanded: " + expanded); } setExpandedInternal(expanded); dispatchPendingChanges(); } Loading @@ -347,9 +344,8 @@ public class BubbleData { * updated to have the correct state. */ public void setSelectedBubbleFromLauncher(BubbleViewProvider bubble) { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "setSelectedBubbleFromLauncher: " + bubble); } ProtoLog.d(WM_SHELL_BUBBLES, "setSelectedBubbleFromLauncher=%s", (bubble != null ? bubble.getKey() : "null")); mExpanded = true; if (Objects.equals(bubble, mSelectedBubble)) { return; Loading @@ -370,9 +366,6 @@ public class BubbleData { } public void setSelectedBubble(BubbleViewProvider bubble) { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "setSelectedBubble: " + bubble); } setSelectedBubbleInternal(bubble); dispatchPendingChanges(); } Loading Loading @@ -430,12 +423,13 @@ public class BubbleData { * BubbleBarLayerView, BubbleIconFactory, boolean) */ void notificationEntryUpdated(Bubble bubble, boolean suppressFlyout, boolean showInShade) { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "notificationEntryUpdated: " + bubble); } mPendingBubbles.remove(bubble.getKey()); // No longer pending once we're here Bubble prevBubble = getBubbleInStackWithKey(bubble.getKey()); suppressFlyout |= !bubble.isTextChanged(); ProtoLog.d(WM_SHELL_BUBBLES, "notifEntryUpdated=%s prevBubble=%b suppressFlyout=%b showInShade=%b autoExpand=%b", bubble.getKey(), (prevBubble != null), suppressFlyout, showInShade, bubble.shouldAutoExpand()); if (prevBubble == null) { // Create a new bubble Loading Loading @@ -483,9 +477,6 @@ public class BubbleData { * Dismisses the bubble with the matching key, if it exists. */ public void dismissBubbleWithKey(String key, @DismissReason int reason) { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "notificationEntryRemoved: key=" + key + " reason=" + reason); } doRemove(key, reason); dispatchPendingChanges(); } Loading Loading @@ -603,9 +594,7 @@ public class BubbleData { } private void doAdd(Bubble bubble) { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "doAdd: " + bubble); } ProtoLog.d(WM_SHELL_BUBBLES, "doAdd=%s", bubble.getKey()); mBubbles.add(0, bubble); mStateChange.addedBubble = bubble; // Adding the first bubble doesn't change the order Loading Loading @@ -634,9 +623,7 @@ public class BubbleData { } private void doUpdate(Bubble bubble, boolean reorder) { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "doUpdate: " + bubble); } ProtoLog.d(WM_SHELL_BUBBLES, "BubbleData - doUpdate=%s", bubble.getKey()); mStateChange.updatedBubble = bubble; if (!isExpanded() && reorder) { int prevPos = mBubbles.indexOf(bubble); Loading @@ -663,9 +650,6 @@ public class BubbleData { } private void doRemove(String key, @DismissReason int reason) { if (DEBUG_BUBBLE_DATA || (key != null && key.contains(KEY_APP_BUBBLE))) { Log.d(TAG, "doRemove: " + key + " reason: " + reason); } // If it was pending remove it if (mPendingBubbles.containsKey(key)) { mPendingBubbles.remove(key); Loading @@ -686,9 +670,7 @@ public class BubbleData { && shouldRemoveHiddenBubble) { Bubble b = getOverflowBubbleWithKey(key); if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "Cancel overflow bubble: " + b); } ProtoLog.d(WM_SHELL_BUBBLES, "doRemove - cancel overflow bubble=%s", key); if (b != null) { b.stopInflation(); } Loading @@ -699,9 +681,7 @@ public class BubbleData { } if (hasSuppressedBubbleWithKey(key) && shouldRemoveHiddenBubble) { Bubble b = getSuppressedBubbleWithKey(key); if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "Cancel suppressed bubble: " + b); } ProtoLog.d(WM_SHELL_BUBBLES, "doRemove - cancel suppressed bubble=%s", key); if (b != null) { mSuppressedBubbles.remove(b.getLocusId()); b.stopInflation(); Loading @@ -711,6 +691,7 @@ public class BubbleData { return; } Bubble bubbleToRemove = mBubbles.get(indexToRemove); ProtoLog.d(WM_SHELL_BUBBLES, "doRemove=%s", bubbleToRemove.getKey()); bubbleToRemove.stopInflation(); overflowBubble(reason, bubbleToRemove); Loading Loading @@ -744,17 +725,12 @@ public class BubbleData { } // Move selection to the new bubble at the same position. int newIndex = Math.min(indexOfSelected, mBubbles.size() - 1); if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "setNewSelectedIndex: " + indexOfSelected); } BubbleViewProvider newSelected = mBubbles.get(newIndex); setSelectedBubbleInternal(newSelected); } private void doSuppress(Bubble bubble) { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "doSuppressed: " + bubble); } ProtoLog.d(WM_SHELL_BUBBLES, "doSuppress=%s", bubble.getKey()); mStateChange.suppressedBubble = bubble; bubble.setSuppressBubble(true); Loading @@ -777,9 +753,7 @@ public class BubbleData { } private void doUnsuppress(Bubble bubble) { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "doUnsuppressed: " + bubble); } ProtoLog.d(WM_SHELL_BUBBLES, "doUnsuppress=%s", bubble.getKey()); bubble.setSuppressBubble(false); mStateChange.unsuppressedBubble = bubble; mBubbles.add(bubble); Loading @@ -801,9 +775,7 @@ public class BubbleData { || reason == Bubbles.DISMISS_RELOAD_FROM_DISK)) { return; } if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "Overflowing: " + bubble); } ProtoLog.d(WM_SHELL_BUBBLES, "overflowBubble=%s", bubble.getKey()); mLogger.logOverflowAdd(bubble, reason); mOverflowBubbles.remove(bubble); mOverflowBubbles.add(0, bubble); Loading @@ -812,9 +784,7 @@ public class BubbleData { if (mOverflowBubbles.size() == mMaxOverflowBubbles + 1) { // Remove oldest bubble. Bubble oldest = mOverflowBubbles.get(mOverflowBubbles.size() - 1); if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "Overflow full. Remove: " + oldest); } ProtoLog.d(WM_SHELL_BUBBLES, "overflow full, remove=%s", oldest.getKey()); mStateChange.bubbleRemoved(oldest, Bubbles.DISMISS_OVERFLOW_MAX_REACHED); mLogger.log(bubble, BubbleLogger.Event.BUBBLE_OVERFLOW_REMOVE_MAX_REACHED); mOverflowBubbles.remove(oldest); Loading @@ -823,9 +793,7 @@ public class BubbleData { } public void dismissAll(@DismissReason int reason) { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "dismissAll: reason=" + reason); } ProtoLog.d(WM_SHELL_BUBBLES, "dismissAll reason=%d", reason); if (mBubbles.isEmpty() && mSuppressedBubbles.isEmpty()) { return; } Loading @@ -851,9 +819,10 @@ public class BubbleData { * @param visible whether the task with the locusId is visible or not. */ public void onLocusVisibilityChanged(int taskId, LocusId locusId, boolean visible) { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "onLocusVisibilityChanged: " + locusId + " visible=" + visible); } if (locusId == null) return; ProtoLog.d(WM_SHELL_BUBBLES, "onLocusVisibilityChanged=%s visible=%b taskId=%d", locusId.getId(), visible, taskId); Bubble matchingBubble = getBubbleInStackWithLocusId(locusId); // Don't add the locus if it's from a bubble'd activity, we only suppress for non-bubbled. Loading Loading @@ -910,9 +879,8 @@ public class BubbleData { * @param bubble the new selected bubble */ private void setSelectedBubbleInternal(@Nullable BubbleViewProvider bubble) { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "setSelectedBubbleInternal: " + bubble); } ProtoLog.d(WM_SHELL_BUBBLES, "setSelectedBubbleInternal=%s", (bubble != null ? bubble.getKey() : "null")); if (Objects.equals(bubble, mSelectedBubble)) { return; } Loading Loading @@ -969,12 +937,10 @@ public class BubbleData { * @param shouldExpand the new requested state */ private void setExpandedInternal(boolean shouldExpand) { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "setExpandedInternal: shouldExpand=" + shouldExpand); } if (mExpanded == shouldExpand) { return; } ProtoLog.d(WM_SHELL_BUBBLES, "setExpandedInternal=%b", shouldExpand); if (shouldExpand) { if (mBubbles.isEmpty() && !mShowingOverflow) { Log.e(TAG, "Attempt to expand stack when empty!"); Loading Loading @@ -1026,9 +992,6 @@ public class BubbleData { * @return true if the position of any bubbles changed as a result */ private boolean repackAll() { if (DEBUG_BUBBLE_DATA) { Log.d(TAG, "repackAll()"); } if (mBubbles.isEmpty()) { return false; } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleDebugConfig.java +0 −10 Original line number Diff line number Diff line Loading @@ -37,17 +37,7 @@ public class BubbleDebugConfig { // Default log tag for the Bubbles package. public static final String TAG_BUBBLES = "Bubbles"; static final boolean DEBUG_BUBBLE_CONTROLLER = false; static final boolean DEBUG_BUBBLE_DATA = false; static final boolean DEBUG_BUBBLE_STACK_VIEW = false; static final boolean DEBUG_BUBBLE_EXPANDED_VIEW = false; static final boolean DEBUG_EXPERIMENTS = true; static final boolean DEBUG_OVERFLOW = false; public static final boolean DEBUG_USER_EDUCATION = false; static final boolean DEBUG_POSITIONER = false; public static final boolean DEBUG_COLLAPSE_ANIMATOR = false; public static boolean DEBUG_EXPANDED_VIEW_DRAGGING = false; private static final boolean FORCE_SHOW_USER_EDUCATION = false; private static final String FORCE_SHOW_USER_EDUCATION_SETTING = Loading
libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java +12 −41 Original line number Diff line number Diff line Loading @@ -23,10 +23,10 @@ import static android.content.Intent.FLAG_ACTIVITY_NEW_DOCUMENT; import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; import static com.android.wm.shell.bubbles.BubbleDebugConfig.DEBUG_BUBBLE_EXPANDED_VIEW; import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_BUBBLES; import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_WITH_CLASS_NAME; import static com.android.wm.shell.bubbles.BubblePositioner.MAX_HEIGHT; import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_BUBBLES; import android.annotation.NonNull; import android.annotation.SuppressLint; Loading Loading @@ -67,6 +67,7 @@ import androidx.annotation.Nullable; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.policy.ScreenDecorationsUtils; import com.android.internal.protolog.common.ProtoLog; import com.android.wm.shell.R; import com.android.wm.shell.common.AlphaOptimizedButton; import com.android.wm.shell.common.TriangleShape; Loading Loading @@ -199,13 +200,9 @@ public class BubbleExpandedView extends LinearLayout { @Override public void onInitialized() { if (DEBUG_BUBBLE_EXPANDED_VIEW) { Log.d(TAG, "onInitialized: destroyed=" + mDestroyed + " initialized=" + mInitialized + " bubble=" + getBubbleKey()); } if (mDestroyed || mInitialized) { ProtoLog.d(WM_SHELL_BUBBLES, "onInitialized: destroyed=%b initialized=%b bubble=%s", mDestroyed, mInitialized, getBubbleKey()); return; } Loading @@ -216,10 +213,8 @@ public class BubbleExpandedView extends LinearLayout { // TODO: I notice inconsistencies in lifecycle // Post to keep the lifecycle normal post(() -> { if (DEBUG_BUBBLE_EXPANDED_VIEW) { Log.d(TAG, "onInitialized: calling startActivity, bubble=" + getBubbleKey()); } ProtoLog.d(WM_SHELL_BUBBLES, "onInitialized: calling startActivity, bubble=%s", getBubbleKey()); try { Rect launchBounds = new Rect(); mTaskView.getBoundsOnScreen(launchBounds); Loading Loading @@ -279,10 +274,8 @@ public class BubbleExpandedView extends LinearLayout { @Override public void onTaskCreated(int taskId, ComponentName name) { if (DEBUG_BUBBLE_EXPANDED_VIEW) { Log.d(TAG, "onTaskCreated: taskId=" + taskId + " bubble=" + getBubbleKey()); } ProtoLog.d(WM_SHELL_BUBBLES, "onTaskCreated: taskId=%d bubble=%s", taskId, getBubbleKey()); // The taskId is saved to use for removeTask, preventing appearance in recent tasks. mTaskId = taskId; Loading @@ -298,15 +291,15 @@ public class BubbleExpandedView extends LinearLayout { @Override public void onTaskVisibilityChanged(int taskId, boolean visible) { ProtoLog.d(WM_SHELL_BUBBLES, "onTaskVisibilityChanged=%b bubble=%s taskId=%d", visible, getBubbleKey(), taskId); setContentVisibility(visible); } @Override public void onTaskRemovalStarted(int taskId) { if (DEBUG_BUBBLE_EXPANDED_VIEW) { Log.d(TAG, "onTaskRemovalStarted: taskId=" + taskId + " bubble=" + getBubbleKey()); } ProtoLog.d(WM_SHELL_BUBBLES, "onTaskRemovalStarted: taskId=%d bubble=%s", taskId, getBubbleKey()); if (mBubble != null) { mController.removeBubble(mBubble.getKey(), Bubbles.DISMISS_TASK_FINISHED); } Loading Loading @@ -644,9 +637,6 @@ public class BubbleExpandedView extends LinearLayout { super.onDetachedFromWindow(); mImeVisible = false; mNeedsNewHeight = false; if (DEBUG_BUBBLE_EXPANDED_VIEW) { Log.d(TAG, "onDetachedFromWindow: bubble=" + getBubbleKey()); } } /** Loading Loading @@ -805,10 +795,6 @@ public class BubbleExpandedView extends LinearLayout { * and setting {@code false} actually means rendering the contents in transparent. */ public void setContentVisibility(boolean visibility) { if (DEBUG_BUBBLE_EXPANDED_VIEW) { Log.d(TAG, "setContentVisibility: visibility=" + visibility + " bubble=" + getBubbleKey()); } mIsContentVisible = visibility; if (mTaskView != null && !mIsAnimating) { mTaskView.setAlpha(visibility ? 1f : 0f); Loading Loading @@ -867,9 +853,6 @@ public class BubbleExpandedView extends LinearLayout { * Sets the bubble used to populate this view. */ void update(Bubble bubble) { if (DEBUG_BUBBLE_EXPANDED_VIEW) { Log.d(TAG, "update: bubble=" + bubble); } if (mStackView == null) { Log.w(TAG, "Stack is null for bubble: " + bubble); return; Loading Loading @@ -958,11 +941,6 @@ public class BubbleExpandedView extends LinearLayout { } mNeedsNewHeight = false; } if (DEBUG_BUBBLE_EXPANDED_VIEW) { Log.d(TAG, "updateHeight: bubble=" + getBubbleKey() + " height=" + height + " mNeedsNewHeight=" + mNeedsNewHeight); } } } Loading @@ -974,10 +952,6 @@ public class BubbleExpandedView extends LinearLayout { * waiting for layout. */ public void updateView(int[] containerLocationOnScreen) { if (DEBUG_BUBBLE_EXPANDED_VIEW) { Log.d(TAG, "updateView: bubble=" + getBubbleKey()); } mExpandedViewContainerLocation = containerLocationOnScreen; updateHeight(); if (mTaskView != null Loading Loading @@ -1103,9 +1077,6 @@ public class BubbleExpandedView extends LinearLayout { /** Hide the task view. */ public void cleanUpExpandedState() { if (DEBUG_BUBBLE_EXPANDED_VIEW) { Log.d(TAG, "cleanUpExpandedState: bubble=" + getBubbleKey() + " task=" + mTaskId); } if (mTaskView != null) { mTaskView.setVisibility(GONE); } Loading