merge with 5.4.4

This commit is contained in:
Lorenzo Pichilli 2022-10-04 12:35:50 +02:00
parent 8abce4e7dd
commit 4c06cfee18
10 changed files with 208 additions and 165 deletions

View File

@ -1,70 +1,70 @@
# Name of your workflow.
name: Android Integration Tests
on:
# Trigger the workflow on push or pull request,
# but only for the main branch
push:
branches:
- master
pull_request:
branches:
- master
# A workflow run is made up of one or more jobs.
jobs:
# id of job, a string that is unique to the "jobs" node above.
android_integration_tests:
# Creates a build matrix for your jobs. You can define different
# variations of an environment to run each job in.
strategy:
# A set of different configurations of the virtual
# environment.
# matrix:
# When set to true, GitHub cancels all in-progress jobs if any
# matrix job fails.
fail-fast: false
# The type of machine to run the job on.
runs-on: macOS-latest
timeout-minutes: 60
# Contains a sequence of tasks.
steps:
# The branch or tag ref that triggered the workflow will be
# checked out.
# https://github.com/actions/checkout
- uses: actions/checkout@v2
# Sets up cache
- name: Cache multiple paths
uses: actions/cache@v2
with:
path: |
~/.pub-cache
~/.npm
key: ${{ runner.os }}-pub-and-npm-cache
# Sets up a flutter environment.
# https://github.com/marketplace/actions/flutter-action
- name: "Install Flutter"
uses: subosito/flutter-action@v1.4.0
with:
channel: 'dev' # 'stable' or 'dev' or 'beta'
- name: "Change Flutter channel to master"
run: |
flutter channel master
flutter upgrade
- uses: actions/setup-node@v2
with:
node-version: '14'
- name: "Install npm dependencies"
run: |
cd ./nodejs_server_test_auth_basic_and_ssl
npm install
cd ..
- name: "Install flutter dependencies"
run: |
flutter pub get
# Sets up android emulator
- name: "Run Android Flutter Integration Test"
uses: ReactiveCircus/android-emulator-runner@v2.14.3
with:
api-level: 29
target: default
avd-name: Flutter-Android
script: ./scripts/test.sh $(ipconfig getifaddr en0)
## Name of your workflow.
#name: Android Integration Tests
#on:
# # Trigger the workflow on push or pull request,
# # but only for the main branch
# push:
# branches:
# - master
# pull_request:
# branches:
# - master
## A workflow run is made up of one or more jobs.
#jobs:
# # id of job, a string that is unique to the "jobs" node above.
# android_integration_tests:
# # Creates a build matrix for your jobs. You can define different
# # variations of an environment to run each job in.
# strategy:
# # A set of different configurations of the virtual
# # environment.
# # matrix:
# # When set to true, GitHub cancels all in-progress jobs if any
# # matrix job fails.
# fail-fast: false
# # The type of machine to run the job on.
# runs-on: macOS-latest
# timeout-minutes: 60
# # Contains a sequence of tasks.
# steps:
# # The branch or tag ref that triggered the workflow will be
# # checked out.
# # https://github.com/actions/checkout
# - uses: actions/checkout@v2
# # Sets up cache
# - name: Cache multiple paths
# uses: actions/cache@v2
# with:
# path: |
# ~/.pub-cache
# ~/.npm
# key: ${{ runner.os }}-pub-and-npm-cache
# # Sets up a flutter environment.
# # https://github.com/marketplace/actions/flutter-action
# - name: "Install Flutter"
# uses: subosito/flutter-action@v1.4.0
# with:
# channel: 'dev' # 'stable' or 'dev' or 'beta'
# - name: "Change Flutter channel to master"
# run: |
# flutter channel master
# flutter upgrade
# - uses: actions/setup-node@v2
# with:
# node-version: '14'
# - name: "Install npm dependencies"
# run: |
# cd ./nodejs_server_test_auth_basic_and_ssl
# npm install
# cd ..
# - name: "Install flutter dependencies"
# run: |
# flutter pub get
# # Sets up android emulator
# - name: "Run Android Flutter Integration Test"
# uses: ReactiveCircus/android-emulator-runner@v2.14.3
# with:
# api-level: 29
# target: default
# avd-name: Flutter-Android
# script: ./scripts/test.sh $(ipconfig getifaddr en0)

View File

