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

Commit 0ceb3e03 authored by Makoto Onuki's avatar Makoto Onuki
Browse files

Expose APIs to register service manager wrappers.

Bug: 143788029
Test: boot & tree hugger
Change-Id: I6a1ce9d9603ce79d2ddb14f2a946fb51be25a9e4
parent 40ff6d65
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package android.app.job;

import android.annotation.SystemApi;
import android.app.JobSchedulerImpl;
import android.app.SystemServiceRegistry;
import android.content.Context;
@@ -28,6 +29,7 @@ import android.os.PowerWhitelistManager;
 *
 * @hide
 */
@SystemApi
public class JobSchedulerFrameworkInitializer {
    private JobSchedulerFrameworkInitializer() {
    }
@@ -38,8 +40,6 @@ public class JobSchedulerFrameworkInitializer {
     * {@link Context#getSystemService} can return them.
     *
     * <p>If this is called from other places, it throws a {@link IllegalStateException).
     *
     * TODO Make it a system API
     */
    public static void registerServiceWrappers() {
        SystemServiceRegistry.registerStaticService(
+27 −0
Original line number Diff line number Diff line
@@ -652,6 +652,29 @@ package android.app {
    method public boolean isStatusBarExpansionDisabled();
  }
  public final class SystemServiceRegistry {
    method public static <TServiceClass> void registerContextAwareService(@NonNull String, @NonNull Class<TServiceClass>, @NonNull android.app.SystemServiceRegistry.ContextAwareServiceProducerWithBinder<TServiceClass>);
    method public static <TServiceClass> void registerContextAwareService(@NonNull String, @NonNull Class<TServiceClass>, @NonNull android.app.SystemServiceRegistry.ContextAwareServiceProducerWithoutBinder<TServiceClass>);
    method public static <TServiceClass> void registerStaticService(@NonNull String, @NonNull Class<TServiceClass>, @NonNull android.app.SystemServiceRegistry.StaticServiceProducerWithBinder<TServiceClass>);
    method public static <TServiceClass> void registerStaticService(@NonNull String, @NonNull Class<TServiceClass>, @NonNull android.app.SystemServiceRegistry.StaticServiceProducerWithoutBinder<TServiceClass>);
  }
  public static interface SystemServiceRegistry.ContextAwareServiceProducerWithBinder<TServiceClass> {
    method @NonNull public TServiceClass createService(@NonNull android.content.Context, @NonNull android.os.IBinder);
  }
  public static interface SystemServiceRegistry.ContextAwareServiceProducerWithoutBinder<TServiceClass> {
    method @NonNull public TServiceClass createService(@NonNull android.content.Context);
  }
  public static interface SystemServiceRegistry.StaticServiceProducerWithBinder<TServiceClass> {
    method @NonNull public TServiceClass createService(@NonNull android.os.IBinder);
  }
  public static interface SystemServiceRegistry.StaticServiceProducerWithoutBinder<TServiceClass> {
    method @NonNull public TServiceClass createService();
  }
  public class UiModeManager {
    method @RequiresPermission(android.Manifest.permission.ENTER_CAR_MODE_PRIORITIZED) public void enableCarMode(@IntRange(from=0) int, int);
    field public static final String ACTION_ENTER_CAR_MODE_PRIORITIZED = "android.app.action.ENTER_CAR_MODE_PRIORITIZED";
@@ -1091,6 +1114,10 @@ package android.app.job {
    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public abstract int scheduleAsPackage(@NonNull android.app.job.JobInfo, @NonNull String, int, String);
  }
  public class JobSchedulerFrameworkInitializer {
    method public static void registerServiceWrappers();
  }
}
package android.app.prediction {
+27 −23
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package android.app;
import android.accounts.AccountManager;
import android.accounts.IAccountManager;
import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.app.ContextImpl.ServiceInitializationState;
import android.app.admin.DevicePolicyManager;
import android.app.admin.IDevicePolicyManager;
@@ -193,6 +194,7 @@ import java.util.Map;
 *
 * @hide
 */
@SystemApi
public final class SystemServiceRegistry {
    private static final String TAG = "SystemServiceRegistry";

@@ -1191,7 +1193,6 @@ public final class SystemServiceRegistry {
        try {
            // Note: the following functions need to be @SystemApis, once they become mainline
            // modules.

            JobSchedulerFrameworkInitializer.registerServiceWrappers();
            BlobStoreManagerFrameworkInitializer.initialize();
            TelephonyFrameworkInitializer.registerServiceWrappers();
@@ -1246,18 +1247,20 @@ public final class SystemServiceRegistry {

    /**
     * Callback interface used as a parameter to {@link #registerStaticService(
     * String, Class, StaticServiceProducerNoBinder)}, which generates a service wrapper instance
     * that's not tied to any context and does not take a service binder object in the constructor.
     * String, Class, StaticServiceProducerWithoutBinder)}, which generates a service wrapper
     * instance that's not tied to any context and does not take a service binder object in the
     * constructor.
     *
     * @param <TServiceClass> type of the service wrapper class.
     *
     * @hide
     */
    //@SystemApi TODO Make it a system API.
    public interface StaticServiceProducerNoBinder<TServiceClass> {
    @SystemApi
    public interface StaticServiceProducerWithoutBinder<TServiceClass> {
        /**
         * Return a new service wrapper of type {@code TServiceClass}.
         */
        @NonNull
        TServiceClass createService();
    }

@@ -1270,18 +1273,19 @@ public final class SystemServiceRegistry {
     *
     * @hide
     */
    //@SystemApi TODO Make it a system API.
    @SystemApi
    public interface StaticServiceProducerWithBinder<TServiceClass> {
        /**
         * Return a new service wrapper of type {@code TServiceClass} backed by a given
         * service binder object.
         */
        TServiceClass createService(IBinder serviceBinder);
        @NonNull
        TServiceClass createService(@NonNull IBinder serviceBinder);
    }

    /**
     * Callback interface used as a parameter to {@link #registerContextAwareService(
     * String, Class, ContextAwareServiceProducerNoBinder)},
     * String, Class, ContextAwareServiceProducerWithoutBinder)},
     * which generates a service wrapper instance
     * that's tied to a specific context and does not take a service binder object in the
     * constructor.
@@ -1290,15 +1294,15 @@ public final class SystemServiceRegistry {
     *
     * @hide
     */
    //@SystemApi TODO Make it a system API.
    public interface ContextAwareServiceProducerNoBinder<TServiceClass> {
    @SystemApi
    public interface ContextAwareServiceProducerWithoutBinder<TServiceClass> {
        /**
         * Return a new service wrapper of type {@code TServiceClass} tied to a given
         * {@code context}.
         *
         * TODO Do we need to pass the "base context" too?
         */
        TServiceClass createService(Context context);
        @NonNull
        //TODO Do we need to pass the "base context" too?
        TServiceClass createService(@NonNull Context context);
    }

    /**
@@ -1311,15 +1315,15 @@ public final class SystemServiceRegistry {
     *
     * @hide
     */
    //@SystemApi TODO Make it a system API.
    @SystemApi
    public interface ContextAwareServiceProducerWithBinder<TServiceClass> {
        /**
         * Return a new service wrapper of type {@code TServiceClass} backed by a given
         * service binder object that's tied to a given {@code context}.
         *
         * TODO Do we need to pass the "base context" too?
         */
        TServiceClass createService(Context context, IBinder serviceBinder);
        @NonNull
        //TODO Do we need to pass the "base context" too?
        TServiceClass createService(@NonNull Context context, @NonNull IBinder serviceBinder);
    }

    /**
@@ -1337,7 +1341,7 @@ public final class SystemServiceRegistry {
     *
     * @hide
     */
    //@SystemApi TODO Make it a system API.
    @SystemApi
    public static <TServiceClass> void registerStaticService(
            @NonNull String serviceName, @NonNull Class<TServiceClass> serviceWrapperClass,
            @NonNull StaticServiceProducerWithBinder<TServiceClass> serviceProducer) {
@@ -1361,10 +1365,10 @@ public final class SystemServiceRegistry {
     *
     * @hide
     */
    //@SystemApi TODO Make it a system API.
    @SystemApi
    public static <TServiceClass> void registerStaticService(
            @NonNull String serviceName, @NonNull Class<TServiceClass> serviceWrapperClass,
            @NonNull StaticServiceProducerNoBinder<TServiceClass> serviceProducer) {
            @NonNull StaticServiceProducerWithoutBinder<TServiceClass> serviceProducer) {
        ensureInitializing("registerStaticService");
        Preconditions.checkStringNotEmpty(serviceName);
        Preconditions.checkNotNull(serviceWrapperClass);
@@ -1394,7 +1398,7 @@ public final class SystemServiceRegistry {
     *
     * @hide
     */
    //@SystemApi TODO Make it a system API.
    @SystemApi
    public static <TServiceClass> void registerContextAwareService(
            @NonNull String serviceName, @NonNull Class<TServiceClass> serviceWrapperClass,
            @NonNull ContextAwareServiceProducerWithBinder<TServiceClass> serviceProducer) {
@@ -1422,10 +1426,10 @@ public final class SystemServiceRegistry {
     *
     * @hide
     */
    //@SystemApi TODO Make it a system API.
    @SystemApi
    public static <TServiceClass> void registerContextAwareService(
            @NonNull String serviceName, @NonNull Class<TServiceClass> serviceWrapperClass,
            @NonNull ContextAwareServiceProducerNoBinder<TServiceClass> serviceProducer) {
            @NonNull ContextAwareServiceProducerWithoutBinder<TServiceClass> serviceProducer) {
        ensureInitializing("registerContextAwareService");
        Preconditions.checkStringNotEmpty(serviceName);
        Preconditions.checkNotNull(serviceWrapperClass);