summaryrefslogtreecommitdiffstats
path: root/core/java/android/webkit/ZoomControlEmbedded.java
diff options
context:
space:
mode:
authorDerek Sollenberger <djsollen@google.com>2010-05-10 12:38:54 -0400
committerDerek Sollenberger <djsollen@google.com>2010-05-17 13:49:40 -0400
commit90b6e4879304c6ac8240cdeb9a4aea94a27cda58 (patch)
tree41885d4cead982c0c9bb7489618a5bc1d45e4291 /core/java/android/webkit/ZoomControlEmbedded.java
parent38a9544825c6f3482237f9e29cddee58ebc093c3 (diff)
downloadframeworks_base-90b6e4879304c6ac8240cdeb9a4aea94a27cda58.zip
frameworks_base-90b6e4879304c6ac8240cdeb9a4aea94a27cda58.tar.gz
frameworks_base-90b6e4879304c6ac8240cdeb9a4aea94a27cda58.tar.bz2
Refactor the on-screen zoom controls into a separate class.
This CL is the first in a series of CL's that will extract the zoom code from WebView and put it into ZoomManager. This initial CL only extracts the on-screen zoom controls and required variables into the ZoomManager. Since the on-screen controls are well defined I put them into their own class called ZoomControls. All of WebView's zoom interactions are handled by the ZoomManager. The ZoomManager can then handle the request internally or as in the case of on-screen controls pass the request to another class. Change-Id: Icfc91ed0456c88d633249c26b9afc7dd216f75a1 http://b/2671604
Diffstat (limited to 'core/java/android/webkit/ZoomControlEmbedded.java')
-rw-r--r--core/java/android/webkit/ZoomControlEmbedded.java119
1 files changed, 119 insertions, 0 deletions
diff --git a/core/java/android/webkit/ZoomControlEmbedded.java b/core/java/android/webkit/ZoomControlEmbedded.java
new file mode 100644
index 0000000..cd02c00
--- /dev/null
+++ b/core/java/android/webkit/ZoomControlEmbedded.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.webkit;
+
+import android.view.Gravity;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+import android.widget.Toast;
+import android.widget.ZoomButtonsController;
+
+class ZoomControlEmbedded implements ZoomControlBase {
+
+ private final ZoomManager mZoomManager;
+ private final WebView mWebView;
+
+ // The controller is lazily initialized in getControls() for performance.
+ private ZoomButtonsController mZoomButtonsController;
+
+ public ZoomControlEmbedded(ZoomManager zoomManager, WebView webView) {
+ mZoomManager = zoomManager;
+ mWebView = webView;
+ }
+
+ public void show() {
+ if (!getControls().isVisible()
+ && mZoomManager.mMinZoomScale < mZoomManager.mMaxZoomScale) {
+
+ mZoomButtonsController.setVisible(true);
+
+ WebSettings settings = mWebView.getSettings();
+ int count = settings.getDoubleTapToastCount();
+ if (mZoomManager.mInZoomOverview && count > 0) {
+ settings.setDoubleTapToastCount(--count);
+ Toast.makeText(mWebView.getContext(),
+ com.android.internal.R.string.double_tap_toast,
+ Toast.LENGTH_LONG).show();
+ }
+ }
+ }
+
+ public void hide() {
+ if (mZoomButtonsController != null) {
+ mZoomButtonsController.setVisible(false);
+ }
+ }
+
+ public boolean isVisible() {
+ return mZoomButtonsController != null && mZoomButtonsController.isVisible();
+ }
+
+ public void update() {
+ if (mZoomButtonsController == null) {
+ return;
+ }
+
+ boolean canZoomIn = mWebView.getScale() < mZoomManager.mMaxZoomScale;
+ boolean canZoomOut = mWebView.getScale() > mZoomManager.mMinZoomScale &&
+ !mZoomManager.mInZoomOverview;
+ 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);
+ }
+ }
+
+ private ZoomButtonsController getControls() {
+ if (mZoomButtonsController == null) {
+ mZoomButtonsController = new ZoomButtonsController(mWebView);
+ 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 {
+
+ public void onVisibilityChanged(boolean visible) {
+ if (visible) {
+ mWebView.switchOutDrawHistory();
+ // Bring back the hidden zoom controls.
+ mZoomButtonsController.getZoomControls().setVisibility(View.VISIBLE);
+ update();
+ }
+ }
+
+ public void onZoom(boolean zoomIn) {
+ if (zoomIn) {
+ mWebView.zoomIn();
+ } else {
+ mWebView.zoomOut();
+ }
+ update();
+ }
+ }
+}