11package org.fossify.camera.activities
22
3+ import android.animation.ObjectAnimator
34import android.annotation.SuppressLint
4- import android.app.Activity
55import android.content.Intent
66import android.content.res.ColorStateList
77import android.graphics.Bitmap
@@ -15,6 +15,7 @@ import android.widget.LinearLayout
1515import androidx.constraintlayout.widget.ConstraintSet
1616import androidx.core.content.ContextCompat
1717import androidx.core.view.*
18+ import androidx.interpolator.view.animation.FastOutSlowInInterpolator
1819import androidx.transition.*
1920import com.bumptech.glide.Glide
2021import com.bumptech.glide.load.engine.DiskCacheStrategy
@@ -45,11 +46,12 @@ import kotlin.math.abs
4546
4647class MainActivity : SimpleActivity (), PhotoProcessor.MediaSavedListener, CameraXPreviewListener {
4748 private companion object {
48- const val CAPTURE_ANIMATION_DURATION = 500L
49- const val PHOTO_MODE_INDEX = 1
50- const val VIDEO_MODE_INDEX = 0
49+ private const val ANIMATION_DURATION = 500L
50+ private const val PHOTO_MODE_INDEX = 1
51+ private const val VIDEO_MODE_INDEX = 0
5152 private const val MIN_SWIPE_DISTANCE_X = 100
5253 private const val TIMER_2_SECONDS = 2001
54+ private const val SWITCH_CAMERA_ROTATION_ANGLE = 180f
5355 }
5456
5557 private val binding by viewBinding(ActivityMainBinding ::inflate)
@@ -372,7 +374,11 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
372374
373375 private fun initButtons () = binding.apply {
374376 timerText.setFactory { layoutInflater.inflate(R .layout.timer_text, null ) }
375- toggleCamera.setOnClickListener { mPreview!! .toggleFrontBackCamera() }
377+ toggleCamera.setOnClickListener {
378+ animateCameraToggle()
379+ mPreview!! .toggleFrontBackCamera()
380+ }
381+
376382 lastPhotoVideoPreview.setOnClickListener { showLastMediaPreview() }
377383
378384 layoutTop.apply {
@@ -423,6 +429,15 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
423429 setTimerModeIcon(config.timerMode)
424430 }
425431
432+ private fun animateCameraToggle () {
433+ ObjectAnimator .ofFloat(binding.toggleCamera, " rotation" , 0f , SWITCH_CAMERA_ROTATION_ANGLE )
434+ .apply {
435+ duration = ANIMATION_DURATION
436+ interpolator = FastOutSlowInInterpolator ()
437+ start()
438+ }
439+ }
440+
426441 private fun selectTimerMode (timerMode : TimerMode ) {
427442 config.timerMode = timerMode
428443 setTimerModeIcon(timerMode)
@@ -565,7 +580,7 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
565580 runOnUiThread {
566581 if (! isDestroyed) {
567582 val options = RequestOptions ()
568- .centerCrop ()
583+ .circleCrop ()
569584 .diskCacheStrategy(DiskCacheStrategy .NONE )
570585
571586 Glide .with (this )
@@ -685,10 +700,6 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
685700 }
686701 }
687702
688- override fun onChangeCamera (frontCamera : Boolean ) {
689- binding.toggleCamera.setImageResource(if (frontCamera) R .drawable.ic_camera_rear_vector else R .drawable.ic_camera_front_vector)
690- }
691-
692703 override fun onPhotoCaptureStart () {
693704 toggleActionButtons(enabled = false )
694705 }
@@ -709,7 +720,7 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
709720
710721 override fun shutterAnimation () {
711722 binding.shutterAnimation.alpha = 1.0f
712- binding.shutterAnimation.animate().alpha(0f ).setDuration(CAPTURE_ANIMATION_DURATION ).start()
723+ binding.shutterAnimation.animate().alpha(0f ).setDuration(ANIMATION_DURATION ).start()
713724 }
714725
715726 override fun onMediaSaved (uri : Uri ) {
@@ -719,14 +730,14 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
719730 Intent ().apply {
720731 data = uri
721732 flags = Intent .FLAG_GRANT_READ_URI_PERMISSION
722- setResult(Activity . RESULT_OK , this )
733+ setResult(RESULT_OK , this )
723734 }
724735 finish()
725736 } else if (isVideoCaptureIntent()) {
726737 Intent ().apply {
727738 data = uri
728739 flags = Intent .FLAG_GRANT_READ_URI_PERMISSION
729- setResult(Activity . RESULT_OK , this )
740+ setResult(RESULT_OK , this )
730741 }
731742 finish()
732743 }
@@ -736,7 +747,7 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
736747 if (isImageCaptureIntent()) {
737748 Intent ().apply {
738749 putExtra(" data" , bitmap)
739- setResult(Activity . RESULT_OK , this )
750+ setResult(RESULT_OK , this )
740751 }
741752 finish()
742753 }
@@ -967,7 +978,7 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
967978 }
968979
969980 if (isImageCaptureIntent()) {
970- setResult(Activity . RESULT_OK )
981+ setResult(RESULT_OK )
971982 finish()
972983 }
973984 }
0 commit comments