Skip to content

Commit 9ffca8f

Browse files
oliviacaraimanOlivia Caraiman
andauthored
feat(android): Add androidLayerType as prop (react-native-webview#1588)
* Add androidLayerType as a prop * Deprecate "androidHardwareAccelerationDisabled" prop * Update reference Co-authored-by: Olivia Caraiman <olcaraim@microsoft.com>
1 parent 2a95296 commit 9ffca8f

File tree

4 files changed

+51
-1
lines changed

4 files changed

+51
-1
lines changed

android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,21 @@ public void setHardwareAccelerationDisabled(WebView view, boolean disabled) {
299299
}
300300
}
301301

302+
@ReactProp(name = "androidLayerType")
303+
public void setLayerType(WebView view, String layerTypeString) {
304+
int layerType = View.LAYER_TYPE_NONE;
305+
switch (layerTypeString) {
306+
case "hardware":
307+
layerType = View.LAYER_TYPE_HARDWARE;
308+
break;
309+
case "software":
310+
layerType = View.LAYER_TYPE_SOFTWARE;
311+
break;
312+
}
313+
view.setLayerType(layerType, null);
314+
}
315+
316+
302317
@ReactProp(name = "overScrollMode")
303318
public void setOverScrollMode(WebView view, String overScrollModeString) {
304319
Integer overScrollMode;

docs/Reference.md

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ This document lays out the current public properties and methods for the React N
3535
- [`javaScriptEnabled`](Reference.md#javascriptenabled)
3636
- [`javaScriptCanOpenWindowsAutomatically`](Reference.md#javascriptcanopenwindowsautomatically)
3737
- [`androidHardwareAccelerationDisabled`](Reference.md#androidHardwareAccelerationDisabled)
38+
- [`androidLayerType`](Reference.md#androidLayerType)
3839
- [`mixedContentMode`](Reference.md#mixedcontentmode)
3940
- [`thirdPartyCookiesEnabled`](Reference.md#thirdpartycookiesenabled)
4041
- [`userAgent`](Reference.md#useragent)
@@ -781,14 +782,32 @@ A Boolean value indicating whether JavaScript can open windows without user inte
781782

782783
### `androidHardwareAccelerationDisabled`[](#props-index)<!-- Link generated with jump2header -->
783784

784-
Boolean value to disable Hardware Acceleration in the `WebView`. Used on Android only as Hardware Acceleration is a feature only for Android. The default value is `false`.
785+
**Deprecated.** Use the `androidLayerType` prop instead.
785786

786787
| Type | Required | Platform |
787788
| ---- | -------- | -------- |
788789
| bool | No | Android |
789790

790791
---
791792

793+
### `androidLayerType`[](#props-index)<!-- Link generated with jump2header -->
794+
795+
Specifies the layer type.
796+
797+
Possible values for `androidLayerType` are:
798+
799+
- `none` (default) - The view does not have a layer.
800+
- `software` - The view has a software layer. A software layer is backed by a bitmap and causes the view to be rendered using Android's software rendering pipeline, even if hardware acceleration is enabled.
801+
- `hardware` - The view has a hardware layer. A hardware layer is backed by a hardware specific texture and causes the view to be rendered using Android's hardware rendering pipeline, but only if hardware acceleration is turned on for the view hierarchy.
802+
803+
Avoid setting both `androidLayerType` and `androidHardwareAccelerationDisabled` props at the same time, as this may cause undefined behaviour.
804+
805+
| Type | Required | Platform |
806+
| ------ | -------- | -------- |
807+
| string | No | Android |
808+
809+
---
810+
792811
### `mixedContentMode`[](#props-index)<!-- Link generated with jump2header -->
793812

794813
Specifies the mixed content mode. i.e WebView will allow a secure origin to load content from any other origin.

src/WebView.android.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ class WebView extends React.Component<AndroidWebViewProps, State> {
6161
saveFormDataDisabled: false,
6262
cacheEnabled: true,
6363
androidHardwareAccelerationDisabled: false,
64+
androidLayerType: 'none',
6465
originWhitelist: defaultOriginWhitelist,
6566
};
6667

src/WebViewTypes.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,8 @@ export type OverScrollModeType = 'always' | 'content' | 'never';
182182

183183
export type CacheMode = 'LOAD_DEFAULT' | 'LOAD_CACHE_ONLY' | 'LOAD_CACHE_ELSE_NETWORK' | 'LOAD_NO_CACHE';
184184

185+
export type AndroidLayerType = 'none' | 'software' | 'hardware';
186+
185187
export interface WebViewSourceUri {
186188
/**
187189
* The URI to load in the `WebView`. Can be a local or remote file.
@@ -284,6 +286,7 @@ export interface AndroidNativeWebViewProps extends CommonNativeWebViewProps {
284286
allowFileAccessFromFileURLs?: boolean;
285287
allowUniversalAccessFromFileURLs?: boolean;
286288
androidHardwareAccelerationDisabled?: boolean;
289+
androidLayerType?: AndroidLayerType;
287290
domStorageEnabled?: boolean;
288291
geolocationEnabled?: boolean;
289292
javaScriptEnabled?: boolean;
@@ -809,6 +812,18 @@ export interface AndroidWebViewProps extends WebViewSharedProps {
809812
*/
810813
androidHardwareAccelerationDisabled?: boolean;
811814

815+
/**
816+
* https://developer.android.com/reference/android/webkit/WebView#setLayerType(int,%20android.graphics.Paint)
817+
* Sets the layerType. Possible values are:
818+
*
819+
* - `'none'` (default)
820+
* - `'software'`
821+
* - `'hardware'`
822+
*
823+
* @platform android
824+
*/
825+
androidLayerType?: AndroidLayerType;
826+
812827
/**
813828
* Boolean value to enable third party cookies in the `WebView`. Used on
814829
* Android Lollipop and above only as third party cookies are enabled by

0 commit comments

Comments
 (0)