IndicatorIconController.java revision a1fab413bcbe5f62ae1d829bac0539519fef96a6
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.util.AttributeSet; 23e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport android.util.Log; 24e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport android.view.View; 25e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport android.view.ViewGroup; 26e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport android.widget.ImageView; 27e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 28e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport com.android.camera.ButtonManager; 29e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport com.android.camera.app.AppController; 30e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport com.android.camera.module.ModulesInfo; 31e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport com.android.camera.settings.SettingsManager; 32e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 33e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenimport com.android.camera2.R; 34e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 35e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren/** 36e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * IndicatorIconController sets the visibility and icon state of 37e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * on screen indicators. 38e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * 39e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * Indicators are only visible if they are in a non-default state. The 40e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * visibility of an indicator is set when an indicator's setting changes. 41e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren */ 42e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgrenpublic class IndicatorIconController 43e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren implements SettingsManager.OnSettingChangedListener, 44e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren ButtonManager.ButtonStatusListener { 45e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 46e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren private final static String TAG = "IndicatorIconController"; 47e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 48e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren private ImageView mFlashIndicator; 49e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren private ImageView mHdrIndicator; 50a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren private ImageView mRefocusIndicator; 51a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren private ImageView mPanoramaIndicator; 52e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 53e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren private TypedArray mFlashIndicatorPhotoIcons; 54e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren private TypedArray mFlashIndicatorVideoIcons; 55e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren private TypedArray mHdrIndicatorIcons; 56a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren private TypedArray mRefocusIndicatorIcons; 57a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren private TypedArray mPanoramaIndicatorIcons; 58e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 59e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren private AppController mController; 60e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 61e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren public IndicatorIconController(AppController controller, View root) { 62e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren mController = controller; 63e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren Context context = controller.getAndroidContext(); 64e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 65e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren mFlashIndicator = (ImageView) root.findViewById(R.id.flash_indicator); 66e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren mHdrIndicator = (ImageView) root.findViewById(R.id.hdr_indicator); 67a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren mRefocusIndicator = (ImageView) root.findViewById(R.id.refocus_indicator); 68a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren mPanoramaIndicator = (ImageView) root.findViewById(R.id.panorama_indicator); 69e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 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); 74e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren mHdrIndicatorIcons = context.getResources().obtainTypedArray( 75e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren R.array.pref_camera_hdr_plus_indicator_icons); 76a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren mRefocusIndicatorIcons = context.getResources().obtainTypedArray( 77a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren R.array.refocus_indicator_icons); 78a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren mPanoramaIndicatorIcons = context.getResources().obtainTypedArray( 79a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren R.array.panorama_indicator_icons); 80e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 81e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 82e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren @Override 83e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren public void onButtonVisibilityChanged(ButtonManager buttonManager, int buttonId) { 84e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren syncIndicatorWithButton(buttonId); 85e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 86e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 87e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren @Override 88e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren public void onButtonEnabledChanged(ButtonManager buttonManager, int buttonId) { 89e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren syncIndicatorWithButton(buttonId); 90e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 91e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 92e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren /** 93e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * Syncs a specific indicator's icon and visibility 94e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * based on the enabled state and visibility of a button. 95e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren */ 96e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren private void syncIndicatorWithButton(int buttonId) { 97e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren switch (buttonId) { 98a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren case ButtonManager.BUTTON_FLASH: { 99a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren syncFlashIndicator(); 100a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren break; 101e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 102a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren case ButtonManager.BUTTON_TORCH: { 103a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren syncFlashIndicator(); 104a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren break; 105e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 106a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren case ButtonManager.BUTTON_HDRPLUS: { 107a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren syncHdrIndicator(); 108a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren break; 109a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren } 110a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren case ButtonManager.BUTTON_REFOCUS: { 111a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren syncRefocusIndicator(); 112a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren break; 113e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 114a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren case ButtonManager.BUTTON_PANO_HORIZONTAL: { 115a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren syncPanoramaIndicator(); 116a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren break; 117a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren } 118a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren case ButtonManager.BUTTON_PANO_VERTICAL: { 119a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren syncPanoramaIndicator(); 120a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren break; 121a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren } 122a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren default: 123a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren // Do nothing. The indicator doesn't care 124a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren // about button that don't correspond to indicators. 125e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 126e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 127e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 128e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren /** 129e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * Sets all indicators to the correct resource and visibility 130e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * based on the current settings. 131e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren */ 132a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren public void syncIndicators() { 133a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren syncFlashIndicator(); 134a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren syncHdrIndicator(); 135a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren syncRefocusIndicator(); 136a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren syncPanoramaIndicator(); 137e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 138e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 139e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren /** 140e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * Sync the icon and visibility of the flash indicator. 141e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren */ 142a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren private void syncFlashIndicator() { 143a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren ButtonManager buttonManager = mController.getButtonManager(); 144e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren // If flash isn't an enabled and visible option, 145e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren // do not show the indicator. 146e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren if (buttonManager.isEnabled(ButtonManager.BUTTON_FLASH) 147e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren && buttonManager.isVisible(ButtonManager.BUTTON_FLASH)) { 148e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 149a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren int modeIndex = mController.getCurrentModuleIndex(); 150a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren if (modeIndex == mController.getAndroidContext().getResources() 151bd1b8f910d6f2c94daac304f4bd1a098939474c3Doris Liu .getInteger(R.integer.camera_mode_video)) { 152a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren setIndicatorState(mController.getSettingsManager(), 153e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren SettingsManager.SETTING_VIDEOCAMERA_FLASH_MODE, 154a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren mFlashIndicator, mFlashIndicatorVideoIcons, false); 155e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } else { 156a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren setIndicatorState(mController.getSettingsManager(), 157e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren SettingsManager.SETTING_FLASH_MODE, 158a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren mFlashIndicator, mFlashIndicatorPhotoIcons, false); 159e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 160e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } else { 161e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren mFlashIndicator.setVisibility(View.GONE); 162e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 163e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 164e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 165e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren /** 166e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * Sync the icon and the visibility of the hdr indicator. 167e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren */ 168a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren private void syncHdrIndicator() { 169a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren ButtonManager buttonManager = mController.getButtonManager(); 170e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren // If hdr isn't an enabled and visible option, 171e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren // do not show the indicator. 172e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren if (buttonManager.isEnabled(ButtonManager.BUTTON_HDRPLUS) 173e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren && buttonManager.isVisible(ButtonManager.BUTTON_HDRPLUS)) { 174a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren setIndicatorState(mController.getSettingsManager(), 175e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren SettingsManager.SETTING_CAMERA_HDR, 176a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren mHdrIndicator, mHdrIndicatorIcons, false); 177e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } else { 178e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren mHdrIndicator.setVisibility(View.GONE); 179e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 180e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 181e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 182e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren /** 183a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren * Sync the icon and the visibility of the refocus indicator. 184a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren */ 185a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren private void syncRefocusIndicator() { 186a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren ButtonManager buttonManager = mController.getButtonManager(); 187a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren // If refocus isn't an enabled and visible option, 188a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren // do not show the indicator. 189a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren if (buttonManager.isEnabled(ButtonManager.BUTTON_REFOCUS) 190a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren && buttonManager.isVisible(ButtonManager.BUTTON_REFOCUS)) { 191a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren setIndicatorState(mController.getSettingsManager(), 192a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren SettingsManager.SETTING_CAMERA_REFOCUS, 193a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren mRefocusIndicator, mRefocusIndicatorIcons, false); 194a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren } else { 195a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren mRefocusIndicator.setVisibility(View.GONE); 196a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren } 197a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren } 198a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren 199a906809bd3e67f3ceaa070baefbdca8c9cb3d766Erin Dahlgren /** 200a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren * Sync the icon and the visibility of the panorama indicator. 201a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren */ 202a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren private void syncPanoramaIndicator() { 203a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren ButtonManager buttonManager = mController.getButtonManager(); 204a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren // If refocus isn't an enabled and visible option, 205a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren // do not show the indicator. 206a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren boolean panoEnabled = (buttonManager.isEnabled(ButtonManager.BUTTON_PANO_HORIZONTAL) 207a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren && buttonManager.isEnabled(ButtonManager.BUTTON_PANO_VERTICAL)); 208a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren boolean panoVisible = (buttonManager.isVisible(ButtonManager.BUTTON_PANO_HORIZONTAL) 209a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren && buttonManager.isVisible(ButtonManager.BUTTON_PANO_VERTICAL)); 210a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren if (panoEnabled && panoVisible) { 211a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren setIndicatorState(mController.getSettingsManager(), 212a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren SettingsManager.SETTING_CAMERA_PANO_ORIENTATION, 213a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren mPanoramaIndicator, mPanoramaIndicatorIcons, true); 214a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren } else { 215a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren mPanoramaIndicator.setVisibility(View.GONE); 216a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren } 217a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren } 218a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren 219a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren /** 220e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * Sets the image resource and visibility of the indicator 221e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren * based on the indicator's corresponding setting state. 222e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren */ 223e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren private void setIndicatorState(SettingsManager settingsManager, int id, 224a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren ImageView imageView, TypedArray iconArray, boolean showDefault) { 225e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 226e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren // Set the correct image src. 227e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren String value = settingsManager.get(id); 228e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren int valueIndex = settingsManager.getStringValueIndex(id); 229e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren if (valueIndex < 0) { 230e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren // This can happen when the setting is camera dependent 231e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren // and the camera is not yet open. CameraAppUI.onChangeCamera() 232e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren // will call this again when the camera is open. 233e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren Log.w(TAG, "The setting for this indicator is not available."); 234e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren imageView.setVisibility(View.GONE); 235e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren return; 236e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 237e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren Drawable drawable = iconArray.getDrawable(valueIndex); 238e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren if (drawable == null) { 239e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren throw new IllegalStateException("Indicator drawable is null."); 240e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 241e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren imageView.setImageDrawable(drawable); 242e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 243e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren // Set the indicator visible if not in default state. 244a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren if (!showDefault && settingsManager.isDefault(id)) { 245e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren imageView.setVisibility(View.GONE); 246e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } else { 247e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren imageView.setVisibility(View.VISIBLE); 248e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 249e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 250e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren 251e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren @Override 252e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren public void onSettingChanged(SettingsManager settingsManager, int id) { 253e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren switch (id) { 254e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren case SettingsManager.SETTING_FLASH_MODE: { 255a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren syncFlashIndicator(); 256e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren break; 257e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 258e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren case SettingsManager.SETTING_VIDEOCAMERA_FLASH_MODE: { 259a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren syncFlashIndicator(); 260e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren break; 261e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 262e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren case SettingsManager.SETTING_CAMERA_HDR: { 263a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren syncHdrIndicator(); 264a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren break; 265a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren } 266a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren case SettingsManager.SETTING_CAMERA_REFOCUS: { 267a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren syncRefocusIndicator(); 268a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren break; 269a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren } 270a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren case SettingsManager.SETTING_CAMERA_PANO_ORIENTATION: { 271a1fab413bcbe5f62ae1d829bac0539519fef96a6Erin Dahlgren syncPanoramaIndicator(); 272e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren break; 273e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 274e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren default: { 275e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren // Do nothing. 276e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 277e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 278e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren } 279e2a1f54fbf6a8a7beff5b7695654ca21e63643afErin Dahlgren} 280