1adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang/*
2adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang * Copyright (C) 2011 The Android Open Source Project
3adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang *
4adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang * Licensed under the Apache License, Version 2.0 (the "License");
5adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang * you may not use this file except in compliance with the License.
6adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang * You may obtain a copy of the License at
7adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang *
8adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang *      http://www.apache.org/licenses/LICENSE-2.0
9adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang *
10adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang * Unless required by applicable law or agreed to in writing, software
11adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang * distributed under the License is distributed on an "AS IS" BASIS,
12adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang * See the License for the specific language governing permissions and
14adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang * limitations under the License.
15adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang */
16adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang
17adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wangpackage com.android.camera.ui;
18adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang
19adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wangimport com.android.camera.CameraPreference.OnPreferenceChangedListener;
20adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wangimport com.android.camera.PreferenceGroup;
21adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wangimport com.android.camera.R;
22adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang
23adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wangimport android.content.Context;
24adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wangimport android.util.AttributeSet;
25ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wangimport android.view.MotionEvent;
26adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wangimport android.view.View;
27adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wangimport android.view.animation.Animation;
28507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wangimport android.view.animation.Animation.AnimationListener;
29adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wangimport android.view.animation.AnimationUtils;
30adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang
31adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang/**
32ed6373cd34393dfdda8d18a03705c83bfff1f535Chung-yih Wang * The IndicatorControlBarContainer is a IndicatorControl containing
33ed6373cd34393dfdda8d18a03705c83bfff1f535Chung-yih Wang * IndicatorControlBar, SecondIndicatorControlBar and ZoomControlBar for Phone UI.
34adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang */
352bbd7e182f25816008262f2e2bd9a1a08392c913Chung-yih Wangpublic class IndicatorControlBarContainer extends IndicatorControlContainer {
36ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang    private static final String TAG = "IndicatorControlBarContainer";
37adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang
38adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang    private Animation mFadeIn, mFadeOut;
39507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang    private Animation mSecondLevelFadeIn, mSecondLevelFadeOut;
40ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang    private IndicatorControlBar mIndicatorControlBar;
41ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang    private SecondLevelIndicatorControlBar mSecondLevelIndicatorControlBar;
42adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang
43ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang    public IndicatorControlBarContainer(Context context, AttributeSet attrs) {
44adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang        super(context, attrs);
456176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang        mFadeIn = AnimationUtils.loadAnimation(
46d33109730e0ab81230f84e2bd35599e8e24fc4baChung-yih Wang                context, R.anim.first_level_fade_in);
476176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang        mFadeOut = AnimationUtils.loadAnimation(
48d33109730e0ab81230f84e2bd35599e8e24fc4baChung-yih Wang                context, R.anim.first_level_fade_out);
49507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang        mFadeOut.setAnimationListener(mAnimationListener);
50507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang        mSecondLevelFadeIn = AnimationUtils.loadAnimation(
51d33109730e0ab81230f84e2bd35599e8e24fc4baChung-yih Wang                context, R.anim.second_level_fade_in);
52507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang        mSecondLevelFadeOut = AnimationUtils.loadAnimation(
53d33109730e0ab81230f84e2bd35599e8e24fc4baChung-yih Wang                context, R.anim.second_level_fade_out);
54507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang        mSecondLevelFadeOut.setAnimationListener(mAnimationListener);
55adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang    }
56adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang
57adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang    @Override
586176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang    protected void onFinishInflate() {
590935e09bb12a1886a801713bbd78bbc20bf4ea4eChih-yu Huang        mIndicatorControlBar = (IndicatorControlBar)
600935e09bb12a1886a801713bbd78bbc20bf4ea4eChih-yu Huang                findViewById(R.id.indicator_bar);
61ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang        mIndicatorControlBar.setOnIndicatorEventListener(this);
62ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang        mSecondLevelIndicatorControlBar = (SecondLevelIndicatorControlBar)
63adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang                findViewById(R.id.second_level_indicator_bar);
64ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang        mSecondLevelIndicatorControlBar.setOnIndicatorEventListener(this);
656176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang    }
66adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang
676176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang    @Override
686176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang    public void initialize(Context context, PreferenceGroup group,
69b7d0a0704e437a1892fbf2a6e5138cf36df9fde8Chung-yih Wang            boolean isZoomSupported, String[] secondLevelKeys,
70b7d0a0704e437a1892fbf2a6e5138cf36df9fde8Chung-yih Wang            String[] secondLevelOtherSettingKeys) {
716176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang
72b7d0a0704e437a1892fbf2a6e5138cf36df9fde8Chung-yih Wang        mIndicatorControlBar.initialize(context, group, isZoomSupported);
736176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang
746176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang        mSecondLevelIndicatorControlBar.initialize(context, group,
756176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang                secondLevelKeys, secondLevelOtherSettingKeys);
76adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang    }
77adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang
783ebe49d8f1b4defb7cfd4850a14e795aada2ebd1Chih-yu Huang    public void setOrientation(int orientation) {
793ebe49d8f1b4defb7cfd4850a14e795aada2ebd1Chih-yu Huang        mIndicatorControlBar.setOrientation(orientation);
803ebe49d8f1b4defb7cfd4850a14e795aada2ebd1Chih-yu Huang        mSecondLevelIndicatorControlBar.setOrientation(orientation);
81adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang    }
82adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang
83ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang    @Override
84ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang    public boolean dispatchTouchEvent(MotionEvent event) {
85ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang        if (mIndicatorControlBar.getVisibility() == View.VISIBLE) {
86ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang            return mIndicatorControlBar.dispatchTouchEvent(event);
87ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang        } else if (mSecondLevelIndicatorControlBar.getVisibility() == View.VISIBLE) {
88ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang            return mSecondLevelIndicatorControlBar.dispatchTouchEvent(event);
89ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang        }
90d2202f9677fcc5f3f2b3e950c35aefe80da14a8aChung-yih Wang        return true;
91ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang    }
92ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang
93507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang    private AnimationListener mAnimationListener = new AnimationListener() {
94507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang        public void onAnimationEnd(Animation animation) {
95507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang            if (animation == mSecondLevelFadeOut) {
96507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang                mSecondLevelIndicatorControlBar.setVisibility(View.GONE);
97507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang            } else if (animation == mFadeOut) {
98507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang                mIndicatorControlBar.setVisibility(View.GONE);
99507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang            }
100507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang        }
101507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang
102507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang        public void onAnimationRepeat(Animation animation) {
103507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang        }
104507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang
105507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang        public void onAnimationStart(Animation animation) {
106507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang        }
107507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang    };
108507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang
1092bbd7e182f25816008262f2e2bd9a1a08392c913Chung-yih Wang    private void leaveSecondLevelIndicator() {
1102bbd7e182f25816008262f2e2bd9a1a08392c913Chung-yih Wang        mIndicatorControlBar.startAnimation(mFadeIn);
1112bbd7e182f25816008262f2e2bd9a1a08392c913Chung-yih Wang        mIndicatorControlBar.setVisibility(View.VISIBLE);
1122bbd7e182f25816008262f2e2bd9a1a08392c913Chung-yih Wang        mSecondLevelIndicatorControlBar.startAnimation(mSecondLevelFadeOut);
1132bbd7e182f25816008262f2e2bd9a1a08392c913Chung-yih Wang    }
1142bbd7e182f25816008262f2e2bd9a1a08392c913Chung-yih Wang
115adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang    public void onIndicatorEvent(int event) {
116adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang        switch (event) {
117adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang            case OnIndicatorEventListener.EVENT_ENTER_SECOND_LEVEL_INDICATOR_BAR:
118507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang                mIndicatorControlBar.startAnimation(mFadeOut);
119507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang                mSecondLevelIndicatorControlBar.startAnimation(mSecondLevelFadeIn);
120ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang                mSecondLevelIndicatorControlBar.setVisibility(View.VISIBLE);
121adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang                break;
122adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang
123adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang            case OnIndicatorEventListener.EVENT_LEAVE_SECOND_LEVEL_INDICATOR_BAR:
1242bbd7e182f25816008262f2e2bd9a1a08392c913Chung-yih Wang                leaveSecondLevelIndicator();
125adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang                break;
126adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang        }
127adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang    }
128adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang
129adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang    public void reloadPreferences() {
130ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang        mIndicatorControlBar.reloadPreferences();
131ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang        mSecondLevelIndicatorControlBar.reloadPreferences();
132adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang    }
133adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang
134adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang    public void setListener(OnPreferenceChangedListener listener) {
135ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang        mIndicatorControlBar.setListener(listener);
136ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang        mSecondLevelIndicatorControlBar.setListener(listener);
137adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang    }
138adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang
139adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang    @Override
140adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang    public View getActiveSettingPopup() {
141ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang        if (mIndicatorControlBar.getVisibility() == View.VISIBLE) {
142ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang            return mIndicatorControlBar.getActiveSettingPopup();
143ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang        } else if (mSecondLevelIndicatorControlBar.getVisibility() == View.VISIBLE) {
144ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang            return mSecondLevelIndicatorControlBar.getActiveSettingPopup();
145adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang        }
146adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang        return null;
147adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang    }
148adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang
149adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang    public boolean dismissSettingPopup() {
150ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang        if (mIndicatorControlBar.getVisibility() == View.VISIBLE) {
151ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang            return mIndicatorControlBar.dismissSettingPopup();
152ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang        } else if (mSecondLevelIndicatorControlBar.getVisibility() == View.VISIBLE) {
153ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang            return mSecondLevelIndicatorControlBar.dismissSettingPopup();
154adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang        }
155adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang        return false;
156adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang    }
157ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang
158ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang    @Override
159ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang    public void overrideSettings(final String ... keyvalues) {
160fd140e054faaf9bf45c4dfe226e7f6ca8154c575Wu-cheng Li        mSecondLevelIndicatorControlBar.overrideSettings(keyvalues);
161ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang    }
162b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang
163b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang    @Override
164b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang    public void setEnabled(boolean enabled) {
165b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang        mIndicatorControlBar.setEnabled(enabled);
166b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang        mSecondLevelIndicatorControlBar.setEnabled(enabled);
167b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang    }
1680bb4487fcc7601118111d4545c31dae04651b456Wu-cheng Li
1690bb4487fcc7601118111d4545c31dae04651b456Wu-cheng Li    @Override
1700bb4487fcc7601118111d4545c31dae04651b456Wu-cheng Li    public void enableZoom(boolean enabled) {
1710bb4487fcc7601118111d4545c31dae04651b456Wu-cheng Li        mIndicatorControlBar.enableZoom(enabled);
1720bb4487fcc7601118111d4545c31dae04651b456Wu-cheng Li    }
1732bbd7e182f25816008262f2e2bd9a1a08392c913Chung-yih Wang
1742bbd7e182f25816008262f2e2bd9a1a08392c913Chung-yih Wang    @Override
1752bbd7e182f25816008262f2e2bd9a1a08392c913Chung-yih Wang    public void dismissSecondLevelIndicator() {
1762bbd7e182f25816008262f2e2bd9a1a08392c913Chung-yih Wang        if (mSecondLevelIndicatorControlBar.getVisibility() == View.VISIBLE) {
1772bbd7e182f25816008262f2e2bd9a1a08392c913Chung-yih Wang            leaveSecondLevelIndicator();
1782bbd7e182f25816008262f2e2bd9a1a08392c913Chung-yih Wang        }
1792bbd7e182f25816008262f2e2bd9a1a08392c913Chung-yih Wang    }
180adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang}
181