IndicatorIconController.java revision 5c9d7f34039ac96b3a136ccd6b16162e3b220848
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; 286190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgrenimport com.android.camera.settings.Keys; 29e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport com.android.camera.settings.SettingsManager; 30d706ea69a87229dca5cb8f16125decfbcbc5303dErin Dahlgrenimport com.android.camera.util.PhotoSphereHelper; 31e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport com.android.camera2.R; 32e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 33e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren/** 34e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * IndicatorIconController sets the visibility and icon state of 35e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * on screen indicators. 36e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * 37e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * Indicators are only visible if they are in a non-default state. The 38e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * visibility of an indicator is set when an indicator's setting changes. 39e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren */ 40e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenpublic class IndicatorIconController 41e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren implements SettingsManager.OnSettingChangedListener, 42e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren ButtonManager.ButtonStatusListener { 43e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 445596b4c902dcb685928b43678f428746ca5ffd08Angus Kong private final static Log.Tag TAG = new Log.Tag("IndicatorIconCtrlr"); 45e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 46e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren private ImageView mFlashIndicator; 47e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren private ImageView mHdrIndicator; 4871a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren private ImageView mPanoIndicator; 496c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu private ImageView mCountdownTimerIndicator; 50e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 51abf54e2994961395a0feb0b08353e62718443f23Spike Sprague private ImageView mExposureIndicatorN2; 52abf54e2994961395a0feb0b08353e62718443f23Spike Sprague private ImageView mExposureIndicatorN1; 53abf54e2994961395a0feb0b08353e62718443f23Spike Sprague private ImageView mExposureIndicatorP1; 54abf54e2994961395a0feb0b08353e62718443f23Spike Sprague private ImageView mExposureIndicatorP2; 55abf54e2994961395a0feb0b08353e62718443f23Spike Sprague 56e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren private TypedArray mFlashIndicatorPhotoIcons; 57e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren private TypedArray mFlashIndicatorVideoIcons; 58e7d745c15f1ee0f3a160e7601715e70f9646e6c0Erin Dahlgren private TypedArray mHdrPlusIndicatorIcons; 59e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren private TypedArray mHdrIndicatorIcons; 6071a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren private TypedArray mPanoIndicatorIcons; 616c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu private TypedArray mCountdownTimerIndicatorIcons; 626e07fe22cf84e9eea02d368bf64ab68d92401f20Erin Dahlgren 63e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren private AppController mController; 64e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 65e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren public IndicatorIconController(AppController controller, View root) { 66e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren mController = controller; 67e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren Context context = controller.getAndroidContext(); 68e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 69e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren mFlashIndicator = (ImageView) root.findViewById(R.id.flash_indicator); 70e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren mFlashIndicatorPhotoIcons = context.getResources().obtainTypedArray( 71e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren R.array.camera_flashmode_indicator_icons); 72e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren mFlashIndicatorVideoIcons = context.getResources().obtainTypedArray( 73e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren R.array.video_flashmode_indicator_icons); 7471a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren 7571a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren mHdrIndicator = (ImageView) root.findViewById(R.id.hdr_indicator); 76e7d745c15f1ee0f3a160e7601715e70f9646e6c0Erin Dahlgren mHdrPlusIndicatorIcons = context.getResources().obtainTypedArray( 77e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren R.array.pref_camera_hdr_plus_indicator_icons); 78e7d745c15f1ee0f3a160e7601715e70f9646e6c0Erin Dahlgren mHdrIndicatorIcons = context.getResources().obtainTypedArray( 79e7d745c15f1ee0f3a160e7601715e70f9646e6c0Erin Dahlgren R.array.pref_camera_hdr_indicator_icons); 8071a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren 8171a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren int panoIndicatorArrayId = PhotoSphereHelper.getPanoramaOrientationIndicatorArrayId(); 8271a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren if (panoIndicatorArrayId > 0) { 8371a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren mPanoIndicator = (ImageView) root.findViewById(R.id.pano_indicator); 8471a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren mPanoIndicatorIcons = 8571a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren context.getResources().obtainTypedArray(panoIndicatorArrayId); 8671a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren } 87abf54e2994961395a0feb0b08353e62718443f23Spike Sprague 886c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu mCountdownTimerIndicator = (ImageView) root.findViewById(R.id.countdown_timer_indicator); 896c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu mCountdownTimerIndicatorIcons = context.getResources().obtainTypedArray( 906c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu R.array.pref_camera_countdown_indicators); 916c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu 92abf54e2994961395a0feb0b08353e62718443f23Spike Sprague mExposureIndicatorN2 = (ImageView) root.findViewById(R.id.exposure_n2_indicator); 93abf54e2994961395a0feb0b08353e62718443f23Spike Sprague mExposureIndicatorN1 = (ImageView) root.findViewById(R.id.exposure_n1_indicator); 94abf54e2994961395a0feb0b08353e62718443f23Spike Sprague mExposureIndicatorP1 = (ImageView) root.findViewById(R.id.exposure_p1_indicator); 95abf54e2994961395a0feb0b08353e62718443f23Spike Sprague mExposureIndicatorP2 = (ImageView) root.findViewById(R.id.exposure_p2_indicator); 966e07fe22cf84e9eea02d368bf64ab68d92401f20Erin Dahlgren } 976e07fe22cf84e9eea02d368bf64ab68d92401f20Erin Dahlgren 98e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren @Override 99e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren public void onButtonVisibilityChanged(ButtonManager buttonManager, int buttonId) { 100e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren syncIndicatorWithButton(buttonId); 101e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 102e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 103e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren @Override 104e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren public void onButtonEnabledChanged(ButtonManager buttonManager, int buttonId) { 105e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren syncIndicatorWithButton(buttonId); 106e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 107e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 108e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren /** 109e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * Syncs a specific indicator's icon and visibility 110e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * based on the enabled state and visibility of a button. 111e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren */ 112e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren private void syncIndicatorWithButton(int buttonId) { 113e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren switch (buttonId) { 114a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren case ButtonManager.BUTTON_FLASH: { 115a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren syncFlashIndicator(); 116a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren break; 117e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 118a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren case ButtonManager.BUTTON_TORCH: { 119a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren syncFlashIndicator(); 120a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren break; 121e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 12215473d4b69f4ad619aa10430e4bc86ab4fa815d0Erin Dahlgren case ButtonManager.BUTTON_HDR_PLUS: { 123a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren syncHdrIndicator(); 124a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren break; 125a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren } 126e7d745c15f1ee0f3a160e7601715e70f9646e6c0Erin Dahlgren case ButtonManager.BUTTON_HDR: { 127e7d745c15f1ee0f3a160e7601715e70f9646e6c0Erin Dahlgren syncHdrIndicator(); 128e7d745c15f1ee0f3a160e7601715e70f9646e6c0Erin Dahlgren break; 129e7d745c15f1ee0f3a160e7601715e70f9646e6c0Erin Dahlgren } 130abf54e2994961395a0feb0b08353e62718443f23Spike Sprague case ButtonManager.BUTTON_EXPOSURE_COMPENSATION: { 131abf54e2994961395a0feb0b08353e62718443f23Spike Sprague syncExposureIndicator(); 132abf54e2994961395a0feb0b08353e62718443f23Spike Sprague break; 133abf54e2994961395a0feb0b08353e62718443f23Spike Sprague } 134a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren default: 135a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren // Do nothing. The indicator doesn't care 136a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren // about button that don't correspond to indicators. 137e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 138e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 139e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 140e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren /** 141e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * Sets all indicators to the correct resource and visibility 142e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * based on the current settings. 143e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren */ 144a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren public void syncIndicators() { 145a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren syncFlashIndicator(); 146a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren syncHdrIndicator(); 14771a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren syncPanoIndicator(); 148abf54e2994961395a0feb0b08353e62718443f23Spike Sprague syncExposureIndicator(); 1496c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu syncCountdownTimerIndicator(); 15071a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren } 15171a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren 15271a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren /** 15371a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren * If the new visibility is different from the current visibility 15471a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren * on a view, change the visibility and call any registered 15571a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren * {@link OnIndicatorVisibilityChangedListener}. 15671a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren */ 157abf54e2994961395a0feb0b08353e62718443f23Spike Sprague private static void changeVisibility(View view, int visibility) { 15871a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren if (view.getVisibility() != visibility) { 15971a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren view.setVisibility(visibility); 16071a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren } 161e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 162e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 163e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren /** 164e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * Sync the icon and visibility of the flash indicator. 165e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren */ 166a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren private void syncFlashIndicator() { 167a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren ButtonManager buttonManager = mController.getButtonManager(); 168e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren // If flash isn't an enabled and visible option, 169e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren // do not show the indicator. 170e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren if (buttonManager.isEnabled(ButtonManager.BUTTON_FLASH) 171e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren && buttonManager.isVisible(ButtonManager.BUTTON_FLASH)) { 172e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 173a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren int modeIndex = mController.getCurrentModuleIndex(); 174a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren if (modeIndex == mController.getAndroidContext().getResources() 175bd1b8f910d6f2c94daac304f4bd1a098939474c3Doris Liu .getInteger(R.integer.camera_mode_video)) { 1766190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren setIndicatorState(mController.getCameraScope(), 1776190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren Keys.KEY_VIDEOCAMERA_FLASH_MODE, mFlashIndicator, 1786190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren mFlashIndicatorVideoIcons, false); 17915473d4b69f4ad619aa10430e4bc86ab4fa815d0Erin Dahlgren } else if (modeIndex == mController.getAndroidContext().getResources() 18015473d4b69f4ad619aa10430e4bc86ab4fa815d0Erin Dahlgren .getInteger(R.integer.camera_mode_gcam)) { 1816190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren setIndicatorState(mController.getCameraScope(), 1826190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren Keys.KEY_HDR_PLUS_FLASH_MODE, mFlashIndicator, 1836190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren mFlashIndicatorPhotoIcons, false); 184e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } else { 1856190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren setIndicatorState(mController.getCameraScope(), 1866190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren Keys.KEY_FLASH_MODE, mFlashIndicator, 1876190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren mFlashIndicatorPhotoIcons, false); 188e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 189e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } else { 19071a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren changeVisibility(mFlashIndicator, View.GONE); 191e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 192e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 193e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 194e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren /** 195e7d745c15f1ee0f3a160e7601715e70f9646e6c0Erin Dahlgren * Sync the icon and the visibility of the hdr/hdrplus indicator. 196e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren */ 197a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren private void syncHdrIndicator() { 198a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren ButtonManager buttonManager = mController.getButtonManager(); 199e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren // If hdr isn't an enabled and visible option, 200e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren // do not show the indicator. 20115473d4b69f4ad619aa10430e4bc86ab4fa815d0Erin Dahlgren if (buttonManager.isEnabled(ButtonManager.BUTTON_HDR_PLUS) 20215473d4b69f4ad619aa10430e4bc86ab4fa815d0Erin Dahlgren && buttonManager.isVisible(ButtonManager.BUTTON_HDR_PLUS)) { 2036190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren setIndicatorState(SettingsManager.SCOPE_GLOBAL, 2046190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren Keys.KEY_CAMERA_HDR_PLUS, mHdrIndicator, 2056190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren mHdrPlusIndicatorIcons, false); 206e7d745c15f1ee0f3a160e7601715e70f9646e6c0Erin Dahlgren } else if (buttonManager.isEnabled(ButtonManager.BUTTON_HDR) 207e7d745c15f1ee0f3a160e7601715e70f9646e6c0Erin Dahlgren && buttonManager.isVisible(ButtonManager.BUTTON_HDR)) { 2086190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren setIndicatorState(SettingsManager.SCOPE_GLOBAL, 2096190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren Keys.KEY_CAMERA_HDR_PLUS, mHdrIndicator, 2106190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren mHdrIndicatorIcons, false); 211e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } else { 21271a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren changeVisibility(mHdrIndicator, View.GONE); 21371a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren } 21471a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren } 21571a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren 21671a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren /** 21771a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren * Sync the icon and the visibility of the pano indicator. 21871a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren */ 21971a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren private void syncPanoIndicator() { 22071a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren if (mPanoIndicator == null) { 22171a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren Log.w(TAG, "Trying to sync a pano indicator that is not initialized."); 22271a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren return; 22371a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren } 22471a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren 22571a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren ButtonManager buttonManager = mController.getButtonManager(); 22659345144c4bde59b81bb19c95cdd977c1d1a9cd4Spike Sprague if (buttonManager.isPanoEnabled()) { 2276190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren setIndicatorState(SettingsManager.SCOPE_GLOBAL, 2285c9d7f34039ac96b3a136ccd6b16162e3b220848Alan Newberger Keys.KEY_CAMERA_PANO_ORIENTATION, mPanoIndicator, 2296190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren mPanoIndicatorIcons, true); 23071a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren } else { 23171a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren changeVisibility(mPanoIndicator, View.GONE); 232a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren } 233a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren } 234a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren 235abf54e2994961395a0feb0b08353e62718443f23Spike Sprague private void syncExposureIndicator() { 236abf54e2994961395a0feb0b08353e62718443f23Spike Sprague if (mExposureIndicatorN2 == null 237abf54e2994961395a0feb0b08353e62718443f23Spike Sprague || mExposureIndicatorN1 == null 238abf54e2994961395a0feb0b08353e62718443f23Spike Sprague || mExposureIndicatorP1 == null 239abf54e2994961395a0feb0b08353e62718443f23Spike Sprague || mExposureIndicatorP2 == null) { 240abf54e2994961395a0feb0b08353e62718443f23Spike Sprague Log.w(TAG, "Trying to sync exposure indicators that are not initialized."); 241abf54e2994961395a0feb0b08353e62718443f23Spike Sprague return; 242abf54e2994961395a0feb0b08353e62718443f23Spike Sprague } 243abf54e2994961395a0feb0b08353e62718443f23Spike Sprague 244abf54e2994961395a0feb0b08353e62718443f23Spike Sprague 245abf54e2994961395a0feb0b08353e62718443f23Spike Sprague // Reset all exposure indicator icons. 246abf54e2994961395a0feb0b08353e62718443f23Spike Sprague changeVisibility(mExposureIndicatorN2, View.GONE); 247abf54e2994961395a0feb0b08353e62718443f23Spike Sprague changeVisibility(mExposureIndicatorN1, View.GONE); 248abf54e2994961395a0feb0b08353e62718443f23Spike Sprague changeVisibility(mExposureIndicatorP1, View.GONE); 249abf54e2994961395a0feb0b08353e62718443f23Spike Sprague changeVisibility(mExposureIndicatorP2, View.GONE); 250abf54e2994961395a0feb0b08353e62718443f23Spike Sprague 251abf54e2994961395a0feb0b08353e62718443f23Spike Sprague ButtonManager buttonManager = mController.getButtonManager(); 252abf54e2994961395a0feb0b08353e62718443f23Spike Sprague if (buttonManager.isEnabled(ButtonManager.BUTTON_EXPOSURE_COMPENSATION) 253abf54e2994961395a0feb0b08353e62718443f23Spike Sprague && buttonManager.isVisible(ButtonManager.BUTTON_EXPOSURE_COMPENSATION)) { 254abf54e2994961395a0feb0b08353e62718443f23Spike Sprague 2552ef0f9dc95527a354846940bae675741c464e6aeAlan Newberger int compValue = mController.getSettingsManager().getInteger( 2562ef0f9dc95527a354846940bae675741c464e6aeAlan Newberger mController.getCameraScope(), Keys.KEY_EXPOSURE); 2572ef0f9dc95527a354846940bae675741c464e6aeAlan Newberger int comp = Math.round(compValue * buttonManager.getExposureCompensationStep()); 258156f3e5b41cd2049230b1423c455763d31738693Spike Sprague 259abf54e2994961395a0feb0b08353e62718443f23Spike Sprague // Turn on the appropriate indicator. 260156f3e5b41cd2049230b1423c455763d31738693Spike Sprague switch (comp) { 261abf54e2994961395a0feb0b08353e62718443f23Spike Sprague case -2: 262abf54e2994961395a0feb0b08353e62718443f23Spike Sprague changeVisibility(mExposureIndicatorN2, View.VISIBLE); 263abf54e2994961395a0feb0b08353e62718443f23Spike Sprague break; 264abf54e2994961395a0feb0b08353e62718443f23Spike Sprague case -1: 265abf54e2994961395a0feb0b08353e62718443f23Spike Sprague changeVisibility(mExposureIndicatorN1, View.VISIBLE); 266abf54e2994961395a0feb0b08353e62718443f23Spike Sprague break; 267abf54e2994961395a0feb0b08353e62718443f23Spike Sprague case 0: 268abf54e2994961395a0feb0b08353e62718443f23Spike Sprague // Do nothing. 269abf54e2994961395a0feb0b08353e62718443f23Spike Sprague break; 270abf54e2994961395a0feb0b08353e62718443f23Spike Sprague case 1: 271abf54e2994961395a0feb0b08353e62718443f23Spike Sprague changeVisibility(mExposureIndicatorP1, View.VISIBLE); 272abf54e2994961395a0feb0b08353e62718443f23Spike Sprague break; 273abf54e2994961395a0feb0b08353e62718443f23Spike Sprague case 2: 274abf54e2994961395a0feb0b08353e62718443f23Spike Sprague changeVisibility(mExposureIndicatorP2, View.VISIBLE); 275abf54e2994961395a0feb0b08353e62718443f23Spike Sprague } 276abf54e2994961395a0feb0b08353e62718443f23Spike Sprague } 277abf54e2994961395a0feb0b08353e62718443f23Spike Sprague } 278abf54e2994961395a0feb0b08353e62718443f23Spike Sprague 2796c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu private void syncCountdownTimerIndicator() { 2806c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu ButtonManager buttonManager = mController.getButtonManager(); 2816c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu 2826c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu if (buttonManager.isEnabled(ButtonManager.BUTTON_COUNTDOWN) 2836190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren && buttonManager.isVisible(ButtonManager.BUTTON_COUNTDOWN)) { 2846190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren setIndicatorState(SettingsManager.SCOPE_GLOBAL, 2856190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren Keys.KEY_COUNTDOWN_DURATION, mCountdownTimerIndicator, 2866190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren mCountdownTimerIndicatorIcons, false); 2876c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu } else { 2886c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu changeVisibility(mCountdownTimerIndicator, View.GONE); 2896c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu } 2906c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu } 2916c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu 292a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren /** 293e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * Sets the image resource and visibility of the indicator 294e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * based on the indicator's corresponding setting state. 295e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren */ 2966190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren private void setIndicatorState(String scope, String key, ImageView imageView, 2976190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren TypedArray iconArray, boolean showDefault) { 2986190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren SettingsManager settingsManager = mController.getSettingsManager(); 299e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 3006190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren int valueIndex = settingsManager.getIndexOfCurrentValue(scope, key); 301e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren if (valueIndex < 0) { 302e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren // This can happen when the setting is camera dependent 303e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren // and the camera is not yet open. CameraAppUI.onChangeCamera() 304e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren // will call this again when the camera is open. 305e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren Log.w(TAG, "The setting for this indicator is not available."); 306e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren imageView.setVisibility(View.GONE); 307e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren return; 308e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 309e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren Drawable drawable = iconArray.getDrawable(valueIndex); 310e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren if (drawable == null) { 311e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren throw new IllegalStateException("Indicator drawable is null."); 312e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 313e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren imageView.setImageDrawable(drawable); 314e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 315e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren // Set the indicator visible if not in default state. 3166e07fe22cf84e9eea02d368bf64ab68d92401f20Erin Dahlgren boolean visibilityChanged = false; 3176190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren if (!showDefault && settingsManager.isDefault(scope, key)) { 31871a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren changeVisibility(imageView, View.GONE); 319e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } else { 32071a742968e6b9efe2f570e2876f67330bfddf8c1Erin Dahlgren changeVisibility(imageView, View.VISIBLE); 321e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 322e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 323e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 324e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren @Override 3256190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren public void onSettingChanged(SettingsManager settingsManager, String key) { 3266190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren if (key.equals(Keys.KEY_FLASH_MODE)) { 3276190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren syncFlashIndicator(); 3286190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren return; 3296190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren } 3306190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren if (key.equals(Keys.KEY_VIDEOCAMERA_FLASH_MODE)) { 3316190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren syncFlashIndicator(); 3326190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren return; 3336190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren } 3346190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren if (key.equals(Keys.KEY_CAMERA_HDR_PLUS)) { 3356190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren syncHdrIndicator(); 3366190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren return; 3376190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren } 3386190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren if (key.equals(Keys.KEY_CAMERA_HDR)) { 3396190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren syncHdrIndicator(); 3406190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren return; 3416190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren } 3426190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren if (key.equals(Keys.KEY_CAMERA_PANO_ORIENTATION)) { 3436190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren syncPanoIndicator(); 3446190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren return; 3456190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren } 34639529585aee23703553c551eadceca78742cf52bAlan Newberger if (key.equals(Keys.KEY_EXPOSURE)) { 3476190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren syncExposureIndicator(); 3486190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren return; 3496190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren } 3506190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren if (key.equals(Keys.KEY_COUNTDOWN_DURATION)) { 3516190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren syncCountdownTimerIndicator(); 3526190c36db653e848f29d1caefc4fa1bb61e8a662Erin Dahlgren return; 353e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 354e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 3556c75164c89f3bbd4f894b9c49a7914a24268a999Doris Liu 356e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren} 357