| /* |
| * Copyright (C) 2012 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.camera; |
| |
| import android.content.Context; |
| import android.view.LayoutInflater; |
| |
| import com.android.camera.ui.AbstractSettingPopup; |
| import com.android.camera.ui.ListPrefSettingPopup; |
| import com.android.camera.ui.MoreSettingPopup; |
| import com.android.camera.ui.PieItem; |
| import com.android.camera.ui.PieItem.OnClickListener; |
| import com.android.camera.ui.PieRenderer; |
| import com.android.camera.ui.TimeIntervalPopup; |
| |
| public class VideoController extends PieController |
| implements MoreSettingPopup.Listener, |
| ListPrefSettingPopup.Listener, |
| TimeIntervalPopup.Listener { |
| |
| |
| private static String TAG = "CAM_videocontrol"; |
| private static float FLOAT_PI_DIVIDED_BY_TWO = (float) Math.PI / 2; |
| |
| private VideoModule mModule; |
| private String[] mOtherKeys; |
| private AbstractSettingPopup mPopup; |
| |
| private static final int POPUP_NONE = 0; |
| private static final int POPUP_FIRST_LEVEL = 1; |
| private static final int POPUP_SECOND_LEVEL = 2; |
| private int mPopupStatus; |
| |
| public VideoController(CameraActivity activity, VideoModule module, PieRenderer pie) { |
| super(activity, pie); |
| mModule = module; |
| } |
| |
| public void initialize(PreferenceGroup group) { |
| super.initialize(group); |
| mPopup = null; |
| mPopupStatus = POPUP_NONE; |
| float sweep = FLOAT_PI_DIVIDED_BY_TWO / 2; |
| |
| addItem(CameraSettings.KEY_VIDEOCAMERA_FLASH_MODE, FLOAT_PI_DIVIDED_BY_TWO - sweep, sweep); |
| addItem(CameraSettings.KEY_WHITE_BALANCE, 3 * FLOAT_PI_DIVIDED_BY_TWO + sweep, sweep); |
| PieItem item = makeItem(R.drawable.ic_switch_video_facing_holo_light); |
| item.setFixedSlice(FLOAT_PI_DIVIDED_BY_TWO + sweep, sweep); |
| item.setOnClickListener(new OnClickListener() { |
| |
| @Override |
| public void onClick(PieItem item) { |
| // Find the index of next camera. |
| ListPreference pref = mPreferenceGroup.findPreference(CameraSettings.KEY_CAMERA_ID); |
| if (pref != null) { |
| int index = pref.findIndexOfValue(pref.getValue()); |
| CharSequence[] values = pref.getEntryValues(); |
| index = (index + 1) % values.length; |
| int newCameraId = Integer.parseInt((String) values[index]); |
| mListener.onCameraPickerClicked(newCameraId); |
| } |
| } |
| }); |
| mRenderer.addItem(item); |
| mOtherKeys = new String[] { |
| CameraSettings.KEY_VIDEO_EFFECT, |
| CameraSettings.KEY_VIDEO_TIME_LAPSE_FRAME_INTERVAL, |
| CameraSettings.KEY_VIDEO_QUALITY, |
| CameraSettings.KEY_RECORD_LOCATION}; |
| |
| item = makeItem(R.drawable.ic_settings_holo_light); |
| item.setFixedSlice(FLOAT_PI_DIVIDED_BY_TWO * 3, sweep); |
| item.setOnClickListener(new OnClickListener() { |
| @Override |
| public void onClick(PieItem item) { |
| if (mPopup == null || mPopupStatus != POPUP_FIRST_LEVEL) { |
| initializePopup(); |
| mPopupStatus = POPUP_FIRST_LEVEL; |
| } |
| mModule.showPopup(mPopup); |
| } |
| }); |
| mRenderer.addItem(item); |
| } |
| |
| protected void setCameraId(int cameraId) { |
| ListPreference pref = mPreferenceGroup.findPreference(CameraSettings.KEY_CAMERA_ID); |
| pref.setValue("" + cameraId); |
| } |
| |
| @Override |
| public void reloadPreferences() { |
| super.reloadPreferences(); |
| if (mPopup != null) { |
| mPopup.reloadPreference(); |
| } |
| } |
| |
| @Override |
| public void overrideSettings(final String ... keyvalues) { |
| super.overrideSettings(keyvalues); |
| if (mPopup == null || mPopupStatus != POPUP_FIRST_LEVEL) { |
| mPopupStatus = POPUP_FIRST_LEVEL; |
| initializePopup(); |
| } |
| ((MoreSettingPopup) mPopup).overrideSettings(keyvalues); |
| } |
| |
| @Override |
| // Hit when an item in the second-level popup gets selected |
| public void onListPrefChanged(ListPreference pref) { |
| if (mPopup != null) { |
| if (mPopupStatus == POPUP_SECOND_LEVEL) { |
| mModule.dismissPopup(true); |
| } |
| } |
| super.onSettingChanged(pref); |
| } |
| |
| protected void initializePopup() { |
| LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService( |
| Context.LAYOUT_INFLATER_SERVICE); |
| |
| MoreSettingPopup popup = (MoreSettingPopup) inflater.inflate( |
| R.layout.more_setting_popup, null, false); |
| popup.setSettingChangedListener(this); |
| popup.initialize(mPreferenceGroup, mOtherKeys); |
| if (mActivity.isSecureCamera()) { |
| // Prevent location preference from getting changed in secure camera mode |
| popup.setPreferenceEnabled(CameraSettings.KEY_RECORD_LOCATION, false); |
| } |
| mPopup = popup; |
| } |
| |
| public void popupDismissed(boolean topPopupOnly) { |
| // if the 2nd level popup gets dismissed |
| if (mPopupStatus == POPUP_SECOND_LEVEL) { |
| initializePopup(); |
| mPopupStatus = POPUP_FIRST_LEVEL; |
| if (topPopupOnly) mModule.showPopup(mPopup); |
| } |
| } |
| |
| @Override |
| // Hit when an item in the first-level popup gets selected, then bring up |
| // the second-level popup |
| public void onPreferenceClicked(ListPreference pref) { |
| if (mPopupStatus != POPUP_FIRST_LEVEL) return; |
| |
| LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService( |
| Context.LAYOUT_INFLATER_SERVICE); |
| |
| if (CameraSettings.KEY_VIDEO_TIME_LAPSE_FRAME_INTERVAL.equals(pref.getKey())) { |
| TimeIntervalPopup timeInterval = (TimeIntervalPopup) inflater.inflate( |
| R.layout.time_interval_popup, null, false); |
| timeInterval.initialize((IconListPreference) pref); |
| timeInterval.setSettingChangedListener(this); |
| mModule.dismissPopup(true); |
| mPopup = timeInterval; |
| } else { |
| ListPrefSettingPopup basic = (ListPrefSettingPopup) inflater.inflate( |
| R.layout.list_pref_setting_popup, null, false); |
| basic.initialize(pref); |
| basic.setSettingChangedListener(this); |
| mModule.dismissPopup(true); |
| mPopup = basic; |
| } |
| mModule.showPopup(mPopup); |
| mPopupStatus = POPUP_SECOND_LEVEL; |
| } |
| |
| } |