Merge changes from topic "b149942757-view-injection"
* changes: Remove View Injection entirely. Remove injected parametser from NSSL
This commit is contained in:
@@ -37,9 +37,6 @@
|
||||
-keep class com.android.systemui.fragments.FragmentService$FragmentCreator {
|
||||
*;
|
||||
}
|
||||
-keep class com.android.systemui.util.InjectionInflationController$ViewInstanceCreator {
|
||||
*;
|
||||
}
|
||||
-keep class androidx.core.app.CoreComponentFactory
|
||||
|
||||
-keep public class * extends com.android.systemui.SystemUI {
|
||||
|
||||
@@ -41,7 +41,6 @@ import com.android.systemui.plugins.ClockPlugin;
|
||||
import com.android.systemui.plugins.PluginListener;
|
||||
import com.android.systemui.settings.CurrentUserObservable;
|
||||
import com.android.systemui.shared.plugins.PluginManager;
|
||||
import com.android.systemui.util.InjectionInflationController;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
@@ -125,16 +124,16 @@ public final class ClockManager {
|
||||
private final int mHeight;
|
||||
|
||||
@Inject
|
||||
public ClockManager(Context context, InjectionInflationController injectionInflater,
|
||||
public ClockManager(Context context, LayoutInflater layoutInflater,
|
||||
PluginManager pluginManager, SysuiColorExtractor colorExtractor,
|
||||
@Nullable DockManager dockManager, BroadcastDispatcher broadcastDispatcher) {
|
||||
this(context, injectionInflater, pluginManager, colorExtractor,
|
||||
this(context, layoutInflater, pluginManager, colorExtractor,
|
||||
context.getContentResolver(), new CurrentUserObservable(broadcastDispatcher),
|
||||
new SettingsWrapper(context.getContentResolver()), dockManager);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
ClockManager(Context context, InjectionInflationController injectionInflater,
|
||||
ClockManager(Context context, LayoutInflater layoutInflater,
|
||||
PluginManager pluginManager, SysuiColorExtractor colorExtractor,
|
||||
ContentResolver contentResolver, CurrentUserObservable currentUserObservable,
|
||||
SettingsWrapper settingsWrapper, DockManager dockManager) {
|
||||
@@ -147,7 +146,6 @@ public final class ClockManager {
|
||||
mPreviewClocks = new AvailableClocks();
|
||||
|
||||
Resources res = context.getResources();
|
||||
LayoutInflater layoutInflater = injectionInflater.injectable(LayoutInflater.from(context));
|
||||
|
||||
addBuiltinClock(() -> new DefaultClockController(res, layoutInflater, colorExtractor));
|
||||
|
||||
|
||||
@@ -89,8 +89,12 @@ import com.android.systemui.statusbar.notification.NotificationEntryManager.Keyg
|
||||
import com.android.systemui.statusbar.notification.NotificationFilter;
|
||||
import com.android.systemui.statusbar.notification.collection.legacy.NotificationGroupManagerLegacy;
|
||||
import com.android.systemui.statusbar.notification.collection.legacy.VisualStabilityManager;
|
||||
import com.android.systemui.statusbar.notification.collection.render.GroupExpansionManager;
|
||||
import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManager;
|
||||
import com.android.systemui.statusbar.notification.logging.NotificationLogger;
|
||||
import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
|
||||
import com.android.systemui.statusbar.notification.stack.AmbientState;
|
||||
import com.android.systemui.statusbar.notification.stack.NotificationSectionsManager;
|
||||
import com.android.systemui.statusbar.phone.AutoHideController;
|
||||
import com.android.systemui.statusbar.phone.DozeParameters;
|
||||
import com.android.systemui.statusbar.phone.KeyguardDismissUtil;
|
||||
@@ -102,6 +106,7 @@ import com.android.systemui.statusbar.phone.ShadeController;
|
||||
import com.android.systemui.statusbar.phone.StatusBarContentInsetsProvider;
|
||||
import com.android.systemui.statusbar.phone.StatusBarIconController;
|
||||
import com.android.systemui.statusbar.phone.StatusBarWindowController;
|
||||
import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController;
|
||||
import com.android.systemui.statusbar.policy.AccessibilityController;
|
||||
import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper;
|
||||
import com.android.systemui.statusbar.policy.BatteryController;
|
||||
@@ -360,6 +365,11 @@ public class Dependency {
|
||||
@Inject Lazy<StatusBarContentInsetsProvider> mContentInsetsProviderLazy;
|
||||
@Inject Lazy<InternetDialogFactory> mInternetDialogFactory;
|
||||
@Inject Lazy<FeatureFlags> mFeatureFlagsLazy;
|
||||
@Inject Lazy<NotificationSectionsManager> mNotificationSectionsManagerLazy;
|
||||
@Inject Lazy<UnlockedScreenOffAnimationController> mUnlockedScreenOffAnimationControllerLazy;
|
||||
@Inject Lazy<AmbientState> mAmbientStateLazy;
|
||||
@Inject Lazy<GroupMembershipManager> mGroupMembershipManagerLazy;
|
||||
@Inject Lazy<GroupExpansionManager> mGroupExpansionManagerLazy;
|
||||
|
||||
@Inject
|
||||
public Dependency() {
|
||||
@@ -574,6 +584,12 @@ public class Dependency {
|
||||
mProviders.put(UiEventLogger.class, mUiEventLogger::get);
|
||||
mProviders.put(FeatureFlags.class, mFeatureFlagsLazy::get);
|
||||
mProviders.put(StatusBarContentInsetsProvider.class, mContentInsetsProviderLazy::get);
|
||||
mProviders.put(NotificationSectionsManager.class, mNotificationSectionsManagerLazy::get);
|
||||
mProviders.put(UnlockedScreenOffAnimationController.class,
|
||||
mUnlockedScreenOffAnimationControllerLazy::get);
|
||||
mProviders.put(AmbientState.class, mAmbientStateLazy::get);
|
||||
mProviders.put(GroupMembershipManager.class, mGroupMembershipManagerLazy::get);
|
||||
mProviders.put(GroupExpansionManager.class, mGroupExpansionManagerLazy::get);
|
||||
|
||||
Dependency.setInstance(this);
|
||||
}
|
||||
|
||||
@@ -25,7 +25,6 @@ import com.android.systemui.dump.DumpManager;
|
||||
import com.android.systemui.keyguard.KeyguardSliceProvider;
|
||||
import com.android.systemui.people.PeopleProvider;
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||
import com.android.systemui.util.InjectionInflationController;
|
||||
import com.android.wm.shell.ShellCommandHandler;
|
||||
import com.android.wm.shell.TaskViewFactory;
|
||||
import com.android.wm.shell.apppairs.AppPairs;
|
||||
@@ -146,11 +145,6 @@ public interface SysUIComponent {
|
||||
@SysUISingleton
|
||||
InitController getInitController();
|
||||
|
||||
/**
|
||||
* ViewInstanceCreator generates all Views that need injection.
|
||||
*/
|
||||
InjectionInflationController.ViewInstanceCreator.Factory createViewInstanceCreatorFactory();
|
||||
|
||||
/**
|
||||
* Member injection into the supplied argument.
|
||||
*/
|
||||
|
||||
@@ -76,7 +76,6 @@ import com.android.systemui.statusbar.policy.dagger.SmartRepliesInflationModule;
|
||||
import com.android.systemui.statusbar.policy.dagger.StatusBarPolicyModule;
|
||||
import com.android.systemui.tuner.dagger.TunerModule;
|
||||
import com.android.systemui.user.UserModule;
|
||||
import com.android.systemui.util.InjectionInflationController;
|
||||
import com.android.systemui.util.concurrency.SysUIConcurrencyModule;
|
||||
import com.android.systemui.util.dagger.UtilModule;
|
||||
import com.android.systemui.util.sensors.SensorModule;
|
||||
@@ -218,11 +217,9 @@ public abstract class SystemUIModule {
|
||||
|
||||
@Provides
|
||||
@SysUISingleton
|
||||
static StatusBarWindowView providesStatusBarWindowView(Context context,
|
||||
InjectionInflationController injectionInflationController) {
|
||||
static StatusBarWindowView providesStatusBarWindowView(LayoutInflater layoutInflater) {
|
||||
StatusBarWindowView view =
|
||||
(StatusBarWindowView) injectionInflationController.injectable(
|
||||
LayoutInflater.from(context)).inflate(R.layout.super_status_bar,
|
||||
(StatusBarWindowView) layoutInflater.inflate(R.layout.super_status_bar,
|
||||
/* root= */ null);
|
||||
if (view == null) {
|
||||
throw new IllegalStateException(
|
||||
|
||||
@@ -37,7 +37,6 @@ import android.widget.ImageView;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
|
||||
import com.android.systemui.Dumpable;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.animation.Interpolators;
|
||||
import com.android.systemui.animation.ShadeInterpolation;
|
||||
@@ -55,7 +54,6 @@ import com.android.systemui.statusbar.notification.stack.StackStateAnimator;
|
||||
import com.android.systemui.statusbar.phone.KeyguardBypassController;
|
||||
import com.android.systemui.statusbar.policy.BrightnessMirrorController;
|
||||
import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler;
|
||||
import com.android.systemui.util.InjectionInflationController;
|
||||
import com.android.systemui.util.LifecycleFragment;
|
||||
import com.android.systemui.util.Utils;
|
||||
|
||||
@@ -96,7 +94,6 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
|
||||
private ImageView mQsDragHandler;
|
||||
|
||||
private final RemoteInputQuickSettingsDisabler mRemoteInputQuickSettingsDisabler;
|
||||
private final InjectionInflationController mInjectionInflater;
|
||||
private final CommandQueue mCommandQueue;
|
||||
private final QSDetailDisplayer mQsDetailDisplayer;
|
||||
private final MediaHost mQsMediaHost;
|
||||
@@ -146,7 +143,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
|
||||
|
||||
@Inject
|
||||
public QSFragment(RemoteInputQuickSettingsDisabler remoteInputQsDisabler,
|
||||
InjectionInflationController injectionInflater, QSTileHost qsTileHost,
|
||||
QSTileHost qsTileHost,
|
||||
StatusBarStateController statusBarStateController, CommandQueue commandQueue,
|
||||
QSDetailDisplayer qsDetailDisplayer, @Named(QS_PANEL) MediaHost qsMediaHost,
|
||||
@Named(QUICK_QS_PANEL) MediaHost qqsMediaHost,
|
||||
@@ -154,7 +151,6 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
|
||||
QSFragmentComponent.Factory qsComponentFactory,
|
||||
FalsingManager falsingManager, DumpManager dumpManager) {
|
||||
mRemoteInputQuickSettingsDisabler = remoteInputQsDisabler;
|
||||
mInjectionInflater = injectionInflater;
|
||||
mCommandQueue = commandQueue;
|
||||
mQsDetailDisplayer = qsDetailDisplayer;
|
||||
mQsMediaHost = qsMediaHost;
|
||||
@@ -171,9 +167,8 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
inflater = mInjectionInflater.injectable(
|
||||
inflater.cloneInContext(new ContextThemeWrapper(getContext(),
|
||||
R.style.Theme_SystemUI_QuickSettings)));
|
||||
inflater = inflater.cloneInContext(new ContextThemeWrapper(getContext(),
|
||||
R.style.Theme_SystemUI_QuickSettings));
|
||||
return inflater.inflate(R.layout.qs_panel, container, false);
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@ package com.android.systemui.statusbar.notification.stack;
|
||||
import static com.android.internal.jank.InteractionJankMonitor.CUJ_NOTIFICATION_SHADE_SCROLL_FLING;
|
||||
import static com.android.systemui.statusbar.notification.stack.NotificationPriorityBucketKt.BUCKET_SILENT;
|
||||
import static com.android.systemui.statusbar.notification.stack.StackStateAnimator.ANIMATION_DURATION_SWIPE;
|
||||
import static com.android.systemui.util.InjectionInflationController.VIEW_CONTEXT;
|
||||
import static com.android.systemui.util.Utils.shouldUseSplitNotificationShade;
|
||||
|
||||
import static java.lang.annotation.RetentionPolicy.SOURCE;
|
||||
@@ -74,6 +73,7 @@ import com.android.internal.graphics.ColorUtils;
|
||||
import com.android.internal.jank.InteractionJankMonitor;
|
||||
import com.android.keyguard.KeyguardSliceView;
|
||||
import com.android.settingslib.Utils;
|
||||
import com.android.systemui.Dependency;
|
||||
import com.android.systemui.Dumpable;
|
||||
import com.android.systemui.ExpandHelper;
|
||||
import com.android.systemui.R;
|
||||
@@ -120,9 +120,6 @@ import java.util.List;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
/**
|
||||
* A layout which handles a dynamic amount of notifications and presents them in a scrollable stack.
|
||||
*/
|
||||
@@ -565,24 +562,17 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
|
||||
@Nullable
|
||||
private OnClickListener mManageButtonClickListener;
|
||||
|
||||
@Inject
|
||||
public NotificationStackScrollLayout(
|
||||
@Named(VIEW_CONTEXT) Context context,
|
||||
AttributeSet attrs,
|
||||
NotificationSectionsManager notificationSectionsManager,
|
||||
GroupMembershipManager groupMembershipManager,
|
||||
GroupExpansionManager groupExpansionManager,
|
||||
AmbientState ambientState,
|
||||
UnlockedScreenOffAnimationController unlockedScreenOffAnimationController) {
|
||||
public NotificationStackScrollLayout(Context context, AttributeSet attrs) {
|
||||
super(context, attrs, 0, 0);
|
||||
Resources res = getResources();
|
||||
mSectionsManager = notificationSectionsManager;
|
||||
mUnlockedScreenOffAnimationController = unlockedScreenOffAnimationController;
|
||||
mSectionsManager = Dependency.get(NotificationSectionsManager.class);
|
||||
mUnlockedScreenOffAnimationController =
|
||||
Dependency.get(UnlockedScreenOffAnimationController.class);
|
||||
updateSplitNotificationShade();
|
||||
mSectionsManager.initialize(this, LayoutInflater.from(context));
|
||||
mSections = mSectionsManager.createSectionsForBuckets();
|
||||
|
||||
mAmbientState = ambientState;
|
||||
mAmbientState = Dependency.get(AmbientState.class);
|
||||
mBgColor = Utils.getColorAttr(mContext, android.R.attr.colorBackgroundFloating)
|
||||
.getDefaultColor();
|
||||
int minHeight = res.getDimensionPixelSize(R.dimen.notification_min_height);
|
||||
@@ -608,8 +598,8 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
|
||||
mDebugPaint.setTextSize(25f);
|
||||
}
|
||||
mClearAllEnabled = res.getBoolean(R.bool.config_enableNotificationsClearAll);
|
||||
mGroupMembershipManager = groupMembershipManager;
|
||||
mGroupExpansionManager = groupExpansionManager;
|
||||
mGroupMembershipManager = Dependency.get(GroupMembershipManager.class);
|
||||
mGroupExpansionManager = Dependency.get(GroupExpansionManager.class);
|
||||
setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES);
|
||||
}
|
||||
|
||||
@@ -5265,10 +5255,6 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
|
||||
mController.getNoticationRoundessManager().setAnimatedChildren(mChildrenToAddAnimated);
|
||||
}
|
||||
|
||||
public NotificationStackScrollLayoutController getController() {
|
||||
return mController;
|
||||
}
|
||||
|
||||
void addSwipedOutView(View v) {
|
||||
mSwipedOutViews.add(v);
|
||||
}
|
||||
|
||||
@@ -56,7 +56,6 @@ import com.android.systemui.statusbar.notification.stack.NotificationStackScroll
|
||||
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
|
||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||
import com.android.systemui.tuner.TunerService;
|
||||
import com.android.systemui.util.InjectionInflationController;
|
||||
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.PrintWriter;
|
||||
@@ -68,7 +67,6 @@ import javax.inject.Inject;
|
||||
*/
|
||||
public class NotificationShadeWindowViewController {
|
||||
private static final String TAG = "NotifShadeWindowVC";
|
||||
private final InjectionInflationController mInjectionInflationController;
|
||||
private final NotificationWakeUpCoordinator mCoordinator;
|
||||
private final PulseExpansionHandler mPulseExpansionHandler;
|
||||
private final DynamicPrivacyController mDynamicPrivacyController;
|
||||
@@ -116,7 +114,6 @@ public class NotificationShadeWindowViewController {
|
||||
|
||||
@Inject
|
||||
public NotificationShadeWindowViewController(
|
||||
InjectionInflationController injectionInflationController,
|
||||
NotificationWakeUpCoordinator coordinator,
|
||||
PulseExpansionHandler pulseExpansionHandler,
|
||||
DynamicPrivacyController dynamicPrivacyController,
|
||||
@@ -141,7 +138,6 @@ public class NotificationShadeWindowViewController {
|
||||
NotificationStackScrollLayoutController notificationStackScrollLayoutController,
|
||||
StatusBarKeyguardViewManager statusBarKeyguardViewManager,
|
||||
LockIconViewController lockIconViewController) {
|
||||
mInjectionInflationController = injectionInflationController;
|
||||
mCoordinator = coordinator;
|
||||
mPulseExpansionHandler = pulseExpansionHandler;
|
||||
mDynamicPrivacyController = dynamicPrivacyController;
|
||||
|
||||
@@ -1218,7 +1218,7 @@ public class StatusBar extends SystemUI implements
|
||||
// TODO (b/136993073) Separate notification shade and status bar
|
||||
mHeadsUpAppearanceController = new HeadsUpAppearanceController(
|
||||
mNotificationIconAreaController, mHeadsUpManager,
|
||||
mStackScroller.getController(),
|
||||
mStackScrollerController,
|
||||
mStatusBarStateController, mKeyguardBypassController,
|
||||
mKeyguardStateController, mWakeUpCoordinator, mCommandQueue,
|
||||
mNotificationPanelViewController, mStatusBarView);
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
package com.android.systemui.statusbar.phone.dagger;
|
||||
|
||||
import android.annotation.Nullable;
|
||||
import android.content.Context;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
|
||||
@@ -33,7 +32,6 @@ import com.android.systemui.statusbar.phone.NotificationPanelView;
|
||||
import com.android.systemui.statusbar.phone.NotificationShadeWindowView;
|
||||
import com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer;
|
||||
import com.android.systemui.statusbar.phone.TapAgainView;
|
||||
import com.android.systemui.util.InjectionInflationController;
|
||||
|
||||
import javax.inject.Named;
|
||||
|
||||
@@ -49,12 +47,9 @@ public abstract class StatusBarViewModule {
|
||||
@Provides
|
||||
@StatusBarComponent.StatusBarScope
|
||||
public static NotificationShadeWindowView providesNotificationShadeWindowView(
|
||||
InjectionInflationController injectionInflationController,
|
||||
Context context) {
|
||||
LayoutInflater layoutInflater) {
|
||||
NotificationShadeWindowView notificationShadeWindowView = (NotificationShadeWindowView)
|
||||
injectionInflationController.injectable(
|
||||
LayoutInflater.from(context)).inflate(R.layout.super_notification_shade,
|
||||
/* root= */ null);
|
||||
layoutInflater.inflate(R.layout.super_notification_shade, /* root= */ null);
|
||||
if (notificationShadeWindowView == null) {
|
||||
throw new IllegalStateException(
|
||||
"R.layout.super_notification_shade could not be properly inflated");
|
||||
|
||||
@@ -1,120 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2018 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.util;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.ArrayMap;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.InflateException;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
|
||||
import com.android.systemui.dagger.SysUISingleton;
|
||||
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Modifier;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
import dagger.BindsInstance;
|
||||
import dagger.Subcomponent;
|
||||
|
||||
/**
|
||||
* Manages inflation that requires dagger injection.
|
||||
* See docs/dagger.md for details.
|
||||
*/
|
||||
@SysUISingleton
|
||||
public class InjectionInflationController {
|
||||
|
||||
public static final String VIEW_CONTEXT = "view_context";
|
||||
private final ArrayMap<String, Method> mInjectionMap = new ArrayMap<>();
|
||||
private final LayoutInflater.Factory2 mFactory = new InjectionFactory();
|
||||
private final ViewInstanceCreator.Factory mViewInstanceCreatorFactory;
|
||||
|
||||
@Inject
|
||||
public InjectionInflationController(ViewInstanceCreator.Factory viewInstanceCreatorFactory) {
|
||||
mViewInstanceCreatorFactory = viewInstanceCreatorFactory;
|
||||
initInjectionMap();
|
||||
}
|
||||
|
||||
/**
|
||||
* Wraps a {@link LayoutInflater} to support creating dagger injected views.
|
||||
* See docs/dagger.md for details.
|
||||
*/
|
||||
public LayoutInflater injectable(LayoutInflater inflater) {
|
||||
LayoutInflater ret = inflater.cloneInContext(inflater.getContext());
|
||||
ret.setPrivateFactory(mFactory);
|
||||
return ret;
|
||||
}
|
||||
|
||||
private void initInjectionMap() {
|
||||
for (Method method : ViewInstanceCreator.class.getDeclaredMethods()) {
|
||||
if (View.class.isAssignableFrom(method.getReturnType())
|
||||
&& (method.getModifiers() & Modifier.PUBLIC) != 0) {
|
||||
mInjectionMap.put(method.getReturnType().getName(), method);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Subcomponent that actually creates injected views.
|
||||
*/
|
||||
@Subcomponent
|
||||
public interface ViewInstanceCreator {
|
||||
|
||||
/** Factory for creating a ViewInstanceCreator. */
|
||||
@Subcomponent.Factory
|
||||
interface Factory {
|
||||
ViewInstanceCreator build(
|
||||
@BindsInstance @Named(VIEW_CONTEXT) Context context,
|
||||
@BindsInstance AttributeSet attributeSet);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the NotificationStackScrollLayout.
|
||||
*/
|
||||
NotificationStackScrollLayout createNotificationStackScrollLayout();
|
||||
}
|
||||
|
||||
|
||||
private class InjectionFactory implements LayoutInflater.Factory2 {
|
||||
|
||||
@Override
|
||||
public View onCreateView(String name, Context context, AttributeSet attrs) {
|
||||
Method creationMethod = mInjectionMap.get(name);
|
||||
if (creationMethod != null) {
|
||||
try {
|
||||
return (View) creationMethod.invoke(
|
||||
mViewInstanceCreatorFactory.build(context, attrs));
|
||||
} catch (IllegalAccessException e) {
|
||||
throw new InflateException("Could not inflate " + name, e);
|
||||
} catch (InvocationTargetException e) {
|
||||
throw new InflateException("Could not inflate " + name, e);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(View parent, String name, Context context, AttributeSet attrs) {
|
||||
return onCreateView(name, context, attrs);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -17,7 +17,6 @@ package com.android.keyguard.clock;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.Mockito.reset;
|
||||
import static org.mockito.Mockito.verify;
|
||||
@@ -40,7 +39,6 @@ import com.android.systemui.dock.DockManagerFake;
|
||||
import com.android.systemui.plugins.ClockPlugin;
|
||||
import com.android.systemui.settings.CurrentUserObservable;
|
||||
import com.android.systemui.shared.plugins.PluginManager;
|
||||
import com.android.systemui.util.InjectionInflationController;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
@@ -69,7 +67,6 @@ public final class ClockManagerTest extends SysuiTestCase {
|
||||
private ContentObserver mContentObserver;
|
||||
private DockManagerFake mFakeDockManager;
|
||||
private MutableLiveData<Integer> mCurrentUser;
|
||||
@Mock InjectionInflationController mMockInjectionInflationController;
|
||||
@Mock PluginManager mMockPluginManager;
|
||||
@Mock SysuiColorExtractor mMockColorExtractor;
|
||||
@Mock ContentResolver mMockContentResolver;
|
||||
@@ -83,7 +80,6 @@ public final class ClockManagerTest extends SysuiTestCase {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
|
||||
LayoutInflater inflater = LayoutInflater.from(getContext());
|
||||
when(mMockInjectionInflationController.injectable(any())).thenReturn(inflater);
|
||||
|
||||
mFakeDockManager = new DockManagerFake();
|
||||
|
||||
@@ -91,7 +87,7 @@ public final class ClockManagerTest extends SysuiTestCase {
|
||||
mCurrentUser.setValue(MAIN_USER_ID);
|
||||
when(mMockCurrentUserObserable.getCurrentUser()).thenReturn(mCurrentUser);
|
||||
|
||||
mClockManager = new ClockManager(getContext(), mMockInjectionInflationController,
|
||||
mClockManager = new ClockManager(getContext(), inflater,
|
||||
mMockPluginManager, mMockColorExtractor, mMockContentResolver,
|
||||
mMockCurrentUserObserable, mMockSettingsWrapper, mFakeDockManager);
|
||||
|
||||
|
||||
@@ -39,7 +39,6 @@ import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.internal.logging.UiEventLogger;
|
||||
import com.android.keyguard.CarrierText;
|
||||
import com.android.systemui.Dependency;
|
||||
import com.android.systemui.SystemUIFactory;
|
||||
import com.android.systemui.SysuiBaseFragmentTest;
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
import com.android.systemui.dump.DumpManager;
|
||||
@@ -64,7 +63,6 @@ import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||
import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler;
|
||||
import com.android.systemui.statusbar.policy.UserSwitcherController;
|
||||
import com.android.systemui.tuner.TunerService;
|
||||
import com.android.systemui.util.InjectionInflationController;
|
||||
import com.android.systemui.util.settings.SecureSettings;
|
||||
|
||||
import org.junit.Before;
|
||||
@@ -186,10 +184,6 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {
|
||||
return new QSFragment(
|
||||
new RemoteInputQuickSettingsDisabler(context, mock(ConfigurationController.class),
|
||||
commandQueue),
|
||||
new InjectionInflationController(
|
||||
SystemUIFactory.getInstance()
|
||||
.getSysUIComponent()
|
||||
.createViewInstanceCreatorFactory()),
|
||||
mock(QSTileHost.class),
|
||||
mock(StatusBarStateController.class),
|
||||
commandQueue,
|
||||
|
||||
@@ -58,6 +58,8 @@ import com.android.systemui.statusbar.StatusBarState;
|
||||
import com.android.systemui.statusbar.SysuiStatusBarStateController;
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
||||
import com.android.systemui.statusbar.notification.collection.legacy.NotificationGroupManagerLegacy;
|
||||
import com.android.systemui.statusbar.notification.collection.render.GroupExpansionManager;
|
||||
import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManager;
|
||||
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
|
||||
import com.android.systemui.statusbar.notification.row.FooterView;
|
||||
import com.android.systemui.statusbar.phone.KeyguardBypassController;
|
||||
@@ -110,9 +112,20 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase {
|
||||
Settings.Secure.putIntForUser(mContext.getContentResolver(), NOTIFICATION_HISTORY_ENABLED,
|
||||
1, UserHandle.USER_CURRENT);
|
||||
|
||||
|
||||
// Interact with real instance of AmbientState.
|
||||
mAmbientState = new AmbientState(mContext, mNotificationSectionsManager, mBypassController);
|
||||
|
||||
// Inject dependencies before initializing the layout
|
||||
mDependency.injectTestDependency(SysuiStatusBarStateController.class, mBarState);
|
||||
mDependency.injectMockDependency(ShadeController.class);
|
||||
mDependency.injectTestDependency(
|
||||
NotificationSectionsManager.class, mNotificationSectionsManager);
|
||||
mDependency.injectTestDependency(GroupMembershipManager.class, mGroupMembershipManger);
|
||||
mDependency.injectTestDependency(GroupExpansionManager.class, mGroupExpansionManager);
|
||||
mDependency.injectTestDependency(AmbientState.class, mAmbientState);
|
||||
mDependency.injectTestDependency(
|
||||
UnlockedScreenOffAnimationController.class, mUnlockedScreenOffAnimationController);
|
||||
|
||||
NotificationShelfController notificationShelfController =
|
||||
mock(NotificationShelfController.class);
|
||||
@@ -123,22 +136,12 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase {
|
||||
mNotificationSection
|
||||
});
|
||||
|
||||
// Interact with real instance of AmbientState.
|
||||
mAmbientState = new AmbientState(mContext, mNotificationSectionsManager, mBypassController);
|
||||
|
||||
// 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
|
||||
// holds a copy of the CUT's instances of these KeyguardBypassController, so they still
|
||||
// refer to the CUT's member variables, not the spy's member variables.
|
||||
mStackScrollerInternal = new NotificationStackScrollLayout(
|
||||
getContext(),
|
||||
null,
|
||||
mNotificationSectionsManager,
|
||||
mGroupMembershipManger,
|
||||
mGroupExpansionManager,
|
||||
mAmbientState,
|
||||
mUnlockedScreenOffAnimationController);
|
||||
mStackScrollerInternal = new NotificationStackScrollLayout(getContext(), null);
|
||||
mStackScrollerInternal.initView(getContext(), mNotificationSwipeHelper);
|
||||
mStackScroller = spy(mStackScrollerInternal);
|
||||
mStackScroller.setShelfController(notificationShelfController);
|
||||
|
||||
@@ -384,8 +384,6 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {
|
||||
when(mView.findViewById(R.id.notification_stack_scroller))
|
||||
.thenReturn(mNotificationStackScrollLayout);
|
||||
when(mView.findViewById(R.id.communal_host)).thenReturn(mCommunalHostView);
|
||||
when(mNotificationStackScrollLayout.getController())
|
||||
.thenReturn(mNotificationStackScrollLayoutController);
|
||||
when(mNotificationStackScrollLayoutController.getHeight()).thenReturn(1000);
|
||||
when(mNotificationStackScrollLayoutController.getHeadsUpCallback())
|
||||
.thenReturn(mHeadsUpCallback);
|
||||
|
||||
@@ -34,7 +34,6 @@ import androidx.test.filters.SmallTest;
|
||||
|
||||
import com.android.keyguard.LockIconViewController;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.SystemUIFactory;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.classifier.FalsingCollectorFake;
|
||||
import com.android.systemui.dock.DockManager;
|
||||
@@ -55,7 +54,6 @@ import com.android.systemui.statusbar.notification.stack.NotificationStackScroll
|
||||
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
|
||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||
import com.android.systemui.tuner.TunerService;
|
||||
import com.android.systemui.util.InjectionInflationController;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
@@ -117,10 +115,6 @@ public class NotificationShadeWindowViewTest extends SysuiTestCase {
|
||||
when(mDockManager.isDocked()).thenReturn(false);
|
||||
|
||||
mController = new NotificationShadeWindowViewController(
|
||||
new InjectionInflationController(
|
||||
SystemUIFactory.getInstance()
|
||||
.getSysUIComponent()
|
||||
.createViewInstanceCreatorFactory()),
|
||||
mCoordinator,
|
||||
mPulseExpansionHandler,
|
||||
mDynamicPrivacyController,
|
||||
|
||||
@@ -314,7 +314,6 @@ public class StatusBarTest extends SysuiTestCase {
|
||||
|
||||
mContext.setTheme(R.style.Theme_SystemUI_LightWallpaper);
|
||||
|
||||
when(mStackScroller.getController()).thenReturn(mStackScrollerController);
|
||||
when(mStackScrollerController.getView()).thenReturn(mStackScroller);
|
||||
when(mStackScrollerController.getNotificationListContainer()).thenReturn(
|
||||
mNotificationListContainer);
|
||||
|
||||
Reference in New Issue
Block a user