diff options
| author | 2024-08-29 14:25:33 -0400 | |
|---|---|---|
| committer | 2024-08-29 15:18:22 -0400 | |
| commit | 2f4c6574fd2d382e713501b10b5f678717ef44b5 (patch) | |
| tree | e8ed3acaef00499af92bc47a72279a5a0a1bba90 | |
| parent | 0e0eb49625c40f166922f24d90f7390df96eac62 (diff) | |
Disable app_function service on Wear
This change introduces a configuration class, which allows for
customization of when the AppFunctionManager is available. At the
moment, we're using this to remove support for it on Wear, which
does not have an immediate use-case for the service.
Bug: 361300136
Test: Local boot testing on Wear
Flag: android.app.appfunctions.flags.enable_app_function_manager
Change-Id: Ia0e1e355999c5bb724f6f94cb17eafd169214abe
4 files changed, 73 insertions, 9 deletions
diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java index 8b3ee24db025..e44e7768724e 100644 --- a/core/java/android/app/SystemServiceRegistry.java +++ b/core/java/android/app/SystemServiceRegistry.java @@ -31,6 +31,7 @@ import android.app.admin.IDevicePolicyManager; import android.app.ambientcontext.AmbientContextManager; import android.app.ambientcontext.IAmbientContextManager; import android.app.appfunctions.AppFunctionManager; +import android.app.appfunctions.AppFunctionManagerConfiguration; import android.app.appfunctions.IAppFunctionManager; import android.app.appsearch.AppSearchManagerFrameworkInitializer; import android.app.blob.BlobStoreManagerFrameworkInitializer; @@ -937,8 +938,10 @@ public final class SystemServiceRegistry { @Override public AppFunctionManager createService(ContextImpl ctx) throws ServiceNotFoundException { + if (!AppFunctionManagerConfiguration.isSupported(ctx)) { + return null; + } IAppFunctionManager service; - //TODO(b/357551503): If the feature not present avoid look up every time service = IAppFunctionManager.Stub.asInterface( ServiceManager.getServiceOrThrow(Context.APP_FUNCTION_SERVICE)); return new AppFunctionManager(service, ctx.getOuterContext()); diff --git a/core/java/android/app/appfunctions/AppFunctionManagerConfiguration.java b/core/java/android/app/appfunctions/AppFunctionManagerConfiguration.java new file mode 100644 index 000000000000..e4784b4ef69d --- /dev/null +++ b/core/java/android/app/appfunctions/AppFunctionManagerConfiguration.java @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2024 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 android.app.appfunctions; + +import static android.app.appfunctions.flags.Flags.enableAppFunctionManager; + +import android.annotation.NonNull; +import android.content.Context; +import android.content.pm.PackageManager; + +/** + * Represents the system configuration of support for the {@code AppFunctionManager} and + * associated systems. + * + * @hide + */ +public class AppFunctionManagerConfiguration { + private final Context mContext; + + /** + * Constructs a new instance of {@code AppFunctionManagerConfiguration}. + * @param context context + */ + public AppFunctionManagerConfiguration(@NonNull final Context context) { + mContext = context; + } + + /** + * Indicates whether the current target is intended to support {@code AppFunctionManager}. + * @return {@code true} if supported; otherwise {@code false} + */ + public boolean isSupported() { + return enableAppFunctionManager() && !isWatch(); + + } + + /** + * Indicates whether the current target is intended to support {@code AppFunctionManager}. + * @param context context + * @return {@code true} if supported; otherwise {@code false} + */ + public static boolean isSupported(@NonNull final Context context) { + return new AppFunctionManagerConfiguration(context).isSupported(); + } + + private boolean isWatch() { + return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH); + } +} diff --git a/services/appfunctions/java/com/android/server/appfunctions/AppFunctionManagerService.java b/services/appfunctions/java/com/android/server/appfunctions/AppFunctionManagerService.java index 954651d9ef0a..a2d467c2085c 100644 --- a/services/appfunctions/java/com/android/server/appfunctions/AppFunctionManagerService.java +++ b/services/appfunctions/java/com/android/server/appfunctions/AppFunctionManagerService.java @@ -16,8 +16,7 @@ package com.android.server.appfunctions; -import static android.app.appfunctions.flags.Flags.enableAppFunctionManager; - +import android.app.appfunctions.AppFunctionManagerConfiguration; import android.content.Context; import com.android.server.SystemService; @@ -35,7 +34,7 @@ public class AppFunctionManagerService extends SystemService { @Override public void onStart() { - if (enableAppFunctionManager()) { + if (AppFunctionManagerConfiguration.isSupported(getContext())) { publishBinderService(Context.APP_FUNCTION_SERVICE, mServiceImpl); } } diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index c5c371ff85d5..13c436d1216d 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -16,7 +16,6 @@ package com.android.server; -import static android.app.appfunctions.flags.Flags.enableAppFunctionManager; import static android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK; import static android.os.IServiceManager.DUMP_FLAG_PRIORITY_CRITICAL; import static android.os.IServiceManager.DUMP_FLAG_PRIORITY_HIGH; @@ -38,6 +37,7 @@ import android.app.ApplicationErrorReport; import android.app.INotificationManager; import android.app.SystemServiceRegistry; import android.app.admin.DevicePolicySafetyChecker; +import android.app.appfunctions.AppFunctionManagerConfiguration; import android.app.usage.UsageStatsManagerInternal; import android.content.ComponentName; import android.content.ContentResolver; @@ -1743,12 +1743,11 @@ public final class SystemServer implements Dumpable { mSystemServiceManager.startService(LogcatManagerService.class); t.traceEnd(); - t.traceBegin("StartAppFunctionManager"); - if (enableAppFunctionManager()) { + if (AppFunctionManagerConfiguration.isSupported(context)) { + t.traceBegin("StartAppFunctionManager"); mSystemServiceManager.startService(AppFunctionManagerService.class); + t.traceEnd(); } - t.traceEnd(); - } catch (Throwable e) { Slog.e("System", "******************************************"); Slog.e("System", "************ Failure starting core service"); |