Index: ui/android/java/src/org/chromium/ui/base/WindowAndroid.java |
diff --git a/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java b/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java |
index 658d0be820dbdaa253e175e23c8a11e75b54bfd4..25951fbb66d00b1a0180a57eb9dca6ff14ca06fc 100644 |
--- a/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java |
+++ b/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java |
@@ -12,6 +12,7 @@ import android.app.Activity; |
import android.app.PendingIntent; |
import android.content.ContentResolver; |
import android.content.Context; |
+import android.content.ContextWrapper; |
import android.content.Intent; |
import android.content.pm.PackageManager; |
import android.os.Build; |
@@ -125,6 +126,24 @@ public class WindowAndroid { |
}; |
/** |
+ * Extract the activity if the given Context either is or wraps one. |
+ * Only retrieve the base context if the supplied context is a {@link ContextWrapper} but not |
+ * an Activity, given that Activity is already a subclass of ContextWrapper. |
+ * @param context The context to check. |
+ * @return The {@link Activity} that is extracted through the given Context. |
+ */ |
+ public static Activity activityFromContext(Context context) { |
+ if (context instanceof Activity) { |
+ return ((Activity) context); |
+ } else if (context instanceof ContextWrapper) { |
+ context = ((ContextWrapper) context).getBaseContext(); |
+ return activityFromContext(context); |
+ } else { |
+ return null; |
+ } |
+ } |
+ |
+ /** |
* @return true if onVSync handler is executing. |
* |
* @see org.chromium.ui.VSyncMonitor#isInsideVSync() |