app/src/main/java/com/camerakit/app/MainActivity.java
package com.camerakit.app;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.provider.MediaStore;
import androidx.annotation.NonNull;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.appcompat.widget.Toolbar;
import android.text.Html;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import com.camerakit.CameraKit;
import com.camerakit.CameraKitView;
import com.camerakit.type.CameraSize;
import jpegkit.Jpeg;
import jpegkit.JpegImageView;
public class MainActivity extends AppCompatActivity implements Toolbar.OnMenuItemClickListener {
private CameraKitView cameraView;
private Toolbar toolbar;
private AppCompatTextView facingText;
private AppCompatTextView flashText;
private AppCompatTextView previewSizeText;
private AppCompatTextView photoSizeText;
private Button flashOnButton;
private Button flashOffButton;
private FloatingActionButton photoButton;
private Button facingFrontButton;
private Button facingBackButton;
private Button permissionsButton;
private JpegImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
cameraView = findViewById(R.id.camera);
toolbar = findViewById(R.id.toolbar);
toolbar.inflateMenu(R.menu.main);
toolbar.setOnMenuItemClickListener(this);
facingText = findViewById(R.id.facingText);
flashText = findViewById(R.id.flashText);
previewSizeText = findViewById(R.id.previewSizeText);
photoSizeText = findViewById(R.id.photoSizeText);
photoButton = findViewById(R.id.photoButton);
photoButton.setOnClickListener(photoOnClickListener);
flashOnButton = findViewById(R.id.flashOnButton);
flashOffButton = findViewById(R.id.flashOffButton);
flashOnButton.setOnClickListener(flashOnOnClickListener);
flashOffButton.setOnClickListener(flashOffOnClickListener);
facingFrontButton = findViewById(R.id.facingFrontButton);
facingBackButton = findViewById(R.id.facingBackButton);
facingFrontButton.setOnClickListener(facingFrontOnClickListener);
facingBackButton.setOnClickListener(facingBackOnClickListener);
permissionsButton = findViewById(R.id.permissionsButton);
permissionsButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cameraView.requestPermissions(MainActivity.this);
}
});
imageView = findViewById(R.id.imageView);
cameraView.setPermissionsListener(new CameraKitView.PermissionsListener() {
@Override
public void onPermissionsSuccess() {
permissionsButton.setVisibility(View.GONE);
}
@Override
public void onPermissionsFailure() {
permissionsButton.setVisibility(View.VISIBLE);
}
});
cameraView.setCameraListener(new CameraKitView.CameraListener() {
@Override
public void onOpened() {
Log.v("CameraKitView", "CameraListener: onOpened()");
}
@Override
public void onClosed() {
Log.v("CameraKitView", "CameraListener: onClosed()");
}
});
cameraView.setPreviewListener(new CameraKitView.PreviewListener() {
@Override
public void onStart() {
Log.v("CameraKitView", "PreviewListener: onStart()");
updateInfoText();
}
@Override
public void onStop() {
Log.v("CameraKitView", "PreviewListener: onStop()");
}
});
}
@Override
protected void onStart() {
super.onStart();
cameraView.onStart();
}
@Override
public void onResume() {
super.onResume();
cameraView.onResume();
}
@Override
public void onPause() {
cameraView.onPause();
super.onPause();
}
@Override
protected void onStop() {
cameraView.onStop();
super.onStop();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
cameraView.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
@Override
public boolean onMenuItemClick(MenuItem item) {
if (item.getItemId() == R.id.main_menu_about) {
AlertDialog dialog = new AlertDialog.Builder(MainActivity.this)
.setTitle(R.string.about_dialog_title)
.setMessage(R.string.about_dialog_message)
.setNeutralButton("Dismiss", null)
.show();
dialog.getButton(AlertDialog.BUTTON_NEUTRAL).setTextColor(Color.parseColor("#91B8CC"));
dialog.getButton(DialogInterface.BUTTON_NEUTRAL).setText(Html.fromHtml("<b>Dismiss</b>"));
return true;
}
if (item.getItemId() == R.id.main_menu_gallery) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
startActivity(intent);
return true;
}
return false;
}
private View.OnClickListener photoOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
cameraView.captureImage(new CameraKitView.ImageCallback() {
@Override
public void onImage(CameraKitView view, final byte[] photo) {
new Thread(new Runnable() {
@Override
public void run() {
final Jpeg jpeg = new Jpeg(photo);
imageView.post(new Runnable() {
@Override
public void run() {
imageView.setJpeg(jpeg);
}
});
}
}).start();
}
});
}
};
private View.OnClickListener flashOnOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
if (cameraView.getFlash() != CameraKit.FLASH_ON) {
cameraView.setFlash(CameraKit.FLASH_ON);
updateInfoText();
}
}
};
private View.OnClickListener flashOffOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
if (cameraView.getFlash() != CameraKit.FLASH_OFF) {
cameraView.setFlash(CameraKit.FLASH_OFF);
updateInfoText();
}
}
};
private View.OnClickListener facingFrontOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
cameraView.setFacing(CameraKit.FACING_FRONT);
}
};
private View.OnClickListener facingBackOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
cameraView.setFacing(CameraKit.FACING_BACK);
}
};
private void updateInfoText() {
String facingValue = cameraView.getFacing() == CameraKit.FACING_BACK ? "BACK" : "FRONT";
facingText.setText(Html.fromHtml("<b>Facing:</b> " + facingValue));
String flashValue = "OFF";
switch (cameraView.getFlash()) {
case CameraKit.FLASH_OFF: {
flashValue = "OFF";
break;
}
case CameraKit.FLASH_ON: {
flashValue = "ON";
break;
}
case CameraKit.FLASH_AUTO: {
flashValue = "AUTO";
break;
}
case CameraKit.FLASH_TORCH: {
flashValue = "TORCH";
break;
}
}
flashText.setText(Html.fromHtml("<b>Flash:</b> " + flashValue));
CameraSize previewSize = cameraView.getPreviewResolution();
if (previewSize != null) {
previewSizeText.setText(Html.fromHtml(String.format("<b>Preview Resolution:</b> %d x %d", previewSize.getWidth(), previewSize.getHeight())));
}
CameraSize photoSize = cameraView.getPhotoResolution();
if (photoSize != null) {
photoSizeText.setText(Html.fromHtml(String.format("<b>Photo Resolution:</b> %d x %d", photoSize.getWidth(), photoSize.getHeight())));
}
}
}