1// Copyright 2014 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 5package org.chromium.android_webview; 6 7import android.content.Context; 8import android.content.res.Configuration; 9import android.graphics.Canvas; 10import android.graphics.Paint; 11import android.graphics.Rect; 12import android.view.KeyEvent; 13import android.view.MotionEvent; 14import android.view.View; 15import android.view.inputmethod.EditorInfo; 16import android.view.inputmethod.InputConnection; 17import android.widget.FrameLayout; 18 19/** 20 * A view that is used to render the web contents in fullscreen mode, ie. 21 * html controls and subtitles, over the {@link ContentVideoView}. 22 */ 23public class FullScreenView extends FrameLayout { 24 25 private AwViewMethods mAwViewMethods; 26 private InternalAccessAdapter mInternalAccessAdapter; 27 28 public FullScreenView(Context context, AwViewMethods awViewMethods) { 29 super(context); 30 setAwViewMethods(awViewMethods); 31 mInternalAccessAdapter = new InternalAccessAdapter(); 32 } 33 34 public InternalAccessAdapter getInternalAccessAdapter() { 35 return mInternalAccessAdapter; 36 } 37 38 public void setAwViewMethods(AwViewMethods awViewMethods) { 39 mAwViewMethods = awViewMethods; 40 } 41 42 @Override 43 public void onDraw(final Canvas canvas) { 44 mAwViewMethods.onDraw(canvas); 45 } 46 47 @Override 48 public void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) { 49 mAwViewMethods.onMeasure(widthMeasureSpec, heightMeasureSpec); 50 } 51 52 @Override 53 public boolean requestFocus(final int direction, final Rect previouslyFocusedRect) { 54 mAwViewMethods.requestFocus(); 55 return super.requestFocus(direction, previouslyFocusedRect); 56 } 57 58 @Override 59 public void setLayerType(int layerType, Paint paint) { 60 super.setLayerType(layerType, paint); 61 mAwViewMethods.setLayerType(layerType, paint); 62 } 63 64 @Override 65 public InputConnection onCreateInputConnection(final EditorInfo outAttrs) { 66 return mAwViewMethods.onCreateInputConnection(outAttrs); 67 } 68 69 @Override 70 public boolean onKeyUp(final int keyCode, final KeyEvent event) { 71 return mAwViewMethods.onKeyUp(keyCode, event); 72 } 73 74 @Override 75 public boolean dispatchKeyEvent(final KeyEvent event) { 76 return mAwViewMethods.dispatchKeyEvent(event); 77 } 78 79 @Override 80 public boolean onTouchEvent(final MotionEvent event) { 81 return mAwViewMethods.onTouchEvent(event); 82 } 83 84 @Override 85 public boolean onHoverEvent(final MotionEvent event) { 86 return mAwViewMethods.onHoverEvent(event); 87 } 88 89 @Override 90 public boolean onGenericMotionEvent(final MotionEvent event) { 91 return mAwViewMethods.onGenericMotionEvent(event); 92 } 93 94 @Override 95 public void onConfigurationChanged(final Configuration newConfig) { 96 mAwViewMethods.onConfigurationChanged(newConfig); 97 } 98 99 @Override 100 protected void onAttachedToWindow() { 101 super.onAttachedToWindow(); 102 mAwViewMethods.onAttachedToWindow(); 103 } 104 105 @Override 106 public void onDetachedFromWindow() { 107 super.onDetachedFromWindow(); 108 mAwViewMethods.onDetachedFromWindow(); 109 } 110 111 @Override 112 public void onWindowFocusChanged(final boolean hasWindowFocus) { 113 super.onWindowFocusChanged(hasWindowFocus); 114 mAwViewMethods.onWindowFocusChanged(hasWindowFocus); 115 } 116 117 @Override 118 public void onFocusChanged(final boolean focused, final int direction, 119 final Rect previouslyFocusedRect) { 120 super.onFocusChanged(focused, direction, previouslyFocusedRect); 121 mAwViewMethods.onFocusChanged( 122 focused, direction, previouslyFocusedRect); 123 } 124 125 @Override 126 public void onSizeChanged(final int w, final int h, final int ow, final int oh) { 127 super.onSizeChanged(w, h, ow, oh); 128 mAwViewMethods.onSizeChanged(w, h, ow, oh); 129 } 130 131 @Override 132 protected void onVisibilityChanged(View changedView, int visibility) { 133 super.onVisibilityChanged(changedView, visibility); 134 mAwViewMethods.onVisibilityChanged(changedView, visibility); 135 } 136 137 @Override 138 public void onWindowVisibilityChanged(final int visibility) { 139 super.onWindowVisibilityChanged(visibility); 140 mAwViewMethods.onWindowVisibilityChanged(visibility); 141 } 142 143 // AwContents.InternalAccessDelegate implementation -------------------------------------- 144 private class InternalAccessAdapter implements AwContents.InternalAccessDelegate { 145 146 @Override 147 public boolean drawChild(Canvas canvas, View child, long drawingTime) { 148 // Intentional no-op 149 return false; 150 } 151 152 @Override 153 public boolean super_onKeyUp(int keyCode, KeyEvent event) { 154 return FullScreenView.super.onKeyUp(keyCode, event); 155 } 156 157 @Override 158 public boolean super_dispatchKeyEventPreIme(KeyEvent event) { 159 return FullScreenView.super.dispatchKeyEventPreIme(event); 160 } 161 162 @Override 163 public boolean super_dispatchKeyEvent(KeyEvent event) { 164 return FullScreenView.super.dispatchKeyEvent(event); 165 } 166 167 @Override 168 public boolean super_onGenericMotionEvent(MotionEvent event) { 169 return FullScreenView.super.onGenericMotionEvent(event); 170 } 171 172 @Override 173 public void super_onConfigurationChanged(Configuration newConfig) { 174 // Intentional no-op 175 } 176 177 @Override 178 public int super_getScrollBarStyle() { 179 return FullScreenView.super.getScrollBarStyle(); 180 } 181 182 @Override 183 public boolean awakenScrollBars() { 184 return false; 185 } 186 187 @Override 188 public boolean super_awakenScrollBars(int startDelay, boolean invalidate) { 189 return false; 190 } 191 192 @Override 193 public void onScrollChanged(int lPix, int tPix, int oldlPix, int oldtPix) { 194 // Intentional no-op. 195 } 196 197 @Override 198 public void overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, 199 int scrollRangeX, int scrollRangeY, int maxOverScrollX, 200 int maxOverScrollY, boolean isTouchEvent) { 201 // Intentional no-op. 202 } 203 204 @Override 205 public void super_scrollTo(int scrollX, int scrollY) { 206 // Intentional no-op. 207 } 208 209 @Override 210 public void setMeasuredDimension(int measuredWidth, int measuredHeight) { 211 FullScreenView.this.setMeasuredDimension(measuredWidth, measuredHeight); 212 } 213 } 214} 215