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

Side by Side Diff: webapk/libs/client/src/org/chromium/webapk/lib/client/NotificationClient.java

Issue 1965583002: Move //webapk to //chrome/android/webapk (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 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 2016 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.webapk.lib.client;
6
7 import android.app.PendingIntent;
8 import android.content.ComponentName;
9 import android.content.Context;
10 import android.content.Intent;
11 import android.content.ServiceConnection;
12 import android.graphics.Bitmap;
13 import android.os.IBinder;
14 import android.os.RemoteException;
15 import android.util.Log;
16
17 import org.chromium.webapk.lib.runtime_library.IWebApkApi;
18
19 /**
20 * NotificationClient provides APIs that a WebAPK host can delegate display or c lose notification
21 * tasks.
22 */
23 public class NotificationClient {
24 private static final String CATEGORY_MINTED_API = "android.intent.category.M INTED_API";
25 private static final String TAG = "cr_NotificationClient";
26
27 private IWebApkApi mMintedApi;
28
29 public NotificationClient() {}
30
31 /**
32 * Connect to a bind service of the WebAPK with the given package name, buil d a notification
33 * and hand it over to the WebAPK to display.
34 */
35 public void displayNotification(Context context, final int pendingIntentRequ estCode,
36 final NotificationBuilderDelegate notificationBuilder,
37 final Intent clickIntent, final Intent closeIntent, final Intent[] a ctionIntents,
38 final String[] actionTitles, final Bitmap[] actionIcons, final int f lags,
39 final String platformTag, final int platformID, String packageNameOf MintedAPK) {
40 Intent intent = createIntentToBindMintedAPI(packageNameOfMintedAPK);
41 try {
42 context.bindService(intent, new ServiceConnection() {
43 @Override
44 public void onServiceDisconnected(ComponentName name) {
45 }
46 @Override
47 public void onServiceConnected(ComponentName name, IBinder servi ce) {
48 mMintedApi = IWebApkApi.Stub.asInterface(service);
49 Log.d(TAG, "Got minted api: " + mMintedApi);
50 try {
51 // Create all the PendingIntents needed to build the not ification.
52 PendingIntent clickPendingIntent = mMintedApi.getBroadca stPendingIntent(
53 pendingIntentRequestCode, clickIntent, flags);
54 PendingIntent closePendingIntent = mMintedApi.getBroadca stPendingIntent(
55 pendingIntentRequestCode, closeIntent, flags);
56 PendingIntent[] actionPendingIntents = null;
57 if (actionIntents != null) {
58 actionPendingIntents = new PendingIntent[actionInten ts.length];
59 for (int actionIndex = 0; actionIndex < actionIntent s.length;
60 actionIndex++) {
61 actionPendingIntents[actionIndex] =
62 mMintedApi.getBroadcastPendingIntent(
63 pendingIntentRequestCode,
64 actionIntents[actionIndex], flag s);
65 }
66 }
67 notificationBuilder.setSmallIcon(mMintedApi.getSmallIcon Id());
68 // Build a notification.
69 buildNotification(notificationBuilder, clickPendingInten t,
70 closePendingIntent, actionPendingIntents, action Titles,
71 actionIcons);
72 // Dispaly the notification.
73 mMintedApi.displayNotification(platformTag, platformID,
74 notificationBuilder.build());
75 } catch (RemoteException e) {
76 Log.w(TAG, "MintedAPI use failed, exception: " + e);
77 }
78 }
79 }, Context.BIND_AUTO_CREATE);
80 } catch (SecurityException e) {
81 Log.w(TAG, "Security failed binding.");
82 }
83 }
84
85 /**
86 * Connect to a bind service of a WebAPK with the given package name, and as k the it to close a
87 * notification.
88 */
89 public void closeNotification(Context context, String packageNameOfMintedAPK ,
90 final String platformTag, final int platformID) {
91 Intent intent = NotificationClient.createIntentToBindMintedAPI(packageNa meOfMintedAPK);
92 try {
93 context.bindService(intent, new ServiceConnection() {
94 @Override
95 public void onServiceDisconnected(ComponentName name) {
96 }
97 @Override
98 public void onServiceConnected(ComponentName name, IBinder servi ce) {
99 mMintedApi = IWebApkApi.Stub.asInterface(service);
100 Log.d(TAG, "Got minted api: " + mMintedApi);
101 try {
102 mMintedApi.closeNotification(platformTag, platformID);
103 } catch (RemoteException e) {
104 Log.w(TAG, "MintedAPI use failed, exception: " + e);
105 }
106 }
107 }, Context.BIND_AUTO_CREATE);
108 } catch (SecurityException e) {
109 Log.w(TAG, "Security failed binding.");
110 }
111 }
112
113 private static Intent createIntentToBindMintedAPI(String packageNameOfMinted APK) {
114 Intent intent = new Intent();
115 intent.addCategory(CATEGORY_MINTED_API);
116 intent.setPackage(packageNameOfMintedAPK);
117 return intent;
118 }
119
120 private static void buildNotification(final NotificationBuilderDelegate noti ficationBuilder,
121 final PendingIntent clickPendingIntent, final PendingIntent closePen dingIntent,
122 final PendingIntent[] actionPendingIntents,
123 final String[] actionTitles, final Bitmap[] actionIcons) {
124 notificationBuilder.setContentIntent(clickPendingIntent)
125 .setDeleteIntent(closePendingIntent);
126 if (actionPendingIntents != null) {
127 for (int actionIndex = 0; actionIndex < actionPendingIntents.length;
128 actionIndex++) {
129 notificationBuilder.addAction(actionIcons[actionIndex],
130 actionTitles[actionIndex],
131 actionPendingIntents[actionIndex]);
132 }
133 }
134 }
135 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698