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;
216b3f2ff14ca0a0d694d5af13e4d5a392c8552191Chung-yih Wangimport com.android.camera.Util;
22adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang
23bed7386688cd7810cba23732ab71f370fe3222ffChung-yih Wangimport android.content.Context;
24bed7386688cd7810cba23732ab71f370fe3222ffChung-yih Wangimport android.util.AttributeSet;
25ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wangimport android.view.MotionEvent;
26adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wangimport android.view.View;
27adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wangimport android.widget.ImageView;
284de149ceb47f2c251f646419907424bfb67d2b64Owen Lin
29bed7386688cd7810cba23732ab71f370fe3222ffChung-yih Wang/**
30adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang * A view that contains the top-level indicator control.
31bed7386688cd7810cba23732ab71f370fe3222ffChung-yih Wang */
32ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wangpublic class IndicatorControlBar extends IndicatorControl implements
33b7d0a0704e437a1892fbf2a6e5138cf36df9fde8Chung-yih Wang        View.OnClickListener {
34ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang    private static final String TAG = "IndicatorControlBar";
35adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang
366b3f2ff14ca0a0d694d5af13e4d5a392c8552191Chung-yih Wang    // Space between indicator icons.
376b3f2ff14ca0a0d694d5af13e4d5a392c8552191Chung-yih Wang    public static final int ICON_SPACING = Util.dpToPixel(16);
386b3f2ff14ca0a0d694d5af13e4d5a392c8552191Chung-yih Wang
39adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang    private ImageView mZoomIcon;
40adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang    private ImageView mSecondLevelIcon;
41b7d0a0704e437a1892fbf2a6e5138cf36df9fde8Chung-yih Wang    private ZoomControlBar mZoomControl;
424de149ceb47f2c251f646419907424bfb67d2b64Owen Lin
43ff45331706e2fe361b4ff736d90b0ad4af0e7be9Chung-yih Wang    public IndicatorControlBar(Context context, AttributeSet attrs) {
44bed7386688cd7810cba23732ab71f370fe3222ffChung-yih Wang        super(context, attrs);
454de149ceb47f2c251f646419907424bfb67d2b64Owen Lin    }
464de149ceb47f2c251f646419907424bfb67d2b64Owen Lin
476176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang    @Override
486176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang    protected void onFinishInflate() {
496176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang        mSecondLevelIcon = (ImageView)
506176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang                findViewById(R.id.second_level_indicator_bar_icon);
516176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang        mSecondLevelIcon.setOnClickListener(this);
526176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang    }
536176dfc23f5a092ca1b2ee3d07d7076821ec6095Chung-yih Wang
54adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang    public void initialize(Context context, PreferenceGroup group,
55b7d0a0704e437a1892fbf2a6e5138cf36df9fde8Chung-yih Wang            boolean zoomSupported) {
56ab2ffa88872149978823c3184d0af162d3cdca13Chung-yih Wang        setPreferenceGroup(group);
57bed7386688cd7810cba23732ab71f370fe3222ffChung-yih Wang
5895788ace8ad3630312f2f94544690c448c935f9eChung-yih Wang        // Add CameraPicker control.
59ed6373cd34393dfdda8d18a03705c83bfff1f535Chung-yih Wang        initializeCameraPicker();
6077665404048135a5a96d709378d6f55518b868e2Wu-cheng Li        if (mCameraPicker != null) {
6177665404048135a5a96d709378d6f55518b868e2Wu-cheng Li            mCameraPicker.setBackgroundResource(R.drawable.bg_pressed);
6277665404048135a5a96d709378d6f55518b868e2Wu-cheng Li        }
6395788ace8ad3630312f2f94544690c448c935f9eChung-yih Wang
64b7d0a0704e437a1892fbf2a6e5138cf36df9fde8Chung-yih Wang        // Add the ZoomControl if supported.
65adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang        if (zoomSupported) {
66b7d0a0704e437a1892fbf2a6e5138cf36df9fde8Chung-yih Wang            mZoomControl = (ZoomControlBar) findViewById(R.id.zoom_control);
67b7d0a0704e437a1892fbf2a6e5138cf36df9fde8Chung-yih Wang            mZoomControl.setVisibility(View.VISIBLE);
68adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang        }
69adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang        requestLayout();
70adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang    }
71bed7386688cd7810cba23732ab71f370fe3222ffChung-yih Wang
72d2202f9677fcc5f3f2b3e950c35aefe80da14a8aChung-yih Wang    @Override
73d2202f9677fcc5f3f2b3e950c35aefe80da14a8aChung-yih Wang    public boolean dispatchTouchEvent(MotionEvent event) {
74d2202f9677fcc5f3f2b3e950c35aefe80da14a8aChung-yih Wang        super.dispatchTouchEvent(event);
75d2202f9677fcc5f3f2b3e950c35aefe80da14a8aChung-yih Wang        // We need to consume the event, or it will trigger tap-to-focus.
76d2202f9677fcc5f3f2b3e950c35aefe80da14a8aChung-yih Wang        return true;
77d2202f9677fcc5f3f2b3e950c35aefe80da14a8aChung-yih Wang    }
78d2202f9677fcc5f3f2b3e950c35aefe80da14a8aChung-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) {
89bed7386688cd7810cba23732ab71f370fe3222ffChung-yih Wang        int count = getChildCount();
90bed7386688cd7810cba23732ab71f370fe3222ffChung-yih Wang        if (count == 0) return;
914b9791ff6763d310c750892b774119ad750c512aChih-yu Huang
924b9791ff6763d310c750892b774119ad750c512aChih-yu Huang        // We have (equal) paddings at left and right, but no padding at top or
934b9791ff6763d310c750892b774119ad750c512aChih-yu Huang        // bottom.
944b9791ff6763d310c750892b774119ad750c512aChih-yu Huang        int padding = getPaddingLeft();
954b9791ff6763d310c750892b774119ad750c512aChih-yu Huang        int width = right - left;
96d33109730e0ab81230f84e2bd35599e8e24fc4baChung-yih Wang        int height = bottom - top;
97b7d0a0704e437a1892fbf2a6e5138cf36df9fde8Chung-yih Wang
984b9791ff6763d310c750892b774119ad750c512aChih-yu Huang        // We want the icons to be square (size x size)
994b9791ff6763d310c750892b774119ad750c512aChih-yu Huang        int size = height;
1004b9791ff6763d310c750892b774119ad750c512aChih-yu Huang
1014b9791ff6763d310c750892b774119ad750c512aChih-yu Huang        mSecondLevelIcon.layout(padding, 0, padding + size, size);
102b7d0a0704e437a1892fbf2a6e5138cf36df9fde8Chung-yih Wang
103b7d0a0704e437a1892fbf2a6e5138cf36df9fde8Chung-yih Wang        // Layout the zoom control if required.
104b7d0a0704e437a1892fbf2a6e5138cf36df9fde8Chung-yih Wang        if (mZoomControl != null)  {
1054b9791ff6763d310c750892b774119ad750c512aChih-yu Huang            mZoomControl.layout(padding + size, 0, width - padding - size, size);
106b7d0a0704e437a1892fbf2a6e5138cf36df9fde8Chung-yih Wang        }
107b7d0a0704e437a1892fbf2a6e5138cf36df9fde8Chung-yih Wang
108d33109730e0ab81230f84e2bd35599e8e24fc4baChung-yih Wang        if (mCameraPicker != null) {
1094b9791ff6763d310c750892b774119ad750c512aChih-yu Huang            mCameraPicker.layout(width - padding - size, 0, width - padding, size);
110d33109730e0ab81230f84e2bd35599e8e24fc4baChung-yih Wang        }
111f5876dbd29607a0e9762f88e9db6fa35ffb20067Owen Lin    }
112b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang
113b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang    @Override
114b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang    public void setEnabled(boolean enabled) {
115b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang        super.setEnabled(enabled);
116b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang        if (mCurrentMode == MODE_VIDEO) {
117b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang            mSecondLevelIcon.setVisibility(enabled ? View.VISIBLE : View.INVISIBLE);
118b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang        } else {
119b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang            // We also disable the zoom button during snapshot.
1200bb4487fcc7601118111d4545c31dae04651b456Wu-cheng Li            enableZoom(enabled);
121b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang        }
122b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang        mSecondLevelIcon.setEnabled(enabled);
123b1ce29490ec61847602ece16f3745417787d3d8fChung-yih Wang    }
1240bb4487fcc7601118111d4545c31dae04651b456Wu-cheng Li
1250bb4487fcc7601118111d4545c31dae04651b456Wu-cheng Li    public void enableZoom(boolean enabled) {
126b7d0a0704e437a1892fbf2a6e5138cf36df9fde8Chung-yih Wang        if (mZoomControl != null)  mZoomControl.setEnabled(enabled);
1270bb4487fcc7601118111d4545c31dae04651b456Wu-cheng Li    }
1284de149ceb47f2c251f646419907424bfb67d2b64Owen Lin}
129