IndicatorIconController.java revision 59345144c4bde59b81bb19c95cdd977c1d1a9cd4
1e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren/* 2e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * Copyright (C) 2014 The Android Open Source Project 3e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * 4e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * Licensed under the Apache License, Version 2.0 (the "License"); 5e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * you may not use this file except in compliance with the License. 6e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * You may obtain a copy of the License at 7e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * 8e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * http://www.apache.org/licenses/LICENSE-2.0 9e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * 10e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * Unless required by applicable law or agreed to in writing, software 11e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * distributed under the License is distributed on an "AS IS" BASIS, 12e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * See the License for the specific language governing permissions and 14e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * limitations under the License. 15e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren */ 16e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 17e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenpackage com.android.camera.widget; 18e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 19e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport android.content.Context; 20e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport android.content.res.TypedArray; 21e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport android.graphics.drawable.Drawable; 22e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport android.view.View; 23e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport android.widget.ImageView; 24e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 25e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport com.android.camera.ButtonManager; 26e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport com.android.camera.app.AppController; 275596b4c902dcb685928b43678f428746ca5ffd08Angus Kongimport com.android.camera.debug.Log; 28e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport com.android.camera.settings.SettingsManager; 29d706ea69a87229dca5cb8f16125decfbcbc5303dErin Dahlgrenimport com.android.camera.util.PhotoSphereHelper; 30e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport com.android.camera2.R; 31e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 32e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren/** 33e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * IndicatorIconController sets the visibility and icon state of 34e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * on screen indicators. 35e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * 36e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * Indicators are only visible if they are in a non-default state. The 37e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * visibility of an indicator is set when an indicator's setting changes. 38e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren */ 39e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenpublic class IndicatorIconController 40e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren implements SettingsManager.OnSettingChangedListener, 41e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren ButtonManager.ButtonStatusListener { 42e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 435596b4c902dcb685928b43678f428746ca5ffd08Angus Kong private final static Log.Tag TAG = new Log.Tag("IndicatorIconCtrlr"); 44e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 45e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren private ImageView mFlashIndicator; 46e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren private ImageView mHdrIndicator; 4771a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren private ImageView mPanoIndicator; 48e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 49abf54e2994961395a0feb0b08353e62718443f23Spike Sprague private ImageView mExposureIndicatorN2; 50abf54e2994961395a0feb0b08353e62718443f23Spike Sprague private ImageView mExposureIndicatorN1; 51abf54e2994961395a0feb0b08353e62718443f23Spike Sprague private ImageView mExposureIndicatorP1; 52abf54e2994961395a0feb0b08353e62718443f23Spike Sprague private ImageView mExposureIndicatorP2; 53abf54e2994961395a0feb0b08353e62718443f23Spike Sprague 54e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren private TypedArray mFlashIndicatorPhotoIcons; 55e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren private TypedArray mFlashIndicatorVideoIcons; 56e7d745c15f1ee0f3a160e7601715e70f9646e6c0Erin Dahlgren private TypedArray mHdrPlusIndicatorIcons; 57e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren private TypedArray mHdrIndicatorIcons; 5871a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren private TypedArray mPanoIndicatorIcons; 596e07fe22cf84e9eea02d368bf64ab68d92401f20Erin Dahlgren 60e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren private AppController mController; 61e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 62e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren public IndicatorIconController(AppController controller, View root) { 63e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren mController = controller; 64e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren Context context = controller.getAndroidContext(); 65e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 66e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren mFlashIndicator = (ImageView) root.findViewById(R.id.flash_indicator); 67e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren mFlashIndicatorPhotoIcons = context.getResources().obtainTypedArray( 68e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren R.array.camera_flashmode_indicator_icons); 69e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren mFlashIndicatorVideoIcons = context.getResources().obtainTypedArray( 70e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren R.array.video_flashmode_indicator_icons); 7171a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren 7271a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren mHdrIndicator = (ImageView) root.findViewById(R.id.hdr_indicator); 73e7d745c15f1ee0f3a160e7601715e70f9646e6c0Erin Dahlgren mHdrPlusIndicatorIcons = context.getResources().obtainTypedArray( 74e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren R.array.pref_camera_hdr_plus_indicator_icons); 75e7d745c15f1ee0f3a160e7601715e70f9646e6c0Erin Dahlgren mHdrIndicatorIcons = context.getResources().obtainTypedArray( 76e7d745c15f1ee0f3a160e7601715e70f9646e6c0Erin Dahlgren R.array.pref_camera_hdr_indicator_icons); 7771a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren 7871a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren int panoIndicatorArrayId = PhotoSphereHelper.getPanoramaOrientationIndicatorArrayId(); 7971a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren if (panoIndicatorArrayId > 0) { 8071a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren mPanoIndicator = (ImageView) root.findViewById(R.id.pano_indicator); 8171a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren mPanoIndicatorIcons = 8271a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren context.getResources().obtainTypedArray(panoIndicatorArrayId); 8371a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren } 84abf54e2994961395a0feb0b08353e62718443f23Spike Sprague 85abf54e2994961395a0feb0b08353e62718443f23Spike Sprague mExposureIndicatorN2 = (ImageView) root.findViewById(R.id.exposure_n2_indicator); 86abf54e2994961395a0feb0b08353e62718443f23Spike Sprague mExposureIndicatorN1 = (ImageView) root.findViewById(R.id.exposure_n1_indicator); 87abf54e2994961395a0feb0b08353e62718443f23Spike Sprague mExposureIndicatorP1 = (ImageView) root.findViewById(R.id.exposure_p1_indicator); 88abf54e2994961395a0feb0b08353e62718443f23Spike Sprague mExposureIndicatorP2 = (ImageView) root.findViewById(R.id.exposure_p2_indicator); 896e07fe22cf84e9eea02d368bf64ab68d92401f20Erin Dahlgren } 906e07fe22cf84e9eea02d368bf64ab68d92401f20Erin Dahlgren 91e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren @Override 92e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren public void onButtonVisibilityChanged(ButtonManager buttonManager, int buttonId) { 93e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren syncIndicatorWithButton(buttonId); 94e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 95e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 96e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren @Override 97e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren public void onButtonEnabledChanged(ButtonManager buttonManager, int buttonId) { 98e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren syncIndicatorWithButton(buttonId); 99e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 100e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 101e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren /** 102e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * Syncs a specific indicator's icon and visibility 103e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * based on the enabled state and visibility of a button. 104e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren */ 105e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren private void syncIndicatorWithButton(int buttonId) { 106e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren switch (buttonId) { 107a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren case ButtonManager.BUTTON_FLASH: { 108a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren syncFlashIndicator(); 109a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren break; 110e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 111a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren case ButtonManager.BUTTON_TORCH: { 112a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren syncFlashIndicator(); 113a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren break; 114e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 115a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren case ButtonManager.BUTTON_HDRPLUS: { 116a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren syncHdrIndicator(); 117a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren break; 118a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren } 119e7d745c15f1ee0f3a160e7601715e70f9646e6c0Erin Dahlgren case ButtonManager.BUTTON_HDR: { 120e7d745c15f1ee0f3a160e7601715e70f9646e6c0Erin Dahlgren syncHdrIndicator(); 121e7d745c15f1ee0f3a160e7601715e70f9646e6c0Erin Dahlgren break; 122e7d745c15f1ee0f3a160e7601715e70f9646e6c0Erin Dahlgren } 123abf54e2994961395a0feb0b08353e62718443f23Spike Sprague case ButtonManager.BUTTON_EXPOSURE_COMPENSATION: { 124abf54e2994961395a0feb0b08353e62718443f23Spike Sprague syncExposureIndicator(); 125abf54e2994961395a0feb0b08353e62718443f23Spike Sprague break; 126abf54e2994961395a0feb0b08353e62718443f23Spike Sprague } 127a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren default: 128a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren // Do nothing. The indicator doesn't care 129a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren // about button that don't correspond to indicators. 130e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 131e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 132e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 133e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren /** 134e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * Sets all indicators to the correct resource and visibility 135e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * based on the current settings. 136e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren */ 137a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren public void syncIndicators() { 138a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren syncFlashIndicator(); 139a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren syncHdrIndicator(); 14071a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren syncPanoIndicator(); 141abf54e2994961395a0feb0b08353e62718443f23Spike Sprague syncExposureIndicator(); 14271a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren } 14371a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren 14471a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren /** 14571a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren * If the new visibility is different from the current visibility 14671a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren * on a view, change the visibility and call any registered 14771a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren * {@link OnIndicatorVisibilityChangedListener}. 14871a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren */ 149abf54e2994961395a0feb0b08353e62718443f23Spike Sprague private static void changeVisibility(View view, int visibility) { 15071a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren if (view.getVisibility() != visibility) { 15171a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren view.setVisibility(visibility); 15271a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren } 153e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 154e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 155e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren /** 156e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * Sync the icon and visibility of the flash indicator. 157e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren */ 158a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren private void syncFlashIndicator() { 159a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren ButtonManager buttonManager = mController.getButtonManager(); 160e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren // If flash isn't an enabled and visible option, 161e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren // do not show the indicator. 162e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren if (buttonManager.isEnabled(ButtonManager.BUTTON_FLASH) 163e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren && buttonManager.isVisible(ButtonManager.BUTTON_FLASH)) { 164e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 165a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren int modeIndex = mController.getCurrentModuleIndex(); 166a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren if (modeIndex == mController.getAndroidContext().getResources() 167bd1b8f910d6f2c94daac304f4bd1a098939474c3Doris Liu .getInteger(R.integer.camera_mode_video)) { 168a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren setIndicatorState(mController.getSettingsManager(), 169e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren SettingsManager.SETTING_VIDEOCAMERA_FLASH_MODE, 170a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren mFlashIndicator, mFlashIndicatorVideoIcons, false); 171e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } else { 172a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren setIndicatorState(mController.getSettingsManager(), 173e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren SettingsManager.SETTING_FLASH_MODE, 174a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren mFlashIndicator, mFlashIndicatorPhotoIcons, false); 175e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 176e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } else { 17771a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren changeVisibility(mFlashIndicator, View.GONE); 178e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 179e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 180e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 181e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren /** 182e7d745c15f1ee0f3a160e7601715e70f9646e6c0Erin Dahlgren * Sync the icon and the visibility of the hdr/hdrplus indicator. 183e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren */ 184a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren private void syncHdrIndicator() { 185a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren ButtonManager buttonManager = mController.getButtonManager(); 186e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren // If hdr isn't an enabled and visible option, 187e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren // do not show the indicator. 188e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren if (buttonManager.isEnabled(ButtonManager.BUTTON_HDRPLUS) 189e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren && buttonManager.isVisible(ButtonManager.BUTTON_HDRPLUS)) { 190a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren setIndicatorState(mController.getSettingsManager(), 1918ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu SettingsManager.SETTING_CAMERA_HDR_PLUS, 192e7d745c15f1ee0f3a160e7601715e70f9646e6c0Erin Dahlgren mHdrIndicator, mHdrPlusIndicatorIcons, false); 193e7d745c15f1ee0f3a160e7601715e70f9646e6c0Erin Dahlgren } else if (buttonManager.isEnabled(ButtonManager.BUTTON_HDR) 194e7d745c15f1ee0f3a160e7601715e70f9646e6c0Erin Dahlgren && buttonManager.isVisible(ButtonManager.BUTTON_HDR)) { 195e7d745c15f1ee0f3a160e7601715e70f9646e6c0Erin Dahlgren setIndicatorState(mController.getSettingsManager(), 196e7d745c15f1ee0f3a160e7601715e70f9646e6c0Erin Dahlgren SettingsManager.SETTING_CAMERA_HDR, 197a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren mHdrIndicator, mHdrIndicatorIcons, false); 198e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } else { 19971a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren changeVisibility(mHdrIndicator, View.GONE); 20071a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren } 20171a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren } 20271a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren 20371a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren /** 20471a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren * Sync the icon and the visibility of the pano indicator. 20571a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren */ 20671a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren private void syncPanoIndicator() { 20771a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren if (mPanoIndicator == null) { 20871a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren Log.w(TAG, "Trying to sync a pano indicator that is not initialized."); 20971a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren return; 21071a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren } 21171a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren 21271a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren ButtonManager buttonManager = mController.getButtonManager(); 21359345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague if (buttonManager.isPanoEnabled()) { 21471a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren setIndicatorState(mController.getSettingsManager(), 21571a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren SettingsManager.SETTING_CAMERA_PANO_ORIENTATION, 21671a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren mPanoIndicator, mPanoIndicatorIcons, true); 21771a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren } else { 21871a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren changeVisibility(mPanoIndicator, View.GONE); 219a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren } 220a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren } 221a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren 222abf54e2994961395a0feb0b08353e62718443f23Spike Sprague private void syncExposureIndicator() { 223abf54e2994961395a0feb0b08353e62718443f23Spike Sprague if (mExposureIndicatorN2 == null 224abf54e2994961395a0feb0b08353e62718443f23Spike Sprague || mExposureIndicatorN1 == null 225abf54e2994961395a0feb0b08353e62718443f23Spike Sprague || mExposureIndicatorP1 == null 226abf54e2994961395a0feb0b08353e62718443f23Spike Sprague || mExposureIndicatorP2 == null) { 227abf54e2994961395a0feb0b08353e62718443f23Spike Sprague Log.w(TAG, "Trying to sync exposure indicators that are not initialized."); 228abf54e2994961395a0feb0b08353e62718443f23Spike Sprague return; 229abf54e2994961395a0feb0b08353e62718443f23Spike Sprague } 230abf54e2994961395a0feb0b08353e62718443f23Spike Sprague 231abf54e2994961395a0feb0b08353e62718443f23Spike Sprague 232abf54e2994961395a0feb0b08353e62718443f23Spike Sprague // Reset all exposure indicator icons. 233abf54e2994961395a0feb0b08353e62718443f23Spike Sprague changeVisibility(mExposureIndicatorN2, View.GONE); 234abf54e2994961395a0feb0b08353e62718443f23Spike Sprague changeVisibility(mExposureIndicatorN1, View.GONE); 235abf54e2994961395a0feb0b08353e62718443f23Spike Sprague changeVisibility(mExposureIndicatorP1, View.GONE); 236abf54e2994961395a0feb0b08353e62718443f23Spike Sprague changeVisibility(mExposureIndicatorP2, View.GONE); 237abf54e2994961395a0feb0b08353e62718443f23Spike Sprague 238abf54e2994961395a0feb0b08353e62718443f23Spike Sprague ButtonManager buttonManager = mController.getButtonManager(); 239abf54e2994961395a0feb0b08353e62718443f23Spike Sprague if (buttonManager.isEnabled(ButtonManager.BUTTON_EXPOSURE_COMPENSATION) 240abf54e2994961395a0feb0b08353e62718443f23Spike Sprague && buttonManager.isVisible(ButtonManager.BUTTON_EXPOSURE_COMPENSATION)) { 241abf54e2994961395a0feb0b08353e62718443f23Spike Sprague 242abf54e2994961395a0feb0b08353e62718443f23Spike Sprague String compString = mController.getSettingsManager().get( 243abf54e2994961395a0feb0b08353e62718443f23Spike Sprague SettingsManager.SETTING_EXPOSURE_COMPENSATION_VALUE); 244abf54e2994961395a0feb0b08353e62718443f23Spike Sprague int comp = Integer.parseInt(compString); 245abf54e2994961395a0feb0b08353e62718443f23Spike Sprague // Turn on the appropriate indicator. 246abf54e2994961395a0feb0b08353e62718443f23Spike Sprague // Each integer compensation represent 1/6 of a stop. 247abf54e2994961395a0feb0b08353e62718443f23Spike Sprague switch (comp / 6) { 248abf54e2994961395a0feb0b08353e62718443f23Spike Sprague case -2: 249abf54e2994961395a0feb0b08353e62718443f23Spike Sprague changeVisibility(mExposureIndicatorN2, View.VISIBLE); 250abf54e2994961395a0feb0b08353e62718443f23Spike Sprague break; 251abf54e2994961395a0feb0b08353e62718443f23Spike Sprague case -1: 252abf54e2994961395a0feb0b08353e62718443f23Spike Sprague changeVisibility(mExposureIndicatorN1, View.VISIBLE); 253abf54e2994961395a0feb0b08353e62718443f23Spike Sprague break; 254abf54e2994961395a0feb0b08353e62718443f23Spike Sprague case 0: 255abf54e2994961395a0feb0b08353e62718443f23Spike Sprague // Do nothing. 256abf54e2994961395a0feb0b08353e62718443f23Spike Sprague break; 257abf54e2994961395a0feb0b08353e62718443f23Spike Sprague case 1: 258abf54e2994961395a0feb0b08353e62718443f23Spike Sprague changeVisibility(mExposureIndicatorP1, View.VISIBLE); 259abf54e2994961395a0feb0b08353e62718443f23Spike Sprague break; 260abf54e2994961395a0feb0b08353e62718443f23Spike Sprague case 2: 261abf54e2994961395a0feb0b08353e62718443f23Spike Sprague changeVisibility(mExposureIndicatorP2, View.VISIBLE); 262abf54e2994961395a0feb0b08353e62718443f23Spike Sprague } 263abf54e2994961395a0feb0b08353e62718443f23Spike Sprague } 264abf54e2994961395a0feb0b08353e62718443f23Spike Sprague } 265abf54e2994961395a0feb0b08353e62718443f23Spike Sprague 266a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren /** 267e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * Sets the image resource and visibility of the indicator 268e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * based on the indicator's corresponding setting state. 269e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren */ 270e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren private void setIndicatorState(SettingsManager settingsManager, int id, 271a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren ImageView imageView, TypedArray iconArray, boolean showDefault) { 272e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 273e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren // Set the correct image src. 274e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren String value = settingsManager.get(id); 275e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren int valueIndex = settingsManager.getStringValueIndex(id); 276e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren if (valueIndex < 0) { 277e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren // This can happen when the setting is camera dependent 278e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren // and the camera is not yet open. CameraAppUI.onChangeCamera() 279e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren // will call this again when the camera is open. 280e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren Log.w(TAG, "The setting for this indicator is not available."); 281e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren imageView.setVisibility(View.GONE); 282e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren return; 283e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 284e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren Drawable drawable = iconArray.getDrawable(valueIndex); 285e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren if (drawable == null) { 286e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren throw new IllegalStateException("Indicator drawable is null."); 287e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 288e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren imageView.setImageDrawable(drawable); 289e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 290e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren // Set the indicator visible if not in default state. 2916e07fe22cf84e9eea02d368bf64ab68d92401f20Erin Dahlgren boolean visibilityChanged = false; 292a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren if (!showDefault && settingsManager.isDefault(id)) { 29371a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren changeVisibility(imageView, View.GONE); 294e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } else { 29571a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren changeVisibility(imageView, View.VISIBLE); 296e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 297e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 298e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 299e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren @Override 300e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren public void onSettingChanged(SettingsManager settingsManager, int id) { 301e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren switch (id) { 302e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren case SettingsManager.SETTING_FLASH_MODE: { 303a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren syncFlashIndicator(); 304e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren break; 305e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 306e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren case SettingsManager.SETTING_VIDEOCAMERA_FLASH_MODE: { 307a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren syncFlashIndicator(); 308e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren break; 309e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 3108ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu case SettingsManager.SETTING_CAMERA_HDR_PLUS: { 3118ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu syncHdrIndicator(); 3128ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu break; 3138ad8ad4841f65ee89e3c5e79f57d95cf8e4438b4Doris Liu } 314e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren case SettingsManager.SETTING_CAMERA_HDR: { 315a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren syncHdrIndicator(); 316a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren break; 317a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren } 31871a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren case SettingsManager.SETTING_CAMERA_PANO_ORIENTATION: { 31971a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren syncPanoIndicator(); 32071a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren break; 32171a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren } 322abf54e2994961395a0feb0b08353e62718443f23Spike Sprague case SettingsManager.SETTING_EXPOSURE_COMPENSATION_ENABLED: 323abf54e2994961395a0feb0b08353e62718443f23Spike Sprague // Fall through to the next case. 324abf54e2994961395a0feb0b08353e62718443f23Spike Sprague case SettingsManager.SETTING_EXPOSURE_COMPENSATION_VALUE: { 325abf54e2994961395a0feb0b08353e62718443f23Spike Sprague syncExposureIndicator(); 326abf54e2994961395a0feb0b08353e62718443f23Spike Sprague break; 327abf54e2994961395a0feb0b08353e62718443f23Spike Sprague } 328e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren default: { 329e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren // Do nothing. 330e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 331e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 332e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 333e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren} 334