1 /* 2 * Copyright (C) 2007 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.webkit; 18 19 import android.annotation.IntDef; 20 import android.annotation.SystemApi; 21 import android.content.Context; 22 23 import java.lang.annotation.ElementType; 24 import java.lang.annotation.Retention; 25 import java.lang.annotation.RetentionPolicy; 26 import java.lang.annotation.Target; 27 28 /** 29 * Manages settings state for a WebView. When a WebView is first created, it 30 * obtains a set of default settings. These default settings will be returned 31 * from any getter call. A WebSettings object obtained from 32 * WebView.getSettings() is tied to the life of the WebView. If a WebView has 33 * been destroyed, any method call on WebSettings will throw an 34 * IllegalStateException. 35 */ 36 // This is an abstract base class: concrete WebViewProviders must 37 // create a class derived from this, and return an instance of it in the 38 // WebViewProvider.getWebSettingsProvider() method implementation. 39 public abstract class WebSettings { 40 /** 41 * Enum for controlling the layout of html. 42 * <ul> 43 * <li>NORMAL means no rendering changes. This is the recommended choice for maximum 44 * compatibility across different platforms and Android versions.</li> 45 * <li>SINGLE_COLUMN moves all content into one column that is the width of the 46 * view.</li> 47 * <li>NARROW_COLUMNS makes all columns no wider than the screen if possible. Only use 48 * this for API levels prior to {@link android.os.Build.VERSION_CODES#KITKAT}.</li> 49 * <li>TEXT_AUTOSIZING boosts font size of paragraphs based on heuristics to make 50 * the text readable when viewing a wide-viewport layout in the overview mode. 51 * It is recommended to enable zoom support {@link #setSupportZoom} when 52 * using this mode. Supported from API level 53 * {@link android.os.Build.VERSION_CODES#KITKAT}</li> 54 * </ul> 55 */ 56 // XXX: These must match LayoutAlgorithm in Settings.h in WebCore. 57 public enum LayoutAlgorithm { 58 NORMAL, 59 /** 60 * @deprecated This algorithm is now obsolete. 61 */ 62 @Deprecated 63 SINGLE_COLUMN, 64 /** 65 * @deprecated This algorithm is now obsolete. 66 */ 67 @Deprecated 68 NARROW_COLUMNS, 69 TEXT_AUTOSIZING 70 } 71 72 /** 73 * Enum for specifying the text size. 74 * <ul> 75 * <li>SMALLEST is 50%</li> 76 * <li>SMALLER is 75%</li> 77 * <li>NORMAL is 100%</li> 78 * <li>LARGER is 150%</li> 79 * <li>LARGEST is 200%</li> 80 * </ul> 81 * 82 * @deprecated Use {@link WebSettings#setTextZoom(int)} and {@link WebSettings#getTextZoom()} instead. 83 */ 84 @Deprecated 85 public enum TextSize { 86 SMALLEST(50), 87 SMALLER(75), 88 NORMAL(100), 89 LARGER(150), 90 LARGEST(200); TextSize(int size)91 TextSize(int size) { 92 value = size; 93 } 94 int value; 95 } 96 97 /** 98 * Enum for specifying the WebView's desired density. 99 * <ul> 100 * <li>FAR makes 100% looking like in 240dpi</li> 101 * <li>MEDIUM makes 100% looking like in 160dpi</li> 102 * <li>CLOSE makes 100% looking like in 120dpi</li> 103 * </ul> 104 */ 105 public enum ZoomDensity { 106 FAR(150), // 240dpi 107 MEDIUM(100), // 160dpi 108 CLOSE(75); // 120dpi ZoomDensity(int size)109 ZoomDensity(int size) { 110 value = size; 111 } 112 113 /** 114 * @hide Only for use by WebViewProvider implementations 115 */ getValue()116 public int getValue() { 117 return value; 118 } 119 120 int value; 121 } 122 123 /** @hide */ 124 @IntDef({LOAD_DEFAULT, LOAD_NORMAL, LOAD_CACHE_ELSE_NETWORK, LOAD_NO_CACHE, LOAD_CACHE_ONLY}) 125 @Retention(RetentionPolicy.SOURCE) 126 public @interface CacheMode {} 127 128 /** 129 * Default cache usage mode. If the navigation type doesn't impose any 130 * specific behavior, use cached resources when they are available 131 * and not expired, otherwise load resources from the network. 132 * Use with {@link #setCacheMode}. 133 */ 134 public static final int LOAD_DEFAULT = -1; 135 136 /** 137 * Normal cache usage mode. Use with {@link #setCacheMode}. 138 * 139 * @deprecated This value is obsolete, as from API level 140 * {@link android.os.Build.VERSION_CODES#HONEYCOMB} and onwards it has the 141 * same effect as {@link #LOAD_DEFAULT}. 142 */ 143 @Deprecated 144 public static final int LOAD_NORMAL = 0; 145 146 /** 147 * Use cached resources when they are available, even if they have expired. 148 * Otherwise load resources from the network. 149 * Use with {@link #setCacheMode}. 150 */ 151 public static final int LOAD_CACHE_ELSE_NETWORK = 1; 152 153 /** 154 * Don't use the cache, load from the network. 155 * Use with {@link #setCacheMode}. 156 */ 157 public static final int LOAD_NO_CACHE = 2; 158 159 /** 160 * Don't use the network, load from the cache. 161 * Use with {@link #setCacheMode}. 162 */ 163 public static final int LOAD_CACHE_ONLY = 3; 164 165 public enum RenderPriority { 166 NORMAL, 167 HIGH, 168 LOW 169 } 170 171 /** 172 * The plugin state effects how plugins are treated on a page. ON means 173 * that any object will be loaded even if a plugin does not exist to handle 174 * the content. ON_DEMAND means that if there is a plugin installed that 175 * can handle the content, a placeholder is shown until the user clicks on 176 * the placeholder. Once clicked, the plugin will be enabled on the page. 177 * OFF means that all plugins will be turned off and any fallback content 178 * will be used. 179 */ 180 public enum PluginState { 181 ON, 182 ON_DEMAND, 183 OFF 184 } 185 186 /** 187 * Used with {@link #setMixedContentMode} 188 * 189 * In this mode, the WebView will allow a secure origin to load content from any other origin, 190 * even if that origin is insecure. This is the least secure mode of operation for the WebView, 191 * and where possible apps should not set this mode. 192 */ 193 public static final int MIXED_CONTENT_ALWAYS_ALLOW = 0; 194 195 /** 196 * Used with {@link #setMixedContentMode} 197 * 198 * In this mode, the WebView will not allow a secure origin to load content from an insecure 199 * origin. This is the preferred and most secure mode of operation for the WebView and apps are 200 * strongly advised to use this mode. 201 */ 202 public static final int MIXED_CONTENT_NEVER_ALLOW = 1; 203 204 /** 205 * Used with {@link #setMixedContentMode} 206 * 207 * In this mode, the WebView will attempt to be compatible with the approach of a modern web 208 * browser with regard to mixed content. Some insecure content may be allowed to be loaded by 209 * a secure origin and other types of content will be blocked. The types of content are allowed 210 * or blocked may change release to release and are not explicitly defined. 211 * 212 * This mode is intended to be used by apps that are not in control of the content that they 213 * render but desire to operate in a reasonably secure environment. For highest security, apps 214 * are recommended to use {@link #MIXED_CONTENT_NEVER_ALLOW}. 215 */ 216 public static final int MIXED_CONTENT_COMPATIBILITY_MODE = 2; 217 218 /** 219 * Enables dumping the pages navigation cache to a text file. The default 220 * is false. 221 * 222 * @deprecated This method is now obsolete. 223 * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} 224 */ 225 @SystemApi 226 @Deprecated setNavDump(boolean enabled)227 public abstract void setNavDump(boolean enabled); 228 229 /** 230 * Gets whether dumping the navigation cache is enabled. 231 * 232 * @return whether dumping the navigation cache is enabled 233 * @see #setNavDump 234 * @deprecated This method is now obsolete. 235 * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} 236 */ 237 @SystemApi 238 @Deprecated getNavDump()239 public abstract boolean getNavDump(); 240 241 /** 242 * Sets whether the WebView should support zooming using its on-screen zoom 243 * controls and gestures. The particular zoom mechanisms that should be used 244 * can be set with {@link #setBuiltInZoomControls}. This setting does not 245 * affect zooming performed using the {@link WebView#zoomIn()} and 246 * {@link WebView#zoomOut()} methods. The default is true. 247 * 248 * @param support whether the WebView should support zoom 249 */ setSupportZoom(boolean support)250 public abstract void setSupportZoom(boolean support); 251 252 /** 253 * Gets whether the WebView supports zoom. 254 * 255 * @return true if the WebView supports zoom 256 * @see #setSupportZoom 257 */ supportZoom()258 public abstract boolean supportZoom(); 259 260 /** 261 * Sets whether the WebView requires a user gesture to play media. 262 * The default is true. 263 * 264 * @param require whether the WebView requires a user gesture to play media 265 */ setMediaPlaybackRequiresUserGesture(boolean require)266 public abstract void setMediaPlaybackRequiresUserGesture(boolean require); 267 268 /** 269 * Gets whether the WebView requires a user gesture to play media. 270 * 271 * @return true if the WebView requires a user gesture to play media 272 * @see #setMediaPlaybackRequiresUserGesture 273 */ getMediaPlaybackRequiresUserGesture()274 public abstract boolean getMediaPlaybackRequiresUserGesture(); 275 276 /** 277 * Sets whether the WebView should use its built-in zoom mechanisms. The 278 * built-in zoom mechanisms comprise on-screen zoom controls, which are 279 * displayed over the WebView's content, and the use of a pinch gesture to 280 * control zooming. Whether or not these on-screen controls are displayed 281 * can be set with {@link #setDisplayZoomControls}. The default is false. 282 * <p> 283 * The built-in mechanisms are the only currently supported zoom 284 * mechanisms, so it is recommended that this setting is always enabled. 285 * 286 * @param enabled whether the WebView should use its built-in zoom mechanisms 287 */ 288 // This method was intended to select between the built-in zoom mechanisms 289 // and the separate zoom controls. The latter were obtained using 290 // {@link WebView#getZoomControls}, which is now hidden. setBuiltInZoomControls(boolean enabled)291 public abstract void setBuiltInZoomControls(boolean enabled); 292 293 /** 294 * Gets whether the zoom mechanisms built into WebView are being used. 295 * 296 * @return true if the zoom mechanisms built into WebView are being used 297 * @see #setBuiltInZoomControls 298 */ getBuiltInZoomControls()299 public abstract boolean getBuiltInZoomControls(); 300 301 /** 302 * Sets whether the WebView should display on-screen zoom controls when 303 * using the built-in zoom mechanisms. See {@link #setBuiltInZoomControls}. 304 * The default is true. 305 * 306 * @param enabled whether the WebView should display on-screen zoom controls 307 */ setDisplayZoomControls(boolean enabled)308 public abstract void setDisplayZoomControls(boolean enabled); 309 310 /** 311 * Gets whether the WebView displays on-screen zoom controls when using 312 * the built-in zoom mechanisms. 313 * 314 * @return true if the WebView displays on-screen zoom controls when using 315 * the built-in zoom mechanisms 316 * @see #setDisplayZoomControls 317 */ getDisplayZoomControls()318 public abstract boolean getDisplayZoomControls(); 319 320 /** 321 * Enables or disables file access within WebView. File access is enabled by 322 * default. Note that this enables or disables file system access only. 323 * Assets and resources are still accessible using file:///android_asset and 324 * file:///android_res. 325 */ setAllowFileAccess(boolean allow)326 public abstract void setAllowFileAccess(boolean allow); 327 328 /** 329 * Gets whether this WebView supports file access. 330 * 331 * @see #setAllowFileAccess 332 */ getAllowFileAccess()333 public abstract boolean getAllowFileAccess(); 334 335 /** 336 * Enables or disables content URL access within WebView. Content URL 337 * access allows WebView to load content from a content provider installed 338 * in the system. The default is enabled. 339 */ setAllowContentAccess(boolean allow)340 public abstract void setAllowContentAccess(boolean allow); 341 342 /** 343 * Gets whether this WebView supports content URL access. 344 * 345 * @see #setAllowContentAccess 346 */ getAllowContentAccess()347 public abstract boolean getAllowContentAccess(); 348 349 /** 350 * Sets whether the WebView loads pages in overview mode, that is, 351 * zooms out the content to fit on screen by width. This setting is 352 * taken into account when the content width is greater than the width 353 * of the WebView control, for example, when {@link #getUseWideViewPort} 354 * is enabled. The default is false. 355 */ setLoadWithOverviewMode(boolean overview)356 public abstract void setLoadWithOverviewMode(boolean overview); 357 358 /** 359 * Gets whether this WebView loads pages in overview mode. 360 * 361 * @return whether this WebView loads pages in overview mode 362 * @see #setLoadWithOverviewMode 363 */ getLoadWithOverviewMode()364 public abstract boolean getLoadWithOverviewMode(); 365 366 /** 367 * Sets whether the WebView will enable smooth transition while panning or 368 * zooming or while the window hosting the WebView does not have focus. 369 * If it is true, WebView will choose a solution to maximize the performance. 370 * e.g. the WebView's content may not be updated during the transition. 371 * If it is false, WebView will keep its fidelity. The default value is false. 372 * 373 * @deprecated This method is now obsolete, and will become a no-op in future. 374 */ 375 @Deprecated setEnableSmoothTransition(boolean enable)376 public abstract void setEnableSmoothTransition(boolean enable); 377 378 /** 379 * Gets whether the WebView enables smooth transition while panning or 380 * zooming. 381 * 382 * @see #setEnableSmoothTransition 383 * 384 * @deprecated This method is now obsolete, and will become a no-op in future. 385 */ 386 @Deprecated enableSmoothTransition()387 public abstract boolean enableSmoothTransition(); 388 389 /** 390 * Sets whether the WebView uses its background for over scroll background. 391 * If true, it will use the WebView's background. If false, it will use an 392 * internal pattern. Default is true. 393 * 394 * @deprecated This method is now obsolete. 395 * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} 396 */ 397 @SystemApi 398 @Deprecated setUseWebViewBackgroundForOverscrollBackground(boolean view)399 public abstract void setUseWebViewBackgroundForOverscrollBackground(boolean view); 400 401 /** 402 * Gets whether this WebView uses WebView's background instead of 403 * internal pattern for over scroll background. 404 * 405 * @see #setUseWebViewBackgroundForOverscrollBackground 406 * @deprecated This method is now obsolete. 407 * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} 408 */ 409 @SystemApi 410 @Deprecated getUseWebViewBackgroundForOverscrollBackground()411 public abstract boolean getUseWebViewBackgroundForOverscrollBackground(); 412 413 /** 414 * Sets whether the WebView should save form data. In Android O, the 415 * platform has implemented a fully functional Autofill feature to store 416 * form data. Therefore, the Webview form data save feature is disabled. 417 * 418 * Note that the feature will continue to be supported on older versions of 419 * Android as before. 420 * 421 * This function does not have any effect. 422 */ 423 @Deprecated setSaveFormData(boolean save)424 public abstract void setSaveFormData(boolean save); 425 426 /** 427 * Gets whether the WebView saves form data. 428 * 429 * @return whether the WebView saves form data 430 * @see #setSaveFormData 431 */ 432 @Deprecated getSaveFormData()433 public abstract boolean getSaveFormData(); 434 435 /** 436 * Sets whether the WebView should save passwords. The default is true. 437 * @deprecated Saving passwords in WebView will not be supported in future versions. 438 */ 439 @Deprecated setSavePassword(boolean save)440 public abstract void setSavePassword(boolean save); 441 442 /** 443 * Gets whether the WebView saves passwords. 444 * 445 * @return whether the WebView saves passwords 446 * @see #setSavePassword 447 * @deprecated Saving passwords in WebView will not be supported in future versions. 448 */ 449 @Deprecated getSavePassword()450 public abstract boolean getSavePassword(); 451 452 /** 453 * Sets the text zoom of the page in percent. The default is 100. 454 * 455 * @param textZoom the text zoom in percent 456 */ setTextZoom(int textZoom)457 public abstract void setTextZoom(int textZoom); 458 459 /** 460 * Gets the text zoom of the page in percent. 461 * 462 * @return the text zoom of the page in percent 463 * @see #setTextZoom 464 */ getTextZoom()465 public abstract int getTextZoom(); 466 467 /** 468 * Sets policy for third party cookies. 469 * Developers should access this via {@link CookieManager#setShouldAcceptThirdPartyCookies}. 470 * @hide Internal API. 471 */ 472 @SystemApi setAcceptThirdPartyCookies(boolean accept)473 public abstract void setAcceptThirdPartyCookies(boolean accept); 474 475 /** 476 * Gets policy for third party cookies. 477 * Developers should access this via {@link CookieManager#getShouldAcceptThirdPartyCookies}. 478 * @hide Internal API 479 */ 480 @SystemApi getAcceptThirdPartyCookies()481 public abstract boolean getAcceptThirdPartyCookies(); 482 483 /** 484 * Sets the text size of the page. The default is {@link TextSize#NORMAL}. 485 * 486 * @param t the text size as a {@link TextSize} value 487 * @deprecated Use {@link #setTextZoom} instead. 488 */ 489 @Deprecated setTextSize(TextSize t)490 public synchronized void setTextSize(TextSize t) { 491 setTextZoom(t.value); 492 } 493 494 /** 495 * Gets the text size of the page. If the text size was previously specified 496 * in percent using {@link #setTextZoom}, this will return the closest 497 * matching {@link TextSize}. 498 * 499 * @return the text size as a {@link TextSize} value 500 * @see #setTextSize 501 * @deprecated Use {@link #getTextZoom} instead. 502 */ 503 @Deprecated getTextSize()504 public synchronized TextSize getTextSize() { 505 TextSize closestSize = null; 506 int smallestDelta = Integer.MAX_VALUE; 507 int textSize = getTextZoom(); 508 for (TextSize size : TextSize.values()) { 509 int delta = Math.abs(textSize - size.value); 510 if (delta == 0) { 511 return size; 512 } 513 if (delta < smallestDelta) { 514 smallestDelta = delta; 515 closestSize = size; 516 } 517 } 518 return closestSize != null ? closestSize : TextSize.NORMAL; 519 } 520 521 /** 522 * Sets the default zoom density of the page. This must be called from the UI 523 * thread. The default is {@link ZoomDensity#MEDIUM}. 524 * 525 * This setting is not recommended for use in new applications. If the WebView 526 * is utilized to display mobile-oriented pages, the desired effect can be achieved by 527 * adjusting 'width' and 'initial-scale' attributes of page's 'meta viewport' 528 * tag. For pages lacking the tag, {@link android.webkit.WebView#setInitialScale} 529 * and {@link #setUseWideViewPort} can be used. 530 * 531 * @param zoom the zoom density 532 * @deprecated This method is no longer supported, see the function documentation for 533 * recommended alternatives. 534 */ 535 @Deprecated setDefaultZoom(ZoomDensity zoom)536 public abstract void setDefaultZoom(ZoomDensity zoom); 537 538 /** 539 * Gets the default zoom density of the page. This should be called from 540 * the UI thread. 541 * 542 * This setting is not recommended for use in new applications. 543 * 544 * @return the zoom density 545 * @see #setDefaultZoom 546 * @deprecated Will only return the default value. 547 */ 548 @Deprecated getDefaultZoom()549 public abstract ZoomDensity getDefaultZoom(); 550 551 /** 552 * Enables using light touches to make a selection and activate mouseovers. 553 * @deprecated From {@link android.os.Build.VERSION_CODES#JELLY_BEAN} this 554 * setting is obsolete and has no effect. 555 */ 556 @Deprecated setLightTouchEnabled(boolean enabled)557 public abstract void setLightTouchEnabled(boolean enabled); 558 559 /** 560 * Gets whether light touches are enabled. 561 * @see #setLightTouchEnabled 562 * @deprecated This setting is obsolete. 563 */ 564 @Deprecated getLightTouchEnabled()565 public abstract boolean getLightTouchEnabled(); 566 567 /** 568 * Controlled a rendering optimization that is no longer present. Setting 569 * it now has no effect. 570 * 571 * @deprecated This setting now has no effect. 572 * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} 573 */ 574 @Deprecated setUseDoubleTree(boolean use)575 public void setUseDoubleTree(boolean use) { 576 // Specified to do nothing, so no need for derived classes to override. 577 } 578 579 /** 580 * Controlled a rendering optimization that is no longer present. Setting 581 * it now has no effect. 582 * 583 * @deprecated This setting now has no effect. 584 * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} 585 */ 586 @Deprecated getUseDoubleTree()587 public boolean getUseDoubleTree() { 588 // Returns false unconditionally, so no need for derived classes to override. 589 return false; 590 } 591 592 /** 593 * Sets the user-agent string using an integer code. 594 * <ul> 595 * <li>0 means the WebView should use an Android user-agent string</li> 596 * <li>1 means the WebView should use a desktop user-agent string</li> 597 * </ul> 598 * Other values are ignored. The default is an Android user-agent string, 599 * i.e. code value 0. 600 * 601 * @param ua the integer code for the user-agent string 602 * @deprecated Please use {@link #setUserAgentString} instead. 603 * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} 604 */ 605 @SystemApi 606 @Deprecated setUserAgent(int ua)607 public abstract void setUserAgent(int ua); 608 609 /** 610 * Gets the user-agent as an integer code. 611 * <ul> 612 * <li>-1 means the WebView is using a custom user-agent string set with 613 * {@link #setUserAgentString}</li> 614 * <li>0 means the WebView should use an Android user-agent string</li> 615 * <li>1 means the WebView should use a desktop user-agent string</li> 616 * </ul> 617 * 618 * @return the integer code for the user-agent string 619 * @see #setUserAgent 620 * @deprecated Please use {@link #getUserAgentString} instead. 621 * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} 622 */ 623 @SystemApi 624 @Deprecated getUserAgent()625 public abstract int getUserAgent(); 626 627 /** 628 * Sets whether the WebView should enable support for the "viewport" 629 * HTML meta tag or should use a wide viewport. 630 * When the value of the setting is false, the layout width is always set to the 631 * width of the WebView control in device-independent (CSS) pixels. 632 * When the value is true and the page contains the viewport meta tag, the value 633 * of the width specified in the tag is used. If the page does not contain the tag or 634 * does not provide a width, then a wide viewport will be used. 635 * 636 * @param use whether to enable support for the viewport meta tag 637 */ setUseWideViewPort(boolean use)638 public abstract void setUseWideViewPort(boolean use); 639 640 /** 641 * Gets whether the WebView supports the "viewport" 642 * HTML meta tag or will use a wide viewport. 643 * 644 * @return true if the WebView supports the viewport meta tag 645 * @see #setUseWideViewPort 646 */ getUseWideViewPort()647 public abstract boolean getUseWideViewPort(); 648 649 /** 650 * Sets whether the WebView whether supports multiple windows. If set to 651 * true, {@link WebChromeClient#onCreateWindow} must be implemented by the 652 * host application. The default is false. 653 * 654 * @param support whether to suport multiple windows 655 */ setSupportMultipleWindows(boolean support)656 public abstract void setSupportMultipleWindows(boolean support); 657 658 /** 659 * Gets whether the WebView supports multiple windows. 660 * 661 * @return true if the WebView supports multiple windows 662 * @see #setSupportMultipleWindows 663 */ supportMultipleWindows()664 public abstract boolean supportMultipleWindows(); 665 666 /** 667 * Sets the underlying layout algorithm. This will cause a relayout of the 668 * WebView. The default is {@link LayoutAlgorithm#NARROW_COLUMNS}. 669 * 670 * @param l the layout algorithm to use, as a {@link LayoutAlgorithm} value 671 */ setLayoutAlgorithm(LayoutAlgorithm l)672 public abstract void setLayoutAlgorithm(LayoutAlgorithm l); 673 674 /** 675 * Gets the current layout algorithm. 676 * 677 * @return the layout algorithm in use, as a {@link LayoutAlgorithm} value 678 * @see #setLayoutAlgorithm 679 */ getLayoutAlgorithm()680 public abstract LayoutAlgorithm getLayoutAlgorithm(); 681 682 /** 683 * Sets the standard font family name. The default is "sans-serif". 684 * 685 * @param font a font family name 686 */ setStandardFontFamily(String font)687 public abstract void setStandardFontFamily(String font); 688 689 /** 690 * Gets the standard font family name. 691 * 692 * @return the standard font family name as a string 693 * @see #setStandardFontFamily 694 */ getStandardFontFamily()695 public abstract String getStandardFontFamily(); 696 697 /** 698 * Sets the fixed font family name. The default is "monospace". 699 * 700 * @param font a font family name 701 */ setFixedFontFamily(String font)702 public abstract void setFixedFontFamily(String font); 703 704 /** 705 * Gets the fixed font family name. 706 * 707 * @return the fixed font family name as a string 708 * @see #setFixedFontFamily 709 */ getFixedFontFamily()710 public abstract String getFixedFontFamily(); 711 712 /** 713 * Sets the sans-serif font family name. The default is "sans-serif". 714 * 715 * @param font a font family name 716 */ setSansSerifFontFamily(String font)717 public abstract void setSansSerifFontFamily(String font); 718 719 /** 720 * Gets the sans-serif font family name. 721 * 722 * @return the sans-serif font family name as a string 723 * @see #setSansSerifFontFamily 724 */ getSansSerifFontFamily()725 public abstract String getSansSerifFontFamily(); 726 727 /** 728 * Sets the serif font family name. The default is "sans-serif". 729 * 730 * @param font a font family name 731 */ setSerifFontFamily(String font)732 public abstract void setSerifFontFamily(String font); 733 734 /** 735 * Gets the serif font family name. The default is "serif". 736 * 737 * @return the serif font family name as a string 738 * @see #setSerifFontFamily 739 */ getSerifFontFamily()740 public abstract String getSerifFontFamily(); 741 742 /** 743 * Sets the cursive font family name. The default is "cursive". 744 * 745 * @param font a font family name 746 */ setCursiveFontFamily(String font)747 public abstract void setCursiveFontFamily(String font); 748 749 /** 750 * Gets the cursive font family name. 751 * 752 * @return the cursive font family name as a string 753 * @see #setCursiveFontFamily 754 */ getCursiveFontFamily()755 public abstract String getCursiveFontFamily(); 756 757 /** 758 * Sets the fantasy font family name. The default is "fantasy". 759 * 760 * @param font a font family name 761 */ setFantasyFontFamily(String font)762 public abstract void setFantasyFontFamily(String font); 763 764 /** 765 * Gets the fantasy font family name. 766 * 767 * @return the fantasy font family name as a string 768 * @see #setFantasyFontFamily 769 */ getFantasyFontFamily()770 public abstract String getFantasyFontFamily(); 771 772 /** 773 * Sets the minimum font size. The default is 8. 774 * 775 * @param size a non-negative integer between 1 and 72. Any number outside 776 * the specified range will be pinned. 777 */ setMinimumFontSize(int size)778 public abstract void setMinimumFontSize(int size); 779 780 /** 781 * Gets the minimum font size. 782 * 783 * @return a non-negative integer between 1 and 72 784 * @see #setMinimumFontSize 785 */ getMinimumFontSize()786 public abstract int getMinimumFontSize(); 787 788 /** 789 * Sets the minimum logical font size. The default is 8. 790 * 791 * @param size a non-negative integer between 1 and 72. Any number outside 792 * the specified range will be pinned. 793 */ setMinimumLogicalFontSize(int size)794 public abstract void setMinimumLogicalFontSize(int size); 795 796 /** 797 * Gets the minimum logical font size. 798 * 799 * @return a non-negative integer between 1 and 72 800 * @see #setMinimumLogicalFontSize 801 */ getMinimumLogicalFontSize()802 public abstract int getMinimumLogicalFontSize(); 803 804 /** 805 * Sets the default font size. The default is 16. 806 * 807 * @param size a non-negative integer between 1 and 72. Any number outside 808 * the specified range will be pinned. 809 */ setDefaultFontSize(int size)810 public abstract void setDefaultFontSize(int size); 811 812 /** 813 * Gets the default font size. 814 * 815 * @return a non-negative integer between 1 and 72 816 * @see #setDefaultFontSize 817 */ getDefaultFontSize()818 public abstract int getDefaultFontSize(); 819 820 /** 821 * Sets the default fixed font size. The default is 16. 822 * 823 * @param size a non-negative integer between 1 and 72. Any number outside 824 * the specified range will be pinned. 825 */ setDefaultFixedFontSize(int size)826 public abstract void setDefaultFixedFontSize(int size); 827 828 /** 829 * Gets the default fixed font size. 830 * 831 * @return a non-negative integer between 1 and 72 832 * @see #setDefaultFixedFontSize 833 */ getDefaultFixedFontSize()834 public abstract int getDefaultFixedFontSize(); 835 836 /** 837 * Sets whether the WebView should load image resources. Note that this method 838 * controls loading of all images, including those embedded using the data 839 * URI scheme. Use {@link #setBlockNetworkImage} to control loading only 840 * of images specified using network URI schemes. Note that if the value of this 841 * setting is changed from false to true, all images resources referenced 842 * by content currently displayed by the WebView are loaded automatically. 843 * The default is true. 844 * 845 * @param flag whether the WebView should load image resources 846 */ setLoadsImagesAutomatically(boolean flag)847 public abstract void setLoadsImagesAutomatically(boolean flag); 848 849 /** 850 * Gets whether the WebView loads image resources. This includes 851 * images embedded using the data URI scheme. 852 * 853 * @return true if the WebView loads image resources 854 * @see #setLoadsImagesAutomatically 855 */ getLoadsImagesAutomatically()856 public abstract boolean getLoadsImagesAutomatically(); 857 858 /** 859 * Sets whether the WebView should not load image resources from the 860 * network (resources accessed via http and https URI schemes). Note 861 * that this method has no effect unless 862 * {@link #getLoadsImagesAutomatically} returns true. Also note that 863 * disabling all network loads using {@link #setBlockNetworkLoads} 864 * will also prevent network images from loading, even if this flag is set 865 * to false. When the value of this setting is changed from true to false, 866 * network images resources referenced by content currently displayed by 867 * the WebView are fetched automatically. The default is false. 868 * 869 * @param flag whether the WebView should not load image resources from the 870 * network 871 * @see #setBlockNetworkLoads 872 */ setBlockNetworkImage(boolean flag)873 public abstract void setBlockNetworkImage(boolean flag); 874 875 /** 876 * Gets whether the WebView does not load image resources from the network. 877 * 878 * @return true if the WebView does not load image resources from the network 879 * @see #setBlockNetworkImage 880 */ getBlockNetworkImage()881 public abstract boolean getBlockNetworkImage(); 882 883 /** 884 * Sets whether the WebView should not load resources from the network. 885 * Use {@link #setBlockNetworkImage} to only avoid loading 886 * image resources. Note that if the value of this setting is 887 * changed from true to false, network resources referenced by content 888 * currently displayed by the WebView are not fetched until 889 * {@link android.webkit.WebView#reload} is called. 890 * If the application does not have the 891 * {@link android.Manifest.permission#INTERNET} permission, attempts to set 892 * a value of false will cause a {@link java.lang.SecurityException} 893 * to be thrown. The default value is false if the application has the 894 * {@link android.Manifest.permission#INTERNET} permission, otherwise it is 895 * true. 896 * 897 * @param flag true means block network loads by the WebView 898 * @see android.webkit.WebView#reload 899 */ setBlockNetworkLoads(boolean flag)900 public abstract void setBlockNetworkLoads(boolean flag); 901 902 /** 903 * Gets whether the WebView does not load any resources from the network. 904 * 905 * @return true if the WebView does not load any resources from the network 906 * @see #setBlockNetworkLoads 907 */ getBlockNetworkLoads()908 public abstract boolean getBlockNetworkLoads(); 909 910 /** 911 * Tells the WebView to enable JavaScript execution. 912 * <b>The default is false.</b> 913 * 914 * @param flag true if the WebView should execute JavaScript 915 */ setJavaScriptEnabled(boolean flag)916 public abstract void setJavaScriptEnabled(boolean flag); 917 918 /** 919 * Sets whether JavaScript running in the context of a file scheme URL 920 * should be allowed to access content from any origin. This includes 921 * access to content from other file scheme URLs. See 922 * {@link #setAllowFileAccessFromFileURLs}. To enable the most restrictive, 923 * and therefore secure policy, this setting should be disabled. 924 * Note that this setting affects only JavaScript access to file scheme 925 * resources. Other access to such resources, for example, from image HTML 926 * elements, is unaffected. To prevent possible violation of same domain policy 927 * on {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH} and earlier 928 * devices, you should explicitly set this value to {@code false}. 929 * <p> 930 * The default value is true for API level 931 * {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH_MR1} and below, 932 * and false for API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN} 933 * and above. 934 * 935 * @param flag whether JavaScript running in the context of a file scheme 936 * URL should be allowed to access content from any origin 937 */ setAllowUniversalAccessFromFileURLs(boolean flag)938 public abstract void setAllowUniversalAccessFromFileURLs(boolean flag); 939 940 /** 941 * Sets whether JavaScript running in the context of a file scheme URL 942 * should be allowed to access content from other file scheme URLs. To 943 * enable the most restrictive, and therefore secure policy, this setting 944 * should be disabled. Note that the value of this setting is ignored if 945 * the value of {@link #getAllowUniversalAccessFromFileURLs} is true. 946 * Note too, that this setting affects only JavaScript access to file scheme 947 * resources. Other access to such resources, for example, from image HTML 948 * elements, is unaffected. To prevent possible violation of same domain policy 949 * on {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH} and earlier 950 * devices, you should explicitly set this value to {@code false}. 951 * <p> 952 * The default value is true for API level 953 * {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH_MR1} and below, 954 * and false for API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN} 955 * and above. 956 * 957 * @param flag whether JavaScript running in the context of a file scheme 958 * URL should be allowed to access content from other file 959 * scheme URLs 960 */ setAllowFileAccessFromFileURLs(boolean flag)961 public abstract void setAllowFileAccessFromFileURLs(boolean flag); 962 963 /** 964 * Sets whether the WebView should enable plugins. The default is false. 965 * 966 * @param flag true if plugins should be enabled 967 * @deprecated This method has been deprecated in favor of 968 * {@link #setPluginState} 969 * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR2} 970 */ 971 @SystemApi 972 @Deprecated setPluginsEnabled(boolean flag)973 public abstract void setPluginsEnabled(boolean flag); 974 975 /** 976 * Tells the WebView to enable, disable, or have plugins on demand. On 977 * demand mode means that if a plugin exists that can handle the embedded 978 * content, a placeholder icon will be shown instead of the plugin. When 979 * the placeholder is clicked, the plugin will be enabled. The default is 980 * {@link PluginState#OFF}. 981 * 982 * @param state a PluginState value 983 * @deprecated Plugins will not be supported in future, and should not be used. 984 */ 985 @Deprecated setPluginState(PluginState state)986 public abstract void setPluginState(PluginState state); 987 988 /** 989 * Sets a custom path to plugins used by the WebView. This method is 990 * obsolete since each plugin is now loaded from its own package. 991 * 992 * @param pluginsPath a String path to the directory containing plugins 993 * @deprecated This method is no longer used as plugins are loaded from 994 * their own APK via the system's package manager. 995 * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR2} 996 */ 997 @Deprecated setPluginsPath(String pluginsPath)998 public void setPluginsPath(String pluginsPath) { 999 // Specified to do nothing, so no need for derived classes to override. 1000 } 1001 1002 /** 1003 * Sets the path to where database storage API databases should be saved. 1004 * In order for the database storage API to function correctly, this method 1005 * must be called with a path to which the application can write. This 1006 * method should only be called once: repeated calls are ignored. 1007 * 1008 * @param databasePath a path to the directory where databases should be 1009 * saved. 1010 * @deprecated Database paths are managed by the implementation and calling this method 1011 * will have no effect. 1012 */ 1013 @Deprecated setDatabasePath(String databasePath)1014 public abstract void setDatabasePath(String databasePath); 1015 1016 /** 1017 * Sets the path where the Geolocation databases should be saved. In order 1018 * for Geolocation permissions and cached positions to be persisted, this 1019 * method must be called with a path to which the application can write. 1020 * 1021 * @param databasePath a path to the directory where databases should be 1022 * saved. 1023 * @deprecated Geolocation database are managed by the implementation and calling this method 1024 * will have no effect. 1025 */ 1026 @Deprecated setGeolocationDatabasePath(String databasePath)1027 public abstract void setGeolocationDatabasePath(String databasePath); 1028 1029 /** 1030 * Sets whether the Application Caches API should be enabled. The default 1031 * is false. Note that in order for the Application Caches API to be 1032 * enabled, a valid database path must also be supplied to 1033 * {@link #setAppCachePath}. 1034 * 1035 * @param flag true if the WebView should enable Application Caches 1036 */ setAppCacheEnabled(boolean flag)1037 public abstract void setAppCacheEnabled(boolean flag); 1038 1039 /** 1040 * Sets the path to the Application Caches files. In order for the 1041 * Application Caches API to be enabled, this method must be called with a 1042 * path to which the application can write. This method should only be 1043 * called once: repeated calls are ignored. 1044 * 1045 * @param appCachePath a String path to the directory containing 1046 * Application Caches files. 1047 * @see #setAppCacheEnabled 1048 */ setAppCachePath(String appCachePath)1049 public abstract void setAppCachePath(String appCachePath); 1050 1051 /** 1052 * Sets the maximum size for the Application Cache content. The passed size 1053 * will be rounded to the nearest value that the database can support, so 1054 * this should be viewed as a guide, not a hard limit. Setting the 1055 * size to a value less than current database size does not cause the 1056 * database to be trimmed. The default size is {@link Long#MAX_VALUE}. 1057 * It is recommended to leave the maximum size set to the default value. 1058 * 1059 * @param appCacheMaxSize the maximum size in bytes 1060 * @deprecated In future quota will be managed automatically. 1061 */ 1062 @Deprecated setAppCacheMaxSize(long appCacheMaxSize)1063 public abstract void setAppCacheMaxSize(long appCacheMaxSize); 1064 1065 /** 1066 * Sets whether the database storage API is enabled. The default value is 1067 * false. See also {@link #setDatabasePath} for how to correctly set up the 1068 * database storage API. 1069 * 1070 * This setting is global in effect, across all WebView instances in a process. 1071 * Note you should only modify this setting prior to making <b>any</b> WebView 1072 * page load within a given process, as the WebView implementation may ignore 1073 * changes to this setting after that point. 1074 * 1075 * @param flag true if the WebView should use the database storage API 1076 */ setDatabaseEnabled(boolean flag)1077 public abstract void setDatabaseEnabled(boolean flag); 1078 1079 /** 1080 * Sets whether the DOM storage API is enabled. The default value is false. 1081 * 1082 * @param flag true if the WebView should use the DOM storage API 1083 */ setDomStorageEnabled(boolean flag)1084 public abstract void setDomStorageEnabled(boolean flag); 1085 1086 /** 1087 * Gets whether the DOM Storage APIs are enabled. 1088 * 1089 * @return true if the DOM Storage APIs are enabled 1090 * @see #setDomStorageEnabled 1091 */ getDomStorageEnabled()1092 public abstract boolean getDomStorageEnabled(); 1093 1094 /** 1095 * Gets the path to where database storage API databases are saved. 1096 * 1097 * @return the String path to the database storage API databases 1098 * @see #setDatabasePath 1099 * @deprecated Database paths are managed by the implementation this method is obsolete. 1100 */ 1101 @Deprecated getDatabasePath()1102 public abstract String getDatabasePath(); 1103 1104 /** 1105 * Gets whether the database storage API is enabled. 1106 * 1107 * @return true if the database storage API is enabled 1108 * @see #setDatabaseEnabled 1109 */ getDatabaseEnabled()1110 public abstract boolean getDatabaseEnabled(); 1111 1112 /** 1113 * Sets whether Geolocation is enabled. The default is true. 1114 * <p> 1115 * Please note that in order for the Geolocation API to be usable 1116 * by a page in the WebView, the following requirements must be met: 1117 * <ul> 1118 * <li>an application must have permission to access the device location, 1119 * see {@link android.Manifest.permission#ACCESS_COARSE_LOCATION}, 1120 * {@link android.Manifest.permission#ACCESS_FINE_LOCATION}; 1121 * <li>an application must provide an implementation of the 1122 * {@link WebChromeClient#onGeolocationPermissionsShowPrompt} callback 1123 * to receive notifications that a page is requesting access to location 1124 * via the JavaScript Geolocation API. 1125 * </ul> 1126 * <p> 1127 * 1128 * @param flag whether Geolocation should be enabled 1129 */ setGeolocationEnabled(boolean flag)1130 public abstract void setGeolocationEnabled(boolean flag); 1131 1132 /** 1133 * Gets whether JavaScript is enabled. 1134 * 1135 * @return true if JavaScript is enabled 1136 * @see #setJavaScriptEnabled 1137 */ getJavaScriptEnabled()1138 public abstract boolean getJavaScriptEnabled(); 1139 1140 /** 1141 * Gets whether JavaScript running in the context of a file scheme URL can 1142 * access content from any origin. This includes access to content from 1143 * other file scheme URLs. 1144 * 1145 * @return whether JavaScript running in the context of a file scheme URL 1146 * can access content from any origin 1147 * @see #setAllowUniversalAccessFromFileURLs 1148 */ getAllowUniversalAccessFromFileURLs()1149 public abstract boolean getAllowUniversalAccessFromFileURLs(); 1150 1151 /** 1152 * Gets whether JavaScript running in the context of a file scheme URL can 1153 * access content from other file scheme URLs. 1154 * 1155 * @return whether JavaScript running in the context of a file scheme URL 1156 * can access content from other file scheme URLs 1157 * @see #setAllowFileAccessFromFileURLs 1158 */ getAllowFileAccessFromFileURLs()1159 public abstract boolean getAllowFileAccessFromFileURLs(); 1160 1161 /** 1162 * Gets whether plugins are enabled. 1163 * 1164 * @return true if plugins are enabled 1165 * @see #setPluginsEnabled 1166 * @deprecated This method has been replaced by {@link #getPluginState} 1167 * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR2} 1168 */ 1169 @SystemApi 1170 @Deprecated getPluginsEnabled()1171 public abstract boolean getPluginsEnabled(); 1172 1173 /** 1174 * Gets the current state regarding whether plugins are enabled. 1175 * 1176 * @return the plugin state as a {@link PluginState} value 1177 * @see #setPluginState 1178 * @deprecated Plugins will not be supported in future, and should not be used. 1179 */ 1180 @Deprecated getPluginState()1181 public abstract PluginState getPluginState(); 1182 1183 /** 1184 * Gets the directory that contains the plugin libraries. This method is 1185 * obsolete since each plugin is now loaded from its own package. 1186 * 1187 * @return an empty string 1188 * @deprecated This method is no longer used as plugins are loaded from 1189 * their own APK via the system's package manager. 1190 * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR2} 1191 */ 1192 @Deprecated getPluginsPath()1193 public String getPluginsPath() { 1194 // Unconditionally returns empty string, so no need for derived classes to override. 1195 return ""; 1196 } 1197 1198 /** 1199 * Tells JavaScript to open windows automatically. This applies to the 1200 * JavaScript function window.open(). The default is false. 1201 * 1202 * @param flag true if JavaScript can open windows automatically 1203 */ setJavaScriptCanOpenWindowsAutomatically(boolean flag)1204 public abstract void setJavaScriptCanOpenWindowsAutomatically(boolean flag); 1205 1206 /** 1207 * Gets whether JavaScript can open windows automatically. 1208 * 1209 * @return true if JavaScript can open windows automatically during 1210 * window.open() 1211 * @see #setJavaScriptCanOpenWindowsAutomatically 1212 */ getJavaScriptCanOpenWindowsAutomatically()1213 public abstract boolean getJavaScriptCanOpenWindowsAutomatically(); 1214 1215 /** 1216 * Sets the default text encoding name to use when decoding html pages. 1217 * The default is "UTF-8". 1218 * 1219 * @param encoding the text encoding name 1220 */ setDefaultTextEncodingName(String encoding)1221 public abstract void setDefaultTextEncodingName(String encoding); 1222 1223 /** 1224 * Gets the default text encoding name. 1225 * 1226 * @return the default text encoding name as a string 1227 * @see #setDefaultTextEncodingName 1228 */ getDefaultTextEncodingName()1229 public abstract String getDefaultTextEncodingName(); 1230 1231 /** 1232 * Sets the WebView's user-agent string. If the string is null or empty, 1233 * the system default value will be used. 1234 * 1235 * Note that starting from {@link android.os.Build.VERSION_CODES#KITKAT} Android 1236 * version, changing the user-agent while loading a web page causes WebView 1237 * to initiate loading once again. 1238 * 1239 * @param ua new user-agent string 1240 */ setUserAgentString(String ua)1241 public abstract void setUserAgentString(String ua); 1242 1243 /** 1244 * Gets the WebView's user-agent string. 1245 * 1246 * @return the WebView's user-agent string 1247 * @see #setUserAgentString 1248 */ getUserAgentString()1249 public abstract String getUserAgentString(); 1250 1251 /** 1252 * Returns the default User-Agent used by a WebView. 1253 * An instance of WebView could use a different User-Agent if a call 1254 * is made to {@link WebSettings#setUserAgentString(String)}. 1255 * 1256 * @param context a Context object used to access application assets 1257 */ getDefaultUserAgent(Context context)1258 public static String getDefaultUserAgent(Context context) { 1259 return WebViewFactory.getProvider().getStatics().getDefaultUserAgent(context); 1260 } 1261 1262 /** 1263 * Tells the WebView whether it needs to set a node to have focus when 1264 * {@link WebView#requestFocus(int, android.graphics.Rect)} is called. The 1265 * default value is true. 1266 * 1267 * @param flag whether the WebView needs to set a node 1268 */ setNeedInitialFocus(boolean flag)1269 public abstract void setNeedInitialFocus(boolean flag); 1270 1271 /** 1272 * Sets the priority of the Render thread. Unlike the other settings, this 1273 * one only needs to be called once per process. The default value is 1274 * {@link RenderPriority#NORMAL}. 1275 * 1276 * @param priority the priority 1277 * @deprecated It is not recommended to adjust thread priorities, and this will 1278 * not be supported in future versions. 1279 */ 1280 @Deprecated setRenderPriority(RenderPriority priority)1281 public abstract void setRenderPriority(RenderPriority priority); 1282 1283 /** 1284 * Overrides the way the cache is used. The way the cache is used is based 1285 * on the navigation type. For a normal page load, the cache is checked 1286 * and content is re-validated as needed. When navigating back, content is 1287 * not revalidated, instead the content is just retrieved from the cache. 1288 * This method allows the client to override this behavior by specifying 1289 * one of {@link #LOAD_DEFAULT}, 1290 * {@link #LOAD_CACHE_ELSE_NETWORK}, {@link #LOAD_NO_CACHE} or 1291 * {@link #LOAD_CACHE_ONLY}. The default value is {@link #LOAD_DEFAULT}. 1292 * 1293 * @param mode the mode to use 1294 */ setCacheMode(@acheMode int mode)1295 public abstract void setCacheMode(@CacheMode int mode); 1296 1297 /** 1298 * Gets the current setting for overriding the cache mode. 1299 * 1300 * @return the current setting for overriding the cache mode 1301 * @see #setCacheMode 1302 */ 1303 @CacheMode getCacheMode()1304 public abstract int getCacheMode(); 1305 1306 /** 1307 * Configures the WebView's behavior when a secure origin attempts to load a resource from an 1308 * insecure origin. 1309 * 1310 * By default, apps that target {@link android.os.Build.VERSION_CODES#KITKAT} or below default 1311 * to {@link #MIXED_CONTENT_ALWAYS_ALLOW}. Apps targeting 1312 * {@link android.os.Build.VERSION_CODES#LOLLIPOP} default to {@link #MIXED_CONTENT_NEVER_ALLOW}. 1313 * 1314 * The preferred and most secure mode of operation for the WebView is 1315 * {@link #MIXED_CONTENT_NEVER_ALLOW} and use of {@link #MIXED_CONTENT_ALWAYS_ALLOW} is 1316 * strongly discouraged. 1317 * 1318 * @param mode The mixed content mode to use. One of {@link #MIXED_CONTENT_NEVER_ALLOW}, 1319 * {@link #MIXED_CONTENT_ALWAYS_ALLOW} or {@link #MIXED_CONTENT_COMPATIBILITY_MODE}. 1320 */ setMixedContentMode(int mode)1321 public abstract void setMixedContentMode(int mode); 1322 1323 /** 1324 * Gets the current behavior of the WebView with regard to loading insecure content from a 1325 * secure origin. 1326 * @return The current setting, one of {@link #MIXED_CONTENT_NEVER_ALLOW}, 1327 * {@link #MIXED_CONTENT_ALWAYS_ALLOW} or {@link #MIXED_CONTENT_COMPATIBILITY_MODE}. 1328 */ getMixedContentMode()1329 public abstract int getMixedContentMode(); 1330 1331 /** 1332 * Sets whether to use a video overlay for embedded encrypted video. 1333 * In API levels prior to {@link android.os.Build.VERSION_CODES#LOLLIPOP}, encrypted video can 1334 * only be rendered directly on a secure video surface, so it had been a hard problem to play 1335 * encrypted video in HTML. When this flag is on, WebView can play encrypted video (MSE/EME) 1336 * by using a video overlay (aka hole-punching) for videos embedded using HTML <video> 1337 * tag.<br> 1338 * Caution: This setting is intended for use only in a narrow set of circumstances and apps 1339 * should only enable it if they require playback of encrypted video content. It will impose 1340 * the following limitations on the WebView: 1341 * <ul> 1342 * <li> Only one video overlay can be played at a time. 1343 * <li> Changes made to position or dimensions of a video element may be propagated to the 1344 * corresponding video overlay with a noticeable delay. 1345 * <li> The video overlay is not visible to web APIs and as such may not interact with 1346 * script or styling. For example, CSS styles applied to the <video> tag may be ignored. 1347 * </ul> 1348 * This is not an exhaustive set of constraints and it may vary with new versions of the 1349 * WebView. 1350 * @hide 1351 */ 1352 @SystemApi setVideoOverlayForEmbeddedEncryptedVideoEnabled(boolean flag)1353 public abstract void setVideoOverlayForEmbeddedEncryptedVideoEnabled(boolean flag); 1354 1355 /** 1356 * Gets whether a video overlay will be used for embedded encrypted video. 1357 * 1358 * @return true if WebView uses a video overlay for embedded encrypted video. 1359 * @see #setVideoOverlayForEmbeddedEncryptedVideoEnabled 1360 * @hide 1361 */ 1362 @SystemApi getVideoOverlayForEmbeddedEncryptedVideoEnabled()1363 public abstract boolean getVideoOverlayForEmbeddedEncryptedVideoEnabled(); 1364 1365 /** 1366 * Sets whether this WebView should raster tiles when it is 1367 * offscreen but attached to a window. Turning this on can avoid 1368 * rendering artifacts when animating an offscreen WebView on-screen. 1369 * Offscreen WebViews in this mode use more memory. The default value is 1370 * false.<br> 1371 * Please follow these guidelines to limit memory usage: 1372 * <ul> 1373 * <li> WebView size should be not be larger than the device screen size. 1374 * <li> Limit use of this mode to a small number of WebViews. Use it for 1375 * visible WebViews and WebViews about to be animated to visible. 1376 * </ul> 1377 */ setOffscreenPreRaster(boolean enabled)1378 public abstract void setOffscreenPreRaster(boolean enabled); 1379 1380 /** 1381 * Gets whether this WebView should raster tiles when it is 1382 * offscreen but attached to a window. 1383 * @return true if this WebView will raster tiles when it is 1384 * offscreen but attached to a window. 1385 */ getOffscreenPreRaster()1386 public abstract boolean getOffscreenPreRaster(); 1387 1388 1389 /** 1390 * Sets whether Safe Browsing is enabled. Safe browsing allows WebView to 1391 * protect against malware and phishing attacks by verifying the links. 1392 * 1393 * <p> 1394 * Safe browsing is disabled by default. The recommended way to enable Safe browsing is using a 1395 * manifest tag to change the default value to enabled for all WebViews (read <a 1396 * href="{@docRoot}reference/android/webkit/WebView.html">general Safe Browsing info</a>). 1397 * </p> 1398 * 1399 * <p> 1400 * This API overrides the manifest tag value for this WebView. 1401 * </p> 1402 * 1403 * @param enabled Whether Safe browsing is enabled. 1404 */ setSafeBrowsingEnabled(boolean enabled)1405 public abstract void setSafeBrowsingEnabled(boolean enabled); 1406 1407 /** 1408 * Gets whether Safe browsing is enabled. 1409 * See {@link #setSafeBrowsingEnabled}. 1410 * 1411 * @return true if Safe browsing is enabled and false otherwise. 1412 */ getSafeBrowsingEnabled()1413 public abstract boolean getSafeBrowsingEnabled(); 1414 1415 1416 /** 1417 * @hide 1418 */ 1419 @IntDef(flag = true, 1420 value = { 1421 MENU_ITEM_NONE, 1422 MENU_ITEM_SHARE, 1423 MENU_ITEM_WEB_SEARCH, 1424 MENU_ITEM_PROCESS_TEXT 1425 }) 1426 @Retention(RetentionPolicy.SOURCE) 1427 @Target({ElementType.PARAMETER, ElementType.METHOD}) 1428 private @interface MenuItemFlags {} 1429 1430 /** 1431 * Disables the action mode menu items according to {@code menuItems} flag. 1432 * @param menuItems an integer field flag for the menu items to be disabled. 1433 */ setDisabledActionModeMenuItems(@enuItemFlags int menuItems)1434 public abstract void setDisabledActionModeMenuItems(@MenuItemFlags int menuItems); 1435 1436 /** 1437 * Gets the action mode menu items that are disabled, expressed in an integer field flag. 1438 * The default value is {@link #MENU_ITEM_NONE} 1439 * 1440 * @return all the disabled menu item flags combined with bitwise OR. 1441 */ getDisabledActionModeMenuItems()1442 public abstract @MenuItemFlags int getDisabledActionModeMenuItems(); 1443 1444 /** 1445 * Used with {@link #setDisabledActionModeMenuItems}. 1446 * 1447 * No menu items should be disabled. 1448 */ 1449 public static final int MENU_ITEM_NONE = 0; 1450 1451 /** 1452 * Used with {@link #setDisabledActionModeMenuItems}. 1453 * 1454 * Disable menu item "Share". 1455 */ 1456 public static final int MENU_ITEM_SHARE = 1 << 0; 1457 1458 /** 1459 * Used with {@link #setDisabledActionModeMenuItems}. 1460 * 1461 * Disable menu item "Web Search". 1462 */ 1463 public static final int MENU_ITEM_WEB_SEARCH = 1 << 1; 1464 1465 /** 1466 * Used with {@link #setDisabledActionModeMenuItems}. 1467 * 1468 * Disable all the action mode menu items for text processing. 1469 * By default WebView searches for activities that are able to handle 1470 * {@link android.content.Intent#ACTION_PROCESS_TEXT} and show them in the 1471 * action mode menu. If this flag is set via {@link 1472 * #setDisabledActionModeMenuItems}, these menu items will be disabled. 1473 */ 1474 public static final int MENU_ITEM_PROCESS_TEXT = 1 << 2; 1475 } 1476