ButtonManager.java revision 6c75164c89f3bbd4f894b9c49a7914a24268a999
118e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren/* 218e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren * Copyright (C) 2013 The Android Open Source Project 318e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren * 418e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren * Licensed under the Apache License, Version 2.0 (the "License"); 518e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren * you may not use this file except in compliance with the License. 618e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren * You may obtain a copy of the License at 718e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren * 818e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren * http://www.apache.org/licenses/LICENSE-2.0 918e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren * 1018e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren * Unless required by applicable law or agreed to in writing, software 1118e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren * distributed under the License is distributed on an "AS IS" BASIS, 1218e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1318e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren * See the License for the specific language governing permissions and 1418e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren * limitations under the License. 1518e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren */ 1618e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren 1718e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgrenpackage com.android.camera; 1818e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren 1959345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Spragueimport android.app.Activity; 200a6a8d8e4e1c9796aac606379a42970cdffb8911Erin Dahlgrenimport android.content.Context; 2159345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Spragueimport android.content.res.TypedArray; 22abf54e2994961395a0feb0b08353e62718443f23Spike Spragueimport android.graphics.drawable.Drawable; 2359345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Spragueimport android.view.LayoutInflater; 2418e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgrenimport android.view.View; 2559345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Spragueimport android.view.ViewGroup; 2659345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Spragueimport android.widget.Button; 2718e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgrenimport android.widget.ImageButton; 28e541dc2d520aae8d45f3c605c3d732e33dd3b616Spike Spragueimport android.widget.LinearLayout; 2918e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren 300a6a8d8e4e1c9796aac606379a42970cdffb8911Erin Dahlgrenimport com.android.camera.app.AppController; 31abf54e2994961395a0feb0b08353e62718443f23Spike Spragueimport com.android.camera.app.CameraAppUI; 3218e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgrenimport com.android.camera.settings.SettingsManager; 3359345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Spragueimport com.android.camera.ui.RadioOptions; 34f80ac9ee5c66671c3a77ac6628fefc86cd39d57eErin Dahlgrenimport com.android.camera.util.PhotoSphereHelper; 3559345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Spragueimport com.android.camera.widget.ModeOptions; 3639f8a7647aa4051a1c260b9496c2db82f93f8667Spike Sprague 371648c36927501ff32bf2918e8a445118d5208731Erin Dahlgrenimport com.android.camera2.R; 381648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren 3918e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren/** 4018e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren * A class for generating pre-initialized 4118e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren * {@link #android.widget.ImageButton}s. 4218e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren */ 431648c36927501ff32bf2918e8a445118d5208731Erin Dahlgrenpublic class ButtonManager implements SettingsManager.OnSettingChangedListener { 4418e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren 4518e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren public static final int BUTTON_FLASH = 0; 460f3c4b4fc9ac87d7d4c3d04c3cb3426c711f57eaSpike Sprague public static final int BUTTON_TORCH = 1; 470f3c4b4fc9ac87d7d4c3d04c3cb3426c711f57eaSpike Sprague public static final int BUTTON_CAMERA = 2; 480f3c4b4fc9ac87d7d4c3d04c3cb3426c711f57eaSpike Sprague public static final int BUTTON_HDRPLUS = 3; 49b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren public static final int BUTTON_HDR = 4; 50b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren public static final int BUTTON_CANCEL = 6; 51b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren public static final int BUTTON_DONE = 7; 52b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren public static final int BUTTON_RETAKE = 8; 53b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren public static final int BUTTON_REVIEW = 9; 54f80ac9ee5c66671c3a77ac6628fefc86cd39d57eErin Dahlgren public static final int BUTTON_GRID_LINES = 11; 55abf54e2994961395a0feb0b08353e62718443f23Spike Sprague public static final int BUTTON_EXPOSURE_COMPENSATION = 12; 566c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu public static final int BUTTON_COUNTDOWN = 13; 574efa8b54c1df4e06f2d3caed2568015a737f9ddaErin Dahlgren 581848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren /** For two state MultiToggleImageButtons, the off index. */ 594efa8b54c1df4e06f2d3caed2568015a737f9ddaErin Dahlgren public static final int OFF = 0; 601848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren /** For two state MultiToggleImageButtons, the on index. */ 614efa8b54c1df4e06f2d3caed2568015a737f9ddaErin Dahlgren public static final int ON = 1; 6218e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren 6318e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren /** A reference to the application's settings manager. */ 6458598dc16e1f5a747fe1407ec1641a5529f423e5Sascha Haeberling private final SettingsManager mSettingsManager; 6518e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren 66a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren /** Bottom bar options toggle buttons. */ 67a9ceaf76b72cb4b499d3d9d90f979bae93bd593dErin Dahlgren private MultiToggleImageButton mButtonCamera; 68a9ceaf76b72cb4b499d3d9d90f979bae93bd593dErin Dahlgren private MultiToggleImageButton mButtonFlash; 69a9ceaf76b72cb4b499d3d9d90f979bae93bd593dErin Dahlgren private MultiToggleImageButton mButtonHdr; 70a9ceaf76b72cb4b499d3d9d90f979bae93bd593dErin Dahlgren private MultiToggleImageButton mButtonGridlines; 716c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu private MultiToggleImageButton mButtonCountdown; 721848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren 731848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren /** Intent UI buttons. */ 741848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren private ImageButton mButtonCancel; 751848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren private ImageButton mButtonDone; 761848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren private ImageButton mButtonRetake; // same as review. 771848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren 78abf54e2994961395a0feb0b08353e62718443f23Spike Sprague private ImageButton mButtonExposureCompensation; 79abf54e2994961395a0feb0b08353e62718443f23Spike Sprague private ImageButton mExposureN2; 80abf54e2994961395a0feb0b08353e62718443f23Spike Sprague private ImageButton mExposureN1; 81abf54e2994961395a0feb0b08353e62718443f23Spike Sprague private ImageButton mExposure0; 82abf54e2994961395a0feb0b08353e62718443f23Spike Sprague private ImageButton mExposureP1; 83abf54e2994961395a0feb0b08353e62718443f23Spike Sprague private ImageButton mExposureP2; 8459345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague private RadioOptions mModeOptionsExposure; 8559345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague private RadioOptions mModeOptionsPano; 8659345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague private View mModeOptionsButtons; 8759345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague private ModeOptions mModeOptions; 88abf54e2994961395a0feb0b08353e62718443f23Spike Sprague 89a479fcaad5b83c8fbb881f491d93145531b25cbaSpike Sprague private int mMinExposureCompensation; 90a479fcaad5b83c8fbb881f491d93145531b25cbaSpike Sprague private int mMaxExposureCompensation; 91a479fcaad5b83c8fbb881f491d93145531b25cbaSpike Sprague private float mExposureCompensationStep; 92a479fcaad5b83c8fbb881f491d93145531b25cbaSpike Sprague 931848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren /** A listener for button enabled and visibility 941848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren state changes. */ 951848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren private ButtonStatusListener mListener; 961848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren 970a6a8d8e4e1c9796aac606379a42970cdffb8911Erin Dahlgren /** An reference to the gcam mode index. */ 980a6a8d8e4e1c9796aac606379a42970cdffb8911Erin Dahlgren private static int sGcamIndex; 990a6a8d8e4e1c9796aac606379a42970cdffb8911Erin Dahlgren 1000a6a8d8e4e1c9796aac606379a42970cdffb8911Erin Dahlgren private AppController mAppController; 1016b174190b43bb4c2d7a5493e4f117ef6aac5f684Spike Sprague 1028a2933b2c0156b752425b499f3081e4ffc350061Erin Dahlgren /** 1038a2933b2c0156b752425b499f3081e4ffc350061Erin Dahlgren * Get a new global ButtonManager. 1048a2933b2c0156b752425b499f3081e4ffc350061Erin Dahlgren */ 1050a6a8d8e4e1c9796aac606379a42970cdffb8911Erin Dahlgren public ButtonManager(AppController app) { 1060a6a8d8e4e1c9796aac606379a42970cdffb8911Erin Dahlgren mAppController = app; 1070a6a8d8e4e1c9796aac606379a42970cdffb8911Erin Dahlgren 1080a6a8d8e4e1c9796aac606379a42970cdffb8911Erin Dahlgren Context context = app.getAndroidContext(); 1090a6a8d8e4e1c9796aac606379a42970cdffb8911Erin Dahlgren sGcamIndex = context.getResources().getInteger(R.integer.camera_mode_gcam); 1100a6a8d8e4e1c9796aac606379a42970cdffb8911Erin Dahlgren 1110a6a8d8e4e1c9796aac606379a42970cdffb8911Erin Dahlgren mSettingsManager = app.getSettingsManager(); 1121648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren mSettingsManager.addListener(this); 1131648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren } 1141648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren 1151848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren /** 116f1b2e407b20ff16fe793158c598e59799c1990efErin Dahlgren * Load references to buttons under a root View. 117f1b2e407b20ff16fe793158c598e59799c1990efErin Dahlgren * Call this after the root clears/reloads all of its children 118f1b2e407b20ff16fe793158c598e59799c1990efErin Dahlgren * to prevent stale references button views. 119f1b2e407b20ff16fe793158c598e59799c1990efErin Dahlgren */ 120f1b2e407b20ff16fe793158c598e59799c1990efErin Dahlgren public void load(View root) { 121f1b2e407b20ff16fe793158c598e59799c1990efErin Dahlgren getButtonsReferences(root); 122f1b2e407b20ff16fe793158c598e59799c1990efErin Dahlgren } 123f1b2e407b20ff16fe793158c598e59799c1990efErin Dahlgren 124f1b2e407b20ff16fe793158c598e59799c1990efErin Dahlgren /** 1251848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren * ButtonStatusListener provides callbacks for when button's 1261848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren * visibility changes and enabled status changes. 1271848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren */ 1281848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren public interface ButtonStatusListener { 1291848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren /** 1301848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren * A button's visibility has changed. 1311848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren */ 1321848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren public void onButtonVisibilityChanged(ButtonManager buttonManager, int buttonId); 1331848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren 1341848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren /** 1351848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren * A button's enabled state has changed. 1361848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren */ 1371848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren public void onButtonEnabledChanged(ButtonManager buttonManager, int buttonId); 1381848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren } 1391848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren 1401848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren /** 1411848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren * Sets the ButtonStatusListener. 1421848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren */ 1431848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren public void setListener(ButtonStatusListener listener) { 1441848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren mListener = listener; 1451848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren } 1461848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren 1471848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren /** 1481848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren * Gets references to all known buttons. 1491848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren */ 1500a6a8d8e4e1c9796aac606379a42970cdffb8911Erin Dahlgren private void getButtonsReferences(View root) { 151a9ceaf76b72cb4b499d3d9d90f979bae93bd593dErin Dahlgren mButtonCamera 1520a6a8d8e4e1c9796aac606379a42970cdffb8911Erin Dahlgren = (MultiToggleImageButton) root.findViewById(R.id.camera_toggle_button); 153a9ceaf76b72cb4b499d3d9d90f979bae93bd593dErin Dahlgren mButtonFlash 154a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren = (MultiToggleImageButton) root.findViewById(R.id.flash_toggle_button); 155a9ceaf76b72cb4b499d3d9d90f979bae93bd593dErin Dahlgren mButtonHdr 1560a6a8d8e4e1c9796aac606379a42970cdffb8911Erin Dahlgren = (MultiToggleImageButton) root.findViewById(R.id.hdr_plus_toggle_button); 157a9ceaf76b72cb4b499d3d9d90f979bae93bd593dErin Dahlgren mButtonGridlines 158d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren = (MultiToggleImageButton) root.findViewById(R.id.grid_lines_toggle_button); 1591848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren mButtonCancel 1600a6a8d8e4e1c9796aac606379a42970cdffb8911Erin Dahlgren = (ImageButton) root.findViewById(R.id.cancel_button); 1611848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren mButtonDone 1620a6a8d8e4e1c9796aac606379a42970cdffb8911Erin Dahlgren = (ImageButton) root.findViewById(R.id.done_button); 1631848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren mButtonRetake 1640a6a8d8e4e1c9796aac606379a42970cdffb8911Erin Dahlgren = (ImageButton) root.findViewById(R.id.retake_button); 165abf54e2994961395a0feb0b08353e62718443f23Spike Sprague 166abf54e2994961395a0feb0b08353e62718443f23Spike Sprague mButtonExposureCompensation = 167abf54e2994961395a0feb0b08353e62718443f23Spike Sprague (ImageButton) root.findViewById(R.id.exposure_button); 168abf54e2994961395a0feb0b08353e62718443f23Spike Sprague mExposureN2 = (ImageButton) root.findViewById(R.id.exposure_n2); 169abf54e2994961395a0feb0b08353e62718443f23Spike Sprague mExposureN1 = (ImageButton) root.findViewById(R.id.exposure_n1); 170abf54e2994961395a0feb0b08353e62718443f23Spike Sprague mExposure0 = (ImageButton) root.findViewById(R.id.exposure_0); 171abf54e2994961395a0feb0b08353e62718443f23Spike Sprague mExposureP1 = (ImageButton) root.findViewById(R.id.exposure_p1); 172abf54e2994961395a0feb0b08353e62718443f23Spike Sprague mExposureP2 = (ImageButton) root.findViewById(R.id.exposure_p2); 17359345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague mModeOptionsExposure = (RadioOptions) root.findViewById(R.id.mode_options_exposure); 17459345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague mModeOptionsPano = (RadioOptions) root.findViewById(R.id.mode_options_pano); 17559345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague mModeOptionsButtons = root.findViewById(R.id.mode_options_buttons); 17659345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague mModeOptions = (ModeOptions) root.findViewById(R.id.mode_options); 1776c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu 1786c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu mButtonCountdown = (MultiToggleImageButton) root.findViewById(R.id.countdown_toggle_button); 1791848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren } 1801648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren 1811648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren @Override 1821648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren public void onSettingChanged(SettingsManager settingsManager, int id) { 1831648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren MultiToggleImageButton button = null; 1841648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren int index = 0; 1851648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren 1861648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren switch (id) { 1871648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren case SettingsManager.SETTING_FLASH_MODE: { 1881648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren index = mSettingsManager.getStringValueIndex(id); 1891848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren button = getButtonOrError(BUTTON_FLASH); 1901648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren break; 1911648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren } 1921648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren case SettingsManager.SETTING_VIDEOCAMERA_FLASH_MODE: { 1931648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren index = mSettingsManager.getStringValueIndex(id); 1941848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren button = getButtonOrError(BUTTON_TORCH); 1951648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren break; 1961648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren } 1971648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren case SettingsManager.SETTING_CAMERA_ID: { 1981648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren index = mSettingsManager.getStringValueIndex(id); 1991848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren button = getButtonOrError(BUTTON_CAMERA); 2001648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren break; 2011648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren } 2028ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu case SettingsManager.SETTING_CAMERA_HDR_PLUS: { 2031648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren index = mSettingsManager.getStringValueIndex(id); 2041848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren button = getButtonOrError(BUTTON_HDRPLUS); 2051648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren break; 2061648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren } 2078ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu case SettingsManager.SETTING_CAMERA_HDR: { 2088ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu index = mSettingsManager.getStringValueIndex(id); 2098ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu button = getButtonOrError(BUTTON_HDR); 2108ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu break; 2118ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu } 212d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren case SettingsManager.SETTING_CAMERA_GRID_LINES: { 213d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren index = mSettingsManager.getStringValueIndex(id); 214d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren button = getButtonOrError(BUTTON_GRID_LINES); 215d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren break; 216d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren } 217f80ac9ee5c66671c3a77ac6628fefc86cd39d57eErin Dahlgren case SettingsManager.SETTING_CAMERA_PANO_ORIENTATION: { 21859345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague updatePanoButtons(); 219f80ac9ee5c66671c3a77ac6628fefc86cd39d57eErin Dahlgren break; 220f80ac9ee5c66671c3a77ac6628fefc86cd39d57eErin Dahlgren } 221abf54e2994961395a0feb0b08353e62718443f23Spike Sprague case SettingsManager.SETTING_EXPOSURE_COMPENSATION_VALUE: { 222abf54e2994961395a0feb0b08353e62718443f23Spike Sprague updateExposureButtons(); 223abf54e2994961395a0feb0b08353e62718443f23Spike Sprague break; 224abf54e2994961395a0feb0b08353e62718443f23Spike Sprague } 2256c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu case SettingsManager.SETTING_COUNTDOWN_DURATION: { 2266c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu index = mSettingsManager.getStringValueIndex(id); 2276c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu button = getButtonOrError(BUTTON_COUNTDOWN); 2286c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu break; 2296c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu } 2301648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren default: { 2311648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren // Do nothing. 2321648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren } 2331648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren } 2341648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren 2351648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren // In case SharedPreferences has changed but the button hasn't been toggled, 2361648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren // make sure the toggle state is in sync. 2371648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren if (button != null && button.getState() != index) { 2381648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren button.setState(Math.max(index, 0), false); 2391648c36927501ff32bf2918e8a445118d5208731Erin Dahlgren } 24018e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren } 24118e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren 24218e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren /** 24318e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren * A callback executed in the state listener of a button. 2441848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren 2458a2933b2c0156b752425b499f3081e4ffc350061Erin Dahlgren * Used by a module to set specific behavior when a button's 24618e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren * state changes. 24718e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren */ 24818e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren public interface ButtonCallback { 24918e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren public void onStateChanged(int state); 25018e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren } 25118e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren 2521848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren /** 2531848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren * Returns the appropriate {@link com.android.camera.MultiToggleImageButton} 2541848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren * based on button id. An IllegalStateException will be throw if the 2551848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren * button could not be found in the view hierarchy. 2561848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren */ 2571848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren private MultiToggleImageButton getButtonOrError(int buttonId) { 2581848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren switch (buttonId) { 2591848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren case BUTTON_FLASH: 260a9ceaf76b72cb4b499d3d9d90f979bae93bd593dErin Dahlgren if (mButtonFlash == null) { 2618a2933b2c0156b752425b499f3081e4ffc350061Erin Dahlgren throw new IllegalStateException("Flash button could not be found."); 2621848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren } 263a9ceaf76b72cb4b499d3d9d90f979bae93bd593dErin Dahlgren return mButtonFlash; 2641848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren case BUTTON_TORCH: 265a9ceaf76b72cb4b499d3d9d90f979bae93bd593dErin Dahlgren if (mButtonFlash== null) { 2660f3c4b4fc9ac87d7d4c3d04c3cb3426c711f57eaSpike Sprague throw new IllegalStateException("Torch button could not be found."); 2671848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren } 268a9ceaf76b72cb4b499d3d9d90f979bae93bd593dErin Dahlgren return mButtonFlash; 2691848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren case BUTTON_CAMERA: 270a9ceaf76b72cb4b499d3d9d90f979bae93bd593dErin Dahlgren if (mButtonCamera == null) { 2718a2933b2c0156b752425b499f3081e4ffc350061Erin Dahlgren throw new IllegalStateException("Camera button could not be found."); 2721848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren } 273a9ceaf76b72cb4b499d3d9d90f979bae93bd593dErin Dahlgren return mButtonCamera; 2741848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren case BUTTON_HDRPLUS: 275a9ceaf76b72cb4b499d3d9d90f979bae93bd593dErin Dahlgren if (mButtonHdr == null) { 276a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren throw new IllegalStateException("Hdr plus button could not be found."); 2771848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren } 278a9ceaf76b72cb4b499d3d9d90f979bae93bd593dErin Dahlgren return mButtonHdr; 279b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren case BUTTON_HDR: 280a9ceaf76b72cb4b499d3d9d90f979bae93bd593dErin Dahlgren if (mButtonHdr == null) { 281b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren throw new IllegalStateException("Hdr button could not be found."); 282b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren } 283a9ceaf76b72cb4b499d3d9d90f979bae93bd593dErin Dahlgren return mButtonHdr; 284d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren case BUTTON_GRID_LINES: 285a9ceaf76b72cb4b499d3d9d90f979bae93bd593dErin Dahlgren if (mButtonGridlines == null) { 286d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren throw new IllegalStateException("Grid lines button could not be found."); 287d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren } 288a9ceaf76b72cb4b499d3d9d90f979bae93bd593dErin Dahlgren return mButtonGridlines; 2896c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu case BUTTON_COUNTDOWN: 2906c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu if (mButtonCountdown == null) { 2916c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu throw new IllegalStateException("Countdown button could not be found."); 2926c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu } 2936c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu return mButtonCountdown; 2941848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren default: 2951848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren throw new IllegalArgumentException("button not known by id=" + buttonId); 2968a2933b2c0156b752425b499f3081e4ffc350061Erin Dahlgren } 2978a2933b2c0156b752425b499f3081e4ffc350061Erin Dahlgren } 29818e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren 2991848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren /** 3001848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren * Returns the appropriate {@link android.widget.ImageButton} 3011848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren * based on button id. An IllegalStateException will be throw if the 3021848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren * button could not be found in the view hierarchy. 3031848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren */ 3041848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren private ImageButton getImageButtonOrError(int buttonId) { 3051848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren switch (buttonId) { 3061848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren case BUTTON_CANCEL: 3071848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren if (mButtonCancel == null) { 308eb3134f6ecc42f7d98625ca2c0ddfb06c9f07c43Spike Sprague throw new IllegalStateException("Cancel button could not be found."); 3091848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren } 3101848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren return mButtonCancel; 3111848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren case BUTTON_DONE: 3121848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren if (mButtonDone == null) { 313eb3134f6ecc42f7d98625ca2c0ddfb06c9f07c43Spike Sprague throw new IllegalStateException("Done button could not be found."); 3141848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren } 3151848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren return mButtonDone; 3161848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren case BUTTON_RETAKE: 3171848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren if (mButtonRetake == null) { 318eb3134f6ecc42f7d98625ca2c0ddfb06c9f07c43Spike Sprague throw new IllegalStateException("Retake button could not be found."); 3191848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren } 3201848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren return mButtonRetake; 3211848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren case BUTTON_REVIEW: 3221848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren if (mButtonRetake == null) { 323db44ef57cdb576704b1aafb2b81e30bf9ff261adSpike Sprague throw new IllegalStateException("Review button could not be found."); 3241848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren } 3251848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren return mButtonRetake; 326abf54e2994961395a0feb0b08353e62718443f23Spike Sprague case BUTTON_EXPOSURE_COMPENSATION: 327abf54e2994961395a0feb0b08353e62718443f23Spike Sprague if (mButtonExposureCompensation == null) { 328abf54e2994961395a0feb0b08353e62718443f23Spike Sprague throw new IllegalStateException("Exposure Compensation button could not be found."); 329abf54e2994961395a0feb0b08353e62718443f23Spike Sprague } 330abf54e2994961395a0feb0b08353e62718443f23Spike Sprague return mButtonExposureCompensation; 3311848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren default: 3321848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren throw new IllegalArgumentException("button not known by id=" + buttonId); 333eb3134f6ecc42f7d98625ca2c0ddfb06c9f07c43Spike Sprague } 334eb3134f6ecc42f7d98625ca2c0ddfb06c9f07c43Spike Sprague } 335eb3134f6ecc42f7d98625ca2c0ddfb06c9f07c43Spike Sprague 33618e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren /** 3378ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu * Initialize a known button by id, with a state change callback and 3388ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu * a resource id that points to an array of drawables, and then enable 3398ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu * the button. 34018e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren */ 3418ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu public void initializeButton(int buttonId, ButtonCallback cb) { 3421848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren MultiToggleImageButton button = getButtonOrError(buttonId); 3438a2933b2c0156b752425b499f3081e4ffc350061Erin Dahlgren switch (buttonId) { 34418e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren case BUTTON_FLASH: 3458ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu initializeFlashButton(button, cb, R.array.camera_flashmode_icons); 3468a2933b2c0156b752425b499f3081e4ffc350061Erin Dahlgren break; 3471848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren case BUTTON_TORCH: 3488ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu initializeTorchButton(button, cb, R.array.video_flashmode_icons); 3491848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren break; 35018e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren case BUTTON_CAMERA: 3518ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu initializeCameraButton(button, cb, R.array.camera_id_icons); 3528a2933b2c0156b752425b499f3081e4ffc350061Erin Dahlgren break; 35318e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren case BUTTON_HDRPLUS: 3548ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu initializeHdrPlusButton(button, cb, R.array.pref_camera_hdr_plus_icons); 355b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren break; 356b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren case BUTTON_HDR: 3578ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu initializeHdrButton(button, cb, R.array.pref_camera_hdr_icons); 3588a2933b2c0156b752425b499f3081e4ffc350061Erin Dahlgren break; 359d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren case BUTTON_GRID_LINES: 3608ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu initializeGridLinesButton(button, cb, R.array.grid_lines_icons); 361d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren break; 3626c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu case BUTTON_COUNTDOWN: 3636c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu initializeCountdownButton(button, cb, R.array.countdown_duration_icons); 3646c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu break; 36518e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren default: 3668a2933b2c0156b752425b499f3081e4ffc350061Erin Dahlgren throw new IllegalArgumentException("button not known by id=" + buttonId); 36718e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren } 3681848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren 3698ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu enableButton(buttonId); 37018e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren } 37118e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren 3724efa8b54c1df4e06f2d3caed2568015a737f9ddaErin Dahlgren /** 3738ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu * Initialize a known button with a click listener and a resource id. 3744efa8b54c1df4e06f2d3caed2568015a737f9ddaErin Dahlgren * Sets the button visible. 3754efa8b54c1df4e06f2d3caed2568015a737f9ddaErin Dahlgren */ 3768ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu public void initializePushButton(int buttonId, View.OnClickListener cb, 3774efa8b54c1df4e06f2d3caed2568015a737f9ddaErin Dahlgren int imageId) { 3781848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren ImageButton button = getImageButtonOrError(buttonId); 3794efa8b54c1df4e06f2d3caed2568015a737f9ddaErin Dahlgren button.setOnClickListener(cb); 3804efa8b54c1df4e06f2d3caed2568015a737f9ddaErin Dahlgren button.setImageResource(imageId); 3811848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren 3821848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren if (!button.isEnabled()) { 3831848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren button.setEnabled(true); 3841848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren if (mListener != null) { 3851848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren mListener.onButtonEnabledChanged(this, buttonId); 3861848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren } 3871848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren } 388a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren button.setTag(R.string.tag_enabled_id, (Integer) buttonId); 389a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren 390a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren if (button.getVisibility() != View.VISIBLE) { 391a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren button.setVisibility(View.VISIBLE); 392a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren if (mListener != null) { 393a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren mListener.onButtonVisibilityChanged(this, buttonId); 394a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren } 395a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren } 3964efa8b54c1df4e06f2d3caed2568015a737f9ddaErin Dahlgren } 3974efa8b54c1df4e06f2d3caed2568015a737f9ddaErin Dahlgren 3984efa8b54c1df4e06f2d3caed2568015a737f9ddaErin Dahlgren /** 3998ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu * Initialize a known button with a click listener. Sets the button visible. 4004efa8b54c1df4e06f2d3caed2568015a737f9ddaErin Dahlgren */ 4018ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu public void initializePushButton(int buttonId, View.OnClickListener cb) { 4021848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren ImageButton button = getImageButtonOrError(buttonId); 403abf54e2994961395a0feb0b08353e62718443f23Spike Sprague if (cb != null) { 404abf54e2994961395a0feb0b08353e62718443f23Spike Sprague button.setOnClickListener(cb); 405abf54e2994961395a0feb0b08353e62718443f23Spike Sprague } 4061848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren 4071848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren if (!button.isEnabled()) { 4081848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren button.setEnabled(true); 4091848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren if (mListener != null) { 4101848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren mListener.onButtonEnabledChanged(this, buttonId); 4111848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren } 4121848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren } 413a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren button.setTag(R.string.tag_enabled_id, (Integer) buttonId); 414a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren 415a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren if (button.getVisibility() != View.VISIBLE) { 416a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren button.setVisibility(View.VISIBLE); 417a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren if (mListener != null) { 418a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren mListener.onButtonVisibilityChanged(this, buttonId); 419a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren } 420a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren } 421eb3134f6ecc42f7d98625ca2c0ddfb06c9f07c43Spike Sprague } 422eb3134f6ecc42f7d98625ca2c0ddfb06c9f07c43Spike Sprague 42318e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren /** 4244efa8b54c1df4e06f2d3caed2568015a737f9ddaErin Dahlgren * Sets a button in its disabled (greyed out) state. 42518e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren */ 4261848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren public void disableButton(int buttonId) { 4271848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren MultiToggleImageButton button = getButtonOrError(buttonId); 4281848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren if (button.isEnabled()) { 4291848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren button.setEnabled(false); 4301848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren if (mListener != null) { 4311848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren mListener.onButtonEnabledChanged(this, buttonId); 4321848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren } 4331848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren } 434a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren button.setTag(R.string.tag_enabled_id, null); 4354efa8b54c1df4e06f2d3caed2568015a737f9ddaErin Dahlgren 4361848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren if (button.getVisibility() != View.VISIBLE) { 4371848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren button.setVisibility(View.VISIBLE); 4381848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren if (mListener != null) { 4391848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren mListener.onButtonVisibilityChanged(this, buttonId); 4401848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren } 4411848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren } 4424efa8b54c1df4e06f2d3caed2568015a737f9ddaErin Dahlgren } 4434efa8b54c1df4e06f2d3caed2568015a737f9ddaErin Dahlgren 4444efa8b54c1df4e06f2d3caed2568015a737f9ddaErin Dahlgren /** 4458ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu * Enables a button that has already been initialized. 4468ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu */ 4478ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu public void enableButton(int buttonId) { 4488ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu ImageButton button = getButtonOrError(buttonId); 4498ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu if (!button.isEnabled()) { 4508ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu button.setEnabled(true); 4518ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu if (mListener != null) { 4528ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu mListener.onButtonEnabledChanged(this, buttonId); 4538ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu } 4548ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu } 4558ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu button.setTag(R.string.tag_enabled_id, buttonId); 4568ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu 4578ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu if (button.getVisibility() != View.VISIBLE) { 4588ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu button.setVisibility(View.VISIBLE); 4598ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu if (mListener != null) { 4608ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu mListener.onButtonVisibilityChanged(this, buttonId); 4618ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu } 4628ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu } 4638ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu } 4648ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu 4658ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu /** 4664efa8b54c1df4e06f2d3caed2568015a737f9ddaErin Dahlgren * Hide a button by id. 4674efa8b54c1df4e06f2d3caed2568015a737f9ddaErin Dahlgren */ 4681848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren public void hideButton(int buttonId) { 469a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren View button; 470a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren try { 471a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren button = (View) getButtonOrError(buttonId); 472a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren } catch (IllegalArgumentException e) { 473a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren button = (View) getImageButtonOrError(buttonId); 474a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren } 4751848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren if (button.getVisibility() == View.VISIBLE) { 476c0ad2fbb43002cf013989489dc0321f459baf84cErin Dahlgren button.setVisibility(View.GONE); 4771848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren if (mListener != null) { 4781848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren mListener.onButtonVisibilityChanged(this, buttonId); 4791848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren } 4801848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren } 4811848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren } 4821848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren 48359345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague public void setToInitialState() { 48459345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague mModeOptions.setMainBar(ModeOptions.BAR_STANDARD); 48559345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague } 48659345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague 487abf54e2994961395a0feb0b08353e62718443f23Spike Sprague public void setExposureCompensationCallback(final CameraAppUI.BottomBarUISpec 488abf54e2994961395a0feb0b08353e62718443f23Spike Sprague .ExposureCompensationSetCallback cb) { 489abf54e2994961395a0feb0b08353e62718443f23Spike Sprague if (cb == null) { 49059345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague mModeOptionsExposure.setOnOptionClickListener(null); 491abf54e2994961395a0feb0b08353e62718443f23Spike Sprague } else { 49259345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague mModeOptionsExposure 49359345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague .setOnOptionClickListener(new RadioOptions.OnOptionClickListener() { 49459345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague @Override 49559345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague public void onOptionClicked(View v) { 49659345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague int comp = Integer.parseInt((String)(v.getTag())); 49759345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague 49859345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague if (mExposureCompensationStep != 0.0f) { 49959345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague int compValue = 50059345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague Math.round(comp / mExposureCompensationStep); 50159345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague cb.setExposure(compValue); 50259345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague } 503abf54e2994961395a0feb0b08353e62718443f23Spike Sprague } 50459345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague }); 505abf54e2994961395a0feb0b08353e62718443f23Spike Sprague } 506abf54e2994961395a0feb0b08353e62718443f23Spike Sprague } 507abf54e2994961395a0feb0b08353e62718443f23Spike Sprague 5081848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren /** 509a479fcaad5b83c8fbb881f491d93145531b25cbaSpike Sprague * Set the exposure compensation parameters supported by the current camera mode. 510a479fcaad5b83c8fbb881f491d93145531b25cbaSpike Sprague * @param min Minimum exposure compensation value. 511a479fcaad5b83c8fbb881f491d93145531b25cbaSpike Sprague * @param max Maximum exposure compensation value. 512a479fcaad5b83c8fbb881f491d93145531b25cbaSpike Sprague * @param step Expsoure compensation step value. 513a479fcaad5b83c8fbb881f491d93145531b25cbaSpike Sprague */ 514a479fcaad5b83c8fbb881f491d93145531b25cbaSpike Sprague public void setExposureCompensationParameters(int min, int max, float step) { 515a479fcaad5b83c8fbb881f491d93145531b25cbaSpike Sprague mMaxExposureCompensation = max; 516a479fcaad5b83c8fbb881f491d93145531b25cbaSpike Sprague mMinExposureCompensation = min; 517a479fcaad5b83c8fbb881f491d93145531b25cbaSpike Sprague mExposureCompensationStep = step; 518a479fcaad5b83c8fbb881f491d93145531b25cbaSpike Sprague 519156f3e5b41cd2049230b1423c455763d31738693Spike Sprague 520156f3e5b41cd2049230b1423c455763d31738693Spike Sprague setVisible(mExposureN2, (Math.round(min * step) <= -2)); 521156f3e5b41cd2049230b1423c455763d31738693Spike Sprague setVisible(mExposureN1, (Math.round(min * step) <= -1)); 522156f3e5b41cd2049230b1423c455763d31738693Spike Sprague setVisible(mExposureP1, (Math.round(max * step) >= 1)); 523156f3e5b41cd2049230b1423c455763d31738693Spike Sprague setVisible(mExposureP2, (Math.round(max * step) >= 2)); 524a479fcaad5b83c8fbb881f491d93145531b25cbaSpike Sprague 525a479fcaad5b83c8fbb881f491d93145531b25cbaSpike Sprague updateExposureButtons(); 526156f3e5b41cd2049230b1423c455763d31738693Spike Sprague } 527156f3e5b41cd2049230b1423c455763d31738693Spike Sprague 528156f3e5b41cd2049230b1423c455763d31738693Spike Sprague private static void setVisible(View v, boolean visible) { 529156f3e5b41cd2049230b1423c455763d31738693Spike Sprague if (visible) { 530156f3e5b41cd2049230b1423c455763d31738693Spike Sprague v.setVisibility(View.VISIBLE); 531156f3e5b41cd2049230b1423c455763d31738693Spike Sprague } else { 532156f3e5b41cd2049230b1423c455763d31738693Spike Sprague v.setVisibility(View.INVISIBLE); 533156f3e5b41cd2049230b1423c455763d31738693Spike Sprague } 534156f3e5b41cd2049230b1423c455763d31738693Spike Sprague } 535156f3e5b41cd2049230b1423c455763d31738693Spike Sprague 536156f3e5b41cd2049230b1423c455763d31738693Spike Sprague /** 537156f3e5b41cd2049230b1423c455763d31738693Spike Sprague * @return The exposure compensation step value. 538156f3e5b41cd2049230b1423c455763d31738693Spike Sprague **/ 539156f3e5b41cd2049230b1423c455763d31738693Spike Sprague public float getExposureCompensationStep() { 540156f3e5b41cd2049230b1423c455763d31738693Spike Sprague return mExposureCompensationStep; 541a479fcaad5b83c8fbb881f491d93145531b25cbaSpike Sprague } 542a479fcaad5b83c8fbb881f491d93145531b25cbaSpike Sprague 543a479fcaad5b83c8fbb881f491d93145531b25cbaSpike Sprague /** 544a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren * Check if a button is enabled with the given button id.. 5451848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren */ 5461848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren public boolean isEnabled(int buttonId) { 547a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren View button; 548a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren try { 549a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren button = (View) getButtonOrError(buttonId); 550a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren } catch (IllegalArgumentException e) { 551a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren button = (View) getImageButtonOrError(buttonId); 552a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren } 553a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren 554a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren Integer enabledId = (Integer) button.getTag(R.string.tag_enabled_id); 555a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren if (enabledId != null) { 556a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren return (enabledId.intValue() == buttonId) && button.isEnabled(); 557a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren } else { 558a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren return false; 559a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren } 5601848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren } 5611848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren 5621848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren /** 5631848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren * Check if a button is visible. 5641848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren */ 5651848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren public boolean isVisible(int buttonId) { 566a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren View button; 567a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren try { 568a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren button = (View) getButtonOrError(buttonId); 569a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren } catch (IllegalArgumentException e) { 570a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren button = (View) getImageButtonOrError(buttonId); 571a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren } 5721848494bd09c85002d8c59d4feb8a6e0dc32871fErin Dahlgren return (button.getVisibility() == View.VISIBLE); 5738a2933b2c0156b752425b499f3081e4ffc350061Erin Dahlgren } 57418e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren 5758a2933b2c0156b752425b499f3081e4ffc350061Erin Dahlgren /** 5768ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu * Initialize a flash button. 5778a2933b2c0156b752425b499f3081e4ffc350061Erin Dahlgren */ 5788ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu private void initializeFlashButton(MultiToggleImageButton button, 5798a2933b2c0156b752425b499f3081e4ffc350061Erin Dahlgren final ButtonCallback cb, int resIdImages) { 58018e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren 58118e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren if (resIdImages > 0) { 5828a2933b2c0156b752425b499f3081e4ffc350061Erin Dahlgren button.overrideImageIds(resIdImages); 58318e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren } 58479718f6c6fb60aedd09edeedb2c16d1e2f9fe02dSpike Sprague button.overrideContentDescriptions(R.array.camera_flash_descriptions); 58579718f6c6fb60aedd09edeedb2c16d1e2f9fe02dSpike Sprague 58618e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren int index = mSettingsManager.getStringValueIndex(SettingsManager.SETTING_FLASH_MODE); 5874efa8b54c1df4e06f2d3caed2568015a737f9ddaErin Dahlgren button.setState(index >= 0 ? index : 0, false); 5884efa8b54c1df4e06f2d3caed2568015a737f9ddaErin Dahlgren 5898a2933b2c0156b752425b499f3081e4ffc350061Erin Dahlgren button.setOnStateChangeListener(new MultiToggleImageButton.OnStateChangeListener() { 5906b174190b43bb4c2d7a5493e4f117ef6aac5f684Spike Sprague @Override 5916b174190b43bb4c2d7a5493e4f117ef6aac5f684Spike Sprague public void stateChanged(View view, int state) { 5926b174190b43bb4c2d7a5493e4f117ef6aac5f684Spike Sprague mSettingsManager.setStringValueIndex(SettingsManager.SETTING_FLASH_MODE, state); 5936b174190b43bb4c2d7a5493e4f117ef6aac5f684Spike Sprague if (cb != null) { 5946b174190b43bb4c2d7a5493e4f117ef6aac5f684Spike Sprague cb.onStateChanged(state); 59518e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren } 5966b174190b43bb4c2d7a5493e4f117ef6aac5f684Spike Sprague } 5976b174190b43bb4c2d7a5493e4f117ef6aac5f684Spike Sprague }); 59818e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren } 59918e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren 60018e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren /** 6018ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu * Initialize video torch button 6020f3c4b4fc9ac87d7d4c3d04c3cb3426c711f57eaSpike Sprague */ 6038ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu private void initializeTorchButton(MultiToggleImageButton button, 6040f3c4b4fc9ac87d7d4c3d04c3cb3426c711f57eaSpike Sprague final ButtonCallback cb, int resIdImages) { 6054efa8b54c1df4e06f2d3caed2568015a737f9ddaErin Dahlgren 6060f3c4b4fc9ac87d7d4c3d04c3cb3426c711f57eaSpike Sprague if (resIdImages > 0) { 6070f3c4b4fc9ac87d7d4c3d04c3cb3426c711f57eaSpike Sprague button.overrideImageIds(resIdImages); 6080f3c4b4fc9ac87d7d4c3d04c3cb3426c711f57eaSpike Sprague } 60979718f6c6fb60aedd09edeedb2c16d1e2f9fe02dSpike Sprague button.overrideContentDescriptions(R.array.video_flash_descriptions); 61079718f6c6fb60aedd09edeedb2c16d1e2f9fe02dSpike Sprague 6110f3c4b4fc9ac87d7d4c3d04c3cb3426c711f57eaSpike Sprague int index = mSettingsManager.getStringValueIndex( 6120f3c4b4fc9ac87d7d4c3d04c3cb3426c711f57eaSpike Sprague SettingsManager.SETTING_VIDEOCAMERA_FLASH_MODE); 6134efa8b54c1df4e06f2d3caed2568015a737f9ddaErin Dahlgren button.setState(index >= 0 ? index : 0, false); 6144efa8b54c1df4e06f2d3caed2568015a737f9ddaErin Dahlgren 6150f3c4b4fc9ac87d7d4c3d04c3cb3426c711f57eaSpike Sprague button.setOnStateChangeListener(new MultiToggleImageButton.OnStateChangeListener() { 6166b174190b43bb4c2d7a5493e4f117ef6aac5f684Spike Sprague @Override 6176b174190b43bb4c2d7a5493e4f117ef6aac5f684Spike Sprague public void stateChanged(View view, int state) { 6186b174190b43bb4c2d7a5493e4f117ef6aac5f684Spike Sprague mSettingsManager.setStringValueIndex( 6196b174190b43bb4c2d7a5493e4f117ef6aac5f684Spike Sprague SettingsManager.SETTING_VIDEOCAMERA_FLASH_MODE, state); 6206b174190b43bb4c2d7a5493e4f117ef6aac5f684Spike Sprague if(cb != null) { 6216b174190b43bb4c2d7a5493e4f117ef6aac5f684Spike Sprague cb.onStateChanged(state); 6220f3c4b4fc9ac87d7d4c3d04c3cb3426c711f57eaSpike Sprague } 6236b174190b43bb4c2d7a5493e4f117ef6aac5f684Spike Sprague } 6246b174190b43bb4c2d7a5493e4f117ef6aac5f684Spike Sprague }); 6250f3c4b4fc9ac87d7d4c3d04c3cb3426c711f57eaSpike Sprague } 6260f3c4b4fc9ac87d7d4c3d04c3cb3426c711f57eaSpike Sprague 6270f3c4b4fc9ac87d7d4c3d04c3cb3426c711f57eaSpike Sprague /** 6288ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu * Initialize a camera button. 62918e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren */ 6308ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu private void initializeCameraButton(final MultiToggleImageButton button, 6318a2933b2c0156b752425b499f3081e4ffc350061Erin Dahlgren final ButtonCallback cb, int resIdImages) { 63218e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren 63318e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren if (resIdImages > 0) { 6348a2933b2c0156b752425b499f3081e4ffc350061Erin Dahlgren button.overrideImageIds(resIdImages); 63518e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren } 6368a2933b2c0156b752425b499f3081e4ffc350061Erin Dahlgren 63718e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren int index = mSettingsManager.getStringValueIndex(SettingsManager.SETTING_CAMERA_ID); 6384efa8b54c1df4e06f2d3caed2568015a737f9ddaErin Dahlgren button.setState(index >= 0 ? index : 0, false); 6398a2933b2c0156b752425b499f3081e4ffc350061Erin Dahlgren 6408a2933b2c0156b752425b499f3081e4ffc350061Erin Dahlgren button.setOnStateChangeListener(new MultiToggleImageButton.OnStateChangeListener() { 6416b174190b43bb4c2d7a5493e4f117ef6aac5f684Spike Sprague @Override 6426b174190b43bb4c2d7a5493e4f117ef6aac5f684Spike Sprague public void stateChanged(View view, int state) { 6436b174190b43bb4c2d7a5493e4f117ef6aac5f684Spike Sprague mSettingsManager.setStringValueIndex(SettingsManager.SETTING_CAMERA_ID, state); 6446b174190b43bb4c2d7a5493e4f117ef6aac5f684Spike Sprague int cameraId = Integer.parseInt(mSettingsManager.get( 64518e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren SettingsManager.SETTING_CAMERA_ID)); 646c8d9ad868e515ccebe1b6f52cb5fae1e6d13cbabAngus Kong // This is a quick fix for ISE in Gcam module which can be 647c8d9ad868e515ccebe1b6f52cb5fae1e6d13cbabAngus Kong // found by rapid pressing camera switch button. The assumption 648c8d9ad868e515ccebe1b6f52cb5fae1e6d13cbabAngus Kong // here is that each time this button is clicked, the listener 649c8d9ad868e515ccebe1b6f52cb5fae1e6d13cbabAngus Kong // will do something and then enable this button again. 650c8d9ad868e515ccebe1b6f52cb5fae1e6d13cbabAngus Kong button.setEnabled(false); 6516b174190b43bb4c2d7a5493e4f117ef6aac5f684Spike Sprague if (cb != null) { 6526b174190b43bb4c2d7a5493e4f117ef6aac5f684Spike Sprague cb.onStateChanged(cameraId); 65318e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren } 654b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren mAppController.getCameraAppUI().onChangeCamera(); 6556b174190b43bb4c2d7a5493e4f117ef6aac5f684Spike Sprague } 6566b174190b43bb4c2d7a5493e4f117ef6aac5f684Spike Sprague }); 65718e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren } 65818e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren 65918e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren /** 6608ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu * Initialize an hdr plus button. 66118e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren */ 6628ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu private void initializeHdrPlusButton(MultiToggleImageButton button, 6638a2933b2c0156b752425b499f3081e4ffc350061Erin Dahlgren final ButtonCallback cb, int resIdImages) { 66418e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren 66518e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren if (resIdImages > 0) { 6668a2933b2c0156b752425b499f3081e4ffc350061Erin Dahlgren button.overrideImageIds(resIdImages); 66718e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren } 66879718f6c6fb60aedd09edeedb2c16d1e2f9fe02dSpike Sprague button.overrideContentDescriptions(R.array.hdr_plus_descriptions); 6698a2933b2c0156b752425b499f3081e4ffc350061Erin Dahlgren 6708ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu int index = mSettingsManager.getStringValueIndex(SettingsManager.SETTING_CAMERA_HDR_PLUS); 6718ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu button.setState(index >= 0 ? index : 0, false); 6728ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu 6738ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu button.setOnStateChangeListener(new MultiToggleImageButton.OnStateChangeListener() { 6748ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu @Override 6758ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu public void stateChanged(View view, int state) { 6768ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu mSettingsManager.setStringValueIndex(SettingsManager.SETTING_CAMERA_HDR_PLUS, state); 6778ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu if (cb != null) { 6788ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu cb.onStateChanged(state); 6798ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu } 6808ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu } 6818ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu }); 6828ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu } 6838ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu 6848ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu /** 6858ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu * Initialize an hdr button. 6868ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu */ 6878ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu private void initializeHdrButton(MultiToggleImageButton button, 6888ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu final ButtonCallback cb, int resIdImages) { 6898ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu 6908ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu if (resIdImages > 0) { 6918ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu button.overrideImageIds(resIdImages); 6928ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu } 6938ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu button.overrideContentDescriptions(R.array.hdr_descriptions); 6948ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu 69518e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren int index = mSettingsManager.getStringValueIndex(SettingsManager.SETTING_CAMERA_HDR); 6964efa8b54c1df4e06f2d3caed2568015a737f9ddaErin Dahlgren button.setState(index >= 0 ? index : 0, false); 6978a2933b2c0156b752425b499f3081e4ffc350061Erin Dahlgren 6988a2933b2c0156b752425b499f3081e4ffc350061Erin Dahlgren button.setOnStateChangeListener(new MultiToggleImageButton.OnStateChangeListener() { 6996b174190b43bb4c2d7a5493e4f117ef6aac5f684Spike Sprague @Override 7006b174190b43bb4c2d7a5493e4f117ef6aac5f684Spike Sprague public void stateChanged(View view, int state) { 7016b174190b43bb4c2d7a5493e4f117ef6aac5f684Spike Sprague mSettingsManager.setStringValueIndex(SettingsManager.SETTING_CAMERA_HDR, state); 7026b174190b43bb4c2d7a5493e4f117ef6aac5f684Spike Sprague if (cb != null) { 7036b174190b43bb4c2d7a5493e4f117ef6aac5f684Spike Sprague cb.onStateChanged(state); 70418e2ef6d2b2d36abcaa7378a0f7df792ecf8ed81Erin Dahlgren } 7056b174190b43bb4c2d7a5493e4f117ef6aac5f684Spike Sprague } 7066b174190b43bb4c2d7a5493e4f117ef6aac5f684Spike Sprague }); 7074efa8b54c1df4e06f2d3caed2568015a737f9ddaErin Dahlgren } 708d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren 709abf54e2994961395a0feb0b08353e62718443f23Spike Sprague /** 7106c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu * Initialize a countdown timer button. 7116c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu */ 7126c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu private void initializeCountdownButton(MultiToggleImageButton button, 7136c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu final ButtonCallback cb, int resIdImages) { 7146c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu if (resIdImages > 0) { 7156c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu button.overrideImageIds(resIdImages); 7166c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu } 7176c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu 7186c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu int index = mSettingsManager.getStringValueIndex( 7196c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu SettingsManager.SETTING_COUNTDOWN_DURATION); 7206c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu button.setState(index >= 0 ? index : 0, false); 7216c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu 7226c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu button.setOnStateChangeListener(new MultiToggleImageButton.OnStateChangeListener() { 7236c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu @Override 7246c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu public void stateChanged(View view, int state) { 7256c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu mSettingsManager.setStringValueIndex( 7266c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu SettingsManager.SETTING_COUNTDOWN_DURATION, state); 7276c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu if(cb != null) { 7286c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu cb.onStateChanged(state); 7296c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu } 7306c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu } 7316c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu }); 7326c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu } 7336c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu 7346c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu /** 735abf54e2994961395a0feb0b08353e62718443f23Spike Sprague * Update the visual state of the manual exposure buttons 736abf54e2994961395a0feb0b08353e62718443f23Spike Sprague */ 737abf54e2994961395a0feb0b08353e62718443f23Spike Sprague public void updateExposureButtons() { 73859345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague String compString = mSettingsManager 73959345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague .get(SettingsManager.SETTING_EXPOSURE_COMPENSATION_VALUE); 740a479fcaad5b83c8fbb881f491d93145531b25cbaSpike Sprague int compValue = Integer.parseInt(compString); 741a479fcaad5b83c8fbb881f491d93145531b25cbaSpike Sprague if (mExposureCompensationStep != 0.0f) { 742a479fcaad5b83c8fbb881f491d93145531b25cbaSpike Sprague int comp = Math.round(compValue * mExposureCompensationStep); 74359345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague mModeOptionsExposure.setSelectedOptionByTag(String.valueOf(comp)); 744abf54e2994961395a0feb0b08353e62718443f23Spike Sprague } 745abf54e2994961395a0feb0b08353e62718443f23Spike Sprague } 7468ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu 7478ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu /** 7488ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu * Initialize a grid lines button. 749d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren */ 7508ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu private void initializeGridLinesButton(MultiToggleImageButton button, 751d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren final ButtonCallback cb, int resIdImages) { 752d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren 753d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren if (resIdImages > 0) { 754d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren button.overrideImageIds(resIdImages); 755d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren } 756d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren button.overrideContentDescriptions(R.array.grid_lines_descriptions); 757d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren button.setOnStateChangeListener(new MultiToggleImageButton.OnStateChangeListener() { 758d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren @Override 759d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren public void stateChanged(View view, int state) { 760d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren mSettingsManager.setStringValueIndex( 761d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren SettingsManager.SETTING_CAMERA_GRID_LINES, state); 762d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren if (cb != null) { 763d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren cb.onStateChanged(state); 764d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren } 765d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren } 766d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren }); 767d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren 768d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren int index = mSettingsManager.getStringValueIndex( 769d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren SettingsManager.SETTING_CAMERA_GRID_LINES); 770d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren button.setState(index >= 0 ? index : 0, true); 771d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren } 772f80ac9ee5c66671c3a77ac6628fefc86cd39d57eErin Dahlgren 77359345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague public boolean isPanoEnabled() { 77459345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague return mModeOptions.getMainBar() == ModeOptions.BAR_PANO; 77559345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague } 77659345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague 777f80ac9ee5c66671c3a77ac6628fefc86cd39d57eErin Dahlgren /** 77859345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague * Initialize a panorama orientation buttons. 779f80ac9ee5c66671c3a77ac6628fefc86cd39d57eErin Dahlgren */ 78059345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague public void initializePanoOrientationButtons(final ButtonCallback cb) { 78159345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague int resIdImages = PhotoSphereHelper.getPanoramaOrientationOptionArrayId(); 78259345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague int resIdDescriptions = PhotoSphereHelper.getPanoramaOrientationDescriptions(); 783f80ac9ee5c66671c3a77ac6628fefc86cd39d57eErin Dahlgren if (resIdImages > 0) { 78459345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague TypedArray imageIds = null; 78559345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague TypedArray descriptionIds = null; 78659345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague try { 78759345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague mModeOptions.setMainBar(ModeOptions.BAR_PANO); 78859345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague imageIds = mAppController 78959345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague .getAndroidContext().getResources().obtainTypedArray(resIdImages); 79059345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague descriptionIds = mAppController 79159345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague .getAndroidContext().getResources().obtainTypedArray(resIdDescriptions); 79259345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague mModeOptionsPano.removeAllViews(); 793e541dc2d520aae8d45f3c605c3d732e33dd3b616Spike Sprague final boolean isHorizontal = 794e541dc2d520aae8d45f3c605c3d732e33dd3b616Spike Sprague (mModeOptionsPano.getOrientation() == LinearLayout.HORIZONTAL); 795e541dc2d520aae8d45f3c605c3d732e33dd3b616Spike Sprague final int numImageIds = imageIds.length(); 796e541dc2d520aae8d45f3c605c3d732e33dd3b616Spike Sprague for (int index = 0; index < numImageIds; index++) { 797e541dc2d520aae8d45f3c605c3d732e33dd3b616Spike Sprague int i; 798e541dc2d520aae8d45f3c605c3d732e33dd3b616Spike Sprague // if in portrait orientation (pano bar horizonal), order buttons normally 799e541dc2d520aae8d45f3c605c3d732e33dd3b616Spike Sprague // if in landscape orientation (pano bar vertical), reverse button order 800e541dc2d520aae8d45f3c605c3d732e33dd3b616Spike Sprague if (isHorizontal) { 801e541dc2d520aae8d45f3c605c3d732e33dd3b616Spike Sprague i = index; 802e541dc2d520aae8d45f3c605c3d732e33dd3b616Spike Sprague } else { 803e541dc2d520aae8d45f3c605c3d732e33dd3b616Spike Sprague i = numImageIds - index - 1; 804e541dc2d520aae8d45f3c605c3d732e33dd3b616Spike Sprague } 805e541dc2d520aae8d45f3c605c3d732e33dd3b616Spike Sprague 80659345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague int imageId = imageIds.getResourceId(i, 0); 80759345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague if (imageId > 0) { 80859345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague ImageButton imageButton = (ImageButton) LayoutInflater 80959345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague .from(mAppController.getAndroidContext()) 81059345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague .inflate(R.layout.mode_options_imagebutton_template, 81159345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague mModeOptionsPano, false); 81259345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague imageButton.setImageResource(imageId); 81359345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague imageButton.setTag(String.valueOf(i)); 81459345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague mModeOptionsPano.addView(imageButton); 81559345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague 81659345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague int descriptionId = descriptionIds.getResourceId(i, 0); 81759345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague if (descriptionId > 0) { 81859345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague imageButton.setContentDescription( 81959345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague mAppController.getAndroidContext().getString(descriptionId)); 82059345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague } 82159345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague } 82259345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague } 82359345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague mModeOptionsPano.updateListeners(); 82459345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague mModeOptionsPano 82559345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague .setOnOptionClickListener(new RadioOptions.OnOptionClickListener() { 82659345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague @Override 82759345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague public void onOptionClicked(View v) { 82859345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague if (cb != null) { 82959345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague int state = Integer.parseInt((String)v.getTag()); 83059345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague mSettingsManager.setStringValueIndex( 83159345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague SettingsManager.SETTING_CAMERA_PANO_ORIENTATION, state); 83259345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague cb.onStateChanged(state); 83359345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague } 83459345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague } 83559345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague }); 83659345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague } finally { 83759345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague if (imageIds != null) { 83859345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague imageIds.recycle(); 839f80ac9ee5c66671c3a77ac6628fefc86cd39d57eErin Dahlgren } 84059345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague if (descriptionIds != null) { 84159345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague descriptionIds.recycle(); 84259345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague } 84359345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague updatePanoButtons(); 844f80ac9ee5c66671c3a77ac6628fefc86cd39d57eErin Dahlgren } 84559345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague } 84659345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague } 847f80ac9ee5c66671c3a77ac6628fefc86cd39d57eErin Dahlgren 84859345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague private void updatePanoButtons() { 84959345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague int modeIndex = mSettingsManager 85059345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague .getStringValueIndex(SettingsManager.SETTING_CAMERA_PANO_ORIENTATION); 85159345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague mModeOptionsPano.setSelectedOptionByTag(String.valueOf(modeIndex)); 852f80ac9ee5c66671c3a77ac6628fefc86cd39d57eErin Dahlgren } 853d5e51466a2848f1c937656c8f8185290034c2429Erin Dahlgren} 854