IndicatorControlBarContainer.java revision 507aaa672eb8ad5464159021f1b3596cafeede1d
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 */ 35ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wangpublic class IndicatorControlBarContainer extends IndicatorControlContainer 36ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang implements OnIndicatorEventListener { 37ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang private static final String TAG = "IndicatorControlBarContainer"; 38adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang 39adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang private Animation mFadeIn, mFadeOut; 40507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang private Animation mSecondLevelFadeIn, mSecondLevelFadeOut; 41ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang private IndicatorControlBar mIndicatorControlBar; 42adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang private ZoomControlBar mZoomControlBar; 43d2202f9677fcc5f3f2b3e950c35aefe80da14a8aChung-yih Wang private ZoomIndexBar mZoomIndexBar; 44ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang private SecondLevelIndicatorControlBar mSecondLevelIndicatorControlBar; 45adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang 46ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang public IndicatorControlBarContainer(Context context, AttributeSet attrs) { 47adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang super(context, attrs); 486176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang mFadeIn = AnimationUtils.loadAnimation( 49507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang context, R.anim.grow_fade_in_from_top); 506176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang mFadeOut = AnimationUtils.loadAnimation( 51507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang context, R.anim.shrink_fade_out_from_bottom); 52507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang mFadeOut.setAnimationListener(mAnimationListener); 53507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang mSecondLevelFadeIn = AnimationUtils.loadAnimation( 54507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang context, R.anim.grow_fade_in_from_bottom); 55507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang mSecondLevelFadeOut = AnimationUtils.loadAnimation( 566176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang context, R.anim.shrink_fade_out_from_top); 57507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang mSecondLevelFadeOut.setAnimationListener(mAnimationListener); 58adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang } 59adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang 60adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang @Override 616176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang protected void onFinishInflate() { 626176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang mZoomControlBar = (ZoomControlBar) findViewById(R.id.zoom_control); 63adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang mZoomControlBar.setOnIndicatorEventListener(this); 64d2202f9677fcc5f3f2b3e950c35aefe80da14a8aChung-yih Wang mZoomIndexBar = (ZoomIndexBar) findViewById(R.id.zoom_index_bar); 65d2202f9677fcc5f3f2b3e950c35aefe80da14a8aChung-yih Wang mZoomControlBar.setOnZoomIndexChangeListener(mZoomIndexBar); 660935e09bb12a1886a801713bbd78bbc20bf4ea4eChih-yu Huang mIndicatorControlBar = (IndicatorControlBar) 670935e09bb12a1886a801713bbd78bbc20bf4ea4eChih-yu Huang findViewById(R.id.indicator_bar); 68ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mIndicatorControlBar.setOnIndicatorEventListener(this); 69ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mSecondLevelIndicatorControlBar = (SecondLevelIndicatorControlBar) 70adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang findViewById(R.id.second_level_indicator_bar); 71ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mSecondLevelIndicatorControlBar.setOnIndicatorEventListener(this); 726176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang } 73adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang 746176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang @Override 756176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang public void initialize(Context context, PreferenceGroup group, 766176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang String flashSetting, boolean isZoomSupported, 776176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang String[] secondLevelKeys, String[] secondLevelOtherSettingKeys) { 786176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang 796176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang // We need to show/hide the zoom slider icon accordingly. 806176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang // From UI spec, we have camera_flash setting on the first level. 816176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang mIndicatorControlBar.initialize(context, group, flashSetting, 826176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang isZoomSupported); 836176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang 846176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang mSecondLevelIndicatorControlBar.initialize(context, group, 856176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang secondLevelKeys, secondLevelOtherSettingKeys); 86adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang } 87adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang 88adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang public void setDegree(int degree) { 89ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mIndicatorControlBar.setDegree(degree); 90ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mSecondLevelIndicatorControlBar.setDegree(degree); 91adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang mZoomControlBar.setDegree(degree); 92d2202f9677fcc5f3f2b3e950c35aefe80da14a8aChung-yih Wang mZoomIndexBar.setDegree(degree); 93adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang } 94adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang 95ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang @Override 96ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang public boolean dispatchTouchEvent(MotionEvent event) { 97ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang if (mIndicatorControlBar.getVisibility() == View.VISIBLE) { 98ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang return mIndicatorControlBar.dispatchTouchEvent(event); 99ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang } else if (mSecondLevelIndicatorControlBar.getVisibility() == View.VISIBLE) { 100ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang return mSecondLevelIndicatorControlBar.dispatchTouchEvent(event); 101ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang } else if (mZoomControlBar.getVisibility() == View.VISIBLE) { 102ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang return mZoomControlBar.dispatchTouchEvent(event); 103ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang } 104d2202f9677fcc5f3f2b3e950c35aefe80da14a8aChung-yih Wang return true; 105ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang } 106ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang 107507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang private AnimationListener mAnimationListener = new AnimationListener() { 108507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang public void onAnimationEnd(Animation animation) { 109507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang if (animation == mSecondLevelFadeOut) { 110507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang mSecondLevelIndicatorControlBar.setVisibility(View.GONE); 111507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang } else if (animation == mFadeOut) { 112507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang mIndicatorControlBar.setVisibility(View.GONE); 113507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang } 114507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang } 115507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang 116507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang public void onAnimationRepeat(Animation animation) { 117507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang } 118507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang 119507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang public void onAnimationStart(Animation animation) { 120507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang } 121507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang }; 122507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang 123adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang public void onIndicatorEvent(int event) { 124adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang switch (event) { 125adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang case OnIndicatorEventListener.EVENT_ENTER_SECOND_LEVEL_INDICATOR_BAR: 126507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang mIndicatorControlBar.startAnimation(mFadeOut); 127507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang mSecondLevelIndicatorControlBar.startAnimation(mSecondLevelFadeIn); 128ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mSecondLevelIndicatorControlBar.setVisibility(View.VISIBLE); 129adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang break; 130adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang 131adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang case OnIndicatorEventListener.EVENT_LEAVE_SECOND_LEVEL_INDICATOR_BAR: 132507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang mIndicatorControlBar.startAnimation(mFadeIn); 133ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mIndicatorControlBar.setVisibility(View.VISIBLE); 134507aaa672eb8ad5464159021f1b3596cafeede1dChung-yih Wang mSecondLevelIndicatorControlBar.startAnimation(mSecondLevelFadeOut); 135adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang break; 136adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang 137ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang case OnIndicatorEventListener.EVENT_ENTER_ZOOM_CONTROL: 138ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mIndicatorControlBar.setVisibility(View.GONE); 139adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang mZoomControlBar.setVisibility(View.VISIBLE); 140d2202f9677fcc5f3f2b3e950c35aefe80da14a8aChung-yih Wang mZoomIndexBar.setVisibility(View.VISIBLE); 141ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang mZoomControlBar.startZoomControl(); 142adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang break; 143adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang 144ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang case OnIndicatorEventListener.EVENT_LEAVE_ZOOM_CONTROL: 145adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang mZoomControlBar.setVisibility(View.GONE); 146d2202f9677fcc5f3f2b3e950c35aefe80da14a8aChung-yih Wang mZoomIndexBar.setVisibility(View.GONE); 147ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mIndicatorControlBar.setVisibility(View.VISIBLE); 148adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang break; 149adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang } 150adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang } 151adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang 152adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang public void reloadPreferences() { 153ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mIndicatorControlBar.reloadPreferences(); 154ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mSecondLevelIndicatorControlBar.reloadPreferences(); 155adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang } 156adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang 157adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang public void setListener(OnPreferenceChangedListener listener) { 158ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mIndicatorControlBar.setListener(listener); 159ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mSecondLevelIndicatorControlBar.setListener(listener); 160adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang } 161adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang 162adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang @Override 163adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang public View getActiveSettingPopup() { 164ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang if (mIndicatorControlBar.getVisibility() == View.VISIBLE) { 165ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang return mIndicatorControlBar.getActiveSettingPopup(); 166ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang } else if (mSecondLevelIndicatorControlBar.getVisibility() == View.VISIBLE) { 167ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang return mSecondLevelIndicatorControlBar.getActiveSettingPopup(); 168adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang } 169adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang return null; 170adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang } 171adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang 172adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang public boolean dismissSettingPopup() { 173ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang if (mIndicatorControlBar.getVisibility() == View.VISIBLE) { 174ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang return mIndicatorControlBar.dismissSettingPopup(); 175ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang } else if (mSecondLevelIndicatorControlBar.getVisibility() == View.VISIBLE) { 176ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang return mSecondLevelIndicatorControlBar.dismissSettingPopup(); 177adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang } 178adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang return false; 179adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang } 180ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang 181ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang @Override 182ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang public void overrideSettings(final String ... keyvalues) { 183ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang if (mSecondLevelIndicatorControlBar.getVisibility() == View.VISIBLE) { 184ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mSecondLevelIndicatorControlBar.overrideSettings(keyvalues); 185ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang } 186ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang } 187b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang 188b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang @Override 189b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang public void setEnabled(boolean enabled) { 190b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang mIndicatorControlBar.setEnabled(enabled); 191b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang mSecondLevelIndicatorControlBar.setEnabled(enabled); 192b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang } 1930bb4487fcc7601118111d4545c31dae04651b456Wu-cheng Li 1940bb4487fcc7601118111d4545c31dae04651b456Wu-cheng Li @Override 1950bb4487fcc7601118111d4545c31dae04651b456Wu-cheng Li public void enableZoom(boolean enabled) { 1960bb4487fcc7601118111d4545c31dae04651b456Wu-cheng Li mIndicatorControlBar.enableZoom(enabled); 1970bb4487fcc7601118111d4545c31dae04651b456Wu-cheng Li } 198adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang} 199