Home | History | Annotate | Download | only in webkit
      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 
     40     public ZoomControlExternal(WebViewClassic webView) {
     41         mWebView = webView;
     42     }
     43 
     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 
     52     public void hide() {
     53         if (mZoomControlRunnable != null) {
     54             mPrivateHandler.removeCallbacks(mZoomControlRunnable);
     55         }
     56         if (mZoomControls != null) {
     57             mZoomControls.hide();
     58         }
     59     }
     60 
     61     public boolean isVisible() {
     62         return mZoomControls != null && mZoomControls.isShown();
     63     }
     64 
     65     public void update() { }
     66 
     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 
     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 
    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 
    131         public void show(boolean showZoom) {
    132             mPlusMinusZoomControls.setVisibility(showZoom ? View.VISIBLE : View.GONE);
    133             fade(View.VISIBLE, 0.0f, 1.0f);
    134         }
    135 
    136         public void hide() {
    137             fade(View.GONE, 1.0f, 0.0f);
    138         }
    139 
    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 
    147         public boolean hasFocus() {
    148             return mPlusMinusZoomControls.hasFocus();
    149         }
    150 
    151         public void setOnZoomInClickListener(OnClickListener listener) {
    152             mPlusMinusZoomControls.setOnZoomInClickListener(listener);
    153         }
    154 
    155         public void setOnZoomOutClickListener(OnClickListener listener) {
    156             mPlusMinusZoomControls.setOnZoomOutClickListener(listener);
    157         }
    158     }
    159 }
    160