Home | History | Annotate | Download | only in android_webview
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 package org.chromium.android_webview;
      6 
      7 import android.content.Context;
      8 import android.view.KeyEvent;
      9 import android.view.View;
     10 import android.webkit.URLUtil;
     11 import android.webkit.WebChromeClient;
     12 import android.widget.FrameLayout;
     13 
     14 import org.chromium.content.browser.ContentVideoView;
     15 import org.chromium.content.browser.ContentVideoViewClient;
     16 import org.chromium.content.browser.ContentViewClient;
     17 
     18 /**
     19  * ContentViewClient implementation for WebView
     20  */
     21 public class AwContentViewClient extends ContentViewClient {
     22 
     23     private class AwContentVideoViewClient implements ContentVideoViewClient {
     24         @Override
     25         public boolean onShowCustomView(View view) {
     26             final FrameLayout viewGroup = new FrameLayout(mContext);
     27             viewGroup.addView(view);
     28             viewGroup.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
     29                 @Override
     30                 public void onViewDetachedFromWindow(View v) {
     31                     // Intentional no-op (see onDestroyContentVideoView).
     32                 }
     33 
     34                 @Override
     35                 public void onViewAttachedToWindow(View v) {
     36                     if (mAwContents.isFullScreen()) {
     37                         return;
     38                     }
     39                     View fullscreenView = mAwContents.enterFullScreen();
     40                     if (fullscreenView != null) {
     41                         fullscreenView.setOnKeyListener(new View.OnKeyListener() {
     42                             @Override
     43                             public boolean onKey(View v, int keyCode, KeyEvent event) {
     44                                 if (event.getKeyCode() == KeyEvent.KEYCODE_BACK
     45                                         && event.getAction() == KeyEvent.ACTION_UP
     46                                         && mAwContents.isFullScreen()) {
     47                                     exitFullscreen();
     48                                     return true;
     49                                 }
     50                                 return false;
     51                             }
     52                         });
     53                         fullscreenView.setFocusable(true);
     54                         fullscreenView.setFocusableInTouchMode(true);
     55                         fullscreenView.requestFocus();
     56                         viewGroup.addView(fullscreenView);
     57                     }
     58                 }
     59             });
     60             WebChromeClient.CustomViewCallback cb = new WebChromeClient.CustomViewCallback() {
     61                 @Override
     62                 public void onCustomViewHidden() {
     63                     exitFullscreen();
     64                 }
     65             };
     66             mAwContentsClient.onShowCustomView(viewGroup, cb);
     67             return true;
     68         }
     69 
     70         private void exitFullscreen() {
     71             ContentVideoView contentVideoView = ContentVideoView.getContentVideoView();
     72             if (contentVideoView != null)
     73                 contentVideoView.exitFullscreen(false);
     74         }
     75 
     76         @Override
     77         public void onDestroyContentVideoView() {
     78             mAwContents.exitFullScreen();
     79             mAwContentsClient.onHideCustomView();
     80         }
     81 
     82         @Override
     83         public View getVideoLoadingProgressView() {
     84             return mAwContentsClient.getVideoLoadingProgressView();
     85         }
     86     }
     87 
     88     private AwContentsClient mAwContentsClient;
     89     private AwSettings mAwSettings;
     90     private AwContents mAwContents;
     91     private Context mContext;
     92 
     93     public AwContentViewClient(
     94             AwContentsClient awContentsClient, AwSettings awSettings, AwContents awContents,
     95             Context context) {
     96         mAwContentsClient = awContentsClient;
     97         mAwSettings = awSettings;
     98         mAwContents = awContents;
     99         mContext = context;
    100     }
    101 
    102     @Override
    103     public void onBackgroundColorChanged(int color) {
    104         mAwContentsClient.onBackgroundColorChanged(color);
    105     }
    106 
    107     @Override
    108     public void onStartContentIntent(Context context, String contentUrl) {
    109         //  Callback when detecting a click on a content link.
    110         mAwContentsClient.shouldOverrideUrlLoading(contentUrl);
    111     }
    112 
    113     @Override
    114     public void onUpdateTitle(String title) {
    115         mAwContentsClient.onReceivedTitle(title);
    116     }
    117 
    118     @Override
    119     public boolean shouldOverrideKeyEvent(KeyEvent event) {
    120         return mAwContentsClient.shouldOverrideKeyEvent(event);
    121     }
    122 
    123     @Override
    124     public final ContentVideoViewClient getContentVideoViewClient() {
    125         return new AwContentVideoViewClient();
    126     }
    127 
    128     @Override
    129     public boolean shouldBlockMediaRequest(String url) {
    130         return mAwSettings != null ?
    131                 mAwSettings.getBlockNetworkLoads() && URLUtil.isNetworkUrl(url) : true;
    132     }
    133 }
    134