Loading packages/SystemUI/src/com/android/systemui/CoreStartable.java +13 −2 Original line number Diff line number Diff line Loading @@ -33,12 +33,23 @@ import java.io.PrintWriter; * abstract fun bind(impl: FoobarStartable): CoreStartable * </pre> * * If your CoreStartable depends on different CoreStartables starting before it, use a * {@link com.android.systemui.startable.Dependencies} annotation to list out those dependencies. * If your CoreStartable depends on different CoreStartables starting before it, you can specify * another map binding listing out its dependencies: * <pre> * @Provides * @IntoMap * @Dependencies // Important! com.android.systemui.startable.Dependencies. * @ClassKey(FoobarStartable::class) * fun providesDeps(): Set<Class<out CoreStartable>> { * return setOf(OtherStartable::class.java) * } * </pre> * * * @see SystemUIApplication#startSystemUserServicesIfNeeded() */ public interface CoreStartable extends Dumpable { String STARTABLE_DEPENDENCIES = "startable_dependencies"; /** Main entry point for implementations. Called shortly after SysUI startup. */ void start(); Loading packages/SystemUI/src/com/android/systemui/SystemUIApplication.java +9 −10 Original line number Diff line number Diff line Loading @@ -44,16 +44,15 @@ import com.android.systemui.dagger.SysUIComponent; import com.android.systemui.dump.DumpManager; import com.android.systemui.process.ProcessWrapper; import com.android.systemui.res.R; import com.android.systemui.startable.Dependencies; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.util.NotificationChannels; import java.lang.reflect.InvocationTargetException; import java.util.ArrayDeque; import java.util.Arrays; import java.util.Comparator; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.StringJoiner; import java.util.TreeMap; Loading Loading @@ -307,9 +306,9 @@ public class SystemUIApplication extends Application implements Map.Entry<Class<?>, Provider<CoreStartable>> entry = queue.removeFirst(); Class<?> cls = entry.getKey(); Dependencies dep = cls.getAnnotation(Dependencies.class); Class<?>[] deps = (dep == null ? null : dep.value()); if (deps == null || startedStartables.containsAll(Arrays.asList(deps))) { Set<Class<? extends CoreStartable>> deps = mSysUIComponent.getStartableDependencies().get(cls); if (deps == null || startedStartables.containsAll(deps)) { String clsName = cls.getName(); int i = serviceIndex; // Copied to make lambda happy. timeInitialization( Loading @@ -331,12 +330,12 @@ public class SystemUIApplication extends Application implements while (!nextQueue.isEmpty()) { Map.Entry<Class<?>, Provider<CoreStartable>> entry = nextQueue.removeFirst(); Class<?> cls = entry.getKey(); Dependencies dep = cls.getAnnotation(Dependencies.class); Class<?>[] deps = (dep == null ? null : dep.value()); Set<Class<? extends CoreStartable>> deps = mSysUIComponent.getStartableDependencies().get(cls); StringJoiner stringJoiner = new StringJoiner(", "); for (int i = 0; deps != null && i < deps.length; i++) { if (!startedStartables.contains(deps[i])) { stringJoiner.add(deps[i].getName()); for (Class<? extends CoreStartable> c : deps) { if (!startedStartables.contains(c)) { stringJoiner.add(c.getName()); } } Log.e(TAG, "Failed to start " + cls.getName() Loading packages/SystemUI/src/com/android/systemui/dagger/SysUIComponent.java +7 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import com.android.systemui.dagger.qualifiers.PerUser; import com.android.systemui.dump.DumpManager; import com.android.systemui.keyguard.KeyguardSliceProvider; import com.android.systemui.people.PeopleProvider; import com.android.systemui.startable.Dependencies; import com.android.systemui.statusbar.NotificationInsetsModule; import com.android.systemui.statusbar.QsFrameTranslateModule; import com.android.systemui.statusbar.policy.ConfigurationController; Loading @@ -47,6 +48,7 @@ import dagger.Subcomponent; import java.util.Map; import java.util.Optional; import java.util.Set; import javax.inject.Provider; Loading Loading @@ -159,6 +161,11 @@ public interface SysUIComponent { */ @PerUser Map<Class<?>, Provider<CoreStartable>> getPerUserStartables(); /** * Returns {@link CoreStartable} dependencies if there are any. */ @Dependencies Map<Class<?>, Set<Class<? extends CoreStartable>>> getStartableDependencies(); /** * Member injection into the supplied argument. */ Loading packages/SystemUI/src/com/android/systemui/startable/Dependencies.kt +3 −5 Original line number Diff line number Diff line Loading @@ -16,7 +16,8 @@ package com.android.systemui.startable import com.android.systemui.CoreStartable import kotlin.reflect.KClass import java.lang.annotation.Documented import javax.inject.Qualifier /** * Allows a [CoreStartable] to declare that it must be started after its dependencies. Loading @@ -24,7 +25,4 @@ import kotlin.reflect.KClass * This creates a partial, topological ordering. See [com.android.systemui.SystemUIApplication] for * how this ordering is enforced at runtime. */ @MustBeDocumented @Target(AnnotationTarget.CLASS) @Retention(AnnotationRetention.RUNTIME) annotation class Dependencies(vararg val value: KClass<*> = []) @Qualifier @Documented @Retention(AnnotationRetention.RUNTIME) annotation class Dependencies() packages/SystemUI/src/com/android/systemui/statusbar/SysuiStatusBarStateController.java +0 −2 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ import android.view.View; import com.android.systemui.CoreStartable; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.startable.Dependencies; import com.android.systemui.statusbar.phone.CentralSurfaces; import java.lang.annotation.Retention; Loading @@ -31,7 +30,6 @@ import java.lang.annotation.Retention; /** * Sends updates to {@link StateListener}s about changes to the status bar state and dozing state */ @Dependencies(CentralSurfaces.class) public interface SysuiStatusBarStateController extends StatusBarStateController, CoreStartable { // TODO: b/115739177 (remove this explicit ordering if we can) Loading Loading
packages/SystemUI/src/com/android/systemui/CoreStartable.java +13 −2 Original line number Diff line number Diff line Loading @@ -33,12 +33,23 @@ import java.io.PrintWriter; * abstract fun bind(impl: FoobarStartable): CoreStartable * </pre> * * If your CoreStartable depends on different CoreStartables starting before it, use a * {@link com.android.systemui.startable.Dependencies} annotation to list out those dependencies. * If your CoreStartable depends on different CoreStartables starting before it, you can specify * another map binding listing out its dependencies: * <pre> * @Provides * @IntoMap * @Dependencies // Important! com.android.systemui.startable.Dependencies. * @ClassKey(FoobarStartable::class) * fun providesDeps(): Set<Class<out CoreStartable>> { * return setOf(OtherStartable::class.java) * } * </pre> * * * @see SystemUIApplication#startSystemUserServicesIfNeeded() */ public interface CoreStartable extends Dumpable { String STARTABLE_DEPENDENCIES = "startable_dependencies"; /** Main entry point for implementations. Called shortly after SysUI startup. */ void start(); Loading
packages/SystemUI/src/com/android/systemui/SystemUIApplication.java +9 −10 Original line number Diff line number Diff line Loading @@ -44,16 +44,15 @@ import com.android.systemui.dagger.SysUIComponent; import com.android.systemui.dump.DumpManager; import com.android.systemui.process.ProcessWrapper; import com.android.systemui.res.R; import com.android.systemui.startable.Dependencies; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.util.NotificationChannels; import java.lang.reflect.InvocationTargetException; import java.util.ArrayDeque; import java.util.Arrays; import java.util.Comparator; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.StringJoiner; import java.util.TreeMap; Loading Loading @@ -307,9 +306,9 @@ public class SystemUIApplication extends Application implements Map.Entry<Class<?>, Provider<CoreStartable>> entry = queue.removeFirst(); Class<?> cls = entry.getKey(); Dependencies dep = cls.getAnnotation(Dependencies.class); Class<?>[] deps = (dep == null ? null : dep.value()); if (deps == null || startedStartables.containsAll(Arrays.asList(deps))) { Set<Class<? extends CoreStartable>> deps = mSysUIComponent.getStartableDependencies().get(cls); if (deps == null || startedStartables.containsAll(deps)) { String clsName = cls.getName(); int i = serviceIndex; // Copied to make lambda happy. timeInitialization( Loading @@ -331,12 +330,12 @@ public class SystemUIApplication extends Application implements while (!nextQueue.isEmpty()) { Map.Entry<Class<?>, Provider<CoreStartable>> entry = nextQueue.removeFirst(); Class<?> cls = entry.getKey(); Dependencies dep = cls.getAnnotation(Dependencies.class); Class<?>[] deps = (dep == null ? null : dep.value()); Set<Class<? extends CoreStartable>> deps = mSysUIComponent.getStartableDependencies().get(cls); StringJoiner stringJoiner = new StringJoiner(", "); for (int i = 0; deps != null && i < deps.length; i++) { if (!startedStartables.contains(deps[i])) { stringJoiner.add(deps[i].getName()); for (Class<? extends CoreStartable> c : deps) { if (!startedStartables.contains(c)) { stringJoiner.add(c.getName()); } } Log.e(TAG, "Failed to start " + cls.getName() Loading
packages/SystemUI/src/com/android/systemui/dagger/SysUIComponent.java +7 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import com.android.systemui.dagger.qualifiers.PerUser; import com.android.systemui.dump.DumpManager; import com.android.systemui.keyguard.KeyguardSliceProvider; import com.android.systemui.people.PeopleProvider; import com.android.systemui.startable.Dependencies; import com.android.systemui.statusbar.NotificationInsetsModule; import com.android.systemui.statusbar.QsFrameTranslateModule; import com.android.systemui.statusbar.policy.ConfigurationController; Loading @@ -47,6 +48,7 @@ import dagger.Subcomponent; import java.util.Map; import java.util.Optional; import java.util.Set; import javax.inject.Provider; Loading Loading @@ -159,6 +161,11 @@ public interface SysUIComponent { */ @PerUser Map<Class<?>, Provider<CoreStartable>> getPerUserStartables(); /** * Returns {@link CoreStartable} dependencies if there are any. */ @Dependencies Map<Class<?>, Set<Class<? extends CoreStartable>>> getStartableDependencies(); /** * Member injection into the supplied argument. */ Loading
packages/SystemUI/src/com/android/systemui/startable/Dependencies.kt +3 −5 Original line number Diff line number Diff line Loading @@ -16,7 +16,8 @@ package com.android.systemui.startable import com.android.systemui.CoreStartable import kotlin.reflect.KClass import java.lang.annotation.Documented import javax.inject.Qualifier /** * Allows a [CoreStartable] to declare that it must be started after its dependencies. Loading @@ -24,7 +25,4 @@ import kotlin.reflect.KClass * This creates a partial, topological ordering. See [com.android.systemui.SystemUIApplication] for * how this ordering is enforced at runtime. */ @MustBeDocumented @Target(AnnotationTarget.CLASS) @Retention(AnnotationRetention.RUNTIME) annotation class Dependencies(vararg val value: KClass<*> = []) @Qualifier @Documented @Retention(AnnotationRetention.RUNTIME) annotation class Dependencies()
packages/SystemUI/src/com/android/systemui/statusbar/SysuiStatusBarStateController.java +0 −2 Original line number Diff line number Diff line Loading @@ -23,7 +23,6 @@ import android.view.View; import com.android.systemui.CoreStartable; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.startable.Dependencies; import com.android.systemui.statusbar.phone.CentralSurfaces; import java.lang.annotation.Retention; Loading @@ -31,7 +30,6 @@ import java.lang.annotation.Retention; /** * Sends updates to {@link StateListener}s about changes to the status bar state and dozing state */ @Dependencies(CentralSurfaces.class) public interface SysuiStatusBarStateController extends StatusBarStateController, CoreStartable { // TODO: b/115739177 (remove this explicit ordering if we can) Loading