Home | History | Annotate | Download | only in ui
      1 /*
      2  * Copyright (C) 2011 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 
     17 package com.android.camera.ui;
     18 
     19 import com.android.camera.CameraPreference.OnPreferenceChangedListener;
     20 import com.android.camera.PreferenceGroup;
     21 import com.android.camera.R;
     22 
     23 import android.content.Context;
     24 import android.util.AttributeSet;
     25 import android.view.MotionEvent;
     26 import android.view.View;
     27 import android.view.animation.Animation;
     28 import android.view.animation.Animation.AnimationListener;
     29 import android.view.animation.AnimationUtils;
     30 
     31 /**
     32  * The IndicatorControlBarContainer is a IndicatorControl containing
     33  * IndicatorControlBar, SecondIndicatorControlBar and ZoomControlBar for Phone UI.
     34  */
     35 public class IndicatorControlBarContainer extends IndicatorControlContainer {
     36     private static final String TAG = "IndicatorControlBarContainer";
     37 
     38     private Animation mFadeIn, mFadeOut;
     39     private Animation mSecondLevelFadeIn, mSecondLevelFadeOut;
     40     private IndicatorControlBar mIndicatorControlBar;
     41     private SecondLevelIndicatorControlBar mSecondLevelIndicatorControlBar;
     42 
     43     public IndicatorControlBarContainer(Context context, AttributeSet attrs) {
     44         super(context, attrs);
     45         mFadeIn = AnimationUtils.loadAnimation(
     46                 context, R.anim.first_level_fade_in);
     47         mFadeOut = AnimationUtils.loadAnimation(
     48                 context, R.anim.first_level_fade_out);
     49         mFadeOut.setAnimationListener(mAnimationListener);
     50         mSecondLevelFadeIn = AnimationUtils.loadAnimation(
     51                 context, R.anim.second_level_fade_in);
     52         mSecondLevelFadeOut = AnimationUtils.loadAnimation(
     53                 context, R.anim.second_level_fade_out);
     54         mSecondLevelFadeOut.setAnimationListener(mAnimationListener);
     55     }
     56 
     57     @Override
     58     protected void onFinishInflate() {
     59         mIndicatorControlBar = (IndicatorControlBar)
     60                 findViewById(R.id.indicator_bar);
     61         mIndicatorControlBar.setOnIndicatorEventListener(this);
     62         mSecondLevelIndicatorControlBar = (SecondLevelIndicatorControlBar)
     63                 findViewById(R.id.second_level_indicator_bar);
     64         mSecondLevelIndicatorControlBar.setOnIndicatorEventListener(this);
     65     }
     66 
     67     @Override
     68     public void initialize(Context context, PreferenceGroup group,
     69             boolean isZoomSupported, String[] secondLevelKeys,
     70             String[] secondLevelOtherSettingKeys) {
     71 
     72         mIndicatorControlBar.initialize(context, group, isZoomSupported);
     73 
     74         mSecondLevelIndicatorControlBar.initialize(context, group,
     75                 secondLevelKeys, secondLevelOtherSettingKeys);
     76     }
     77 
     78     public void setOrientation(int orientation) {
     79         mIndicatorControlBar.setOrientation(orientation);
     80         mSecondLevelIndicatorControlBar.setOrientation(orientation);
     81     }
     82 
     83     @Override
     84     public boolean dispatchTouchEvent(MotionEvent event) {
     85         if (mIndicatorControlBar.getVisibility() == View.VISIBLE) {
     86             return mIndicatorControlBar.dispatchTouchEvent(event);
     87         } else if (mSecondLevelIndicatorControlBar.getVisibility() == View.VISIBLE) {
     88             return mSecondLevelIndicatorControlBar.dispatchTouchEvent(event);
     89         }
     90         return true;
     91     }
     92 
     93     private AnimationListener mAnimationListener = new AnimationListener() {
     94         public void onAnimationEnd(Animation animation) {
     95             if (animation == mSecondLevelFadeOut) {
     96                 mSecondLevelIndicatorControlBar.setVisibility(View.GONE);
     97             } else if (animation == mFadeOut) {
     98                 mIndicatorControlBar.setVisibility(View.GONE);
     99             }
    100         }
    101 
    102         public void onAnimationRepeat(Animation animation) {
    103         }
    104 
    105         public void onAnimationStart(Animation animation) {
    106         }
    107     };
    108 
    109     private void leaveSecondLevelIndicator() {
    110         mIndicatorControlBar.startAnimation(mFadeIn);
    111         mIndicatorControlBar.setVisibility(View.VISIBLE);
    112         mSecondLevelIndicatorControlBar.startAnimation(mSecondLevelFadeOut);
    113     }
    114 
    115     public void onIndicatorEvent(int event) {
    116         switch (event) {
    117             case OnIndicatorEventListener.EVENT_ENTER_SECOND_LEVEL_INDICATOR_BAR:
    118                 mIndicatorControlBar.startAnimation(mFadeOut);
    119                 mSecondLevelIndicatorControlBar.startAnimation(mSecondLevelFadeIn);
    120                 mSecondLevelIndicatorControlBar.setVisibility(View.VISIBLE);
    121                 break;
    122 
    123             case OnIndicatorEventListener.EVENT_LEAVE_SECOND_LEVEL_INDICATOR_BAR:
    124                 leaveSecondLevelIndicator();
    125                 break;
    126         }
    127     }
    128 
    129     public void reloadPreferences() {
    130         mIndicatorControlBar.reloadPreferences();
    131         mSecondLevelIndicatorControlBar.reloadPreferences();
    132     }
    133 
    134     public void setListener(OnPreferenceChangedListener listener) {
    135         mIndicatorControlBar.setListener(listener);
    136         mSecondLevelIndicatorControlBar.setListener(listener);
    137     }
    138 
    139     @Override
    140     public View getActiveSettingPopup() {
    141         if (mIndicatorControlBar.getVisibility() == View.VISIBLE) {
    142             return mIndicatorControlBar.getActiveSettingPopup();
    143         } else if (mSecondLevelIndicatorControlBar.getVisibility() == View.VISIBLE) {
    144             return mSecondLevelIndicatorControlBar.getActiveSettingPopup();
    145         }
    146         return null;
    147     }
    148 
    149     public boolean dismissSettingPopup() {
    150         if (mIndicatorControlBar.getVisibility() == View.VISIBLE) {
    151             return mIndicatorControlBar.dismissSettingPopup();
    152         } else if (mSecondLevelIndicatorControlBar.getVisibility() == View.VISIBLE) {
    153             return mSecondLevelIndicatorControlBar.dismissSettingPopup();
    154         }
    155         return false;
    156     }
    157 
    158     @Override
    159     public void overrideSettings(final String ... keyvalues) {
    160         mSecondLevelIndicatorControlBar.overrideSettings(keyvalues);
    161     }
    162 
    163     @Override
    164     public void setEnabled(boolean enabled) {
    165         mIndicatorControlBar.setEnabled(enabled);
    166         mSecondLevelIndicatorControlBar.setEnabled(enabled);
    167     }
    168 
    169     @Override
    170     public void enableZoom(boolean enabled) {
    171         mIndicatorControlBar.enableZoom(enabled);
    172     }
    173 
    174     @Override
    175     public void dismissSecondLevelIndicator() {
    176         if (mSecondLevelIndicatorControlBar.getVisibility() == View.VISIBLE) {
    177             leaveSecondLevelIndicator();
    178         }
    179     }
    180 }
    181