Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 75d76bcf authored by Patrick Scott's avatar Patrick Scott Committed by Android (Google) Code Review
Browse files

Merge "First pass at the url rendering service."

parents 1812a4bf 45948fd4
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -119,6 +119,8 @@ LOCAL_SRC_FILES += \
	core/java/android/os/IPowerManager.aidl \
    core/java/android/os/IRemoteCallback.aidl \
	core/java/android/os/IVibratorService.aidl \
	core/java/android/service/urlrenderer/IUrlRendererService.aidl \
	core/java/android/service/urlrenderer/IUrlRendererCallback.aidl \
    core/java/android/service/wallpaper/IWallpaperConnection.aidl \
    core/java/android/service/wallpaper/IWallpaperEngine.aidl \
    core/java/android/service/wallpaper/IWallpaperService.aidl \
+26 −0
Original line number Diff line number Diff line
/*
 * 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);
}
+27 −0
Original line number Diff line number Diff line
/*
 * 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);
}
+89 −0
Original line number Diff line number Diff line
/*
 * 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) {
            }
        }
    }
}
+93 −0
Original line number Diff line number Diff line
/*
 * 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);
}