| Index: chrome/android/webapk/libs/client/src/org/chromium/webapk/lib/client/WebApkServiceClient.java
|
| diff --git a/chrome/android/webapk/libs/client/src/org/chromium/webapk/lib/client/WebApkServiceClient.java b/chrome/android/webapk/libs/client/src/org/chromium/webapk/lib/client/WebApkServiceClient.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..78cd05122630ea44d8385521a3ec05a9bec6a9ff
|
| --- /dev/null
|
| +++ b/chrome/android/webapk/libs/client/src/org/chromium/webapk/lib/client/WebApkServiceClient.java
|
| @@ -0,0 +1,75 @@
|
| +// Copyright 2017 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +package org.chromium.webapk.lib.client;
|
| +
|
| +import android.content.Context;
|
| +import android.os.IBinder;
|
| +import android.os.RemoteException;
|
| +import android.util.Log;
|
| +
|
| +import org.chromium.webapk.lib.runtime_library.IWebApkApi;
|
| +
|
| +/**
|
| + * Manages static global connections between the Chrome application and "WebAPK service". Each
|
| + * WebAPK has its own "WebAPK service".
|
| + */
|
| +public class WebApkServiceClient extends WebApkServiceConnectionManager {
|
| + // Callback which catches RemoteExceptions thrown due to IWebApkApi failure.
|
| + public abstract static class ApiUseCallback
|
| + implements WebApkServiceConnectionManager.ConnectionCallback {
|
| + public abstract void useApi(IWebApkApi api) throws RemoteException;
|
| +
|
| + @Override
|
| + public void onConnected(IBinder api) {
|
| + try {
|
| + useApi(IWebApkApi.Stub.asInterface(api));
|
| + } catch (RemoteException e) {
|
| + Log.w(TAG, "WebApkAPI use failed.", e);
|
| + }
|
| + }
|
| + }
|
| +
|
| + private static final String CATEGORY_WEBAPK_API = "android.intent.category.WEBAPK_API";
|
| + private static final String TAG = "cr_WebApk";
|
| +
|
| + private static WebApkServiceClient sInstance;
|
| +
|
| + public static WebApkServiceClient getInstance() {
|
| + if (sInstance == null) {
|
| + sInstance = new WebApkServiceClient();
|
| + }
|
| + return sInstance;
|
| + }
|
| +
|
| + private WebApkServiceClient() {
|
| + super(CATEGORY_WEBAPK_API);
|
| + }
|
| +
|
| + /**
|
| + * Connects to a WebAPK's bound service and calls the callback when the service connection is
|
| + * established.
|
| + */
|
| + public static void notifyNotification(
|
| + Context appContext, final String webApkPackage, ApiUseCallback callback) {
|
| + getInstance().connect(appContext, webApkPackage, callback);
|
| + }
|
| +
|
| + /** Cancels notification previously shown by WebAPK. */
|
| + public static void cancelNotification(Context appContext, String webApkPackage,
|
| + final String platformTag, final int platformID) {
|
| + final ApiUseCallback connectionCallback = new ApiUseCallback() {
|
| + @Override
|
| + public void useApi(IWebApkApi api) throws RemoteException {
|
| + api.cancelNotification(platformTag, platformID);
|
| + }
|
| + };
|
| +
|
| + getInstance().connect(appContext, webApkPackage, connectionCallback);
|
| + }
|
| +
|
| + public static void disconnectWebApkService(Context appContext, String webApkPackageName) {
|
| + getInstance().disconnect(appContext, webApkPackageName);
|
| + }
|
| +}
|
|
|