Home | History | Annotate | Download | only in webkit
      1 /*
      2  * Copyright (C) 2012 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.res.Configuration;
     20 import android.graphics.Bitmap;
     21 import android.graphics.Canvas;
     22 import android.graphics.Paint;
     23 import android.graphics.Picture;
     24 import android.graphics.Rect;
     25 import android.graphics.drawable.Drawable;
     26 import android.net.http.SslCertificate;
     27 import android.os.Bundle;
     28 import android.os.Message;
     29 import android.print.PrintDocumentAdapter;
     30 import android.view.KeyEvent;
     31 import android.view.MotionEvent;
     32 import android.view.View;
     33 import android.view.ViewGroup.LayoutParams;
     34 import android.view.accessibility.AccessibilityEvent;
     35 import android.view.accessibility.AccessibilityNodeInfo;
     36 import android.view.accessibility.AccessibilityNodeProvider;
     37 import android.view.inputmethod.EditorInfo;
     38 import android.view.inputmethod.InputConnection;
     39 import android.webkit.WebView.HitTestResult;
     40 import android.webkit.WebView.PictureListener;
     41 
     42 import java.io.BufferedWriter;
     43 import java.io.File;
     44 import java.util.Map;
     45 
     46 /**
     47  * WebView backend provider interface: this interface is the abstract backend to a WebView
     48  * instance; each WebView object is bound to exactly one WebViewProvider object which implements
     49  * the runtime behavior of that WebView.
     50  *
     51  * All methods must behave as per their namesake in {@link WebView}, unless otherwise noted.
     52  *
     53  * @hide Not part of the public API; only required by system implementors.
     54  */
     55 public interface WebViewProvider {
     56     //-------------------------------------------------------------------------
     57     // Main interface for backend provider of the WebView class.
     58     //-------------------------------------------------------------------------
     59     /**
     60      * Initialize this WebViewProvider instance. Called after the WebView has fully constructed.
     61      * @param javaScriptInterfaces is a Map of interface names, as keys, and
     62      * object implementing those interfaces, as values.
     63      * @param privateBrowsing If true the web view will be initialized in private / incognito mode.
     64      */
     65     public void init(Map<String, Object> javaScriptInterfaces,
     66             boolean privateBrowsing);
     67 
     68     public void setHorizontalScrollbarOverlay(boolean overlay);
     69 
     70     public void setVerticalScrollbarOverlay(boolean overlay);
     71 
     72     public boolean overlayHorizontalScrollbar();
     73 
     74     public boolean overlayVerticalScrollbar();
     75 
     76     public int getVisibleTitleHeight();
     77 
     78     public SslCertificate getCertificate();
     79 
     80     public void setCertificate(SslCertificate certificate);
     81 
     82     public void savePassword(String host, String username, String password);
     83 
     84     public void setHttpAuthUsernamePassword(String host, String realm,
     85             String username, String password);
     86 
     87     public String[] getHttpAuthUsernamePassword(String host, String realm);
     88 
     89     /**
     90      * See {@link WebView#destroy()}.
     91      * As well as releasing the internal state and resources held by the implementation,
     92      * the provider should null all references it holds on the WebView proxy class, and ensure
     93      * no further method calls are made to it.
     94      */
     95     public void destroy();
     96 
     97     public void setNetworkAvailable(boolean networkUp);
     98 
     99     public WebBackForwardList saveState(Bundle outState);
    100 
    101     public boolean savePicture(Bundle b, final File dest);
    102 
    103     public boolean restorePicture(Bundle b, File src);
    104 
    105     public WebBackForwardList restoreState(Bundle inState);
    106 
    107     public void loadUrl(String url, Map<String, String> additionalHttpHeaders);
    108 
    109     public void loadUrl(String url);
    110 
    111     public void postUrl(String url, byte[] postData);
    112 
    113     public void loadData(String data, String mimeType, String encoding);
    114 
    115     public void loadDataWithBaseURL(String baseUrl, String data,
    116             String mimeType, String encoding, String historyUrl);
    117 
    118     public void evaluateJavaScript(String script, ValueCallback<String> resultCallback);
    119 
    120     public void saveWebArchive(String filename);
    121 
    122     public void saveWebArchive(String basename, boolean autoname, ValueCallback<String> callback);
    123 
    124     public void stopLoading();
    125 
    126     public void reload();
    127 
    128     public boolean canGoBack();
    129 
    130     public void goBack();
    131 
    132     public boolean canGoForward();
    133 
    134     public void goForward();
    135 
    136     public boolean canGoBackOrForward(int steps);
    137 
    138     public void goBackOrForward(int steps);
    139 
    140     public boolean isPrivateBrowsingEnabled();
    141 
    142     public boolean pageUp(boolean top);
    143 
    144     public boolean pageDown(boolean bottom);
    145 
    146     public void clearView();
    147 
    148     public Picture capturePicture();
    149 
    150     public PrintDocumentAdapter createPrintDocumentAdapter();
    151 
    152     public float getScale();
    153 
    154     public void setInitialScale(int scaleInPercent);
    155 
    156     public void invokeZoomPicker();
    157 
    158     public HitTestResult getHitTestResult();
    159 
    160     public void requestFocusNodeHref(Message hrefMsg);
    161 
    162     public void requestImageRef(Message msg);
    163 
    164     public String getUrl();
    165 
    166     public String getOriginalUrl();
    167 
    168     public String getTitle();
    169 
    170     public Bitmap getFavicon();
    171 
    172     public String getTouchIconUrl();
    173 
    174     public int getProgress();
    175 
    176     public int getContentHeight();
    177 
    178     public int getContentWidth();
    179 
    180     public void pauseTimers();
    181 
    182     public void resumeTimers();
    183 
    184     public void onPause();
    185 
    186     public void onResume();
    187 
    188     public boolean isPaused();
    189 
    190     public void freeMemory();
    191 
    192     public void clearCache(boolean includeDiskFiles);
    193 
    194     public void clearFormData();
    195 
    196     public void clearHistory();
    197 
    198     public void clearSslPreferences();
    199 
    200     public WebBackForwardList copyBackForwardList();
    201 
    202     public void setFindListener(WebView.FindListener listener);
    203 
    204     public void findNext(boolean forward);
    205 
    206     public int findAll(String find);
    207 
    208     public void findAllAsync(String find);
    209 
    210     public boolean showFindDialog(String text, boolean showIme);
    211 
    212     public void clearMatches();
    213 
    214     public void documentHasImages(Message response);
    215 
    216     public void setWebViewClient(WebViewClient client);
    217 
    218     public void setDownloadListener(DownloadListener listener);
    219 
    220     public void setWebChromeClient(WebChromeClient client);
    221 
    222     public void setPictureListener(PictureListener listener);
    223 
    224     public void addJavascriptInterface(Object obj, String interfaceName);
    225 
    226     public void removeJavascriptInterface(String interfaceName);
    227 
    228     public WebSettings getSettings();
    229 
    230     public void setMapTrackballToArrowKeys(boolean setMap);
    231 
    232     public void flingScroll(int vx, int vy);
    233 
    234     public View getZoomControls();
    235 
    236     public boolean canZoomIn();
    237 
    238     public boolean canZoomOut();
    239 
    240     public boolean zoomIn();
    241 
    242     public boolean zoomOut();
    243 
    244     public void dumpViewHierarchyWithProperties(BufferedWriter out, int level);
    245 
    246     public View findHierarchyView(String className, int hashCode);
    247 
    248     //-------------------------------------------------------------------------
    249     // Provider internal methods
    250     //-------------------------------------------------------------------------
    251 
    252     /**
    253      * @return the ViewDelegate implementation. This provides the functionality to back all of
    254      * the name-sake functions from the View and ViewGroup base classes of WebView.
    255      */
    256     /* package */ ViewDelegate getViewDelegate();
    257 
    258     /**
    259      * @return a ScrollDelegate implementation. Normally this would be same object as is
    260      * returned by getViewDelegate().
    261      */
    262     /* package */ ScrollDelegate getScrollDelegate();
    263 
    264     /**
    265      * Only used by FindActionModeCallback to inform providers that the find dialog has
    266      * been dismissed.
    267      */
    268     public void notifyFindDialogDismissed();
    269 
    270     //-------------------------------------------------------------------------
    271     // View / ViewGroup delegation methods
    272     //-------------------------------------------------------------------------
    273 
    274     /**
    275      * Provides mechanism for the name-sake methods declared in View and ViewGroup to be delegated
    276      * into the WebViewProvider instance.
    277      * NOTE For many of these methods, the WebView will provide a super.Foo() call before or after
    278      * making the call into the provider instance. This is done for convenience in the common case
    279      * of maintaining backward compatibility. For remaining super class calls (e.g. where the
    280      * provider may need to only conditionally make the call based on some internal state) see the
    281      * {@link WebView.PrivateAccess} callback class.
    282      */
    283     // TODO: See if the pattern of the super-class calls can be rationalized at all, and document
    284     // the remainder on the methods below.
    285     interface ViewDelegate {
    286         public boolean shouldDelayChildPressedState();
    287 
    288         public AccessibilityNodeProvider getAccessibilityNodeProvider();
    289 
    290         public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info);
    291 
    292         public void onInitializeAccessibilityEvent(AccessibilityEvent event);
    293 
    294         public boolean performAccessibilityAction(int action, Bundle arguments);
    295 
    296         public void setOverScrollMode(int mode);
    297 
    298         public void setScrollBarStyle(int style);
    299 
    300         public void onDrawVerticalScrollBar(Canvas canvas, Drawable scrollBar, int l, int t,
    301                 int r, int b);
    302 
    303         public void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY);
    304 
    305         public void onWindowVisibilityChanged(int visibility);
    306 
    307         public void onDraw(Canvas canvas);
    308 
    309         public void setLayoutParams(LayoutParams layoutParams);
    310 
    311         public boolean performLongClick();
    312 
    313         public void onConfigurationChanged(Configuration newConfig);
    314 
    315         public InputConnection onCreateInputConnection(EditorInfo outAttrs);
    316 
    317         public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event);
    318 
    319         public boolean onKeyDown(int keyCode, KeyEvent event);
    320 
    321         public boolean onKeyUp(int keyCode, KeyEvent event);
    322 
    323         public void onAttachedToWindow();
    324 
    325         public void onDetachedFromWindow();
    326 
    327         public void onVisibilityChanged(View changedView, int visibility);
    328 
    329         public void onWindowFocusChanged(boolean hasWindowFocus);
    330 
    331         public void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect);
    332 
    333         public boolean setFrame(int left, int top, int right, int bottom);
    334 
    335         public void onSizeChanged(int w, int h, int ow, int oh);
    336 
    337         public void onScrollChanged(int l, int t, int oldl, int oldt);
    338 
    339         public boolean dispatchKeyEvent(KeyEvent event);
    340 
    341         public boolean onTouchEvent(MotionEvent ev);
    342 
    343         public boolean onHoverEvent(MotionEvent event);
    344 
    345         public boolean onGenericMotionEvent(MotionEvent event);
    346 
    347         public boolean onTrackballEvent(MotionEvent ev);
    348 
    349         public boolean requestFocus(int direction, Rect previouslyFocusedRect);
    350 
    351         public void onMeasure(int widthMeasureSpec, int heightMeasureSpec);
    352 
    353         public boolean requestChildRectangleOnScreen(View child, Rect rect, boolean immediate);
    354 
    355         public void setBackgroundColor(int color);
    356 
    357         public void setLayerType(int layerType, Paint paint);
    358 
    359         public void preDispatchDraw(Canvas canvas);
    360     }
    361 
    362     interface ScrollDelegate {
    363         // These methods are declared protected in the ViewGroup base class. This interface
    364         // exists to promote them to public so they may be called by the WebView proxy class.
    365         // TODO: Combine into ViewDelegate?
    366         /**
    367          * See {@link android.webkit.WebView#computeHorizontalScrollRange}
    368          */
    369         public int computeHorizontalScrollRange();
    370 
    371         /**
    372          * See {@link android.webkit.WebView#computeHorizontalScrollOffset}
    373          */
    374         public int computeHorizontalScrollOffset();
    375 
    376         /**
    377          * See {@link android.webkit.WebView#computeVerticalScrollRange}
    378          */
    379         public int computeVerticalScrollRange();
    380 
    381         /**
    382          * See {@link android.webkit.WebView#computeVerticalScrollOffset}
    383          */
    384         public int computeVerticalScrollOffset();
    385 
    386         /**
    387          * See {@link android.webkit.WebView#computeVerticalScrollExtent}
    388          */
    389         public int computeVerticalScrollExtent();
    390 
    391         /**
    392          * See {@link android.webkit.WebView#computeScroll}
    393          */
    394         public void computeScroll();
    395     }
    396 }
    397