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