/* * Copyright (C) 2014 The Android Open Source Project. * * yinglovezhuzhu@gmail.com * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.opensource.opencamera.ui; import android.content.Context; import com.opensource.opencamera.CameraSettings; import com.opensource.opencamera.IconListPreference; import com.opensource.opencamera.ListPreference; import com.opensource.opencamera.PreferenceGroup; public class CameraHeadUpDisplay extends HeadUpDisplay { private static final String TAG = "CamcoderHeadUpDisplay"; private OtherSettingsIndicator mOtherSettings; private GpsIndicator mGpsIndicator; private ZoomIndicator mZoomIndicator; private Context mContext; private float[] mInitialZoomRatios; private int mInitialOrientation; public CameraHeadUpDisplay(Context context) { super(context); mContext = context; } public void initialize(Context context, PreferenceGroup group, float[] initialZoomRatios, int initialOrientation) { mInitialZoomRatios = initialZoomRatios; mInitialOrientation = initialOrientation; super.initialize(context, group); } @Override protected void initializeIndicatorBar( Context context, PreferenceGroup group) { super.initializeIndicatorBar(context, group); ListPreference prefs[] = getListPreferences(group, CameraSettings.KEY_FOCUS_MODE, CameraSettings.KEY_EXPOSURE, CameraSettings.KEY_SCENE_MODE, CameraSettings.KEY_PICTURE_SIZE, CameraSettings.KEY_JPEG_QUALITY, CameraSettings.KEY_COLOR_EFFECT); mOtherSettings = new OtherSettingsIndicator(context, prefs); mOtherSettings.setOnRestorePreferencesClickedRunner(new Runnable() { public void run() { if (mListener != null) { mListener.onRestorePreferencesClicked(); } } }); mIndicatorBar.addComponent(mOtherSettings); mGpsIndicator = new GpsIndicator( context, (IconListPreference) group.findPreference(CameraSettings.KEY_RECORD_LOCATION)); mIndicatorBar.addComponent(mGpsIndicator); addIndicator(context, group, CameraSettings.KEY_WHITE_BALANCE); addIndicator(context, group, CameraSettings.KEY_FLASH_MODE); if (mInitialZoomRatios != null) { mZoomIndicator = new ZoomIndicator(mContext); mZoomIndicator.setZoomRatios(mInitialZoomRatios); mIndicatorBar.addComponent(mZoomIndicator); } else { mZoomIndicator = null; } addIndicator(context, group, CameraSettings.KEY_CAMERA_ID); mIndicatorBar.setOrientation(mInitialOrientation); } public void setZoomListener(ZoomControllerListener listener) { // The rendering thread won't access listener variable, so we don't // need to do concurrency protection here mZoomIndicator.setZoomListener(listener); } public void setZoomIndex(int index) { GLRootView root = getGLRootView(); if (root != null) { synchronized (root) { mZoomIndicator.setZoomIndex(index); } } else { mZoomIndicator.setZoomIndex(index); } } public void setGpsHasSignal(final boolean hasSignal) { GLRootView root = getGLRootView(); if (root != null) { synchronized (root) { mGpsIndicator.setHasSignal(hasSignal); } } else { mGpsIndicator.setHasSignal(hasSignal); } } /** * Sets the zoom rations the camera driver provides. This methods must be * called before <code>setZoomListener()</code> and * <code>setZoomIndex()</code> */ public void setZoomRatios(float[] zoomRatios) { GLRootView root = getGLRootView(); if (root != null) { synchronized(root) { setZoomRatiosLocked(zoomRatios); } } else { setZoomRatiosLocked(zoomRatios); } } private void setZoomRatiosLocked(float[] zoomRatios) { mZoomIndicator.setZoomRatios(zoomRatios); } }