From 415b357e9a24e971df0ccee7d0413f30ab3ab1d7 Mon Sep 17 00:00:00 2001 From: Michael Jordan Date: Mon, 28 Sep 2015 10:52:54 -0400 Subject: [PATCH] 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. --- .../DonutMobileAccessibilityHelper.java | 20 +++++++++++-- .../JellyBeanMobileAccessibilityHelper.java | 22 +++++++++++++-- .../MobileAccessibility.java | 28 ++++++++++++++----- 3 files changed, 57 insertions(+), 13 deletions(-) diff --git a/src/android/com/phonegap/plugin/mobileaccessibility/DonutMobileAccessibilityHelper.java b/src/android/com/phonegap/plugin/mobileaccessibility/DonutMobileAccessibilityHelper.java index d2edd31..fd2bcf7 100644 --- a/src/android/com/phonegap/plugin/mobileaccessibility/DonutMobileAccessibilityHelper.java +++ b/src/android/com/phonegap/plugin/mobileaccessibility/DonutMobileAccessibilityHelper.java @@ -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(); + mWebView = (WebView) mobileAccessibility.webView; + } 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); diff --git a/src/android/com/phonegap/plugin/mobileaccessibility/JellyBeanMobileAccessibilityHelper.java b/src/android/com/phonegap/plugin/mobileaccessibility/JellyBeanMobileAccessibilityHelper.java index 41424ed..d7e74fe 100644 --- a/src/android/com/phonegap/plugin/mobileaccessibility/JellyBeanMobileAccessibilityHelper.java +++ b/src/android/com/phonegap/plugin/mobileaccessibility/JellyBeanMobileAccessibilityHelper.java @@ -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(); + } } - mParent = view.getParentForAccessibility(); + } @Override diff --git a/src/android/com/phonegap/plugin/mobileaccessibility/MobileAccessibility.java b/src/android/com/phonegap/plugin/mobileaccessibility/MobileAccessibility.java index 97de0fd..3882510 100644 --- a/src/android/com/phonegap/plugin/mobileaccessibility/MobileAccessibility.java +++ b/src/android/com/phonegap/plugin/mobileaccessibility/MobileAccessibility.java @@ -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. */ @@ -133,13 +137,23 @@ public class MobileAccessibility extends CordovaPlugin { stop(); cordova.getActivity().runOnUiThread(new Runnable() { public void run() { - WebView view; - try { - view = (WebView) webView; - } catch(ClassCastException ce) { // cordova-android 4.0+ - view = (WebView) webView.getView(); - } - view.reload(); + WebView view; + try { + view = (WebView) webView; + 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(); + } + } } }); }