summaryrefslogtreecommitdiffstats
path: root/core/java/android/service
diff options
context:
space:
mode:
authorPatrick Scott <phanna@android.com>2010-01-14 15:11:42 -0500
committerPatrick Scott <phanna@android.com>2010-01-28 08:27:42 -0500
commit45948fd407da525e6c8721ba75cfc8b356fc7e0f (patch)
treed19548f799589917419eca873adf6fefbeb6e712 /core/java/android/service
parent8ea25cc1a104bfc95d5742a8c0ab582c7812ee74 (diff)
downloadframeworks_base-45948fd407da525e6c8721ba75cfc8b356fc7e0f.zip
frameworks_base-45948fd407da525e6c8721ba75cfc8b356fc7e0f.tar.gz
frameworks_base-45948fd407da525e6c8721ba75cfc8b356fc7e0f.tar.bz2
First pass at the url rendering service.
The service renders a list of urls at the given dimension and invokes the callback interface for each result. A ParcelFileDescriptor is used to transfer the large image data to the client. The client must close the file descriptor is order free the underlying resources. A more robust api will use UrlRendererRequest and UrlRendererResponse objects to transfer data.
Diffstat (limited to 'core/java/android/service')
-rw-r--r--core/java/android/service/urlrenderer/IUrlRendererCallback.aidl26
-rw-r--r--core/java/android/service/urlrenderer/IUrlRendererService.aidl27
-rw-r--r--core/java/android/service/urlrenderer/UrlRenderer.java89
-rw-r--r--core/java/android/service/urlrenderer/UrlRendererService.java93
4 files changed, 235 insertions, 0 deletions
diff --git a/core/java/android/service/urlrenderer/IUrlRendererCallback.aidl b/core/java/android/service/urlrenderer/IUrlRendererCallback.aidl
new file mode 100644
index 0000000..004aca7
--- /dev/null
+++ b/core/java/android/service/urlrenderer/IUrlRendererCallback.aidl
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2010 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.service.urlrenderer;
+
+import android.os.ParcelFileDescriptor;
+
+/**
+ * {@hide}
+ */
+oneway interface IUrlRendererCallback {
+ void complete(String url, in ParcelFileDescriptor result);
+}
diff --git a/core/java/android/service/urlrenderer/IUrlRendererService.aidl b/core/java/android/service/urlrenderer/IUrlRendererService.aidl
new file mode 100644
index 0000000..d561fdc
--- /dev/null
+++ b/core/java/android/service/urlrenderer/IUrlRendererService.aidl
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2010 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.service.urlrenderer;
+
+import android.service.urlrenderer.IUrlRendererCallback;
+
+/**
+ * {@hide}
+ */
+interface IUrlRendererService {
+ void render(in List<String> urls, int width, int height,
+ IUrlRendererCallback cb);
+}
diff --git a/core/java/android/service/urlrenderer/UrlRenderer.java b/core/java/android/service/urlrenderer/UrlRenderer.java
new file mode 100644
index 0000000..6057d6c
--- /dev/null
+++ b/core/java/android/service/urlrenderer/UrlRenderer.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2010 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.service.urlrenderer;
+
+import android.os.IBinder;
+import android.os.ParcelFileDescriptor;
+import android.os.RemoteException;
+
+import java.util.List;
+
+/**
+ * TODO(phanna): Document this class.
+ * {@hide} while developing
+ */
+public final class UrlRenderer {
+ /**
+ * Interface for clients to receive the result of calls to
+ * {@link UrlRenderer#render}.
+ * {@hide} while developing
+ */
+ public interface Callback {
+ /**
+ * Calls to {@link render} will result in multiple invokations of this
+ * method for each url. A null result means that there was a server
+ * error or a problem rendering the url.
+ * @param url The url that has been rendered.
+ * @param result A ParcelFileDescriptor containing the encoded image
+ * data. The client is responsible for closing the stream
+ * to free resources. A null result indicates a failure
+ * to render.
+ */
+ public void complete(String url, ParcelFileDescriptor result);
+ }
+
+ private IUrlRendererService mService;
+
+ /**
+ * Create a new UrlRenderer to remotely render urls.
+ * @param service An IBinder service usually obtained through
+ * {@link ServiceConnection#onServiceConnected}
+ */
+ public UrlRenderer(IBinder service) {
+ mService = IUrlRendererService.Stub.asInterface(service);
+ }
+
+ private static class InternalCallback extends IUrlRendererCallback.Stub {
+ private final Callback mCallback;
+ InternalCallback(Callback cb) {
+ mCallback = cb;
+ }
+
+ public void complete(String url, ParcelFileDescriptor result) {
+ mCallback.complete(url, result);
+ }
+ }
+
+ /**
+ * Render the list of <var>urls</var> and invoke the <var>callback</var>
+ * for each result.
+ * @param urls A List of urls to render.
+ * @param width The desired width of the result.
+ * @param height The desired height of the result.
+ * @param callback An instance of {@link Callback} invoked for each url.
+ */
+ public void render(List<String> urls, int width, int height,
+ Callback callback) {
+ if (mService != null) {
+ try {
+ mService.render(urls, width, height,
+ new InternalCallback(callback));
+ } catch (RemoteException ex) {
+ }
+ }
+ }
+}
diff --git a/core/java/android/service/urlrenderer/UrlRendererService.java b/core/java/android/service/urlrenderer/UrlRendererService.java
new file mode 100644
index 0000000..f7bf7d7
--- /dev/null
+++ b/core/java/android/service/urlrenderer/UrlRendererService.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2010 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.service.urlrenderer;
+
+import android.annotation.SdkConstant;
+import android.annotation.SdkConstant.SdkConstantType;
+import android.app.Service;
+import android.os.ParcelFileDescriptor;
+import android.os.RemoteException;
+
+import java.util.List;
+
+/**
+ * TODO(phanna): Complete documentation.
+ * {@hide} while developing
+ */
+public abstract class UrlRendererService extends Service {
+ /**
+ * The {@link Intent} that must be declared as handled by the service.
+ */
+ @SdkConstant(SdkConstantType.SERVICE_ACTION)
+ public static final String SERVICE_INTERFACE =
+ "android.service.urlrenderer.UrlRendererService";
+
+ static final String TAG = "UrlRendererService";
+
+ private static class InternalCallback implements UrlRenderer.Callback {
+ private final IUrlRendererCallback mCallback;
+ InternalCallback(IUrlRendererCallback cb) {
+ mCallback = cb;
+ }
+
+ public void complete(String url, ParcelFileDescriptor result) {
+ try {
+ mCallback.complete(url, result);
+ } catch (RemoteException ex) {
+ }
+ }
+ }
+
+ private final IUrlRendererService.Stub mBinderInterface =
+ new IUrlRendererService.Stub() {
+ public void render(List<String> urls, int width, int height,
+ IUrlRendererCallback cb) {
+ processRequest(urls, width, height,
+ new InternalCallback(cb));
+ }
+ };
+
+ /**
+ * Implement to return the implementation of the internal accessibility
+ * service interface. Subclasses should not override.
+ */
+ @Override
+ public final android.os.IBinder onBind(android.content.Intent intent) {
+ return mBinderInterface;
+ }
+
+ /**
+ * When all clients unbind from the service, stop the service. Subclasses
+ * should not override.
+ */
+ @Override
+ public final boolean onUnbind(android.content.Intent intent) {
+ stopSelf();
+ return false;
+ }
+
+ /**
+ * Subclasses implement this function to process the given urls. When each
+ * url is complete, the subclass must invoke the callback with the result.
+ * @param urls A list of urls to render at the given dimensions.
+ * @param width The desired width of the result.
+ * @param height The desired height of the result.
+ * @param cb The callback to invoke when each url is complete.
+ */
+ public abstract void processRequest(List<String> urls, int width,
+ int height, UrlRenderer.Callback cb);
+}