1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file.
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdochpackage org.chromium.android_webview;
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdochimport android.content.Context;
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdochimport android.content.res.Configuration;
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdochimport android.graphics.Canvas;
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdochimport android.graphics.Paint;
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdochimport android.graphics.Rect;
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdochimport android.view.KeyEvent;
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdochimport android.view.MotionEvent;
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdochimport android.view.View;
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdochimport android.view.inputmethod.EditorInfo;
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdochimport android.view.inputmethod.InputConnection;
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import android.widget.FrameLayout;
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/**
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * A view that is used to render the web contents in fullscreen mode, ie.
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * html controls and subtitles, over the {@link ContentVideoView}.
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)public class FullScreenView extends FrameLayout {
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    private AwViewMethods mAwViewMethods;
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    private InternalAccessAdapter mInternalAccessAdapter;
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    public FullScreenView(Context context, AwViewMethods awViewMethods) {
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        super(context);
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        setAwViewMethods(awViewMethods);
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        mInternalAccessAdapter = new InternalAccessAdapter();
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    public InternalAccessAdapter getInternalAccessAdapter() {
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        return mInternalAccessAdapter;
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    public void setAwViewMethods(AwViewMethods awViewMethods) {
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        mAwViewMethods = awViewMethods;
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    @Override
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    public void onDraw(final Canvas canvas) {
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        mAwViewMethods.onDraw(canvas);
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    @Override
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    public void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        mAwViewMethods.onMeasure(widthMeasureSpec, heightMeasureSpec);
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    @Override
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    public boolean requestFocus(final int direction, final Rect previouslyFocusedRect) {
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        mAwViewMethods.requestFocus();
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        return super.requestFocus(direction, previouslyFocusedRect);
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    @Override
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    public void setLayerType(int layerType, Paint paint) {
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        super.setLayerType(layerType, paint);
61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        mAwViewMethods.setLayerType(layerType, paint);
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    @Override
65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    public InputConnection onCreateInputConnection(final EditorInfo outAttrs) {
66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        return mAwViewMethods.onCreateInputConnection(outAttrs);
67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    @Override
70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    public boolean onKeyUp(final int keyCode, final KeyEvent event) {
71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        return mAwViewMethods.onKeyUp(keyCode, event);
72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    @Override
75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    public boolean dispatchKeyEvent(final KeyEvent event) {
76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        return mAwViewMethods.dispatchKeyEvent(event);
77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    @Override
80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    public boolean onTouchEvent(final MotionEvent event) {
81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        return mAwViewMethods.onTouchEvent(event);
82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    @Override
85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    public boolean onHoverEvent(final MotionEvent event) {
86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        return mAwViewMethods.onHoverEvent(event);
87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    @Override
90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    public boolean onGenericMotionEvent(final MotionEvent event) {
91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        return mAwViewMethods.onGenericMotionEvent(event);
92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    @Override
95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    public void onConfigurationChanged(final Configuration newConfig) {
96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        mAwViewMethods.onConfigurationChanged(newConfig);
97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    @Override
100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    protected void onAttachedToWindow() {
101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        super.onAttachedToWindow();
102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        mAwViewMethods.onAttachedToWindow();
103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    @Override
106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    public void onDetachedFromWindow() {
107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        super.onDetachedFromWindow();
108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        mAwViewMethods.onDetachedFromWindow();
109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    @Override
112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    public void onWindowFocusChanged(final boolean hasWindowFocus) {
113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        super.onWindowFocusChanged(hasWindowFocus);
114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        mAwViewMethods.onWindowFocusChanged(hasWindowFocus);
115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    @Override
118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    public void onFocusChanged(final boolean focused, final int direction,
119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            final Rect previouslyFocusedRect) {
120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        super.onFocusChanged(focused, direction, previouslyFocusedRect);
121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        mAwViewMethods.onFocusChanged(
122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                focused, direction, previouslyFocusedRect);
123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    @Override
126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    public void onSizeChanged(final int w, final int h, final int ow, final int oh) {
127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        super.onSizeChanged(w, h, ow, oh);
128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        mAwViewMethods.onSizeChanged(w, h, ow, oh);
129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    @Override
132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    protected void onVisibilityChanged(View changedView, int visibility) {
133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        super.onVisibilityChanged(changedView, visibility);
134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        mAwViewMethods.onVisibilityChanged(changedView, visibility);
135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    @Override
138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    public void onWindowVisibilityChanged(final int visibility) {
139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        super.onWindowVisibilityChanged(visibility);
140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        mAwViewMethods.onWindowVisibilityChanged(visibility);
141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // AwContents.InternalAccessDelegate implementation --------------------------------------
144116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    private class InternalAccessAdapter implements AwContents.InternalAccessDelegate {
145116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        @Override
147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        public boolean drawChild(Canvas canvas, View child, long drawingTime) {
148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            // Intentional no-op
149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            return false;
150116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        }
151116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
152116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        @Override
153116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        public boolean super_onKeyUp(int keyCode, KeyEvent event) {
154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            return FullScreenView.super.onKeyUp(keyCode, event);
155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        }
156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        @Override
158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        public boolean super_dispatchKeyEventPreIme(KeyEvent event) {
159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            return FullScreenView.super.dispatchKeyEventPreIme(event);
160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        }
161116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        @Override
163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        public boolean super_dispatchKeyEvent(KeyEvent event) {
164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            return FullScreenView.super.dispatchKeyEvent(event);
165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        }
166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        @Override
168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        public boolean super_onGenericMotionEvent(MotionEvent event) {
169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            return FullScreenView.super.onGenericMotionEvent(event);
170116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        }
171116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        @Override
173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        public void super_onConfigurationChanged(Configuration newConfig) {
174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            // Intentional no-op
175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        }
176116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        @Override
178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        public int super_getScrollBarStyle() {
179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            return FullScreenView.super.getScrollBarStyle();
180116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        }
181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        @Override
183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        public boolean awakenScrollBars() {
184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            return false;
185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        }
186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        @Override
188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        public boolean super_awakenScrollBars(int startDelay, boolean invalidate) {
189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            return false;
190116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        }
191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        @Override
193116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        public void onScrollChanged(int lPix, int tPix, int oldlPix, int oldtPix) {
194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            // Intentional no-op.
195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        }
196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        @Override
198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        public void overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY,
199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                int scrollRangeX, int scrollRangeY, int maxOverScrollX,
200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                int maxOverScrollY, boolean isTouchEvent) {
201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            // Intentional no-op.
202116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        }
203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        @Override
205116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        public void super_scrollTo(int scrollX, int scrollY) {
206116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            // Intentional no-op.
207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        }
208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        @Override
210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        public void setMeasuredDimension(int measuredWidth, int measuredHeight) {
211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            FullScreenView.this.setMeasuredDimension(measuredWidth, measuredHeight);
212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        }
213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
214116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
215