Merge "Inject NPVC into ShadeControllerImpl" into udc-qpr-dev

This commit is contained in:
Treehugger Robot
2023-07-12 18:08:32 +00:00
committed by Android (Google) Code Review
11 changed files with 87 additions and 38 deletions

View File

@@ -18,6 +18,7 @@ package com.android.systemui.dagger;
import com.android.systemui.globalactions.ShutdownUiModule;
import com.android.systemui.keyguard.CustomizationProvider;
import com.android.systemui.shade.ShadeModule;
import com.android.systemui.statusbar.NotificationInsetsModule;
import com.android.systemui.statusbar.QsFrameTranslateModule;
@@ -32,6 +33,7 @@ import dagger.Subcomponent;
DependencyProvider.class,
NotificationInsetsModule.class,
QsFrameTranslateModule.class,
ShadeModule.class,
ShutdownUiModule.class,
SystemUIBinder.class,
SystemUIModule.class,

View File

@@ -82,7 +82,6 @@ import com.android.systemui.screenshot.dagger.ScreenshotModule;
import com.android.systemui.security.data.repository.SecurityRepositoryModule;
import com.android.systemui.settings.DisplayTracker;
import com.android.systemui.shade.ShadeController;
import com.android.systemui.shade.ShadeModule;
import com.android.systemui.shade.transition.LargeScreenShadeInterpolator;
import com.android.systemui.shade.transition.LargeScreenShadeInterpolatorImpl;
import com.android.systemui.shared.condition.Monitor;
@@ -199,7 +198,6 @@ import javax.inject.Named;
SecurityRepositoryModule.class,
ScreenRecordModule.class,
SettingsUtilModule.class,
ShadeModule.class,
SmartRepliesInflationModule.class,
SmartspaceModule.class,
StatusBarPipelineModule.class,

View File

