diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index 88ea3aa..3cc336b 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -1,6 +1,22 @@ + + diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..a5f05cd --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/example/firstapp/CameraActivity.kt b/app/src/main/java/com/example/firstapp/CameraActivity.kt index aa3802a..7301712 100644 --- a/app/src/main/java/com/example/firstapp/CameraActivity.kt +++ b/app/src/main/java/com/example/firstapp/CameraActivity.kt @@ -1,29 +1,25 @@ package com.example.firstapp -import androidx.appcompat.app.AppCompatActivity -import android.os.Bundle import android.Manifest import android.content.pm.PackageManager import android.net.Uri import android.os.Build +import android.os.Bundle import android.util.Log -import android.widget.Button import android.widget.Toast import androidx.annotation.RequiresApi -import androidx.core.app.ActivityCompat -import androidx.core.content.ContextCompat -import java.util.concurrent.Executors +import androidx.appcompat.app.AppCompatActivity import androidx.camera.core.* import androidx.camera.lifecycle.ProcessCameraProvider -import androidx.camera.view.PreviewView +import androidx.core.app.ActivityCompat +import androidx.core.content.ContextCompat import kotlinx.android.synthetic.main.camera_main.* import java.io.File -import java.nio.ByteBuffer import java.text.SimpleDateFormat import java.util.* import java.util.concurrent.ExecutorService -typealias LumaListener = (luma: Double) -> Unit +import java.util.concurrent.Executors class CameraActivity : AppCompatActivity() { private var preview: Preview? = null @@ -36,18 +32,22 @@ class CameraActivity : AppCompatActivity() { override fun onRequestPermissionsResult( requestCode: Int, permissions: Array, grantResults: - IntArray) { + IntArray + ) { if (requestCode == REQUEST_CODE_PERMISSIONS) { if (allPermissionsGranted()) { startCamera() } else { - Toast.makeText(this, + Toast.makeText( + this, "Permissions not granted by the user.", - Toast.LENGTH_SHORT).show() + Toast.LENGTH_SHORT + ).show() finish() } } } + @RequiresApi(Build.VERSION_CODES.LOLLIPOP) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -58,7 +58,8 @@ class CameraActivity : AppCompatActivity() { startCamera() } else { ActivityCompat.requestPermissions( - this, REQUIRED_PERMISSIONS, REQUEST_CODE_PERMISSIONS) + this, REQUIRED_PERMISSIONS, REQUEST_CODE_PERMISSIONS + ) } // Setup the listener for take photo button @@ -71,30 +72,27 @@ class CameraActivity : AppCompatActivity() { private fun startCamera() { val cameraProviderFuture = ProcessCameraProvider.getInstance(this) - cameraProviderFuture.addListener(Runnable { // Used to bind the lifecycle of cameras to the lifecycle owner val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get() - // Preview preview = Preview.Builder() .build() - imageCapture = ImageCapture.Builder() .build() - // Select back camera - val cameraSelector = CameraSelector.Builder().requireLensFacing(CameraSelector.LENS_FACING_BACK).build() - + val cameraSelector = + CameraSelector.Builder().requireLensFacing(CameraSelector.LENS_FACING_BACK).build() try { // Unbind use cases before rebinding cameraProvider.unbindAll() // Bind use cases to camera camera = cameraProvider.bindToLifecycle( - this, cameraSelector, preview, imageCapture) + this, cameraSelector, preview, imageCapture + ) preview?.setSurfaceProvider(viewFinder.createSurfaceProvider(camera?.cameraInfo)) - } catch(exc: Exception) { + } catch (exc: Exception) { Log.e(TAG, "Use case binding failed", exc) } @@ -108,8 +106,10 @@ class CameraActivity : AppCompatActivity() { // Create timestamped output file to hold the image val photoFile = File( outputDirectory, - SimpleDateFormat(FILENAME_FORMAT, Locale.US - ).format(System.currentTimeMillis()) + ".jpg") + SimpleDateFormat( + FILENAME_FORMAT, Locale.US + ).format(System.currentTimeMillis()) + ".jpg" + ) // Create output options object which contains file + metadata val outputOptions = ImageCapture.OutputFileOptions.Builder(photoFile).build() @@ -117,7 +117,9 @@ class CameraActivity : AppCompatActivity() { // Setup image capture listener which is triggered after photo has // been taken imageCapture.takePicture( - outputOptions, ContextCompat.getMainExecutor(this), object : ImageCapture.OnImageSavedCallback { + outputOptions, + ContextCompat.getMainExecutor(this), + object : ImageCapture.OnImageSavedCallback { override fun onError(exc: ImageCaptureException) { Log.e(TAG, "Photo capture failed: ${exc.message}", exc) } @@ -133,13 +135,15 @@ class CameraActivity : AppCompatActivity() { private fun allPermissionsGranted() = REQUIRED_PERMISSIONS.all { ContextCompat.checkSelfPermission( - baseContext, it) == PackageManager.PERMISSION_GRANTED + baseContext, it + ) == PackageManager.PERMISSION_GRANTED } @RequiresApi(Build.VERSION_CODES.LOLLIPOP) fun getOutputDirectory(): File { val mediaDir = externalMediaDirs.firstOrNull()?.let { - File(it, resources.getString(R.string.app_name)).apply { mkdirs() } } + File(it, resources.getString(R.string.app_name)).apply { mkdirs() } + } return if (mediaDir != null && mediaDir.exists()) mediaDir else filesDir } diff --git a/app/src/main/java/com/example/firstapp/FotoActivity.kt b/app/src/main/java/com/example/firstapp/FotoActivity.kt index 4f69328..a3b28e0 100644 --- a/app/src/main/java/com/example/firstapp/FotoActivity.kt +++ b/app/src/main/java/com/example/firstapp/FotoActivity.kt @@ -4,11 +4,9 @@ package com.example.firstapp import android.Manifest import android.content.Intent import android.content.pm.PackageManager -import android.os.Build -import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.os.Environment -import androidx.annotation.RequiresApi +import androidx.appcompat.app.AppCompatActivity import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat import io.fotoapparat.Fotoapparat @@ -16,24 +14,30 @@ import io.fotoapparat.configuration.CameraConfiguration import io.fotoapparat.log.logcat import io.fotoapparat.log.loggers import io.fotoapparat.parameter.ScaleType -import io.fotoapparat.selector.* +import io.fotoapparat.selector.back +import io.fotoapparat.selector.front +import io.fotoapparat.selector.off +import io.fotoapparat.selector.torch import io.fotoapparat.view.CameraView import kotlinx.android.synthetic.main.activity_foto.* import java.io.File - class FotoActivity : AppCompatActivity() { private var fotoapparat: Fotoapparat? = null private val filename = "test.png" private val sd = Environment.getExternalStorageDirectory() private val dest = File(sd, filename) - private var fotoapparatState : FotoapparatState? = null - private var cameraStatus : CameraState? = null + private var fotoapparatState: FotoapparatState? = null + private var cameraStatus: CameraState? = null private var flashState: FlashState? = null - private val permissions = arrayOf(android.Manifest.permission.CAMERA, android.Manifest.permission.WRITE_EXTERNAL_STORAGE, android.Manifest.permission.READ_EXTERNAL_STORAGE) + private val permissions = arrayOf( + Manifest.permission.CAMERA, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.READ_EXTERNAL_STORAGE + ) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -58,7 +62,7 @@ class FotoActivity : AppCompatActivity() { } } - private fun createFotoapparat(){ + private fun createFotoapparat() { val cameraView = findViewById(R.id.camera_view) fotoapparat = Fotoapparat( @@ -78,28 +82,28 @@ class FotoActivity : AppCompatActivity() { private fun changeFlashState() { fotoapparat?.updateConfiguration( CameraConfiguration( - flashMode = if(flashState == FlashState.TORCH) off() else torch() + flashMode = if (flashState == FlashState.TORCH) off() else torch() ) ) - flashState = if(flashState == FlashState.TORCH) FlashState.OFF + flashState = if (flashState == FlashState.TORCH) FlashState.OFF else FlashState.TORCH } private fun switchCamera() { fotoapparat?.switchTo( - lensPosition = if (cameraStatus == CameraState.BACK) front() else back(), + lensPosition = if (cameraStatus == CameraState.BACK) front() else back(), cameraConfiguration = CameraConfiguration() ) - cameraStatus = if(cameraStatus == CameraState.BACK) CameraState.FRONT + cameraStatus = if (cameraStatus == CameraState.BACK) CameraState.FRONT else CameraState.BACK } private fun takePhoto() { if (hasNoPermissions()) { requestPermission() - }else{ + } else { fotoapparat ?.takePicture() ?.saveToFile(dest) @@ -110,21 +114,27 @@ class FotoActivity : AppCompatActivity() { super.onStart() if (hasNoPermissions()) { requestPermission() - }else{ + } else { fotoapparat?.start() fotoapparatState = FotoapparatState.ON } } - private fun hasNoPermissions(): Boolean{ - return ContextCompat.checkSelfPermission(this, - Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(this, - Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(this, - Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED + private fun hasNoPermissions(): Boolean { + return ContextCompat.checkSelfPermission( + this, + Manifest.permission.READ_EXTERNAL_STORAGE + ) != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission( + this, + Manifest.permission.WRITE_EXTERNAL_STORAGE + ) != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission( + this, + Manifest.permission.CAMERA + ) != PackageManager.PERMISSION_GRANTED } - private fun requestPermission(){ - ActivityCompat.requestPermissions(this, permissions,0) + private fun requestPermission() { + ActivityCompat.requestPermissions(this, permissions, 0) } override fun onStop() { @@ -135,7 +145,7 @@ class FotoActivity : AppCompatActivity() { override fun onResume() { super.onResume() - if(!hasNoPermissions() && fotoapparatState == FotoapparatState.OFF){ + if (!hasNoPermissions() && fotoapparatState == FotoapparatState.OFF) { val intent = Intent(baseContext, MainActivity::class.java) startActivity(intent) finish() @@ -144,14 +154,14 @@ class FotoActivity : AppCompatActivity() { } -enum class CameraState{ +enum class CameraState { FRONT, BACK } -enum class FlashState{ +enum class FlashState { TORCH, OFF } -enum class FotoapparatState{ +enum class FotoapparatState { ON, OFF } \ No newline at end of file