blob: 8227ad6d7e5c8f2aaa4c9e3a7797e29c1d68b066 [file] [log] [blame]
/*
* 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;
}
}
}