package cs495.pocketdslr;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.graphics.ImageFormat;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.params.StreamConfigurationMap;
import android.media.Image;
import android.util.Range;
import android.util.Size;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.SeekBar;
import java.util.LinkedList;
import java.util.List;
/**
* Created by Chris on 3/11/2015.
*/
public class CameraSettingsManager implements CameraSettingListener, SeekBar.OnSeekBarChangeListener
{
protected VerticalSeekBar settingSeekBar;
protected Activity activity;
protected CameraSettingButton activeCameraSettingButton;
protected PocketDSLRCamera pocketDSLRCamera;
protected ManualCameraSettings manualCameraSettings;
public CameraSettingsManager(Activity activity, ManualCameraSettings manualCameraSettings, PocketDSLRCamera pocketDSLRCamera) {
this.activity = activity;
this.pocketDSLRCamera = pocketDSLRCamera;
this.manualCameraSettings = manualCameraSettings;
}
public void initializeSettingButtons() {
CameraCharacteristics cameraCharacteristics = this.pocketDSLRCamera.getCameraCharacteristics();
CameraSettingButton buttonISO = (CameraSettingButton)this.activity.findViewById(R.id.buttonISO);
CameraSettingButton buttonApertureSize = (CameraSettingButton)this.activity.findViewById(R.id.buttonApertureSize);
CameraSettingButton buttonExposureTime = (CameraSettingButton)this.activity.findViewById(R.id.buttonExposureTime);
this.settingSeekBar = (VerticalSeekBar)this.activity.findViewById(R.id.seekBar);
//Register the manual camera settings with the buttons so they can initialize to stored
//values and also save further changes to the app state
buttonISO.registerManualCameraSettings(this.manualCameraSettings, cameraCharacteristics);
buttonApertureSize.registerManualCameraSettings(this.manualCameraSettings, cameraCharacteristics);
buttonExposureTime.registerManualCameraSettings(this.manualCameraSettings, cameraCharacteristics);
//Setup button listeners for when a setting button has been selected, effectively
//changing which setting is being adjusted and controlled by the seekbar
buttonISO.setOnChangeListener(this);
buttonApertureSize.setOnChangeListener(this);
buttonExposureTime.setOnChangeListener(this);
//Setup default setting button. The ISO camera setting button will be selected by default
this.activeCameraSettingButton = buttonISO;
this.settingSeekBar.setOnSeekBarChangeListener(this);
this.onProgressChanged(this.settingSeekBar, 0, false);
this.activeCameraSettingButton.setTextColor(Color.parseColor("#56FFF9"));
//Setup detailed seekbar movement with the left and right chevron buttons.
ImageButton buttonLeft = (ImageButton)this.activity.findViewById(R.id.buttonChevronLeft);
ImageButton buttonRight = (ImageButton)this.activity.findViewById(R.id.buttonChevronRight);
buttonLeft.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int progress = settingSeekBar.getProgress();
if (progress > 0) {
settingSeekBar.setProgress(progress - 1);
settingSeekBar.updateThumb();
}
}
});
buttonRight.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int progress = settingSeekBar.getProgress();
if (progress < 100) {
settingSeekBar.setProgress(progress + 1);
settingSeekBar.updateThumb();
}
}
});
ImageButton takePictureButton = (ImageButton)this.activity.findViewById(R.id.buttonCamera);
takePictureButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
pocketDSLRCamera.takePicture();
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
});
}
//Occurs when a setting button it selected.
//Setups up the seekbar with the correct value for that setting
public void onSettingChange(CameraSettingButton cameraSettingButton) {
//Set old active button to default color
this.activeCameraSettingButton.setTextColor(Color.parseColor("#8CD0CA"));
this.activeCameraSettingButton = cameraSettingButton;
//Set new active button to active color
this.activeCameraSettingButton.setTextColor(Color.parseColor("#56FFF9"));
int settingValue = this.activeCameraSettingButton.getCameraSetting();
this.settingSeekBar.setProgress(settingValue);
this.settingSeekBar.updateThumb();
}
//Occurs when the seekbar is changed.
//This changes the setting corresponding to the currently active setting button.
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
this.activeCameraSettingButton.setCameraSetting(progress);
this.pocketDSLRCamera.onSettingchange();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
}