Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2873)

Unified Diff: android_webview/java/src/org/chromium/android_webview/AwZoomControls.java

Issue 14840011: [Android] Move zoom controls management into WebView (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Use an interface and an inline stub, as discussed offline Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: android_webview/java/src/org/chromium/android_webview/AwZoomControls.java
diff --git a/android_webview/java/src/org/chromium/android_webview/AwZoomControls.java b/android_webview/java/src/org/chromium/android_webview/AwZoomControls.java
new file mode 100644
index 0000000000000000000000000000000000000000..9579d50f509612402f04c2d7340e9a4ed774254c
--- /dev/null
+++ b/android_webview/java/src/org/chromium/android_webview/AwZoomControls.java
@@ -0,0 +1,98 @@
+// Copyright (c) 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;
+ private ZoomButtonsController mZoomButtonsController;
+
+ AwZoomControls(AwContents awContents) {
+ mAwContents = awContents;
+ }
+
+ @Override
+ public void invokeZoomPicker() {
+ ZoomButtonsController zoomControls = getZoomControls();
+ if (zoomControls != null && !zoomControls.isVisible()) {
joth 2013/05/03 19:32:43 maybe we should call setVisible(true) even if they
mnaganov (inactive) 2013/05/07 09:55:44 Right, it seems better to omit this check. Also, t
+ zoomControls.setVisible(true);
joth 2013/05/03 19:32:43 do we need to update the individual button states
mnaganov (inactive) 2013/05/07 09:55:44 ZoomButtonsController calls ZoomListener's onVisib
+ }
+ }
+
+ @Override
+ public void dismissZoomPicker() {
+ ZoomButtonsController zoomControls = getZoomControls();
+ if (zoomControls != null && zoomControls.isVisible()) {
+ zoomControls.setVisible(false);
+ }
+ }
+
+ @Override
+ public void updateZoomControls() {
+ if (mZoomButtonsController == null) return;
joth 2013/05/03 19:32:43 not obvious why you use mZoomButtonsController her
mnaganov (inactive) 2013/05/07 09:55:44 Yes, that's a strange assymetry. Changed to getZoo
+ boolean canZoomIn = mAwContents.canZoomIn();
+ boolean canZoomOut = mAwContents.canZoomOut();
+ if (!canZoomIn && !canZoomOut) {
+ // Hide the zoom in and out buttons if the page cannot zoom
+ mZoomButtonsController.getZoomControls().setVisibility(View.GONE);
+ } else {
+ // Set each one individually, as a page may be able to zoom in or out
+ mZoomButtonsController.setZoomInEnabled(canZoomIn);
+ mZoomButtonsController.setZoomOutEnabled(canZoomOut);
joth 2013/05/03 19:32:43 how do these settings nest? do we need to call mZ
mnaganov (inactive) 2013/05/07 09:55:44 Visibility and button status are orthogonal. But w
+ }
+ }
+
+ // 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 getZoomControls() {
joth 2013/05/03 19:32:43 getZoomController() ? Maybe comment when to use th
mnaganov (inactive) 2013/05/07 09:55:44 Renamed. Added a comment on the field to advice to
+ 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.
+ }
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698