From 4e1056c43f933b3198e7db1c01df483b249c05d3 Mon Sep 17 00:00:00 2001 From: Adam Barth Date: Mon, 2 Mar 2015 13:33:56 -0800 Subject: [PATCH] Make it possible for SkyShell embedders to register services We now register the sensor service from SkyDemo, which shows that embedders of SkyShell can register their own Java services. R=eseidel@chromium.org Review URL: https://codereview.chromium.org/969753003 --- apk/demo/AndroidManifest.xml | 2 +- apk/demo/BUILD.gn | 10 +++++- .../domokit/sky/demo/SkyDemoApplication.java | 32 +++++++++++++++++++ shell/BUILD.gn | 4 +-- .../sky/shell/JavaServiceProvider.java | 16 +++------- .../org/domokit/sky/shell/ServiceFactory.java | 19 +++++++++++ .../domokit/sky/shell/ServiceRegistry.java | 31 ++++++++++++++++++ .../org/domokit/sky/shell/SkyApplication.java | 24 +++++++++----- 8 files changed, 115 insertions(+), 23 deletions(-) create mode 100644 apk/demo/org/domokit/sky/demo/SkyDemoApplication.java create mode 100644 shell/org/domokit/sky/shell/ServiceFactory.java create mode 100644 shell/org/domokit/sky/shell/ServiceRegistry.java diff --git a/apk/demo/AndroidManifest.xml b/apk/demo/AndroidManifest.xml index abaffbd18..8f1357320 100644 --- a/apk/demo/AndroidManifest.xml +++ b/apk/demo/AndroidManifest.xml @@ -10,7 +10,7 @@ - + mRegistrations; + + public static final ServiceRegistry SHARED = new ServiceRegistry(); + + private ServiceRegistry() { + mRegistrations = new TreeMap(); + } + + public void register(String interfaceName, ServiceFactory connector) { + assert !mRegistrations.containsKey(interfaceName); + assert connector != null; + mRegistrations.put(interfaceName, connector); + } + + public ServiceFactory get(String interfaceName) { + return mRegistrations.get(interfaceName); + } +} diff --git a/shell/org/domokit/sky/shell/SkyApplication.java b/shell/org/domokit/sky/shell/SkyApplication.java index 0faf0c5d7..54798de68 100644 --- a/shell/org/domokit/sky/shell/SkyApplication.java +++ b/shell/org/domokit/sky/shell/SkyApplication.java @@ -4,6 +4,7 @@ package org.domokit.sky.shell; +import android.content.Context; import android.util.Log; import org.chromium.base.BaseChromiumApplication; @@ -12,16 +13,20 @@ import org.chromium.base.ResourceExtractor; import org.chromium.base.library_loader.LibraryLoader; import org.chromium.base.library_loader.LibraryProcessType; import org.chromium.base.library_loader.ProcessInitException; +import org.chromium.mojo.system.Core; +import org.chromium.mojo.system.MessagePipeHandle; +import org.chromium.mojom.mojo.NetworkService; +import org.domokit.oknet.NetworkServiceImpl; /** - * MojoShell implementation of {@link android.app.Application}, managing application-level global + * Sky implementation of {@link android.app.Application}, managing application-level global * state and initializations. */ public class SkyApplication extends BaseChromiumApplication { private static final String TAG = "SkyApplication"; private static final String PRIVATE_DATA_DIRECTORY_SUFFIX = "sky_shell"; private static final String[] SKY_MANDATORY_PAKS = { - "icudtl.dat", + "icudtl.dat", }; @Override @@ -29,19 +34,14 @@ public class SkyApplication extends BaseChromiumApplication { super.onCreate(); initializeJavaUtils(); initializeNative(); + initializeServiceRegistry(); ResourceExtractor.setMandatoryPaksToExtract(SKY_MANDATORY_PAKS); } - /** - * Initializes Java-side utils. - */ private void initializeJavaUtils() { PathUtils.setPrivateDataDirectorySuffix(PRIVATE_DATA_DIRECTORY_SUFFIX); } - /** - * Loads the native library. - */ private void initializeNative() { try { LibraryLoader.get(LibraryProcessType.PROCESS_BROWSER).ensureInitialized(); @@ -50,4 +50,12 @@ public class SkyApplication extends BaseChromiumApplication { throw new RuntimeException(e); } } + + private void initializeServiceRegistry() { + ServiceRegistry.SHARED.register(NetworkService.MANAGER.getName(), new ServiceFactory() { + public void connectToService(Context context, Core core, MessagePipeHandle pipe) { + new NetworkServiceImpl(context, core, pipe); + } + }); + } } -- GitLab