1 /* 2 * Copyright (C) 2010 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 17 package com.android.camera.ui; 18 19 import android.content.Context; 20 21 import com.android.camera.CameraSettings; 22 import com.android.camera.IconListPreference; 23 import com.android.camera.ListPreference; 24 import com.android.camera.PreferenceGroup; 25 26 public class CameraHeadUpDisplay extends HeadUpDisplay { 27 28 private static final String TAG = "CamcoderHeadUpDisplay"; 29 30 private OtherSettingsIndicator mOtherSettings; 31 private GpsIndicator mGpsIndicator; 32 private ZoomIndicator mZoomIndicator; 33 private Context mContext; 34 private float[] mInitialZoomRatios; 35 private int mInitialOrientation; 36 CameraHeadUpDisplay(Context context)37 public CameraHeadUpDisplay(Context context) { 38 super(context); 39 mContext = context; 40 } 41 initialize(Context context, PreferenceGroup group, float[] initialZoomRatios, int initialOrientation)42 public void initialize(Context context, PreferenceGroup group, 43 float[] initialZoomRatios, int initialOrientation) { 44 mInitialZoomRatios = initialZoomRatios; 45 mInitialOrientation = initialOrientation; 46 super.initialize(context, group); 47 } 48 49 @Override initializeIndicatorBar( Context context, PreferenceGroup group)50 protected void initializeIndicatorBar( 51 Context context, PreferenceGroup group) { 52 super.initializeIndicatorBar(context, group); 53 54 ListPreference prefs[] = getListPreferences(group, 55 CameraSettings.KEY_FOCUS_MODE, 56 CameraSettings.KEY_EXPOSURE, 57 CameraSettings.KEY_SCENE_MODE, 58 CameraSettings.KEY_PICTURE_SIZE, 59 CameraSettings.KEY_JPEG_QUALITY, 60 CameraSettings.KEY_COLOR_EFFECT); 61 62 mOtherSettings = new OtherSettingsIndicator(context, prefs); 63 mOtherSettings.setOnRestorePreferencesClickedRunner(new Runnable() { 64 public void run() { 65 if (mListener != null) { 66 mListener.onRestorePreferencesClicked(); 67 } 68 } 69 }); 70 mIndicatorBar.addComponent(mOtherSettings); 71 72 mGpsIndicator = new GpsIndicator( 73 context, (IconListPreference) 74 group.findPreference(CameraSettings.KEY_RECORD_LOCATION)); 75 mIndicatorBar.addComponent(mGpsIndicator); 76 77 addIndicator(context, group, CameraSettings.KEY_WHITE_BALANCE); 78 addIndicator(context, group, CameraSettings.KEY_FLASH_MODE); 79 80 if (mInitialZoomRatios != null) { 81 mZoomIndicator = new ZoomIndicator(mContext); 82 mZoomIndicator.setZoomRatios(mInitialZoomRatios); 83 mIndicatorBar.addComponent(mZoomIndicator); 84 } else { 85 mZoomIndicator = null; 86 } 87 88 addIndicator(context, group, CameraSettings.KEY_CAMERA_ID); 89 90 mIndicatorBar.setOrientation(mInitialOrientation); 91 } 92 setZoomListener(ZoomControllerListener listener)93 public void setZoomListener(ZoomControllerListener listener) { 94 // The rendering thread won't access listener variable, so we don't 95 // need to do concurrency protection here 96 mZoomIndicator.setZoomListener(listener); 97 } 98 setZoomIndex(int index)99 public void setZoomIndex(int index) { 100 GLRootView root = getGLRootView(); 101 if (root != null) { 102 synchronized (root) { 103 mZoomIndicator.setZoomIndex(index); 104 } 105 } else { 106 mZoomIndicator.setZoomIndex(index); 107 } 108 } 109 setGpsHasSignal(final boolean hasSignal)110 public void setGpsHasSignal(final boolean hasSignal) { 111 GLRootView root = getGLRootView(); 112 if (root != null) { 113 synchronized (root) { 114 mGpsIndicator.setHasSignal(hasSignal); 115 } 116 } else { 117 mGpsIndicator.setHasSignal(hasSignal); 118 } 119 } 120 121 /** 122 * Sets the zoom rations the camera driver provides. This methods must be 123 * called before <code>setZoomListener()</code> and 124 * <code>setZoomIndex()</code> 125 */ setZoomRatios(float[] zoomRatios)126 public void setZoomRatios(float[] zoomRatios) { 127 GLRootView root = getGLRootView(); 128 if (root != null) { 129 synchronized(root) { 130 setZoomRatiosLocked(zoomRatios); 131 } 132 } else { 133 setZoomRatiosLocked(zoomRatios); 134 } 135 } 136 setZoomRatiosLocked(float[] zoomRatios)137 private void setZoomRatiosLocked(float[] zoomRatios) { 138 mZoomIndicator.setZoomRatios(zoomRatios); 139 } 140 } 141