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

Side by Side Diff: components/gcm_driver/android/java/src/org/chromium/components/gcm_driver/GoogleCloudMessagingV2.java

Issue 2810863003: Android: Remove GetApplicationContext: components/ (Closed)
Patch Set: Fix tests Created 3 years, 8 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
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.components.gcm_driver; 5 package org.chromium.components.gcm_driver;
6 6
7 import android.app.PendingIntent; 7 import android.app.PendingIntent;
8 import android.content.Context;
9 import android.content.Intent; 8 import android.content.Intent;
10 import android.os.Bundle; 9 import android.os.Bundle;
11 import android.os.Handler; 10 import android.os.Handler;
12 import android.os.Looper; 11 import android.os.Looper;
13 import android.os.Message; 12 import android.os.Message;
14 import android.os.Messenger; 13 import android.os.Messenger;
15 14
15 import org.chromium.base.ContextUtils;
16 import org.chromium.base.PackageUtils; 16 import org.chromium.base.PackageUtils;
17 17
18 import java.io.IOException; 18 import java.io.IOException;
19 import java.util.concurrent.BlockingQueue; 19 import java.util.concurrent.BlockingQueue;
20 import java.util.concurrent.LinkedBlockingQueue; 20 import java.util.concurrent.LinkedBlockingQueue;
21 import java.util.concurrent.TimeUnit; 21 import java.util.concurrent.TimeUnit;
22 22
23 import javax.annotation.Nullable; 23 import javax.annotation.Nullable;
24 24
25 /** 25 /**
26 * Temporary code for sending subtypes when (un)subscribing with GCM. 26 * Temporary code for sending subtypes when (un)subscribing with GCM.
27 * Subtypes are experimental and may change without notice! 27 * Subtypes are experimental and may change without notice!
28 * TODO(johnme): Remove this file, once we switch to the GMS client library. 28 * TODO(johnme): Remove this file, once we switch to the GMS client library.
29 */ 29 */
30 public class GoogleCloudMessagingV2 implements GoogleCloudMessagingSubscriber { 30 public class GoogleCloudMessagingV2 implements GoogleCloudMessagingSubscriber {
31 private static final String GOOGLE_PLAY_SERVICES_PACKAGE = "com.google.andro id.gms"; 31 private static final String GOOGLE_PLAY_SERVICES_PACKAGE = "com.google.andro id.gms";
32 private static final long REGISTER_TIMEOUT = 5000; 32 private static final long REGISTER_TIMEOUT = 5000;
33 private static final String ACTION_C2DM_REGISTER = "com.google.android.c2dm. intent.REGISTER"; 33 private static final String ACTION_C2DM_REGISTER = "com.google.android.c2dm. intent.REGISTER";
34 private static final String C2DM_EXTRA_ERROR = "error"; 34 private static final String C2DM_EXTRA_ERROR = "error";
35 private static final String INTENT_PARAM_APP = "app"; 35 private static final String INTENT_PARAM_APP = "app";
36 private static final String ERROR_MAIN_THREAD = "MAIN_THREAD"; 36 private static final String ERROR_MAIN_THREAD = "MAIN_THREAD";
37 private static final String ERROR_SERVICE_NOT_AVAILABLE = "SERVICE_NOT_AVAIL ABLE"; 37 private static final String ERROR_SERVICE_NOT_AVAILABLE = "SERVICE_NOT_AVAIL ABLE";
38 private static final String EXTRA_DELETE = "delete"; 38 private static final String EXTRA_DELETE = "delete";
39 private static final String EXTRA_REGISTRATION_ID = "registration_id"; 39 private static final String EXTRA_REGISTRATION_ID = "registration_id";
40 private static final String EXTRA_SENDER = "sender"; 40 private static final String EXTRA_SENDER = "sender";
41 private static final String EXTRA_MESSENGER = "google.messenger"; 41 private static final String EXTRA_MESSENGER = "google.messenger";
42 private static final String EXTRA_SUBTYPE = "subtype"; 42 private static final String EXTRA_SUBTYPE = "subtype";
43 private static final String EXTRA_SUBSCRIPTION = "subscription"; 43 private static final String EXTRA_SUBSCRIPTION = "subscription";
44 44
45 private Context mContext;
46 private PendingIntent mAppPendingIntent; 45 private PendingIntent mAppPendingIntent;
47 private final Object mAppPendingIntentLock = new Object(); 46 private final Object mAppPendingIntentLock = new Object();
48 47
49 public GoogleCloudMessagingV2(Context context) { 48 public GoogleCloudMessagingV2() {}
50 mContext = context;
51 }
52 49
53 @Override 50 @Override
54 public String subscribe(String source, String subtype, @Nullable Bundle data ) 51 public String subscribe(String source, String subtype, @Nullable Bundle data )
55 throws IOException { 52 throws IOException {
56 if (data == null) { 53 if (data == null) {
57 data = new Bundle(); 54 data = new Bundle();
58 } 55 }
59 data.putString(EXTRA_SUBTYPE, subtype); 56 data.putString(EXTRA_SUBTYPE, subtype);
60 Bundle result = subscribe(source, data); 57 Bundle result = subscribe(source, data);
61 return result.getString(EXTRA_REGISTRATION_ID); 58 return result.getString(EXTRA_REGISTRATION_ID);
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 // Use the register servlet, with 'delete=true'. 124 // Use the register servlet, with 'delete=true'.
128 // Registration service returns a registration_id on success - or an err or code. 125 // Registration service returns a registration_id on success - or an err or code.
129 data.putString(EXTRA_DELETE, "1"); 126 data.putString(EXTRA_DELETE, "1");
130 subscribe(source, data); 127 subscribe(source, data);
131 } 128 }
132 129
133 private Intent registerRpc(Bundle data) throws IOException { 130 private Intent registerRpc(Bundle data) throws IOException {
134 if (Looper.getMainLooper() == Looper.myLooper()) { 131 if (Looper.getMainLooper() == Looper.myLooper()) {
135 throw new IOException(ERROR_MAIN_THREAD); 132 throw new IOException(ERROR_MAIN_THREAD);
136 } 133 }
137 if (PackageUtils.getPackageVersion(mContext, GOOGLE_PLAY_SERVICES_PACKAG E) < 0) { 134 if (PackageUtils.getPackageVersion(
135 ContextUtils.getApplicationContext(), GOOGLE_PLAY_SERVICES_P ACKAGE)
136 < 0) {
138 throw new IOException("Google Play Services missing"); 137 throw new IOException("Google Play Services missing");
139 } 138 }
140 if (data == null) { 139 if (data == null) {
141 data = new Bundle(); 140 data = new Bundle();
142 } 141 }
143 142
144 final BlockingQueue<Intent> responseResult = new LinkedBlockingQueue<Int ent>(); 143 final BlockingQueue<Intent> responseResult = new LinkedBlockingQueue<Int ent>();
145 Handler responseHandler = new Handler(Looper.getMainLooper()) { 144 Handler responseHandler = new Handler(Looper.getMainLooper()) {
146 @Override 145 @Override
147 public void handleMessage(Message msg) { 146 public void handleMessage(Message msg) {
148 Intent res = (Intent) msg.obj; 147 Intent res = (Intent) msg.obj;
149 responseResult.add(res); 148 responseResult.add(res);
150 } 149 }
151 }; 150 };
152 Messenger responseMessenger = new Messenger(responseHandler); 151 Messenger responseMessenger = new Messenger(responseHandler);
153 152
154 Intent intent = new Intent(ACTION_C2DM_REGISTER); 153 Intent intent = new Intent(ACTION_C2DM_REGISTER);
155 intent.setPackage(GOOGLE_PLAY_SERVICES_PACKAGE); 154 intent.setPackage(GOOGLE_PLAY_SERVICES_PACKAGE);
156 setPackageNameExtra(intent); 155 setPackageNameExtra(intent);
157 intent.putExtras(data); 156 intent.putExtras(data);
158 intent.putExtra(EXTRA_MESSENGER, responseMessenger); 157 intent.putExtra(EXTRA_MESSENGER, responseMessenger);
159 mContext.startService(intent); 158 ContextUtils.getApplicationContext().startService(intent);
160 try { 159 try {
161 return responseResult.poll(REGISTER_TIMEOUT, TimeUnit.MILLISECONDS); 160 return responseResult.poll(REGISTER_TIMEOUT, TimeUnit.MILLISECONDS);
162 } catch (InterruptedException e) { 161 } catch (InterruptedException e) {
163 throw new IOException(e.getMessage()); 162 throw new IOException(e.getMessage());
164 } 163 }
165 } 164 }
166 165
167 private String getExtraOrThrow(Intent intent, String extraKey) throws IOExce ption { 166 private String getExtraOrThrow(Intent intent, String extraKey) throws IOExce ption {
168 if (intent == null) { 167 if (intent == null) {
169 throw new IOException(ERROR_SERVICE_NOT_AVAILABLE); 168 throw new IOException(ERROR_SERVICE_NOT_AVAILABLE);
(...skipping 12 matching lines...) Expand all
182 } 181 }
183 } 182 }
184 183
185 private void setPackageNameExtra(Intent intent) { 184 private void setPackageNameExtra(Intent intent) {
186 synchronized (mAppPendingIntentLock) { 185 synchronized (mAppPendingIntentLock) {
187 if (mAppPendingIntent == null) { 186 if (mAppPendingIntent == null) {
188 Intent target = new Intent(); 187 Intent target = new Intent();
189 // Fill in the package, to prevent the intent from being used. 188 // Fill in the package, to prevent the intent from being used.
190 target.setPackage("com.google.example.invalidpackage"); 189 target.setPackage("com.google.example.invalidpackage");
191 mAppPendingIntent = PendingIntent.getBroadcast( 190 mAppPendingIntent = PendingIntent.getBroadcast(
192 mContext.getApplicationContext(), 0, target, 0); 191 ContextUtils.getApplicationContext(), 0, target, 0);
193 } 192 }
194 } 193 }
195 intent.putExtra(INTENT_PARAM_APP, mAppPendingIntent); 194 intent.putExtra(INTENT_PARAM_APP, mAppPendingIntent);
196 } 195 }
197 } 196 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698