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

Unified Diff: android/java/src/org/chromium/base/BaseChromiumApplication.java

Issue 2045303002: Update to Chromium //base at Chromium commit 3e81715e6d3a4324362635aea46ce1f1a163cca1. (Closed) Base URL: https://chromium.googlesource.com/external/github.com/domokit/base@master
Patch Set: Created 4 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « android/field_trial_list.cc ('k') | android/java/src/org/chromium/base/CommandLine.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: android/java/src/org/chromium/base/BaseChromiumApplication.java
diff --git a/android/java/src/org/chromium/base/BaseChromiumApplication.java b/android/java/src/org/chromium/base/BaseChromiumApplication.java
index d7c7b05ea58d88808aef44d10e798448e74ec0ca..b71b6463b49c38c75e8e153dbaa6b1a81f63def8 100644
--- a/android/java/src/org/chromium/base/BaseChromiumApplication.java
+++ b/android/java/src/org/chromium/base/BaseChromiumApplication.java
@@ -8,18 +8,19 @@ import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.os.Bundle;
-import android.view.KeyEvent;
import android.view.Window;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-
/**
* Basic application functionality that should be shared among all browser applications.
*/
public class BaseChromiumApplication extends Application {
+ private static final String TAG = "cr.base";
+
+ @Override
+ protected void attachBaseContext(Context base) {
+ super.attachBaseContext(base);
+ }
+
/**
* Interface to be implemented by listeners for window focus events.
*/
@@ -35,66 +36,6 @@ public class BaseChromiumApplication extends Application {
private ObserverList<WindowFocusChangedListener> mWindowFocusListeners =
new ObserverList<WindowFocusChangedListener>();
- /**
- * Intercepts calls to an existing Window.Callback. Most invocations are passed on directly
- * to the composed Window.Callback but enables intercepting/manipulating others.
- *
- * This is used to relay window focus changes throughout the app and remedy a bug in the
- * appcompat library.
- */
- private class WindowCallbackProxy implements InvocationHandler {
- private final Window.Callback mCallback;
- private final Activity mActivity;
-
- public WindowCallbackProxy(Activity activity, Window.Callback callback) {
- mCallback = callback;
- mActivity = activity;
- }
-
- @Override
- public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
- if (method.getName().equals("onWindowFocusChanged") && args.length == 1
- && args[0] instanceof Boolean) {
- onWindowFocusChanged((boolean) args[0]);
- return null;
- } else if (method.getName().equals("dispatchKeyEvent") && args.length == 1
- && args[0] instanceof KeyEvent) {
- return dispatchKeyEvent((KeyEvent) args[0]);
- } else {
- try {
- return method.invoke(mCallback, args);
- } catch (InvocationTargetException e) {
- // Special-case for when a method is not defined on the underlying
- // Window.Callback object. Because we're using a Proxy to forward all method
- // calls, this breaks the Android framework's handling for apps built against
- // an older SDK. The framework expects an AbstractMethodError but due to
- // reflection it becomes wrapped inside an InvocationTargetException. Undo the
- // wrapping to signal the framework accordingly.
- if (e.getCause() instanceof AbstractMethodError) {
- throw e.getCause();
- }
- throw e;
- }
- }
- }
-
- public void onWindowFocusChanged(boolean hasFocus) {
- mCallback.onWindowFocusChanged(hasFocus);
-
- for (WindowFocusChangedListener listener : mWindowFocusListeners) {
- listener.onWindowFocusChanged(mActivity, hasFocus);
- }
- }
-
- public boolean dispatchKeyEvent(KeyEvent event) {
- // TODO(aurimas): remove this once AppCompatDelegateImpl no longer steals
- // KEYCODE_MENU. (see b/20529185)
- if (event.getKeyCode() == KeyEvent.KEYCODE_MENU && mActivity.dispatchKeyEvent(event)) {
- return true;
- }
- return mCallback.dispatchKeyEvent(event);
- }
- }
@Override
public void onCreate() {
super.onCreate();
@@ -103,39 +44,45 @@ public class BaseChromiumApplication extends Application {
@Override
public void onActivityCreated(final Activity activity, Bundle savedInstanceState) {
Window.Callback callback = activity.getWindow().getCallback();
- activity.getWindow().setCallback((Window.Callback) Proxy.newProxyInstance(
- Window.Callback.class.getClassLoader(), new Class[] {Window.Callback.class},
- new WindowCallbackProxy(activity, callback)));
+ activity.getWindow().setCallback(new WindowCallbackWrapper(callback) {
+ @Override
+ public void onWindowFocusChanged(boolean hasFocus) {
+ super.onWindowFocusChanged(hasFocus);
+ for (WindowFocusChangedListener listener : mWindowFocusListeners) {
+ listener.onWindowFocusChanged(activity, hasFocus);
+ }
+ }
+ });
}
@Override
public void onActivityDestroyed(Activity activity) {
- assert Proxy.isProxyClass(activity.getWindow().getCallback().getClass());
+ assert activity.getWindow().getCallback() instanceof WindowCallbackWrapper;
}
@Override
public void onActivityPaused(Activity activity) {
- assert Proxy.isProxyClass(activity.getWindow().getCallback().getClass());
+ assert activity.getWindow().getCallback() instanceof WindowCallbackWrapper;
}
@Override
public void onActivityResumed(Activity activity) {
- assert Proxy.isProxyClass(activity.getWindow().getCallback().getClass());
+ assert activity.getWindow().getCallback() instanceof WindowCallbackWrapper;
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
- assert Proxy.isProxyClass(activity.getWindow().getCallback().getClass());
+ assert activity.getWindow().getCallback() instanceof WindowCallbackWrapper;
}
@Override
public void onActivityStarted(Activity activity) {
- assert Proxy.isProxyClass(activity.getWindow().getCallback().getClass());
+ assert activity.getWindow().getCallback() instanceof WindowCallbackWrapper;
}
@Override
public void onActivityStopped(Activity activity) {
- assert Proxy.isProxyClass(activity.getWindow().getCallback().getClass());
+ assert activity.getWindow().getCallback() instanceof WindowCallbackWrapper;
}
});
}
@@ -166,5 +113,5 @@ public class BaseChromiumApplication extends Application {
@VisibleForTesting
public static void initCommandLine(Context context) {
((BaseChromiumApplication) context.getApplicationContext()).initCommandLine();
- };
+ }
}
« no previous file with comments | « android/field_trial_list.cc ('k') | android/java/src/org/chromium/base/CommandLine.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698