Modified last of reflection calls to use ReflectHelper class
Also modified ReflectHelper class to consolidate the API and
modified browser code to reflect the API changes.
Change-Id: I708f43cf3c1432adc7cd78c25264330a673ffeb5
diff --git a/src/com/android/browser/BrowserHistoryPage.java b/src/com/android/browser/BrowserHistoryPage.java
index 14b9e40..ee7aebd 100644
--- a/src/com/android/browser/BrowserHistoryPage.java
+++ b/src/com/android/browser/BrowserHistoryPage.java
@@ -421,8 +421,8 @@
Class[] type = new Class[] { android.content.Context.class,
String.class,
String.class};
- ReflectHelper.invokeStaticMethod("android.provider.Browser","sendString",
- type, params);
+ ReflectHelper.invokeMethod("android.provider.Browser","sendString",
+ type, params);
return true;
case R.id.copy_url_context_menu_id:
copy(url);
diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java
index 34ba56b..e3f31c0 100644
--- a/src/com/android/browser/BrowserSettings.java
+++ b/src/com/android/browser/BrowserSettings.java
@@ -43,7 +43,6 @@
import java.io.InputStream;
import java.lang.ref.WeakReference;
-import java.lang.reflect.Method;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Locale;
@@ -358,16 +357,16 @@
// add for carrier useragent feature
String ua = null;
- try {
- Class c = Class.forName("com.qrd.useragent.UserAgentHandler");
- Object cObj = c.newInstance();
- Method m = c.getDeclaredMethod("getUAString", Context.class);
- ua = (String)m.invoke(cObj, mContext);
- } catch (Exception e) {
- Log.e(TAG, "plug in Load failed, err " + e);
+ Object objUserAgentHandler = ReflectHelper.newObject(
+ "com.qrd.useragent.UserAgentHandler", null, null);
+ Object[] params = {mContext};
+ Class[] type = new Class[] {Context.class};
+ ua = (String) ReflectHelper.invokeMethod(objUserAgentHandler,"getUAString",
+ type, params);
+ if (ua == null)
ua = mCustomUserAgents.get(settings);
- }
- if (ua != null) {
+
+ if (ua != null){
settings.setUserAgentString(ua);
} else {
settings.setUserAgentString(USER_AGENTS[getUserAgent()]);
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 4d96cf5..c0ffd83 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -906,8 +906,8 @@
this.getContext().startActivity(intent);
}
} else {
- if ((Boolean)ReflectHelper.invokeStaticMethod(
- "ActivityManagerNative", "isSystemReady", null, null)) {
+ if ((Boolean)ReflectHelper.invokeMethod(
+ "android.app.ActivityManagerNative", "isSystemReady", null, null)) {
try {
Intent intent = new Intent(INTENT_PICK_NETWORK);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -947,7 +947,7 @@
Object[] params = {new String(PROP_NETSWITCH),
new Boolean(false)};
Class[] type = new Class[] {String.class, boolean.class};
- Boolean result = (Boolean) ReflectHelper.invokeStaticMethod(
+ Boolean result = (Boolean) ReflectHelper.invokeMethod(
"android.os.SystemProperties", "getBoolean",
type, params);
if (result) {
@@ -1164,7 +1164,7 @@
public String[] doInBackground(Void... unused) {
Object[] params = {mActivity.getContentResolver()};
Class[] type = new Class[] {ContentResolver.class};
- return (String[])ReflectHelper.invokeStaticMethod(
+ return (String[])ReflectHelper.invokeMethod(
"android.provider.Browser","getVisitedHistory",
type, params);
}
@@ -2001,7 +2001,7 @@
case R.id.exit_menu_id:
Object[] params = { new String("persist.debug.browsermonkeytest")};
Class[] type = new Class[] {String.class};
- String ret = (String)ReflectHelper.invokeStaticMethod(
+ String ret = (String)ReflectHelper.invokeMethod(
"android.os.SystemProperties","get", type, params);
if (ret != null && ret.equals("enable"))
break;
diff --git a/src/com/android/browser/DownloadHandler.java b/src/com/android/browser/DownloadHandler.java
index 1de6ac6..1e969c5 100644
--- a/src/com/android/browser/DownloadHandler.java
+++ b/src/com/android/browser/DownloadHandler.java
@@ -117,7 +117,7 @@
private static boolean isAudioFileType(int fileType){
Object[] params = {Integer.valueOf(fileType)};
Class[] type = new Class[] {int.class};
- Boolean result = (Boolean) ReflectHelper.invokeStaticMethod("android.media.MediaFile",
+ Boolean result = (Boolean) ReflectHelper.invokeMethod("android.media.MediaFile",
"isAudioFileType", type, params);
return result;
}
@@ -125,7 +125,7 @@
private static boolean isVideoFileType(int fileType){
Object[] params = {Integer.valueOf(fileType)};
Class[] type = new Class[] {int.class};
- Boolean result = (Boolean) ReflectHelper.invokeStaticMethod("android.media.MediaFile",
+ Boolean result = (Boolean) ReflectHelper.invokeMethod("android.media.MediaFile",
"isVideoFileType", type, params);
return result;
}
@@ -160,7 +160,7 @@
// For those file types other than audio or video, download it immediately.
Object[] params = {mimetype};
Class[] type = new Class[] {String.class};
- Integer result = (Integer) ReflectHelper.invokeStaticMethod("android.media.MediaFile",
+ Integer result = (Integer) ReflectHelper.invokeMethod("android.media.MediaFile",
"getFileTypeForMimeType", type, params);
int fileType = result.intValue();
if ("http".equalsIgnoreCase(scheme) &&
diff --git a/src/com/android/browser/DownloadSettings.java b/src/com/android/browser/DownloadSettings.java
index 4ae00e3..cca26cc 100644
--- a/src/com/android/browser/DownloadSettings.java
+++ b/src/com/android/browser/DownloadSettings.java
@@ -131,7 +131,7 @@
String updatedFileName = filenameBase + "." + filenameExtension;
Object[] params = {updatedFileName};
Class[] type = new Class[] {String.class};
- mimetype = (String) ReflectHelper.invokeStaticMethod("android.media.MediaFile",
+ mimetype = (String) ReflectHelper.invokeMethod("android.media.MediaFile",
"getMimeTypeForFile", type, params);
}
diff --git a/src/com/android/browser/DownloadTouchIcon.java b/src/com/android/browser/DownloadTouchIcon.java
index d2c4024..fe139e8 100644
--- a/src/com/android/browser/DownloadTouchIcon.java
+++ b/src/com/android/browser/DownloadTouchIcon.java
@@ -121,7 +121,7 @@
//HttpHost httpHost = Proxy.getPreferredHttpHost(mContext, url);
Object[] params = { mContext, url};
Class[] type = new Class[] {android.content.Context.class, String.class};
- HttpHost httpHost = (HttpHost) ReflectHelper.invokeStaticMethod(
+ HttpHost httpHost = (HttpHost) ReflectHelper.invokeMethod(
"android.net.Proxy", "getPreferredHttpHost",
type, params);
if (httpHost != null) {
diff --git a/src/com/android/browser/FetchUrlMimeType.java b/src/com/android/browser/FetchUrlMimeType.java
index f42d627..fbd8be7 100644
--- a/src/com/android/browser/FetchUrlMimeType.java
+++ b/src/com/android/browser/FetchUrlMimeType.java
@@ -79,7 +79,7 @@
try {
Class<?> argTypes[] = new Class[]{Context.class, String.class};
Object args[] = new Object[]{mContext, mUri};
- httpHost = (HttpHost) ReflectHelper.invokeStaticMethod("android.net.Proxy",
+ httpHost = (HttpHost) ReflectHelper.invokeMethod("android.net.Proxy",
"getPreferredHttpHost", argTypes, args);
if (httpHost != null) {
ConnRouteParams.setDefaultProxy(client.getParams(), httpHost);
diff --git a/src/com/android/browser/NavigationBarBase.java b/src/com/android/browser/NavigationBarBase.java
index 22655f2..826d519 100644
--- a/src/com/android/browser/NavigationBarBase.java
+++ b/src/com/android/browser/NavigationBarBase.java
@@ -174,7 +174,7 @@
Object[] params = {new String("persist.env.browser.wap2estore"),
Boolean.valueOf(false)};
Class[] type = new Class[] {String.class, boolean.class};
- Boolean wap2estore = (Boolean) ReflectHelper.invokeStaticMethod(
+ Boolean wap2estore = (Boolean) ReflectHelper.invokeMethod(
"android.os.SystemProperties", "getBoolean", type, params);
if ((wap2estore && isEstoreTypeUrl(text)) || isRtspTypeUrl(text)
|| isMakeCallTypeUrl(text)) {
diff --git a/src/com/android/browser/PageDialogsHandler.java b/src/com/android/browser/PageDialogsHandler.java
index a38b904..b1e1d44 100644
--- a/src/com/android/browser/PageDialogsHandler.java
+++ b/src/com/android/browser/PageDialogsHandler.java
@@ -16,8 +16,6 @@
package com.android.browser;
-import java.lang.reflect.Method;
-
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -31,6 +29,7 @@
import org.codeaurora.swe.SslErrorHandler;
import org.codeaurora.swe.WebView;
+import com.android.browser.reflect.ReflectHelper;
import com.android.browser.R;
import android.widget.LinearLayout;
@@ -339,25 +338,9 @@
}
private static View inflateCertificateView(SslCertificate certificate, Context ctx) {
- Class certClass;
- try {
- certClass = Class.forName("android.net.http.SslCertificate");
-
- Class argTypes[] = new Class[1];
- argTypes[0] = Context.class;
-
- Method m = certClass.getDeclaredMethod("inflateCertificateView", argTypes);
- m.setAccessible(true);
-
- Object args[] = new Object[1];
- args[0] = ctx;
- return (View) m.invoke(certificate, args);
-
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- return null;
+ Object[] params = {ctx};
+ Class[] type = new Class[] {Context.class};
+ return (View)ReflectHelper.invokeMethod(certificate, "inflateCertificateView",type, params);
}
/*
diff --git a/src/com/android/browser/TabControl.java b/src/com/android/browser/TabControl.java
index a1ebd72..e0c3286 100644
--- a/src/com/android/browser/TabControl.java
+++ b/src/com/android/browser/TabControl.java
@@ -19,8 +19,6 @@
import android.os.Bundle;
import android.util.Log;
-import com.android.browser.reflect.ReflectHelper;
-
import org.codeaurora.swe.WebView;
import java.util.ArrayList;
diff --git a/src/com/android/browser/UploadHandler.java b/src/com/android/browser/UploadHandler.java
index 8dec49c..349f67f 100644
--- a/src/com/android/browser/UploadHandler.java
+++ b/src/com/android/browser/UploadHandler.java
@@ -125,7 +125,7 @@
Object[] params = {new String("persist.env.browser.drmupload"),
Boolean.valueOf(false)};
Class[] type = new Class[] {String.class, boolean.class};
- Boolean drmUpload = (Boolean) ReflectHelper.invokeStaticMethod(
+ Boolean drmUpload = (Boolean) ReflectHelper.invokeMethod(
"android.os.SystemProperties", "getBoolean", type, params);
if (drmUpload && isDrmFileUpload(result)) {
mUploadMessage.onReceiveValue(null);
diff --git a/src/com/android/browser/UrlHandler.java b/src/com/android/browser/UrlHandler.java
index 783f11a..4b40df9 100755
--- a/src/com/android/browser/UrlHandler.java
+++ b/src/com/android/browser/UrlHandler.java
@@ -107,7 +107,7 @@
Object[] params = {new String("persist.env.browser.wap2estore"),
Boolean.valueOf(false)};
Class[] type = new Class[] {String.class, boolean.class};
- Boolean wap2estore = (Boolean)ReflectHelper.invokeStaticMethod(
+ Boolean wap2estore = (Boolean)ReflectHelper.invokeMethod(
"android.os.SystemProperties", "getBoolean", type, params);
if (wap2estore && isEstoreTypeUrl(url)) {
handleEstoreTypeUrl(url);
diff --git a/src/com/android/browser/provider/BrowserProvider2.java b/src/com/android/browser/provider/BrowserProvider2.java
index e37e7fe..8b968a9 100644
--- a/src/com/android/browser/provider/BrowserProvider2.java
+++ b/src/com/android/browser/provider/BrowserProvider2.java
@@ -58,7 +58,6 @@
import com.android.browser.platformsupport.BrowserContract.Searches;
import com.android.browser.platformsupport.BrowserContract.Settings;
import com.android.browser.platformsupport.BrowserContract.SyncState;
-import com.android.browser.reflect.ReflectHelper;
import com.android.browser.widget.BookmarkThumbnailWidgetProvider;
import com.google.common.annotations.VisibleForTesting;
diff --git a/src/com/android/browser/reflect/ReflectHelper.java b/src/com/android/browser/reflect/ReflectHelper.java
index 5a5f2ae..06ac8d0 100644
--- a/src/com/android/browser/reflect/ReflectHelper.java
+++ b/src/com/android/browser/reflect/ReflectHelper.java
@@ -41,42 +41,46 @@
private final static String LOGTAG = "ReflectHelper";
- public static Object newObject(String className) {
- Object obj = null;
- try {
- Class clazz = Class.forName(className);
- obj = clazz.newInstance();
- } catch (Exception e) {
- Log.e(LOGTAG, "An exception occured : " + e.getMessage());
- }
- return obj;
- }
-
public static Object newObject(String className, Class[] argTypes, Object[] args) {
- if (args == null || args.length == 0) {
- return newObject(className);
- }
Object obj = null;
- try {
+
+ try{
Class clazz = Class.forName(className);
- Constructor ctor = clazz.getDeclaredConstructor(argTypes);
- obj = ctor.newInstance(args);
- } catch (Exception e) {
+
+ if (args == null || args.length == 0) {
+ obj = clazz.newInstance();
+ } else {
+ Constructor ctor = clazz.getDeclaredConstructor(argTypes);
+ obj = ctor.newInstance(args);
+ }
+ }
+ catch (Exception e) {
Log.e(LOGTAG, "An exception occured : " + e.getMessage() );
}
return obj;
}
public static Object invokeMethod(Object obj, String method, Class[] argTypes, Object[] args) {
- Object result = null;
boolean modifiedAccessibility = false;
- if (obj == null || method == null) {
- throw new IllegalArgumentException("Object and Method must be supplied.");
- }
+ Object result = null;
+ Method m = null;
+
+ if (obj == null || method == null)
+ return null;
+
try {
- Method m = obj.getClass().getDeclaredMethod(method, argTypes);
+ if (obj instanceof String){
+ //Process call as a static method call
+ String className = (String)obj;
+ obj = null;
+ Class clazz = Class.forName(className);
+ m = clazz.getDeclaredMethod(method, argTypes);
+ } else {
+ //Process call on instance of obj
+ m = obj.getClass().getDeclaredMethod(method, argTypes);
+ }
+
if(m != null) {
- // make it visible
if (!m.isAccessible()) {
modifiedAccessibility = true;
m.setAccessible(true);
@@ -87,33 +91,34 @@
}
} catch (Exception e) {
Log.e(LOGTAG, "An exception occured : " + e.getMessage() );
+ return null;
}
return result;
}
- public static Object invokeStaticMethod(String className, String method,
- Class[] argTypes, Object[] args) {
- Object result = null;
+ public static Object invokeProxyMethod(String proxyClassName, String method, Object obj,
+ Class[] proxyArgTypes, Object[] args) {
+ Object result = null;
boolean modifiedAccessibility = false;
- if (className == null || method == null) {
+ if (proxyClassName == null || method == null) {
throw new IllegalArgumentException("Object and Method must be supplied.");
}
try {
- Class clazz = Class.forName(className);
- Method m = clazz.getDeclaredMethod(method, argTypes);
+ Class clazz = Class.forName(proxyClassName);
+ Method m = clazz.getDeclaredMethod(method, proxyArgTypes);
if(m != null) {
// make it visible
if (!m.isAccessible()) {
modifiedAccessibility = true;
m.setAccessible(true);
}
- result = m.invoke(null, args);
+ result = m.invoke(obj, args);
if (modifiedAccessibility)
m.setAccessible(false);
+ }
+ } catch (Exception e) {
+ Log.e(LOGTAG, "An exception occured : " + e.getMessage() );
}
- } catch (Exception e) {
- Log.e(LOGTAG, "An exception occured : " + e.getMessage() );
- }
return result;
}
diff --git a/src/com/android/browser/search/SearchEngines.java b/src/com/android/browser/search/SearchEngines.java
index c840afc..91bddc8 100644
--- a/src/com/android/browser/search/SearchEngines.java
+++ b/src/com/android/browser/search/SearchEngines.java
@@ -16,8 +16,6 @@
package com.android.browser.search;
import com.android.browser.R;
-import com.android.browser.reflect.ReflectHelper;
-
import android.content.Context;
import android.content.res.Resources;
import android.text.TextUtils;
diff --git a/src/com/android/browser/view/BookmarkExpandableView.java b/src/com/android/browser/view/BookmarkExpandableView.java
index 763efa7..aec00ff 100644
--- a/src/com/android/browser/view/BookmarkExpandableView.java
+++ b/src/com/android/browser/view/BookmarkExpandableView.java
@@ -33,13 +33,13 @@
import com.android.browser.BreadCrumbView;
import com.android.browser.BrowserBookmarksAdapter;
-import com.android.browser.R;
import com.android.browser.platformsupport.BrowserContract;
+import com.android.browser.reflect.ReflectHelper;
+import com.android.browser.R;
import org.json.JSONException;
import org.json.JSONObject;
-import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
@@ -160,20 +160,10 @@
// Since the 'menu' object is of type MenuBuilder, java reflection method
// is the only way to access MenuBuilder.setCurrentMenuInfo().
static void setCurrentMenuInfo(ContextMenu menu, ContextMenuInfo menuInfo) {
- try {
- Class<?> proxyClass = Class.forName("com.android.internal.view.menu.MenuBuilder");
- Class<?> argTypes[] = new Class[1];
- argTypes[0] = ContextMenuInfo.class;
- Method m = proxyClass.getDeclaredMethod("setCurrentMenuInfo", argTypes);
- m.setAccessible(true);
-
- Object args[] = new Object[1];
- args[0] = menuInfo;
- m.invoke(menu, args);
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
+ Object[] params = {menuInfo};
+ Class[] proxyType = new Class[] {ContextMenuInfo.class};
+ ReflectHelper.invokeProxyMethod("com.android.internal.view.menu.MenuBuilder",
+ "setCurrentMenuInfo", menu, proxyType, params);
}
@Override