BREAKING CHANGE:
The Android Gradle plugin is only required when opening the project stand-alone, not when it is included as a dependency. By doing this, the project opens correctly in Android Studio, and it can also be consumed as a native module dependency from an application project without affecting the app project (avoiding unnecessary downloads/conflicts/etc).
Also moved getExtOrDefault to buildScript block to able to use everywhere in the file
This change shouldn't break any apps, but we are marking it as a breaking change in case there are some use cases we've missed.
[skip ci]
There is a bug in the WebView that causes a spurious call to onReceivedError
whenever you download a file.
This commit is a workaround for that bug. The idea here is to try and detect
these spurious errors and drop them before they cause problems.
This commit should be reverted once those chromium bugs are fixed.
* Ensure each mounted WebView binds their personal onMessage handler
* Changed unique ref generation to uuid
Uses `uuid` npm package.
Dashes are removed from the ref for sanity.
* Don't show camera options for a file upload that would result in nothing happening for the user.
On Android, if the application declares the camera permission, then even intents
that use the camera require permission to be granted. This is a problem for apps
that combine an in-app camera with a WebView that has file uploading and the user
has not given permission for the camera.
Note, this will not request permission for camera. This will simply prevent
showing the camera options that would be a no-op action for users. It does this
by checking if the camera permission is declared, and if so, checks that the
user has granted permission.
More information: https://blog.egorand.me/taking-photos-not-so-simply-how-i-got-bitten-by-action_image_capture/
* Add example and documentation about camera option availability in file uploads for Android.
* Filter out extra onLoadProgress calls; add url to onLoadProgress
* remove note about onLoadProgress not having the url property in docs
* Update Reference.md
Each time building our app, this library causes a message like this
one to be printed, sometimes twice:
> Configure project :react-native-webview
:react-native-webview:reactNativeAndroidRoot /home/greg/z/mobile/node_modules/react-native/android
Worse, the message comes through even if I silence all normal
progress messages and warnings, with `./gradlew --quiet`.
It turns out that the `logger.quiet` method which these log lines are
using has a confusing name. It doesn't mean "log quietly", but more
like the opposite: "log even when asked to keep things quiet". See
documentation on Gradle log levels:
https://docs.gradle.org/current/userguide/logging.html
So, remove the noise by switching to `logger.info`. This avoids
bothering the user by default, and keeps the information readily
available if desired by passing `--info` to Gradle.
* - add focus functionality for devices without touch screen
(faced problem while developing for android TV, cause there only remote controller for device)
* Reimplement as a ref method.
* - remove redundant requestFocus
* fix(Android): WebRTC permission request (#231)
* fix(Android): Avoid unintentionally granting requests for new permissions (#231)
* ContextCompat import migrated to androidx new artifact
* RNCWebViewManager.java original format restored
Hello, in order to use react-native-webview > 6.0.2 please make your android/gradle.properties contains:
```
android.useAndroidX=true
android.enableJetifier=true
```
This enables AndroidX libraries which are the new standard.
fixes#580fixes#581fixes#582
* Add `onScroll` callback for iOS & Android
This code was mostly extracted from https://github.com/react-native-community/react-native-webview/pull/202
I tried and tried to make it work with `Animated.event`'s `useNativeDriver`, but I was unsuccessful 😢 that'll have to be done later once I understand better how Animated's native stuff is hooked up.
* fix crash for missing onScroll
* Extract WebChromeClient from an anonymous class
* Support fullscreen videos on Android
Forces landscape mode while playing.
* Use sticky immersive mode for fullscreen videos
No longer forces landscape mode as that is a problem for portrait videos - allow
the user to rotate as necessary.
Only supports KitKat or greater, and falls back to leaving the status and navigation
bars visible for lower than KitKat. This is the easiest way to prevent issues with
resizing the video during playback.
Also implement a lifecyle event listener which means if a user backgrounds the app
or locks the screen with the video fullscreen, the UI visibility is re-applied.
* Add allowsFullscreenVideo prop to control whether videos can be fullscreen on Android
Luckily, we're able to change the WebChromeClient on demand in response to prop changes
without seeming to do any harm. If you switch to disallow fullscreen, it will attempt
to close the currently fullscreened video (if there is one) so users aren't stuck.
I did notice a bug that if you go from fullscreen allowed, to fullscreen disallowed,
the fullscreen button will remain on the video. Tapping the button will have no effect.
When setting a custom font size in the Android system, an undesirable scale of the site interface in WebView occurs.
I researched that when setting the standard textZoom (100) parameter size, this undesirable effect disappears.
This can be very useful if you need to avoid the scale of content in WebView when changing the size of system fonts, or change textZoom property directly.
Example:
`
<WebView
textZoom={100}
/>
`
The app was crashing with `"Could not find @ReactModule annotation in class RNCWebViewModule"` exception. Searching for this message in RN's code I found [this commit](0cd3994f1a), introduced in React Native 0.58, which requires native modules to be annotated with @ReactModule annotation. 🤔
After adding the annotation to the module, tapping on a file input field no longer crashes the app (in fact it shows the file browser). 🎉
I haven't had caught it previously, testing only against React Native 0.57, sorry! 😞
For reference see similar fix in `react-native-gesture-handler` — https://github.com/kmagiera/react-native-gesture-handler/pull/295.
Fixes https://github.com/react-native-community/react-native-webview/issues/458.