diff options
| author | 2021-02-03 11:58:40 +0000 | |
|---|---|---|
| committer | 2021-02-03 11:58:40 +0000 | |
| commit | e89f8f970dd455b62db42ceabccaf5d9895bbb85 (patch) | |
| tree | f30f053d13839b6f4e170d708b192cb621220957 | |
| parent | 546983419cdf727207bf1cce912d69bda992cfaa (diff) | |
| parent | c4037509bcf627a1c1982f47031a3bbe00b5a6c3 (diff) | |
Merge "Make AmbientState injectable" into sc-dev
9 files changed, 44 insertions, 25 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java index 93156d89e92c..0957f7818daa 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java @@ -69,6 +69,8 @@ import com.android.systemui.statusbar.notification.row.ChannelEditorDialogContro import com.android.systemui.statusbar.notification.row.NotificationGutsManager; import com.android.systemui.statusbar.notification.row.OnUserInteractionCallback; import com.android.systemui.statusbar.notification.row.PriorityOnboardingDialogController; +import com.android.systemui.statusbar.notification.stack.NotificationSectionsManager; +import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.policy.HeadsUpManager; import com.android.systemui.util.leak.LeakDetector; @@ -89,6 +91,10 @@ import dagger.Provides; */ @Module(includes = { NotificationSectionHeadersModule.class }) public interface NotificationsModule { + @Binds + StackScrollAlgorithm.SectionProvider bindSectionProvider( + NotificationSectionsManager impl); + /** Provides an instance of {@link NotificationEntryManager} */ @SysUISingleton @Provides diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java index a12179cdb0f8..756fe6c5ba24 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java @@ -22,6 +22,7 @@ import android.content.Context; import android.util.MathUtils; import com.android.systemui.R; +import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.statusbar.NotificationShelf; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.notification.collection.NotificationEntry; @@ -30,9 +31,12 @@ import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.notification.row.ExpandableView; import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm.SectionProvider; +import javax.inject.Inject; + /** * A global state to track all input states for the algorithm. */ +@SysUISingleton public class AmbientState { private static final float MAX_PULSE_HEIGHT = 100000f; @@ -83,6 +87,7 @@ public class AmbientState { /** Tracks the state from AlertingNotificationManager#hasNotifications() */ private boolean mHasAlertEntries; + @Inject public AmbientState( Context context, @NonNull SectionProvider sectionProvider) { @@ -98,7 +103,7 @@ public class AmbientState { mBaseZHeight = getBaseHeight(mZDistanceBetweenElements); } - void setIsShadeOpening(boolean isOpening) { + public void setIsShadeOpening(boolean isOpening) { mIsShadeOpening = isOpening; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java index 3f3be4465bb9..2c7c5cc91120 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java @@ -491,7 +491,8 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable NotificationSectionsManager notificationSectionsManager, GroupMembershipManager groupMembershipManager, GroupExpansionManager groupExpansionManager, - SysuiStatusBarStateController statusbarStateController + SysuiStatusBarStateController statusbarStateController, + AmbientState ambientState ) { super(context, attrs, 0, 0); Resources res = getResources(); @@ -500,7 +501,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable mSectionsManager.initialize(this, LayoutInflater.from(context)); mSections = mSectionsManager.createSectionsForBuckets(); - mAmbientState = new AmbientState(context, mSectionsManager); + mAmbientState = ambientState; mBgColor = Utils.getColorAttr(mContext, android.R.attr.colorBackgroundFloating) .getDefaultColor(); int minHeight = res.getDimensionPixelSize(R.dimen.notification_min_height); @@ -549,10 +550,6 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable } } - void setIsShadeOpening(boolean isOpening) { - mAmbientState.setIsShadeOpening(isOpening); - } - void setSectionPadding(float margin) { mAmbientState.setSectionPadding(margin); requestChildrenUpdate(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java index 879dad8dbb92..175e046141f6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java @@ -271,10 +271,6 @@ public class NotificationStackScrollLayoutController { } }; - public void setIsShadeOpening(boolean isOpening) { - mView.setIsShadeOpening(isOpening); - } - public void setSectionPadding(float padding) { mView.setSectionPadding(padding); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java index a5284f1421a7..cf4e9bea3982 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java @@ -120,6 +120,7 @@ import com.android.systemui.statusbar.notification.collection.render.ShadeViewMa import com.android.systemui.statusbar.notification.row.ActivatableNotificationView; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; import com.android.systemui.statusbar.notification.row.ExpandableView; +import com.android.systemui.statusbar.notification.stack.AmbientState; import com.android.systemui.statusbar.notification.stack.AnimationProperties; import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout; import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController; @@ -552,10 +553,12 @@ public class NotificationPanelViewController extends PanelViewController { AuthController authController, QSDetailDisplayer qsDetailDisplayer, ScrimController scrimController, - MediaDataManager mediaDataManager) { + MediaDataManager mediaDataManager, + AmbientState ambientState) { super(view, falsingManager, dozeLog, keyguardStateController, (SysuiStatusBarStateController) statusBarStateController, vibratorHelper, - latencyTracker, flingAnimationUtilsBuilder.get(), statusBarTouchableRegionManager); + latencyTracker, flingAnimationUtilsBuilder.get(), statusBarTouchableRegionManager, + ambientState); mView = view; mMetricsLogger = metricsLogger; mActivityManager = activityManager; @@ -2411,11 +2414,6 @@ public class NotificationPanelViewController extends PanelViewController { } @Override - protected void setIsShadeOpening(boolean isOpening) { - mNotificationStackScrollLayoutController.setIsShadeOpening(isOpening); - } - - @Override public void setSectionPadding(float padding) { if (padding == mSectionPadding) { return; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java index bee0cb126031..28cfe214dd3a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java @@ -53,7 +53,7 @@ public abstract class PanelBar extends FrameLayout { if (DEBUG) LOG("go state: %d -> %d", mState, state); mState = state; if (mPanel != null) { - mPanel.setIsShadeOpening(state == STATE_OPENING); + mPanel.getAmbientState().setIsShadeOpening(state == STATE_OPENING); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java index 3031b8a87ab2..55744f94f2b0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java @@ -27,6 +27,7 @@ import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.animation.ValueAnimator; +import android.annotation.Nullable; import android.content.res.Configuration; import android.content.res.Resources; import android.os.SystemClock; @@ -54,6 +55,7 @@ import com.android.systemui.plugins.FalsingManager; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.VibratorHelper; +import com.android.systemui.statusbar.notification.stack.AmbientState; import com.android.systemui.statusbar.phone.LockscreenGestureLogger.LockscreenUiEvent; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.wm.shell.animation.FlingAnimationUtils; @@ -145,6 +147,9 @@ public abstract class PanelViewController { private float mInitialTouchX; private boolean mTouchDisabled; + // AmbientState will never be null since it provides an @Inject constructor for Dagger to call. + private AmbientState mAmbientState; + /** * Whether or not the PanelView can be expanded or collapsed with a drag. */ @@ -223,13 +228,19 @@ public abstract class PanelViewController { mJustPeeked = true; } + protected AmbientState getAmbientState() { + return mAmbientState; + } + public PanelViewController(PanelView view, FalsingManager falsingManager, DozeLog dozeLog, KeyguardStateController keyguardStateController, SysuiStatusBarStateController statusBarStateController, VibratorHelper vibratorHelper, LatencyTracker latencyTracker, FlingAnimationUtils.Builder flingAnimationUtilsBuilder, - StatusBarTouchableRegionManager statusBarTouchableRegionManager) { + StatusBarTouchableRegionManager statusBarTouchableRegionManager, + AmbientState ambientState) { + mAmbientState = ambientState; mView = view; mView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { @Override @@ -776,8 +787,6 @@ public abstract class PanelViewController { */ protected abstract boolean isTrackingBlocked(); - protected abstract void setIsShadeOpening(boolean isShadeOpening); - protected abstract void setSectionPadding(float padding); protected abstract void setOverExpansion(float overExpansion, boolean isPixels); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java index ceb4d84fe6aa..461f64eda6e5 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java @@ -83,6 +83,7 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase { private NotificationStackScrollLayout mStackScroller; // Normally test this private NotificationStackScrollLayout mStackScrollerInternal; // See explanation below + private AmbientState mAmbientState; @Rule public MockitoRule mockito = MockitoJUnit.rule(); @Mock private StatusBar mBar; @@ -123,6 +124,9 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase { }); when(mRemoteInputManager.getController()).thenReturn(mRemoteInputController); + // Interact with real instance of AmbientState. + mAmbientState = new AmbientState(mContext, mNotificationSectionsManager); + // The actual class under test. You may need to work with this class directly when // testing anonymous class members of mStackScroller, like mMenuEventListener, // which refer to members of NotificationStackScrollLayout. The spy @@ -134,7 +138,8 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase { mNotificationSectionsManager, mGroupMembershipManger, mGroupExpansionManager, - mStatusBarStateController + mStatusBarStateController, + mAmbientState ); mStackScrollerInternal.initView(getContext(), mKeyguardBypassEnabledProvider, mNotificationSwipeHelper); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java index aa7143e6c549..8d4470bb1cb6 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewTest.java @@ -80,6 +80,7 @@ import com.android.systemui.statusbar.notification.DynamicPrivacyController; import com.android.systemui.statusbar.notification.NotificationEntryManager; import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator; import com.android.systemui.statusbar.notification.collection.legacy.NotificationGroupManagerLegacy; +import com.android.systemui.statusbar.notification.stack.AmbientState; import com.android.systemui.statusbar.notification.stack.NotificationRoundnessManager; import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout; import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController; @@ -202,7 +203,8 @@ public class NotificationPanelViewTest extends SysuiTestCase { private ScrimController mScrimController; @Mock private MediaDataManager mMediaDataManager; - + @Mock + private AmbientState mAmbientState; private NotificationPanelViewController mNotificationPanelViewController; private View.AccessibilityDelegate mAccessibiltyDelegate; @@ -282,7 +284,8 @@ public class NotificationPanelViewTest extends SysuiTestCase { mAuthController, new QSDetailDisplayer(), mScrimController, - mMediaDataManager); + mMediaDataManager, + mAmbientState); mNotificationPanelViewController.initDependencies( mStatusBar, mNotificationShelfController); |