ButtonManager.java revision 8a2933b2c0156b752425b499f3081e4ffc350061
1/* 2 * Copyright (C) 2013 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.camera; 18 19import android.app.Activity; 20import android.content.Context; 21import android.util.Log; 22import android.view.View; 23import android.widget.ImageButton; 24 25import com.android.camera.settings.SettingsManager; 26import com.android.camera2.R; 27 28import java.util.ArrayList; 29import java.util.List; 30 31/** 32 * A class for generating pre-initialized 33 * {@link #android.widget.ImageButton}s. 34 */ 35public class ButtonManager { 36 37 public static final int BUTTON_FLASH = 0; 38 public static final int BUTTON_CAMERA = 1; 39 public static final int BUTTON_HDRPLUS = 2; 40 41 /** A reference to the activity for finding button views on demand. */ 42 private CameraActivity mActivity; 43 /** A reference to the application's settings manager. */ 44 private SettingsManager mSettingsManager; 45 46 /** 47 * Get a new global ButtonManager. 48 */ 49 public ButtonManager(CameraActivity activity) { 50 mActivity = activity; 51 mSettingsManager = activity.getSettingsManager(); 52 } 53 54 /** 55 * A callback executed in the state listener of a button. 56 * Used by a module to set specific behavior when a button's 57 * state changes. 58 */ 59 public interface ButtonCallback { 60 public void onStateChanged(int state); 61 } 62 63 private MultiToggleImageButton getButtonOrError(int buttonId, int resId) { 64 MultiToggleImageButton button 65 = (MultiToggleImageButton) mActivity.findViewById(resId); 66 if (button == null) { 67 switch (buttonId) { 68 case BUTTON_FLASH: 69 throw new IllegalStateException("Flash button could not be found."); 70 case BUTTON_CAMERA: 71 throw new IllegalStateException("Camera button could not be found."); 72 case BUTTON_HDRPLUS: 73 throw new IllegalStateException("Hdr button could not be found."); 74 default: 75 throw new IllegalArgumentException("button not known by id=" + buttonId); 76 } 77 } 78 return button; 79 } 80 81 /** 82 * Enable a known button by id, with a state change callback and 83 * a resource id that points to an array of drawables. 84 */ 85 public void enableButton(int buttonId, int resId, ButtonCallback cb, int resIdImages) { 86 MultiToggleImageButton button = getButtonOrError(buttonId, resId); 87 switch (buttonId) { 88 case BUTTON_FLASH: 89 enableFlashButton(button, cb, resIdImages); 90 break; 91 case BUTTON_CAMERA: 92 enableCameraButton(button, cb, resIdImages); 93 break; 94 case BUTTON_HDRPLUS: 95 enableHdrPlusButton(button, cb, resIdImages); 96 break; 97 default: 98 throw new IllegalArgumentException("button not known by id=" + buttonId); 99 } 100 button.setVisibility(View.VISIBLE); 101 } 102 103 /** 104 * Disable a known button by id. 105 */ 106 public void disableButton(int buttonId, int resId) { 107 MultiToggleImageButton button = getButtonOrError(buttonId, resId); 108 button.setVisibility(View.INVISIBLE); 109 } 110 111 /** 112 * Enable a flash button. 113 */ 114 private void enableFlashButton(MultiToggleImageButton button, 115 final ButtonCallback cb, int resIdImages) { 116 117 if (resIdImages > 0) { 118 button.overrideImageIds(resIdImages); 119 } 120 int index = mSettingsManager.getStringValueIndex(SettingsManager.SETTING_FLASH_MODE); 121 if (index >= 0) { 122 button.setState(index, false); 123 } 124 button.setOnStateChangeListener(new MultiToggleImageButton.OnStateChangeListener() { 125 @Override 126 public void stateChanged(View view, int state) { 127 mSettingsManager.setStringValueIndex(SettingsManager.SETTING_FLASH_MODE, state); 128 if (cb != null) { 129 cb.onStateChanged(state); 130 } 131 } 132 }); 133 } 134 135 /** 136 * Enable a camera button. 137 */ 138 private void enableCameraButton(MultiToggleImageButton button, 139 final ButtonCallback cb, int resIdImages) { 140 141 if (resIdImages > 0) { 142 button.overrideImageIds(resIdImages); 143 } 144 145 int index = mSettingsManager.getStringValueIndex(SettingsManager.SETTING_CAMERA_ID); 146 if (index >= 0) { 147 button.setState(index, false); 148 } 149 150 button.setOnStateChangeListener(new MultiToggleImageButton.OnStateChangeListener() { 151 @Override 152 public void stateChanged(View view, int state) { 153 mSettingsManager.setStringValueIndex(SettingsManager.SETTING_CAMERA_ID, state); 154 int cameraId = Integer.parseInt(mSettingsManager.get( 155 SettingsManager.SETTING_CAMERA_ID)); 156 if (cb != null) { 157 cb.onStateChanged(cameraId); 158 } 159 } 160 }); 161 } 162 163 /** 164 * Enable an hdr plus button. 165 */ 166 private void enableHdrPlusButton(MultiToggleImageButton button, 167 final ButtonCallback cb, int resIdImages) { 168 169 if (resIdImages > 0) { 170 button.overrideImageIds(resIdImages); 171 } 172 173 int index = mSettingsManager.getStringValueIndex(SettingsManager.SETTING_CAMERA_HDR); 174 if (index >= 0) { 175 button.setState(index, false); 176 } 177 178 button.setOnStateChangeListener(new MultiToggleImageButton.OnStateChangeListener() { 179 @Override 180 public void stateChanged(View view, int state) { 181 mSettingsManager.setStringValueIndex(SettingsManager.SETTING_CAMERA_HDR, state); 182 if (cb != null) { 183 cb.onStateChanged(state); 184 } 185 } 186 }); 187 } 188}