@ -1,69 +1,69 @@
# Name of your workflow.
name: iOS Integration Tests
on:
# Trigger the workflow on push or pull request,
# but only for the main branch
push:
branches:
- master
pull_request:
branches:
- master
# A workflow run is made up of one or more jobs.
jobs:
# id of job, a string that is unique to the "jobs" node above.
ios_integration_tests:
# Creates a build matrix for your jobs. You can define different
# variations of an environment to run each job in.
strategy:
# A set of different configurations of the virtual
# environment.
# matrix:
# When set to true, GitHub cancels all in-progress jobs if any
# matrix job fails.
fail-fast: false
# The type of machine to run the job on.
runs-on: macOS-latest
timeout-minutes: 60
# Contains a sequence of tasks.
steps:
# A name for your step to display on GitHub.
- name: "Start Simulator"
run: |
xcrun simctl list
xcrun simctl create Flutter-iPhone com.apple.CoreSimulator.SimDeviceType.iPhone-12 com.apple.CoreSimulator.SimRuntime.iOS-14-3 | xargs xcrun simctl boot
# The branch or tag ref that triggered the workflow will be
# checked out.
# https://github.com/actions/checkout
- uses: actions/checkout@v2
# Sets up cache
- name: Cache multiple paths
uses: actions/cache@v2
with:
path: |
~/.pub-cache
~/.npm
key: ${{ runner.os }}-pub-and-npm-cache
# Sets up a flutter environment.
# https://github.com/marketplace/actions/flutter-action
- name: "Install Flutter"
uses: subosito/flutter-action@v1.4.0
with:
channel: 'dev' # 'stable' or 'dev' or 'beta'
- name: "Change Flutter channel to master"
run: |
flutter channel master
flutter upgrade
- uses: actions/setup-node@v2
with:
node-version: '14'
- name: "Install npm dependencies"
run: |
cd ./nodejs_server_test_auth_basic_and_ssl
npm install
cd ..
- name: "Run iOS Flutter Integration Test"
run: |
flutter pub get
flutter devices
./scripts/test.sh $(ipconfig getifaddr en0)
## Name of your workflow.
#name: iOS Integration Tests
#on:
# # Trigger the workflow on push or pull request,
# # but only for the main branch
# push:
# branches:
# - master
# pull_request:
# branches:
# - master
## A workflow run is made up of one or more jobs.
#jobs:
# # id of job, a string that is unique to the "jobs" node above.
# ios_integration_tests:
# # Creates a build matrix for your jobs. You can define different
# # variations of an environment to run each job in.
# strategy:
# # A set of different configurations of the virtual
# # environment.
# # matrix:
# # When set to true, GitHub cancels all in-progress jobs if any
# # matrix job fails.
# fail-fast: false
# # The type of machine to run the job on.
# runs-on: macOS-latest
# timeout-minutes: 60
# # Contains a sequence of tasks.
# steps:
# # A name for your step to display on GitHub.
# - name: "Start Simulator"
# run: |
# xcrun simctl list
# xcrun simctl create Flutter-iPhone com.apple.CoreSimulator.SimDeviceType.iPhone-12 com.apple.CoreSimulator.SimRuntime.iOS-14-3 | xargs xcrun simctl boot
# # The branch or tag ref that triggered the workflow will be
# # checked out.
# # https://github.com/actions/checkout
# - uses: actions/checkout@v2
# # Sets up cache
# - name: Cache multiple paths
# uses: actions/cache@v2
# with:
# path: |
# ~/.pub-cache
# ~/.npm
# key: ${{ runner.os }}-pub-and-npm-cache
# # Sets up a flutter environment.
# # https://github.com/marketplace/actions/flutter-action
# - name: "Install Flutter"
# uses: subosito/flutter-action@v1.4.0
# with:
# channel: 'dev' # 'stable' or 'dev' or 'beta'
# - name: "Change Flutter channel to master"
# run: |
# flutter channel master
# flutter upgrade
# - uses: actions/setup-node@v2
# with:
# node-version: '14'
# - name: "Install npm dependencies"
# run: |
# cd ./nodejs_server_test_auth_basic_and_ssl
# npm install
# cd ..
# - name: "Run iOS Flutter Integration Test"
# run: |
# flutter pub get
# flutter devices
# ./scripts/test.sh $(ipconfig getifaddr en0)

View File

