Merge changes from topic "b149942757-remove-view-injection" into sc-v2-dev am: 1fe4da5195
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16095028 Change-Id: I96cf0da91efe6aee2dea3fe2913263a6d77f2103
This commit is contained in:
@@ -37,9 +37,6 @@
|
|||||||
-keep class com.android.systemui.fragments.FragmentService$FragmentCreator {
|
-keep class com.android.systemui.fragments.FragmentService$FragmentCreator {
|
||||||
*;
|
*;
|
||||||
}
|
}
|
||||||
-keep class com.android.systemui.util.InjectionInflationController$ViewInstanceCreator {
|
|
||||||
*;
|
|
||||||
}
|
|
||||||
-keep class androidx.core.app.CoreComponentFactory
|
-keep class androidx.core.app.CoreComponentFactory
|
||||||
|
|
||||||
-keep public class * extends com.android.systemui.SystemUI {
|
-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.plugins.PluginListener;
|
||||||
import com.android.systemui.settings.CurrentUserObservable;
|
import com.android.systemui.settings.CurrentUserObservable;
|
||||||
import com.android.systemui.shared.plugins.PluginManager;
|
import com.android.systemui.shared.plugins.PluginManager;
|
||||||
import com.android.systemui.util.InjectionInflationController;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@@ -125,16 +124,16 @@ public final class ClockManager {
|
|||||||
private final int mHeight;
|
private final int mHeight;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public ClockManager(Context context, InjectionInflationController injectionInflater,
|
public ClockManager(Context context, LayoutInflater layoutInflater,
|
||||||
PluginManager pluginManager, SysuiColorExtractor colorExtractor,
|
PluginManager pluginManager, SysuiColorExtractor colorExtractor,
|
||||||
@Nullable DockManager dockManager, BroadcastDispatcher broadcastDispatcher) {
|
@Nullable DockManager dockManager, BroadcastDispatcher broadcastDispatcher) {
|
||||||
this(context, injectionInflater, pluginManager, colorExtractor,
|
this(context, layoutInflater, pluginManager, colorExtractor,
|
||||||
context.getContentResolver(), new CurrentUserObservable(broadcastDispatcher),
|
context.getContentResolver(), new CurrentUserObservable(broadcastDispatcher),
|
||||||
new SettingsWrapper(context.getContentResolver()), dockManager);
|
new SettingsWrapper(context.getContentResolver()), dockManager);
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
ClockManager(Context context, InjectionInflationController injectionInflater,
|
ClockManager(Context context, LayoutInflater layoutInflater,
|
||||||
PluginManager pluginManager, SysuiColorExtractor colorExtractor,
|
PluginManager pluginManager, SysuiColorExtractor colorExtractor,
|
||||||
ContentResolver contentResolver, CurrentUserObservable currentUserObservable,
|
ContentResolver contentResolver, CurrentUserObservable currentUserObservable,
|
||||||
SettingsWrapper settingsWrapper, DockManager dockManager) {
|
SettingsWrapper settingsWrapper, DockManager dockManager) {
|
||||||
@@ -147,7 +146,6 @@ public final class ClockManager {
|
|||||||
mPreviewClocks = new AvailableClocks();
|
mPreviewClocks = new AvailableClocks();
|
||||||
|
|
||||||
Resources res = context.getResources();
|
Resources res = context.getResources();
|
||||||
LayoutInflater layoutInflater = injectionInflater.injectable(LayoutInflater.from(context));
|
|
||||||
|
|
||||||
addBuiltinClock(() -> new DefaultClockController(res, layoutInflater, colorExtractor));
|
addBuiltinClock(() -> new DefaultClockController(res, layoutInflater, colorExtractor));
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ import com.android.systemui.dump.DumpManager;
|
|||||||
import com.android.systemui.keyguard.KeyguardSliceProvider;
|
import com.android.systemui.keyguard.KeyguardSliceProvider;
|
||||||
import com.android.systemui.people.PeopleProvider;
|
import com.android.systemui.people.PeopleProvider;
|
||||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||||
import com.android.systemui.util.InjectionInflationController;
|
|
||||||
import com.android.wm.shell.ShellCommandHandler;
|
import com.android.wm.shell.ShellCommandHandler;
|
||||||
import com.android.wm.shell.TaskViewFactory;
|
import com.android.wm.shell.TaskViewFactory;
|
||||||
import com.android.wm.shell.apppairs.AppPairs;
|
import com.android.wm.shell.apppairs.AppPairs;
|
||||||
@@ -146,11 +145,6 @@ public interface SysUIComponent {
|
|||||||
@SysUISingleton
|
@SysUISingleton
|
||||||
InitController getInitController();
|
InitController getInitController();
|
||||||
|
|
||||||
/**
|
|
||||||
* ViewInstanceCreator generates all Views that need injection.
|
|
||||||
*/
|
|
||||||
InjectionInflationController.ViewInstanceCreator.Factory createViewInstanceCreatorFactory();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Member injection into the supplied argument.
|
* Member injection into the supplied argument.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -75,7 +75,6 @@ import com.android.systemui.statusbar.policy.dagger.SmartRepliesInflationModule;
|
|||||||
import com.android.systemui.statusbar.policy.dagger.StatusBarPolicyModule;
|
import com.android.systemui.statusbar.policy.dagger.StatusBarPolicyModule;
|
||||||
import com.android.systemui.tuner.dagger.TunerModule;
|
import com.android.systemui.tuner.dagger.TunerModule;
|
||||||
import com.android.systemui.user.UserModule;
|
import com.android.systemui.user.UserModule;
|
||||||
import com.android.systemui.util.InjectionInflationController;
|
|
||||||
import com.android.systemui.util.concurrency.SysUIConcurrencyModule;
|
import com.android.systemui.util.concurrency.SysUIConcurrencyModule;
|
||||||
import com.android.systemui.util.dagger.UtilModule;
|
import com.android.systemui.util.dagger.UtilModule;
|
||||||
import com.android.systemui.util.sensors.SensorModule;
|
import com.android.systemui.util.sensors.SensorModule;
|
||||||
@@ -216,11 +215,9 @@ public abstract class SystemUIModule {
|
|||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@SysUISingleton
|
@SysUISingleton
|
||||||
static StatusBarWindowView providesStatusBarWindowView(Context context,
|
static StatusBarWindowView providesStatusBarWindowView(LayoutInflater layoutInflater) {
|
||||||
InjectionInflationController injectionInflationController) {
|
|
||||||
StatusBarWindowView view =
|
StatusBarWindowView view =
|
||||||
(StatusBarWindowView) injectionInflationController.injectable(
|
(StatusBarWindowView) layoutInflater.inflate(R.layout.super_status_bar,
|
||||||
LayoutInflater.from(context)).inflate(R.layout.super_status_bar,
|
|
||||||
/* root= */ null);
|
/* root= */ null);
|
||||||
if (view == null) {
|
if (view == null) {
|
||||||
throw new IllegalStateException(
|
throw new IllegalStateException(
|
||||||
|
|||||||
@@ -55,7 +55,6 @@ import com.android.systemui.statusbar.notification.stack.StackStateAnimator;
|
|||||||
import com.android.systemui.statusbar.phone.KeyguardBypassController;
|
import com.android.systemui.statusbar.phone.KeyguardBypassController;
|
||||||
import com.android.systemui.statusbar.policy.BrightnessMirrorController;
|
import com.android.systemui.statusbar.policy.BrightnessMirrorController;
|
||||||
import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler;
|
import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler;
|
||||||
import com.android.systemui.util.InjectionInflationController;
|
|
||||||
import com.android.systemui.util.LifecycleFragment;
|
import com.android.systemui.util.LifecycleFragment;
|
||||||
import com.android.systemui.util.Utils;
|
import com.android.systemui.util.Utils;
|
||||||
|
|
||||||
@@ -96,7 +95,6 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
|
|||||||
private ImageView mQsDragHandler;
|
private ImageView mQsDragHandler;
|
||||||
|
|
||||||
private final RemoteInputQuickSettingsDisabler mRemoteInputQuickSettingsDisabler;
|
private final RemoteInputQuickSettingsDisabler mRemoteInputQuickSettingsDisabler;
|
||||||
private final InjectionInflationController mInjectionInflater;
|
|
||||||
private final CommandQueue mCommandQueue;
|
private final CommandQueue mCommandQueue;
|
||||||
private final QSDetailDisplayer mQsDetailDisplayer;
|
private final QSDetailDisplayer mQsDetailDisplayer;
|
||||||
private final MediaHost mQsMediaHost;
|
private final MediaHost mQsMediaHost;
|
||||||
@@ -146,7 +144,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
|
|||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public QSFragment(RemoteInputQuickSettingsDisabler remoteInputQsDisabler,
|
public QSFragment(RemoteInputQuickSettingsDisabler remoteInputQsDisabler,
|
||||||
InjectionInflationController injectionInflater, QSTileHost qsTileHost,
|
QSTileHost qsTileHost,
|
||||||
StatusBarStateController statusBarStateController, CommandQueue commandQueue,
|
StatusBarStateController statusBarStateController, CommandQueue commandQueue,
|
||||||
QSDetailDisplayer qsDetailDisplayer, @Named(QS_PANEL) MediaHost qsMediaHost,
|
QSDetailDisplayer qsDetailDisplayer, @Named(QS_PANEL) MediaHost qsMediaHost,
|
||||||
@Named(QUICK_QS_PANEL) MediaHost qqsMediaHost,
|
@Named(QUICK_QS_PANEL) MediaHost qqsMediaHost,
|
||||||
@@ -154,7 +152,6 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
|
|||||||
QSFragmentComponent.Factory qsComponentFactory,
|
QSFragmentComponent.Factory qsComponentFactory,
|
||||||
FalsingManager falsingManager, DumpManager dumpManager) {
|
FalsingManager falsingManager, DumpManager dumpManager) {
|
||||||
mRemoteInputQuickSettingsDisabler = remoteInputQsDisabler;
|
mRemoteInputQuickSettingsDisabler = remoteInputQsDisabler;
|
||||||
mInjectionInflater = injectionInflater;
|
|
||||||
mCommandQueue = commandQueue;
|
mCommandQueue = commandQueue;
|
||||||
mQsDetailDisplayer = qsDetailDisplayer;
|
mQsDetailDisplayer = qsDetailDisplayer;
|
||||||
mQsMediaHost = qsMediaHost;
|
mQsMediaHost = qsMediaHost;
|
||||||
@@ -171,9 +168,8 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
|
|||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
|
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
|
||||||
Bundle savedInstanceState) {
|
Bundle savedInstanceState) {
|
||||||
inflater = mInjectionInflater.injectable(
|
inflater = inflater.cloneInContext(new ContextThemeWrapper(getContext(),
|
||||||
inflater.cloneInContext(new ContextThemeWrapper(getContext(),
|
R.style.Theme_SystemUI_QuickSettings));
|
||||||
R.style.Theme_SystemUI_QuickSettings)));
|
|
||||||
return inflater.inflate(R.layout.qs_panel, container, false);
|
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.internal.jank.InteractionJankMonitor.CUJ_NOTIFICATION_SHADE_SCROLL_FLING;
|
||||||
import static com.android.systemui.statusbar.notification.stack.NotificationSectionsManagerKt.BUCKET_SILENT;
|
import static com.android.systemui.statusbar.notification.stack.NotificationSectionsManagerKt.BUCKET_SILENT;
|
||||||
import static com.android.systemui.statusbar.notification.stack.StackStateAnimator.ANIMATION_DURATION_SWIPE;
|
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 com.android.systemui.util.Utils.shouldUseSplitNotificationShade;
|
||||||
|
|
||||||
import static java.lang.annotation.RetentionPolicy.SOURCE;
|
import static java.lang.annotation.RetentionPolicy.SOURCE;
|
||||||
@@ -121,9 +120,6 @@ import java.util.List;
|
|||||||
import java.util.function.BiConsumer;
|
import java.util.function.BiConsumer;
|
||||||
import java.util.function.Consumer;
|
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.
|
* A layout which handles a dynamic amount of notifications and presents them in a scrollable stack.
|
||||||
*/
|
*/
|
||||||
@@ -567,9 +563,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
|
|||||||
@Nullable
|
@Nullable
|
||||||
private OnClickListener mManageButtonClickListener;
|
private OnClickListener mManageButtonClickListener;
|
||||||
|
|
||||||
// TODO(b/149942757): Remove the @Inject
|
public NotificationStackScrollLayout(Context context, AttributeSet attrs) {
|
||||||
@Inject
|
|
||||||
public NotificationStackScrollLayout(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs) {
|
|
||||||
super(context, attrs, 0, 0);
|
super(context, attrs, 0, 0);
|
||||||
Resources res = getResources();
|
Resources res = getResources();
|
||||||
mSectionsManager = Dependency.get(NotificationSectionsManager.class);
|
mSectionsManager = Dependency.get(NotificationSectionsManager.class);
|
||||||
@@ -5274,10 +5268,6 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
|
|||||||
mController.getNoticationRoundessManager().setAnimatedChildren(mChildrenToAddAnimated);
|
mController.getNoticationRoundessManager().setAnimatedChildren(mChildrenToAddAnimated);
|
||||||
}
|
}
|
||||||
|
|
||||||
public NotificationStackScrollLayoutController getController() {
|
|
||||||
return mController;
|
|
||||||
}
|
|
||||||
|
|
||||||
void addSwipedOutView(View v) {
|
void addSwipedOutView(View v) {
|
||||||
mSwipedOutViews.add(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.notification.stack.NotificationStackScrollLayoutController;
|
||||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||||
import com.android.systemui.tuner.TunerService;
|
import com.android.systemui.tuner.TunerService;
|
||||||
import com.android.systemui.util.InjectionInflationController;
|
|
||||||
|
|
||||||
import java.io.FileDescriptor;
|
import java.io.FileDescriptor;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
@@ -68,7 +67,6 @@ import javax.inject.Inject;
|
|||||||
*/
|
*/
|
||||||
public class NotificationShadeWindowViewController {
|
public class NotificationShadeWindowViewController {
|
||||||
private static final String TAG = "NotifShadeWindowVC";
|
private static final String TAG = "NotifShadeWindowVC";
|
||||||
private final InjectionInflationController mInjectionInflationController;
|
|
||||||
private final NotificationWakeUpCoordinator mCoordinator;
|
private final NotificationWakeUpCoordinator mCoordinator;
|
||||||
private final PulseExpansionHandler mPulseExpansionHandler;
|
private final PulseExpansionHandler mPulseExpansionHandler;
|
||||||
private final DynamicPrivacyController mDynamicPrivacyController;
|
private final DynamicPrivacyController mDynamicPrivacyController;
|
||||||
@@ -116,7 +114,6 @@ public class NotificationShadeWindowViewController {
|
|||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public NotificationShadeWindowViewController(
|
public NotificationShadeWindowViewController(
|
||||||
InjectionInflationController injectionInflationController,
|
|
||||||
NotificationWakeUpCoordinator coordinator,
|
NotificationWakeUpCoordinator coordinator,
|
||||||
PulseExpansionHandler pulseExpansionHandler,
|
PulseExpansionHandler pulseExpansionHandler,
|
||||||
DynamicPrivacyController dynamicPrivacyController,
|
DynamicPrivacyController dynamicPrivacyController,
|
||||||
@@ -141,7 +138,6 @@ public class NotificationShadeWindowViewController {
|
|||||||
NotificationStackScrollLayoutController notificationStackScrollLayoutController,
|
NotificationStackScrollLayoutController notificationStackScrollLayoutController,
|
||||||
StatusBarKeyguardViewManager statusBarKeyguardViewManager,
|
StatusBarKeyguardViewManager statusBarKeyguardViewManager,
|
||||||
LockIconViewController lockIconViewController) {
|
LockIconViewController lockIconViewController) {
|
||||||
mInjectionInflationController = injectionInflationController;
|
|
||||||
mCoordinator = coordinator;
|
mCoordinator = coordinator;
|
||||||
mPulseExpansionHandler = pulseExpansionHandler;
|
mPulseExpansionHandler = pulseExpansionHandler;
|
||||||
mDynamicPrivacyController = dynamicPrivacyController;
|
mDynamicPrivacyController = dynamicPrivacyController;
|
||||||
|
|||||||
@@ -1218,7 +1218,7 @@ public class StatusBar extends SystemUI implements
|
|||||||
// TODO (b/136993073) Separate notification shade and status bar
|
// TODO (b/136993073) Separate notification shade and status bar
|
||||||
mHeadsUpAppearanceController = new HeadsUpAppearanceController(
|
mHeadsUpAppearanceController = new HeadsUpAppearanceController(
|
||||||
mNotificationIconAreaController, mHeadsUpManager,
|
mNotificationIconAreaController, mHeadsUpManager,
|
||||||
mStackScroller.getController(),
|
mStackScrollerController,
|
||||||
mStatusBarStateController, mKeyguardBypassController,
|
mStatusBarStateController, mKeyguardBypassController,
|
||||||
mKeyguardStateController, mWakeUpCoordinator, mCommandQueue,
|
mKeyguardStateController, mWakeUpCoordinator, mCommandQueue,
|
||||||
mNotificationPanelViewController, mStatusBarView);
|
mNotificationPanelViewController, mStatusBarView);
|
||||||
|
|||||||
@@ -17,7 +17,6 @@
|
|||||||
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.Context;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
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.NotificationShadeWindowView;
|
||||||
import com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer;
|
import com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer;
|
||||||
import com.android.systemui.statusbar.phone.TapAgainView;
|
import com.android.systemui.statusbar.phone.TapAgainView;
|
||||||
import com.android.systemui.util.InjectionInflationController;
|
|
||||||
|
|
||||||
import javax.inject.Named;
|
import javax.inject.Named;
|
||||||
|
|
||||||
@@ -49,12 +47,9 @@ public abstract class StatusBarViewModule {
|
|||||||
@Provides
|
@Provides
|
||||||
@StatusBarComponent.StatusBarScope
|
@StatusBarComponent.StatusBarScope
|
||||||
public static NotificationShadeWindowView providesNotificationShadeWindowView(
|
public static NotificationShadeWindowView providesNotificationShadeWindowView(
|
||||||
InjectionInflationController injectionInflationController,
|
LayoutInflater layoutInflater) {
|
||||||
Context context) {
|
|
||||||
NotificationShadeWindowView notificationShadeWindowView = (NotificationShadeWindowView)
|
NotificationShadeWindowView notificationShadeWindowView = (NotificationShadeWindowView)
|
||||||
injectionInflationController.injectable(
|
layoutInflater.inflate(R.layout.super_notification_shade, /* root= */ null);
|
||||||
LayoutInflater.from(context)).inflate(R.layout.super_notification_shade,
|
|
||||||
/* root= */ null);
|
|
||||||
if (notificationShadeWindowView == null) {
|
if (notificationShadeWindowView == null) {
|
||||||
throw new IllegalStateException(
|
throw new IllegalStateException(
|
||||||
"R.layout.super_notification_shade could not be properly inflated");
|
"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 com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
|
||||||
import static org.mockito.ArgumentMatchers.anyInt;
|
import static org.mockito.ArgumentMatchers.anyInt;
|
||||||
import static org.mockito.Mockito.reset;
|
import static org.mockito.Mockito.reset;
|
||||||
import static org.mockito.Mockito.verify;
|
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.plugins.ClockPlugin;
|
||||||
import com.android.systemui.settings.CurrentUserObservable;
|
import com.android.systemui.settings.CurrentUserObservable;
|
||||||
import com.android.systemui.shared.plugins.PluginManager;
|
import com.android.systemui.shared.plugins.PluginManager;
|
||||||
import com.android.systemui.util.InjectionInflationController;
|
|
||||||
|
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@@ -69,7 +67,6 @@ public final class ClockManagerTest extends SysuiTestCase {
|
|||||||
private ContentObserver mContentObserver;
|
private ContentObserver mContentObserver;
|
||||||
private DockManagerFake mFakeDockManager;
|
private DockManagerFake mFakeDockManager;
|
||||||
private MutableLiveData<Integer> mCurrentUser;
|
private MutableLiveData<Integer> mCurrentUser;
|
||||||
@Mock InjectionInflationController mMockInjectionInflationController;
|
|
||||||
@Mock PluginManager mMockPluginManager;
|
@Mock PluginManager mMockPluginManager;
|
||||||
@Mock SysuiColorExtractor mMockColorExtractor;
|
@Mock SysuiColorExtractor mMockColorExtractor;
|
||||||
@Mock ContentResolver mMockContentResolver;
|
@Mock ContentResolver mMockContentResolver;
|
||||||
@@ -83,7 +80,6 @@ public final class ClockManagerTest extends SysuiTestCase {
|
|||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
|
|
||||||
LayoutInflater inflater = LayoutInflater.from(getContext());
|
LayoutInflater inflater = LayoutInflater.from(getContext());
|
||||||
when(mMockInjectionInflationController.injectable(any())).thenReturn(inflater);
|
|
||||||
|
|
||||||
mFakeDockManager = new DockManagerFake();
|
mFakeDockManager = new DockManagerFake();
|
||||||
|
|
||||||
@@ -91,7 +87,7 @@ public final class ClockManagerTest extends SysuiTestCase {
|
|||||||
mCurrentUser.setValue(MAIN_USER_ID);
|
mCurrentUser.setValue(MAIN_USER_ID);
|
||||||
when(mMockCurrentUserObserable.getCurrentUser()).thenReturn(mCurrentUser);
|
when(mMockCurrentUserObserable.getCurrentUser()).thenReturn(mCurrentUser);
|
||||||
|
|
||||||
mClockManager = new ClockManager(getContext(), mMockInjectionInflationController,
|
mClockManager = new ClockManager(getContext(), inflater,
|
||||||
mMockPluginManager, mMockColorExtractor, mMockContentResolver,
|
mMockPluginManager, mMockColorExtractor, mMockContentResolver,
|
||||||
mMockCurrentUserObserable, mMockSettingsWrapper, mFakeDockManager);
|
mMockCurrentUserObserable, mMockSettingsWrapper, mFakeDockManager);
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,6 @@ import com.android.internal.logging.MetricsLogger;
|
|||||||
import com.android.internal.logging.UiEventLogger;
|
import com.android.internal.logging.UiEventLogger;
|
||||||
import com.android.keyguard.CarrierText;
|
import com.android.keyguard.CarrierText;
|
||||||
import com.android.systemui.Dependency;
|
import com.android.systemui.Dependency;
|
||||||
import com.android.systemui.SystemUIFactory;
|
|
||||||
import com.android.systemui.SysuiBaseFragmentTest;
|
import com.android.systemui.SysuiBaseFragmentTest;
|
||||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||||
import com.android.systemui.dump.DumpManager;
|
import com.android.systemui.dump.DumpManager;
|
||||||
@@ -63,7 +62,6 @@ import com.android.systemui.statusbar.policy.ConfigurationController;
|
|||||||
import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler;
|
import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler;
|
||||||
import com.android.systemui.statusbar.policy.UserSwitcherController;
|
import com.android.systemui.statusbar.policy.UserSwitcherController;
|
||||||
import com.android.systemui.tuner.TunerService;
|
import com.android.systemui.tuner.TunerService;
|
||||||
import com.android.systemui.util.InjectionInflationController;
|
|
||||||
import com.android.systemui.util.settings.SecureSettings;
|
import com.android.systemui.util.settings.SecureSettings;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@@ -177,10 +175,6 @@ public class QSFragmentTest extends SysuiBaseFragmentTest {
|
|||||||
return new QSFragment(
|
return new QSFragment(
|
||||||
new RemoteInputQuickSettingsDisabler(context, mock(ConfigurationController.class),
|
new RemoteInputQuickSettingsDisabler(context, mock(ConfigurationController.class),
|
||||||
commandQueue),
|
commandQueue),
|
||||||
new InjectionInflationController(
|
|
||||||
SystemUIFactory.getInstance()
|
|
||||||
.getSysUIComponent()
|
|
||||||
.createViewInstanceCreatorFactory()),
|
|
||||||
mock(QSTileHost.class),
|
mock(QSTileHost.class),
|
||||||
mock(StatusBarStateController.class),
|
mock(StatusBarStateController.class),
|
||||||
commandQueue,
|
commandQueue,
|
||||||
|
|||||||
@@ -338,8 +338,6 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {
|
|||||||
when(mView.findViewById(R.id.keyguard_clock_container)).thenReturn(mKeyguardClockSwitch);
|
when(mView.findViewById(R.id.keyguard_clock_container)).thenReturn(mKeyguardClockSwitch);
|
||||||
when(mView.findViewById(R.id.notification_stack_scroller))
|
when(mView.findViewById(R.id.notification_stack_scroller))
|
||||||
.thenReturn(mNotificationStackScrollLayout);
|
.thenReturn(mNotificationStackScrollLayout);
|
||||||
when(mNotificationStackScrollLayout.getController())
|
|
||||||
.thenReturn(mNotificationStackScrollLayoutController);
|
|
||||||
when(mNotificationStackScrollLayoutController.getHeight()).thenReturn(1000);
|
when(mNotificationStackScrollLayoutController.getHeight()).thenReturn(1000);
|
||||||
when(mNotificationStackScrollLayoutController.getHeadsUpCallback())
|
when(mNotificationStackScrollLayoutController.getHeadsUpCallback())
|
||||||
.thenReturn(mHeadsUpCallback);
|
.thenReturn(mHeadsUpCallback);
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ import androidx.test.filters.SmallTest;
|
|||||||
|
|
||||||
import com.android.keyguard.LockIconViewController;
|
import com.android.keyguard.LockIconViewController;
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
import com.android.systemui.SystemUIFactory;
|
|
||||||
import com.android.systemui.SysuiTestCase;
|
import com.android.systemui.SysuiTestCase;
|
||||||
import com.android.systemui.classifier.FalsingCollectorFake;
|
import com.android.systemui.classifier.FalsingCollectorFake;
|
||||||
import com.android.systemui.dock.DockManager;
|
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.notification.stack.NotificationStackScrollLayoutController;
|
||||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||||
import com.android.systemui.tuner.TunerService;
|
import com.android.systemui.tuner.TunerService;
|
||||||
import com.android.systemui.util.InjectionInflationController;
|
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@@ -117,10 +115,6 @@ public class NotificationShadeWindowViewTest extends SysuiTestCase {
|
|||||||
when(mDockManager.isDocked()).thenReturn(false);
|
when(mDockManager.isDocked()).thenReturn(false);
|
||||||
|
|
||||||
mController = new NotificationShadeWindowViewController(
|
mController = new NotificationShadeWindowViewController(
|
||||||
new InjectionInflationController(
|
|
||||||
SystemUIFactory.getInstance()
|
|
||||||
.getSysUIComponent()
|
|
||||||
.createViewInstanceCreatorFactory()),
|
|
||||||
mCoordinator,
|
mCoordinator,
|
||||||
mPulseExpansionHandler,
|
mPulseExpansionHandler,
|
||||||
mDynamicPrivacyController,
|
mDynamicPrivacyController,
|
||||||
|
|||||||
@@ -314,7 +314,6 @@ public class StatusBarTest extends SysuiTestCase {
|
|||||||
|
|
||||||
mContext.setTheme(R.style.Theme_SystemUI_LightWallpaper);
|
mContext.setTheme(R.style.Theme_SystemUI_LightWallpaper);
|
||||||
|
|
||||||
when(mStackScroller.getController()).thenReturn(mStackScrollerController);
|
|
||||||
when(mStackScrollerController.getView()).thenReturn(mStackScroller);
|
when(mStackScrollerController.getView()).thenReturn(mStackScroller);
|
||||||
when(mStackScrollerController.getNotificationListContainer()).thenReturn(
|
when(mStackScrollerController.getNotificationListContainer()).thenReturn(
|
||||||
mNotificationListContainer);
|
mNotificationListContainer);
|
||||||
|
|||||||
Reference in New Issue
Block a user