/* * Copyright (C) 2015 The Android Open Source Project * * 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.android.camera.settings; import com.android.camera.app.AppController; import com.android.camera.CameraActivity; import com.android.camera.one.OneCamera; import com.android.camera2.R; import android.content.res.Resources; /** * Handles the camera facing setting for a particular scope stored in * SharedPreferences keyed by Keys.KEY_CAMERA_ID. */ public class CameraFacingSetting { private final SettingsManager mSettingsManager; private final String mSettingScope; private final String mCameraFacingSettingKey; private final int mCameraFacingBackValue; private final int mCameraFacingFrontValue; private final int mCameraFacingDefaultValue; public CameraFacingSetting( Resources resources, SettingsManager settingsManager, String moduleSettingScope, AppController appController) { mSettingsManager = settingsManager; mSettingScope = SettingsManager.getModuleSettingScope(moduleSettingScope); mCameraFacingSettingKey = Keys.KEY_CAMERA_ID; mCameraFacingDefaultValue = Integer.parseInt(resources.getString(R.string.pref_camera_id_default)); if (appController.getCameraProvider().getCharacteristics(mCameraFacingDefaultValue). isFacingFront()) { mCameraFacingFrontValue = 0; mCameraFacingBackValue = 1; } else { mCameraFacingBackValue = 0; mCameraFacingFrontValue = 1; } } @Override public String toString() { return isFacingBack() ? "Back Camera" : "Front Camera"; } /** * Sets the default value for the camera facing setting. */ public void setDefault() { mSettingsManager.setDefaults( Keys.KEY_CAMERA_ID, mCameraFacingDefaultValue, new int[]{mCameraFacingBackValue, mCameraFacingFrontValue}); } /** * Whether the back camera should be opened. * * @return Whether the back camera should be opened. */ public boolean isFacingBack() { return getCameraFacing() == OneCamera.Facing.BACK; } /** * Whether the front camera should be opened. * * @return Whether the front camera should be opened. */ public boolean isFacingFront() { return getCameraFacing() == OneCamera.Facing.FRONT; } /** * Gets the current camera facing in the setting. * * @return The current camera facing in the setting. */ public OneCamera.Facing getCameraFacing() { final int cameraId = mSettingsManager.getInteger(mSettingScope, mCameraFacingSettingKey); if (cameraId == mCameraFacingBackValue) { return OneCamera.Facing.BACK; } else if (cameraId == mCameraFacingFrontValue) { return OneCamera.Facing.FRONT; } else { return getDefaultCameraFacing(); } } /** * Sets the camera facing setting. * * @param cameraFacing The new camera facing. */ public void setCameraFacing(OneCamera.Facing cameraFacing) { final int cameraId = (cameraFacing == OneCamera.Facing.BACK) ? mCameraFacingBackValue : mCameraFacingFrontValue; mSettingsManager.set(mSettingScope, mCameraFacingSettingKey, cameraId); } /** * Changes the camera facing setting to the other side. * * @return The new camera facing. */ public OneCamera.Facing switchCameraFacing() { final OneCamera.Facing originalFacing = getCameraFacing(); final OneCamera.Facing newFacing = (originalFacing == OneCamera.Facing.BACK) ? OneCamera.Facing.FRONT : OneCamera.Facing.BACK; setCameraFacing(newFacing); return newFacing; } private OneCamera.Facing getDefaultCameraFacing() { if (mCameraFacingDefaultValue == mCameraFacingBackValue) { return OneCamera.Facing.BACK; } else { return OneCamera.Facing.FRONT; } } }