IndicatorControlBar.java revision b1ce29490ec61847602ece16f3745417787d3d8f
1ec1dfcb7314d10ff243a922fe4eff66ea699dd77Owen Lin/*
2ec1dfcb7314d10ff243a922fe4eff66ea699dd77Owen Lin * Copyright (C) 2010 The Android Open Source Project
3ec1dfcb7314d10ff243a922fe4eff66ea699dd77Owen Lin *
4ec1dfcb7314d10ff243a922fe4eff66ea699dd77Owen Lin * Licensed under the Apache License, Version 2.0 (the "License");
5ec1dfcb7314d10ff243a922fe4eff66ea699dd77Owen Lin * you may not use this file except in compliance with the License.
6ec1dfcb7314d10ff243a922fe4eff66ea699dd77Owen Lin * You may obtain a copy of the License at
7ec1dfcb7314d10ff243a922fe4eff66ea699dd77Owen Lin *
8ec1dfcb7314d10ff243a922fe4eff66ea699dd77Owen Lin *      http://www.apache.org/licenses/LICENSE-2.0
9ec1dfcb7314d10ff243a922fe4eff66ea699dd77Owen Lin *
10ec1dfcb7314d10ff243a922fe4eff66ea699dd77Owen Lin * Unless required by applicable law or agreed to in writing, software
11ec1dfcb7314d10ff243a922fe4eff66ea699dd77Owen Lin * distributed under the License is distributed on an "AS IS" BASIS,
12ec1dfcb7314d10ff243a922fe4eff66ea699dd77Owen Lin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ec1dfcb7314d10ff243a922fe4eff66ea699dd77Owen Lin * See the License for the specific language governing permissions and
14ec1dfcb7314d10ff243a922fe4eff66ea699dd77Owen Lin * limitations under the License.
15ec1dfcb7314d10ff243a922fe4eff66ea699dd77Owen Lin */
16ec1dfcb7314d10ff243a922fe4eff66ea699dd77Owen Lin
174de149ceb47f2c251f646419907424bfb67d2b64Owen Linpackage com.android.camera.ui;
184de149ceb47f2c251f646419907424bfb67d2b64Owen Lin
19adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wangimport com.android.camera.PreferenceGroup;
20adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wangimport com.android.camera.R;
21adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang
22bed7386688cd7810cba23732ab71f370fe3222ffChung-yih Wangimport android.content.Context;
23bed7386688cd7810cba23732ab71f370fe3222ffChung-yih Wangimport android.util.AttributeSet;
24ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wangimport android.view.MotionEvent;
25adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wangimport android.view.View;
26adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wangimport android.widget.ImageView;
274de149ceb47f2c251f646419907424bfb67d2b64Owen Lin
28bed7386688cd7810cba23732ab71f370fe3222ffChung-yih Wang/**
29adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang * A view that contains the top-level indicator control.
30bed7386688cd7810cba23732ab71f370fe3222ffChung-yih Wang */
31ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wangpublic class IndicatorControlBar extends IndicatorControl implements
32ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang        View.OnClickListener, View.OnTouchListener {
33ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang    private static final String TAG = "IndicatorControlBar";
34adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang
35adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang    private ImageView mZoomIcon;
36adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang    private ImageView mSecondLevelIcon;
374de149ceb47f2c251f646419907424bfb67d2b64Owen Lin
38ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang    public IndicatorControlBar(Context context, AttributeSet attrs) {
39bed7386688cd7810cba23732ab71f370fe3222ffChung-yih Wang        super(context, attrs);
404de149ceb47f2c251f646419907424bfb67d2b64Owen Lin    }
414de149ceb47f2c251f646419907424bfb67d2b64Owen Lin
42adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang    public void initialize(Context context, PreferenceGroup group,
43adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang            String flashSetting, boolean zoomSupported) {
44adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang        // From UI spec, we have camera_flash setting on the first level.
45ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang        setPreferenceGroup(group);
46ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang        addControls(new String[] {flashSetting}, null);
47bed7386688cd7810cba23732ab71f370fe3222ffChung-yih Wang
4895788ace8ad3630312f2f94544690c448c935f9eChung-yih Wang        // Add CameraPicker control.
49ed6373cd34393dfdda8d18a03705c83bfff1f535Chung-yih Wang        initializeCameraPicker();
5095788ace8ad3630312f2f94544690c448c935f9eChung-yih Wang
51adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang        // add Zoom Icon.
52adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang        if (zoomSupported) {
53adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang            mZoomIcon = (ImageView) findViewById(R.id.zoom_control_icon);
54ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang            mZoomIcon.setOnTouchListener(this);
55adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang            mZoomIcon.setVisibility(View.VISIBLE);
56adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang        }
57bed7386688cd7810cba23732ab71f370fe3222ffChung-yih Wang
58adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang        mSecondLevelIcon = (ImageView) findViewById(R.id.second_level_indicator_bar_icon);
59adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang        mSecondLevelIcon.setOnClickListener(this);
60adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang        requestLayout();
61adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang    }
62bed7386688cd7810cba23732ab71f370fe3222ffChung-yih Wang
63d2202f9677fcc5f3f2b3e950c35aefe80da14a8aChung-yih Wang    @Override
64d2202f9677fcc5f3f2b3e950c35aefe80da14a8aChung-yih Wang    public boolean dispatchTouchEvent(MotionEvent event) {
65d2202f9677fcc5f3f2b3e950c35aefe80da14a8aChung-yih Wang        super.dispatchTouchEvent(event);
66d2202f9677fcc5f3f2b3e950c35aefe80da14a8aChung-yih Wang        // We need to consume the event, or it will trigger tap-to-focus.
67d2202f9677fcc5f3f2b3e950c35aefe80da14a8aChung-yih Wang        return true;
68d2202f9677fcc5f3f2b3e950c35aefe80da14a8aChung-yih Wang    }
69d2202f9677fcc5f3f2b3e950c35aefe80da14a8aChung-yih Wang
70ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang    public boolean onTouch(View v, MotionEvent event) {
71adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang        dismissSettingPopup();
72ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang        if (event.getAction() == MotionEvent.ACTION_DOWN) {
73adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang            mOnIndicatorEventListener.onIndicatorEvent(
74ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang                    OnIndicatorEventListener.EVENT_ENTER_ZOOM_CONTROL);
754de149ceb47f2c251f646419907424bfb67d2b64Owen Lin        }
76d2202f9677fcc5f3f2b3e950c35aefe80da14a8aChung-yih Wang        return true;
77ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang    }
78ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang
79ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang    public void onClick(View view) {
80ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang        dismissSettingPopup();
81ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang        // Only for the click on mSecondLevelIcon.
82ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang        mOnIndicatorEventListener.onIndicatorEvent(
83ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang                OnIndicatorEventListener.EVENT_ENTER_SECOND_LEVEL_INDICATOR_BAR);
844de149ceb47f2c251f646419907424bfb67d2b64Owen Lin    }
854de149ceb47f2c251f646419907424bfb67d2b64Owen Lin
864de149ceb47f2c251f646419907424bfb67d2b64Owen Lin    @Override
874de149ceb47f2c251f646419907424bfb67d2b64Owen Lin    protected void onLayout(
884de149ceb47f2c251f646419907424bfb67d2b64Owen Lin            boolean changed, int left, int top, int right, int bottom) {
89adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang        // Layout the static components.
90adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang        super.onLayout(changed, left, top, right, bottom);
91adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang
92bed7386688cd7810cba23732ab71f370fe3222ffChung-yih Wang        int count = getChildCount();
93bed7386688cd7810cba23732ab71f370fe3222ffChung-yih Wang        if (count == 0) return;
94bed7386688cd7810cba23732ab71f370fe3222ffChung-yih Wang        int width = right - left;
9595788ace8ad3630312f2f94544690c448c935f9eChung-yih Wang        int offset = 0;
9695788ace8ad3630312f2f94544690c448c935f9eChung-yih Wang
97adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang        for (int i = 0 ; i < count ; i++) {
9895788ace8ad3630312f2f94544690c448c935f9eChung-yih Wang            View view = getChildAt(i);
99adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang            if (view instanceof IndicatorButton) {
10095788ace8ad3630312f2f94544690c448c935f9eChung-yih Wang                view.layout(0, offset, width, offset + width);
10195788ace8ad3630312f2f94544690c448c935f9eChung-yih Wang                offset += width;
102adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang            }
1034de149ceb47f2c251f646419907424bfb67d2b64Owen Lin        }
10495788ace8ad3630312f2f94544690c448c935f9eChung-yih Wang        if (mCameraPicker != null) mCameraPicker.layout(0, offset, width, offset + width);
105f5876dbd29607a0e9762f88e9db6fa35ffb20067Owen Lin    }
106b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang
107b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang    @Override
108b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang    public void setEnabled(boolean enabled) {
109b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang        super.setEnabled(enabled);
110b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang        if (mCurrentMode == MODE_VIDEO) {
111b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang            mSecondLevelIcon.setVisibility(enabled ? View.VISIBLE : View.INVISIBLE);
112b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang        } else {
113b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang            // We also disable the zoom button during snapshot.
114b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang            if (mZoomIcon != null) mZoomIcon.setEnabled(enabled);
115b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang        }
116b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang        mSecondLevelIcon.setEnabled(enabled);
117b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang    }
1184de149ceb47f2c251f646419907424bfb67d2b64Owen Lin}
119