Merge "Make new, private dynamic color resources accessible from Java" into main
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java
index 5995462..37ba63e 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java
@@ -286,57 +286,15 @@
@ShellBackgroundThread ShellExecutor bgExecutor,
ShellInit shellInit,
IWindowManager windowManager,
- ShellCommandHandler shellCommandHandler,
ShellTaskOrganizer taskOrganizer,
- @DynamicOverride DesktopRepository desktopRepository,
DisplayController displayController,
- ShellController shellController,
- DisplayInsetsController displayInsetsController,
SyncTransactionQueue syncQueue,
Transitions transitions,
- Optional<DesktopTasksController> desktopTasksController,
RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer,
- InteractionJankMonitor interactionJankMonitor,
- AppToWebGenericLinksParser genericLinksParser,
- AssistContentRequester assistContentRequester,
- MultiInstanceHelper multiInstanceHelper,
- Optional<DesktopTasksLimiter> desktopTasksLimiter,
- AppHandleEducationController appHandleEducationController,
- AppToWebEducationController appToWebEducationController,
- WindowDecorCaptionHandleRepository windowDecorCaptionHandleRepository,
- Optional<DesktopActivityOrientationChangeHandler> desktopActivityOrientationHandler,
FocusTransitionObserver focusTransitionObserver,
- DesktopModeEventLogger desktopModeEventLogger) {
- if (DesktopModeStatus.canEnterDesktopModeOrShowAppHandle(context)) {
- return new DesktopModeWindowDecorViewModel(
- context,
- mainExecutor,
- mainHandler,
- mainChoreographer,
- bgExecutor,
- shellInit,
- shellCommandHandler,
- windowManager,
- taskOrganizer,
- desktopRepository,
- displayController,
- shellController,
- displayInsetsController,
- syncQueue,
- transitions,
- desktopTasksController,
- rootTaskDisplayAreaOrganizer,
- interactionJankMonitor,
- genericLinksParser,
- assistContentRequester,
- multiInstanceHelper,
- desktopTasksLimiter,
- appHandleEducationController,
- appToWebEducationController,
- windowDecorCaptionHandleRepository,
- desktopActivityOrientationHandler,
- focusTransitionObserver,
- desktopModeEventLogger);
+ Optional<DesktopModeWindowDecorViewModel> desktopModeWindowDecorViewModel) {
+ if (desktopModeWindowDecorViewModel.isPresent()) {
+ return desktopModeWindowDecorViewModel.get();
}
return new CaptionWindowDecorViewModel(
context,
@@ -908,7 +866,7 @@
Context context,
@ShellMainThread ShellExecutor shellExecutor,
@ShellMainThread Handler mainHandler,
- Choreographer mainChoreographer,
+ @ShellMainThread Choreographer mainChoreographer,
@ShellBackgroundThread ShellExecutor bgExecutor,
ShellInit shellInit,
ShellCommandHandler shellCommandHandler,
@@ -934,7 +892,7 @@
FocusTransitionObserver focusTransitionObserver,
DesktopModeEventLogger desktopModeEventLogger
) {
- if (!DesktopModeStatus.canEnterDesktopMode(context)) {
+ if (!DesktopModeStatus.canEnterDesktopModeOrShowAppHandle(context)) {
return Optional.empty();
}
return Optional.of(new DesktopModeWindowDecorViewModel(context, shellExecutor, mainHandler,
diff --git a/packages/Shell/aconfig/wear.aconfig b/packages/Shell/aconfig/wear.aconfig
index e07bd96..d88fd46 100644
--- a/packages/Shell/aconfig/wear.aconfig
+++ b/packages/Shell/aconfig/wear.aconfig
@@ -5,5 +5,5 @@
name: "handle_bugreports_for_wear"
namespace: "wear_services"
description: "This flag enables Shell to propagate bugreport results to WearServices."
- bug: "378060870"
+ bug: "338029043"
}
\ No newline at end of file
diff --git a/packages/SystemUI/aconfig/systemui.aconfig b/packages/SystemUI/aconfig/systemui.aconfig
index c82c63c7..ae168cd 100644
--- a/packages/SystemUI/aconfig/systemui.aconfig
+++ b/packages/SystemUI/aconfig/systemui.aconfig
@@ -1780,6 +1780,16 @@
}
flag {
+ name: "notification_reentrant_dismiss"
+ namespace: "systemui"
+ description: "Posts to avoid a crashing reentrant pipeline run"
+ bug: "328328054"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
+flag {
name: "stoppable_fgs_system_app"
namespace: "systemui"
description: "System app with foreground service can opt in to be stoppable."
diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/TransitionAnimator.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/TransitionAnimator.kt
index de4bdbc..e2bc409 100644
--- a/packages/SystemUI/animation/src/com/android/systemui/animation/TransitionAnimator.kt
+++ b/packages/SystemUI/animation/src/com/android/systemui/animation/TransitionAnimator.kt
@@ -114,16 +114,16 @@
)
}
- internal fun assertReturnAnimations() {
+ fun assertReturnAnimations() {
check(returnAnimationsEnabled()) {
"isLaunching cannot be false when the returnAnimationFrameworkLibrary flag " +
"is disabled"
}
}
- internal fun returnAnimationsEnabled() = returnAnimationFrameworkLibrary()
+ fun returnAnimationsEnabled() = returnAnimationFrameworkLibrary()
- internal fun assertLongLivedReturnAnimations() {
+ fun assertLongLivedReturnAnimations() {
check(longLivedReturnAnimationsEnabled()) {
"Long-lived registrations cannot be used when the " +
"returnAnimationFrameworkLibrary or the " +
@@ -131,7 +131,7 @@
}
}
- internal fun longLivedReturnAnimationsEnabled() =
+ fun longLivedReturnAnimationsEnabled() =
returnAnimationFrameworkLibrary() && returnAnimationFrameworkLongLived()
internal fun WindowAnimationState.toTransitionState() =
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java
index 94a19c8..ed31f36 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java
@@ -349,6 +349,7 @@
@Mock private KeyguardClockPositionAlgorithm mKeyguardClockPositionAlgorithm;
@Mock private NaturalScrollingSettingObserver mNaturalScrollingSettingObserver;
@Mock private LargeScreenHeaderHelper mLargeScreenHeaderHelper;
+ @Mock private StatusBarLongPressGestureDetector mStatusBarLongPressGestureDetector;
protected final int mMaxUdfpsBurnInOffsetY = 5;
protected FakeFeatureFlagsClassic mFeatureFlags = new FakeFeatureFlagsClassic();
protected KeyguardBottomAreaInteractor mKeyguardBottomAreaInteractor;
@@ -819,6 +820,7 @@
mNotificationShadeDepthController,
mShadeHeaderController,
mStatusBarTouchableRegionManager,
+ () -> mStatusBarLongPressGestureDetector,
mKeyguardStateController,
mKeyguardBypassController,
mScrimController,
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/QuickSettingsControllerImplBaseTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/QuickSettingsControllerImplBaseTest.java
index ef132d5..61d4c99 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/QuickSettingsControllerImplBaseTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/QuickSettingsControllerImplBaseTest.java
@@ -126,6 +126,7 @@
@Mock protected NotificationShadeDepthController mNotificationShadeDepthController;
@Mock protected ShadeHeaderController mShadeHeaderController;
@Mock protected StatusBarTouchableRegionManager mStatusBarTouchableRegionManager;
+ @Mock protected StatusBarLongPressGestureDetector mStatusBarLongPressGestureDetector;
@Mock protected DozeParameters mDozeParameters;
@Mock protected KeyguardStateController mKeyguardStateController;
@Mock protected KeyguardBypassController mKeyguardBypassController;
@@ -250,6 +251,7 @@
mNotificationShadeDepthController,
mShadeHeaderController,
mStatusBarTouchableRegionManager,
+ () -> mStatusBarLongPressGestureDetector,
mKeyguardStateController,
mKeyguardBypassController,
mScrimController,
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/BaseHeadsUpManagerTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/BaseHeadsUpManagerTest.java
index abb3e6e..0fbee6d 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/BaseHeadsUpManagerTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/BaseHeadsUpManagerTest.java
@@ -321,7 +321,7 @@
BaseHeadsUpManager.HeadsUpEntry.class);
headsUpEntry.mEntry = notifEntry;
- hum.onEntryRemoved(headsUpEntry);
+ hum.onEntryRemoved(headsUpEntry, "test");
verify(mLogger, times(1)).logNotificationActuallyRemoved(eq(notifEntry));
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/HeadsUpManagerPhoneTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/HeadsUpManagerPhoneTest.kt
index 8ebdbaa..6175e05 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/HeadsUpManagerPhoneTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/HeadsUpManagerPhoneTest.kt
@@ -82,7 +82,6 @@
private val mJavaAdapter: JavaAdapter = JavaAdapter(testScope.backgroundScope)
@Mock private lateinit var mShadeInteractor: ShadeInteractor
-
@Mock private lateinit var dumpManager: DumpManager
private lateinit var mAvalancheController: AvalancheController
@@ -205,6 +204,25 @@
assertThat(hmp.mEntriesToRemoveWhenReorderingAllowed.contains(notifEntry)).isTrue()
}
+ class TestAnimationStateHandler : AnimationStateHandler {
+ override fun setHeadsUpGoingAwayAnimationsAllowed(allowed: Boolean) {}
+ }
+
+ @Test
+ @EnableFlags(NotificationThrottleHun.FLAG_NAME)
+ fun testReorderingAllowed_clearsListOfEntriesToRemove() {
+ whenever(mVSProvider.isReorderingAllowed).thenReturn(true)
+ val hmp = createHeadsUpManagerPhone()
+
+ val notifEntry = HeadsUpManagerTestUtil.createEntry(/* id= */ 0, mContext)
+ hmp.showNotification(notifEntry)
+ assertThat(hmp.mEntriesToRemoveWhenReorderingAllowed.contains(notifEntry)).isTrue()
+
+ hmp.setAnimationStateHandler(TestAnimationStateHandler())
+ hmp.mOnReorderingAllowedListener.onReorderingAllowed()
+ assertThat(hmp.mEntriesToRemoveWhenReorderingAllowed.isEmpty()).isTrue()
+ }
+
@Test
@EnableFlags(NotificationThrottleHun.FLAG_NAME)
fun testShowNotification_reorderNotAllowed_seenInShadeTrue() {
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/RecentsAnimationControllerCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/RecentsAnimationControllerCompat.java
index 76af813..7d220b5 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/RecentsAnimationControllerCompat.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/RecentsAnimationControllerCompat.java
@@ -18,9 +18,11 @@
import android.os.RemoteException;
import android.util.Log;
+import android.view.RemoteAnimationTarget;
import android.view.SurfaceControl;
import android.window.PictureInPictureSurfaceTransaction;
import android.window.TaskSnapshot;
+import android.window.WindowAnimationState;
import com.android.internal.os.IResultReceiver;
import com.android.systemui.shared.recents.model.ThumbnailData;
@@ -107,6 +109,17 @@
}
/**
+ * @see IRecentsAnimationController#handOffAnimation
+ */
+ public void handOffAnimation(RemoteAnimationTarget[] targets, WindowAnimationState[] states) {
+ try {
+ mAnimationController.handOffAnimation(targets, states);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Failed to hand off animation", e);
+ }
+ }
+
+ /**
* @see IRecentsAnimationController#detachNavigationBarFromApp
*/
public void detachNavigationBarFromApp(boolean moveHomeToTop) {
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
index 4ccd2b9..42a756c 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
@@ -3109,17 +3109,20 @@
if (isTracking()) {
onTrackingStopped(true);
}
- if (isExpanded() && mBarState != KEYGUARD && !mQsController.getExpanded()) {
- mShadeLog.d("Status Bar was long pressed. Expanding to QS.");
- expandToQs();
- } else {
- if (mBarState == KEYGUARD) {
- mShadeLog.d("Lockscreen Status Bar was long pressed. Expanding to Notifications.");
- mLockscreenShadeTransitionController.goToLockedShade(
- /* expandedView= */null, /* needsQSAnimation= */false);
+ if (!mQsController.getExpanded()) {
+ performHapticFeedback(HapticFeedbackConstants.GESTURE_START);
+ if (isExpanded() && mBarState != KEYGUARD) {
+ mShadeLog.d("Status Bar was long pressed. Expanding to QS.");
+ mQsController.flingQs(0, FLING_EXPAND);
} else {
- mShadeLog.d("Status Bar was long pressed. Expanding to Notifications.");
- expandToNotifications();
+ if (mBarState == KEYGUARD) {
+ mShadeLog.d("Lockscreen Status Bar was long pressed. Expanding to Notifications.");
+ mLockscreenShadeTransitionController.goToLockedShade(
+ /* expandedView= */null, /* needsQSAnimation= */true);
+ } else {
+ mShadeLog.d("Status Bar was long pressed. Expanding to Notifications.");
+ expandToNotifications();
+ }
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsControllerImpl.java b/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsControllerImpl.java
index 830649b..04f89be 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsControllerImpl.java
@@ -114,6 +114,7 @@
import java.io.PrintWriter;
import javax.inject.Inject;
+import javax.inject.Provider;
/** Handles QuickSettings touch handling, expansion and animation state
* TODO (b/264460656) make this dumpable
@@ -141,6 +142,7 @@
private final NotificationShadeDepthController mDepthController;
private final ShadeHeaderController mShadeHeaderController;
private final StatusBarTouchableRegionManager mStatusBarTouchableRegionManager;
+ private final Provider<StatusBarLongPressGestureDetector> mStatusBarLongPressGestureDetector;
private final KeyguardStateController mKeyguardStateController;
private final KeyguardBypassController mKeyguardBypassController;
private final NotificationRemoteInputManager mRemoteInputManager;
@@ -316,6 +318,7 @@
NotificationShadeDepthController notificationShadeDepthController,
ShadeHeaderController shadeHeaderController,
StatusBarTouchableRegionManager statusBarTouchableRegionManager,
+ Provider<StatusBarLongPressGestureDetector> statusBarLongPressGestureDetector,
KeyguardStateController keyguardStateController,
KeyguardBypassController keyguardBypassController,
ScrimController scrimController,
@@ -364,6 +367,7 @@
mDepthController = notificationShadeDepthController;
mShadeHeaderController = shadeHeaderController;
mStatusBarTouchableRegionManager = statusBarTouchableRegionManager;
+ mStatusBarLongPressGestureDetector = statusBarLongPressGestureDetector;
mKeyguardStateController = keyguardStateController;
mKeyguardBypassController = keyguardBypassController;
mScrimController = scrimController;
@@ -1648,6 +1652,10 @@
if (isSplitShadeAndTouchXOutsideQs(event.getX())) {
return false;
}
+ boolean isInStatusBar = event.getY(event.getActionIndex()) < mStatusBarMinHeight;
+ if (ShadeExpandsOnStatusBarLongPress.isEnabled() && isInStatusBar) {
+ mStatusBarLongPressGestureDetector.get().handleTouch(event);
+ }
final int action = event.getActionMasked();
boolean collapsedQs = !getExpanded() && !mSplitShadeEnabled;
boolean expandedShadeCollapsedQs = mShadeExpandedFraction == 1f
@@ -1684,9 +1692,7 @@
if (action == MotionEvent.ACTION_DOWN && isFullyCollapsed && isExpansionEnabled()) {
mTwoFingerExpandPossible = true;
}
- if (mTwoFingerExpandPossible && isOpenQsEvent(event)
- && event.getY(event.getActionIndex())
- < mStatusBarMinHeight) {
+ if (mTwoFingerExpandPossible && isOpenQsEvent(event) && isInStatusBar) {
mMetricsLogger.count(COUNTER_PANEL_OPEN_QS, 1);
setExpandImmediate(true);
mNotificationStackScrollLayoutController.setShouldShowShelfOnly(!mSplitShadeEnabled);
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 d1de6be..bda9e06 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
@@ -19,6 +19,7 @@
import static android.app.Notification.Action.SEMANTIC_ACTION_MARK_CONVERSATION_AS_PRIORITY;
import static android.service.notification.NotificationListenerService.REASON_CANCEL;
+import static com.android.systemui.flags.Flags.ENABLE_NOTIFICATIONS_SIMULATE_SLOW_MEASURE;
import static com.android.systemui.statusbar.notification.collection.NotificationEntry.DismissState.PARENT_DISMISSED;
import static com.android.systemui.statusbar.notification.row.NotificationContentView.VISIBLE_TYPE_HEADSUP;
import static com.android.systemui.statusbar.policy.RemoteInputView.FOCUS_ANIMATION_MIN_SCALE;
@@ -75,8 +76,8 @@
import com.android.internal.util.ContrastColorUtil;
import com.android.internal.widget.CachingIconView;
import com.android.internal.widget.CallLayout;
+import com.android.systemui.Flags;
import com.android.systemui.flags.FeatureFlags;
-import com.android.systemui.flags.Flags;
import com.android.systemui.flags.RefactorFlag;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.PluginListener;
@@ -293,7 +294,7 @@
private static boolean shouldSimulateSlowMeasure() {
return Compile.IS_DEBUG && RefactorFlag.forView(
- Flags.ENABLE_NOTIFICATIONS_SIMULATE_SLOW_MEASURE).isEnabled();
+ ENABLE_NOTIFICATIONS_SIMULATE_SLOW_MEASURE).isEnabled();
}
private static final String SLOW_MEASURE_SIMULATE_DELAY_PROPERTY =
@@ -1679,7 +1680,13 @@
dismiss(fromAccessibility);
if (canEntryBeDismissed()) {
if (mOnUserInteractionCallback != null) {
- mOnUserInteractionCallback.registerFutureDismissal(mEntry, REASON_CANCEL).run();
+ if (Flags.notificationReentrantDismiss()) {
+ Runnable futureDismissal = mOnUserInteractionCallback.registerFutureDismissal(
+ mEntry, REASON_CANCEL);
+ post(futureDismissal);
+ } else {
+ mOnUserInteractionCallback.registerFutureDismissal(mEntry, REASON_CANCEL).run();
+ }
}
}
}
@@ -1986,7 +1993,7 @@
mColorUpdateLogger = colorUpdateLogger;
mDismissibilityProvider = dismissibilityProvider;
mFeatureFlags = featureFlags;
- setHapticFeedbackEnabled(!com.android.systemui.Flags.msdlFeedback());
+ setHapticFeedbackEnabled(!Flags.msdlFeedback());
}
private void initDimens() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
index 80c8e8b..db29493 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
@@ -171,14 +171,12 @@
import com.android.systemui.shade.NotificationShadeWindowViewController;
import com.android.systemui.shade.QuickSettingsController;
import com.android.systemui.shade.ShadeController;
-import com.android.systemui.shade.ShadeExpandsOnStatusBarLongPress;
import com.android.systemui.shade.ShadeExpansionChangeEvent;
import com.android.systemui.shade.ShadeExpansionListener;
import com.android.systemui.shade.ShadeExpansionStateManager;
import com.android.systemui.shade.ShadeLogger;
import com.android.systemui.shade.ShadeSurface;
import com.android.systemui.shade.ShadeViewController;
-import com.android.systemui.shade.StatusBarLongPressGestureDetector;
import com.android.systemui.shared.recents.utilities.Utilities;
import com.android.systemui.shared.statusbar.phone.BarTransitions;
import com.android.systemui.statusbar.AutoHideUiElement;
@@ -368,7 +366,6 @@
private PhoneStatusBarViewController mPhoneStatusBarViewController;
private PhoneStatusBarTransitions mStatusBarTransitions;
- private final Provider<StatusBarLongPressGestureDetector> mStatusBarLongPressGestureDetector;
private final AuthRippleController mAuthRippleController;
@WindowVisibleState private int mStatusBarWindowState = WINDOW_STATE_SHOWING;
private final NotificationShadeWindowController mNotificationShadeWindowController;
@@ -674,7 +671,6 @@
ShadeController shadeController,
WindowRootViewVisibilityInteractor windowRootViewVisibilityInteractor,
StatusBarKeyguardViewManager statusBarKeyguardViewManager,
- Provider<StatusBarLongPressGestureDetector> statusBarLongPressGestureDetector,
ViewMediatorCallback viewMediatorCallback,
InitController initController,
@Named(TIME_TICK_HANDLER_NAME) Handler timeTickHandler,
@@ -782,7 +778,6 @@
mShadeController = shadeController;
mWindowRootViewVisibilityInteractor = windowRootViewVisibilityInteractor;
mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
- mStatusBarLongPressGestureDetector = statusBarLongPressGestureDetector;
mKeyguardViewMediatorCallback = viewMediatorCallback;
mInitController = initController;
mPluginDependencyProvider = pluginDependencyProvider;
@@ -1532,11 +1527,6 @@
// to touch outside the customizer to close it, such as on the status or nav bar.
mShadeController.onStatusBarTouch(event);
}
- if (ShadeExpandsOnStatusBarLongPress.isEnabled()
- && mStatusBarStateController.getState() == StatusBarState.KEYGUARD) {
- mStatusBarLongPressGestureDetector.get().handleTouch(event);
- }
-
return getNotificationShadeWindowView().onTouchEvent(event);
};
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BaseHeadsUpManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BaseHeadsUpManager.java
index f6f567f..298ef7e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BaseHeadsUpManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BaseHeadsUpManager.java
@@ -88,7 +88,7 @@
implements HeadsUpManager, HeadsUpRepository, OnHeadsUpChangedListener {
private static final String TAG = "BaseHeadsUpManager";
private static final String SETTING_HEADS_UP_SNOOZE_LENGTH_MS = "heads_up_snooze_length_ms";
-
+ private static final String REASON_REORDER_ALLOWED = "mOnReorderingAllowedListener";
protected final ListenerSet<OnHeadsUpChangedListener> mListeners = new ListenerSet<>();
protected final Context mContext;
@@ -633,7 +633,7 @@
}
entry.demoteStickyHun();
mHeadsUpEntryMap.remove(key);
- onEntryRemoved(finalHeadsUpEntry);
+ onEntryRemoved(finalHeadsUpEntry, reason);
// TODO(b/328390331) move accessibility events to the view layer
entry.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED);
if (NotificationThrottleHun.isEnabled()) {
@@ -648,8 +648,9 @@
/**
* Manager-specific logic that should occur when an entry is removed.
* @param headsUpEntry entry removed
+ * @param reason why onEntryRemoved was called
*/
- protected void onEntryRemoved(HeadsUpEntry headsUpEntry) {
+ protected void onEntryRemoved(HeadsUpEntry headsUpEntry, String reason) {
NotificationEntry entry = headsUpEntry.mEntry;
entry.setHeadsUp(false);
setEntryPinned(headsUpEntry, false /* isPinned */, "onEntryRemoved");
@@ -664,10 +665,17 @@
updateTopHeadsUpFlow();
updateHeadsUpFlow();
if (NotificationThrottleHun.isEnabled()) {
- if (headsUpEntry.mEntry != null) {
- if (mEntriesToRemoveWhenReorderingAllowed.contains(headsUpEntry.mEntry)) {
- mEntriesToRemoveWhenReorderingAllowed.remove(headsUpEntry.mEntry);
- }
+ NotificationEntry notifEntry = headsUpEntry.mEntry;
+ if (notifEntry == null) {
+ return;
+ }
+ // If reorder was just allowed and we called onEntryRemoved while iterating over
+ // mEntriesToRemoveWhenReorderingAllowed, we should not remove from this list (and cause
+ // ArrayIndexOutOfBoundsException). We don't need to in this case anyway, because we
+ // clear mEntriesToRemoveWhenReorderingAllowed after removing these entries.
+ if (!reason.equals(REASON_REORDER_ALLOWED)
+ && mEntriesToRemoveWhenReorderingAllowed.contains(notifEntry)) {
+ mEntriesToRemoveWhenReorderingAllowed.remove(notifEntry);
}
}
}
@@ -1135,7 +1143,8 @@
&& Notification.CATEGORY_CALL.equals(n.category));
}
- private final OnReorderingAllowedListener mOnReorderingAllowedListener = () -> {
+ @VisibleForTesting
+ public final OnReorderingAllowedListener mOnReorderingAllowedListener = () -> {
if (NotificationThrottleHun.isEnabled()) {
mAvalancheController.setEnableAtRuntime(true);
if (mEntriesToRemoveWhenReorderingAllowed.isEmpty()) {
@@ -1146,7 +1155,7 @@
for (NotificationEntry entry : mEntriesToRemoveWhenReorderingAllowed) {
if (entry != null && isHeadsUpEntry(entry.getKey())) {
// Maybe the heads-up was removed already
- removeEntry(entry.getKey(), "mOnReorderingAllowedListener");
+ removeEntry(entry.getKey(), REASON_REORDER_ALLOWED);
}
}
mEntriesToRemoveWhenReorderingAllowed.clear();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowTest.java
index e313a05..d8a23d6 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowTest.java
@@ -45,6 +45,7 @@
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;
import android.os.UserHandle;
+import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.testing.TestableLooper;
import android.testing.TestableLooper.RunWithLooper;
@@ -551,12 +552,26 @@
}
@Test
+ @DisableFlags(com.android.systemui.Flags.FLAG_NOTIFICATION_REENTRANT_DISMISS)
+ public void testCanDismiss_immediately() throws Exception {
+ ExpandableNotificationRow row =
+ mNotificationTestHelper.createRow(mNotificationTestHelper.createNotification());
+ when(mNotificationTestHelper.getDismissibilityProvider().isDismissable(row.getEntry()))
+ .thenReturn(true);
+ row.performDismiss(false);
+ verify(mNotificationTestHelper.getOnUserInteractionCallback())
+ .registerFutureDismissal(any(), anyInt());
+ }
+
+ @Test
+ @EnableFlags(com.android.systemui.Flags.FLAG_NOTIFICATION_REENTRANT_DISMISS)
public void testCanDismiss() throws Exception {
ExpandableNotificationRow row =
mNotificationTestHelper.createRow(mNotificationTestHelper.createNotification());
when(mNotificationTestHelper.getDismissibilityProvider().isDismissable(row.getEntry()))
.thenReturn(true);
row.performDismiss(false);
+ TestableLooper.get(this).processAllMessages();
verify(mNotificationTestHelper.getOnUserInteractionCallback())
.registerFutureDismissal(any(), anyInt());
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java
index b142fc2..c9f8463 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java
@@ -607,7 +607,6 @@
mShadeController,
mWindowRootViewVisibilityInteractor,
mStatusBarKeyguardViewManager,
- () -> mStatusBarLongPressGestureDetector,
mViewMediatorCallback,
mInitController,
new Handler(TestableLooper.get(this).getLooper()),
diff --git a/tests/FlickerTests/AppLaunch/src/com/android/server/wm/flicker/launch/ActivityTransitionTest.kt b/tests/FlickerTests/AppLaunch/src/com/android/server/wm/flicker/launch/ActivityTransitionTest.kt
index 01cdbb8..e59b6bd 100644
--- a/tests/FlickerTests/AppLaunch/src/com/android/server/wm/flicker/launch/ActivityTransitionTest.kt
+++ b/tests/FlickerTests/AppLaunch/src/com/android/server/wm/flicker/launch/ActivityTransitionTest.kt
@@ -35,7 +35,7 @@
/**
* Test the back and forward transition between 2 activities.
*
- * To run this test: `atest FlickerTestsAppLaunch:ActivitiesTransitionTest`
+ * To run this test: `atest FlickerTestsAppLaunch:ActivityTransitionTest`
*
* Actions:
* ```
diff --git a/tests/FlickerTests/AppLaunch/src/com/android/server/wm/flicker/launch/OpenAppFromIconColdTest.kt b/tests/FlickerTests/AppLaunch/src/com/android/server/wm/flicker/launch/OpenAppFromIconColdTest.kt
index 3d9321c..2bf8cc4 100644
--- a/tests/FlickerTests/AppLaunch/src/com/android/server/wm/flicker/launch/OpenAppFromIconColdTest.kt
+++ b/tests/FlickerTests/AppLaunch/src/com/android/server/wm/flicker/launch/OpenAppFromIconColdTest.kt
@@ -30,7 +30,7 @@
/**
* Test cold launching an app from launcher
*
- * To run this test: `atest FlickerTestsAppLaunch:OpenAppColdFromIcon`
+ * To run this test: `atest FlickerTestsAppLaunch:OpenAppFromIconColdTest`
*
* Actions:
* ```
diff --git a/tests/FlickerTests/AppLaunch/src/com/android/server/wm/flicker/launch/OpenAppFromIntentColdAfterCameraTest.kt b/tests/FlickerTests/AppLaunch/src/com/android/server/wm/flicker/launch/OpenAppFromIntentColdAfterCameraTest.kt
index 9207530..9c6bf9d 100644
--- a/tests/FlickerTests/AppLaunch/src/com/android/server/wm/flicker/launch/OpenAppFromIntentColdAfterCameraTest.kt
+++ b/tests/FlickerTests/AppLaunch/src/com/android/server/wm/flicker/launch/OpenAppFromIntentColdAfterCameraTest.kt
@@ -30,7 +30,7 @@
/**
* Test launching an app after cold opening camera
*
- * To run this test: `atest FlickerTestsAppLaunch:OpenAppAfterCameraTest`
+ * To run this test: `atest FlickerTestsAppLaunch:OpenAppFromIntentColdAfterCameraTest`
*
* Notes: Some default assertions are inherited [OpenAppTransition]
*/
diff --git a/tests/FlickerTests/AppLaunch/src/com/android/server/wm/flicker/launch/OpenAppFromIntentColdTest.kt b/tests/FlickerTests/AppLaunch/src/com/android/server/wm/flicker/launch/OpenAppFromIntentColdTest.kt
index cbe7c32..1a53a61 100644
--- a/tests/FlickerTests/AppLaunch/src/com/android/server/wm/flicker/launch/OpenAppFromIntentColdTest.kt
+++ b/tests/FlickerTests/AppLaunch/src/com/android/server/wm/flicker/launch/OpenAppFromIntentColdTest.kt
@@ -35,7 +35,7 @@
/**
* Test cold launching an app from launcher
*
- * To run this test: `atest FlickerTestsAppLaunch:OpenAppColdTest`
+ * To run this test: `atest FlickerTestsAppLaunch:OpenAppFromIntentColdTest`
*
* Actions:
* ```
diff --git a/tests/FlickerTests/AppLaunch/src/com/android/server/wm/flicker/launch/OpenAppFromIntentWarmTest.kt b/tests/FlickerTests/AppLaunch/src/com/android/server/wm/flicker/launch/OpenAppFromIntentWarmTest.kt
index b2941e7..14b6a18 100644
--- a/tests/FlickerTests/AppLaunch/src/com/android/server/wm/flicker/launch/OpenAppFromIntentWarmTest.kt
+++ b/tests/FlickerTests/AppLaunch/src/com/android/server/wm/flicker/launch/OpenAppFromIntentWarmTest.kt
@@ -34,7 +34,7 @@
/**
* Test warm launching an app from launcher
*
- * To run this test: `atest FlickerTestsAppLaunch:OpenAppWarmTest`
+ * To run this test: `atest FlickerTestsAppLaunch:OpenAppFromIntentWarmTest`
*
* Actions:
* ```
diff --git a/tests/FlickerTests/AppLaunch/src/com/android/server/wm/flicker/launch/OpenAppFromLockscreenViaIntentTest.kt b/tests/FlickerTests/AppLaunch/src/com/android/server/wm/flicker/launch/OpenAppFromLockscreenViaIntentTest.kt
index 4048e0c..f30fe96 100644
--- a/tests/FlickerTests/AppLaunch/src/com/android/server/wm/flicker/launch/OpenAppFromLockscreenViaIntentTest.kt
+++ b/tests/FlickerTests/AppLaunch/src/com/android/server/wm/flicker/launch/OpenAppFromLockscreenViaIntentTest.kt
@@ -41,7 +41,7 @@
*
* This test assumes the device doesn't have AOD enabled
*
- * To run this test: `atest FlickerTestsAppLaunch:OpenAppNonResizeableTest`
+ * To run this test: `atest FlickerTestsAppLaunch:OpenAppFromLockscreenViaIntentTest`
*
* Actions:
* ```
diff --git a/tests/FlickerTests/AppLaunch/src/com/android/server/wm/flicker/launch/OpenCameraFromHomeOnDoubleClickPowerButtonTest.kt b/tests/FlickerTests/AppLaunch/src/com/android/server/wm/flicker/launch/OpenCameraFromHomeOnDoubleClickPowerButtonTest.kt
index 7a6bb0d..9c552eb 100644
--- a/tests/FlickerTests/AppLaunch/src/com/android/server/wm/flicker/launch/OpenCameraFromHomeOnDoubleClickPowerButtonTest.kt
+++ b/tests/FlickerTests/AppLaunch/src/com/android/server/wm/flicker/launch/OpenCameraFromHomeOnDoubleClickPowerButtonTest.kt
@@ -41,7 +41,7 @@
/**
* Test cold launching camera from launcher by double pressing power button
*
- * To run this test: `atest FlickerTestsAppLaunch:OpenCameraOnDoubleClickPowerButton`
+ * To run this test: `atest FlickerTestsAppLaunch:OpenCameraFromHomeOnDoubleClickPowerButtonTest`
*
* Actions:
* ```