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