package openfoodfacts.github.scrachx.openfood.fragments;
import android.app.AlertDialog;
import android.app.Dialog;
import android.hardware.Camera;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import openfoodfacts.github.scrachx.openfood.R;
public class CameraSelectorDialogFragment extends DialogFragment {
public interface CameraSelectorDialogListener {
void onCameraSelected(int cameraId);
}
private int mCameraId;
private CameraSelectorDialogListener mListener;
public void onCreate(Bundle state) {
super.onCreate(state);
setRetainInstance(true);
}
public static CameraSelectorDialogFragment newInstance(CameraSelectorDialogListener listener, int cameraId) {
CameraSelectorDialogFragment fragment = new CameraSelectorDialogFragment();
fragment.mCameraId = cameraId;
fragment.mListener = listener;
return fragment;
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
if(mListener == null) {
dismiss();
return null;
}
int numberOfCameras = Camera.getNumberOfCameras();
String[] cameraNames = new String[numberOfCameras];
int checkedIndex = 0;
for (int i = 0; i < numberOfCameras; i++) {
Camera.CameraInfo info = new Camera.CameraInfo();
Camera.getCameraInfo(i, info);
if(info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
cameraNames[i] = "Front Facing";
} else if(info.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {
cameraNames[i] = "Rear Facing";
} else {
cameraNames[i] = "Camera ID: " + i;
}
if(i == mCameraId) {
checkedIndex = i;
}
}
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
// Set the dialog title
builder.setTitle(R.string.select_camera)
// Specify the list array, the items to be selected by default (null for none),
// and the listener through which to receive callbacks when items are selected
.setSingleChoiceItems(cameraNames, checkedIndex,
(dialog, which) -> {
mCameraId = which;
})
// Set the action buttons
.setPositiveButton(R.string.ok_button, (dialog, id) -> {
// User clicked OK, so save the mSelectedIndices results somewhere
// or return them to the component that opened the dialog
if (mListener != null) {
mListener.onCameraSelected(mCameraId);
}
})
.setNegativeButton(R.string.cancel_button, (dialog, id) -> {
});
return builder.create();
}
}