Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / android_webview / java / src / org / chromium / android_webview / AwZoomControls.java
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.view.Gravity;
8 import android.view.View;
9 import android.view.ViewGroup;
10 import android.widget.FrameLayout;
11 import android.widget.ZoomButtonsController;
12
13 import org.chromium.content.browser.ContentViewCore.ZoomControlsDelegate;
14
15 class AwZoomControls implements ZoomControlsDelegate {
16
17     private AwContents mAwContents;
18     // It is advised to use getZoomController() where possible.
19     private ZoomButtonsController mZoomButtonsController;
20
21     AwZoomControls(AwContents awContents) {
22         mAwContents = awContents;
23     }
24
25     @Override
26     public void invokeZoomPicker() {
27         ZoomButtonsController zoomController = getZoomController();
28         if (zoomController != null) {
29             zoomController.setVisible(true);
30         }
31     }
32
33     @Override
34     public void dismissZoomPicker() {
35         ZoomButtonsController zoomController = getZoomController();
36         if (zoomController != null) {
37             zoomController.setVisible(false);
38         }
39     }
40
41     @Override
42     public void updateZoomControls() {
43         ZoomButtonsController zoomController = getZoomController();
44         if (zoomController == null) {
45             return;
46         }
47         boolean canZoomIn = mAwContents.canZoomIn();
48         boolean canZoomOut = mAwContents.canZoomOut();
49         if (!canZoomIn && !canZoomOut) {
50             // Hide the zoom in and out buttons if the page cannot zoom
51             zoomController.getZoomControls().setVisibility(View.GONE);
52         } else {
53             // Set each one individually, as a page may be able to zoom in or out
54             zoomController.setZoomInEnabled(canZoomIn);
55             zoomController.setZoomOutEnabled(canZoomOut);
56         }
57     }
58
59     // This method is used in tests. It doesn't modify the state of zoom controls.
60     View getZoomControlsViewForTest() {
61         return mZoomButtonsController != null ? mZoomButtonsController.getZoomControls() : null;
62     }
63
64     private ZoomButtonsController getZoomController() {
65         if (mZoomButtonsController == null
66                 && mAwContents.getSettings().shouldDisplayZoomControls()) {
67             mZoomButtonsController = new ZoomButtonsController(
68                     mAwContents.getContentViewCore().getContainerView());
69             mZoomButtonsController.setOnZoomListener(new ZoomListener());
70             // ZoomButtonsController positions the buttons at the bottom, but in
71             // the middle. Change their layout parameters so they appear on the
72             // right.
73             View controls = mZoomButtonsController.getZoomControls();
74             ViewGroup.LayoutParams params = controls.getLayoutParams();
75             if (params instanceof FrameLayout.LayoutParams) {
76                 ((FrameLayout.LayoutParams) params).gravity = Gravity.RIGHT;
77             }
78         }
79         return mZoomButtonsController;
80     }
81
82     private class ZoomListener implements ZoomButtonsController.OnZoomListener {
83         @Override
84         public void onVisibilityChanged(boolean visible) {
85             if (visible) {
86                 // Bring back the hidden zoom controls.
87                 mZoomButtonsController.getZoomControls().setVisibility(View.VISIBLE);
88                 updateZoomControls();
89             }
90         }
91
92         @Override
93         public void onZoom(boolean zoomIn) {
94             if (zoomIn) {
95                 mAwContents.zoomIn();
96             } else {
97                 mAwContents.zoomOut();
98             }
99             // ContentView will call updateZoomControls after its current page scale
100             // is got updated from the native code.
101         }
102     }
103 }