CameraPicker.java revision adab2bddc93bf4af535cb58e7167bf8690d97d8c
159ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang/*
259ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang * Copyright (C) 2010 The Android Open Source Project
359ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang *
459ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang * Licensed under the Apache License, Version 2.0 (the "License");
559ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang * you may not use this file except in compliance with the License.
659ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang * You may obtain a copy of the License at
759ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang *
859ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang *      http://www.apache.org/licenses/LICENSE-2.0
959ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang *
1059ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang * Unless required by applicable law or agreed to in writing, software
1159ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang * distributed under the License is distributed on an "AS IS" BASIS,
1259ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1359ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang * See the License for the specific language governing permissions and
1459ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang * limitations under the License.
1559ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang */
1659ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang
1759ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wangpackage com.android.camera.ui;
1859ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang
19adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wangimport com.android.camera.CameraPreference.OnPreferenceChangedListener;
2059ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wangimport com.android.camera.ListPreference;
21adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wangimport com.android.camera.R;
2259ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang
2359ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wangimport android.content.Context;
2459ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wangimport android.hardware.Camera.CameraInfo;
2559ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wangimport android.util.AttributeSet;
2659ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wangimport android.view.View;
279e76e8d6eec20739203d213ead1fe1aab3b939aeChung-yih Wangimport android.widget.ImageView;
2859ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang
2959ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang/**
3059ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang * A view for switching the front/back camera.
3159ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang */
32cead50ba3ce2df3bd9fcf06c6f54ea0c6980f0d7repo syncpublic class CameraPicker extends RotateImageView implements View.OnClickListener {
33adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang    private OnPreferenceChangedListener mListener;
3459ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang    private ListPreference mPreference;
3559ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang    private CharSequence[] mCameras;
36adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang    private int mCameraFacing;
3759ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang
38adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang    public CameraPicker(Context context) {
39adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang        super(context);
4059ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang    }
4159ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang
42adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang    public CameraPicker(Context context, AttributeSet attrs) {
43adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang        super(context, attrs);
4459ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang    }
4559ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang
46adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang    public void setListener(OnPreferenceChangedListener listener) {
4759ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang        mListener = listener;
4859ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang    }
4959ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang
5059ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang    public void initialize(ListPreference pref) {
5159ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang        mPreference = pref;
5259ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang        mCameras = pref.getEntryValues();
5359ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang        if (mCameras == null) return;
549e76e8d6eec20739203d213ead1fe1aab3b939aeChung-yih Wang        setOnClickListener(this);
5559ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang        String cameraId = pref.getValue();
5659ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang        setVisibility(View.VISIBLE);
5759ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang        if (mCameras[CameraInfo.CAMERA_FACING_FRONT].equals(cameraId)) {
58adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang            mCameraFacing = CameraInfo.CAMERA_FACING_FRONT;
5959ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang        } else {
60adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang            mCameraFacing = CameraInfo.CAMERA_FACING_BACK;
6159ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang        }
6259ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang    }
6359ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang
64adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang    public void setCameraPickerIcon() {
65adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang        setImageResource((mCameraFacing == CameraInfo.CAMERA_FACING_BACK)
66adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang                ? R.drawable.ic_rotate_camera_facing_back
67adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang                : R.drawable.ic_rotate_camera_facing_forward);
68adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang    }
69adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang
70039f1dc1fd89b5baeed8be05f3f21770cf75d4b3Wu-cheng Li    @Override
7159ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang    public void onClick(View v) {
729e76e8d6eec20739203d213ead1fe1aab3b939aeChung-yih Wang        if (mCameras == null) return;
73adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang        int newCameraIndex = (mCameraFacing == CameraInfo.CAMERA_FACING_BACK)
7459ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang                ? CameraInfo.CAMERA_FACING_FRONT
7559ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang                : CameraInfo.CAMERA_FACING_BACK;
76adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang        mCameraFacing = newCameraIndex;
77adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang        setCameraPickerIcon();
78adab2bddc93bf4af535cb58e7167bf8690d97d8cChung-yih Wang        mPreference.setValue((String) mCameras[mCameraFacing]);
799e76e8d6eec20739203d213ead1fe1aab3b939aeChung-yih Wang        mListener.onSharedPreferenceChanged();
8059ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang    }
8159ddc8c1add2fcffe523e3877baad1b6cc5ba2fbChung-yih Wang}
82