// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. package org.chromium.android_webview; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.ZoomButtonsController; import org.chromium.content.browser.ContentViewCore.ZoomControlsDelegate; class AwZoomControls implements ZoomControlsDelegate { private AwContents mAwContents; // It is advised to use getZoomController() where possible. private ZoomButtonsController mZoomButtonsController; AwZoomControls(AwContents awContents) { mAwContents = awContents; } @Override public void invokeZoomPicker() { ZoomButtonsController zoomController = getZoomController(); if (zoomController != null) { zoomController.setVisible(true); } } @Override public void dismissZoomPicker() { ZoomButtonsController zoomController = getZoomController(); if (zoomController != null) { zoomController.setVisible(false); } } @Override public void updateZoomControls() { ZoomButtonsController zoomController = getZoomController(); if (zoomController == null) { return; } boolean canZoomIn = mAwContents.canZoomIn(); boolean canZoomOut = mAwContents.canZoomOut(); if (!canZoomIn && !canZoomOut) { // Hide the zoom in and out buttons if the page cannot zoom zoomController.getZoomControls().setVisibility(View.GONE); } else { // Set each one individually, as a page may be able to zoom in or out zoomController.setZoomInEnabled(canZoomIn); zoomController.setZoomOutEnabled(canZoomOut); } } // This method is used in tests. It doesn't modify the state of zoom controls. View getZoomControlsViewForTest() { return mZoomButtonsController != null ? mZoomButtonsController.getZoomControls() : null; } private ZoomButtonsController getZoomController() { if (mZoomButtonsController == null && mAwContents.getSettings().shouldDisplayZoomControls()) { mZoomButtonsController = new ZoomButtonsController( mAwContents.getContentViewCore().getContainerView()); mZoomButtonsController.setOnZoomListener(new ZoomListener()); // ZoomButtonsController positions the buttons at the bottom, but in // the middle. Change their layout parameters so they appear on the // right. View controls = mZoomButtonsController.getZoomControls(); ViewGroup.LayoutParams params = controls.getLayoutParams(); if (params instanceof FrameLayout.LayoutParams) { ((FrameLayout.LayoutParams) params).gravity = Gravity.RIGHT; } } return mZoomButtonsController; } private class ZoomListener implements ZoomButtonsController.OnZoomListener { @Override public void onVisibilityChanged(boolean visible) { if (visible) { // Bring back the hidden zoom controls. mZoomButtonsController.getZoomControls().setVisibility(View.VISIBLE); updateZoomControls(); } } @Override public void onZoom(boolean zoomIn) { if (zoomIn) { mAwContents.zoomIn(); } else { mAwContents.zoomOut(); } // ContentView will call updateZoomControls after its current page scale // is got updated from the native code. } } }