Merge "[Status Bar Refactor] Inject NotificationPanelViewController into CollapsedStatusBarFragment." into sc-v2-dev-plus-aosp
This commit is contained in:
committed by
Android (Google) Code Review
commit
3153178eee
@@ -42,7 +42,6 @@ import com.android.systemui.util.leak.LeakDetector;
|
|||||||
import java.io.FileDescriptor;
|
import java.io.FileDescriptor;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
@@ -308,22 +307,22 @@ public class FragmentHostManager {
|
|||||||
return instantiateWithInjections(context, className, arguments);
|
return instantiateWithInjections(context, className, arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Fragment instantiateWithInjections(Context context, String className,
|
private Fragment instantiateWithInjections(
|
||||||
Bundle args) {
|
Context context, String className, Bundle args) {
|
||||||
Method method = mManager.getInjectionMap().get(className);
|
FragmentService.FragmentInstantiationInfo fragmentInstantiationInfo =
|
||||||
if (method != null) {
|
mManager.getInjectionMap().get(className);
|
||||||
|
if (fragmentInstantiationInfo != null) {
|
||||||
try {
|
try {
|
||||||
Fragment f = (Fragment) method.invoke(mManager.getFragmentCreator());
|
Fragment f = (Fragment) fragmentInstantiationInfo
|
||||||
|
.mMethod
|
||||||
|
.invoke(fragmentInstantiationInfo.mDaggerComponent);
|
||||||
// Setup the args, taken from Fragment#instantiate.
|
// Setup the args, taken from Fragment#instantiate.
|
||||||
if (args != null) {
|
if (args != null) {
|
||||||
args.setClassLoader(f.getClass().getClassLoader());
|
args.setClassLoader(f.getClass().getClassLoader());
|
||||||
f.setArguments(args);
|
f.setArguments(args);
|
||||||
}
|
}
|
||||||
return f;
|
return f;
|
||||||
} catch (IllegalAccessException e) {
|
} catch (IllegalAccessException | InvocationTargetException e) {
|
||||||
throw new Fragment.InstantiationException("Unable to instantiate " + className,
|
|
||||||
e);
|
|
||||||
} catch (InvocationTargetException e) {
|
|
||||||
throw new Fragment.InstantiationException("Unable to instantiate " + className,
|
throw new Fragment.InstantiationException("Unable to instantiate " + className,
|
||||||
e);
|
e);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,13 +18,13 @@ import android.app.Fragment;
|
|||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.util.ArrayMap;
|
import android.util.ArrayMap;
|
||||||
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
import com.android.systemui.Dumpable;
|
import com.android.systemui.Dumpable;
|
||||||
import com.android.systemui.dagger.SysUISingleton;
|
import com.android.systemui.dagger.SysUISingleton;
|
||||||
import com.android.systemui.dump.DumpManager;
|
import com.android.systemui.dump.DumpManager;
|
||||||
import com.android.systemui.qs.QSFragment;
|
import com.android.systemui.qs.QSFragment;
|
||||||
import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment;
|
|
||||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||||
|
|
||||||
import java.io.FileDescriptor;
|
import java.io.FileDescriptor;
|
||||||
@@ -46,9 +46,14 @@ public class FragmentService implements Dumpable {
|
|||||||
private static final String TAG = "FragmentService";
|
private static final String TAG = "FragmentService";
|
||||||
|
|
||||||
private final ArrayMap<View, FragmentHostState> mHosts = new ArrayMap<>();
|
private final ArrayMap<View, FragmentHostState> mHosts = new ArrayMap<>();
|
||||||
private final ArrayMap<String, Method> mInjectionMap = new ArrayMap<>();
|
/**
|
||||||
|
* A map with the means to create fragments via Dagger injection.
|
||||||
|
*
|
||||||
|
* key: the fragment class name.
|
||||||
|
* value: see {@link FragmentInstantiationInfo}.
|
||||||
|
*/
|
||||||
|
private final ArrayMap<String, FragmentInstantiationInfo> mInjectionMap = new ArrayMap<>();
|
||||||
private final Handler mHandler = new Handler();
|
private final Handler mHandler = new Handler();
|
||||||
private final FragmentCreator mFragmentCreator;
|
|
||||||
|
|
||||||
private ConfigurationController.ConfigurationListener mConfigurationListener =
|
private ConfigurationController.ConfigurationListener mConfigurationListener =
|
||||||
new ConfigurationController.ConfigurationListener() {
|
new ConfigurationController.ConfigurationListener() {
|
||||||
@@ -65,26 +70,31 @@ public class FragmentService implements Dumpable {
|
|||||||
FragmentCreator.Factory fragmentCreatorFactory,
|
FragmentCreator.Factory fragmentCreatorFactory,
|
||||||
ConfigurationController configurationController,
|
ConfigurationController configurationController,
|
||||||
DumpManager dumpManager) {
|
DumpManager dumpManager) {
|
||||||
mFragmentCreator = fragmentCreatorFactory.build();
|
addFragmentInstantiationProvider(fragmentCreatorFactory.build());
|
||||||
initInjectionMap();
|
|
||||||
configurationController.addCallback(mConfigurationListener);
|
configurationController.addCallback(mConfigurationListener);
|
||||||
|
|
||||||
dumpManager.registerDumpable(getClass().getSimpleName(), this);
|
dumpManager.registerDumpable(getClass().getSimpleName(), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
ArrayMap<String, Method> getInjectionMap() {
|
ArrayMap<String, FragmentInstantiationInfo> getInjectionMap() {
|
||||||
return mInjectionMap;
|
return mInjectionMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
FragmentCreator getFragmentCreator() {
|
/**
|
||||||
return mFragmentCreator;
|
* Adds a new Dagger component object that provides method(s) to create fragments via injection.
|
||||||
}
|
*/
|
||||||
|
public void addFragmentInstantiationProvider(Object daggerComponent) {
|
||||||
private void initInjectionMap() {
|
for (Method method : daggerComponent.getClass().getDeclaredMethods()) {
|
||||||
for (Method method : FragmentCreator.class.getDeclaredMethods()) {
|
|
||||||
if (Fragment.class.isAssignableFrom(method.getReturnType())
|
if (Fragment.class.isAssignableFrom(method.getReturnType())
|
||||||
&& (method.getModifiers() & Modifier.PUBLIC) != 0) {
|
&& (method.getModifiers() & Modifier.PUBLIC) != 0) {
|
||||||
mInjectionMap.put(method.getReturnType().getName(), method);
|
String fragmentName = method.getReturnType().getName();
|
||||||
|
if (mInjectionMap.containsKey(fragmentName)) {
|
||||||
|
Log.w(TAG, "Fragment " + fragmentName + " is already provided by different"
|
||||||
|
+ " Dagger component; Not adding method");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
mInjectionMap.put(
|
||||||
|
fragmentName, new FragmentInstantiationInfo(method, daggerComponent));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -134,9 +144,6 @@ public class FragmentService implements Dumpable {
|
|||||||
* Inject a QSFragment.
|
* Inject a QSFragment.
|
||||||
*/
|
*/
|
||||||
QSFragment createQSFragment();
|
QSFragment createQSFragment();
|
||||||
|
|
||||||
/** Inject a CollapsedStatusBarFragment. */
|
|
||||||
CollapsedStatusBarFragment createCollapsedStatusBarFragment();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private class FragmentHostState {
|
private class FragmentHostState {
|
||||||
@@ -161,4 +168,16 @@ public class FragmentService implements Dumpable {
|
|||||||
mFragmentHostManager.onConfigurationChanged(newConfig);
|
mFragmentHostManager.onConfigurationChanged(newConfig);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** An object containing the information needed to instantiate a fragment. */
|
||||||
|
static class FragmentInstantiationInfo {
|
||||||
|
/** The method that returns a newly-created fragment of the given class. */
|
||||||
|
final Method mMethod;
|
||||||
|
/** The Dagger component that the method should be invoked on. */
|
||||||
|
final Object mDaggerComponent;
|
||||||
|
FragmentInstantiationInfo(Method method, Object daggerComponent) {
|
||||||
|
this.mMethod = method;
|
||||||
|
this.mDaggerComponent = daggerComponent;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import com.android.systemui.battery.BatteryMeterViewController
|
|||||||
import com.android.systemui.flags.FeatureFlags
|
import com.android.systemui.flags.FeatureFlags
|
||||||
import com.android.systemui.qs.carrier.QSCarrierGroupController
|
import com.android.systemui.qs.carrier.QSCarrierGroupController
|
||||||
import com.android.systemui.statusbar.phone.dagger.StatusBarComponent.StatusBarScope
|
import com.android.systemui.statusbar.phone.dagger.StatusBarComponent.StatusBarScope
|
||||||
|
import com.android.systemui.statusbar.phone.dagger.StatusBarViewModule.SPLIT_SHADE_BATTERY_CONTROLLER
|
||||||
import com.android.systemui.statusbar.phone.dagger.StatusBarViewModule.SPLIT_SHADE_HEADER
|
import com.android.systemui.statusbar.phone.dagger.StatusBarViewModule.SPLIT_SHADE_HEADER
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import javax.inject.Named
|
import javax.inject.Named
|
||||||
@@ -35,7 +36,7 @@ class SplitShadeHeaderController @Inject constructor(
|
|||||||
private val statusBarIconController: StatusBarIconController,
|
private val statusBarIconController: StatusBarIconController,
|
||||||
qsCarrierGroupControllerBuilder: QSCarrierGroupController.Builder,
|
qsCarrierGroupControllerBuilder: QSCarrierGroupController.Builder,
|
||||||
featureFlags: FeatureFlags,
|
featureFlags: FeatureFlags,
|
||||||
batteryMeterViewController: BatteryMeterViewController
|
@Named(SPLIT_SHADE_BATTERY_CONTROLLER) batteryMeterViewController: BatteryMeterViewController
|
||||||
) {
|
) {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|||||||
@@ -150,6 +150,7 @@ import com.android.systemui.emergency.EmergencyGesture;
|
|||||||
import com.android.systemui.flags.FeatureFlags;
|
import com.android.systemui.flags.FeatureFlags;
|
||||||
import com.android.systemui.fragments.ExtensionFragmentListener;
|
import com.android.systemui.fragments.ExtensionFragmentListener;
|
||||||
import com.android.systemui.fragments.FragmentHostManager;
|
import com.android.systemui.fragments.FragmentHostManager;
|
||||||
|
import com.android.systemui.fragments.FragmentService;
|
||||||
import com.android.systemui.keyguard.KeyguardService;
|
import com.android.systemui.keyguard.KeyguardService;
|
||||||
import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
|
import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
|
||||||
import com.android.systemui.keyguard.KeyguardViewMediator;
|
import com.android.systemui.keyguard.KeyguardViewMediator;
|
||||||
@@ -489,7 +490,6 @@ public class StatusBar extends SystemUI implements
|
|||||||
private final DozeParameters mDozeParameters;
|
private final DozeParameters mDozeParameters;
|
||||||
private final Lazy<BiometricUnlockController> mBiometricUnlockControllerLazy;
|
private final Lazy<BiometricUnlockController> mBiometricUnlockControllerLazy;
|
||||||
private final StatusBarComponent.Factory mStatusBarComponentFactory;
|
private final StatusBarComponent.Factory mStatusBarComponentFactory;
|
||||||
private final StatusBarFragmentComponent.Factory mStatusBarFragmentComponentFactory;
|
|
||||||
private final PluginManager mPluginManager;
|
private final PluginManager mPluginManager;
|
||||||
private final Optional<LegacySplitScreen> mSplitScreenOptional;
|
private final Optional<LegacySplitScreen> mSplitScreenOptional;
|
||||||
private final StatusBarNotificationActivityStarter.Builder
|
private final StatusBarNotificationActivityStarter.Builder
|
||||||
@@ -538,7 +538,7 @@ public class StatusBar extends SystemUI implements
|
|||||||
protected final NotificationInterruptStateProvider mNotificationInterruptStateProvider;
|
protected final NotificationInterruptStateProvider mNotificationInterruptStateProvider;
|
||||||
private final BrightnessSliderController.Factory mBrightnessSliderFactory;
|
private final BrightnessSliderController.Factory mBrightnessSliderFactory;
|
||||||
private final FeatureFlags mFeatureFlags;
|
private final FeatureFlags mFeatureFlags;
|
||||||
|
private final FragmentService mFragmentService;
|
||||||
private final WallpaperController mWallpaperController;
|
private final WallpaperController mWallpaperController;
|
||||||
private final KeyguardUnlockAnimationController mKeyguardUnlockAnimationController;
|
private final KeyguardUnlockAnimationController mKeyguardUnlockAnimationController;
|
||||||
private final MessageRouter mMessageRouter;
|
private final MessageRouter mMessageRouter;
|
||||||
@@ -546,6 +546,8 @@ public class StatusBar extends SystemUI implements
|
|||||||
private final UnlockedScreenOffAnimationController mUnlockedScreenOffAnimationController;
|
private final UnlockedScreenOffAnimationController mUnlockedScreenOffAnimationController;
|
||||||
private final TunerService mTunerService;
|
private final TunerService mTunerService;
|
||||||
|
|
||||||
|
private StatusBarComponent mStatusBarComponent;
|
||||||
|
|
||||||
// Flags for disabling the status bar
|
// Flags for disabling the status bar
|
||||||
// Two variables becaseu the first one evidently ran out of room for new flags.
|
// Two variables becaseu the first one evidently ran out of room for new flags.
|
||||||
private int mDisabled1 = 0;
|
private int mDisabled1 = 0;
|
||||||
@@ -690,6 +692,7 @@ public class StatusBar extends SystemUI implements
|
|||||||
public StatusBar(
|
public StatusBar(
|
||||||
Context context,
|
Context context,
|
||||||
NotificationsController notificationsController,
|
NotificationsController notificationsController,
|
||||||
|
FragmentService fragmentService,
|
||||||
LightBarController lightBarController,
|
LightBarController lightBarController,
|
||||||
AutoHideController autoHideController,
|
AutoHideController autoHideController,
|
||||||
StatusBarWindowController statusBarWindowController,
|
StatusBarWindowController statusBarWindowController,
|
||||||
@@ -747,7 +750,6 @@ public class StatusBar extends SystemUI implements
|
|||||||
CommandQueue commandQueue,
|
CommandQueue commandQueue,
|
||||||
CollapsedStatusBarFragmentLogger collapsedStatusBarFragmentLogger,
|
CollapsedStatusBarFragmentLogger collapsedStatusBarFragmentLogger,
|
||||||
StatusBarComponent.Factory statusBarComponentFactory,
|
StatusBarComponent.Factory statusBarComponentFactory,
|
||||||
StatusBarFragmentComponent.Factory statusBarFragmentComponentFactory,
|
|
||||||
PluginManager pluginManager,
|
PluginManager pluginManager,
|
||||||
Optional<LegacySplitScreen> splitScreenOptional,
|
Optional<LegacySplitScreen> splitScreenOptional,
|
||||||
LightsOutNotifController lightsOutNotifController,
|
LightsOutNotifController lightsOutNotifController,
|
||||||
@@ -791,6 +793,7 @@ public class StatusBar extends SystemUI implements
|
|||||||
ActivityLaunchAnimator activityLaunchAnimator) {
|
ActivityLaunchAnimator activityLaunchAnimator) {
|
||||||
super(context);
|
super(context);
|
||||||
mNotificationsController = notificationsController;
|
mNotificationsController = notificationsController;
|
||||||
|
mFragmentService = fragmentService;
|
||||||
mLightBarController = lightBarController;
|
mLightBarController = lightBarController;
|
||||||
mAutoHideController = autoHideController;
|
mAutoHideController = autoHideController;
|
||||||
mStatusBarWindowController = statusBarWindowController;
|
mStatusBarWindowController = statusBarWindowController;
|
||||||
@@ -852,7 +855,6 @@ public class StatusBar extends SystemUI implements
|
|||||||
mCommandQueue = commandQueue;
|
mCommandQueue = commandQueue;
|
||||||
mCollapsedStatusBarFragmentLogger = collapsedStatusBarFragmentLogger;
|
mCollapsedStatusBarFragmentLogger = collapsedStatusBarFragmentLogger;
|
||||||
mStatusBarComponentFactory = statusBarComponentFactory;
|
mStatusBarComponentFactory = statusBarComponentFactory;
|
||||||
mStatusBarFragmentComponentFactory = statusBarFragmentComponentFactory;
|
|
||||||
mPluginManager = pluginManager;
|
mPluginManager = pluginManager;
|
||||||
mSplitScreenOptional = splitScreenOptional;
|
mSplitScreenOptional = splitScreenOptional;
|
||||||
mStatusBarNotificationActivityStarterBuilder = statusBarNotificationActivityStarterBuilder;
|
mStatusBarNotificationActivityStarterBuilder = statusBarNotificationActivityStarterBuilder;
|
||||||
@@ -1184,25 +1186,7 @@ public class StatusBar extends SystemUI implements
|
|||||||
}).getFragmentManager()
|
}).getFragmentManager()
|
||||||
.beginTransaction()
|
.beginTransaction()
|
||||||
.replace(R.id.status_bar_container,
|
.replace(R.id.status_bar_container,
|
||||||
new CollapsedStatusBarFragment(
|
mStatusBarComponent.createCollapsedStatusBarFragment(),
|
||||||
mStatusBarFragmentComponentFactory,
|
|
||||||
mOngoingCallController,
|
|
||||||
mAnimationScheduler,
|
|
||||||
mStatusBarLocationPublisher,
|
|
||||||
mNotificationIconAreaController,
|
|
||||||
mPanelExpansionStateManager,
|
|
||||||
mFeatureFlags,
|
|
||||||
|
|
||||||
() -> Optional.of(this),
|
|
||||||
mStatusBarIconController,
|
|
||||||
mStatusBarHideIconsForBouncerManager,
|
|
||||||
mKeyguardStateController,
|
|
||||||
mNetworkController,
|
|
||||||
mStatusBarStateController,
|
|
||||||
mCommandQueue,
|
|
||||||
mCollapsedStatusBarFragmentLogger,
|
|
||||||
mOperatorNameViewControllerFactory
|
|
||||||
),
|
|
||||||
CollapsedStatusBarFragment.TAG)
|
CollapsedStatusBarFragment.TAG)
|
||||||
.commit();
|
.commit();
|
||||||
|
|
||||||
@@ -1558,32 +1542,34 @@ public class StatusBar extends SystemUI implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void inflateStatusBarWindow() {
|
private void inflateStatusBarWindow() {
|
||||||
StatusBarComponent statusBarComponent = mStatusBarComponentFactory.create();
|
mStatusBarComponent = mStatusBarComponentFactory.create();
|
||||||
mNotificationShadeWindowView = statusBarComponent.getNotificationShadeWindowView();
|
mFragmentService.addFragmentInstantiationProvider(mStatusBarComponent);
|
||||||
mNotificationShadeWindowViewController = statusBarComponent
|
|
||||||
|
mNotificationShadeWindowView = mStatusBarComponent.getNotificationShadeWindowView();
|
||||||
|
mNotificationShadeWindowViewController = mStatusBarComponent
|
||||||
.getNotificationShadeWindowViewController();
|
.getNotificationShadeWindowViewController();
|
||||||
mNotificationShadeWindowController.setNotificationShadeView(mNotificationShadeWindowView);
|
mNotificationShadeWindowController.setNotificationShadeView(mNotificationShadeWindowView);
|
||||||
mNotificationShadeWindowViewController.setupExpandedStatusBar();
|
mNotificationShadeWindowViewController.setupExpandedStatusBar();
|
||||||
mNotificationPanelViewController = statusBarComponent.getNotificationPanelViewController();
|
mNotificationPanelViewController = mStatusBarComponent.getNotificationPanelViewController();
|
||||||
statusBarComponent.getLockIconViewController().init();
|
mStatusBarComponent.getLockIconViewController().init();
|
||||||
mStackScrollerController = statusBarComponent.getNotificationStackScrollLayoutController();
|
mStackScrollerController = mStatusBarComponent.getNotificationStackScrollLayoutController();
|
||||||
mStackScroller = mStackScrollerController.getView();
|
mStackScroller = mStackScrollerController.getView();
|
||||||
|
|
||||||
mNotificationShelfController = statusBarComponent.getNotificationShelfController();
|
mNotificationShelfController = mStatusBarComponent.getNotificationShelfController();
|
||||||
mAuthRippleController = statusBarComponent.getAuthRippleController();
|
mAuthRippleController = mStatusBarComponent.getAuthRippleController();
|
||||||
mAuthRippleController.init();
|
mAuthRippleController.init();
|
||||||
|
|
||||||
mHeadsUpManager.addListener(statusBarComponent.getStatusBarHeadsUpChangeListener());
|
mHeadsUpManager.addListener(mStatusBarComponent.getStatusBarHeadsUpChangeListener());
|
||||||
|
|
||||||
mHeadsUpManager.addListener(statusBarComponent.getStatusBarHeadsUpChangeListener());
|
mHeadsUpManager.addListener(mStatusBarComponent.getStatusBarHeadsUpChangeListener());
|
||||||
|
|
||||||
// Listen for demo mode changes
|
// Listen for demo mode changes
|
||||||
mDemoModeController.addCallback(statusBarComponent.getStatusBarDemoMode());
|
mDemoModeController.addCallback(mStatusBarComponent.getStatusBarDemoMode());
|
||||||
|
|
||||||
if (mCommandQueueCallbacks != null) {
|
if (mCommandQueueCallbacks != null) {
|
||||||
mCommandQueue.removeCallback(mCommandQueueCallbacks);
|
mCommandQueue.removeCallback(mCommandQueueCallbacks);
|
||||||
}
|
}
|
||||||
mCommandQueueCallbacks = statusBarComponent.getStatusBarCommandQueueCallbacks();
|
mCommandQueueCallbacks = mStatusBarComponent.getStatusBarCommandQueueCallbacks();
|
||||||
// Connect in to the status bar manager service
|
// Connect in to the status bar manager service
|
||||||
mCommandQueue.addCallback(mCommandQueueCallbacks);
|
mCommandQueue.addCallback(mCommandQueueCallbacks);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import com.android.systemui.statusbar.phone.SplitShadeHeaderController;
|
|||||||
import com.android.systemui.statusbar.phone.StatusBarCommandQueueCallbacks;
|
import com.android.systemui.statusbar.phone.StatusBarCommandQueueCallbacks;
|
||||||
import com.android.systemui.statusbar.phone.StatusBarDemoMode;
|
import com.android.systemui.statusbar.phone.StatusBarDemoMode;
|
||||||
import com.android.systemui.statusbar.phone.StatusBarHeadsUpChangeListener;
|
import com.android.systemui.statusbar.phone.StatusBarHeadsUpChangeListener;
|
||||||
|
import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment;
|
||||||
|
|
||||||
import java.lang.annotation.Documented;
|
import java.lang.annotation.Documented;
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
@@ -38,7 +39,13 @@ import javax.inject.Scope;
|
|||||||
import dagger.Subcomponent;
|
import dagger.Subcomponent;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dagger subcomponent tied to the lifecycle of StatusBar views.
|
* Dagger subcomponent for classes (semi-)related to the status bar. The component is created once
|
||||||
|
* inside {@link com.android.systemui.statusbar.phone.StatusBar} and never re-created.
|
||||||
|
*
|
||||||
|
* TODO(b/197137564): This should likely be re-factored a bit. It includes classes that aren't
|
||||||
|
* directly related to status bar functionality, like multiple notification classes. And, the fact
|
||||||
|
* that it has many getter methods indicates that we need to access many of these classes from
|
||||||
|
* outside the component. Should more items be moved *into* this component to avoid so many getters?
|
||||||
*/
|
*/
|
||||||
@Subcomponent(modules = {StatusBarViewModule.class})
|
@Subcomponent(modules = {StatusBarViewModule.class})
|
||||||
@StatusBarComponent.StatusBarScope
|
@StatusBarComponent.StatusBarScope
|
||||||
@@ -121,4 +128,10 @@ public interface StatusBarComponent {
|
|||||||
*/
|
*/
|
||||||
@StatusBarScope
|
@StatusBarScope
|
||||||
SplitShadeHeaderController getSplitShadeHeaderController();
|
SplitShadeHeaderController getSplitShadeHeaderController();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new {@link CollapsedStatusBarFragment} each time it's called. See
|
||||||
|
* {@link StatusBarViewModule#createCollapsedStatusBarFragment}.
|
||||||
|
*/
|
||||||
|
CollapsedStatusBarFragment createCollapsedStatusBarFragment();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ import com.android.systemui.dagger.qualifiers.UiBackground;
|
|||||||
import com.android.systemui.demomode.DemoModeController;
|
import com.android.systemui.demomode.DemoModeController;
|
||||||
import com.android.systemui.dump.DumpManager;
|
import com.android.systemui.dump.DumpManager;
|
||||||
import com.android.systemui.flags.FeatureFlags;
|
import com.android.systemui.flags.FeatureFlags;
|
||||||
|
import com.android.systemui.fragments.FragmentService;
|
||||||
import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
|
import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
|
||||||
import com.android.systemui.keyguard.KeyguardViewMediator;
|
import com.android.systemui.keyguard.KeyguardViewMediator;
|
||||||
import com.android.systemui.keyguard.ScreenLifecycle;
|
import com.android.systemui.keyguard.ScreenLifecycle;
|
||||||
@@ -100,7 +101,6 @@ import com.android.systemui.statusbar.phone.StatusBarSignalPolicy;
|
|||||||
import com.android.systemui.statusbar.phone.StatusBarTouchableRegionManager;
|
import com.android.systemui.statusbar.phone.StatusBarTouchableRegionManager;
|
||||||
import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController;
|
import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController;
|
||||||
import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragmentLogger;
|
import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragmentLogger;
|
||||||
import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentComponent;
|
|
||||||
import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController;
|
import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController;
|
||||||
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
|
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
|
||||||
import com.android.systemui.statusbar.policy.BatteryController;
|
import com.android.systemui.statusbar.policy.BatteryController;
|
||||||
@@ -143,6 +143,7 @@ public interface StatusBarPhoneModule {
|
|||||||
static StatusBar provideStatusBar(
|
static StatusBar provideStatusBar(
|
||||||
Context context,
|
Context context,
|
||||||
NotificationsController notificationsController,
|
NotificationsController notificationsController,
|
||||||
|
FragmentService fragmentService,
|
||||||
LightBarController lightBarController,
|
LightBarController lightBarController,
|
||||||
AutoHideController autoHideController,
|
AutoHideController autoHideController,
|
||||||
StatusBarWindowController statusBarWindowController,
|
StatusBarWindowController statusBarWindowController,
|
||||||
@@ -200,7 +201,6 @@ public interface StatusBarPhoneModule {
|
|||||||
CommandQueue commandQueue,
|
CommandQueue commandQueue,
|
||||||
CollapsedStatusBarFragmentLogger collapsedStatusBarFragmentLogger,
|
CollapsedStatusBarFragmentLogger collapsedStatusBarFragmentLogger,
|
||||||
StatusBarComponent.Factory statusBarComponentFactory,
|
StatusBarComponent.Factory statusBarComponentFactory,
|
||||||
StatusBarFragmentComponent.Factory statusBarFragmentComponentFactory,
|
|
||||||
PluginManager pluginManager,
|
PluginManager pluginManager,
|
||||||
Optional<LegacySplitScreen> splitScreenOptional,
|
Optional<LegacySplitScreen> splitScreenOptional,
|
||||||
LightsOutNotifController lightsOutNotifController,
|
LightsOutNotifController lightsOutNotifController,
|
||||||
@@ -245,6 +245,7 @@ public interface StatusBarPhoneModule {
|
|||||||
return new StatusBar(
|
return new StatusBar(
|
||||||
context,
|
context,
|
||||||
notificationsController,
|
notificationsController,
|
||||||
|
fragmentService,
|
||||||
lightBarController,
|
lightBarController,
|
||||||
autoHideController,
|
autoHideController,
|
||||||
statusBarWindowController,
|
statusBarWindowController,
|
||||||
@@ -302,7 +303,6 @@ public interface StatusBarPhoneModule {
|
|||||||
commandQueue,
|
commandQueue,
|
||||||
collapsedStatusBarFragmentLogger,
|
collapsedStatusBarFragmentLogger,
|
||||||
statusBarComponentFactory,
|
statusBarComponentFactory,
|
||||||
statusBarFragmentComponentFactory,
|
|
||||||
pluginManager,
|
pluginManager,
|
||||||
splitScreenOptional,
|
splitScreenOptional,
|
||||||
lightsOutNotifController,
|
lightsOutNotifController,
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
package com.android.systemui.statusbar.phone.dagger;
|
package com.android.systemui.statusbar.phone.dagger;
|
||||||
|
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
|
import android.content.ContentResolver;
|
||||||
|
import android.os.Handler;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewStub;
|
import android.view.ViewStub;
|
||||||
@@ -24,19 +26,45 @@ import android.view.ViewStub;
|
|||||||
import com.android.keyguard.LockIconView;
|
import com.android.keyguard.LockIconView;
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
import com.android.systemui.battery.BatteryMeterView;
|
import com.android.systemui.battery.BatteryMeterView;
|
||||||
|
import com.android.systemui.battery.BatteryMeterViewController;
|
||||||
import com.android.systemui.biometrics.AuthRippleView;
|
import com.android.systemui.biometrics.AuthRippleView;
|
||||||
|
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||||
|
import com.android.systemui.dagger.qualifiers.Main;
|
||||||
import com.android.systemui.flags.FeatureFlags;
|
import com.android.systemui.flags.FeatureFlags;
|
||||||
|
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||||
|
import com.android.systemui.statusbar.CommandQueue;
|
||||||
import com.android.systemui.statusbar.NotificationShelf;
|
import com.android.systemui.statusbar.NotificationShelf;
|
||||||
import com.android.systemui.statusbar.NotificationShelfController;
|
import com.android.systemui.statusbar.NotificationShelfController;
|
||||||
|
import com.android.systemui.statusbar.OperatorNameViewController;
|
||||||
|
import com.android.systemui.statusbar.connectivity.NetworkController;
|
||||||
|
import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler;
|
||||||
import com.android.systemui.statusbar.notification.row.dagger.NotificationShelfComponent;
|
import com.android.systemui.statusbar.notification.row.dagger.NotificationShelfComponent;
|
||||||
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
|
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
|
||||||
|
import com.android.systemui.statusbar.phone.NotificationIconAreaController;
|
||||||
import com.android.systemui.statusbar.phone.NotificationPanelView;
|
import com.android.systemui.statusbar.phone.NotificationPanelView;
|
||||||
|
import com.android.systemui.statusbar.phone.NotificationPanelViewController;
|
||||||
import com.android.systemui.statusbar.phone.NotificationShadeWindowView;
|
import com.android.systemui.statusbar.phone.NotificationShadeWindowView;
|
||||||
import com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer;
|
import com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer;
|
||||||
|
import com.android.systemui.statusbar.phone.StatusBar;
|
||||||
|
import com.android.systemui.statusbar.phone.StatusBarHideIconsForBouncerManager;
|
||||||
|
import com.android.systemui.statusbar.phone.StatusBarIconController;
|
||||||
|
import com.android.systemui.statusbar.phone.StatusBarLocationPublisher;
|
||||||
import com.android.systemui.statusbar.phone.TapAgainView;
|
import com.android.systemui.statusbar.phone.TapAgainView;
|
||||||
|
import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment;
|
||||||
|
import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragmentLogger;
|
||||||
|
import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentComponent;
|
||||||
|
import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController;
|
||||||
|
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
|
||||||
|
import com.android.systemui.statusbar.policy.BatteryController;
|
||||||
|
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||||
|
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||||
|
import com.android.systemui.tuner.TunerService;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
import javax.inject.Named;
|
import javax.inject.Named;
|
||||||
|
|
||||||
|
import dagger.Lazy;
|
||||||
import dagger.Module;
|
import dagger.Module;
|
||||||
import dagger.Provides;
|
import dagger.Provides;
|
||||||
|
|
||||||
@@ -44,6 +72,8 @@ import dagger.Provides;
|
|||||||
public abstract class StatusBarViewModule {
|
public abstract class StatusBarViewModule {
|
||||||
|
|
||||||
public static final String SPLIT_SHADE_HEADER = "split_shade_header";
|
public static final String SPLIT_SHADE_HEADER = "split_shade_header";
|
||||||
|
private static final String SPLIT_SHADE_BATTERY_VIEW = "split_shade_battery_view";
|
||||||
|
public static final String SPLIT_SHADE_BATTERY_CONTROLLER = "split_shade_battery_controller";
|
||||||
|
|
||||||
/** */
|
/** */
|
||||||
@Provides
|
@Provides
|
||||||
@@ -143,10 +173,34 @@ public abstract class StatusBarViewModule {
|
|||||||
/** */
|
/** */
|
||||||
@Provides
|
@Provides
|
||||||
@StatusBarComponent.StatusBarScope
|
@StatusBarComponent.StatusBarScope
|
||||||
|
@Named(SPLIT_SHADE_BATTERY_VIEW)
|
||||||
static BatteryMeterView getBatteryMeterView(@Named(SPLIT_SHADE_HEADER) View view) {
|
static BatteryMeterView getBatteryMeterView(@Named(SPLIT_SHADE_HEADER) View view) {
|
||||||
return view.findViewById(R.id.batteryRemainingIcon);
|
return view.findViewById(R.id.batteryRemainingIcon);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@StatusBarComponent.StatusBarScope
|
||||||
|
@Named(SPLIT_SHADE_BATTERY_CONTROLLER)
|
||||||
|
static BatteryMeterViewController getBatteryMeterViewController(
|
||||||
|
@Named(SPLIT_SHADE_BATTERY_VIEW) BatteryMeterView batteryMeterView,
|
||||||
|
ConfigurationController configurationController,
|
||||||
|
TunerService tunerService,
|
||||||
|
BroadcastDispatcher broadcastDispatcher,
|
||||||
|
@Main Handler mainHandler,
|
||||||
|
ContentResolver contentResolver,
|
||||||
|
BatteryController batteryController
|
||||||
|
) {
|
||||||
|
return new BatteryMeterViewController(
|
||||||
|
batteryMeterView,
|
||||||
|
configurationController,
|
||||||
|
tunerService,
|
||||||
|
broadcastDispatcher,
|
||||||
|
mainHandler,
|
||||||
|
contentResolver,
|
||||||
|
batteryController);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/** */
|
/** */
|
||||||
@Provides
|
@Provides
|
||||||
@StatusBarComponent.StatusBarScope
|
@StatusBarComponent.StatusBarScope
|
||||||
@@ -161,4 +215,54 @@ public abstract class StatusBarViewModule {
|
|||||||
NotificationShadeWindowView notificationShadeWindowView) {
|
NotificationShadeWindowView notificationShadeWindowView) {
|
||||||
return notificationShadeWindowView.findViewById(R.id.notification_container_parent);
|
return notificationShadeWindowView.findViewById(R.id.notification_container_parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new {@link CollapsedStatusBarFragment}.
|
||||||
|
*
|
||||||
|
* **IMPORTANT**: This method intentionally does not have
|
||||||
|
* {@link StatusBarComponent.StatusBarScope}, which means a new fragment *will* be created each
|
||||||
|
* time this method is called. This is intentional because we need fragments to re-created in
|
||||||
|
* certain lifecycle scenarios.
|
||||||
|
*
|
||||||
|
* **IMPORTANT**: This method also intentionally does not have a {@link Provides} annotation. If
|
||||||
|
* you need to get access to a {@link CollapsedStatusBarFragment}, go through
|
||||||
|
* {@link StatusBarFragmentComponent} instead.
|
||||||
|
*/
|
||||||
|
public static CollapsedStatusBarFragment createCollapsedStatusBarFragment(
|
||||||
|
StatusBarFragmentComponent.Factory statusBarFragmentComponentFactory,
|
||||||
|
OngoingCallController ongoingCallController,
|
||||||
|
SystemStatusAnimationScheduler animationScheduler,
|
||||||
|
StatusBarLocationPublisher locationPublisher,
|
||||||
|
NotificationIconAreaController notificationIconAreaController,
|
||||||
|
PanelExpansionStateManager panelExpansionStateManager,
|
||||||
|
FeatureFlags featureFlags,
|
||||||
|
Lazy<Optional<StatusBar>> statusBarOptionalLazy,
|
||||||
|
StatusBarIconController statusBarIconController,
|
||||||
|
StatusBarHideIconsForBouncerManager statusBarHideIconsForBouncerManager,
|
||||||
|
KeyguardStateController keyguardStateController,
|
||||||
|
NotificationPanelViewController notificationPanelViewController,
|
||||||
|
NetworkController networkController,
|
||||||
|
StatusBarStateController statusBarStateController,
|
||||||
|
CommandQueue commandQueue,
|
||||||
|
CollapsedStatusBarFragmentLogger collapsedStatusBarFragmentLogger,
|
||||||
|
OperatorNameViewController.Factory operatorNameViewControllerFactory
|
||||||
|
) {
|
||||||
|
return new CollapsedStatusBarFragment(statusBarFragmentComponentFactory,
|
||||||
|
ongoingCallController,
|
||||||
|
animationScheduler,
|
||||||
|
locationPublisher,
|
||||||
|
notificationIconAreaController,
|
||||||
|
panelExpansionStateManager,
|
||||||
|
featureFlags,
|
||||||
|
statusBarOptionalLazy,
|
||||||
|
statusBarIconController,
|
||||||
|
statusBarHideIconsForBouncerManager,
|
||||||
|
keyguardStateController,
|
||||||
|
notificationPanelViewController,
|
||||||
|
networkController,
|
||||||
|
statusBarStateController,
|
||||||
|
commandQueue,
|
||||||
|
collapsedStatusBarFragmentLogger,
|
||||||
|
operatorNameViewControllerFactory);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ import com.android.systemui.statusbar.connectivity.SignalCallback;
|
|||||||
import com.android.systemui.statusbar.events.SystemStatusAnimationCallback;
|
import com.android.systemui.statusbar.events.SystemStatusAnimationCallback;
|
||||||
import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler;
|
import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler;
|
||||||
import com.android.systemui.statusbar.phone.NotificationIconAreaController;
|
import com.android.systemui.statusbar.phone.NotificationIconAreaController;
|
||||||
|
import com.android.systemui.statusbar.phone.NotificationPanelViewController;
|
||||||
import com.android.systemui.statusbar.phone.PhoneStatusBarView;
|
import com.android.systemui.statusbar.phone.PhoneStatusBarView;
|
||||||
import com.android.systemui.statusbar.phone.StatusBar;
|
import com.android.systemui.statusbar.phone.StatusBar;
|
||||||
import com.android.systemui.statusbar.phone.StatusBarHideIconsForBouncerManager;
|
import com.android.systemui.statusbar.phone.StatusBarHideIconsForBouncerManager;
|
||||||
@@ -94,6 +95,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
|
|||||||
private PhoneStatusBarView mStatusBar;
|
private PhoneStatusBarView mStatusBar;
|
||||||
private final StatusBarStateController mStatusBarStateController;
|
private final StatusBarStateController mStatusBarStateController;
|
||||||
private final KeyguardStateController mKeyguardStateController;
|
private final KeyguardStateController mKeyguardStateController;
|
||||||
|
private final NotificationPanelViewController mNotificationPanelViewController;
|
||||||
private final NetworkController mNetworkController;
|
private final NetworkController mNetworkController;
|
||||||
private LinearLayout mSystemIconArea;
|
private LinearLayout mSystemIconArea;
|
||||||
private View mClockView;
|
private View mClockView;
|
||||||
@@ -147,6 +149,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
|
|||||||
StatusBarIconController statusBarIconController,
|
StatusBarIconController statusBarIconController,
|
||||||
StatusBarHideIconsForBouncerManager statusBarHideIconsForBouncerManager,
|
StatusBarHideIconsForBouncerManager statusBarHideIconsForBouncerManager,
|
||||||
KeyguardStateController keyguardStateController,
|
KeyguardStateController keyguardStateController,
|
||||||
|
NotificationPanelViewController notificationPanelViewController,
|
||||||
NetworkController networkController,
|
NetworkController networkController,
|
||||||
StatusBarStateController statusBarStateController,
|
StatusBarStateController statusBarStateController,
|
||||||
CommandQueue commandQueue,
|
CommandQueue commandQueue,
|
||||||
@@ -164,6 +167,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
|
|||||||
mStatusBarIconController = statusBarIconController;
|
mStatusBarIconController = statusBarIconController;
|
||||||
mStatusBarHideIconsForBouncerManager = statusBarHideIconsForBouncerManager;
|
mStatusBarHideIconsForBouncerManager = statusBarHideIconsForBouncerManager;
|
||||||
mKeyguardStateController = keyguardStateController;
|
mKeyguardStateController = keyguardStateController;
|
||||||
|
mNotificationPanelViewController = notificationPanelViewController;
|
||||||
mNetworkController = networkController;
|
mNetworkController = networkController;
|
||||||
mStatusBarStateController = statusBarStateController;
|
mStatusBarStateController = statusBarStateController;
|
||||||
mCommandQueue = commandQueue;
|
mCommandQueue = commandQueue;
|
||||||
@@ -354,8 +358,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
|
|||||||
// The shelf will be hidden when dozing with a custom clock, we must show notification
|
// The shelf will be hidden when dozing with a custom clock, we must show notification
|
||||||
// icons in this occasion.
|
// icons in this occasion.
|
||||||
if (mStatusBarStateController.isDozing()
|
if (mStatusBarStateController.isDozing()
|
||||||
&& mStatusBarOptionalLazy.get().map(
|
&& mNotificationPanelViewController.hasCustomClock()) {
|
||||||
sb -> sb.getPanelController().hasCustomClock()).orElse(false)) {
|
|
||||||
state |= DISABLE_CLOCK | DISABLE_SYSTEM_INFO;
|
state |= DISABLE_CLOCK | DISABLE_SYSTEM_INFO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,82 @@
|
|||||||
|
package com.android.systemui.fragments
|
||||||
|
|
||||||
|
import android.app.Fragment
|
||||||
|
import android.os.Looper
|
||||||
|
import android.test.suitebuilder.annotation.SmallTest
|
||||||
|
import com.android.systemui.SysuiTestCase
|
||||||
|
import com.android.systemui.dump.DumpManager
|
||||||
|
import com.android.systemui.qs.QSFragment
|
||||||
|
import com.android.systemui.util.mockito.mock
|
||||||
|
import com.google.common.truth.Truth.assertThat
|
||||||
|
import org.junit.Before
|
||||||
|
import org.junit.Test
|
||||||
|
|
||||||
|
@SmallTest
|
||||||
|
class FragmentServiceTest : SysuiTestCase() {
|
||||||
|
private val fragmentCreator = TestFragmentCreator()
|
||||||
|
private val fragmentCreatorFactory = FragmentService.FragmentCreator.Factory { fragmentCreator }
|
||||||
|
|
||||||
|
private lateinit var fragmentService: FragmentService
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun setUp() {
|
||||||
|
if (Looper.myLooper() == null) {
|
||||||
|
Looper.prepare()
|
||||||
|
}
|
||||||
|
|
||||||
|
fragmentService = FragmentService(fragmentCreatorFactory, mock(), DumpManager())
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun constructor_addsFragmentCreatorMethodsToMap() {
|
||||||
|
val map = fragmentService.injectionMap
|
||||||
|
assertThat(map).hasSize(2)
|
||||||
|
assertThat(map.keys).contains(QSFragment::class.java.name)
|
||||||
|
assertThat(map.keys).contains(TestFragmentInCreator::class.java.name)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun addFragmentInstantiationProvider_objectHasNoFragmentMethods_nothingAdded() {
|
||||||
|
fragmentService.addFragmentInstantiationProvider(Object())
|
||||||
|
|
||||||
|
assertThat(fragmentService.injectionMap).hasSize(2)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun addFragmentInstantiationProvider_objectHasFragmentMethods_methodsAdded() {
|
||||||
|
fragmentService.addFragmentInstantiationProvider(
|
||||||
|
@Suppress("unused")
|
||||||
|
object : Any() {
|
||||||
|
fun createTestFragment2() = TestFragment2()
|
||||||
|
fun createTestFragment3() = TestFragment3()
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
val map = fragmentService.injectionMap
|
||||||
|
assertThat(map).hasSize(4)
|
||||||
|
assertThat(map.keys).contains(TestFragment2::class.java.name)
|
||||||
|
assertThat(map.keys).contains(TestFragment3::class.java.name)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun addFragmentInstantiationProvider_objectFragmentMethodsAlreadyProvided_nothingAdded() {
|
||||||
|
fragmentService.addFragmentInstantiationProvider(
|
||||||
|
@Suppress("unused")
|
||||||
|
object : Any() {
|
||||||
|
fun createTestFragment() = TestFragmentInCreator()
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
assertThat(fragmentService.injectionMap).hasSize(2)
|
||||||
|
}
|
||||||
|
|
||||||
|
class TestFragmentCreator : FragmentService.FragmentCreator {
|
||||||
|
override fun createQSFragment(): QSFragment = mock()
|
||||||
|
@Suppress("unused")
|
||||||
|
fun createTestFragment(): TestFragmentInCreator = TestFragmentInCreator()
|
||||||
|
}
|
||||||
|
|
||||||
|
class TestFragmentInCreator : Fragment()
|
||||||
|
class TestFragment2 : Fragment()
|
||||||
|
class TestFragment3 : Fragment()
|
||||||
|
}
|
||||||
@@ -86,6 +86,7 @@ import com.android.systemui.colorextraction.SysuiColorExtractor;
|
|||||||
import com.android.systemui.demomode.DemoModeController;
|
import com.android.systemui.demomode.DemoModeController;
|
||||||
import com.android.systemui.dump.DumpManager;
|
import com.android.systemui.dump.DumpManager;
|
||||||
import com.android.systemui.flags.FeatureFlags;
|
import com.android.systemui.flags.FeatureFlags;
|
||||||
|
import com.android.systemui.fragments.FragmentService;
|
||||||
import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
|
import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
|
||||||
import com.android.systemui.keyguard.KeyguardViewMediator;
|
import com.android.systemui.keyguard.KeyguardViewMediator;
|
||||||
import com.android.systemui.keyguard.ScreenLifecycle;
|
import com.android.systemui.keyguard.ScreenLifecycle;
|
||||||
@@ -132,7 +133,6 @@ import com.android.systemui.statusbar.notification.stack.NotificationStackScroll
|
|||||||
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
|
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
|
||||||
import com.android.systemui.statusbar.phone.dagger.StatusBarComponent;
|
import com.android.systemui.statusbar.phone.dagger.StatusBarComponent;
|
||||||
import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragmentLogger;
|
import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragmentLogger;
|
||||||
import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentComponent;
|
|
||||||
import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController;
|
import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController;
|
||||||
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
|
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
|
||||||
import com.android.systemui.statusbar.policy.BatteryController;
|
import com.android.systemui.statusbar.policy.BatteryController;
|
||||||
@@ -244,8 +244,6 @@ public class StatusBarTest extends SysuiTestCase {
|
|||||||
@Mock private CollapsedStatusBarFragmentLogger mCollapsedStatusBarFragmentLogger;
|
@Mock private CollapsedStatusBarFragmentLogger mCollapsedStatusBarFragmentLogger;
|
||||||
@Mock private StatusBarComponent.Factory mStatusBarComponentFactory;
|
@Mock private StatusBarComponent.Factory mStatusBarComponentFactory;
|
||||||
@Mock private StatusBarComponent mStatusBarComponent;
|
@Mock private StatusBarComponent mStatusBarComponent;
|
||||||
@Mock private StatusBarFragmentComponent.Factory mStatusBarFragmentComponentFactory;
|
|
||||||
@Mock private StatusBarFragmentComponent mStatusBarFragmentComponent;
|
|
||||||
@Mock private PluginManager mPluginManager;
|
@Mock private PluginManager mPluginManager;
|
||||||
@Mock private LegacySplitScreen mLegacySplitScreen;
|
@Mock private LegacySplitScreen mLegacySplitScreen;
|
||||||
@Mock private LightsOutNotifController mLightsOutNotifController;
|
@Mock private LightsOutNotifController mLightsOutNotifController;
|
||||||
@@ -350,8 +348,6 @@ public class StatusBarTest extends SysuiTestCase {
|
|||||||
when(mBiometricUnlockControllerLazy.get()).thenReturn(mBiometricUnlockController);
|
when(mBiometricUnlockControllerLazy.get()).thenReturn(mBiometricUnlockController);
|
||||||
|
|
||||||
when(mStatusBarComponentFactory.create()).thenReturn(mStatusBarComponent);
|
when(mStatusBarComponentFactory.create()).thenReturn(mStatusBarComponent);
|
||||||
when(mStatusBarFragmentComponentFactory.create(any()))
|
|
||||||
.thenReturn(mStatusBarFragmentComponent);
|
|
||||||
when(mStatusBarComponent.getNotificationShadeWindowViewController()).thenReturn(
|
when(mStatusBarComponent.getNotificationShadeWindowViewController()).thenReturn(
|
||||||
mNotificationShadeWindowViewController);
|
mNotificationShadeWindowViewController);
|
||||||
|
|
||||||
@@ -366,6 +362,7 @@ public class StatusBarTest extends SysuiTestCase {
|
|||||||
mStatusBar = new StatusBar(
|
mStatusBar = new StatusBar(
|
||||||
mContext,
|
mContext,
|
||||||
mNotificationsController,
|
mNotificationsController,
|
||||||
|
mock(FragmentService.class),
|
||||||
mLightBarController,
|
mLightBarController,
|
||||||
mAutoHideController,
|
mAutoHideController,
|
||||||
mStatusBarWindowController,
|
mStatusBarWindowController,
|
||||||
@@ -422,7 +419,6 @@ public class StatusBarTest extends SysuiTestCase {
|
|||||||
mCommandQueue,
|
mCommandQueue,
|
||||||
mCollapsedStatusBarFragmentLogger,
|
mCollapsedStatusBarFragmentLogger,
|
||||||
mStatusBarComponentFactory,
|
mStatusBarComponentFactory,
|
||||||
mStatusBarFragmentComponentFactory,
|
|
||||||
mPluginManager,
|
mPluginManager,
|
||||||
Optional.of(mLegacySplitScreen),
|
Optional.of(mLegacySplitScreen),
|
||||||
mLightsOutNotifController,
|
mLightsOutNotifController,
|
||||||
|
|||||||
@@ -295,6 +295,7 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest {
|
|||||||
new StatusBarHideIconsForBouncerManager(
|
new StatusBarHideIconsForBouncerManager(
|
||||||
mCommandQueue, new FakeExecutor(new FakeSystemClock()), new DumpManager()),
|
mCommandQueue, new FakeExecutor(new FakeSystemClock()), new DumpManager()),
|
||||||
mKeyguardStateController,
|
mKeyguardStateController,
|
||||||
|
mock(NotificationPanelViewController.class),
|
||||||
mNetworkController,
|
mNetworkController,
|
||||||
mStatusBarStateController,
|
mStatusBarStateController,
|
||||||
mCommandQueue,
|
mCommandQueue,
|
||||||
|
|||||||
Reference in New Issue
Block a user