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