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

Side by Side Diff: components/gcm_driver/instance_id/android/java/src/org/chromium/components/gcm_driver/instance_id/InstanceIDBridge.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 2016 The Chromium Authors. All rights reserved. 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 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.instance_id; 5 package org.chromium.components.gcm_driver.instance_id;
6 6
7 import android.content.Context;
8 import android.os.AsyncTask; 7 import android.os.AsyncTask;
9 import android.os.Bundle; 8 import android.os.Bundle;
10 9
11 import com.google.android.gms.iid.InstanceID; 10 import com.google.android.gms.iid.InstanceID;
12 11
12 import org.chromium.base.ContextUtils;
13 import org.chromium.base.annotations.CalledByNative; 13 import org.chromium.base.annotations.CalledByNative;
14 import org.chromium.base.annotations.JNINamespace; 14 import org.chromium.base.annotations.JNINamespace;
15 15
16 import java.io.IOException; 16 import java.io.IOException;
17 import java.util.concurrent.ExecutionException; 17 import java.util.concurrent.ExecutionException;
18 18
19 /** 19 /**
20 * Wraps InstanceID and InstanceIDWithSubtype so they can be used over JNI. 20 * Wraps InstanceID and InstanceIDWithSubtype so they can be used over JNI.
21 * Performs disk/network operations on a background thread and replies asynchron ously. 21 * Performs disk/network operations on a background thread and replies asynchron ously.
22 */ 22 */
23 @JNINamespace("instance_id") 23 @JNINamespace("instance_id")
24 public class InstanceIDBridge { 24 public class InstanceIDBridge {
25 private final Context mContext;
26 private final String mSubtype; 25 private final String mSubtype;
27 private long mNativeInstanceIDAndroid; 26 private long mNativeInstanceIDAndroid;
28 /** 27 /**
29 * Underlying InstanceID. May be shared by multiple InstanceIDBridges. Must be initialized on 28 * Underlying InstanceID. May be shared by multiple InstanceIDBridges. Must be initialized on
30 * a background thread. 29 * a background thread.
31 */ 30 */
32 private InstanceID mInstanceID; 31 private InstanceID mInstanceID;
33 32
34 private static boolean sBlockOnAsyncTasksForTesting; 33 private static boolean sBlockOnAsyncTasksForTesting;
35 34
36 private InstanceIDBridge( 35 private InstanceIDBridge(long nativeInstanceIDAndroid, String subtype) {
37 long nativeInstanceIDAndroid, Context context, String subtype) {
38 mContext = context.getApplicationContext(); // Storing activity context would leak activity.
39 mSubtype = subtype; 36 mSubtype = subtype;
40 mNativeInstanceIDAndroid = nativeInstanceIDAndroid; 37 mNativeInstanceIDAndroid = nativeInstanceIDAndroid;
41 } 38 }
42 39
43 /** 40 /**
44 * Returns a wrapped {@link InstanceIDWithSubtype}. Multiple InstanceIDBridg e instances may 41 * Returns a wrapped {@link InstanceIDWithSubtype}. Multiple InstanceIDBridg e instances may
45 * share an underlying InstanceIDWithSubtype. 42 * share an underlying InstanceIDWithSubtype.
46 */ 43 */
47 @CalledByNative 44 @CalledByNative
48 public static InstanceIDBridge create( 45 public static InstanceIDBridge create(long nativeInstanceIDAndroid, String s ubtype) {
49 long nativeInstanceIDAndroid, Context context, String subtype) { 46 return new InstanceIDBridge(nativeInstanceIDAndroid, subtype);
50 return new InstanceIDBridge(nativeInstanceIDAndroid, context, subtype);
51 } 47 }
52 48
53 /** 49 /**
54 * Called when our C++ counterpart is destroyed. Clears the handle to our na tive C++ object, 50 * Called when our C++ counterpart is destroyed. Clears the handle to our na tive C++ object,
55 * ensuring it's not called by pending async tasks. 51 * ensuring it's not called by pending async tasks.
56 */ 52 */
57 @CalledByNative 53 @CalledByNative
58 private void destroy() { 54 private void destroy() {
59 mNativeInstanceIDAndroid = 0; 55 mNativeInstanceIDAndroid = 0;
60 } 56 }
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 protected abstract Result doBackgroundWork(); 187 protected abstract Result doBackgroundWork();
192 188
193 protected abstract void sendResultToNative(Result result); 189 protected abstract void sendResultToNative(Result result);
194 190
195 public void execute() { 191 public void execute() {
196 AsyncTask<Void, Void, Result> task = new AsyncTask<Void, Void, Resul t>() { 192 AsyncTask<Void, Void, Result> task = new AsyncTask<Void, Void, Resul t>() {
197 @Override 193 @Override
198 protected Result doInBackground(Void... params) { 194 protected Result doInBackground(Void... params) {
199 synchronized (InstanceIDBridge.this) { 195 synchronized (InstanceIDBridge.this) {
200 if (mInstanceID == null) { 196 if (mInstanceID == null) {
201 mInstanceID = InstanceIDWithSubtype.getInstance(mCon text, mSubtype); 197 mInstanceID = InstanceIDWithSubtype.getInstance(
198 ContextUtils.getApplicationContext(), mSubty pe);
202 } 199 }
203 } 200 }
204 return doBackgroundWork(); 201 return doBackgroundWork();
205 } 202 }
206 @Override 203 @Override
207 protected void onPostExecute(Result result) { 204 protected void onPostExecute(Result result) {
208 if (!sBlockOnAsyncTasksForTesting && mNativeInstanceIDAndroi d != 0) { 205 if (!sBlockOnAsyncTasksForTesting && mNativeInstanceIDAndroi d != 0) {
209 sendResultToNative(result); 206 sendResultToNative(result);
210 } 207 }
211 } 208 }
212 }; 209 };
213 task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 210 task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
214 if (sBlockOnAsyncTasksForTesting) { 211 if (sBlockOnAsyncTasksForTesting) {
215 Result result; 212 Result result;
216 try { 213 try {
217 // Synchronously block the UI thread until doInBackground re turns result. 214 // Synchronously block the UI thread until doInBackground re turns result.
218 result = task.get(); 215 result = task.get();
219 } catch (InterruptedException | ExecutionException e) { 216 } catch (InterruptedException | ExecutionException e) {
220 throw new IllegalStateException(e); // Shouldn't happen in t ests. 217 throw new IllegalStateException(e); // Shouldn't happen in t ests.
221 } 218 }
222 sendResultToNative(result); 219 sendResultToNative(result);
223 } 220 }
224 } 221 }
225 } 222 }
226 } 223 }
OLDNEW
« no previous file with comments | « components/gcm_driver/gcm_driver_android.cc ('k') | components/gcm_driver/instance_id/instance_id_android.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698