Loading packages/SystemUI/res/values/config.xml +0 −2 Original line number Diff line number Diff line Loading @@ -273,7 +273,6 @@ <!-- SystemUI Services: The classes of the stuff to start. --> <string-array name="config_systemUIServiceComponents" translatable="false"> <item>com.android.systemui.Dependency$DependencyCreator</item> <item>com.android.systemui.util.NotificationChannels</item> <item>com.android.systemui.statusbar.CommandQueue$CommandQueueStart</item> <item>com.android.systemui.keyguard.KeyguardViewMediator</item> Loading Loading @@ -304,7 +303,6 @@ <!-- SystemUI Services (per user): The classes of the stuff to start for each user. This is a subset of the config_systemUIServiceComponents --> <string-array name="config_systemUIServiceComponentsPerUser" translatable="false"> <item>com.android.systemui.Dependency$DependencyCreator</item> <item>com.android.systemui.util.NotificationChannels</item> </string-array> Loading packages/SystemUI/src/com/android/systemui/Dependency.java +26 −37 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.systemui; import android.annotation.Nullable; import android.app.INotificationManager; import android.content.Context; import android.content.res.Configuration; import android.hardware.SensorPrivacyManager; import android.hardware.display.NightDisplayListener; Loading Loading @@ -114,7 +113,6 @@ import com.android.systemui.util.leak.LeakReporter; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.HashMap; import java.util.function.Consumer; import javax.inject.Inject; Loading @@ -138,9 +136,7 @@ import dagger.Subcomponent; * they have no clients they should not have any registered resources like bound * services, registered receivers, etc. */ public class Dependency extends SystemUI { private static final String TAG = "Dependency"; public class Dependency { /** * Key for getting a background Looper for background work. */ Loading Loading @@ -305,8 +301,20 @@ public class Dependency extends SystemUI { public Dependency() { } @Override public void start() { /** * Initialize Depenency. */ public static void initDependencies(SystemUIRootComponent rootComponent) { if (sDependency != null) { return; } sDependency = new Dependency(); rootComponent.createDependency().createSystemUI(sDependency); sDependency.start(); } protected void start() { // TODO: Think about ways to push these creation rules out of Dependency to cut down // on imports. mProviders.put(TIME_TICK_HANDLER, mTimeTickHandler::get); Loading Loading @@ -486,10 +494,14 @@ public class Dependency extends SystemUI { sDependency = this; } @Override public synchronized void dump(FileDescriptor fd, PrintWriter pw, String[] args) { super.dump(fd, pw, args); static void staticDump(FileDescriptor fd, PrintWriter pw, String[] args) { sDependency.dump(fd, pw, args); } /** * {@see SystemUI.dump} */ public synchronized void dump(FileDescriptor fd, PrintWriter pw, String[] args) { // Make sure that the DumpController gets added to mDependencies, as they are only added // with Dependency#get. getDependency(DumpController.class); Loading @@ -509,9 +521,11 @@ public class Dependency extends SystemUI { .forEach(o -> ((Dumpable) o).dump(fd, pw, args)); } @Override protected static void staticOnConfigurationChanged(Configuration newConfig) { sDependency.onConfigurationChanged(newConfig); } protected synchronized void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); mDependencies.values().stream().filter(obj -> obj instanceof ConfigurationChangedReceiver) .forEach(o -> ((ConfigurationChangedReceiver) o).onConfigurationChanged(newConfig)); } Loading Loading @@ -564,20 +578,6 @@ public class Dependency extends SystemUI { } } /** * Used in separate processes (like tuner settings) to init the dependencies. */ public static void initDependencies(Context context) { if (sDependency != null) return; Dependency d = new Dependency(); SystemUIFactory.getInstance().getRootComponent() .createDependency() .createSystemUI(d); d.mContext = context; d.mComponents = new HashMap<>(); d.start(); } /** * Used in separate process teardown to ensure the context isn't leaked. * Loading Loading @@ -629,15 +629,4 @@ public class Dependency extends SystemUI { public interface DependencyInjector { void createSystemUI(Dependency dependency); } public static class DependencyCreator implements Injector { @Override public SystemUI apply(Context context) { Dependency dependency = new Dependency(); SystemUIFactory.getInstance().getRootComponent() .createDependency() .createSystemUI(dependency); return dependency; } } } packages/SystemUI/src/com/android/systemui/ForegroundServicesDialog.java +1 −1 Original line number Diff line number Diff line Loading @@ -75,7 +75,7 @@ public final class ForegroundServicesDialog extends AlertActivity implements @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Dependency.initDependencies(getApplicationContext()); Dependency.initDependencies(SystemUIFactory.getInstance().getRootComponent()); mMetricsLogger = Dependency.get(MetricsLogger.class); Loading packages/SystemUI/src/com/android/systemui/SystemUIApplication.java +15 −3 Original line number Diff line number Diff line Loading @@ -62,19 +62,28 @@ public class SystemUIApplication extends Application implements SysUiServiceProv private final Map<Class<?>, Object> mComponents = new HashMap<>(); private ContextAvailableCallback mContextAvailableCallback; public SystemUIApplication() { super(); Log.v(TAG, "SystemUIApplication constructed."); } @Override public void onCreate() { super.onCreate(); Log.v(TAG, "SystemUIApplication created."); // This line is used to setup Dagger's dependency injection and should be kept at the // top of this method. TimingsTraceLog log = new TimingsTraceLog("SystemUIBootTiming", Trace.TRACE_TAG_APP); log.traceBegin("DependencyInjection"); mContextAvailableCallback.onContextAvailable(this); log.traceEnd(); // Set the application theme that is inherited by all services. Note that setting the // application theme in the manifest does only work for activities. Keep this in sync with // the theme set there. setTheme(R.style.Theme_SystemUI); if (Process.myUserHandle().equals(UserHandle.SYSTEM)) { IntentFilter bootCompletedFilter = new IntentFilter(Intent.ACTION_BOOT_COMPLETED); bootCompletedFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); Loading Loading @@ -138,7 +147,7 @@ public class SystemUIApplication extends Application implements SysUiServiceProv /** * Ensures that all the Secondary user SystemUI services are running. If they are already * running, this is a no-op. This is needed to conditinally start all the services, as we only * running, this is a no-op. This is needed to conditionally start all the services, as we only * need to have it in the main process. * <p>This method must only be called from the main thread.</p> */ Loading @@ -159,7 +168,9 @@ public class SystemUIApplication extends Application implements SysUiServiceProv // see ActivityManagerService.finishBooting() if ("1".equals(SystemProperties.get("sys.boot_completed"))) { mBootCompleted = true; if (DEBUG) Log.v(TAG, "BOOT_COMPLETED was already sent"); if (DEBUG) { Log.v(TAG, "BOOT_COMPLETED was already sent"); } } } Loading Loading @@ -273,6 +284,7 @@ public class SystemUIApplication extends Application implements SysUiServiceProv @Override public void onConfigurationChanged(Configuration newConfig) { if (mServicesStarted) { Dependency.staticOnConfigurationChanged(newConfig); int len = mServices.length; for (int i = 0; i < len; i++) { if (mServices[i] != null) { Loading packages/SystemUI/src/com/android/systemui/SystemUIFactory.java +5 −1 Original line number Diff line number Diff line Loading @@ -115,6 +115,10 @@ public class SystemUIFactory { .dependencyProvider(new com.android.systemui.DependencyProvider()) .contextHolder(new ContextHolder(context)) .build(); // Every other part of our codebase currently relies on Dependency, so we // really need to ensure the Dependency gets initialized early on. Dependency.initDependencies(mRootComponent); } public SystemUIRootComponent getRootComponent() { Loading Loading
packages/SystemUI/res/values/config.xml +0 −2 Original line number Diff line number Diff line Loading @@ -273,7 +273,6 @@ <!-- SystemUI Services: The classes of the stuff to start. --> <string-array name="config_systemUIServiceComponents" translatable="false"> <item>com.android.systemui.Dependency$DependencyCreator</item> <item>com.android.systemui.util.NotificationChannels</item> <item>com.android.systemui.statusbar.CommandQueue$CommandQueueStart</item> <item>com.android.systemui.keyguard.KeyguardViewMediator</item> Loading Loading @@ -304,7 +303,6 @@ <!-- SystemUI Services (per user): The classes of the stuff to start for each user. This is a subset of the config_systemUIServiceComponents --> <string-array name="config_systemUIServiceComponentsPerUser" translatable="false"> <item>com.android.systemui.Dependency$DependencyCreator</item> <item>com.android.systemui.util.NotificationChannels</item> </string-array> Loading
packages/SystemUI/src/com/android/systemui/Dependency.java +26 −37 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.systemui; import android.annotation.Nullable; import android.app.INotificationManager; import android.content.Context; import android.content.res.Configuration; import android.hardware.SensorPrivacyManager; import android.hardware.display.NightDisplayListener; Loading Loading @@ -114,7 +113,6 @@ import com.android.systemui.util.leak.LeakReporter; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.HashMap; import java.util.function.Consumer; import javax.inject.Inject; Loading @@ -138,9 +136,7 @@ import dagger.Subcomponent; * they have no clients they should not have any registered resources like bound * services, registered receivers, etc. */ public class Dependency extends SystemUI { private static final String TAG = "Dependency"; public class Dependency { /** * Key for getting a background Looper for background work. */ Loading Loading @@ -305,8 +301,20 @@ public class Dependency extends SystemUI { public Dependency() { } @Override public void start() { /** * Initialize Depenency. */ public static void initDependencies(SystemUIRootComponent rootComponent) { if (sDependency != null) { return; } sDependency = new Dependency(); rootComponent.createDependency().createSystemUI(sDependency); sDependency.start(); } protected void start() { // TODO: Think about ways to push these creation rules out of Dependency to cut down // on imports. mProviders.put(TIME_TICK_HANDLER, mTimeTickHandler::get); Loading Loading @@ -486,10 +494,14 @@ public class Dependency extends SystemUI { sDependency = this; } @Override public synchronized void dump(FileDescriptor fd, PrintWriter pw, String[] args) { super.dump(fd, pw, args); static void staticDump(FileDescriptor fd, PrintWriter pw, String[] args) { sDependency.dump(fd, pw, args); } /** * {@see SystemUI.dump} */ public synchronized void dump(FileDescriptor fd, PrintWriter pw, String[] args) { // Make sure that the DumpController gets added to mDependencies, as they are only added // with Dependency#get. getDependency(DumpController.class); Loading @@ -509,9 +521,11 @@ public class Dependency extends SystemUI { .forEach(o -> ((Dumpable) o).dump(fd, pw, args)); } @Override protected static void staticOnConfigurationChanged(Configuration newConfig) { sDependency.onConfigurationChanged(newConfig); } protected synchronized void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); mDependencies.values().stream().filter(obj -> obj instanceof ConfigurationChangedReceiver) .forEach(o -> ((ConfigurationChangedReceiver) o).onConfigurationChanged(newConfig)); } Loading Loading @@ -564,20 +578,6 @@ public class Dependency extends SystemUI { } } /** * Used in separate processes (like tuner settings) to init the dependencies. */ public static void initDependencies(Context context) { if (sDependency != null) return; Dependency d = new Dependency(); SystemUIFactory.getInstance().getRootComponent() .createDependency() .createSystemUI(d); d.mContext = context; d.mComponents = new HashMap<>(); d.start(); } /** * Used in separate process teardown to ensure the context isn't leaked. * Loading Loading @@ -629,15 +629,4 @@ public class Dependency extends SystemUI { public interface DependencyInjector { void createSystemUI(Dependency dependency); } public static class DependencyCreator implements Injector { @Override public SystemUI apply(Context context) { Dependency dependency = new Dependency(); SystemUIFactory.getInstance().getRootComponent() .createDependency() .createSystemUI(dependency); return dependency; } } }
packages/SystemUI/src/com/android/systemui/ForegroundServicesDialog.java +1 −1 Original line number Diff line number Diff line Loading @@ -75,7 +75,7 @@ public final class ForegroundServicesDialog extends AlertActivity implements @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Dependency.initDependencies(getApplicationContext()); Dependency.initDependencies(SystemUIFactory.getInstance().getRootComponent()); mMetricsLogger = Dependency.get(MetricsLogger.class); Loading
packages/SystemUI/src/com/android/systemui/SystemUIApplication.java +15 −3 Original line number Diff line number Diff line Loading @@ -62,19 +62,28 @@ public class SystemUIApplication extends Application implements SysUiServiceProv private final Map<Class<?>, Object> mComponents = new HashMap<>(); private ContextAvailableCallback mContextAvailableCallback; public SystemUIApplication() { super(); Log.v(TAG, "SystemUIApplication constructed."); } @Override public void onCreate() { super.onCreate(); Log.v(TAG, "SystemUIApplication created."); // This line is used to setup Dagger's dependency injection and should be kept at the // top of this method. TimingsTraceLog log = new TimingsTraceLog("SystemUIBootTiming", Trace.TRACE_TAG_APP); log.traceBegin("DependencyInjection"); mContextAvailableCallback.onContextAvailable(this); log.traceEnd(); // Set the application theme that is inherited by all services. Note that setting the // application theme in the manifest does only work for activities. Keep this in sync with // the theme set there. setTheme(R.style.Theme_SystemUI); if (Process.myUserHandle().equals(UserHandle.SYSTEM)) { IntentFilter bootCompletedFilter = new IntentFilter(Intent.ACTION_BOOT_COMPLETED); bootCompletedFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); Loading Loading @@ -138,7 +147,7 @@ public class SystemUIApplication extends Application implements SysUiServiceProv /** * Ensures that all the Secondary user SystemUI services are running. If they are already * running, this is a no-op. This is needed to conditinally start all the services, as we only * running, this is a no-op. This is needed to conditionally start all the services, as we only * need to have it in the main process. * <p>This method must only be called from the main thread.</p> */ Loading @@ -159,7 +168,9 @@ public class SystemUIApplication extends Application implements SysUiServiceProv // see ActivityManagerService.finishBooting() if ("1".equals(SystemProperties.get("sys.boot_completed"))) { mBootCompleted = true; if (DEBUG) Log.v(TAG, "BOOT_COMPLETED was already sent"); if (DEBUG) { Log.v(TAG, "BOOT_COMPLETED was already sent"); } } } Loading Loading @@ -273,6 +284,7 @@ public class SystemUIApplication extends Application implements SysUiServiceProv @Override public void onConfigurationChanged(Configuration newConfig) { if (mServicesStarted) { Dependency.staticOnConfigurationChanged(newConfig); int len = mServices.length; for (int i = 0; i < len; i++) { if (mServices[i] != null) { Loading
packages/SystemUI/src/com/android/systemui/SystemUIFactory.java +5 −1 Original line number Diff line number Diff line Loading @@ -115,6 +115,10 @@ public class SystemUIFactory { .dependencyProvider(new com.android.systemui.DependencyProvider()) .contextHolder(new ContextHolder(context)) .build(); // Every other part of our codebase currently relies on Dependency, so we // really need to ensure the Dependency gets initialized early on. Dependency.initDependencies(mRootComponent); } public SystemUIRootComponent getRootComponent() { Loading