- add sources.
[platform/framework/web/crosswalk.git] / src / base / android / java / src / org / chromium / base / WeakContext.java
1 // Copyright (c) 2012 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.base;
6
7 import android.content.Context;
8
9 import java.lang.ref.WeakReference;
10 import java.util.concurrent.Callable;
11
12 // Holds a WeakReference to Context to allow it to be GC'd.
13 // Also provides utility functions to getSystemService from the UI or any
14 // other thread (may return null, if the Context has been nullified).
15 public class WeakContext {
16     private static WeakReference<Context> sWeakContext;
17
18     public static void initializeWeakContext(final Context context) {
19         sWeakContext = new WeakReference<Context>(context);
20     }
21
22     public static Context getContext() {
23         return sWeakContext.get();
24     }
25
26     // Returns a system service. May be called from any thread.
27     // If necessary, it will send a message to the main thread to acquire the
28     // service, and block waiting for it to complete.
29     // May return null if context is no longer available.
30     public static Object getSystemService(final String name) {
31         final Context context = sWeakContext.get();
32         if (context == null) {
33             return null;
34         }
35         if (ThreadUtils.runningOnUiThread()) {
36             return context.getSystemService(name);
37         }
38         return ThreadUtils.runOnUiThreadBlockingNoException(new Callable<Object>() {
39           @Override
40           public Object call() {
41             return context.getSystemService(name);
42           }
43         });
44     }
45 }