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.
5 package org.chromium.android_webview;
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;
13 import org.chromium.content.browser.ContentViewCore.ZoomControlsDelegate;
15 class AwZoomControls implements ZoomControlsDelegate {
17 private AwContents mAwContents;
18 // It is advised to use getZoomController() where possible.
19 private ZoomButtonsController mZoomButtonsController;
21 AwZoomControls(AwContents awContents) {
22 mAwContents = awContents;
26 public void invokeZoomPicker() {
27 ZoomButtonsController zoomController = getZoomController();
28 if (zoomController != null) {
29 zoomController.setVisible(true);
34 public void dismissZoomPicker() {
35 ZoomButtonsController zoomController = getZoomController();
36 if (zoomController != null) {
37 zoomController.setVisible(false);
42 public void updateZoomControls() {
43 ZoomButtonsController zoomController = getZoomController();
44 if (zoomController == null) {
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);
53 // Set each one individually, as a page may be able to zoom in or out
54 zoomController.setZoomInEnabled(canZoomIn);
55 zoomController.setZoomOutEnabled(canZoomOut);
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;
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
73 View controls = mZoomButtonsController.getZoomControls();
74 ViewGroup.LayoutParams params = controls.getLayoutParams();
75 if (params instanceof FrameLayout.LayoutParams) {
76 ((FrameLayout.LayoutParams) params).gravity = Gravity.RIGHT;
79 return mZoomButtonsController;
82 private class ZoomListener implements ZoomButtonsController.OnZoomListener {
84 public void onVisibilityChanged(boolean visible) {
86 // Bring back the hidden zoom controls.
87 mZoomButtonsController.getZoomControls().setVisibility(View.VISIBLE);
93 public void onZoom(boolean zoomIn) {
97 mAwContents.zoomOut();
99 // ContentView will call updateZoomControls after its current page scale
100 // is got updated from the native code.