From 4b2490157134fbd493039693063eea84c88c2a8c Mon Sep 17 00:00:00 2001 From: Michael Rittmeister Date: Sat, 26 Sep 2020 11:35:06 +0200 Subject: [PATCH] Add support for Android 11 - Reflect package visibility settings in documentation - Upgrade android projects (lib & example) - Cleanup ChromeSafariBrowserManager.java - Upgrade Android dependencies --- README.md | 2 ++ android/build.gradle | 2 +- android/src/main/AndroidManifest.xml | 7 ++++++ .../ChromeSafariBrowserManager.java | 22 +++++++++---------- example/android/app/build.gradle | 6 ++--- example/android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 4 ++-- lib/src/chrome_safari_browser.dart | 2 ++ 8 files changed, 29 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index d398a02e..d82c572f 100755 --- a/README.md +++ b/README.md @@ -75,6 +75,8 @@ or **Android API 19+** if you enable the `useHybridComposition` Android-specific - Check the official [Network security configuration - "Opt out of cleartext traffic"](https://developer.android.com/training/articles/security-config#CleartextTrafficPermitted) section. - Also, check this StackOverflow issue answer: [Cleartext HTTP traffic not permitted](https://stackoverflow.com/a/50834600/4637638). +If you want to use the `ChromeSafariBrowser` on Android 11+ you need to specify your app querying for `android.support.customtabs.action.CustomTabsService` in your `AndroidManifest.xml` you can read more about it here: https://developers.google.com/web/android/custom-tabs/best-practices#applications_targeting_android_11_api_level_30_or_above + ### IMPORTANT Note for iOS If you are starting a new fresh app, you need to create the Flutter App with `flutter create --androidx -i swift` diff --git a/android/build.gradle b/android/build.gradle index e01ae94f..43194fe3 100755 --- a/android/build.gradle +++ b/android/build.gradle @@ -48,6 +48,6 @@ android { implementation 'androidx.webkit:webkit:1.3.0' implementation 'androidx.browser:browser:1.2.0' implementation 'androidx.appcompat:appcompat:1.2.0-rc02' - implementation 'com.squareup.okhttp3:mockwebserver:3.11.0' + implementation 'com.squareup.okhttp3:mockwebserver:3.14.7' } } diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml index a7309e1e..9aaca72f 100755 --- a/android/src/main/AndroidManifest.xml +++ b/android/src/main/AndroidManifest.xml @@ -9,4 +9,11 @@ android:name="io.flutter.embedded_views_preview" android:value="true" /> + + + + + + \ No newline at end of file diff --git a/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/ChromeSafariBrowserManager.java b/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/ChromeSafariBrowserManager.java index 4f50a804..5691c63f 100755 --- a/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/ChromeSafariBrowserManager.java +++ b/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/ChromeSafariBrowserManager.java @@ -33,19 +33,19 @@ public class ChromeSafariBrowserManager implements MethodChannel.MethodCallHandl @Override public void onMethodCall(final MethodCall call, final MethodChannel.Result result) { final Activity activity = Shared.activity; - final String uuid = (String) call.argument("uuid"); + final String uuid = call.argument("uuid"); switch (call.method) { case "open": { - String url = (String) call.argument("url"); - HashMap options = (HashMap) call.argument("options"); - List> menuItemList = (List>) call.argument("menuItemList"); - String uuidFallback = (String) call.argument("uuidFallback"); - Map headersFallback = (Map) call.argument("headersFallback"); - HashMap optionsFallback = (HashMap) call.argument("optionsFallback"); - HashMap contextMenuFallback = (HashMap) call.argument("contextMenuFallback"); - Integer windowIdFallback = (Integer) call.argument("windowIdFallback"); + String url = call.argument("url"); + HashMap options = call.argument("options"); + List> menuItemList = call.argument("menuItemList"); + String uuidFallback = call.argument("uuidFallback"); + Map headersFallback = call.argument("headersFallback"); + HashMap optionsFallback = call.argument("optionsFallback"); + HashMap contextMenuFallback = call.argument("contextMenuFallback"); + Integer windowIdFallback = call.argument("windowIdFallback"); open(activity, uuid, url, options, menuItemList, uuidFallback, headersFallback, optionsFallback, contextMenuFallback, windowIdFallback, result); } break; @@ -71,7 +71,7 @@ public class ChromeSafariBrowserManager implements MethodChannel.MethodCallHandl extras.putSerializable("menuItemList", (Serializable) menuItemList); extras.putSerializable("headers", (Serializable) headersFallback); - extras.putSerializable("contextMenu", (Serializable) contextMenuFallback); + extras.putSerializable("contextMenu", contextMenuFallback); extras.putInt("windowId", windowIdFallback != null ? windowIdFallback : -1); @@ -79,7 +79,7 @@ public class ChromeSafariBrowserManager implements MethodChannel.MethodCallHandl intent = new Intent(activity, ChromeCustomTabsActivity.class); } // check for webview fallback - else if (!CustomTabActivityHelper.isAvailable(activity) && uuidFallback != null) { + else if (uuidFallback != null) { Log.d(LOG_TAG, "WebView fallback declared."); // overwrite with extras fallback parameters extras.putString("uuid", uuidFallback); diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index f745f672..ee53f52f 100755 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -60,7 +60,7 @@ flutter { } dependencies { - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' + testImplementation 'junit:junit:4.13' + androidTestImplementation 'androidx.test:runner:1.3.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' } diff --git a/example/android/build.gradle b/example/android/build.gradle index 11e3d090..205da3d3 100755 --- a/example/android/build.gradle +++ b/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.6.3' + classpath 'com.android.tools.build:gradle:4.0.1' } } diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties index 9d3660b2..2678abc6 100755 --- a/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/example/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Jun 01 20:06:49 CEST 2020 +#Sat Sep 26 11:13:08 CEST 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip diff --git a/lib/src/chrome_safari_browser.dart b/lib/src/chrome_safari_browser.dart index f1aeb501..37668ed0 100755 --- a/lib/src/chrome_safari_browser.dart +++ b/lib/src/chrome_safari_browser.dart @@ -11,6 +11,8 @@ import 'in_app_browser.dart'; ///and [SFSafariViewController](https://developer.apple.com/documentation/safariservices/sfsafariviewcontroller) on iOS. /// ///[browserFallback] represents the [InAppBrowser] instance fallback in case `Chrome Custom Tabs`/`SFSafariViewController` is not available. +/// +///Note: Requires modification of Android 11+: https://developers.google.com/web/android/custom-tabs/best-practices#applications_targeting_android_11_api_level_30_or_above class ChromeSafariBrowser { String uuid; InAppBrowser browserFallback;