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