Introduce BubbleModule and KeyguardModule
This CL is the 4th in the series of CLs which intend to "unbind" StatusBar on TV. In order to make StatusBar really optional and thus to allow us to unbind it, we also need to make some of the classes that depends on it optional as well. For all these cases we need to move from @Inject-annotated contructors to @Provides annotated methods. For this we are introducing BubbleModule and KeyguardModule. Change-Id: I57009153e2279078ac88c42a53d3963a96eb8452 Test: make SystemUI; atest SystemUITests Bug: 146188087
This commit is contained in:
@@ -17,8 +17,10 @@
|
||||
package com.android.systemui;
|
||||
|
||||
import com.android.systemui.biometrics.AuthController;
|
||||
import com.android.systemui.bubbles.dagger.BubbleModule;
|
||||
import com.android.systemui.globalactions.GlobalActionsComponent;
|
||||
import com.android.systemui.keyguard.KeyguardViewMediator;
|
||||
import com.android.systemui.keyguard.dagger.KeyguardModule;
|
||||
import com.android.systemui.navigationbar.car.CarNavigationBar;
|
||||
import com.android.systemui.pip.PipUI;
|
||||
import com.android.systemui.power.PowerUI;
|
||||
@@ -43,7 +45,8 @@ import dagger.multibindings.ClassKey;
|
||||
import dagger.multibindings.IntoMap;
|
||||
|
||||
/** Binder for car specific {@link SystemUI} modules. */
|
||||
@Module(includes = {RecentsModule.class, CarStatusBarModule.class, NotificationsModule.class})
|
||||
@Module(includes = {RecentsModule.class, CarStatusBarModule.class, NotificationsModule.class,
|
||||
BubbleModule.class, KeyguardModule.class})
|
||||
public abstract class CarSystemUIBinder {
|
||||
/** Inject into AuthController. */
|
||||
@Binds
|
||||
|
||||
@@ -72,9 +72,7 @@ import com.android.internal.statusbar.NotificationVisibility;
|
||||
import com.android.systemui.DumpController;
|
||||
import com.android.systemui.Dumpable;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.bubbles.BubbleController.BubbleExpandListener;
|
||||
import com.android.systemui.bubbles.BubbleController.BubbleStateChangeListener;
|
||||
import com.android.systemui.bubbles.BubbleController.NotifCallback;
|
||||
import com.android.systemui.bubbles.dagger.BubbleModule;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.shared.system.ActivityManagerWrapper;
|
||||
import com.android.systemui.shared.system.PinnedStackListenerForwarder;
|
||||
@@ -105,16 +103,12 @@ import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
/**
|
||||
* Bubbles are a special type of content that can "float" on top of other apps or System UI.
|
||||
* Bubbles can be expanded to show more content.
|
||||
*
|
||||
* The controller manages addition, removal, and visible state of bubbles on screen.
|
||||
*/
|
||||
@Singleton
|
||||
public class BubbleController implements ConfigurationController.ConfigurationListener, Dumpable {
|
||||
|
||||
private static final String TAG = TAG_WITH_CLASS_NAME ? "BubbleController" : TAG_BUBBLES;
|
||||
@@ -277,7 +271,6 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
|
||||
}
|
||||
}
|
||||
|
||||
@Inject
|
||||
public BubbleController(Context context,
|
||||
NotificationShadeWindowController notificationShadeWindowController,
|
||||
StatusBarStateController statusBarStateController,
|
||||
@@ -298,6 +291,9 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
|
||||
notifPipeline, featureFlags, dumpController);
|
||||
}
|
||||
|
||||
/**
|
||||
* Injected constructor. See {@link BubbleModule}.
|
||||
*/
|
||||
public BubbleController(Context context,
|
||||
NotificationShadeWindowController notificationShadeWindowController,
|
||||
StatusBarStateController statusBarStateController,
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
/*
|
||||
* Copyright (C) 2020 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.bubbles.dagger;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.android.systemui.DumpController;
|
||||
import com.android.systemui.bubbles.BubbleController;
|
||||
import com.android.systemui.bubbles.BubbleData;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.statusbar.FeatureFlags;
|
||||
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
|
||||
import com.android.systemui.statusbar.notification.NotificationEntryManager;
|
||||
import com.android.systemui.statusbar.notification.NotificationInterruptionStateProvider;
|
||||
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
|
||||
import com.android.systemui.statusbar.phone.NotificationGroupManager;
|
||||
import com.android.systemui.statusbar.phone.NotificationShadeWindowController;
|
||||
import com.android.systemui.statusbar.phone.ShadeController;
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||
import com.android.systemui.statusbar.policy.ZenModeController;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
|
||||
/** */
|
||||
@Module
|
||||
public interface BubbleModule {
|
||||
|
||||
/**
|
||||
*/
|
||||
@Singleton
|
||||
@Provides
|
||||
static BubbleController newBubbleController(
|
||||
Context context,
|
||||
NotificationShadeWindowController notificationShadeWindowController,
|
||||
StatusBarStateController statusBarStateController,
|
||||
ShadeController shadeController,
|
||||
BubbleData data,
|
||||
ConfigurationController configurationController,
|
||||
NotificationInterruptionStateProvider interruptionStateProvider,
|
||||
ZenModeController zenModeController,
|
||||
NotificationLockscreenUserManager notifUserManager,
|
||||
NotificationGroupManager groupManager,
|
||||
NotificationEntryManager entryManager,
|
||||
NotifPipeline notifPipeline,
|
||||
FeatureFlags featureFlags,
|
||||
DumpController dumpController) {
|
||||
return new BubbleController(
|
||||
context,
|
||||
notificationShadeWindowController,
|
||||
statusBarStateController,
|
||||
shadeController,
|
||||
data,
|
||||
/* synchronizer */null,
|
||||
configurationController,
|
||||
interruptionStateProvider,
|
||||
zenModeController,
|
||||
notifUserManager,
|
||||
groupManager,
|
||||
entryManager,
|
||||
notifPipeline,
|
||||
featureFlags,
|
||||
dumpController);
|
||||
}
|
||||
}
|
||||
@@ -24,8 +24,10 @@ import com.android.systemui.SystemUI;
|
||||
import com.android.systemui.accessibility.SystemActions;
|
||||
import com.android.systemui.accessibility.WindowMagnification;
|
||||
import com.android.systemui.biometrics.AuthController;
|
||||
import com.android.systemui.bubbles.dagger.BubbleModule;
|
||||
import com.android.systemui.globalactions.GlobalActionsComponent;
|
||||
import com.android.systemui.keyguard.KeyguardViewMediator;
|
||||
import com.android.systemui.keyguard.dagger.KeyguardModule;
|
||||
import com.android.systemui.pip.PipUI;
|
||||
import com.android.systemui.power.PowerUI;
|
||||
import com.android.systemui.recents.Recents;
|
||||
@@ -49,7 +51,8 @@ import dagger.multibindings.IntoMap;
|
||||
/**
|
||||
* SystemUI objects that are injectable should go here.
|
||||
*/
|
||||
@Module(includes = {RecentsModule.class, StatusBarModule.class})
|
||||
@Module(includes = {RecentsModule.class, StatusBarModule.class, BubbleModule.class,
|
||||
KeyguardModule.class})
|
||||
public abstract class SystemUIBinder {
|
||||
/** Inject into AuthController. */
|
||||
@Binds
|
||||
|
||||
@@ -86,6 +86,7 @@ import com.android.systemui.SystemUI;
|
||||
import com.android.systemui.SystemUIFactory;
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
import com.android.systemui.dagger.qualifiers.UiBackground;
|
||||
import com.android.systemui.keyguard.dagger.KeyguardModule;
|
||||
import com.android.systemui.plugins.FalsingManager;
|
||||
import com.android.systemui.statusbar.phone.BiometricUnlockController;
|
||||
import com.android.systemui.statusbar.phone.KeyguardBypassController;
|
||||
@@ -100,9 +101,6 @@ import java.io.PrintWriter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import dagger.Lazy;
|
||||
|
||||
/**
|
||||
@@ -146,7 +144,6 @@ import dagger.Lazy;
|
||||
* directly to the keyguard UI is posted to a {@link android.os.Handler} to ensure it is taken on the UI
|
||||
* thread of the keyguard.
|
||||
*/
|
||||
@Singleton
|
||||
public class KeyguardViewMediator extends SystemUI {
|
||||
private static final int KEYGUARD_DISPLAY_TIMEOUT_DELAY_DEFAULT = 30000;
|
||||
private static final long KEYGUARD_DONE_PENDING_TIMEOUT_MS = 3000;
|
||||
@@ -688,7 +685,9 @@ public class KeyguardViewMediator extends SystemUI {
|
||||
}
|
||||
};
|
||||
|
||||
@Inject
|
||||
/**
|
||||
* Injected constructor. See {@link KeyguardModule}.
|
||||
*/
|
||||
public KeyguardViewMediator(
|
||||
Context context,
|
||||
FalsingManager falsingManager,
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
* Copyright (C) 2020 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.keyguard.dagger;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.android.internal.widget.LockPatternUtils;
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
import com.android.systemui.dagger.qualifiers.UiBackground;
|
||||
import com.android.systemui.keyguard.DismissCallbackRegistry;
|
||||
import com.android.systemui.keyguard.KeyguardViewMediator;
|
||||
import com.android.systemui.plugins.FalsingManager;
|
||||
import com.android.systemui.statusbar.phone.NotificationShadeWindowController;
|
||||
import com.android.systemui.statusbar.phone.StatusBar;
|
||||
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import dagger.Lazy;
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
|
||||
/**
|
||||
* Dagger Module providing {@link StatusBar}.
|
||||
*/
|
||||
@Module
|
||||
public class KeyguardModule {
|
||||
/**
|
||||
* Provides our instance of KeyguardViewMediator which is considered optional.
|
||||
*/
|
||||
@Provides
|
||||
@Singleton
|
||||
public static KeyguardViewMediator newKeyguardViewMediator(
|
||||
Context context,
|
||||
FalsingManager falsingManager,
|
||||
LockPatternUtils lockPatternUtils,
|
||||
BroadcastDispatcher broadcastDispatcher,
|
||||
NotificationShadeWindowController notificationShadeWindowController,
|
||||
Lazy<StatusBarKeyguardViewManager> statusBarKeyguardViewManagerLazy,
|
||||
DismissCallbackRegistry dismissCallbackRegistry,
|
||||
@UiBackground Executor uiBgExecutor) {
|
||||
return new KeyguardViewMediator(
|
||||
context,
|
||||
falsingManager,
|
||||
lockPatternUtils,
|
||||
broadcastDispatcher,
|
||||
notificationShadeWindowController,
|
||||
statusBarKeyguardViewManagerLazy,
|
||||
dismissCallbackRegistry,
|
||||
uiBgExecutor);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user