@@ -18,6 +18,7 @@ package com.android.systemui.shade;
import android.view.MotionEvent;
import com.android.systemui.CoreStartable;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.NotificationPresenter;
import com.android.systemui.statusbar.StatusBarState;
@@ -31,7 +32,7 @@ import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
* these are coordinated with {@link StatusBarKeyguardViewManager} via
* {@link com.android.systemui.keyguard.KeyguardViewMediator} and others.
*/
public interface ShadeController {
public interface ShadeController extends CoreStartable {
/** Make our window larger and the shade expanded */
void instantExpandShade();
@@ -164,17 +165,14 @@ public interface ShadeController {
void onLaunchAnimationEnd(boolean launchIsFullScreen);
/** Sets the listener for when the visibility of the shade changes. */
default void setVisibilityListener(ShadeVisibilityListener listener) {};
default void setVisibilityListener(ShadeVisibilityListener listener) {}
/** */
default void setNotificationPresenter(NotificationPresenter presenter) {};
default void setNotificationPresenter(NotificationPresenter presenter) {}
/** */
default void setNotificationShadeWindowViewController(
NotificationShadeWindowViewController notificationShadeWindowViewController) {};
/** */
default void setShadeViewController(ShadeViewController shadeViewController) {};
NotificationShadeWindowViewController notificationShadeWindowViewController) {}
/** Listens for shade visibility changes. */
interface ShadeVisibilityListener {

View File

@@ -1,3 +1,19 @@
/*
* Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.systemui.shade
import android.view.MotionEvent
@@ -7,6 +23,7 @@ import javax.inject.Inject
/** Empty implementation of ShadeController for variants of Android without shades. */
@SysUISingleton
open class ShadeControllerEmptyImpl @Inject constructor() : ShadeController {
override fun start() {}
override fun instantExpandShade() {}
override fun instantCollapseShade() {}
override fun animateCollapseShade(

View File

@@ -63,6 +63,7 @@ public final class ShadeControllerImpl implements ShadeController {
private final StatusBarWindowController mStatusBarWindowController;
private final DeviceProvisionedController mDeviceProvisionedController;
private final Lazy<ShadeViewController> mShadeViewControllerLazy;
private final Lazy<AssistManager> mAssistManagerLazy;
private final Lazy<NotificationGutsManager> mGutsManager;
@@ -70,8 +71,6 @@ public final class ShadeControllerImpl implements ShadeController {
private boolean mExpandedVisible;
// TODO(b/237661616): Rename this variable to mShadeViewController.
private ShadeViewController mNotificationPanelViewController;
private NotificationPresenter mPresenter;
private NotificationShadeWindowViewController mNotificationShadeWindowViewController;
private ShadeVisibilityListener mShadeVisibilityListener;
@@ -87,11 +86,13 @@ public final class ShadeControllerImpl implements ShadeController {
DeviceProvisionedController deviceProvisionedController,
NotificationShadeWindowController notificationShadeWindowController,
WindowManager windowManager,
Lazy<ShadeViewController> shadeViewControllerLazy,
Lazy<AssistManager> assistManagerLazy,
Lazy<NotificationGutsManager> gutsManager
) {
mCommandQueue = commandQueue;
mMainExecutor = mainExecutor;
mShadeViewControllerLazy = shadeViewControllerLazy;
mStatusBarStateController = statusBarStateController;
mStatusBarWindowController = statusBarWindowController;
mDeviceProvisionedController = deviceProvisionedController;
@@ -107,7 +108,7 @@ public final class ShadeControllerImpl implements ShadeController {
public void instantExpandShade() {
// Make our window larger and the panel expanded.
makeExpandedVisible(true /* force */);
mNotificationPanelViewController.expand(false /* animate */);
getShadeViewController().expand(false /* animate */);
mCommandQueue.recomputeDisableFlags(mDisplayId, false /* animate */);
}
@@ -123,13 +124,13 @@ public final class ShadeControllerImpl implements ShadeController {
"animateCollapse(): mExpandedVisible=" + mExpandedVisible + "flags=" + flags);
}
if (getNotificationShadeWindowView() != null
&& mNotificationPanelViewController.canBeCollapsed()
&& getShadeViewController().canBeCollapsed()
&& (flags & CommandQueue.FLAG_EXCLUDE_NOTIFICATION_PANEL) == 0) {
// release focus immediately to kick off focus change transition
mNotificationShadeWindowController.setNotificationShadeFocusable(false);
mNotificationShadeWindowViewController.cancelExpandHelper();
mNotificationPanelViewController.collapse(true, delayed, speedUpFactor);
getShadeViewController().collapse(true, delayed, speedUpFactor);
}
}
@@ -138,7 +139,7 @@ public final class ShadeControllerImpl implements ShadeController {
if (!mCommandQueue.panelsEnabled()) {
return;
}
mNotificationPanelViewController.expandToNotifications();
getShadeViewController().expandToNotifications();
}
@Override
@@ -149,12 +150,12 @@ public final class ShadeControllerImpl implements ShadeController {
// Settings are not available in setup
if (!mDeviceProvisionedController.isCurrentUserSetup()) return;
mNotificationPanelViewController.expandToQs();
getShadeViewController().expandToQs();
}
@Override
public boolean closeShadeIfOpen() {
if (!mNotificationPanelViewController.isFullyCollapsed()) {
if (!getShadeViewController().isFullyCollapsed()) {
mCommandQueue.animateCollapsePanels(
CommandQueue.FLAG_EXCLUDE_RECENTS_PANEL, true /* force */);
notifyVisibilityChanged(false);
@@ -170,12 +171,12 @@ public final class ShadeControllerImpl implements ShadeController {
@Override
public boolean isShadeFullyOpen() {
return mNotificationPanelViewController.isShadeFullyExpanded();
return getShadeViewController().isShadeFullyExpanded();
}
@Override
public boolean isExpandingOrCollapsing() {
return mNotificationPanelViewController.isExpandingOrCollapsing();
return getShadeViewController().isExpandingOrCollapsing();
}
@Override
public void postAnimateCollapseShade() {
@@ -194,13 +195,13 @@ public final class ShadeControllerImpl implements ShadeController {
@Override
public void postOnShadeExpanded(Runnable executable) {
mNotificationPanelViewController.addOnGlobalLayoutListener(
getShadeViewController().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (getNotificationShadeWindowView().isVisibleToUser()) {
mNotificationPanelViewController.removeOnGlobalLayoutListener(this);
mNotificationPanelViewController.postToView(executable);
getShadeViewController().removeOnGlobalLayoutListener(this);
getShadeViewController().postToView(executable);
}
}
});
@@ -224,7 +225,7 @@ public final class ShadeControllerImpl implements ShadeController {
@Override
public boolean collapseShade() {
if (!mNotificationPanelViewController.isFullyCollapsed()) {
if (!getShadeViewController().isFullyCollapsed()) {
// close the shade if it was open
animateCollapseShadeForcedDelayed();
notifyVisibilityChanged(false);
@@ -252,10 +253,10 @@ public final class ShadeControllerImpl implements ShadeController {
@Override
public void cancelExpansionAndCollapseShade() {
if (mNotificationPanelViewController.isTracking()) {
if (getShadeViewController().isTracking()) {
mNotificationShadeWindowViewController.cancelCurrentTouch();
}
if (mNotificationPanelViewController.isPanelExpanded()
if (getShadeViewController().isPanelExpanded()
&& mStatusBarStateController.getState() == StatusBarState.SHADE) {
animateCollapseShade();
}
@@ -311,7 +312,7 @@ public final class ShadeControllerImpl implements ShadeController {
@Override
public void instantCollapseShade() {
mNotificationPanelViewController.instantCollapse();
getShadeViewController().instantCollapse();
runPostCollapseRunnables();
}
@@ -342,7 +343,7 @@ public final class ShadeControllerImpl implements ShadeController {
}
// Ensure the panel is fully collapsed (just in case; bug 6765842, 7260868)
mNotificationPanelViewController.collapse(false, false, 1.0f);
getShadeViewController().collapse(false, false, 1.0f);
mExpandedVisible = false;
notifyVisibilityChanged(false);
@@ -364,7 +365,7 @@ public final class ShadeControllerImpl implements ShadeController {
notifyExpandedVisibleChanged(false);
mCommandQueue.recomputeDisableFlags(
mDisplayId,
mNotificationPanelViewController.shouldHideStatusBarIconsWhenExpanded());
getShadeViewController().shouldHideStatusBarIconsWhenExpanded());
// Trimming will happen later if Keyguard is showing - doing it here might cause a jank in
// the bouncer appear animation.
@@ -406,11 +407,14 @@ public final class ShadeControllerImpl implements ShadeController {
return mNotificationShadeWindowViewController.getView();
}
private ShadeViewController getShadeViewController() {
return mShadeViewControllerLazy.get();
}
@Override
public void setShadeViewController(ShadeViewController shadeViewController) {
mNotificationPanelViewController = shadeViewController;
mNotificationPanelViewController.setTrackingStartedListener(this::runPostCollapseRunnables);
mNotificationPanelViewController.setOpenCloseListener(
public void start() {
getShadeViewController().setTrackingStartedListener(this::runPostCollapseRunnables);
getShadeViewController().setOpenCloseListener(
new OpenCloseListener() {
@Override
public void onClosingFinished() {

View File

@@ -65,7 +65,7 @@ import javax.inject.Named
import javax.inject.Provider
/** Module for classes related to the notification shade. */
@Module
@Module(includes = [StartShadeModule::class])
abstract class ShadeModule {
@Binds

View File

@@ -0,0 +1,31 @@
/*
* Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.systemui.shade
import com.android.systemui.CoreStartable
import dagger.Binds
import dagger.Module
import dagger.multibindings.ClassKey
import dagger.multibindings.IntoMap
@Module
internal abstract class StartShadeModule {
@Binds
@IntoMap
@ClassKey(ShadeController::class)
abstract fun bind(shadeController: ShadeController): CoreStartable
}

View File

@@ -1613,7 +1613,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
// (Right now, there's a circular dependency.)
mNotificationShadeWindowController.setWindowRootView(windowRootView);
mNotificationShadeWindowViewController.setupExpandedStatusBar();
mShadeController.setShadeViewController(mShadeSurface);
mShadeController.setNotificationShadeWindowViewController(
mNotificationShadeWindowViewController);
mBackActionInteractor.setup(mQsController, mShadeSurface);

View File

@@ -45,7 +45,7 @@ import com.android.systemui.screenshot.ReferenceScreenshotModule;
import com.android.systemui.settings.dagger.MultiUserUtilsModule;
import com.android.systemui.shade.NotificationShadeWindowControllerImpl;
import com.android.systemui.shade.ShadeController;
import com.android.systemui.shade.ShadeControllerImpl;
import com.android.systemui.shade.ShadeControllerEmptyImpl;
import com.android.systemui.shade.ShadeExpansionStateManager;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.NotificationListener;
@@ -138,7 +138,7 @@ public abstract class TvSystemUIModule {
abstract DockManager bindDockManager(DockManagerImpl dockManager);
@Binds
abstract ShadeController provideShadeController(ShadeControllerImpl shadeController);
abstract ShadeController provideShadeController(ShadeControllerEmptyImpl shadeController);
@SysUISingleton
@Provides

View File

@@ -78,11 +78,11 @@ class ShadeControllerImplTest : SysuiTestCase() {
deviceProvisionedController,
notificationShadeWindowController,
windowManager,
Lazy { shadeViewController },
Lazy { assistManager },
Lazy { gutsManager },
)
shadeController.setNotificationShadeWindowViewController(nswvc)
shadeController.setShadeViewController(shadeViewController)
}
@Test

View File

@@ -447,10 +447,10 @@ public class CentralSurfacesImplTest extends SysuiTestCase {
mDeviceProvisionedController,
mNotificationShadeWindowController,
mContext.getSystemService(WindowManager.class),
() -> mNotificationPanelViewController,
() -> mAssistManager,
() -> mNotificationGutsManager
));
mShadeController.setShadeViewController(mNotificationPanelViewController);
mShadeController.setNotificationShadeWindowViewController(
mNotificationShadeWindowViewController);
mShadeController.setNotificationPresenter(mNotificationPresenter);