@ -16,9 +16,14 @@
### BREAKING CHANGES
- On Android, the `InAppWebView` widget uses hybrid composition by default (`useHybridComposition: true`).
- On Android, the `InAppWebView` widget uses hybrid composition by default (`useHybridComposition: true`).
- All properties of `GeolocationPermissionShowPromptResponse` cannot be `null`;
## 5.4.4
- Added support for Android 33
- Fixed possible null pointer exception in Android `ChromeCustomTabsActivity.java`
## 5.4.3+8
- Merged "Xcode 14 build error: Stored properties cannot be marked potentially unavailable with '@available'" [#1238](https://github.com/pichillilorenzo/flutter_inappwebview/pull/1238) (thanks to [CodeEagle](https://github.com/CodeEagle))

View File

@ -3,10 +3,10 @@
[![All Contributors](https://img.shields.io/badge/all_contributors-53-orange.svg?style=flat-square)](#contributors-)
<!-- ALL-CONTRIBUTORS-BADGE:END -->
[![Pub](https://img.shields.io/pub/v/flutter_inappwebview.svg)](https://pub.dartlang.org/packages/flutter_inappwebview)
[![pub points](https://badges.bar/flutter_inappwebview/pub%20points)](https://pub.dev/packages/flutter_inappwebview/score)
[![popularity](https://badges.bar/flutter_inappwebview/popularity)](https://pub.dev/packages/flutter_inappwebview/score)
[![likes](https://badges.bar/flutter_inappwebview/likes)](https://pub.dev/packages/flutter_inappwebview/score)
[![Pub](https://img.shields.io/pub/v/flutter_inappwebview?include_prereleases)](https://pub.dartlang.org/packages/flutter_inappwebview)
[![Pub Points](https://img.shields.io/pub/points/flutter_inappwebview)](https://pub.dev/packages/flutter_inappwebview/score)
[![Pub Popularity](https://img.shields.io/pub/popularity/flutter_inappwebview)](https://pub.dev/packages/flutter_inappwebview/score)
[![Pub Likes](https://img.shields.io/pub/likes/flutter_inappwebview)](https://pub.dev/packages/flutter_inappwebview/score)
[![Awesome Flutter](https://img.shields.io/badge/Awesome-Flutter-blue.svg?longCache=true&style=flat-square)](https://stackoverflow.com/questions/tagged/flutter-inappwebview)
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](/LICENSE)

View File

@ -22,7 +22,7 @@ rootProject.allprojects {
apply plugin: 'com.android.library'
android {
compileSdkVersion 31
compileSdkVersion 33
defaultConfig {
minSdkVersion 17
@ -45,9 +45,9 @@ android {
}
}
dependencies {
implementation 'androidx.webkit:webkit:1.4.0'
implementation 'androidx.webkit:webkit:1.5.0'
implementation 'androidx.browser:browser:1.4.0'
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'androidx.appcompat:appcompat:1.5.1'
implementation 'com.squareup.okhttp3:okhttp:3.14.9'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
}

View File

@ -23,6 +23,8 @@ import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.UnknownHostException;
@ -33,15 +35,11 @@ import java.security.cert.Certificate;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.net.ssl.HostnameVerifier;
@ -333,4 +331,21 @@ public class Util {
}
return data;
}
@Nullable
public static <O> Object invokeMethodIfExists(final O o, final String methodName, Object... args) {
Method[] methods = o.getClass().getMethods();
for (Method method : methods) {
if (method.getName().equals(methodName)) {
try {
return method.invoke(o, args);
} catch (IllegalAccessException e) {
return null;
} catch (InvocationTargetException e) {
return null;
}
}
}
return null;
}
}

View File

@ -288,8 +288,11 @@ final public class InAppWebView extends InputAwareWebView implements InAppWebVie
settings.setAllowFileAccessFromFileURLs(customSettings.allowFileAccessFromFileURLs);
settings.setAllowUniversalAccessFromFileURLs(customSettings.allowUniversalAccessFromFileURLs);
setCacheEnabled(customSettings.cacheEnabled);
if (customSettings.appCachePath != null && !customSettings.appCachePath.isEmpty() && customSettings.cacheEnabled)
settings.setAppCachePath(customSettings.appCachePath);
if (customSettings.appCachePath != null && !customSettings.appCachePath.isEmpty() && customSettings.cacheEnabled) {
// removed from Android API 33+ (https://developer.android.com/sdk/api_diff/33/changes)
// settings.setAppCachePath(customSettings.appCachePath);
Util.invokeMethodIfExists(settings, "setAppCachePath", customSettings.appCachePath);
}
settings.setBlockNetworkImage(customSettings.blockNetworkImage);
settings.setBlockNetworkLoads(customSettings.blockNetworkLoads);
if (customSettings.cacheMode != null)
@ -512,7 +515,11 @@ final public class InAppWebView extends InputAwareWebView implements InAppWebVie
// Disable caching
settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
settings.setAppCacheEnabled(false);
// removed from Android API 33+ (https://developer.android.com/sdk/api_diff/33/changes)
// settings.setAppCacheEnabled(false);
Util.invokeMethodIfExists(settings, "setAppCacheEnabled", false);
clearHistory();
clearCache(true);
@ -522,7 +529,11 @@ final public class InAppWebView extends InputAwareWebView implements InAppWebVie
settings.setSaveFormData(false);
} else {
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
settings.setAppCacheEnabled(true);
// removed from Android API 33+ (https://developer.android.com/sdk/api_diff/33/changes)
// settings.setAppCacheEnabled(true);
Util.invokeMethodIfExists(settings, "setAppCacheEnabled", true);
settings.setSavePassword(true);
settings.setSaveFormData(true);
}
@ -533,13 +544,22 @@ final public class InAppWebView extends InputAwareWebView implements InAppWebVie
if (enabled) {
Context ctx = getContext();
if (ctx != null) {
settings.setAppCachePath(ctx.getCacheDir().getAbsolutePath());
// removed from Android API 33+ (https://developer.android.com/sdk/api_diff/33/changes)
// settings.setAppCachePath(ctx.getCacheDir().getAbsolutePath());
Util.invokeMethodIfExists(settings, "setAppCachePath", ctx.getCacheDir().getAbsolutePath());
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
settings.setAppCacheEnabled(true);
// removed from Android API 33+ (https://developer.android.com/sdk/api_diff/33/changes)
// settings.setAppCacheEnabled(true);
Util.invokeMethodIfExists(settings, "setAppCacheEnabled", true);
}
} else {
settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
settings.setAppCacheEnabled(false);
// removed from Android API 33+ (https://developer.android.com/sdk/api_diff/33/changes)
// settings.setAppCacheEnabled(false);
Util.invokeMethodIfExists(settings, "setAppCacheEnabled", false);
}
}
@ -788,8 +808,11 @@ final public class InAppWebView extends InputAwareWebView implements InAppWebVie
if (newSettingsMap.get("cacheEnabled") != null && customSettings.cacheEnabled != newCustomSettings.cacheEnabled)
setCacheEnabled(newCustomSettings.cacheEnabled);
if (newSettingsMap.get("appCachePath") != null && (customSettings.appCachePath == null || !customSettings.appCachePath.equals(newCustomSettings.appCachePath)))
settings.setAppCachePath(newCustomSettings.appCachePath);
if (newSettingsMap.get("appCachePath") != null && (customSettings.appCachePath == null || !customSettings.appCachePath.equals(newCustomSettings.appCachePath))) {
// removed from Android API 33+ (https://developer.android.com/sdk/api_diff/33/changes)
// settings.setAppCachePath(newCustomSettings.appCachePath);
Util.invokeMethodIfExists(settings, "setAppCachePath", newCustomSettings.appCachePath);
}
if (newSettingsMap.get("blockNetworkImage") != null && customSettings.blockNetworkImage != newCustomSettings.blockNetworkImage)
settings.setBlockNetworkImage(newCustomSettings.blockNetworkImage);

View File

@ -30,7 +30,7 @@ android {
targetCompatibility 1.8
}
compileSdkVersion 31
compileSdkVersion 33
lintOptions {
disable 'InvalidPackage'
@ -40,7 +40,7 @@ android {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.pichillilorenzo.flutter_inappwebviewexample"
minSdkVersion 17
targetSdkVersion 31
targetSdkVersion 33
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@ -64,6 +64,6 @@ dependencies {
testImplementation 'junit:junit:4.13'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation 'com.google.android.material:material:1.3.0'
implementation 'com.google.android.material:material:1.6.1'
implementation 'com.android.support:multidex:1.0.3'
}

View File

@ -15,4 +15,4 @@ final TEST_WEB_PLATFORM_URL_3 = Uri.parse(TEST_WEB_PLATFORM_BASE_URL.toString()
final TEST_NOT_A_WEBSITE_URL = Uri.parse('https://www.notawebsite..com/');
final TEST_CHROME_SAFE_BROWSING_MALWARE = Uri.parse('chrome://safe-browsing/match?type=malware');
final TEST_PERMISSION_SITE = Uri.parse('https://permission.site/');
final TEST_SERVICE_WORKER_URL = Uri.parse('https://mdn.github.io/sw-test/');
final TEST_SERVICE_WORKER_URL = Uri.parse('https://mdn.github.io/dom-examples/service-worker/simple-service-worker/');

View File

@ -24,7 +24,7 @@ dependencies:
cupertino_icons: ^1.0.4
flutter_downloader: ^1.7.3
path_provider: ^2.0.9
permission_handler: ^9.2.0
permission_handler: ^10.0.2
url_launcher: ^6.0.20
# connectivity: ^0.4.5+6
flutter_inappwebview: