IndicatorControlContainer.java revision adab2bddc93bf4af535cb58e7167bf8690d97d8c
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
17package com.android.camera.ui;
18
19import com.android.camera.CameraPreference.OnPreferenceChangedListener;
20import com.android.camera.PreferenceGroup;
21import com.android.camera.R;
22
23import android.content.Context;
24import android.util.AttributeSet;
25import android.view.View;
26import android.view.animation.Animation;
27import android.view.animation.AnimationUtils;
28
29/**
30 * A view contains indicator control bar, second-level indicator bar and
31 * zoom control.
32 */
33public class IndicatorControlContainer extends IndicatorControl implements
34        OnIndicatorEventListener {
35    private static final String TAG = "IndicatorControlContainer";
36
37    private Animation mFadeIn, mFadeOut;
38    private IndicatorBar mIndicatorBar;
39    private ZoomControlBar mZoomControlBar;
40    private SecondLevelIndicatorBar mSecondLevelIndicatorBar;
41
42    public IndicatorControlContainer(Context context, AttributeSet attrs) {
43        super(context, attrs);
44    }
45
46    @Override
47    public void initialize(Context context, PreferenceGroup group,
48            String flashSetting, String[] secondLevelKeys,
49            String[] secondLevelOtherSettingKeys) {
50        mIndicatorBar = (IndicatorBar)
51                findViewById(R.id.indicator_bar);
52
53        mZoomControlBar = (ZoomControlBar)
54                findViewById(R.id.zoom_control);
55        mZoomControlBar.setOnIndicatorEventListener(this);
56
57        // We need to show/hide the zoom slider icon accordingly.
58        // From UI spec, we have camera_flash setting on the first level.
59        mIndicatorBar.initialize(context, group, flashSetting,
60                mZoomControlBar.isZoomSupported());
61        mIndicatorBar.setOnIndicatorEventListener(this);
62
63        mSecondLevelIndicatorBar = (SecondLevelIndicatorBar)
64                findViewById(R.id.second_level_indicator_bar);
65        mSecondLevelIndicatorBar.initialize(context, group, secondLevelKeys,
66                secondLevelOtherSettingKeys);
67        mSecondLevelIndicatorBar.setOnIndicatorEventListener(this);
68
69        mFadeIn = AnimationUtils.loadAnimation(
70                context, R.anim.grow_fade_in_from_bottom);
71        mFadeOut = AnimationUtils.loadAnimation(
72                context, R.anim.shrink_fade_out_from_top);
73    }
74
75    public void setDegree(int degree) {
76        mIndicatorBar.setDegree(degree);
77        mSecondLevelIndicatorBar.setDegree(degree);
78        mZoomControlBar.setDegree(degree);
79    }
80
81    public void onIndicatorEvent(int event) {
82        switch (event) {
83            case OnIndicatorEventListener.EVENT_ENTER_SECOND_LEVEL_INDICATOR_BAR:
84                mIndicatorBar.setVisibility(View.GONE);
85                mSecondLevelIndicatorBar.startAnimation(mFadeIn);
86                mSecondLevelIndicatorBar.setVisibility(View.VISIBLE);
87                break;
88
89            case OnIndicatorEventListener.EVENT_LEAVE_SECOND_LEVEL_INDICATOR_BAR:
90                mSecondLevelIndicatorBar.startAnimation(mFadeOut);
91                mSecondLevelIndicatorBar.setVisibility(View.GONE);
92                mIndicatorBar.setVisibility(View.VISIBLE);
93                break;
94
95            case OnIndicatorEventListener.EVENT_ENTER_ZOOM_CONTROL_BAR:
96                mIndicatorBar.setVisibility(View.GONE);
97                mZoomControlBar.setVisibility(View.VISIBLE);
98                break;
99
100            case OnIndicatorEventListener.EVENT_LEAVE_ZOOM_CONTROL_BAR:
101                mZoomControlBar.setVisibility(View.GONE);
102                mIndicatorBar.setVisibility(View.VISIBLE);
103                break;
104        }
105    }
106
107    public void reloadPreferences() {
108        mIndicatorBar.reloadPreferences();
109        mSecondLevelIndicatorBar.reloadPreferences();
110    }
111
112    public void setListener(OnPreferenceChangedListener listener) {
113        mIndicatorBar.setListener(listener);
114        mSecondLevelIndicatorBar.setListener(listener);
115    }
116
117    @Override
118    public View getActiveSettingPopup() {
119        if (mIndicatorBar.getVisibility() == View.VISIBLE) {
120            return mIndicatorBar.getActiveSettingPopup();
121        } else if (mSecondLevelIndicatorBar.getVisibility() == View.VISIBLE) {
122            return mSecondLevelIndicatorBar.getActiveSettingPopup();
123        }
124        return null;
125    }
126
127    public boolean dismissSettingPopup() {
128        if (mIndicatorBar.getVisibility() == View.VISIBLE) {
129            return mIndicatorBar.dismissSettingPopup();
130        } else if (mSecondLevelIndicatorBar.getVisibility() == View.VISIBLE) {
131            return mSecondLevelIndicatorBar.dismissSettingPopup();
132        }
133        return false;
134    }
135}
136