Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9cd31549 authored by Sunny Goyal's avatar Sunny Goyal
Browse files

Moving PluginManager to dagger

Multiple singletons depend on Plugin which can cause deadlock
if PluginManager is initialized on main thread

Test: presubmit
Bug: 361850561
Bug: 373557167
Flag: EXEMPT dagger
Change-Id: I79f17ac6b78a2ce60df2d27a6e794b9e4eba1b51
parent dca74bcb
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -33,7 +33,6 @@
    <string name="taskbar_model_callbacks_factory_class" translatable="false">com.android.launcher3.taskbar.TaskbarModelCallbacksFactory</string>
    <string name="taskbar_view_callbacks_factory_class" translatable="false">com.android.launcher3.taskbar.TaskbarViewCallbacksFactory</string>
    <string name="launcher_restore_event_logger_class" translatable="false">com.android.quickstep.LauncherRestoreEventLoggerImpl</string>
    <string name="plugin_manager_wrapper_class" translatable="false">com.android.launcher3.uioverrides.plugins.PluginManagerWrapperImpl</string>
    <string name="taskbar_edu_tooltip_controller_class" translatable="false">com.android.launcher3.taskbar.TaskbarEduTooltipController</string>
    <string name="contextual_edu_manager_class" translatable="false">com.android.quickstep.contextualeducation.SystemContextualEduStatsManager</string>
    <string name="nav_handle_long_press_handler_class" translatable="false"></string>
+10 −6
Original line number Diff line number Diff line
@@ -27,6 +27,8 @@ import android.content.Intent;
import android.content.pm.ResolveInfo;

import com.android.launcher3.BuildConfig;
import com.android.launcher3.dagger.ApplicationContext;
import com.android.launcher3.dagger.LauncherAppSingleton;
import com.android.launcher3.util.PluginManagerWrapper;
import com.android.systemui.plugins.Plugin;
import com.android.systemui.plugins.PluginListener;
@@ -34,7 +36,6 @@ import com.android.systemui.shared.plugins.PluginActionManager;
import com.android.systemui.shared.plugins.PluginInstance;
import com.android.systemui.shared.plugins.PluginManagerImpl;
import com.android.systemui.shared.plugins.PluginPrefs;
import com.android.systemui.shared.system.UncaughtExceptionPreHandlerManager;

import java.io.PrintWriter;
import java.util.ArrayList;
@@ -42,16 +43,17 @@ import java.util.Collections;
import java.util.List;
import java.util.Set;

public class PluginManagerWrapperImpl extends PluginManagerWrapper {
import javax.inject.Inject;

    private static final UncaughtExceptionPreHandlerManager UNCAUGHT_EXCEPTION_PRE_HANDLER_MANAGER =
            new UncaughtExceptionPreHandlerManager();
@LauncherAppSingleton
public class PluginManagerWrapperImpl extends PluginManagerWrapper {

    private final Context mContext;
    private final PluginManagerImpl mPluginManager;
    private final PluginEnablerImpl mPluginEnabler;

    public PluginManagerWrapperImpl(Context c) {
    @Inject
    public PluginManagerWrapperImpl(@ApplicationContext Context c) {
        mContext = c;
        mPluginEnabler = new PluginEnablerImpl(c);
        List<String> privilegedPlugins = Collections.emptyList();
@@ -64,9 +66,11 @@ public class PluginManagerWrapperImpl extends PluginManagerWrapper {
                c.getSystemService(NotificationManager.class), mPluginEnabler,
                privilegedPlugins, instanceFactory);

        // Use null preHandlerManager, as the handler is never unregistered which can cause leaks
        // when using multiple dagger graphs.
        mPluginManager = new PluginManagerImpl(c, instanceManagerFactory,
                BuildConfig.IS_DEBUG_DEVICE,
                UNCAUGHT_EXCEPTION_PRE_HANDLER_MANAGER, mPluginEnabler,
                null /* preHandlerManager */, mPluginEnabler,
                new PluginPrefs(c), privilegedPlugins);
    }

+7 −1
Original line number Diff line number Diff line
@@ -15,8 +15,14 @@
 */
package com.android.quickstep.dagger;

import com.android.launcher3.uioverrides.plugins.PluginManagerWrapperImpl;
import com.android.launcher3.util.PluginManagerWrapper;

import dagger.Binds;
import dagger.Module;

@Module
public class QuickStepModule {
public abstract class QuickStepModule {

    @Binds abstract PluginManagerWrapper bindPluginManagerWrapper(PluginManagerWrapperImpl impl);
}
+0 −1
Original line number Diff line number Diff line
@@ -85,7 +85,6 @@
    <string name="wallpaper_picker_package" translatable="false"></string>
    <string name="local_colors_extraction_class" translatable="false"></string>
    <string name="search_session_manager_class" translatable="false"></string>
    <string name="plugin_manager_wrapper_class" translatable="false"></string>

    <!-- Scalable Grid configuration -->
    <!-- This is a float because it is converted to dp later in DeviceProfile -->
+2 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.content.Context;

import com.android.launcher3.pm.InstallSessionHelper;
import com.android.launcher3.util.DaggerSingletonTracker;
import com.android.launcher3.util.PluginManagerWrapper;
import com.android.launcher3.util.ScreenOnTracker;
import com.android.launcher3.util.SettingsCache;
import com.android.launcher3.widget.custom.CustomWidgetManager;
@@ -40,6 +41,7 @@ public interface LauncherBaseAppComponent {
    ScreenOnTracker getScreenOnTracker();
    SettingsCache getSettingsCache();
    CustomWidgetManager getCustomWidgetManager();
    PluginManagerWrapper getPluginManagerWrapper();

    /** Builder for LauncherBaseAppComponent. */
    interface Builder {
Loading