diff options
author | Derek Sollenberger <djsollen@google.com> | 2010-05-10 12:38:54 -0400 |
---|---|---|
committer | Derek Sollenberger <djsollen@google.com> | 2010-05-17 13:49:40 -0400 |
commit | 90b6e4879304c6ac8240cdeb9a4aea94a27cda58 (patch) | |
tree | 41885d4cead982c0c9bb7489618a5bc1d45e4291 /core/java/android/webkit/ZoomControlEmbedded.java | |
parent | 38a9544825c6f3482237f9e29cddee58ebc093c3 (diff) | |
download | frameworks_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.java | 119 |
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(); + } + } +} |