• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2010 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package android.webkit;
17 
18 import android.content.Context;
19 import android.os.Handler;
20 import android.view.LayoutInflater;
21 import android.view.View;
22 import android.view.ViewConfiguration;
23 import android.view.View.OnClickListener;
24 import android.view.animation.AlphaAnimation;
25 import android.widget.FrameLayout;
26 
27 @Deprecated
28 class ZoomControlExternal implements ZoomControlBase {
29 
30     // The time that the external controls are visible before fading away
31     private static final long ZOOM_CONTROLS_TIMEOUT =
32             ViewConfiguration.getZoomControlsTimeout();
33     // The view containing the external zoom controls
34     private ExtendedZoomControls mZoomControls;
35     private Runnable mZoomControlRunnable;
36     private final Handler mPrivateHandler = new Handler();
37 
38     private final WebViewClassic mWebView;
39 
ZoomControlExternal(WebViewClassic webView)40     public ZoomControlExternal(WebViewClassic webView) {
41         mWebView = webView;
42     }
43 
show()44     public void show() {
45         if(mZoomControlRunnable != null) {
46             mPrivateHandler.removeCallbacks(mZoomControlRunnable);
47         }
48         getControls().show(true);
49         mPrivateHandler.postDelayed(mZoomControlRunnable, ZOOM_CONTROLS_TIMEOUT);
50     }
51 
hide()52     public void hide() {
53         if (mZoomControlRunnable != null) {
54             mPrivateHandler.removeCallbacks(mZoomControlRunnable);
55         }
56         if (mZoomControls != null) {
57             mZoomControls.hide();
58         }
59     }
60 
isVisible()61     public boolean isVisible() {
62         return mZoomControls != null && mZoomControls.isShown();
63     }
64 
update()65     public void update() { }
66 
getControls()67     public ExtendedZoomControls getControls() {
68         if (mZoomControls == null) {
69             mZoomControls = createZoomControls();
70 
71             /*
72              * need to be set to VISIBLE first so that getMeasuredHeight() in
73              * {@link #onSizeChanged()} can return the measured value for proper
74              * layout.
75              */
76             mZoomControls.setVisibility(View.VISIBLE);
77             mZoomControlRunnable = new Runnable() {
78                 public void run() {
79                     /* Don't dismiss the controls if the user has
80                      * focus on them. Wait and check again later.
81                      */
82                     if (!mZoomControls.hasFocus()) {
83                         mZoomControls.hide();
84                     } else {
85                         mPrivateHandler.removeCallbacks(mZoomControlRunnable);
86                         mPrivateHandler.postDelayed(mZoomControlRunnable,
87                                 ZOOM_CONTROLS_TIMEOUT);
88                     }
89                 }
90             };
91         }
92         return mZoomControls;
93     }
94 
createZoomControls()95     private ExtendedZoomControls createZoomControls() {
96         ExtendedZoomControls zoomControls = new ExtendedZoomControls(mWebView.getContext());
97         zoomControls.setOnZoomInClickListener(new OnClickListener() {
98             public void onClick(View v) {
99                 // reset time out
100                 mPrivateHandler.removeCallbacks(mZoomControlRunnable);
101                 mPrivateHandler.postDelayed(mZoomControlRunnable, ZOOM_CONTROLS_TIMEOUT);
102                 mWebView.zoomIn();
103             }
104         });
105         zoomControls.setOnZoomOutClickListener(new OnClickListener() {
106             public void onClick(View v) {
107                 // reset time out
108                 mPrivateHandler.removeCallbacks(mZoomControlRunnable);
109                 mPrivateHandler.postDelayed(mZoomControlRunnable, ZOOM_CONTROLS_TIMEOUT);
110                 mWebView.zoomOut();
111             }
112         });
113         return zoomControls;
114     }
115 
116     private static class ExtendedZoomControls extends FrameLayout {
117 
118         private android.widget.ZoomControls mPlusMinusZoomControls;
119 
ExtendedZoomControls(Context context)120         public ExtendedZoomControls(Context context) {
121             super(context, null);
122             LayoutInflater inflater = (LayoutInflater)
123                     context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
124             inflater.inflate(com.android.internal.R.layout.zoom_magnify, this, true);
125             mPlusMinusZoomControls = (android.widget.ZoomControls) findViewById(
126                     com.android.internal.R.id.zoomControls);
127             findViewById(com.android.internal.R.id.zoomMagnify).setVisibility(
128                     View.GONE);
129         }
130 
show(boolean showZoom)131         public void show(boolean showZoom) {
132             mPlusMinusZoomControls.setVisibility(showZoom ? View.VISIBLE : View.GONE);
133             fade(View.VISIBLE, 0.0f, 1.0f);
134         }
135 
hide()136         public void hide() {
137             fade(View.GONE, 1.0f, 0.0f);
138         }
139 
fade(int visibility, float startAlpha, float endAlpha)140         private void fade(int visibility, float startAlpha, float endAlpha) {
141             AlphaAnimation anim = new AlphaAnimation(startAlpha, endAlpha);
142             anim.setDuration(500);
143             startAnimation(anim);
144             setVisibility(visibility);
145         }
146 
hasFocus()147         public boolean hasFocus() {
148             return mPlusMinusZoomControls.hasFocus();
149         }
150 
setOnZoomInClickListener(OnClickListener listener)151         public void setOnZoomInClickListener(OnClickListener listener) {
152             mPlusMinusZoomControls.setOnZoomInClickListener(listener);
153         }
154 
setOnZoomOutClickListener(OnClickListener listener)155         public void setOnZoomOutClickListener(OnClickListener listener) {
156             mPlusMinusZoomControls.setOnZoomOutClickListener(listener);
157         }
158     }
159 }
160