diff --git a/core/java/Android.bp b/core/java/Android.bp index 77589a213e170..a7d4342be6423 100644 --- a/core/java/Android.bp +++ b/core/java/Android.bp @@ -15,14 +15,6 @@ filegroup { "**/*.java", "**/*.aidl", ], - exclude_srcs: [ - // Remove election toolbar code from build time - "android/service/selectiontoolbar/*.aidl", - "android/service/selectiontoolbar/*.java", - "android/view/selectiontoolbar/*.aidl", - "android/view/selectiontoolbar/*.java", - "com/android/internal/widget/floatingtoolbar/RemoteFloatingToolbarPopup.java", - ], visibility: ["//frameworks/base"], } diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java index 40192836e0a79..6615374f71eca 100644 --- a/core/java/android/app/SystemServiceRegistry.java +++ b/core/java/android/app/SystemServiceRegistry.java @@ -230,6 +230,8 @@ import android.view.contentcapture.ContentCaptureManager; import android.view.contentcapture.IContentCaptureManager; import android.view.displayhash.DisplayHashManager; import android.view.inputmethod.InputMethodManager; +import android.view.selectiontoolbar.ISelectionToolbarManager; +import android.view.selectiontoolbar.SelectionToolbarManager; import android.view.textclassifier.TextClassificationManager; import android.view.textservice.TextServicesManager; import android.view.translation.ITranslationManager; @@ -363,6 +365,15 @@ public final class SystemServiceRegistry { return new TextClassificationManager(ctx); }}); + registerService(Context.SELECTION_TOOLBAR_SERVICE, SelectionToolbarManager.class, + new CachedServiceFetcher() { + @Override + public SelectionToolbarManager createService(ContextImpl ctx) { + IBinder b = ServiceManager.getService(Context.SELECTION_TOOLBAR_SERVICE); + return new SelectionToolbarManager(ctx.getOuterContext(), + ISelectionToolbarManager.Stub.asInterface(b)); + }}); + registerService(Context.FONT_SERVICE, FontManager.class, new CachedServiceFetcher() { @Override diff --git a/core/java/com/android/internal/widget/floatingtoolbar/FloatingToolbarPopup.java b/core/java/com/android/internal/widget/floatingtoolbar/FloatingToolbarPopup.java index c484525dbe203..f7af67b3b2a89 100644 --- a/core/java/com/android/internal/widget/floatingtoolbar/FloatingToolbarPopup.java +++ b/core/java/com/android/internal/widget/floatingtoolbar/FloatingToolbarPopup.java @@ -21,6 +21,7 @@ import android.content.Context; import android.graphics.Rect; import android.view.MenuItem; import android.view.View; +import android.view.selectiontoolbar.SelectionToolbarManager; import android.widget.PopupWindow; import java.util.List; @@ -92,7 +93,10 @@ public interface FloatingToolbarPopup { * enabled, otherwise returns {@link LocalFloatingToolbarPopup} implementation. */ static FloatingToolbarPopup createInstance(Context context, View parent) { - return new LocalFloatingToolbarPopup(context, parent); + boolean enabled = SelectionToolbarManager.isRemoteSelectionToolbarEnabled(context); + return enabled + ? new RemoteFloatingToolbarPopup(context, parent) + : new LocalFloatingToolbarPopup(context, parent); } } diff --git a/services/Android.bp b/services/Android.bp index 70692a63ff0f9..1e4ce19f15418 100644 --- a/services/Android.bp +++ b/services/Android.bp @@ -102,6 +102,7 @@ filegroup { ":services.profcollect-sources", ":services.restrictions-sources", ":services.searchui-sources", + ":services.selectiontoolbar-sources", ":services.smartspace-sources", ":services.speech-sources", ":services.systemcaptions-sources", @@ -157,6 +158,7 @@ java_library { "services.profcollect", "services.restrictions", "services.searchui", + "services.selectiontoolbar", "services.smartspace", "services.speech", "services.systemcaptions", diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 66c9f55b0403b..8fd4b5aa6beed 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -338,6 +338,8 @@ public final class SystemServer implements Dumpable { "com.android.server.contentcapture.ContentCaptureManagerService"; private static final String TRANSLATION_MANAGER_SERVICE_CLASS = "com.android.server.translation.TranslationManagerService"; + private static final String SELECTION_TOOLBAR_MANAGER_SERVICE_CLASS = + "com.android.server.selectiontoolbar.SelectionToolbarManagerService"; private static final String MUSIC_RECOGNITION_MANAGER_SERVICE_CLASS = "com.android.server.musicrecognition.MusicRecognitionManagerService"; private static final String SYSTEM_CAPTIONS_MANAGER_SERVICE_CLASS = @@ -2634,6 +2636,11 @@ public final class SystemServer implements Dumpable { Slog.d(TAG, "TranslationService not defined by OEM"); } + // Selection toolbar service + t.traceBegin("StartSelectionToolbarManagerService"); + mSystemServiceManager.startService(SELECTION_TOOLBAR_MANAGER_SERVICE_CLASS); + t.traceEnd(); + // NOTE: ClipboardService depends on ContentCapture and Autofill t.traceBegin("StartClipboardService"); mSystemServiceManager.startService(ClipboardService.class); diff --git a/services/selectiontoolbar/Android.bp b/services/selectiontoolbar/Android.bp new file mode 100644 index 0000000000000..cc6405f97bc35 --- /dev/null +++ b/services/selectiontoolbar/Android.bp @@ -0,0 +1,22 @@ +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "frameworks_base_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: ["frameworks_base_license"], +} + +filegroup { + name: "services.selectiontoolbar-sources", + srcs: ["java/**/*.java"], + path: "java", + visibility: ["//frameworks/base/services"], +} + +java_library_static { + name: "services.selectiontoolbar", + defaults: ["platform_service_defaults"], + srcs: [":services.selectiontoolbar-sources"], + libs: ["services.core"], +}