Add support for Android 11
- Reflect package visibility settings in documentation - Upgrade android projects (lib & example) - Cleanup ChromeSafariBrowserManager.java - Upgrade Android dependencies
This commit is contained in:
parent
eaad17eb4f
commit
4b24901571
|
@ -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.
|
- 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).
|
- 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
|
### 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`
|
If you are starting a new fresh app, you need to create the Flutter App with `flutter create --androidx -i swift`
|
||||||
|
|
|
@ -48,6 +48,6 @@ android {
|
||||||
implementation 'androidx.webkit:webkit:1.3.0'
|
implementation 'androidx.webkit:webkit:1.3.0'
|
||||||
implementation 'androidx.browser:browser:1.2.0'
|
implementation 'androidx.browser:browser:1.2.0'
|
||||||
implementation 'androidx.appcompat:appcompat:1.2.0-rc02'
|
implementation 'androidx.appcompat:appcompat:1.2.0-rc02'
|
||||||
implementation 'com.squareup.okhttp3:mockwebserver:3.11.0'
|
implementation 'com.squareup.okhttp3:mockwebserver:3.14.7'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,4 +9,11 @@
|
||||||
android:name="io.flutter.embedded_views_preview"
|
android:name="io.flutter.embedded_views_preview"
|
||||||
android:value="true" />
|
android:value="true" />
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
|
<queries>
|
||||||
|
<intent>
|
||||||
|
<action android:name=
|
||||||
|
"android.support.customtabs.action.CustomTabsService" />
|
||||||
|
</intent>
|
||||||
|
</queries>
|
||||||
</manifest>
|
</manifest>
|
|
@ -33,19 +33,19 @@ public class ChromeSafariBrowserManager implements MethodChannel.MethodCallHandl
|
||||||
@Override
|
@Override
|
||||||
public void onMethodCall(final MethodCall call, final MethodChannel.Result result) {
|
public void onMethodCall(final MethodCall call, final MethodChannel.Result result) {
|
||||||
final Activity activity = Shared.activity;
|
final Activity activity = Shared.activity;
|
||||||
final String uuid = (String) call.argument("uuid");
|
final String uuid = call.argument("uuid");
|
||||||
|
|
||||||
switch (call.method) {
|
switch (call.method) {
|
||||||
case "open":
|
case "open":
|
||||||
{
|
{
|
||||||
String url = (String) call.argument("url");
|
String url = call.argument("url");
|
||||||
HashMap<String, Object> options = (HashMap<String, Object>) call.argument("options");
|
HashMap<String, Object> options = call.argument("options");
|
||||||
List<HashMap<String, Object>> menuItemList = (List<HashMap<String, Object>>) call.argument("menuItemList");
|
List<HashMap<String, Object>> menuItemList = call.argument("menuItemList");
|
||||||
String uuidFallback = (String) call.argument("uuidFallback");
|
String uuidFallback = call.argument("uuidFallback");
|
||||||
Map<String, String> headersFallback = (Map<String, String>) call.argument("headersFallback");
|
Map<String, String> headersFallback = call.argument("headersFallback");
|
||||||
HashMap<String, Object> optionsFallback = (HashMap<String, Object>) call.argument("optionsFallback");
|
HashMap<String, Object> optionsFallback = call.argument("optionsFallback");
|
||||||
HashMap<String, Object> contextMenuFallback = (HashMap<String, Object>) call.argument("contextMenuFallback");
|
HashMap<String, Object> contextMenuFallback = call.argument("contextMenuFallback");
|
||||||
Integer windowIdFallback = (Integer) call.argument("windowIdFallback");
|
Integer windowIdFallback = call.argument("windowIdFallback");
|
||||||
open(activity, uuid, url, options, menuItemList, uuidFallback, headersFallback, optionsFallback, contextMenuFallback, windowIdFallback, result);
|
open(activity, uuid, url, options, menuItemList, uuidFallback, headersFallback, optionsFallback, contextMenuFallback, windowIdFallback, result);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -71,7 +71,7 @@ public class ChromeSafariBrowserManager implements MethodChannel.MethodCallHandl
|
||||||
extras.putSerializable("menuItemList", (Serializable) menuItemList);
|
extras.putSerializable("menuItemList", (Serializable) menuItemList);
|
||||||
|
|
||||||
extras.putSerializable("headers", (Serializable) headersFallback);
|
extras.putSerializable("headers", (Serializable) headersFallback);
|
||||||
extras.putSerializable("contextMenu", (Serializable) contextMenuFallback);
|
extras.putSerializable("contextMenu", contextMenuFallback);
|
||||||
|
|
||||||
extras.putInt("windowId", windowIdFallback != null ? windowIdFallback : -1);
|
extras.putInt("windowId", windowIdFallback != null ? windowIdFallback : -1);
|
||||||
|
|
||||||
|
@ -79,7 +79,7 @@ public class ChromeSafariBrowserManager implements MethodChannel.MethodCallHandl
|
||||||
intent = new Intent(activity, ChromeCustomTabsActivity.class);
|
intent = new Intent(activity, ChromeCustomTabsActivity.class);
|
||||||
}
|
}
|
||||||
// check for webview fallback
|
// check for webview fallback
|
||||||
else if (!CustomTabActivityHelper.isAvailable(activity) && uuidFallback != null) {
|
else if (uuidFallback != null) {
|
||||||
Log.d(LOG_TAG, "WebView fallback declared.");
|
Log.d(LOG_TAG, "WebView fallback declared.");
|
||||||
// overwrite with extras fallback parameters
|
// overwrite with extras fallback parameters
|
||||||
extras.putString("uuid", uuidFallback);
|
extras.putString("uuid", uuidFallback);
|
||||||
|
|
|
@ -60,7 +60,7 @@ flutter {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
testImplementation 'junit:junit:4.12'
|
testImplementation 'junit:junit:4.13'
|
||||||
androidTestImplementation 'androidx.test:runner:1.1.1'
|
androidTestImplementation 'androidx.test:runner:1.3.0'
|
||||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
|
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@ buildscript {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:3.6.3'
|
classpath 'com.android.tools.build:gradle:4.0.1'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#Mon Jun 01 20:06:49 CEST 2020
|
#Sat Sep 26 11:13:08 CEST 2020
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
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
|
||||||
|
|
|
@ -11,6 +11,8 @@ import 'in_app_browser.dart';
|
||||||
///and [SFSafariViewController](https://developer.apple.com/documentation/safariservices/sfsafariviewcontroller) on iOS.
|
///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.
|
///[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 {
|
class ChromeSafariBrowser {
|
||||||
String uuid;
|
String uuid;
|
||||||
InAppBrowser browserFallback;
|
InAppBrowser browserFallback;
|
||||||
|
|
Loading…
Reference in New Issue