Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(166)

Side by Side Diff: examples/android/App.java

Issue 898853006: Java content handler for Android. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.examples.android;
6
7 import android.content.Context;
8 import android.util.Log;
9
10 import org.chromium.mojo.bindings.Interface;
11 import org.chromium.mojo.bindings.InterfaceRequest;
12 import org.chromium.mojo.system.Core;
13 import org.chromium.mojo.system.MessagePipeHandle;
14 import org.chromium.mojo.system.MojoException;
15 import org.chromium.mojo.system.RunLoop;
16 import org.chromium.mojom.mojo.Application;
17 import org.chromium.mojom.mojo.ExampleService;
18 import org.chromium.mojom.mojo.ServiceProvider;
19 import org.chromium.mojom.mojo.Shell;
20
21 import java.util.HashMap;
22 import java.util.Map;
23
24 /**
25 * App holds all the code for this example application.
26 */
27 class App {
28 private static String TAG = "ExampleServiceApp";
29
30 public static class ApplicationImpl implements Application {
31 private final Core mCore;
32 private Shell mShell;
33
34 public ApplicationImpl(MessagePipeHandle applicationRequest, Core core) {
qsr 2015/02/10 11:58:18 Maybe invert the 2 parameters. Core is some kind o
etiennej 2015/02/10 14:32:04 Done.
35 ApplicationImpl.MANAGER.bind(this, applicationRequest);
36 mCore = core;
37 }
38
39 @Override
40 public void initialize(Shell shell, String[] args) {
41 mShell = shell;
42 }
43
44 @Override
45 public void acceptConnection(String requestorUrl,
46 InterfaceRequest<ServiceProvider> services, ServiceProvider expo sedServices) {
47 ServiceProviderImpl serviceProvider = new ServiceProviderImpl();
48 serviceProvider.addService(
49 new ServiceFactoryBinder<ExampleService>() {
50 @Override
51 public void bindNewInstanceToMessagePipe(
52 MessagePipeHandle pipe) {
53 ExampleService.MANAGER.bind(new ExampleServiceImpl() , pipe);
54 }
55
56 @Override
57 public String getInterfaceName() {
58 return ExampleService.MANAGER.getName();
59 }
60 }
61 );
62 ServiceProvider.MANAGER.bind(serviceProvider, services);
63 exposedServices.close();
64 };
65
66 @Override
67 public void requestQuit() {
68 mCore.getCurrentRunLoop().quit();
69 }
70
71 @Override
72 public void close() {
73 if (mShell != null) {
74 mShell.close();
75 }
76 }
77
78 @Override
79 public void onConnectionError(MojoException e) {}
80 }
81
82 /**
83 * ServiceFactoryBinder holds the necessary information to bind a service in terface to a
84 * message pipe.
85 */
86 private static interface ServiceFactoryBinder<T extends Interface> {
87 public void bindNewInstanceToMessagePipe(MessagePipeHandle pipe);
88 public String getInterfaceName();
89 }
90
91 public static class ServiceProviderImpl implements ServiceProvider {
92 private Map<String, ServiceFactoryBinder<? extends Interface>> mNameToSe rviceMap =
93 new HashMap<String, ServiceFactoryBinder<? extends Interface>>() ;
94
95 public ServiceProviderImpl() {}
96
97 /**
98 * AddService adds a new service to the list of services provided by thi s application.
99 */
100 public void addService(ServiceFactoryBinder<? extends Interface> binder) {
101 mNameToServiceMap.put(binder.getInterfaceName(), binder);
102 }
103
104 @Override
105 public void connectToService(String interfaceName, MessagePipeHandle pip e) {
106 if (mNameToServiceMap.containsKey(interfaceName)) {
107 try {
108 mNameToServiceMap.get(interfaceName).bindNewInstanceToMessag ePipe(pipe);
109 } catch (Exception e) {
qsr 2015/02/10 11:58:18 Why do you need to catch something here? Should no
etiennej 2015/02/10 14:32:04 Done.
110 pipe.close();
111 throw new RuntimeException(e);
112 }
113 } else {
114 pipe.close();
115 }
116 }
117
118 @Override
119 public void close() {}
120
121 @Override
122 public void onConnectionError(MojoException e) {}
123 }
124
125 public static class ExampleServiceImpl implements ExampleService {
126 public ExampleServiceImpl() {}
127
128 @Override
129 public void ping(short pingValue, ExampleService.PingResponse callback) {
130 callback.call(pingValue);
131 }
132
133 @Override
134 public void close() {}
135
136 @Override
137 public void onConnectionError(MojoException e) {}
138 }
139
140 public static void mojoMain(Context context, Core core,
141 MessagePipeHandle applicationRequestHandle) {
142 Log.i(TAG, "App.MojoMain called");
143 try (RunLoop runLoop = core.createDefaultRunLoop()) {
144 Log.i(TAG, "Run loop created");
145
146 Application application = new ApplicationImpl(applicationRequestHand le, core);
147
148 Log.i(TAG, "Setup done, starting run loop");
149 runLoop.run();
150 Log.i(TAG, "Run loop exited");
151 }
152 }
153 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698