Issue 20: android 3.7.2 broken after android 4.0 fix

Use reflection to check for CordovaWebView.getView interface method so
that we can still compile using cordova-android 3.7.2.
This commit is contained in:
Michael Jordan 2015-09-28 10:52:54 -04:00
parent 382ba4a835
commit 415b357e9a
3 changed files with 57 additions and 13 deletions

View File

@ -29,6 +29,10 @@ import android.view.accessibility.AccessibilityManager;
import android.webkit.WebSettings;
import android.webkit.WebView;
import java.lang.IllegalAccessException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@TargetApi(Build.VERSION_CODES.DONUT)
public class DonutMobileAccessibilityHelper extends
AbstractMobileAccessibilityHelper {
@ -38,10 +42,20 @@ public class DonutMobileAccessibilityHelper extends
@Override
public void initialize(MobileAccessibility mobileAccessibility) {
mMobileAccessibility = mobileAccessibility;
try {
mWebView = (WebView) mobileAccessibility.webView;
} catch (ClassCastException ce) { // cordova-android 4.0+
mWebView = (WebView) mobileAccessibility.webView.getView();
} catch(ClassCastException ce) { // cordova-android 4.0+
try {
Method getView = mobileAccessibility.webView.getClass().getMethod("getView");
mWebView = (WebView) getView.invoke(mobileAccessibility.webView);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
mAccessibilityManager = (AccessibilityManager) mMobileAccessibility.cordova.getActivity().getSystemService(Context.ACCESSIBILITY_SERVICE);

View File

@ -28,6 +28,10 @@ import android.os.Build;
import android.view.accessibility.AccessibilityEvent;
import android.webkit.WebView;
import java.lang.IllegalAccessException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public class JellyBeanMobileAccessibilityHelper extends
IceCreamSandwichMobileAccessibilityHelper {
@ -36,12 +40,24 @@ public class JellyBeanMobileAccessibilityHelper extends
public void initialize(MobileAccessibility mobileAccessibility) {
WebView view;
super.initialize(mobileAccessibility);
try {
view = (WebView) mobileAccessibility.webView;
} catch (ClassCastException ce) { // cordova android 4.0+
view = (WebView) mobileAccessibility.webView.getView();
}
mParent = view.getParentForAccessibility();
} catch(ClassCastException ce) { // cordova-android 4.0+
try {
Method getView = mobileAccessibility.webView.getClass().getMethod("getView");
view = (WebView) getView.invoke(mobileAccessibility.webView);
mParent = view.getParentForAccessibility();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
@Override

View File

@ -33,6 +33,10 @@ import org.json.JSONObject;
import android.os.Build;
import android.webkit.WebView;
import java.lang.IllegalAccessException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* This class provides information on the status of native accessibility services to JavaScript.
*/
@ -136,10 +140,20 @@ public class MobileAccessibility extends CordovaPlugin {
WebView view;
try {
view = (WebView) webView;
} catch(ClassCastException ce) { // cordova-android 4.0+
view = (WebView) webView.getView();
}
view.reload();
} catch(ClassCastException ce) { // cordova-android 4.0+
try { // cordova-android 4.0+
Method getView = webView.getClass().getMethod("getView");
view = (WebView) getView.invoke(webView);
view.reload();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
});
}