1ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang/* 2ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang * Copyright (C) 2011 The Android Open Source Project 3ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang * 4ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang * Licensed under the Apache License, Version 2.0 (the "License"); 5ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang * you may not use this file except in compliance with the License. 6ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang * You may obtain a copy of the License at 7ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang * 8ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang * http://www.apache.org/licenses/LICENSE-2.0 9ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang * 10ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang * Unless required by applicable law or agreed to in writing, software 11ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang * distributed under the License is distributed on an "AS IS" BASIS, 12ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang * See the License for the specific language governing permissions and 14ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang * limitations under the License. 15ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang */ 16ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang 17ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wangpackage com.android.camera.ui; 18ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang 19ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wangimport com.android.camera.CameraPreference.OnPreferenceChangedListener; 20ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wangimport com.android.camera.PreferenceGroup; 21ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wangimport com.android.camera.R; 22ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wangimport com.android.camera.Util; 23ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang 24ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wangimport android.content.Context; 25ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wangimport android.util.AttributeSet; 26ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wangimport android.view.MotionEvent; 27ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wangimport android.view.View; 28ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang 29ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang/** 30ed6373cd34393dfdda8d18a03705c83bfff1f535Chung-yih Wang * On the tablet UI, we have IndicatorControlWheelContainer which contains a 3191d70ce513ffee99b216f88a92650e1b63575289Chung-yih Wang * ShutterButton, an IndicatorControlWheel(which combines first-level and 3291d70ce513ffee99b216f88a92650e1b63575289Chung-yih Wang * second-level indicators and a ZoomControlWheel). 33ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang */ 342bbd7e182f25816008262f2e2bd9a1a08392c913Chung-yih Wangpublic class IndicatorControlWheelContainer extends IndicatorControlContainer { 35ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang public static final int STROKE_WIDTH = 87; 36ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang public static final int SHUTTER_BUTTON_RADIUS = 74; 37ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang public static final int FULL_WHEEL_RADIUS = 93; 38ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang 39ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang private static final String TAG = "IndicatorControlWheelContainer"; 40ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang 41ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang private View mShutterButton; 42ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang private double mShutterButtonRadius; 43ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang private IndicatorControlWheel mIndicatorControlWheel; 44ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang private int mCenterX, mCenterY; 45ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang 46ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang public IndicatorControlWheelContainer(Context context, AttributeSet attrs) { 47ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang super(context, attrs); 48ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang } 49ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang 50ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang @Override 51f03611c90bb17682ae101b5fe6a7c45c1bf880f1Chung-yih Wang protected void onFinishInflate() { 52ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mShutterButton = findViewById(R.id.shutter_button); 53ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mShutterButtonRadius = Util.dpToPixel(SHUTTER_BUTTON_RADIUS); 54ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang 55ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mIndicatorControlWheel = (IndicatorControlWheel) findViewById( 56ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang R.id.indicator_control_wheel); 57f03611c90bb17682ae101b5fe6a7c45c1bf880f1Chung-yih Wang } 58f03611c90bb17682ae101b5fe6a7c45c1bf880f1Chung-yih Wang 59f03611c90bb17682ae101b5fe6a7c45c1bf880f1Chung-yih Wang public void initialize(Context context, PreferenceGroup group, 60b7d0a0704e437a1892fbf2a6e5138cf36df9fde8Chung-yih Wang boolean isZoomSupported, String[] keys, String[] otherSettingKeys) { 61b7d0a0704e437a1892fbf2a6e5138cf36df9fde8Chung-yih Wang mIndicatorControlWheel.initialize(context, group, isZoomSupported, 62b7d0a0704e437a1892fbf2a6e5138cf36df9fde8Chung-yih Wang keys, otherSettingKeys); 63ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang } 64ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang 65ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang public void onIndicatorEvent(int event) { 66ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang } 67ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang 68ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang @Override 69ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang public boolean dispatchTouchEvent(MotionEvent event) { 70ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang if (!onFilterTouchEventForSecurity(event)) return false; 71ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang 72ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang int action = event.getAction(); 73ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang 74ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang double dx = event.getX() - mCenterX; 75ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang double dy = mCenterY - event.getY(); 76ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang double radius = Math.sqrt(dx * dx + dy * dy); 77ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang 78ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang // Check if the event should be dispatched to the shutter button. 79ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang if (radius <= mShutterButtonRadius) { 80ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang if (mIndicatorControlWheel.getVisibility() == View.VISIBLE) { 81ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang mIndicatorControlWheel.onTouchOutBound(); 82ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang } 83ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang if (action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_UP) { 84ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang return mShutterButton.dispatchTouchEvent(event); 85ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang } 86ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang return false; 87ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang } 88ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang 89ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang if (mShutterButton.isPressed()) { 90ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang // Send cancel to the shutter button if it was pressed. 91ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang event.setAction(MotionEvent.ACTION_CANCEL); 92ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mShutterButton.dispatchTouchEvent(event); 93ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang return true; 94ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang } 95ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang 9691d70ce513ffee99b216f88a92650e1b63575289Chung-yih Wang return mIndicatorControlWheel.dispatchTouchEvent(event); 97ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang } 98ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang 99ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang @Override 100ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang protected void onLayout( 101ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang boolean changed, int left, int top, int right, int bottom) { 102ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang 103ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang // Layout the shutter button. 104ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang int shutterButtonWidth = mShutterButton.getMeasuredWidth(); 105ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang int shutterButtonHeight = mShutterButton.getMeasuredHeight(); 106ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mCenterX = right - left - Util.dpToPixel(FULL_WHEEL_RADIUS); 107ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mCenterY = (bottom - top) / 2; 108ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mShutterButton.layout(right - left - shutterButtonWidth, 109ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mCenterY - shutterButtonHeight / 2, 110ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang right - left, 111ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mCenterY + shutterButtonHeight - shutterButtonHeight / 2); 112ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang // Layout the control wheel. 113ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mIndicatorControlWheel.layout(0, 0, right - left, bottom - top); 114ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang } 115ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang 116ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang @Override 117ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang protected void onMeasure(int widthSpec, int heightSpec) { 118ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang // Measure all children. 119ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang int freeSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); 120ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mShutterButton.measure(freeSpec, freeSpec); 121ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mIndicatorControlWheel.measure(freeSpec, freeSpec); 122ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang 123ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang // Measure myself. Add some buffer for highlight arc. 124ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang int desiredWidth = mShutterButton.getMeasuredWidth() 125ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang + IndicatorControlWheel.HIGHLIGHT_WIDTH * 4; 126ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang int desiredHeight = mShutterButton.getMeasuredHeight() 127ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang + IndicatorControlWheel.HIGHLIGHT_WIDTH * 4; 128ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang int widthMode = MeasureSpec.getMode(widthSpec); 129ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang int heightMode = MeasureSpec.getMode(heightSpec); 130ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang int measuredWidth, measuredHeight; 131ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang if (widthMode == MeasureSpec.UNSPECIFIED) { 132ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang measuredWidth = desiredWidth; 133ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang } else if (widthMode == MeasureSpec.AT_MOST) { 134ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang measuredWidth = Math.min(desiredWidth, MeasureSpec.getSize(widthSpec)); 135ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang } else { // MeasureSpec.EXACTLY 136ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang measuredWidth = MeasureSpec.getSize(widthSpec); 137ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang } 138ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang if (heightMode == MeasureSpec.UNSPECIFIED) { 139ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang measuredHeight = desiredHeight; 140ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang } else if (heightMode == MeasureSpec.AT_MOST) { 141ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang measuredHeight = Math.min(desiredHeight, MeasureSpec.getSize(heightSpec)); 142ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang } else { // MeasureSpec.EXACTLY 143ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang measuredHeight = MeasureSpec.getSize(heightSpec); 144ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang } 145ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang setMeasuredDimension(measuredWidth, measuredHeight); 146ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang } 147ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang 148ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang @Override 149ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang public void setListener(OnPreferenceChangedListener listener) { 150ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mIndicatorControlWheel.setListener(listener); 151ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang } 152ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang 153ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang @Override 154ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang public void reloadPreferences() { 155ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mIndicatorControlWheel.reloadPreferences(); 156ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang } 157ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang 158ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang @Override 159ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang public View getActiveSettingPopup() { 160ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang return mIndicatorControlWheel.getActiveSettingPopup(); 161ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang } 162ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang 163ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang @Override 164ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang public boolean dismissSettingPopup() { 165ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang return mIndicatorControlWheel.dismissSettingPopup(); 166ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang } 167ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang 168ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang @Override 1693ebe49d8f1b4defb7cfd4850a14e795aada2ebd1Chih-yu Huang public void setOrientation(int orientation) { 1703ebe49d8f1b4defb7cfd4850a14e795aada2ebd1Chih-yu Huang mIndicatorControlWheel.setOrientation(orientation); 171ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang } 172ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang 173ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang public void startTimeLapseAnimation(int timeLapseInterval, long startTime) { 174ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mIndicatorControlWheel.startTimeLapseAnimation( 175ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang timeLapseInterval, startTime); 176ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang } 177ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang 178ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang public void stopTimeLapseAnimation() { 179ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mIndicatorControlWheel.stopTimeLapseAnimation(); 180ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang } 181ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang 182ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang @Override 183ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang public void setEnabled(boolean enabled) { 184ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mIndicatorControlWheel.setEnabled(enabled); 185ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang } 186ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang 187ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang @Override 1880bb4487fcc7601118111d4545c31dae04651b456Wu-cheng Li public void enableZoom(boolean enabled) { 1890bb4487fcc7601118111d4545c31dae04651b456Wu-cheng Li mIndicatorControlWheel.enableZoom(enabled); 1900bb4487fcc7601118111d4545c31dae04651b456Wu-cheng Li } 1910bb4487fcc7601118111d4545c31dae04651b456Wu-cheng Li 1920bb4487fcc7601118111d4545c31dae04651b456Wu-cheng Li @Override 193ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang public void overrideSettings(final String ... keyvalues) { 194ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang mIndicatorControlWheel.overrideSettings(keyvalues); 195ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang } 1962bbd7e182f25816008262f2e2bd9a1a08392c913Chung-yih Wang 1972bbd7e182f25816008262f2e2bd9a1a08392c913Chung-yih Wang @Override 1982bbd7e182f25816008262f2e2bd9a1a08392c913Chung-yih Wang public void dismissSecondLevelIndicator() { 199a18e1141ed70a052d257a641c9a8b6f152a81d95Chung-yih Wang mIndicatorControlWheel.dismissSecondLevelIndicator(); 2002bbd7e182f25816008262f2e2bd9a1a08392c913Chung-yih Wang } 201ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang} 202