diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginActionManager.java b/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginActionManager.java index 9ea4b578ad3bf..3275d2d804bef 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginActionManager.java +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginActionManager.java @@ -73,6 +73,7 @@ public class PluginActionManager { private final boolean mIsDebuggable; private final PackageManager mPm; private final Class mPluginClass; + private final PluginInitializer mInitializer; private final Executor mMainExecutor; private final Executor mBgExecutor; @@ -86,11 +87,13 @@ public class PluginActionManager { Executor mainExecutor, Executor bgExecutor, boolean debuggable, + PluginInitializer initializer, NotificationManager notificationManager, PluginEnabler pluginEnabler, List privilegedPlugins, PluginInstance.Factory pluginInstanceFactory) { mPluginClass = pluginClass; + mInitializer = initializer; mMainExecutor = mainExecutor; mBgExecutor = bgExecutor; mContext = context; @@ -373,19 +376,21 @@ public class PluginActionManager { private final PackageManager mPackageManager; private final Executor mMainExecutor; private final Executor mBgExecutor; + private final PluginInitializer mInitializer; private final NotificationManager mNotificationManager; private final PluginEnabler mPluginEnabler; private final List mPrivilegedPlugins; private final PluginInstance.Factory mPluginInstanceFactory; public Factory(Context context, PackageManager packageManager, - Executor mainExecutor, Executor bgExecutor, + Executor mainExecutor, Executor bgExecutor, PluginInitializer initializer, NotificationManager notificationManager, PluginEnabler pluginEnabler, List privilegedPlugins, PluginInstance.Factory pluginInstanceFactory) { mContext = context; mPackageManager = packageManager; mMainExecutor = mainExecutor; mBgExecutor = bgExecutor; + mInitializer = initializer; mNotificationManager = notificationManager; mPluginEnabler = pluginEnabler; mPrivilegedPlugins = privilegedPlugins; @@ -397,7 +402,7 @@ public class PluginActionManager { boolean allowMultiple, boolean debuggable) { return new PluginActionManager<>(mContext, mPackageManager, action, listener, pluginClass, allowMultiple, mMainExecutor, mBgExecutor, - debuggable, mNotificationManager, mPluginEnabler, + debuggable, mInitializer, mNotificationManager, mPluginEnabler, mPrivilegedPlugins, mPluginInstanceFactory); } } diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginInitializer.java b/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginInitializer.java new file mode 100644 index 0000000000000..5890f81cc6936 --- /dev/null +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/plugins/PluginInitializer.java @@ -0,0 +1,21 @@ +/* + * 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.shared.plugins; + +/** + * Provides necessary components for initializing {@link PluginManagerImpl}. + */ +public interface PluginInitializer { +} diff --git a/packages/SystemUI/src/com/android/systemui/dagger/PluginModule.java b/packages/SystemUI/src/com/android/systemui/dagger/PluginModule.java index 67ad3db74f8ad..406981d0c4adc 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/PluginModule.java +++ b/packages/SystemUI/src/com/android/systemui/dagger/PluginModule.java @@ -24,7 +24,6 @@ import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.DarkIconDispatcher; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.GlobalActions; -import com.android.systemui.plugins.PluginDependencyProvider; import com.android.systemui.plugins.VolumeDialogController; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.StatusBarStateControllerImpl; @@ -33,7 +32,6 @@ import com.android.systemui.volume.VolumeDialogControllerImpl; import dagger.Binds; import dagger.Module; -import dagger.Provides; /** * Module for binding Plugin implementations. @@ -41,40 +39,36 @@ import dagger.Provides; * TODO(b/166258224): Many of these should be moved closer to their implementations. */ @Module -public abstract class PluginModule { - - /** */ - @Provides - static ActivityStarter provideActivityStarter(ActivityStarterDelegate delegate, - PluginDependencyProvider dependencyProvider) { - dependencyProvider.allowPluginDependency(ActivityStarter.class, delegate); - return delegate; - } +public interface PluginModule { /** */ @Binds - abstract DarkIconDispatcher provideDarkIconDispatcher(DarkIconDispatcherImpl controllerImpl); + ActivityStarter provideActivityStarter(ActivityStarterDelegate delegate); /** */ @Binds - abstract FalsingManager provideFalsingManager(FalsingManagerProxy falsingManagerImpl); + DarkIconDispatcher provideDarkIconDispatcher(DarkIconDispatcherImpl controllerImpl); /** */ @Binds - abstract GlobalActions provideGlobalActions(GlobalActionsImpl controllerImpl); + FalsingManager provideFalsingManager(FalsingManagerProxy falsingManagerImpl); /** */ @Binds - abstract GlobalActions.GlobalActionsManager provideGlobalActionsManager( + GlobalActions provideGlobalActions(GlobalActionsImpl controllerImpl); + + /** */ + @Binds + GlobalActions.GlobalActionsManager provideGlobalActionsManager( GlobalActionsComponent controllerImpl); /** */ @Binds - abstract StatusBarStateController provideStatusBarStateController( + StatusBarStateController provideStatusBarStateController( StatusBarStateControllerImpl controllerImpl); /** */ @Binds - abstract VolumeDialogController provideVolumeDialogController( - VolumeDialogControllerImpl controllerImpl); + VolumeDialogController provideVolumeDialogController(VolumeDialogControllerImpl controllerImpl); + } diff --git a/packages/SystemUI/src/com/android/systemui/plugins/PluginInitializerImpl.java b/packages/SystemUI/src/com/android/systemui/plugins/PluginInitializerImpl.java new file mode 100644 index 0000000000000..8effd53ef56da --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/plugins/PluginInitializerImpl.java @@ -0,0 +1,29 @@ +/* + * 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.plugins; + +import com.android.systemui.shared.plugins.PluginInitializer; + +import javax.inject.Inject; +import javax.inject.Singleton; + +/** */ +@Singleton +public class PluginInitializerImpl implements PluginInitializer { + @Inject + public PluginInitializerImpl(PluginDependencyProvider dependencyProvider) { + dependencyProvider.allowPluginDependency(ActivityStarter.class); + } +} diff --git a/packages/SystemUI/src/com/android/systemui/plugins/PluginsModule.java b/packages/SystemUI/src/com/android/systemui/plugins/PluginsModule.java index a0cf44c8bfdcc..11c5efc4ed7db 100644 --- a/packages/SystemUI/src/com/android/systemui/plugins/PluginsModule.java +++ b/packages/SystemUI/src/com/android/systemui/plugins/PluginsModule.java @@ -28,6 +28,7 @@ import com.android.systemui.dagger.PluginModule; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.shared.plugins.PluginActionManager; import com.android.systemui.shared.plugins.PluginEnabler; +import com.android.systemui.shared.plugins.PluginInitializer; import com.android.systemui.shared.plugins.PluginInstance; import com.android.systemui.shared.plugins.PluginManager; import com.android.systemui.shared.plugins.PluginManagerImpl; @@ -68,6 +69,9 @@ public abstract class PluginsModule { @Binds abstract PluginEnabler bindsPluginEnablerImpl(PluginEnablerImpl impl); + @Binds + abstract PluginInitializer bindsPluginInitializerImpl(PluginInitializerImpl impl); + @Provides @Singleton static PluginInstance.Factory providesPluginInstanceFactory( @@ -85,12 +89,12 @@ public abstract class PluginsModule { @Singleton static PluginActionManager.Factory providePluginInstanceManagerFactory(Context context, PackageManager packageManager, @Main Executor mainExecutor, - @Named(PLUGIN_THREAD) Executor pluginExecutor, + @Named(PLUGIN_THREAD) Executor pluginExecutor, PluginInitializer initializer, NotificationManager notificationManager, PluginEnabler pluginEnabler, @Named(PLUGIN_PRIVILEGED) List privilegedPlugins, PluginInstance.Factory pluginInstanceFactory) { return new PluginActionManager.Factory( - context, packageManager, mainExecutor, pluginExecutor, + context, packageManager, mainExecutor, pluginExecutor, initializer, notificationManager, pluginEnabler, privilegedPlugins, pluginInstanceFactory); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/shared/plugins/PluginActionManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/shared/plugins/PluginActionManagerTest.java index 05280fa826ed7..ce366657b7b24 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shared/plugins/PluginActionManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/shared/plugins/PluginActionManagerTest.java @@ -74,6 +74,7 @@ public class PluginActionManagerTest extends SysuiTestCase { private PluginEnabler mMockEnabler; ComponentName mTestPluginComponentName = new ComponentName(PRIVILEGED_PACKAGE, TestPlugin.class.getName()); + private PluginInitializer mInitializer; private final FakeExecutor mFakeExecutor = new FakeExecutor(new FakeSystemClock()); NotificationManager mNotificationManager; private PluginInstance mPluginInstance; @@ -97,13 +98,14 @@ public class PluginActionManagerTest extends SysuiTestCase { mMockListener = mock(PluginListener.class); mMockEnabler = mock(PluginEnabler.class); mMockVersionInfo = mock(VersionInfo.class); + mInitializer = mock(PluginInitializer.class); mNotificationManager = mock(NotificationManager.class); mMockPlugin = mock(TestPlugin.class); mPluginInstance = mock(PluginInstance.class); when(mPluginInstance.getComponentName()).thenReturn(mTestPluginComponentName); when(mPluginInstance.getPackage()).thenReturn(mTestPluginComponentName.getPackageName()); mActionManagerFactory = new PluginActionManager.Factory(getContext(), mMockPm, - mFakeExecutor, mFakeExecutor, mNotificationManager, mMockEnabler, + mFakeExecutor, mFakeExecutor, mInitializer, mNotificationManager, mMockEnabler, new ArrayList<>(), mPluginInstanceFactory); mPluginActionManager = mActionManagerFactory.create("myAction", mMockListener, @@ -176,7 +178,7 @@ public class PluginActionManagerTest extends SysuiTestCase { public void testNonDebuggable_privileged() throws Exception { // Create a version that thinks the build is not debuggable. PluginActionManager.Factory factory = new PluginActionManager.Factory(getContext(), - mMockPm, mFakeExecutor, mFakeExecutor, mNotificationManager, + mMockPm, mFakeExecutor, mFakeExecutor, mInitializer, mNotificationManager, mMockEnabler, Collections.singletonList(PRIVILEGED_PACKAGE), mPluginInstanceFactory); mPluginActionManager = factory.create("myAction", mMockListener, @@ -220,7 +222,7 @@ public class PluginActionManagerTest extends SysuiTestCase { @Test public void testDisablePrivileged() throws Exception { PluginActionManager.Factory factory = new PluginActionManager.Factory(getContext(), - mMockPm, mFakeExecutor, mFakeExecutor, mNotificationManager, + mMockPm, mFakeExecutor, mFakeExecutor, mInitializer, mNotificationManager, mMockEnabler, Collections.singletonList(PRIVILEGED_PACKAGE), mPluginInstanceFactory); mPluginActionManager = factory.create("myAction", mMockListener,