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