diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 912fffc0..8ddfbacb 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -75,7 +75,8 @@ android {
}
compileOptions {
- val currentJavaVersionFromLibs = JavaVersion.valueOf(libs.versions.app.build.javaVersion.get().toString())
+ val currentJavaVersionFromLibs =
+ JavaVersion.valueOf(libs.versions.app.build.javaVersion.get())
sourceCompatibility = currentJavaVersionFromLibs
targetCompatibility = currentJavaVersionFromLibs
}
@@ -84,7 +85,7 @@ android {
kotlinOptions.jvmTarget = project.libs.versions.app.build.kotlinJVMTarget.get()
}
- namespace = "com.simplemobiletools.camera"
+ namespace = "org.fossify.camera"
lint {
checkReleaseBuilds = false
@@ -99,7 +100,7 @@ detekt {
}
dependencies {
- implementation(libs.simple.tools.commons)
+ implementation(libs.fossify.commons)
implementation(libs.bundles.androidx.camera)
implementation(libs.androidx.documentfile)
implementation(libs.androidx.exifinterface)
diff --git a/app/detekt-baseline.xml b/app/detekt-baseline.xml
index 735ea4b2..cd356a98 100644
--- a/app/detekt-baseline.xml
+++ b/app/detekt-baseline.xml
@@ -1,196 +1,359 @@
-
-
- ComplexCondition:MainActivity.kt$MainActivity$!mIsHardwareShutterHandled && config.volumeButtonsAsShutter && (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN || keyCode == KeyEvent.KEYCODE_VOLUME_UP)
- CyclomaticComplexMethod:CameraXPreview.kt$CameraXPreview$@SuppressLint("MissingPermission", "NewApi") private fun startRecording()
- CyclomaticComplexMethod:ImageSaver.kt$ImageSaver$@SuppressLint("RestrictedApi") private fun saveImageToTempFile(): File?
- CyclomaticComplexMethod:PhotoProcessor.kt$PhotoProcessor$override fun doInBackground(vararg params: ByteArray): String
- EmptyFunctionBlock:FocusCircleView.kt$FocusCircleView${}
- FunctionNaming:ImageUtil.kt$ImageUtil$private fun yuv_420_888toNv21(image: ImageProxy): ByteArray
- ImplicitDefaultLocale:MySize.kt$MySize$String.format("%.1f", (width * height.toFloat()) / ONE_MEGA_PIXEL)
- ImplicitDefaultLocale:VideoQuality.kt$VideoQuality$String.format("%.1f", (width * height.toFloat()) / VideoQuality.ONE_MEGA_PIXEL)
- LargeClass:MainActivity.kt$MainActivity : SimpleActivityMediaSavedListenerCameraXPreviewListener
- LongMethod:ImageSaver.kt$ImageSaver$@SuppressLint("RestrictedApi") private fun saveImageToTempFile(): File?
- LongMethod:PhotoProcessor.kt$PhotoProcessor$override fun doInBackground(vararg params: ByteArray): String
- LongMethod:ShadowDrawable.kt$ShadowDrawable$override fun draw(canvas: Canvas)
- LongParameterList:CameraXInitializer.kt$CameraXInitializer$( previewView: PreviewView, listener: CameraXPreviewListener, mediaSoundHelper: MediaSoundHelper, outputUri: Uri?, isThirdPartyIntent: Boolean, initInPhotoMode: Boolean, )
- LongParameterList:CameraXPreview.kt$CameraXPreview$( private val activity: BaseSimpleActivity, private val previewView: PreviewView, private val mediaSoundHelper: MediaSoundHelper, private val mediaOutputHelper: MediaOutputHelper, private val cameraErrorHandler: CameraErrorHandler, private val listener: CameraXPreviewListener, private val isThirdPartyIntent: Boolean, initInPhotoMode: Boolean, )
- LongParameterList:ImageSaver.kt$ImageSaver$( private val contentResolver: ContentResolver, private val image: ImageProxy, private val mediaOutput: MediaOutput.ImageCaptureOutput, private val metadata: Metadata, private val jpegQuality: Int, private val saveExifAttributes: Boolean, private val onImageSaved: (Uri) -> Unit, private val onError: (ImageCaptureException) -> Unit, )
- LongParameterList:ImageSaver.kt$ImageSaver.Companion$( contentResolver: ContentResolver, image: ImageProxy, mediaOutput: MediaOutput.ImageCaptureOutput, metadata: Metadata, jpegQuality: Int, saveExifAttributes: Boolean, onImageSaved: (Uri) -> Unit, onError: (ImageCaptureException) -> Unit, )
- LoopWithTooManyJumpStatements:ImageQualityManager.kt$ImageQualityManager$for
- LoopWithTooManyJumpStatements:MediaActionSound.kt$MediaActionSound$for
- MagicNumber:BitmapUtils.kt$BitmapUtils$128
- MagicNumber:BitmapUtils.kt$BitmapUtils$7
- MagicNumber:BitmapUtils.kt$BitmapUtils$8
- MagicNumber:CameraXPreview.kt$CameraXPreview.<no name provided>$135
- MagicNumber:CameraXPreview.kt$CameraXPreview.<no name provided>$225
- MagicNumber:CameraXPreview.kt$CameraXPreview.<no name provided>$315
- MagicNumber:CameraXPreview.kt$CameraXPreview.<no name provided>$45
- MagicNumber:Config.kt$Config$80
- MagicNumber:Constants.kt$270
- MagicNumber:Constants.kt$90
- MagicNumber:FocusCircleView.kt$FocusCircleView$500L
- MagicNumber:FocusCircleView.kt$FocusCircleView$50f
- MagicNumber:MainActivity.kt$MainActivity$33
- MagicNumber:MainActivity.kt$MainActivity$35
- MagicNumber:MainActivity.kt$MainActivity$39
- MagicNumber:MainActivity.kt$MainActivity$44
- MagicNumber:MainActivity.kt$MainActivity$46
- MagicNumber:MainActivity.kt$MainActivity$52
- MagicNumber:MainActivity.kt$MainActivity.<no name provided>$1000
- MagicNumber:MainActivity.kt$MainActivity.<no name provided>$134
- MagicNumber:MainActivity.kt$MainActivity.<no name provided>$225
- MagicNumber:MainActivity.kt$MainActivity.<no name provided>$289
- MagicNumber:MainActivity.kt$MainActivity.<no name provided>$75
- MagicNumber:MainActivity.kt$MainActivity.<no name provided>$90
- MagicNumber:MySize.kt$MySize$1.9f
- MagicNumber:MySize.kt$MySize$16
- MagicNumber:MySize.kt$MySize$19
- MagicNumber:MySize.kt$MySize$3
- MagicNumber:MySize.kt$MySize$3f
- MagicNumber:MySize.kt$MySize$4
- MagicNumber:MySize.kt$MySize$4f
- MagicNumber:MySize.kt$MySize$5
- MagicNumber:MySize.kt$MySize$5f
- MagicNumber:MySize.kt$MySize$6
- MagicNumber:MySize.kt$MySize$8f
- MagicNumber:MySize.kt$MySize$9f
- MagicNumber:PhotoProcessor.kt$PhotoProcessor$360
- MagicNumber:SettingsActivity.kt$SettingsActivity$100
- MagicNumber:SettingsActivity.kt$SettingsActivity$50
- MagicNumber:SettingsActivity.kt$SettingsActivity$55
- MagicNumber:SettingsActivity.kt$SettingsActivity$60
- MagicNumber:SettingsActivity.kt$SettingsActivity$65
- MagicNumber:SettingsActivity.kt$SettingsActivity$70
- MagicNumber:SettingsActivity.kt$SettingsActivity$75
- MagicNumber:SettingsActivity.kt$SettingsActivity$80
- MagicNumber:SettingsActivity.kt$SettingsActivity$85
- MagicNumber:SettingsActivity.kt$SettingsActivity$90
- MagicNumber:SettingsActivity.kt$SettingsActivity$95
- MagicNumber:ShadowDrawable.kt$ShadowDrawable$255.0f
- MagicNumber:TimerMode.kt$TimerMode.TIMER_10$10000
- MagicNumber:TimerMode.kt$TimerMode.TIMER_3$3000
- MagicNumber:TimerMode.kt$TimerMode.TIMER_5$5000
- MagicNumber:VideoQuality.kt$VideoQuality$1.9f
- MagicNumber:VideoQuality.kt$VideoQuality$16
- MagicNumber:VideoQuality.kt$VideoQuality$19
- MagicNumber:VideoQuality.kt$VideoQuality$3
- MagicNumber:VideoQuality.kt$VideoQuality$3f
- MagicNumber:VideoQuality.kt$VideoQuality$4
- MagicNumber:VideoQuality.kt$VideoQuality$4f
- MagicNumber:VideoQuality.kt$VideoQuality$5
- MagicNumber:VideoQuality.kt$VideoQuality$5f
- MagicNumber:VideoQuality.kt$VideoQuality$6
- MagicNumber:VideoQuality.kt$VideoQuality$8f
- MagicNumber:VideoQuality.kt$VideoQuality$9f
- MagicNumber:VideoQuality.kt$VideoQuality.FHD$1080
- MagicNumber:VideoQuality.kt$VideoQuality.FHD$1920
- MagicNumber:VideoQuality.kt$VideoQuality.HD$1280
- MagicNumber:VideoQuality.kt$VideoQuality.HD$720
- MagicNumber:VideoQuality.kt$VideoQuality.SD$480
- MagicNumber:VideoQuality.kt$VideoQuality.SD$720
- MagicNumber:VideoQuality.kt$VideoQuality.UHD$2160
- MagicNumber:VideoQuality.kt$VideoQuality.UHD$3840
- MaxLineLength:BitmapUtils.kt$BitmapUtils$val upperBound = if (minSideLength < 0) 128 else floor(w / minSideLength).coerceAtMost(floor(h / minSideLength)).toInt()
- MaxLineLength:CameraErrorHandler.kt$CameraErrorHandler$VideoRecordEvent.Finalize.ERROR_INSUFFICIENT_STORAGE -> context.toast(R.string.video_capture_insufficient_storage_error)
- MaxLineLength:CameraXPreview.kt$CameraXPreview$private
- MaxLineLength:CameraXPreview.kt$CameraXPreview$val scaleGesture = camera?.let { ScaleGestureDetector(activity, PinchToZoomOnScaleGestureListener(it.cameraInfo, it.cameraControl)) }
- MaxLineLength:Config.kt$Config$var path = prefs.getString(SAVE_PHOTOS, Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).toString())
- MaxLineLength:ImageQualityManager.kt$ImageQualityManager$val configMap = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP) ?: continue
- MaxLineLength:ImageQualityManager.kt$ImageQualityManager.Companion$private val CAMERA_LENS = arrayOf(CameraCharacteristics.LENS_FACING_FRONT, CameraCharacteristics.LENS_FACING_BACK)
- MaxLineLength:ImageUtil.kt$ImageUtil$require(image.format == ImageFormat.YUV_420_888) { "Incorrect image format of the input image proxy: " + image.format }
- MaxLineLength:ImageUtil.kt$ImageUtil.CodecFailedException$class
- MaxLineLength:MainActivity.kt$MainActivity$binding.toggleCamera.setImageResource(if (frontCamera) R.drawable.ic_camera_rear_vector else R.drawable.ic_camera_front_vector)
- MaxLineLength:MainActivity.kt$MainActivity$constraintSet.connect(previewView.id, ConstraintSet.BOTTOM, ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM)
- MaxLineLength:MainActivity.kt$MainActivity$hasPermission(PERMISSION_WRITE_STORAGE) && hasPermission(PERMISSION_CAMERA) && hasPermission(PERMISSION_RECORD_AUDIO)
- MaxLineLength:MainActivity.kt$MainActivity$if
- MaxLineLength:MainActivity.kt$MainActivity$layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
- MaxLineLength:MainActivity.kt$MainActivity$private
- MaxLineLength:MainActivity.kt$MainActivity$private fun isImageCaptureIntent(): Boolean
- MaxLineLength:MainActivity.kt$MainActivity$val iconColors = intArrayOf(ContextCompat.getColor(this, com.simplemobiletools.commons.R.color.md_grey_white), primaryColor)
- MaxLineLength:MainActivity.kt$MainActivity$val marginBottom = safeInsetBottom + navigationBarHeight + resources.getDimensionPixelSize(com.simplemobiletools.commons.R.dimen.bigger_margin)
- MaxLineLength:MainActivity.kt$MainActivity$val uri = if (isPhoto) MediaStore.Images.Media.EXTERNAL_CONTENT_URI else MediaStore.Video.Media.EXTERNAL_CONTENT_URI
- MaxLineLength:MainActivity.kt$MainActivity$var hasMediaPermission = hasPermission(PERMISSION_READ_MEDIA_IMAGES) || hasPermission(PERMISSION_READ_MEDIA_VIDEO)
- MaxLineLength:MainActivity.kt$MainActivity$window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
- MaxLineLength:MainActivity.kt$MainActivity$}
- MaxLineLength:MainActivity.kt$MainActivity.<no name provided>$override
- MaxLineLength:MediaActionSound.kt$MediaActionSound$else -> Log.e(TAG, "OnLoadCompleteListener() called in wrong state: ${sound.state} for sound: ${sound.mediaSound}")
- MaxLineLength:MediaActionSound.kt$MediaActionSound.Companion$private val SOUNDS = arrayOf(SHUTTER_CLICK, FOCUS_COMPLETE, START_VIDEO_RECORDING, STOP_VIDEO_RECORDING, TIMER_COUNTDOWN, TIMER_COUNTDOWN_2_SECONDS)
- MaxLineLength:MediaOutputHelper.kt$MediaOutputHelper$put(MediaStore.MediaColumns.DATA, Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).toString())
- MaxLineLength:PhotoProcessor.kt$PhotoProcessor$activity.config.savePhotosFolder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).toString()
- MaxLineLength:PhotoProcessor.kt$PhotoProcessor$document = document?.createFile("", path.substring(path.lastIndexOf('/') + 1)) ?: activity.getDocumentFile(path)
- MaxLineLength:PhotoProcessor.kt$PhotoProcessor$val activity: MainActivity
- MaxLineLength:SettingsActivity.kt$SettingsActivity$OpenDeviceSettingsDialog(activity = this@SettingsActivity, message = getString(com.simplemobiletools.commons.R.string.allow_location_permission))
- MaxLineLength:SettingsActivity.kt$SettingsActivity$faqItems.add(FAQItem(com.simplemobiletools.commons.R.string.faq_2_title_commons, com.simplemobiletools.commons.R.string.faq_2_text_commons))
- MaxLineLength:SettingsActivity.kt$SettingsActivity$faqItems.add(FAQItem(com.simplemobiletools.commons.R.string.faq_6_title_commons, com.simplemobiletools.commons.R.string.faq_6_text_commons))
- MaxLineLength:SettingsActivity.kt$SettingsActivity$findItem(R.id.more_apps_from_us).isVisible = !resources.getBoolean(com.simplemobiletools.commons.R.bool.hide_google_relations)
- MaxLineLength:SettingsActivity.kt$SettingsActivity$it.beGoneIf(settingsUseEnglishHolder.isGone() && settingsPurchaseThankYouHolder.isGone() && settingsLanguageHolder.isGone())
- MaxLineLength:SettingsActivity.kt$SettingsActivity$settingsUseEnglishHolder.beVisibleIf((config.wasUseEnglishToggled || Locale.getDefault().language != "en") && !isTiramisuPlus())
- MaxLineLength:SettingsActivity.kt$SettingsActivity$updateMaterialActivityViews(settingsCoordinator, settingsHolder, useTransparentNavigation = true, useTopSearchMenu = false)
- MaxLineLength:ShadowDrawable.kt$ShadowDrawable$if
- MaxLineLength:ShadowDrawable.kt$ShadowDrawable$obtainStyledAttributes.getColor(R.styleable.ShadowDrawable_android_shadowColor, ContextCompat.getColor(context, com.simplemobiletools.commons.R.color.md_grey_400_dark))
- MaxLineLength:ShadowDrawable.kt$ShadowDrawable$sharedBitmap = Bitmap.createBitmap(SHARED_BITMAP_BUFFER_SIZE, SHARED_BITMAP_BUFFER_SIZE, Bitmap.Config.ARGB_8888)
- MaxLineLength:ShadowDrawable.kt$ShadowDrawable$val shadowRadius = obtainStyledAttributes.getFloat(R.styleable.ShadowDrawable_android_shadowRadius, 0.0f).coerceAtLeast(0.0f)
- MaxLineLength:VideoQualityManager.kt$VideoQualityManager$val selectionIndex = mediaSizeStore.getCurrentSizeIndex(isPhotoCapture = false, isFrontCamera = isFrontCamera).coerceAtLeast(0)
- NestedBlockDepth:ImageQualityManager.kt$ImageQualityManager$fun initSupportedQualities()
- NestedBlockDepth:ImageSaver.kt$ImageSaver$private fun copyTempFileToDestination(tempFile: File)
- NestedBlockDepth:MediaOutputHelper.kt$MediaOutputHelper$fun getImageMediaOutput(): MediaOutput.ImageCaptureOutput
- NestedBlockDepth:MediaOutputHelper.kt$MediaOutputHelper$fun getVideoMediaOutput(): MediaOutput.VideoCaptureOutput
- NestedBlockDepth:MediaOutputHelper.kt$MediaOutputHelper$private fun getUriForFilePath(path: String): Uri?
- NestedBlockDepth:PhotoProcessor.kt$PhotoProcessor$override fun doInBackground(vararg params: ByteArray): String
- NestedBlockDepth:VideoQualityManager.kt$VideoQualityManager$fun initSupportedQualities(cameraProvider: ProcessCameraProvider)
- ReturnCount:ImageSaver.kt$ImageSaver$@SuppressLint("RestrictedApi") private fun saveImageToTempFile(): File?
- ReturnCount:MediaActionSound.kt$MediaActionSound$private fun loadSound(sound: SoundState): Int
- ReturnCount:MediaOutputHelper.kt$MediaOutputHelper$private fun getFileDescriptorMediaOutput(): MediaOutput.FileDescriptorMediaOutput?
- ReturnCount:MediaOutputHelper.kt$MediaOutputHelper$private fun getUriForFilePath(path: String): Uri?
- ReturnCount:PhotoProcessor.kt$PhotoProcessor$override fun doInBackground(vararg params: ByteArray): String
- ReturnCount:PhotoProcessor.kt$PhotoProcessor$private fun rotate(bitmap: Bitmap, degree: Int): Bitmap?
- SwallowedException:BitmapUtils.kt$BitmapUtils$ex: OutOfMemoryError
- SwallowedException:CameraXPreview.kt$CameraXPreview$e: Exception
- SwallowedException:ImageUtil.kt$ImageUtil$e: IOException
- SwallowedException:MediaOutputHelper.kt$MediaOutputHelper$e: Exception
- SwallowedException:PhotoProcessor.kt$PhotoProcessor$e: Exception
- SwallowedException:PhotoProcessor.kt$PhotoProcessor$e: OutOfMemoryError
- ThrowsCount:ImageUtil.kt$ImageUtil$@Throws(CodecFailedException::class) private fun cropJpegByteArray( data: ByteArray, cropRect: Rect, @IntRange(from = 1, to = 100) jpegQuality: Int, ): ByteArray
- TooGenericExceptionCaught:CameraXPreview.kt$CameraXPreview$e: Exception
- TooGenericExceptionCaught:ImageQualityManager.kt$ImageQualityManager$e: Exception
- TooGenericExceptionCaught:MediaOutputHelper.kt$MediaOutputHelper$e: Exception
- TooGenericExceptionCaught:PhotoProcessor.kt$PhotoProcessor$e: Exception
- TooGenericExceptionCaught:VideoQualityManager.kt$VideoQualityManager$e: Exception
- TooManyFunctions:CameraXPreview.kt$CameraXPreview : MyPreviewDefaultLifecycleObserver
- TooManyFunctions:CameraXPreviewListener.kt$CameraXPreviewListener
- TooManyFunctions:MainActivity.kt$MainActivity : SimpleActivityMediaSavedListenerCameraXPreviewListener
- TooManyFunctions:MediaOutputHelper.kt$MediaOutputHelper
- TooManyFunctions:MySize.kt$MySize
- TooManyFunctions:SettingsActivity.kt$SettingsActivity : SimpleActivity
- TooManyFunctions:ShadowDrawable.kt$ShadowDrawable : Drawable
- TooManyFunctions:VideoQuality.kt$VideoQuality
- UnusedPrivateProperty:ImageUtil.kt$ImageUtil$col
- UnusedPrivateProperty:ImageUtil.kt$ImageUtil$row
- UseCheckOrError:CameraXPreview.kt$CameraXPreview$throw IllegalStateException("Camera initialization failed.")
- UseCheckOrError:MainActivity.kt$MainActivity.<no name provided>$throw IllegalStateException("Unsupported tab position ${tab.position}")
- VariableNaming:FocusCircleView.kt$FocusCircleView$private val CIRCLE_DURATION = 500L
- VariableNaming:FocusCircleView.kt$FocusCircleView$private val CIRCLE_RADIUS = 50f
- WildcardImport:CameraXPreview.kt$import android.view.*
- WildcardImport:CameraXPreview.kt$import androidx.camera.core.*
- WildcardImport:CameraXPreview.kt$import androidx.camera.core.ImageCapture.*
- WildcardImport:CameraXPreview.kt$import androidx.camera.video.*
- WildcardImport:CameraXPreview.kt$import com.simplemobiletools.camera.extensions.*
- WildcardImport:CameraXPreview.kt$import com.simplemobiletools.camera.helpers.*
- WildcardImport:ImageSaver.kt$import java.io.*
- WildcardImport:ImageUtil.kt$import android.graphics.*
- WildcardImport:MainActivity.kt$import android.view.*
- WildcardImport:MainActivity.kt$import androidx.core.view.*
- WildcardImport:MainActivity.kt$import androidx.transition.*
- WildcardImport:MainActivity.kt$import com.simplemobiletools.camera.helpers.*
- WildcardImport:MainActivity.kt$import com.simplemobiletools.commons.extensions.*
- WildcardImport:MainActivity.kt$import com.simplemobiletools.commons.helpers.*
- WildcardImport:MediaOutputHelper.kt$import com.simplemobiletools.commons.extensions.*
- WildcardImport:PhotoProcessor.kt$import com.simplemobiletools.commons.extensions.*
- WildcardImport:SettingsActivity.kt$import com.simplemobiletools.commons.dialogs.*
- WildcardImport:SettingsActivity.kt$import com.simplemobiletools.commons.extensions.*
- WildcardImport:SettingsActivity.kt$import com.simplemobiletools.commons.helpers.*
- WildcardImport:ShadowDrawable.kt$import android.graphics.*
-
+
+
+ ComplexCondition:MainActivity.kt$MainActivity$!mIsHardwareShutterHandled &&
+ config.volumeButtonsAsShutter && (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN ||
+ keyCode == KeyEvent.KEYCODE_VOLUME_UP)
+
+
+ CyclomaticComplexMethod:CameraXPreview.kt$CameraXPreview$@SuppressLint("MissingPermission",
+ "NewApi") private fun startRecording()
+
+ CyclomaticComplexMethod:ImageSaver.kt$ImageSaver$@SuppressLint("RestrictedApi") private
+ fun saveImageToTempFile(): File?
+
+ CyclomaticComplexMethod:PhotoProcessor.kt$PhotoProcessor$override fun
+ doInBackground(vararg params: ByteArray): String
+
+ EmptyFunctionBlock:FocusCircleView.kt$FocusCircleView${}
+ FunctionNaming:ImageUtil.kt$ImageUtil$private fun yuv_420_888toNv21(image: ImageProxy):
+ ByteArray
+
+ ImplicitDefaultLocale:MySize.kt$MySize$String.format("%.1f", (width * height.toFloat())
+ / ONE_MEGA_PIXEL)
+
+ ImplicitDefaultLocale:VideoQuality.kt$VideoQuality$String.format("%.1f", (width *
+ height.toFloat()) / VideoQuality.ONE_MEGA_PIXEL)
+
+ LargeClass:MainActivity.kt$MainActivity :
+ SimpleActivityMediaSavedListenerCameraXPreviewListener
+
+ LongMethod:ImageSaver.kt$ImageSaver$@SuppressLint("RestrictedApi") private fun
+ saveImageToTempFile(): File?
+
+ LongMethod:PhotoProcessor.kt$PhotoProcessor$override fun doInBackground(vararg params:
+ ByteArray): String
+
+ LongMethod:ShadowDrawable.kt$ShadowDrawable$override fun draw(canvas: Canvas)
+ LongParameterList:CameraXInitializer.kt$CameraXInitializer$( previewView: PreviewView,
+ listener: CameraXPreviewListener, mediaSoundHelper: MediaSoundHelper, outputUri: Uri?,
+ isThirdPartyIntent: Boolean, initInPhotoMode: Boolean, )
+
+ LongParameterList:CameraXPreview.kt$CameraXPreview$( private val activity:
+ BaseSimpleActivity, private val previewView: PreviewView, private val mediaSoundHelper:
+ MediaSoundHelper, private val mediaOutputHelper: MediaOutputHelper, private val
+ cameraErrorHandler: CameraErrorHandler, private val listener: CameraXPreviewListener,
+ private val isThirdPartyIntent: Boolean, initInPhotoMode: Boolean, )
+
+ LongParameterList:ImageSaver.kt$ImageSaver$( private val contentResolver:
+ ContentResolver, private val image: ImageProxy, private val mediaOutput:
+ MediaOutput.ImageCaptureOutput, private val metadata: Metadata, private val jpegQuality:
+ Int, private val saveExifAttributes: Boolean, private val onImageSaved: (Uri) ->
+ Unit, private val onError: (ImageCaptureException) -> Unit, )
+
+ LongParameterList:ImageSaver.kt$ImageSaver.Companion$( contentResolver: ContentResolver,
+ image: ImageProxy, mediaOutput: MediaOutput.ImageCaptureOutput, metadata: Metadata,
+ jpegQuality: Int, saveExifAttributes: Boolean, onImageSaved: (Uri) -> Unit, onError:
+ (ImageCaptureException) -> Unit, )
+
+ LoopWithTooManyJumpStatements:ImageQualityManager.kt$ImageQualityManager$for
+ LoopWithTooManyJumpStatements:MediaActionSound.kt$MediaActionSound$for
+ MagicNumber:BitmapUtils.kt$BitmapUtils$128
+ MagicNumber:BitmapUtils.kt$BitmapUtils$7
+ MagicNumber:BitmapUtils.kt$BitmapUtils$8
+ MagicNumber:CameraXPreview.kt$CameraXPreview.<no name provided>$135
+ MagicNumber:CameraXPreview.kt$CameraXPreview.<no name provided>$225
+ MagicNumber:CameraXPreview.kt$CameraXPreview.<no name provided>$315
+ MagicNumber:CameraXPreview.kt$CameraXPreview.<no name provided>$45
+ MagicNumber:Config.kt$Config$80
+ MagicNumber:Constants.kt$270
+ MagicNumber:Constants.kt$90
+ MagicNumber:FocusCircleView.kt$FocusCircleView$500L
+ MagicNumber:FocusCircleView.kt$FocusCircleView$50f
+ MagicNumber:MainActivity.kt$MainActivity$33
+ MagicNumber:MainActivity.kt$MainActivity$35
+ MagicNumber:MainActivity.kt$MainActivity$39
+ MagicNumber:MainActivity.kt$MainActivity$44
+ MagicNumber:MainActivity.kt$MainActivity$46
+ MagicNumber:MainActivity.kt$MainActivity$52
+ MagicNumber:MainActivity.kt$MainActivity.<no name provided>$1000
+ MagicNumber:MainActivity.kt$MainActivity.<no name provided>$134
+ MagicNumber:MainActivity.kt$MainActivity.<no name provided>$225
+ MagicNumber:MainActivity.kt$MainActivity.<no name provided>$289
+ MagicNumber:MainActivity.kt$MainActivity.<no name provided>$75
+ MagicNumber:MainActivity.kt$MainActivity.<no name provided>$90
+ MagicNumber:MySize.kt$MySize$1.9f
+ MagicNumber:MySize.kt$MySize$16
+ MagicNumber:MySize.kt$MySize$19
+ MagicNumber:MySize.kt$MySize$3
+ MagicNumber:MySize.kt$MySize$3f
+ MagicNumber:MySize.kt$MySize$4
+ MagicNumber:MySize.kt$MySize$4f
+ MagicNumber:MySize.kt$MySize$5
+ MagicNumber:MySize.kt$MySize$5f
+ MagicNumber:MySize.kt$MySize$6
+ MagicNumber:MySize.kt$MySize$8f
+ MagicNumber:MySize.kt$MySize$9f
+ MagicNumber:PhotoProcessor.kt$PhotoProcessor$360
+ MagicNumber:SettingsActivity.kt$SettingsActivity$100
+ MagicNumber:SettingsActivity.kt$SettingsActivity$50
+ MagicNumber:SettingsActivity.kt$SettingsActivity$55
+ MagicNumber:SettingsActivity.kt$SettingsActivity$60
+ MagicNumber:SettingsActivity.kt$SettingsActivity$65
+ MagicNumber:SettingsActivity.kt$SettingsActivity$70
+ MagicNumber:SettingsActivity.kt$SettingsActivity$75
+ MagicNumber:SettingsActivity.kt$SettingsActivity$80
+ MagicNumber:SettingsActivity.kt$SettingsActivity$85
+ MagicNumber:SettingsActivity.kt$SettingsActivity$90
+ MagicNumber:SettingsActivity.kt$SettingsActivity$95
+ MagicNumber:ShadowDrawable.kt$ShadowDrawable$255.0f
+ MagicNumber:TimerMode.kt$TimerMode.TIMER_10$10000
+ MagicNumber:TimerMode.kt$TimerMode.TIMER_3$3000
+ MagicNumber:TimerMode.kt$TimerMode.TIMER_5$5000
+ MagicNumber:VideoQuality.kt$VideoQuality$1.9f
+ MagicNumber:VideoQuality.kt$VideoQuality$16
+ MagicNumber:VideoQuality.kt$VideoQuality$19
+ MagicNumber:VideoQuality.kt$VideoQuality$3
+ MagicNumber:VideoQuality.kt$VideoQuality$3f
+ MagicNumber:VideoQuality.kt$VideoQuality$4
+ MagicNumber:VideoQuality.kt$VideoQuality$4f
+ MagicNumber:VideoQuality.kt$VideoQuality$5
+ MagicNumber:VideoQuality.kt$VideoQuality$5f
+ MagicNumber:VideoQuality.kt$VideoQuality$6
+ MagicNumber:VideoQuality.kt$VideoQuality$8f
+ MagicNumber:VideoQuality.kt$VideoQuality$9f
+ MagicNumber:VideoQuality.kt$VideoQuality.FHD$1080
+ MagicNumber:VideoQuality.kt$VideoQuality.FHD$1920
+ MagicNumber:VideoQuality.kt$VideoQuality.HD$1280
+ MagicNumber:VideoQuality.kt$VideoQuality.HD$720
+ MagicNumber:VideoQuality.kt$VideoQuality.SD$480
+ MagicNumber:VideoQuality.kt$VideoQuality.SD$720
+ MagicNumber:VideoQuality.kt$VideoQuality.UHD$2160
+ MagicNumber:VideoQuality.kt$VideoQuality.UHD$3840
+ MaxLineLength:BitmapUtils.kt$BitmapUtils$val upperBound = if (minSideLength < 0) 128
+ else floor(w / minSideLength).coerceAtMost(floor(h / minSideLength)).toInt()
+
+
+ MaxLineLength:CameraErrorHandler.kt$CameraErrorHandler$VideoRecordEvent.Finalize.ERROR_INSUFFICIENT_STORAGE
+ -> context.toast(R.string.video_capture_insufficient_storage_error)
+
+ MaxLineLength:CameraXPreview.kt$CameraXPreview$private
+ MaxLineLength:CameraXPreview.kt$CameraXPreview$val scaleGesture = camera?.let {
+ ScaleGestureDetector(activity, PinchToZoomOnScaleGestureListener(it.cameraInfo,
+ it.cameraControl)) }
+
+ MaxLineLength:Config.kt$Config$var path = prefs.getString(SAVE_PHOTOS,
+ Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).toString())
+
+ MaxLineLength:ImageQualityManager.kt$ImageQualityManager$val configMap =
+ characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP) ?: continue
+
+ MaxLineLength:ImageQualityManager.kt$ImageQualityManager.Companion$private val
+ CAMERA_LENS = arrayOf(CameraCharacteristics.LENS_FACING_FRONT,
+ CameraCharacteristics.LENS_FACING_BACK)
+
+ MaxLineLength:ImageUtil.kt$ImageUtil$require(image.format == ImageFormat.YUV_420_888) {
+ "Incorrect image format of the input image proxy: " + image.format }
+
+ MaxLineLength:ImageUtil.kt$ImageUtil.CodecFailedException$class
+ MaxLineLength:MainActivity.kt$MainActivity$binding.toggleCamera.setImageResource(if
+ (frontCamera) R.drawable.ic_camera_rear_vector else R.drawable.ic_camera_front_vector)
+
+ MaxLineLength:MainActivity.kt$MainActivity$constraintSet.connect(previewView.id,
+ ConstraintSet.BOTTOM, ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM)
+
+ MaxLineLength:MainActivity.kt$MainActivity$hasPermission(PERMISSION_WRITE_STORAGE) &&
+ hasPermission(PERMISSION_CAMERA) && hasPermission(PERMISSION_RECORD_AUDIO)
+
+ MaxLineLength:MainActivity.kt$MainActivity$if
+ MaxLineLength:MainActivity.kt$MainActivity$layoutParams =
+ ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT)
+
+ MaxLineLength:MainActivity.kt$MainActivity$private
+ MaxLineLength:MainActivity.kt$MainActivity$private fun isImageCaptureIntent(): Boolean
+
+ MaxLineLength:MainActivity.kt$MainActivity$val iconColors =
+ intArrayOf(ContextCompat.getColor(this, org.fossify.commons.R.color.md_grey_white),
+ primaryColor)
+
+ MaxLineLength:MainActivity.kt$MainActivity$val marginBottom = safeInsetBottom +
+ navigationBarHeight +
+ resources.getDimensionPixelSize(org.fossify.commons.R.dimen.bigger_margin)
+
+ MaxLineLength:MainActivity.kt$MainActivity$val uri = if (isPhoto)
+ MediaStore.Images.Media.EXTERNAL_CONTENT_URI else
+ MediaStore.Video.Media.EXTERNAL_CONTENT_URI
+
+ MaxLineLength:MainActivity.kt$MainActivity$var hasMediaPermission =
+ hasPermission(PERMISSION_READ_MEDIA_IMAGES) ||
+ hasPermission(PERMISSION_READ_MEDIA_VIDEO)
+
+ MaxLineLength:MainActivity.kt$MainActivity$window.decorView.systemUiVisibility =
+ View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
+
+ MaxLineLength:MainActivity.kt$MainActivity$}
+ MaxLineLength:MainActivity.kt$MainActivity.<no name provided>$override
+ MaxLineLength:MediaActionSound.kt$MediaActionSound$else -> Log.e(TAG,
+ "OnLoadCompleteListener() called in wrong state: ${sound.state} for sound:
+ ${sound.mediaSound}")
+
+ MaxLineLength:MediaActionSound.kt$MediaActionSound.Companion$private val SOUNDS =
+ arrayOf(SHUTTER_CLICK, FOCUS_COMPLETE, START_VIDEO_RECORDING, STOP_VIDEO_RECORDING,
+ TIMER_COUNTDOWN, TIMER_COUNTDOWN_2_SECONDS)
+
+ MaxLineLength:MediaOutputHelper.kt$MediaOutputHelper$put(MediaStore.MediaColumns.DATA,
+ Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).toString())
+
+ MaxLineLength:PhotoProcessor.kt$PhotoProcessor$activity.config.savePhotosFolder =
+ Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).toString()
+
+ MaxLineLength:PhotoProcessor.kt$PhotoProcessor$document = document?.createFile("",
+ path.substring(path.lastIndexOf('/') + 1)) ?: activity.getDocumentFile(path)
+
+ MaxLineLength:PhotoProcessor.kt$PhotoProcessor$val activity: MainActivity
+ MaxLineLength:SettingsActivity.kt$SettingsActivity$OpenDeviceSettingsDialog(activity =
+ this@SettingsActivity, message =
+ getString(org.fossify.commons.R.string.allow_location_permission))
+
+
+ MaxLineLength:SettingsActivity.kt$SettingsActivity$faqItems.add(FAQItem(org.fossify.commons.R.string.faq_2_title_commons,
+ org.fossify.commons.R.string.faq_2_text_commons))
+
+
+ MaxLineLength:SettingsActivity.kt$SettingsActivity$faqItems.add(FAQItem(org.fossify.commons.R.string.faq_6_title_commons,
+ org.fossify.commons.R.string.faq_6_text_commons))
+
+
+ MaxLineLength:SettingsActivity.kt$SettingsActivity$findItem(R.id.more_apps_from_us).isVisible
+ = !resources.getBoolean(org.fossify.commons.R.bool.hide_google_relations)
+
+
+ MaxLineLength:SettingsActivity.kt$SettingsActivity$it.beGoneIf(settingsUseEnglishHolder.isGone()
+ && settingsPurchaseThankYouHolder.isGone() &&
+ settingsLanguageHolder.isGone())
+
+
+ MaxLineLength:SettingsActivity.kt$SettingsActivity$settingsUseEnglishHolder.beVisibleIf((config.wasUseEnglishToggled
+ || Locale.getDefault().language != "en") && !isTiramisuPlus())
+
+
+ MaxLineLength:SettingsActivity.kt$SettingsActivity$updateMaterialActivityViews(settingsCoordinator,
+ settingsHolder, useTransparentNavigation = true, useTopSearchMenu = false)
+
+ MaxLineLength:ShadowDrawable.kt$ShadowDrawable$if
+
+ MaxLineLength:ShadowDrawable.kt$ShadowDrawable$obtainStyledAttributes.getColor(R.styleable.ShadowDrawable_android_shadowColor,
+ ContextCompat.getColor(context, org.fossify.commons.R.color.md_grey_400_dark))
+
+ MaxLineLength:ShadowDrawable.kt$ShadowDrawable$sharedBitmap =
+ Bitmap.createBitmap(SHARED_BITMAP_BUFFER_SIZE, SHARED_BITMAP_BUFFER_SIZE,
+ Bitmap.Config.ARGB_8888)
+
+ MaxLineLength:ShadowDrawable.kt$ShadowDrawable$val shadowRadius =
+ obtainStyledAttributes.getFloat(R.styleable.ShadowDrawable_android_shadowRadius,
+ 0.0f).coerceAtLeast(0.0f)
+
+ MaxLineLength:VideoQualityManager.kt$VideoQualityManager$val selectionIndex =
+ mediaSizeStore.getCurrentSizeIndex(isPhotoCapture = false, isFrontCamera =
+ isFrontCamera).coerceAtLeast(0)
+
+ NestedBlockDepth:ImageQualityManager.kt$ImageQualityManager$fun
+ initSupportedQualities()
+
+ NestedBlockDepth:ImageSaver.kt$ImageSaver$private fun
+ copyTempFileToDestination(tempFile: File)
+
+ NestedBlockDepth:MediaOutputHelper.kt$MediaOutputHelper$fun getImageMediaOutput():
+ MediaOutput.ImageCaptureOutput
+
+ NestedBlockDepth:MediaOutputHelper.kt$MediaOutputHelper$fun getVideoMediaOutput():
+ MediaOutput.VideoCaptureOutput
+
+ NestedBlockDepth:MediaOutputHelper.kt$MediaOutputHelper$private fun
+ getUriForFilePath(path: String): Uri?
+
+ NestedBlockDepth:PhotoProcessor.kt$PhotoProcessor$override fun doInBackground(vararg
+ params: ByteArray): String
+
+ NestedBlockDepth:VideoQualityManager.kt$VideoQualityManager$fun
+ initSupportedQualities(cameraProvider: ProcessCameraProvider)
+
+ ReturnCount:ImageSaver.kt$ImageSaver$@SuppressLint("RestrictedApi") private fun
+ saveImageToTempFile(): File?
+
+ ReturnCount:MediaActionSound.kt$MediaActionSound$private fun loadSound(sound:
+ SoundState): Int
+
+ ReturnCount:MediaOutputHelper.kt$MediaOutputHelper$private fun
+ getFileDescriptorMediaOutput(): MediaOutput.FileDescriptorMediaOutput?
+
+ ReturnCount:MediaOutputHelper.kt$MediaOutputHelper$private fun getUriForFilePath(path:
+ String): Uri?
+
+ ReturnCount:PhotoProcessor.kt$PhotoProcessor$override fun doInBackground(vararg params:
+ ByteArray): String
+
+ ReturnCount:PhotoProcessor.kt$PhotoProcessor$private fun rotate(bitmap: Bitmap, degree:
+ Int): Bitmap?
+
+ SwallowedException:BitmapUtils.kt$BitmapUtils$ex: OutOfMemoryError
+ SwallowedException:CameraXPreview.kt$CameraXPreview$e: Exception
+ SwallowedException:ImageUtil.kt$ImageUtil$e: IOException
+ SwallowedException:MediaOutputHelper.kt$MediaOutputHelper$e: Exception
+ SwallowedException:PhotoProcessor.kt$PhotoProcessor$e: Exception
+ SwallowedException:PhotoProcessor.kt$PhotoProcessor$e: OutOfMemoryError
+ ThrowsCount:ImageUtil.kt$ImageUtil$@Throws(CodecFailedException::class) private fun
+ cropJpegByteArray( data: ByteArray, cropRect: Rect, @IntRange(from = 1, to = 100)
+ jpegQuality: Int, ): ByteArray
+
+ TooGenericExceptionCaught:CameraXPreview.kt$CameraXPreview$e: Exception
+ TooGenericExceptionCaught:ImageQualityManager.kt$ImageQualityManager$e: Exception
+ TooGenericExceptionCaught:MediaOutputHelper.kt$MediaOutputHelper$e: Exception
+ TooGenericExceptionCaught:PhotoProcessor.kt$PhotoProcessor$e: Exception
+ TooGenericExceptionCaught:VideoQualityManager.kt$VideoQualityManager$e: Exception
+ TooManyFunctions:CameraXPreview.kt$CameraXPreview : MyPreviewDefaultLifecycleObserver
+
+ TooManyFunctions:CameraXPreviewListener.kt$CameraXPreviewListener
+ TooManyFunctions:MainActivity.kt$MainActivity :
+ SimpleActivityMediaSavedListenerCameraXPreviewListener
+
+ TooManyFunctions:MediaOutputHelper.kt$MediaOutputHelper
+ TooManyFunctions:MySize.kt$MySize
+ TooManyFunctions:SettingsActivity.kt$SettingsActivity : SimpleActivity
+ TooManyFunctions:ShadowDrawable.kt$ShadowDrawable : Drawable
+ TooManyFunctions:VideoQuality.kt$VideoQuality
+ UnusedPrivateProperty:ImageUtil.kt$ImageUtil$col
+ UnusedPrivateProperty:ImageUtil.kt$ImageUtil$row
+ UseCheckOrError:CameraXPreview.kt$CameraXPreview$throw IllegalStateException("Camera
+ initialization failed.")
+
+ UseCheckOrError:MainActivity.kt$MainActivity.<no name provided>$throw
+ IllegalStateException("Unsupported tab position ${tab.position}")
+
+ VariableNaming:FocusCircleView.kt$FocusCircleView$private val CIRCLE_DURATION = 500L
+
+ VariableNaming:FocusCircleView.kt$FocusCircleView$private val CIRCLE_RADIUS = 50f
+ WildcardImport:CameraXPreview.kt$import android.view.*
+ WildcardImport:CameraXPreview.kt$import androidx.camera.core.*
+ WildcardImport:CameraXPreview.kt$import androidx.camera.core.ImageCapture.*
+ WildcardImport:CameraXPreview.kt$import androidx.camera.video.*
+ WildcardImport:CameraXPreview.kt$import org.fossify.camera.extensions.*
+ WildcardImport:CameraXPreview.kt$import org.fossify.camera.helpers.*
+ WildcardImport:ImageSaver.kt$import java.io.*
+ WildcardImport:ImageUtil.kt$import android.graphics.*
+ WildcardImport:MainActivity.kt$import android.view.*
+ WildcardImport:MainActivity.kt$import androidx.core.view.*
+ WildcardImport:MainActivity.kt$import androidx.transition.*
+ WildcardImport:MainActivity.kt$import org.fossify.camera.helpers.*
+ WildcardImport:MainActivity.kt$import org.fossify.commons.extensions.*
+ WildcardImport:MainActivity.kt$import org.fossify.commons.helpers.*
+ WildcardImport:MediaOutputHelper.kt$import org.fossify.commons.extensions.*
+ WildcardImport:PhotoProcessor.kt$import org.fossify.commons.extensions.*
+ WildcardImport:SettingsActivity.kt$import org.fossify.commons.dialogs.*
+ WildcardImport:SettingsActivity.kt$import org.fossify.commons.extensions.*
+ WildcardImport:SettingsActivity.kt$import org.fossify.commons.helpers.*
+ WildcardImport:ShadowDrawable.kt$import android.graphics.*
+
diff --git a/app/lint-baseline.xml b/app/lint-baseline.xml
index a840f4c5..2761f5a1 100644
--- a/app/lint-baseline.xml
+++ b/app/lint-baseline.xml
@@ -1,1396 +1,906 @@
-
+
-
-
+ message="WRITE_EXTERNAL_STORAGE no longer provides write access when targeting Android 11+, even when using `requestLegacyExternalStorage`">
+
-
-
-
-
+
+
+
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
+ id="DefaultLocale"
+ message="Implicitly using the default locale is a common source of bugs: Use `String.format(Locale, ...)` instead">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
+ errorLine2=" ~~~~"
+ id="InflateParams"
+ message="Avoid passing `null` as the view root (needed to resolve layout parameters on the inflated layout's root element)">
+
-
+ errorLine2=" ~~~~~"
+ id="VectorRaster"
+ message="Limit vector icons sizes to 200×200 to keep icon drawing fast; see https://developer.android.com/studio/write/vector-asset-studio#when for more">
+
-
-
+ message="A newer version of org.jetbrains.kotlin.android than 1.9.0 is available: 1.9.25">
+
-
-
+ message="A newer version of org.jetbrains.kotlin.android than 1.9.0 is available: 1.9.25">
+
-
-
+ message="A newer version of org.jetbrains.kotlin.android than 1.9.0 is available: 1.9.25">
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+ message="A newer version of androidx.lifecycle:lifecycle-runtime-ktx than 2.6.1 is available: 2.8.6">
+
-
-
+ message="A newer version of androidx.lifecycle:lifecycle-runtime-ktx than 2.6.1 is available: 2.8.6">
+
-
-
+ message="A newer version of androidx.lifecycle:lifecycle-runtime-ktx than 2.6.1 is available: 2.8.6">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""maximize_quality" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "iw" (Hebrew), "eu" (Basque), "nb" (Norwegian Bokmål), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "be" (Belarusian), "bg" (Bulgarian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "ckb"">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""minimize_latency" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "iw" (Hebrew), "eu" (Basque), "nb" (Norwegian Bokmål), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "be" (Belarusian), "bg" (Bulgarian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb"">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""camera_unavailable" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "fa" (Persian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "ckb"">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""camera_open_error" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "fa" (Persian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "ckb"">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""video_creating_error" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "fa" (Persian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "ckb"">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""video_mode_error" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "fa" (Persian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "ckb"">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""save_error_internal_storage" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "fa" (Persian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "ckb"">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""camera_switch_error" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "fa" (Persian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "ckb"">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""click_to_resume_preview" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "fa" (Persian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "ckb"">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""photo_not_saved" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "fa" (Persian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "ckb"">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""setting_resolution_failed" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "fa" (Persian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "ckb"">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""video_recording_failed" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "fa" (Persian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "ckb"">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""camera_in_use_error" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "iw" (Hebrew), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb"">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""camera_configure_error" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "iw" (Hebrew), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb"">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""camera_disabled_by_admin_error" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "iw" (Hebrew), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb"">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""camera_dnd_error" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "iw" (Hebrew), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb"">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""photo_capture_failed" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "iw" (Hebrew), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb"">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
+ id="MissingTranslation"
+ message=""video_capture_insufficient_storage_error" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "iw" (Hebrew), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb"">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""toggle_photo_video" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "iw" (Hebrew), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "be" (Belarusian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb"">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""change_resolution" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "iw" (Hebrew), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "be" (Belarusian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb"">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""view_last_media" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "iw" (Hebrew), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "be" (Belarusian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb", "da" (Danish)">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""toggle_camera" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "iw" (Hebrew), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "be" (Belarusian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb", "da" (Danish)">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""toggle_flash" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "iw" (Hebrew), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "be" (Belarusian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb", "da" (Danish)">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""toggle_timer" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "iw" (Hebrew), "eu" (Basque), "nb" (Norwegian Bokmål), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "ro" (Romanian), "be" (Belarusian), "bg" (Bulgarian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "sr" (Serbian), "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb", "da" (Danish)">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""faq_1_title" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "fa" (Persian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "ckb"">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""faq_1_text" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "fa" (Persian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "ckb"">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""save_photos" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "fa" (Persian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "ckb"">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""show_preview" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "fa" (Persian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "ckb"">
+
+
+
+
+
-
-
-
-
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""back_camera" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "fa" (Persian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "ckb"">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""front_camera" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "fa" (Persian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "ckb"">
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""focus_before_capture" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "fa" (Persian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "ckb"">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""volume_buttons_as_shutter" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "fa" (Persian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "ckb"">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""turn_flash_off_at_startup" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "fa" (Persian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "ckb"">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
+ id="MissingTranslation"
+ message=""flip_front_camera_photos_horizontally" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "ne" (Nepali), "fa" (Persian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "ckb"">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""keep_settings_visible" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "fa" (Persian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "ckb"">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""always_open_back_camera" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "fa" (Persian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "ckb"">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""save_photo_metadata" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "fa" (Persian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "te" (Telugu), "th" (Thai), "ckb"">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""save_photo_video_location" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "iw" (Hebrew), "eu" (Basque), "nb" (Norwegian Bokmål), "ja" (Japanese), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "ro" (Romanian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "fi" (Finnish), "bg" (Bulgarian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "sr" (Serbian), "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb", "da" (Danish)">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" id="MissingTranslation"
+ message=""photo_compression_quality" is not translated in "fil" (Filipino; Pilipino), "lv" (Latvian), "ia" (Interlingua), "mk" (Macedonian), "ms" (Malay), "en" (English), "eo" (Esperanto), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "fa" (Persian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "ckb"">
+
+
+
+
+
-
-
-
-
-
+ errorLine2=" ^" id="Typos"
+ message=""camera" is a common misspelling; did you mean "câmera"?">
+
-
+ errorLine2=" ^"
+ id="Typos"
+ message=""camera" is a common misspelling; did you mean "câmera"?">
+
-
+ errorLine2=" ^" id="Typos"
+ message=""camera" is a common misspelling; did you mean "câmera"?">
+
-
+ errorLine2=" ^"
+ id="Typos"
+ message=""video" is a common misspelling; did you mean "vídeo"?">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~"
+ id="Recycle"
+ message="This `ParcelFileDescriptor` should be freed up after use with `#close()`">
+
-
-
+
-
-
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~" id="StaticFieldLeak"
+ message="This field leaks a context object">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
+ id="VectorPath"
+ message="Very long vector path (1695 characters), which is bad for performance. Considering reducing precision, removing minor details or rasterizing vector.">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
+ id="VectorPath"
+ message="Very long vector path (2896 characters), which is bad for performance. Considering reducing precision, removing minor details or rasterizing vector.">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
+ id="VectorPath"
+ message="Very long vector path (1515 characters), which is bad for performance. Considering reducing precision, removing minor details or rasterizing vector.">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
+ id="VectorPath"
+ message="Very long vector path (829 characters), which is bad for performance. Considering reducing precision, removing minor details or rasterizing vector.">
+
-
-
-
-
+
+
+
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
+ id="VectorPath"
+ message="Very long vector path (874 characters), which is bad for performance. Considering reducing precision, removing minor details or rasterizing vector.">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~" id="UnusedResources"
+ message="The resource `R.string.video_creating_error` appears to be unused">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~" id="UnusedResources"
+ message="The resource `R.string.video_mode_error` appears to be unused">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" id="UnusedResources"
+ message="The resource `R.string.click_to_resume_preview` appears to be unused">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" id="UnusedResources"
+ message="The resource `R.string.setting_resolution_failed` appears to be unused">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~" id="UnusedResources"
+ message="The resource `R.string.toggle_photo_video` appears to be unused">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~" id="UnusedResources"
+ message="The resource `R.string.change_resolution` appears to be unused">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~" id="UnusedResources"
+ message="The resource `R.string.show_preview` appears to be unused">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~" id="UnusedResources"
+ message="The resource `R.string.back_camera` appears to be unused">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~" id="UnusedResources"
+ message="The resource `R.string.front_camera` appears to be unused">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~" id="UnusedResources"
+ message="The resource `R.string.focus_before_capture` appears to be unused">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" id="UnusedResources"
+ message="The resource `R.string.turn_flash_off_at_startup` appears to be unused">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~" id="UnusedResources"
+ message="The resource `R.string.keep_settings_visible` appears to be unused">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" id="UnusedResources"
+ message="The resource `R.string.always_open_back_camera` appears to be unused">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
+ id="TypographyDashes"
+ message="Replace "-" with an "en dash" character (–, –) ?">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
+ id="TypographyDashes"
+ message="Replace "-" with an "en dash" character (–, –) ?">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
+ id="TypographyDashes"
+ message="Replace "-" with an "en dash" character (–, –) ?">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
+ id="TypographyDashes"
+ message="Replace "-" with an "en dash" character (–, –) ?">
+
-
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
+ id="TypographyDashes"
+ message="Replace "-" with an "en dash" character (–, –) ?">
+
-
-
-
-
-
+ message="Replace "-" with an "en dash" character (–, –) ?">
+
+
+
+
+
-
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 2a192fc4..f99c2205 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -35,7 +35,7 @@
tools:node="remove" />
throw IllegalStateException("Unsupported tab position ${tab.position}")
}
} else {
- toast(com.simplemobiletools.commons.R.string.no_audio_permissions)
+ toast(org.fossify.commons.R.string.no_audio_permissions)
selectPhotoTab()
if (isVideoCaptureIntent()) {
finish()
@@ -96,11 +95,11 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
initVariables()
tryInitCamera()
supportActionBar?.hide()
- checkWhatsNewDialog()
setupOrientationEventListener()
val windowInsetsController = ViewCompat.getWindowInsetsController(window.decorView)
- windowInsetsController?.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
+ windowInsetsController?.systemBarsBehavior =
+ WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
windowInsetsController?.hide(WindowInsetsCompat.Type.statusBars())
if (isOreoMr1Plus()) {
@@ -109,9 +108,9 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
} else {
window.addFlags(
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD or
- WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED or
- WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON or
- WindowManager.LayoutParams.FLAG_FULLSCREEN
+ WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED or
+ WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON or
+ WindowManager.LayoutParams.FLAG_FULLSCREEN
)
}
}
@@ -130,7 +129,8 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
ensureTransparentNavigationBar()
if (ViewCompat.getWindowInsetsController(window.decorView) == null) {
- window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
+ window.decorView.systemUiVisibility =
+ View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
}
}
@@ -234,7 +234,7 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
if (grantedRecordAudioPermission) {
initializeCamera(false)
} else {
- toast(com.simplemobiletools.commons.R.string.no_audio_permissions)
+ toast(org.fossify.commons.R.string.no_audio_permissions)
if (isThirdPartyIntent()) {
finish()
} else {
@@ -247,7 +247,7 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
}
}
} else {
- toast(com.simplemobiletools.commons.R.string.no_camera_permissions)
+ toast(org.fossify.commons.R.string.no_camera_permissions)
finish()
}
}
@@ -265,7 +265,8 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
private fun handleStoragePermission(callback: (granted: Boolean) -> Unit) {
if (isTiramisuPlus()) {
- val mediaPermissionIds = mutableListOf(PERMISSION_READ_MEDIA_IMAGES, PERMISSION_READ_MEDIA_VIDEO)
+ val mediaPermissionIds =
+ mutableListOf(PERMISSION_READ_MEDIA_IMAGES, PERMISSION_READ_MEDIA_VIDEO)
if (isUpsideDownCakePlus()) {
mediaPermissionIds.add(PERMISSION_READ_MEDIA_VISUAL_USER_SELECTED)
}
@@ -278,14 +279,18 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
private fun isThirdPartyIntent() = isVideoCaptureIntent() || isImageCaptureIntent()
- private fun isImageCaptureIntent(): Boolean = intent?.action == MediaStore.ACTION_IMAGE_CAPTURE || intent?.action == MediaStore.ACTION_IMAGE_CAPTURE_SECURE
+ private fun isImageCaptureIntent(): Boolean =
+ intent?.action == MediaStore.ACTION_IMAGE_CAPTURE || intent?.action == MediaStore.ACTION_IMAGE_CAPTURE_SECURE
private fun isVideoCaptureIntent(): Boolean = intent?.action == MediaStore.ACTION_VIDEO_CAPTURE
private fun createToggleGroup(): MaterialButtonToggleGroup {
return MaterialButtonToggleGroup(this).apply {
isSingleSelection = true
- layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
+ layoutParams = ViewGroup.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ )
}
}
@@ -308,7 +313,8 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
topMargin = safeInsetTop
}
- val marginBottom = safeInsetBottom + navigationBarHeight + resources.getDimensionPixelSize(com.simplemobiletools.commons.R.dimen.bigger_margin)
+ val marginBottom =
+ safeInsetBottom + navigationBarHeight + resources.getDimensionPixelSize(org.fossify.commons.R.dimen.bigger_margin)
binding.shutter.updateLayoutParams {
bottomMargin = marginBottom
@@ -436,7 +442,12 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
return true
}
- override fun onFling(event1: MotionEvent?, event2: MotionEvent?, velocityX: Float, velocityY: Float): Boolean {
+ override fun onFling(
+ event1: MotionEvent?,
+ event2: MotionEvent?,
+ velocityX: Float,
+ velocityY: Float
+ ): Boolean {
if (event1 == null || event2 == null) {
return true
}
@@ -481,7 +492,8 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
private fun showLastMediaPreview() {
if (mPreviewUri != null) {
- val path = applicationContext.getRealPathFromURI(mPreviewUri!!) ?: mPreviewUri!!.toString()
+ val path =
+ applicationContext.getRealPathFromURI(mPreviewUri!!) ?: mPreviewUri!!.toString()
openPathIntent(path, false, BuildConfig.APPLICATION_ID)
}
}
@@ -534,7 +546,8 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
}
private fun setupPreviewImage(isPhoto: Boolean) {
- val uri = if (isPhoto) MediaStore.Images.Media.EXTERNAL_CONTENT_URI else MediaStore.Video.Media.EXTERNAL_CONTENT_URI
+ val uri =
+ if (isPhoto) MediaStore.Images.Media.EXTERNAL_CONTENT_URI else MediaStore.Video.Media.EXTERNAL_CONTENT_URI
val lastMediaId = getLatestMediaId(uri)
if (lastMediaId == 0L) {
return
@@ -568,9 +581,12 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
private fun hasPhotoModePermissions(): Boolean {
return if (isTiramisuPlus()) {
- var hasMediaPermission = hasPermission(PERMISSION_READ_MEDIA_IMAGES) || hasPermission(PERMISSION_READ_MEDIA_VIDEO)
+ var hasMediaPermission = hasPermission(PERMISSION_READ_MEDIA_IMAGES) || hasPermission(
+ PERMISSION_READ_MEDIA_VIDEO
+ )
if (isUpsideDownCakePlus()) {
- hasMediaPermission = hasMediaPermission || hasPermission(PERMISSION_READ_MEDIA_VISUAL_USER_SELECTED)
+ hasMediaPermission =
+ hasMediaPermission || hasPermission(PERMISSION_READ_MEDIA_VISUAL_USER_SELECTED)
}
hasMediaPermission && hasPermission(PERMISSION_CAMERA)
} else {
@@ -582,16 +598,23 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
return if (isTiramisuPlus()) {
var hasMediaPermission = hasPermission(PERMISSION_READ_MEDIA_VIDEO)
if (isUpsideDownCakePlus()) {
- hasMediaPermission = hasMediaPermission || hasPermission(PERMISSION_READ_MEDIA_VISUAL_USER_SELECTED)
+ hasMediaPermission =
+ hasMediaPermission || hasPermission(PERMISSION_READ_MEDIA_VISUAL_USER_SELECTED)
}
- hasMediaPermission && hasPermission(PERMISSION_CAMERA) && hasPermission(PERMISSION_RECORD_AUDIO)
+ hasMediaPermission && hasPermission(PERMISSION_CAMERA) && hasPermission(
+ PERMISSION_RECORD_AUDIO
+ )
} else {
- hasPermission(PERMISSION_WRITE_STORAGE) && hasPermission(PERMISSION_CAMERA) && hasPermission(PERMISSION_RECORD_AUDIO)
+ hasPermission(PERMISSION_WRITE_STORAGE) && hasPermission(PERMISSION_CAMERA) && hasPermission(
+ PERMISSION_RECORD_AUDIO
+ )
}
}
private fun setupOrientationEventListener() {
- mOrientationEventListener = object : OrientationEventListener(this, SensorManager.SENSOR_DELAY_NORMAL) {
+ mOrientationEventListener = object : OrientationEventListener(
+ this, SensorManager.SENSOR_DELAY_NORMAL
+ ) {
override fun onOrientationChanged(orientation: Int) {
if (isDestroyed) {
mOrientationEventListener.disable()
@@ -632,10 +655,11 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
}
}
- private fun rotate(view: View, degrees: Int) = view.animate().rotation(degrees.toFloat()).start()
+ private fun rotate(view: View, degrees: Int) =
+ view.animate().rotation(degrees.toFloat()).start()
override fun setHasFrontAndBackCamera(hasFrontAndBack: Boolean) {
- binding.toggleCamera?.beVisibleIf(hasFrontAndBack)
+ binding.toggleCamera.beVisibleIf(hasFrontAndBack)
}
override fun setFlashAvailable(available: Boolean) {
@@ -823,7 +847,10 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
mediaSizeToggleGroup.children.map { it as MaterialButton }.forEach(::setButtonColors)
}
- private fun createButton(resolutionOption: ResolutionOption, onClick: (clickedViewId: Int) -> Unit): MaterialButton {
+ private fun createButton(
+ resolutionOption: ResolutionOption,
+ onClick: (clickedViewId: Int) -> Unit
+ ): MaterialButton {
val params = LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT).apply {
weight = 1f
}
@@ -862,8 +889,14 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
private fun setButtonColors(button: MaterialButton) {
val primaryColor = getProperPrimaryColor()
- val states = arrayOf(intArrayOf(-android.R.attr.state_checked), intArrayOf(android.R.attr.state_checked))
- val iconColors = intArrayOf(ContextCompat.getColor(this, com.simplemobiletools.commons.R.color.md_grey_white), primaryColor)
+ val states = arrayOf(
+ intArrayOf(-android.R.attr.state_checked),
+ intArrayOf(android.R.attr.state_checked)
+ )
+ val iconColors = intArrayOf(
+ ContextCompat.getColor(this, org.fossify.commons.R.color.md_grey_white),
+ primaryColor
+ )
button.iconTint = ColorStateList(states, iconColors)
}
@@ -872,11 +905,31 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
val constraintSet = ConstraintSet()
constraintSet.clone(viewHolder)
if (requiresCentering) {
- constraintSet.connect(previewView.id, ConstraintSet.TOP, topOptions.id, ConstraintSet.BOTTOM)
- constraintSet.connect(previewView.id, ConstraintSet.BOTTOM, cameraModeHolder.id, ConstraintSet.TOP)
+ constraintSet.connect(
+ previewView.id,
+ ConstraintSet.TOP,
+ topOptions.id,
+ ConstraintSet.BOTTOM
+ )
+ constraintSet.connect(
+ previewView.id,
+ ConstraintSet.BOTTOM,
+ cameraModeHolder.id,
+ ConstraintSet.TOP
+ )
} else {
- constraintSet.connect(previewView.id, ConstraintSet.TOP, ConstraintSet.PARENT_ID, ConstraintSet.TOP)
- constraintSet.connect(previewView.id, ConstraintSet.BOTTOM, ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM)
+ constraintSet.connect(
+ previewView.id,
+ ConstraintSet.TOP,
+ ConstraintSet.PARENT_ID,
+ ConstraintSet.TOP
+ )
+ constraintSet.connect(
+ previewView.id,
+ ConstraintSet.BOTTOM,
+ ConstraintSet.PARENT_ID,
+ ConstraintSet.BOTTOM
+ )
}
constraintSet.applyTo(viewHolder)
}
@@ -887,7 +940,7 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
setupPreviewImage(true)
Intent(BROADCAST_REFRESH_MEDIA).apply {
putExtra(REFRESH_PATH, path)
- `package` = "com.simplemobiletools.gallery"
+ `package` = "org.fossify.gallery"
sendBroadcast(this)
}
}
@@ -933,23 +986,11 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
private fun resetViewsOnTimerFinish() = binding.apply {
arrayOf(topOptions, toggleCamera, lastPhotoVideoPreview, cameraModeHolder).forEach {
- it?.fadeIn()
- it?.beVisible()
+ it.fadeIn()
+ it.beVisible()
}
timerText.beGone()
shutter.setImageState(intArrayOf(-R.attr.state_timer_cancel), true)
}
-
- private fun checkWhatsNewDialog() {
- arrayListOf().apply {
- add(Release(33, R.string.release_33))
- add(Release(35, R.string.release_35))
- add(Release(39, R.string.release_39))
- add(Release(44, R.string.release_44))
- add(Release(46, R.string.release_46))
- add(Release(52, R.string.release_52))
- checkWhatsNew(this, BuildConfig.VERSION_CODE)
- }
- }
}
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/activities/SettingsActivity.kt b/app/src/main/kotlin/org/fossify/camera/activities/SettingsActivity.kt
similarity index 80%
rename from app/src/main/kotlin/com/simplemobiletools/camera/activities/SettingsActivity.kt
rename to app/src/main/kotlin/org/fossify/camera/activities/SettingsActivity.kt
index cc66798a..3e8d2103 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/activities/SettingsActivity.kt
+++ b/app/src/main/kotlin/org/fossify/camera/activities/SettingsActivity.kt
@@ -1,18 +1,18 @@
-package com.simplemobiletools.camera.activities
+package org.fossify.camera.activities
import android.annotation.SuppressLint
import android.os.Bundle
-import com.simplemobiletools.camera.BuildConfig
-import com.simplemobiletools.camera.R
-import com.simplemobiletools.camera.databinding.ActivitySettingsBinding
-import com.simplemobiletools.camera.extensions.checkLocationPermission
-import com.simplemobiletools.camera.extensions.config
-import com.simplemobiletools.camera.models.CaptureMode
-import com.simplemobiletools.commons.dialogs.*
-import com.simplemobiletools.commons.extensions.*
-import com.simplemobiletools.commons.helpers.*
-import com.simplemobiletools.commons.models.FAQItem
-import com.simplemobiletools.commons.models.RadioItem
+import org.fossify.camera.BuildConfig
+import org.fossify.camera.R
+import org.fossify.camera.databinding.ActivitySettingsBinding
+import org.fossify.camera.extensions.checkLocationPermission
+import org.fossify.camera.extensions.config
+import org.fossify.camera.models.CaptureMode
+import org.fossify.commons.dialogs.*
+import org.fossify.commons.extensions.*
+import org.fossify.commons.helpers.*
+import org.fossify.commons.models.FAQItem
+import org.fossify.commons.models.RadioItem
import java.util.*
import kotlin.system.exitProcess
@@ -27,7 +27,12 @@ class SettingsActivity : SimpleActivity() {
setupOptionsMenu()
refreshMenuItems()
- updateMaterialActivityViews(settingsCoordinator, settingsHolder, useTransparentNavigation = true, useTopSearchMenu = false)
+ updateMaterialActivityViews(
+ settingsCoordinator,
+ settingsHolder,
+ useTransparentNavigation = true,
+ useTopSearchMenu = false
+ )
setupMaterialScrollListener(settingsNestedScrollview, settingsToolbar)
}
}
@@ -65,7 +70,8 @@ class SettingsActivity : SimpleActivity() {
private fun refreshMenuItems() {
binding.settingsToolbar.menu.apply {
- findItem(R.id.more_apps_from_us).isVisible = !resources.getBoolean(com.simplemobiletools.commons.R.bool.hide_google_relations)
+ findItem(R.id.more_apps_from_us).isVisible =
+ !resources.getBoolean(org.fossify.commons.R.bool.hide_google_relations)
}
}
@@ -124,12 +130,29 @@ class SettingsActivity : SimpleActivity() {
FAQItem(R.string.faq_1_title, R.string.faq_1_text)
)
- if (!resources.getBoolean(com.simplemobiletools.commons.R.bool.hide_google_relations)) {
- faqItems.add(FAQItem(com.simplemobiletools.commons.R.string.faq_2_title_commons, com.simplemobiletools.commons.R.string.faq_2_text_commons))
- faqItems.add(FAQItem(com.simplemobiletools.commons.R.string.faq_6_title_commons, com.simplemobiletools.commons.R.string.faq_6_text_commons))
+ if (!resources.getBoolean(org.fossify.commons.R.bool.hide_google_relations)) {
+ faqItems.add(
+ FAQItem(
+ org.fossify.commons.R.string.faq_2_title_commons,
+ org.fossify.commons.R.string.faq_2_text_commons
+ )
+ )
+ faqItems.add(
+ FAQItem(
+ org.fossify.commons.R.string.faq_6_title_commons,
+ org.fossify.commons.R.string.faq_6_text_commons
+ )
+ )
}
- startAboutActivity(R.string.app_name, licenses, BuildConfig.VERSION_NAME, faqItems, true)
+ startAboutActivity(
+ appNameId = R.string.app_name,
+ licenseMask = licenses,
+ versionName = BuildConfig.VERSION_NAME,
+ repositoryName = "Camera",
+ faqItems = faqItems,
+ showFAQBeforeMail = true
+ )
}
private fun getLastPart(path: String): String {
@@ -182,7 +205,10 @@ class SettingsActivity : SimpleActivity() {
if (checkLocationPermission()) {
updateSavePhotoVideoLocationConfig(true)
} else {
- OpenDeviceSettingsDialog(activity = this@SettingsActivity, message = getString(com.simplemobiletools.commons.R.string.allow_location_permission))
+ OpenDeviceSettingsDialog(
+ activity = this@SettingsActivity,
+ message = getString(org.fossify.commons.R.string.allow_location_permission)
+ )
}
}
}
@@ -202,7 +228,12 @@ class SettingsActivity : SimpleActivity() {
settingsSavePhotos.text = getLastPart(config.savePhotosFolder)
settingsSavePhotosHolder.setOnClickListener {
if (isOrWasThankYouInstalled()) {
- FilePickerDialog(this@SettingsActivity, config.savePhotosFolder, false, showFAB = true) {
+ FilePickerDialog(
+ this@SettingsActivity,
+ config.savePhotosFolder,
+ false,
+ showFAB = true
+ ) {
val path = it
handleSAFDialog(it) { success ->
if (success) {
diff --git a/app/src/main/kotlin/org/fossify/camera/activities/SimpleActivity.kt b/app/src/main/kotlin/org/fossify/camera/activities/SimpleActivity.kt
new file mode 100644
index 00000000..1a9f0d63
--- /dev/null
+++ b/app/src/main/kotlin/org/fossify/camera/activities/SimpleActivity.kt
@@ -0,0 +1,30 @@
+package org.fossify.camera.activities
+
+import org.fossify.camera.R
+import org.fossify.commons.activities.BaseSimpleActivity
+
+open class SimpleActivity : BaseSimpleActivity() {
+ override fun getAppIconIDs() = arrayListOf(
+ R.mipmap.ic_launcher_red,
+ R.mipmap.ic_launcher_pink,
+ R.mipmap.ic_launcher_purple,
+ R.mipmap.ic_launcher_deep_purple,
+ R.mipmap.ic_launcher_indigo,
+ R.mipmap.ic_launcher_blue,
+ R.mipmap.ic_launcher_light_blue,
+ R.mipmap.ic_launcher_cyan,
+ R.mipmap.ic_launcher_teal,
+ R.mipmap.ic_launcher_green,
+ R.mipmap.ic_launcher_light_green,
+ R.mipmap.ic_launcher_lime,
+ R.mipmap.ic_launcher_yellow,
+ R.mipmap.ic_launcher_amber,
+ R.mipmap.ic_launcher,
+ R.mipmap.ic_launcher_deep_orange,
+ R.mipmap.ic_launcher_brown,
+ R.mipmap.ic_launcher_blue_grey,
+ R.mipmap.ic_launcher_grey_black
+ )
+
+ override fun getAppLauncherName() = getString(R.string.app_launcher_name)
+}
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/activities/SplashActivity.kt b/app/src/main/kotlin/org/fossify/camera/activities/SplashActivity.kt
similarity index 63%
rename from app/src/main/kotlin/com/simplemobiletools/camera/activities/SplashActivity.kt
rename to app/src/main/kotlin/org/fossify/camera/activities/SplashActivity.kt
index 45c1e3dc..3e5ce056 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/activities/SplashActivity.kt
+++ b/app/src/main/kotlin/org/fossify/camera/activities/SplashActivity.kt
@@ -1,7 +1,7 @@
-package com.simplemobiletools.camera.activities
+package org.fossify.camera.activities
import android.content.Intent
-import com.simplemobiletools.commons.activities.BaseSplashActivity
+import org.fossify.commons.activities.BaseSplashActivity
class SplashActivity : BaseSplashActivity() {
override fun initActivity() {
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/extensions/CameraSelector.kt b/app/src/main/kotlin/org/fossify/camera/extensions/CameraSelector.kt
similarity index 83%
rename from app/src/main/kotlin/com/simplemobiletools/camera/extensions/CameraSelector.kt
rename to app/src/main/kotlin/org/fossify/camera/extensions/CameraSelector.kt
index 0b98bca4..5bfa1e3d 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/extensions/CameraSelector.kt
+++ b/app/src/main/kotlin/org/fossify/camera/extensions/CameraSelector.kt
@@ -1,4 +1,4 @@
-package com.simplemobiletools.camera.extensions
+package org.fossify.camera.extensions
import androidx.camera.core.CameraSelector
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/extensions/Context.kt b/app/src/main/kotlin/org/fossify/camera/extensions/Context.kt
similarity index 76%
rename from app/src/main/kotlin/com/simplemobiletools/camera/extensions/Context.kt
rename to app/src/main/kotlin/org/fossify/camera/extensions/Context.kt
index 90fa434f..788e123b 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/extensions/Context.kt
+++ b/app/src/main/kotlin/org/fossify/camera/extensions/Context.kt
@@ -1,10 +1,10 @@
-package com.simplemobiletools.camera.extensions
+package org.fossify.camera.extensions
import android.content.Context
-import com.simplemobiletools.camera.helpers.Config
-import com.simplemobiletools.commons.extensions.hasPermission
-import com.simplemobiletools.commons.helpers.PERMISSION_ACCESS_COARSE_LOCATION
-import com.simplemobiletools.commons.helpers.PERMISSION_ACCESS_FINE_LOCATION
+import org.fossify.camera.helpers.Config
+import org.fossify.commons.extensions.hasPermission
+import org.fossify.commons.helpers.PERMISSION_ACCESS_COARSE_LOCATION
+import org.fossify.commons.helpers.PERMISSION_ACCESS_FINE_LOCATION
import java.io.File
import java.text.SimpleDateFormat
import java.util.Date
@@ -28,6 +28,7 @@ fun Context.getOutputMediaFilePath(isPhoto: Boolean): String {
"${mediaStorageDir.path}/$mediaName.mp4"
}
}
+
fun Context.getOutputMediaFileName(isPhoto: Boolean): String {
val mediaName = getRandomMediaName(isPhoto)
return if (isPhoto) {
@@ -47,5 +48,7 @@ fun getRandomMediaName(isPhoto: Boolean): String {
}
fun Context.checkLocationPermission(): Boolean {
- return hasPermission(PERMISSION_ACCESS_FINE_LOCATION) || hasPermission(PERMISSION_ACCESS_COARSE_LOCATION)
+ return hasPermission(PERMISSION_ACCESS_FINE_LOCATION) || hasPermission(
+ PERMISSION_ACCESS_COARSE_LOCATION
+ )
}
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/extensions/Int.kt b/app/src/main/kotlin/org/fossify/camera/extensions/Int.kt
similarity index 79%
rename from app/src/main/kotlin/com/simplemobiletools/camera/extensions/Int.kt
rename to app/src/main/kotlin/org/fossify/camera/extensions/Int.kt
index 5a2f9877..75532560 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/extensions/Int.kt
+++ b/app/src/main/kotlin/org/fossify/camera/extensions/Int.kt
@@ -1,12 +1,12 @@
-package com.simplemobiletools.camera.extensions
+package org.fossify.camera.extensions
import androidx.camera.core.CameraSelector
import androidx.camera.core.ImageCapture
-import com.simplemobiletools.camera.R
-import com.simplemobiletools.camera.helpers.FLASH_ALWAYS_ON
-import com.simplemobiletools.camera.helpers.FLASH_AUTO
-import com.simplemobiletools.camera.helpers.FLASH_OFF
-import com.simplemobiletools.camera.helpers.FLASH_ON
+import org.fossify.camera.R
+import org.fossify.camera.helpers.FLASH_ALWAYS_ON
+import org.fossify.camera.helpers.FLASH_AUTO
+import org.fossify.camera.helpers.FLASH_OFF
+import org.fossify.camera.helpers.FLASH_ON
fun Int.toCameraXFlashMode(): Int {
return when (this) {
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/extensions/MaterialButton.kt b/app/src/main/kotlin/org/fossify/camera/extensions/MaterialButton.kt
similarity index 62%
rename from app/src/main/kotlin/com/simplemobiletools/camera/extensions/MaterialButton.kt
rename to app/src/main/kotlin/org/fossify/camera/extensions/MaterialButton.kt
index f44fd81b..57e5ec6d 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/extensions/MaterialButton.kt
+++ b/app/src/main/kotlin/org/fossify/camera/extensions/MaterialButton.kt
@@ -1,9 +1,9 @@
-package com.simplemobiletools.camera.extensions
+package org.fossify.camera.extensions
import androidx.annotation.DrawableRes
import com.google.android.material.button.MaterialButton
-import com.simplemobiletools.camera.R
-import com.simplemobiletools.camera.views.ShadowDrawable
+import org.fossify.camera.R
+import org.fossify.camera.views.ShadowDrawable
fun MaterialButton.setShadowIcon(@DrawableRes drawableResId: Int) {
icon = ShadowDrawable(context, drawableResId, R.style.TopIconShadow)
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/extensions/Quality.kt b/app/src/main/kotlin/org/fossify/camera/extensions/Quality.kt
similarity index 84%
rename from app/src/main/kotlin/com/simplemobiletools/camera/extensions/Quality.kt
rename to app/src/main/kotlin/org/fossify/camera/extensions/Quality.kt
index 07f4b78e..ec054f60 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/extensions/Quality.kt
+++ b/app/src/main/kotlin/org/fossify/camera/extensions/Quality.kt
@@ -1,7 +1,7 @@
-package com.simplemobiletools.camera.extensions
+package org.fossify.camera.extensions
import androidx.camera.video.Quality
-import com.simplemobiletools.camera.models.VideoQuality
+import org.fossify.camera.models.VideoQuality
fun Quality.toVideoQuality(): VideoQuality {
return when (this) {
diff --git a/app/src/main/kotlin/org/fossify/camera/extensions/View.kt b/app/src/main/kotlin/org/fossify/camera/extensions/View.kt
new file mode 100644
index 00000000..47a86129
--- /dev/null
+++ b/app/src/main/kotlin/org/fossify/camera/extensions/View.kt
@@ -0,0 +1,14 @@
+package org.fossify.camera.extensions
+
+import android.view.View
+import org.fossify.commons.helpers.SHORT_ANIMATION_DURATION
+
+fun View.fadeIn() {
+ animate().alpha(1f).setDuration(SHORT_ANIMATION_DURATION).withStartAction { isClickable = true }
+ .start()
+}
+
+fun View.fadeOut() {
+ animate().alpha(0f).setDuration(SHORT_ANIMATION_DURATION).withEndAction { isClickable = false }
+ .start()
+}
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/BitmapUtils.kt b/app/src/main/kotlin/org/fossify/camera/helpers/BitmapUtils.kt
similarity index 77%
rename from app/src/main/kotlin/com/simplemobiletools/camera/helpers/BitmapUtils.kt
rename to app/src/main/kotlin/org/fossify/camera/helpers/BitmapUtils.kt
index b7b481eb..913641a9 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/BitmapUtils.kt
+++ b/app/src/main/kotlin/org/fossify/camera/helpers/BitmapUtils.kt
@@ -1,4 +1,4 @@
-package com.simplemobiletools.camera.helpers
+package org.fossify.camera.helpers
import android.graphics.Bitmap
import android.graphics.BitmapFactory
@@ -10,7 +10,10 @@ import kotlin.math.sqrt
object BitmapUtils {
private const val INLINE_BITMAP_MAX_PIXEL_NUM = 50 * 1024
- fun makeBitmap(jpegData: ByteArray, maxNumOfPixels: Int = INLINE_BITMAP_MAX_PIXEL_NUM): Bitmap? {
+ fun makeBitmap(
+ jpegData: ByteArray,
+ maxNumOfPixels: Int = INLINE_BITMAP_MAX_PIXEL_NUM
+ ): Bitmap? {
return try {
val options = BitmapFactory.Options()
options.inJustDecodeBounds = true
@@ -33,7 +36,11 @@ object BitmapUtils {
}
}
- private fun computeSampleSize(options: BitmapFactory.Options, minSideLength: Int, maxNumOfPixels: Int): Int {
+ private fun computeSampleSize(
+ options: BitmapFactory.Options,
+ minSideLength: Int,
+ maxNumOfPixels: Int
+ ): Int {
val initialSize = computeInitialSampleSize(
options, minSideLength,
maxNumOfPixels
@@ -50,11 +57,17 @@ object BitmapUtils {
return roundedSize
}
- private fun computeInitialSampleSize(options: BitmapFactory.Options, minSideLength: Int, maxNumOfPixels: Int): Int {
+ private fun computeInitialSampleSize(
+ options: BitmapFactory.Options,
+ minSideLength: Int,
+ maxNumOfPixels: Int
+ ): Int {
val w = options.outWidth.toDouble()
val h = options.outHeight.toDouble()
val lowerBound = if (maxNumOfPixels < 0) 1 else ceil(sqrt(w * h / maxNumOfPixels)).toInt()
- val upperBound = if (minSideLength < 0) 128 else floor(w / minSideLength).coerceAtMost(floor(h / minSideLength)).toInt()
+ val upperBound =
+ if (minSideLength < 0) 128 else floor(w / minSideLength).coerceAtMost(floor(h / minSideLength))
+ .toInt()
if (upperBound < lowerBound) {
// return the larger one when there is no overlapping zone.
return lowerBound
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/CameraErrorHandler.kt b/app/src/main/kotlin/org/fossify/camera/helpers/CameraErrorHandler.kt
similarity index 79%
rename from app/src/main/kotlin/com/simplemobiletools/camera/helpers/CameraErrorHandler.kt
rename to app/src/main/kotlin/org/fossify/camera/helpers/CameraErrorHandler.kt
index 8b3139dc..991ae879 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/CameraErrorHandler.kt
+++ b/app/src/main/kotlin/org/fossify/camera/helpers/CameraErrorHandler.kt
@@ -1,12 +1,12 @@
-package com.simplemobiletools.camera.helpers
+package org.fossify.camera.helpers
import android.content.Context
import android.widget.Toast
import androidx.camera.core.CameraState
import androidx.camera.core.ImageCapture
import androidx.camera.video.VideoRecordEvent
-import com.simplemobiletools.camera.R
-import com.simplemobiletools.commons.extensions.toast
+import org.fossify.camera.R
+import org.fossify.commons.extensions.toast
class CameraErrorHandler(
private val context: Context,
@@ -15,11 +15,19 @@ class CameraErrorHandler(
fun handleCameraError(error: CameraState.StateError?) {
when (error?.code) {
CameraState.ERROR_MAX_CAMERAS_IN_USE,
- CameraState.ERROR_CAMERA_IN_USE -> context.toast(R.string.camera_in_use_error, Toast.LENGTH_LONG)
+ CameraState.ERROR_CAMERA_IN_USE -> context.toast(
+ id = R.string.camera_in_use_error,
+ length = Toast.LENGTH_LONG
+ )
+
CameraState.ERROR_CAMERA_FATAL_ERROR -> context.toast(R.string.camera_unavailable)
CameraState.ERROR_STREAM_CONFIG -> context.toast(R.string.camera_configure_error)
CameraState.ERROR_CAMERA_DISABLED -> context.toast(R.string.camera_disabled_by_admin_error)
- CameraState.ERROR_DO_NOT_DISTURB_MODE_ENABLED -> context.toast(R.string.camera_dnd_error, Toast.LENGTH_LONG)
+ CameraState.ERROR_DO_NOT_DISTURB_MODE_ENABLED -> context.toast(
+ id = R.string.camera_dnd_error,
+ length = Toast.LENGTH_LONG
+ )
+
CameraState.ERROR_OTHER_RECOVERABLE_ERROR -> {}
}
}
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/Config.kt b/app/src/main/kotlin/org/fossify/camera/helpers/Config.kt
similarity index 68%
rename from app/src/main/kotlin/com/simplemobiletools/camera/helpers/Config.kt
rename to app/src/main/kotlin/org/fossify/camera/helpers/Config.kt
index 0f0bfd39..3cd426b6 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/Config.kt
+++ b/app/src/main/kotlin/org/fossify/camera/helpers/Config.kt
@@ -1,11 +1,11 @@
-package com.simplemobiletools.camera.helpers
+package org.fossify.camera.helpers
import android.content.Context
import android.os.Environment
import androidx.camera.core.CameraSelector
-import com.simplemobiletools.camera.models.CaptureMode
-import com.simplemobiletools.camera.models.TimerMode
-import com.simplemobiletools.commons.helpers.BaseConfig
+import org.fossify.camera.models.CaptureMode
+import org.fossify.camera.models.TimerMode
+import org.fossify.commons.helpers.BaseConfig
import java.io.File
class Config(context: Context) : BaseConfig(context) {
@@ -15,9 +15,13 @@ class Config(context: Context) : BaseConfig(context) {
var savePhotosFolder: String
get(): String {
- var path = prefs.getString(SAVE_PHOTOS, Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).toString())
+ var path = prefs.getString(
+ SAVE_PHOTOS,
+ Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).toString()
+ )
if (!File(path).exists() || !File(path).isDirectory) {
- path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).toString()
+ path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)
+ .toString()
savePhotosFolder = path
}
return path!!
@@ -30,7 +34,8 @@ class Config(context: Context) : BaseConfig(context) {
var volumeButtonsAsShutter: Boolean
get() = prefs.getBoolean(VOLUME_BUTTONS_AS_SHUTTER, false)
- set(volumeButtonsAsShutter) = prefs.edit().putBoolean(VOLUME_BUTTONS_AS_SHUTTER, volumeButtonsAsShutter).apply()
+ set(volumeButtonsAsShutter) = prefs.edit()
+ .putBoolean(VOLUME_BUTTONS_AS_SHUTTER, volumeButtonsAsShutter).apply()
var flipPhotos: Boolean
get() = prefs.getBoolean(FLIP_PHOTOS, true)
@@ -50,38 +55,48 @@ class Config(context: Context) : BaseConfig(context) {
var backPhotoResIndex: Int
get() = prefs.getInt(BACK_PHOTO_RESOLUTION_INDEX, 0)
- set(backPhotoResIndex) = prefs.edit().putInt(BACK_PHOTO_RESOLUTION_INDEX, backPhotoResIndex).apply()
+ set(backPhotoResIndex) = prefs.edit().putInt(BACK_PHOTO_RESOLUTION_INDEX, backPhotoResIndex)
+ .apply()
var backVideoResIndex: Int
get() = prefs.getInt(BACK_VIDEO_RESOLUTION_INDEX, 0)
- set(backVideoResIndex) = prefs.edit().putInt(BACK_VIDEO_RESOLUTION_INDEX, backVideoResIndex).apply()
+ set(backVideoResIndex) = prefs.edit().putInt(BACK_VIDEO_RESOLUTION_INDEX, backVideoResIndex)
+ .apply()
var frontPhotoResIndex: Int
get() = prefs.getInt(FRONT_PHOTO_RESOLUTION_INDEX, 0)
- set(frontPhotoResIndex) = prefs.edit().putInt(FRONT_PHOTO_RESOLUTION_INDEX, frontPhotoResIndex).apply()
+ set(frontPhotoResIndex) = prefs.edit()
+ .putInt(FRONT_PHOTO_RESOLUTION_INDEX, frontPhotoResIndex).apply()
var frontVideoResIndex: Int
get() = prefs.getInt(FRONT_VIDEO_RESOLUTION_INDEX, 0)
- set(frontVideoResIndex) = prefs.edit().putInt(FRONT_VIDEO_RESOLUTION_INDEX, frontVideoResIndex).apply()
+ set(frontVideoResIndex) = prefs.edit()
+ .putInt(FRONT_VIDEO_RESOLUTION_INDEX, frontVideoResIndex).apply()
var savePhotoMetadata: Boolean
get() = prefs.getBoolean(SAVE_PHOTO_METADATA, true)
- set(savePhotoMetadata) = prefs.edit().putBoolean(SAVE_PHOTO_METADATA, savePhotoMetadata).apply()
+ set(savePhotoMetadata) = prefs.edit().putBoolean(SAVE_PHOTO_METADATA, savePhotoMetadata)
+ .apply()
var savePhotoVideoLocation: Boolean
get() = prefs.getBoolean(SAVE_PHOTO_VIDEO_LOCATION, false)
- set(savePhotoVideoLocation) = prefs.edit().putBoolean(SAVE_PHOTO_VIDEO_LOCATION, savePhotoVideoLocation).apply()
+ set(savePhotoVideoLocation) = prefs.edit()
+ .putBoolean(SAVE_PHOTO_VIDEO_LOCATION, savePhotoVideoLocation).apply()
var photoQuality: Int
get() = prefs.getInt(PHOTO_QUALITY, 80)
set(photoQuality) = prefs.edit().putInt(PHOTO_QUALITY, photoQuality).apply()
var captureMode: CaptureMode
- get() = CaptureMode.values()[prefs.getInt(CAPTURE_MODE, CaptureMode.MINIMIZE_LATENCY.ordinal)]
+ get() = CaptureMode.values()[prefs.getInt(
+ CAPTURE_MODE,
+ CaptureMode.MINIMIZE_LATENCY.ordinal
+ )]
set(captureMode) = prefs.edit().putInt(CAPTURE_MODE, captureMode.ordinal).apply()
var timerMode: TimerMode
- get() = TimerMode.values().getOrNull(prefs.getInt(TIMER_MODE, TimerMode.OFF.ordinal)) ?: TimerMode.OFF
+ get() = TimerMode.values().getOrNull(prefs.getInt(TIMER_MODE, TimerMode.OFF.ordinal))
+ ?: TimerMode.OFF
set(timerMode) = prefs.edit().putInt(TIMER_MODE, timerMode.ordinal).apply()
}
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/Constants.kt b/app/src/main/kotlin/org/fossify/camera/helpers/Constants.kt
similarity index 96%
rename from app/src/main/kotlin/com/simplemobiletools/camera/helpers/Constants.kt
rename to app/src/main/kotlin/org/fossify/camera/helpers/Constants.kt
index 0a245e1a..db9609a6 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/Constants.kt
+++ b/app/src/main/kotlin/org/fossify/camera/helpers/Constants.kt
@@ -1,4 +1,4 @@
-package com.simplemobiletools.camera.helpers
+package org.fossify.camera.helpers
const val ORIENT_PORTRAIT = 0
const val ORIENT_LANDSCAPE_LEFT = 1
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/GestureDetectorListener.java b/app/src/main/kotlin/org/fossify/camera/helpers/GestureDetectorListener.java
similarity index 89%
rename from app/src/main/kotlin/com/simplemobiletools/camera/helpers/GestureDetectorListener.java
rename to app/src/main/kotlin/org/fossify/camera/helpers/GestureDetectorListener.java
index 209a9a20..670aeac2 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/GestureDetectorListener.java
+++ b/app/src/main/kotlin/org/fossify/camera/helpers/GestureDetectorListener.java
@@ -1,4 +1,4 @@
-package com.simplemobiletools.camera.helpers;
+package org.fossify.camera.helpers;
import android.view.GestureDetector;
import android.view.MotionEvent;
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/ImageQualityManager.kt b/app/src/main/kotlin/org/fossify/camera/helpers/ImageQualityManager.kt
similarity index 72%
rename from app/src/main/kotlin/com/simplemobiletools/camera/helpers/ImageQualityManager.kt
rename to app/src/main/kotlin/org/fossify/camera/helpers/ImageQualityManager.kt
index accff2ca..f7d77348 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/ImageQualityManager.kt
+++ b/app/src/main/kotlin/org/fossify/camera/helpers/ImageQualityManager.kt
@@ -1,4 +1,4 @@
-package com.simplemobiletools.camera.helpers
+package org.fossify.camera.helpers
import android.content.Context
import android.graphics.ImageFormat
@@ -6,14 +6,15 @@ import android.hardware.camera2.CameraCharacteristics
import android.hardware.camera2.CameraManager
import androidx.appcompat.app.AppCompatActivity
import androidx.camera.core.CameraSelector
-import com.simplemobiletools.camera.extensions.config
-import com.simplemobiletools.camera.models.CameraSelectorImageQualities
-import com.simplemobiletools.camera.models.MySize
-import com.simplemobiletools.commons.extensions.showErrorToast
+import org.fossify.camera.extensions.config
+import org.fossify.camera.models.CameraSelectorImageQualities
+import org.fossify.camera.models.MySize
+import org.fossify.commons.extensions.showErrorToast
class ImageQualityManager(private val activity: AppCompatActivity) {
companion object {
- private val CAMERA_LENS = arrayOf(CameraCharacteristics.LENS_FACING_FRONT, CameraCharacteristics.LENS_FACING_BACK)
+ private val CAMERA_LENS =
+ arrayOf(CameraCharacteristics.LENS_FACING_FRONT, CameraCharacteristics.LENS_FACING_BACK)
}
private val cameraManager = activity.getSystemService(Context.CAMERA_SERVICE) as CameraManager
@@ -25,10 +26,14 @@ class ImageQualityManager(private val activity: AppCompatActivity) {
for (cameraId in cameraManager.cameraIdList) {
try {
val characteristics = cameraManager.getCameraCharacteristics(cameraId)
- val lensFacing = characteristics.get(CameraCharacteristics.LENS_FACING) ?: continue
+ val lensFacing =
+ characteristics.get(CameraCharacteristics.LENS_FACING) ?: continue
if (lensFacing in CAMERA_LENS) {
- val configMap = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP) ?: continue
- val imageSizes = configMap.getOutputSizes(ImageFormat.JPEG).map { MySize(it.width, it.height) }
+ val configMap =
+ characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP)
+ ?: continue
+ val imageSizes = configMap.getOutputSizes(ImageFormat.JPEG)
+ .map { MySize(it.width, it.height) }
val cameraSelector = lensFacing.toCameraSelector()
imageQualities.add(CameraSelectorImageQualities(cameraSelector, imageSizes))
}
@@ -50,7 +55,9 @@ class ImageQualityManager(private val activity: AppCompatActivity) {
fun getUserSelectedResolution(cameraSelector: CameraSelector): MySize {
val resolutions = getSupportedResolutions(cameraSelector)
val isFrontCamera = cameraSelector == CameraSelector.DEFAULT_FRONT_CAMERA
- var index = mediaSizeStore.getCurrentSizeIndex(isPhotoCapture = true, isFrontCamera = isFrontCamera)
+ var index = mediaSizeStore.getCurrentSizeIndex(
+ isPhotoCapture = true, isFrontCamera = isFrontCamera
+ )
index = index.coerceAtMost(resolutions.lastIndex).coerceAtLeast(0)
return resolutions[index]
}
@@ -61,7 +68,9 @@ class ImageQualityManager(private val activity: AppCompatActivity) {
.flatMap { it.qualities }
.sortedByDescending { it.pixels }
.distinctBy { it.getAspectRatio(activity) }
- .sortedByDescending { it.getAspectRatio(activity).split(":").firstOrNull()?.toIntOrNull() }
+ .sortedByDescending {
+ it.getAspectRatio(activity).split(":").firstOrNull()?.toIntOrNull()
+ }
.filter { it.isSupported(fullScreenSize.isSixteenToNine()) }
}
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/ImageSaver.kt b/app/src/main/kotlin/org/fossify/camera/helpers/ImageSaver.kt
similarity index 95%
rename from app/src/main/kotlin/com/simplemobiletools/camera/helpers/ImageSaver.kt
rename to app/src/main/kotlin/org/fossify/camera/helpers/ImageSaver.kt
index 10c8e42c..35d7f6a7 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/ImageSaver.kt
+++ b/app/src/main/kotlin/org/fossify/camera/helpers/ImageSaver.kt
@@ -1,4 +1,4 @@
-package com.simplemobiletools.camera.helpers
+package org.fossify.camera.helpers
import android.annotation.SuppressLint
import android.content.ContentResolver
@@ -11,13 +11,13 @@ import androidx.camera.core.ImageCaptureException
import androidx.camera.core.ImageProxy
import androidx.camera.core.internal.compat.workaround.ExifRotationAvailability
import androidx.exifinterface.media.ExifInterface
-import com.simplemobiletools.camera.helpers.ImageUtil.CodecFailedException
-import com.simplemobiletools.camera.helpers.ImageUtil.imageToJpegByteArray
-import com.simplemobiletools.camera.helpers.ImageUtil.jpegImageToJpegByteArray
-import com.simplemobiletools.camera.models.MediaOutput
-import com.simplemobiletools.commons.extensions.copyTo
-import com.simplemobiletools.commons.helpers.ensureBackgroundThread
-import com.simplemobiletools.commons.helpers.isQPlus
+import org.fossify.camera.helpers.ImageUtil.CodecFailedException
+import org.fossify.camera.helpers.ImageUtil.imageToJpegByteArray
+import org.fossify.camera.helpers.ImageUtil.jpegImageToJpegByteArray
+import org.fossify.camera.models.MediaOutput
+import org.fossify.commons.extensions.copyTo
+import org.fossify.commons.helpers.ensureBackgroundThread
+import org.fossify.commons.helpers.isQPlus
import java.io.*
import java.util.*
@@ -141,10 +141,12 @@ class ImageSaver private constructor(
saveError = SaveError.ENCODE_FAILED
errorMessage = "Failed to encode Image"
}
+
CodecFailedException.FailureType.DECODE_FAILED -> {
saveError = SaveError.CROP_FAILED
errorMessage = "Failed to crop Image"
}
+
CodecFailedException.FailureType.UNKNOWN -> {
saveError = SaveError.UNKNOWN
errorMessage = "Failed to transcode Image"
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/ImageUtil.kt b/app/src/main/kotlin/org/fossify/camera/helpers/ImageUtil.kt
similarity index 95%
rename from app/src/main/kotlin/com/simplemobiletools/camera/helpers/ImageUtil.kt
rename to app/src/main/kotlin/org/fossify/camera/helpers/ImageUtil.kt
index e67efd30..5aaba1c6 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/ImageUtil.kt
+++ b/app/src/main/kotlin/org/fossify/camera/helpers/ImageUtil.kt
@@ -1,4 +1,4 @@
-package com.simplemobiletools.camera.helpers
+package org.fossify.camera.helpers
import android.graphics.*
import androidx.annotation.IntRange
@@ -25,9 +25,15 @@ object ImageUtil {
jpegImageToJpegByteArray(image, image.cropRect, jpegQuality)
}
}
+
ImageFormat.YUV_420_888 -> {
- yuvImageToJpegByteArray(image, if (shouldCropImage) image.cropRect else null, jpegQuality)
+ yuvImageToJpegByteArray(
+ image,
+ if (shouldCropImage) image.cropRect else null,
+ jpegQuality
+ )
}
+
else -> {
// Unrecognized image format
byteArrayOf()
@@ -223,7 +229,10 @@ object ImageUtil {
/**
* Exception for error during transcoding image.
*/
- class CodecFailedException internal constructor(message: String, val failureType: FailureType) : Exception(message) {
+ class CodecFailedException internal constructor(
+ message: String,
+ val failureType: FailureType
+ ) : Exception(message) {
enum class FailureType {
ENCODE_FAILED, DECODE_FAILED, UNKNOWN
}
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/MediaActionSound.kt b/app/src/main/kotlin/org/fossify/camera/helpers/MediaActionSound.kt
similarity index 86%
rename from app/src/main/kotlin/com/simplemobiletools/camera/helpers/MediaActionSound.kt
rename to app/src/main/kotlin/org/fossify/camera/helpers/MediaActionSound.kt
index 8c86e6ea..9cad9d8f 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/MediaActionSound.kt
+++ b/app/src/main/kotlin/org/fossify/camera/helpers/MediaActionSound.kt
@@ -1,4 +1,4 @@
-package com.simplemobiletools.camera.helpers
+package org.fossify.camera.helpers
import android.content.Context
import android.media.AudioAttributes
@@ -9,7 +9,7 @@ import android.os.Handler
import android.os.Looper
import android.util.Log
import androidx.annotation.RawRes
-import com.simplemobiletools.camera.R
+import org.fossify.camera.R
import java.io.File
/**
@@ -31,7 +31,14 @@ class MediaActionSound(private val context: Context) {
private const val STATE_LOADING = 1
private const val STATE_LOADING_PLAY_REQUESTED = 2
private const val STATE_LOADED = 3
- private val SOUNDS = arrayOf(SHUTTER_CLICK, FOCUS_COMPLETE, START_VIDEO_RECORDING, STOP_VIDEO_RECORDING, TIMER_COUNTDOWN, TIMER_COUNTDOWN_2_SECONDS)
+ private val SOUNDS = arrayOf(
+ SHUTTER_CLICK,
+ FOCUS_COMPLETE,
+ START_VIDEO_RECORDING,
+ STOP_VIDEO_RECORDING,
+ TIMER_COUNTDOWN,
+ TIMER_COUNTDOWN_2_SECONDS
+ )
}
sealed class MediaSound {
@@ -73,7 +80,10 @@ class MediaActionSound(private val context: Context) {
if (status != 0) {
sound.state = STATE_NOT_LOADED
sound.loadId = 0
- Log.e(TAG, "OnLoadCompleteListener() error: $status loading sound: ${sound.mediaSound}")
+ Log.e(
+ TAG,
+ "OnLoadCompleteListener() error: $status loading sound: ${sound.mediaSound}"
+ )
return@OnLoadCompleteListener
}
when (sound.state) {
@@ -83,7 +93,10 @@ class MediaActionSound(private val context: Context) {
sound.state = STATE_LOADED
}
- else -> Log.e(TAG, "OnLoadCompleteListener() called in wrong state: ${sound.state} for sound: ${sound.mediaSound}")
+ else -> Log.e(
+ TAG,
+ "OnLoadCompleteListener() called in wrong state: ${sound.state} for sound: ${sound.mediaSound}"
+ )
}
}
@@ -129,7 +142,7 @@ class MediaActionSound(private val context: Context) {
}
fun load(mediaSound: MediaSound) {
- val sound = sounds.firstOrNull() { it.mediaSound == mediaSound } ?: return
+ val sound = sounds.firstOrNull { it.mediaSound == mediaSound } ?: return
synchronized(sound) {
when (sound.state) {
STATE_NOT_LOADED -> {
@@ -170,7 +183,10 @@ class MediaActionSound(private val context: Context) {
playWithSoundPool(sound)
}
- else -> Log.e(TAG, "play() called in wrong state: ${sound.state} for sound: $mediaSound")
+ else -> Log.e(
+ TAG,
+ "play() called in wrong state: ${sound.state} for sound: $mediaSound"
+ )
}
}
}
@@ -187,7 +203,11 @@ class MediaActionSound(private val context: Context) {
private fun getSoundDuration(mediaSound: MediaSound): Long {
releaseMediaPlayer()
mediaPlayer = when (mediaSound) {
- is MediaSound.ManufacturerSound -> MediaPlayer.create(context, Uri.fromFile(File(mediaSound.path)))
+ is MediaSound.ManufacturerSound -> MediaPlayer.create(
+ context,
+ Uri.fromFile(File(mediaSound.path))
+ )
+
is MediaSound.RawResSound -> MediaPlayer.create(context, mediaSound.resId)
}
return mediaPlayer!!.duration.toLong()
@@ -201,7 +221,10 @@ class MediaActionSound(private val context: Context) {
soundPool!!.stop(sound.streamId)
}
- else -> Log.w(TAG, "stop() should be called after sound is loaded for sound: $mediaSound")
+ else -> Log.w(
+ TAG,
+ "stop() should be called after sound is loaded for sound: $mediaSound"
+ )
}
}
}
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/MediaOutputHelper.kt b/app/src/main/kotlin/org/fossify/camera/helpers/MediaOutputHelper.kt
similarity index 81%
rename from app/src/main/kotlin/com/simplemobiletools/camera/helpers/MediaOutputHelper.kt
rename to app/src/main/kotlin/org/fossify/camera/helpers/MediaOutputHelper.kt
index 047cfe9c..d16c2aec 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/MediaOutputHelper.kt
+++ b/app/src/main/kotlin/org/fossify/camera/helpers/MediaOutputHelper.kt
@@ -1,4 +1,4 @@
-package com.simplemobiletools.camera.helpers
+package org.fossify.camera.helpers
import android.content.ContentValues
import android.net.Uri
@@ -6,15 +6,30 @@ import android.os.Environment
import android.os.ParcelFileDescriptor
import android.provider.DocumentsContract
import android.provider.MediaStore
-import com.simplemobiletools.camera.extensions.config
-import com.simplemobiletools.camera.extensions.getOutputMediaFileName
-import com.simplemobiletools.camera.extensions.getOutputMediaFilePath
-import com.simplemobiletools.camera.extensions.getRandomMediaName
-import com.simplemobiletools.camera.models.MediaOutput
-import com.simplemobiletools.commons.activities.BaseSimpleActivity
-import com.simplemobiletools.commons.extensions.*
-import com.simplemobiletools.commons.helpers.isOreoPlus
-import com.simplemobiletools.commons.helpers.isQPlus
+import org.fossify.camera.extensions.config
+import org.fossify.camera.extensions.getOutputMediaFileName
+import org.fossify.camera.extensions.getOutputMediaFilePath
+import org.fossify.camera.extensions.getRandomMediaName
+import org.fossify.camera.models.MediaOutput
+import org.fossify.commons.activities.BaseSimpleActivity
+import org.fossify.commons.extensions.createDocumentUriFromRootTree
+import org.fossify.commons.extensions.createDocumentUriUsingFirstParentTreeUri
+import org.fossify.commons.extensions.getAndroidSAFUri
+import org.fossify.commons.extensions.getDocumentFile
+import org.fossify.commons.extensions.getDoesFilePathExist
+import org.fossify.commons.extensions.getFileOutputStreamSync
+import org.fossify.commons.extensions.getFilenameFromPath
+import org.fossify.commons.extensions.getMimeType
+import org.fossify.commons.extensions.getRealPathFromURI
+import org.fossify.commons.extensions.hasProperStoredAndroidTreeUri
+import org.fossify.commons.extensions.hasProperStoredFirstParentUri
+import org.fossify.commons.extensions.hasProperStoredTreeUri
+import org.fossify.commons.extensions.isAccessibleWithSAFSdk30
+import org.fossify.commons.extensions.isRestrictedSAFOnlyRoot
+import org.fossify.commons.extensions.needsStupidWritePermissions
+import org.fossify.commons.extensions.showErrorToast
+import org.fossify.commons.helpers.isOreoPlus
+import org.fossify.commons.helpers.isQPlus
import java.io.File
import java.io.OutputStream
@@ -114,7 +129,11 @@ class MediaOutputHelper(
if (isQPlus()) {
put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DCIM)
} else {
- put(MediaStore.MediaColumns.DATA, Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).toString())
+ put(
+ MediaStore.MediaColumns.DATA,
+ Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)
+ .toString()
+ )
}
}
}
@@ -154,7 +173,8 @@ class MediaOutputHelper(
DocumentsContract.Document.COLUMN_MIME_TYPE,
videoFileName
) ?: return null
- val fileDescriptor = contentResolver.openFileDescriptor(documentUri, MODE) ?: return null
+ val fileDescriptor =
+ contentResolver.openFileDescriptor(documentUri, MODE) ?: return null
mediaOutput = MediaOutput.FileDescriptorMediaOutput(fileDescriptor, documentUri)
}
return mediaOutput
@@ -216,13 +236,17 @@ class MediaOutputHelper(
if (activity.getDoesFilePathExist(path)) {
activity.createDocumentUriFromRootTree(path)
} else {
- documentFile.createFile(path.getMimeType(), path.getFilenameFromPath())?.uri
+ documentFile.createFile(
+ path.getMimeType(),
+ path.getFilenameFromPath()
+ )?.uri
}
} catch (e: Exception) {
null
}
}
}
+
activity.isAccessibleWithSAFSdk30(path) -> {
try {
activity.createDocumentUriUsingFirstParentTreeUri(path)
@@ -230,6 +254,7 @@ class MediaOutputHelper(
null
} ?: Uri.fromFile(targetFile)
}
+
else -> return Uri.fromFile(targetFile)
}
}
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/MediaSizeStore.kt b/app/src/main/kotlin/org/fossify/camera/helpers/MediaSizeStore.kt
similarity index 95%
rename from app/src/main/kotlin/com/simplemobiletools/camera/helpers/MediaSizeStore.kt
rename to app/src/main/kotlin/org/fossify/camera/helpers/MediaSizeStore.kt
index dd3f9762..da7dd273 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/MediaSizeStore.kt
+++ b/app/src/main/kotlin/org/fossify/camera/helpers/MediaSizeStore.kt
@@ -1,4 +1,4 @@
-package com.simplemobiletools.camera.helpers
+package org.fossify.camera.helpers
class MediaSizeStore(private val config: Config) {
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/MediaSoundHelper.kt b/app/src/main/kotlin/org/fossify/camera/helpers/MediaSoundHelper.kt
similarity index 96%
rename from app/src/main/kotlin/com/simplemobiletools/camera/helpers/MediaSoundHelper.kt
rename to app/src/main/kotlin/org/fossify/camera/helpers/MediaSoundHelper.kt
index c7ab0e8c..faaac613 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/MediaSoundHelper.kt
+++ b/app/src/main/kotlin/org/fossify/camera/helpers/MediaSoundHelper.kt
@@ -1,4 +1,4 @@
-package com.simplemobiletools.camera.helpers
+package org.fossify.camera.helpers
import android.content.Context
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/PhotoProcessor.kt b/app/src/main/kotlin/org/fossify/camera/helpers/PhotoProcessor.kt
similarity index 72%
rename from app/src/main/kotlin/com/simplemobiletools/camera/helpers/PhotoProcessor.kt
rename to app/src/main/kotlin/org/fossify/camera/helpers/PhotoProcessor.kt
index d3cf91ff..b8fcec9f 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/PhotoProcessor.kt
+++ b/app/src/main/kotlin/org/fossify/camera/helpers/PhotoProcessor.kt
@@ -1,4 +1,4 @@
-package com.simplemobiletools.camera.helpers
+package org.fossify.camera.helpers
import android.graphics.Bitmap
import android.graphics.BitmapFactory
@@ -7,18 +7,33 @@ import android.net.Uri
import android.os.AsyncTask
import android.os.Environment
import androidx.exifinterface.media.ExifInterface
-import com.simplemobiletools.camera.R
-import com.simplemobiletools.camera.activities.MainActivity
-import com.simplemobiletools.camera.extensions.config
-import com.simplemobiletools.camera.extensions.getOutputMediaFilePath
-import com.simplemobiletools.commons.extensions.*
+import org.fossify.camera.R
+import org.fossify.camera.activities.MainActivity
+import org.fossify.camera.extensions.config
+import org.fossify.camera.extensions.getOutputMediaFilePath
+import org.fossify.commons.extensions.copyTo
+import org.fossify.commons.extensions.degreesFromOrientation
+import org.fossify.commons.extensions.getDocumentFile
+import org.fossify.commons.extensions.getParentPath
+import org.fossify.commons.extensions.getSomeDocumentFile
+import org.fossify.commons.extensions.hasProperStoredTreeUri
+import org.fossify.commons.extensions.internalStoragePath
+import org.fossify.commons.extensions.isPathOnOTG
+import org.fossify.commons.extensions.needsStupidWritePermissions
+import org.fossify.commons.extensions.saveImageRotation
+import org.fossify.commons.extensions.showErrorToast
+import org.fossify.commons.extensions.toast
import java.io.File
import java.io.FileNotFoundException
import java.io.FileOutputStream
import java.io.OutputStream
class PhotoProcessor(
- val activity: MainActivity, val saveUri: Uri?, val deviceOrientation: Int, val previewRotation: Int, val isUsingFrontCamera: Boolean,
+ val activity: MainActivity,
+ val saveUri: Uri?,
+ val deviceOrientation: Int,
+ val previewRotation: Int,
+ val isUsingFrontCamera: Boolean,
val isThirdPartyIntent: Boolean
) :
AsyncTask() {
@@ -49,12 +64,15 @@ class PhotoProcessor(
if (activity.needsStupidWritePermissions(path)) {
if (!activity.hasProperStoredTreeUri(activity.isPathOnOTG(path))) {
activity.toast(R.string.save_error_internal_storage)
- activity.config.savePhotosFolder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).toString()
+ activity.config.savePhotosFolder =
+ Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)
+ .toString()
return ""
}
var document = activity.getDocumentFile(path.getParentPath())
- document = document?.createFile("", path.substring(path.lastIndexOf('/') + 1)) ?: activity.getDocumentFile(path)
+ document = document?.createFile("", path.substring(path.lastIndexOf('/') + 1))
+ ?: activity.getDocumentFile(path)
if (document == null) {
activity.toast(R.string.save_error_internal_storage)
return ""
@@ -75,7 +93,10 @@ class PhotoProcessor(
null
}
- val orient = exif?.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED)
+ val orient = exif?.getAttributeInt(
+ ExifInterface.TAG_ORIENTATION,
+ ExifInterface.ORIENTATION_UNDEFINED
+ )
?: ExifInterface.ORIENTATION_UNDEFINED
val imageRot = orient.degreesFromOrientation()
@@ -96,9 +117,17 @@ class PhotoProcessor(
matrix.preScale(if (isPortrait) -1f else 1f, if (isPortrait) 1f else -1f)
try {
- image = Bitmap.createBitmap(image, 0, 0, image.width, image.height, matrix, false)
+ image = Bitmap.createBitmap(
+ image,
+ 0,
+ 0,
+ image.width,
+ image.height,
+ matrix,
+ false
+ )
} catch (e: OutOfMemoryError) {
- activity.toast(com.simplemobiletools.commons.R.string.out_of_memory_error)
+ activity.toast(org.fossify.commons.R.string.out_of_memory_error)
}
}
}
@@ -121,7 +150,8 @@ class PhotoProcessor(
} else {
val documentFile = activity.getSomeDocumentFile(path)
if (documentFile != null) {
- val parcelFileDescriptor = activity.contentResolver.openFileDescriptor(documentFile.uri, "rw")
+ val parcelFileDescriptor =
+ activity.contentResolver.openFileDescriptor(documentFile.uri, "rw")
val fileDescriptor = parcelFileDescriptor!!.fileDescriptor
ExifInterface(fileDescriptor)
} else {
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/PinchToZoomOnScaleGestureListener.kt b/app/src/main/kotlin/org/fossify/camera/helpers/PinchToZoomOnScaleGestureListener.kt
similarity index 93%
rename from app/src/main/kotlin/com/simplemobiletools/camera/helpers/PinchToZoomOnScaleGestureListener.kt
rename to app/src/main/kotlin/org/fossify/camera/helpers/PinchToZoomOnScaleGestureListener.kt
index 3289e433..d003db31 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/PinchToZoomOnScaleGestureListener.kt
+++ b/app/src/main/kotlin/org/fossify/camera/helpers/PinchToZoomOnScaleGestureListener.kt
@@ -1,4 +1,4 @@
-package com.simplemobiletools.camera.helpers
+package org.fossify.camera.helpers
import android.view.ScaleGestureDetector
import androidx.camera.core.CameraControl
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/SimpleLocationManager.kt b/app/src/main/kotlin/org/fossify/camera/helpers/SimpleLocationManager.kt
similarity index 91%
rename from app/src/main/kotlin/com/simplemobiletools/camera/helpers/SimpleLocationManager.kt
rename to app/src/main/kotlin/org/fossify/camera/helpers/SimpleLocationManager.kt
index a39327f5..346ad5c6 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/SimpleLocationManager.kt
+++ b/app/src/main/kotlin/org/fossify/camera/helpers/SimpleLocationManager.kt
@@ -1,12 +1,12 @@
-package com.simplemobiletools.camera.helpers
+package org.fossify.camera.helpers
import android.Manifest
import android.location.Location
import android.location.LocationListener
import android.location.LocationManager
import androidx.annotation.RequiresPermission
-import com.simplemobiletools.camera.extensions.checkLocationPermission
-import com.simplemobiletools.commons.activities.BaseSimpleActivity
+import org.fossify.camera.extensions.checkLocationPermission
+import org.fossify.commons.activities.BaseSimpleActivity
class SimpleLocationManager(private val activity: BaseSimpleActivity) {
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/TabSelectedListener.kt b/app/src/main/kotlin/org/fossify/camera/helpers/TabSelectedListener.kt
similarity index 83%
rename from app/src/main/kotlin/com/simplemobiletools/camera/helpers/TabSelectedListener.kt
rename to app/src/main/kotlin/org/fossify/camera/helpers/TabSelectedListener.kt
index 64daa70c..a6c78dc8 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/TabSelectedListener.kt
+++ b/app/src/main/kotlin/org/fossify/camera/helpers/TabSelectedListener.kt
@@ -1,4 +1,4 @@
-package com.simplemobiletools.camera.helpers
+package org.fossify.camera.helpers
import com.google.android.material.tabs.TabLayout
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/VideoQualityManager.kt b/app/src/main/kotlin/org/fossify/camera/helpers/VideoQualityManager.kt
similarity index 70%
rename from app/src/main/kotlin/com/simplemobiletools/camera/helpers/VideoQualityManager.kt
rename to app/src/main/kotlin/org/fossify/camera/helpers/VideoQualityManager.kt
index 7a864f97..7f89fafb 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/VideoQualityManager.kt
+++ b/app/src/main/kotlin/org/fossify/camera/helpers/VideoQualityManager.kt
@@ -1,22 +1,23 @@
-package com.simplemobiletools.camera.helpers
+package org.fossify.camera.helpers
import androidx.appcompat.app.AppCompatActivity
import androidx.camera.core.CameraSelector
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.camera.video.Quality
import androidx.camera.video.QualitySelector
-import com.simplemobiletools.camera.extensions.config
-import com.simplemobiletools.camera.extensions.toVideoQuality
-import com.simplemobiletools.camera.models.CameraSelectorVideoQualities
-import com.simplemobiletools.camera.models.VideoQuality
-import com.simplemobiletools.commons.extensions.showErrorToast
+import org.fossify.camera.extensions.config
+import org.fossify.camera.extensions.toVideoQuality
+import org.fossify.camera.models.CameraSelectorVideoQualities
+import org.fossify.camera.models.VideoQuality
+import org.fossify.commons.extensions.showErrorToast
class VideoQualityManager(
private val activity: AppCompatActivity,
) {
companion object {
private val QUALITIES = listOf(Quality.UHD, Quality.FHD, Quality.HD, Quality.SD)
- private val CAMERA_SELECTORS = arrayOf(CameraSelector.DEFAULT_BACK_CAMERA, CameraSelector.DEFAULT_FRONT_CAMERA)
+ private val CAMERA_SELECTORS =
+ arrayOf(CameraSelector.DEFAULT_BACK_CAMERA, CameraSelector.DEFAULT_FRONT_CAMERA)
}
private val videoQualities = mutableListOf()
@@ -33,7 +34,12 @@ class VideoQualityManager(
.filter(QUALITIES::contains)
.also { allQualities ->
val qualities = allQualities.map { it.toVideoQuality() }
- videoQualities.add(CameraSelectorVideoQualities(camSelector, qualities))
+ videoQualities.add(
+ CameraSelectorVideoQualities(
+ camSelector,
+ qualities
+ )
+ )
}
}
} catch (e: Exception) {
@@ -45,7 +51,10 @@ class VideoQualityManager(
fun getUserSelectedQuality(cameraSelector: CameraSelector): VideoQuality {
val isFrontCamera = cameraSelector == CameraSelector.DEFAULT_FRONT_CAMERA
- val selectionIndex = mediaSizeStore.getCurrentSizeIndex(isPhotoCapture = false, isFrontCamera = isFrontCamera).coerceAtLeast(0)
+ val selectionIndex = mediaSizeStore.getCurrentSizeIndex(
+ isPhotoCapture = false,
+ isFrontCamera = isFrontCamera
+ ).coerceAtLeast(0)
return getSupportedQualities(cameraSelector).getOrElse(selectionIndex) { VideoQuality.HD }
}
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/ZoomCalculator.kt b/app/src/main/kotlin/org/fossify/camera/helpers/ZoomCalculator.kt
similarity index 86%
rename from app/src/main/kotlin/com/simplemobiletools/camera/helpers/ZoomCalculator.kt
rename to app/src/main/kotlin/org/fossify/camera/helpers/ZoomCalculator.kt
index 1e2aa294..41eb0343 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/ZoomCalculator.kt
+++ b/app/src/main/kotlin/org/fossify/camera/helpers/ZoomCalculator.kt
@@ -1,4 +1,4 @@
-package com.simplemobiletools.camera.helpers
+package org.fossify.camera.helpers
import androidx.camera.core.ZoomState
@@ -7,7 +7,8 @@ class ZoomCalculator {
fun calculateZoomRatio(zoomState: ZoomState, pinchToZoomScale: Float): Float {
val clampedRatio = zoomState.zoomRatio * speedUpZoomBy2X(pinchToZoomScale)
// Clamp the ratio with the zoom range.
- return clampedRatio.coerceAtLeast(zoomState.minZoomRatio).coerceAtMost(zoomState.maxZoomRatio)
+ return clampedRatio.coerceAtLeast(zoomState.minZoomRatio)
+ .coerceAtMost(zoomState.maxZoomRatio)
}
private fun speedUpZoomBy2X(scaleFactor: Float): Float {
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/implementations/CameraXInitializer.kt b/app/src/main/kotlin/org/fossify/camera/implementations/CameraXInitializer.kt
similarity index 74%
rename from app/src/main/kotlin/com/simplemobiletools/camera/implementations/CameraXInitializer.kt
rename to app/src/main/kotlin/org/fossify/camera/implementations/CameraXInitializer.kt
index 88b01e69..a15000a7 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/implementations/CameraXInitializer.kt
+++ b/app/src/main/kotlin/org/fossify/camera/implementations/CameraXInitializer.kt
@@ -1,11 +1,11 @@
-package com.simplemobiletools.camera.implementations
+package org.fossify.camera.implementations
import android.net.Uri
import androidx.camera.view.PreviewView
-import com.simplemobiletools.camera.helpers.CameraErrorHandler
-import com.simplemobiletools.camera.helpers.MediaOutputHelper
-import com.simplemobiletools.camera.helpers.MediaSoundHelper
-import com.simplemobiletools.commons.activities.BaseSimpleActivity
+import org.fossify.camera.helpers.CameraErrorHandler
+import org.fossify.camera.helpers.MediaOutputHelper
+import org.fossify.camera.helpers.MediaSoundHelper
+import org.fossify.commons.activities.BaseSimpleActivity
class CameraXInitializer(private val activity: BaseSimpleActivity) {
@@ -18,7 +18,8 @@ class CameraXInitializer(private val activity: BaseSimpleActivity) {
initInPhotoMode: Boolean,
): CameraXPreview {
val cameraErrorHandler = newCameraErrorHandler()
- val mediaOutputHelper = newMediaOutputHelper(cameraErrorHandler, outputUri, isThirdPartyIntent)
+ val mediaOutputHelper =
+ newMediaOutputHelper(cameraErrorHandler, outputUri, isThirdPartyIntent)
return CameraXPreview(
activity,
previewView,
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/implementations/CameraXPreview.kt b/app/src/main/kotlin/org/fossify/camera/implementations/CameraXPreview.kt
similarity index 81%
rename from app/src/main/kotlin/com/simplemobiletools/camera/implementations/CameraXPreview.kt
rename to app/src/main/kotlin/org/fossify/camera/implementations/CameraXPreview.kt
index b641097f..fbdd7c80 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/implementations/CameraXPreview.kt
+++ b/app/src/main/kotlin/org/fossify/camera/implementations/CameraXPreview.kt
@@ -1,4 +1,4 @@
-package com.simplemobiletools.camera.implementations
+package org.fossify.camera.implementations
import android.annotation.SuppressLint
import android.content.Context
@@ -8,13 +8,45 @@ import android.os.Handler
import android.os.Looper
import android.util.Rational
import android.util.Size
-import android.view.*
+import android.view.Display
+import android.view.GestureDetector
import android.view.GestureDetector.SimpleOnGestureListener
-import androidx.camera.core.*
-import androidx.camera.core.ImageCapture.*
+import android.view.MotionEvent
+import android.view.OrientationEventListener
+import android.view.ScaleGestureDetector
+import android.view.Surface
+import androidx.camera.core.Camera
+import androidx.camera.core.CameraSelector
+import androidx.camera.core.CameraState
+import androidx.camera.core.DisplayOrientedMeteringPointFactory
+import androidx.camera.core.FocusMeteringAction
+import androidx.camera.core.ImageCapture
+import androidx.camera.core.ImageCapture.Builder
+import androidx.camera.core.ImageCapture.CAPTURE_MODE_MAXIMIZE_QUALITY
+import androidx.camera.core.ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY
+import androidx.camera.core.ImageCapture.ERROR_CAPTURE_FAILED
+import androidx.camera.core.ImageCapture.FLASH_MODE_AUTO
+import androidx.camera.core.ImageCapture.FLASH_MODE_OFF
+import androidx.camera.core.ImageCapture.FLASH_MODE_ON
+import androidx.camera.core.ImageCapture.Metadata
+import androidx.camera.core.ImageCapture.OnImageCapturedCallback
+import androidx.camera.core.ImageCaptureException
+import androidx.camera.core.ImageProxy
+import androidx.camera.core.Preview
+import androidx.camera.core.UseCase
+import androidx.camera.core.UseCaseGroup
+import androidx.camera.core.ViewPort
import androidx.camera.lifecycle.ProcessCameraProvider
-import androidx.camera.video.*
+import androidx.camera.video.FallbackStrategy
+import androidx.camera.video.FileDescriptorOutputOptions
+import androidx.camera.video.FileOutputOptions
+import androidx.camera.video.MediaStoreOutputOptions
+import androidx.camera.video.Quality
+import androidx.camera.video.QualitySelector
+import androidx.camera.video.Recorder
+import androidx.camera.video.Recording
import androidx.camera.video.VideoCapture
+import androidx.camera.video.VideoRecordEvent
import androidx.camera.view.PreviewView
import androidx.camera.view.PreviewView.ScaleType
import androidx.core.content.ContextCompat
@@ -24,18 +56,36 @@ import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
import androidx.window.layout.WindowMetricsCalculator
import com.bumptech.glide.load.ImageHeaderParser.UNKNOWN_ORIENTATION
-import com.simplemobiletools.camera.R
-import com.simplemobiletools.camera.extensions.*
-import com.simplemobiletools.camera.helpers.*
-import com.simplemobiletools.camera.interfaces.MyPreview
-import com.simplemobiletools.camera.models.CaptureMode
-import com.simplemobiletools.camera.models.MediaOutput
-import com.simplemobiletools.camera.models.MySize
-import com.simplemobiletools.camera.models.ResolutionOption
-import com.simplemobiletools.commons.activities.BaseSimpleActivity
-import com.simplemobiletools.commons.extensions.toast
-import com.simplemobiletools.commons.helpers.PERMISSION_ACCESS_FINE_LOCATION
-import com.simplemobiletools.commons.helpers.ensureBackgroundThread
+import org.fossify.camera.R
+import org.fossify.camera.extensions.checkLocationPermission
+import org.fossify.camera.extensions.config
+import org.fossify.camera.extensions.toAppFlashMode
+import org.fossify.camera.extensions.toCameraSelector
+import org.fossify.camera.extensions.toCameraXFlashMode
+import org.fossify.camera.extensions.toCameraXQuality
+import org.fossify.camera.extensions.toLensFacing
+import org.fossify.camera.helpers.BitmapUtils
+import org.fossify.camera.helpers.CameraErrorHandler
+import org.fossify.camera.helpers.FLASH_ALWAYS_ON
+import org.fossify.camera.helpers.FLASH_ON
+import org.fossify.camera.helpers.ImageQualityManager
+import org.fossify.camera.helpers.ImageSaver
+import org.fossify.camera.helpers.ImageUtil
+import org.fossify.camera.helpers.MediaOutputHelper
+import org.fossify.camera.helpers.MediaSizeStore
+import org.fossify.camera.helpers.MediaSoundHelper
+import org.fossify.camera.helpers.PinchToZoomOnScaleGestureListener
+import org.fossify.camera.helpers.SimpleLocationManager
+import org.fossify.camera.helpers.VideoQualityManager
+import org.fossify.camera.interfaces.MyPreview
+import org.fossify.camera.models.CaptureMode
+import org.fossify.camera.models.MediaOutput
+import org.fossify.camera.models.MySize
+import org.fossify.camera.models.ResolutionOption
+import org.fossify.commons.activities.BaseSimpleActivity
+import org.fossify.commons.extensions.toast
+import org.fossify.commons.helpers.PERMISSION_ACCESS_FINE_LOCATION
+import org.fossify.commons.helpers.ensureBackgroundThread
class CameraXPreview(
private val activity: BaseSimpleActivity,
@@ -58,34 +108,36 @@ class CameraXPreview(
private val config = activity.config
private val contentResolver = activity.contentResolver
private val mainExecutor = ContextCompat.getMainExecutor(activity)
- private val displayManager = activity.getSystemService(Context.DISPLAY_SERVICE) as DisplayManager
+ private val displayManager =
+ activity.getSystemService(Context.DISPLAY_SERVICE) as DisplayManager
private val windowMetricsCalculator = WindowMetricsCalculator.getOrCreate()
private val videoQualityManager = VideoQualityManager(activity)
private val imageQualityManager = ImageQualityManager(activity)
private val mediaSizeStore = MediaSizeStore(config)
- private val orientationEventListener = object : OrientationEventListener(activity, SensorManager.SENSOR_DELAY_NORMAL) {
- @SuppressLint("RestrictedApi")
- override fun onOrientationChanged(orientation: Int) {
- if (orientation == UNKNOWN_ORIENTATION) {
- return
- }
+ private val orientationEventListener =
+ object : OrientationEventListener(activity, SensorManager.SENSOR_DELAY_NORMAL) {
+ @SuppressLint("RestrictedApi")
+ override fun onOrientationChanged(orientation: Int) {
+ if (orientation == UNKNOWN_ORIENTATION) {
+ return
+ }
- val rotation = when (orientation) {
- in 45 until 135 -> Surface.ROTATION_270
- in 135 until 225 -> Surface.ROTATION_180
- in 225 until 315 -> Surface.ROTATION_90
- else -> Surface.ROTATION_0
- }
+ val rotation = when (orientation) {
+ in 45 until 135 -> Surface.ROTATION_270
+ in 135 until 225 -> Surface.ROTATION_180
+ in 225 until 315 -> Surface.ROTATION_90
+ else -> Surface.ROTATION_0
+ }
- if (lastRotation != rotation) {
- preview?.targetRotation = rotation
- imageCapture?.targetRotation = rotation
- videoCapture?.targetRotation = rotation
- lastRotation = rotation
+ if (lastRotation != rotation) {
+ preview?.targetRotation = rotation
+ imageCapture?.targetRotation = rotation
+ videoCapture?.targetRotation = rotation
+ lastRotation = rotation
+ }
}
}
- }
private val cameraHandler = Handler(Looper.getMainLooper())
private val photoModeRunnable = Runnable {
if (imageCapture == null) {
@@ -143,14 +195,16 @@ class CameraXPreview(
bindCameraUseCases()
setupCameraObservers()
} catch (e: Exception) {
- val errorMessage = if (switching) R.string.camera_switch_error else R.string.camera_open_error
+ val errorMessage =
+ if (switching) R.string.camera_switch_error else R.string.camera_open_error
activity.toast(errorMessage)
}
}, mainExecutor)
}
private fun bindCameraUseCases() {
- val cameraProvider = cameraProvider ?: throw IllegalStateException("Camera initialization failed.")
+ val cameraProvider =
+ cameraProvider ?: throw IllegalStateException("Camera initialization failed.")
val resolution = if (isPhotoCapture) {
imageQualityManager.getUserSelectedResolution(cameraSelector).also {
@@ -281,6 +335,7 @@ class CameraXPreview(
listener.setHasFrontAndBackCamera(hasFrontCamera() && hasBackCamera())
listener.setCameraAvailable(true)
}
+
CameraState.Type.PENDING_OPEN,
CameraState.Type.CLOSING,
CameraState.Type.CLOSED -> {
@@ -309,7 +364,12 @@ class CameraXPreview(
@SuppressLint("ClickableViewAccessibility")
// source: https://stackoverflow.com/a/60095886/10552591
private fun setupZoomAndFocus() {
- val scaleGesture = camera?.let { ScaleGestureDetector(activity, PinchToZoomOnScaleGestureListener(it.cameraInfo, it.cameraControl)) }
+ val scaleGesture = camera?.let {
+ ScaleGestureDetector(
+ activity,
+ PinchToZoomOnScaleGestureListener(it.cameraInfo, it.cameraControl)
+ )
+ }
val gestureDetector = GestureDetector(activity, object : SimpleOnGestureListener() {
override fun onDown(event: MotionEvent): Boolean {
listener.onTouchPreview()
@@ -326,10 +386,11 @@ class CameraXPreview(
val yPos = event.y
val autoFocusPoint = factory.createPoint(xPos, yPos, AF_SIZE)
val autoExposurePoint = factory.createPoint(xPos, yPos, AE_SIZE)
- val focusMeteringAction = FocusMeteringAction.Builder(autoFocusPoint, FocusMeteringAction.FLAG_AF)
- .addPoint(autoExposurePoint, FocusMeteringAction.FLAG_AE)
- .disableAutoCancel()
- .build()
+ val focusMeteringAction =
+ FocusMeteringAction.Builder(autoFocusPoint, FocusMeteringAction.FLAG_AF)
+ .addPoint(autoExposurePoint, FocusMeteringAction.FLAG_AE)
+ .disableAutoCancel()
+ .build()
camera?.cameraControl?.startFocusAndMetering(focusMeteringAction)
listener.onFocusCamera(event.rawX, event.rawY)
true
@@ -399,9 +460,11 @@ class CameraXPreview(
}
val resolutions = if (isPhotoCapture) {
- imageQualityManager.getSupportedResolutions(cameraSelector).map { it.toResolutionOption() }
+ imageQualityManager.getSupportedResolutions(cameraSelector)
+ .map { it.toResolutionOption() }
} else {
- videoQualityManager.getSupportedQualities(cameraSelector).map { it.toResolutionOption() }
+ videoQualityManager.getSupportedQualities(cameraSelector)
+ .map { it.toResolutionOption() }
}
if (resolutions.size > 2) {
@@ -424,7 +487,8 @@ class CameraXPreview(
private fun toggleResolutions(resolutions: List) {
if (resolutions.size >= 2) {
- val currentIndex = mediaSizeStore.getCurrentSizeIndex(isPhotoCapture, isFrontCameraInUse())
+ val currentIndex =
+ mediaSizeStore.getCurrentSizeIndex(isPhotoCapture, isFrontCameraInUse())
val nextIndex = if (currentIndex >= resolutions.lastIndex) {
0
@@ -611,6 +675,7 @@ class CameraXPreview(
}
}.build().let { videoCapture!!.output.prepareRecording(activity, it) }
}
+
is MediaOutput.FileMediaOutput -> {
FileOutputOptions.Builder(mediaOutput.file).apply {
if (config.savePhotoVideoLocation) {
@@ -618,6 +683,7 @@ class CameraXPreview(
}
}.build().let { videoCapture!!.output.prepareRecording(activity, it) }
}
+
is MediaOutput.MediaStoreOutput -> {
MediaStoreOutputOptions.Builder(contentResolver, mediaOutput.contentUri).apply {
setContentValues(mediaOutput.contentValues)
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/implementations/CameraXPreviewListener.kt b/app/src/main/kotlin/org/fossify/camera/implementations/CameraXPreviewListener.kt
similarity index 91%
rename from app/src/main/kotlin/com/simplemobiletools/camera/implementations/CameraXPreviewListener.kt
rename to app/src/main/kotlin/org/fossify/camera/implementations/CameraXPreviewListener.kt
index a13f7387..e5c7c454 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/implementations/CameraXPreviewListener.kt
+++ b/app/src/main/kotlin/org/fossify/camera/implementations/CameraXPreviewListener.kt
@@ -1,8 +1,8 @@
-package com.simplemobiletools.camera.implementations
+package org.fossify.camera.implementations
import android.graphics.Bitmap
import android.net.Uri
-import com.simplemobiletools.camera.models.ResolutionOption
+import org.fossify.camera.models.ResolutionOption
interface CameraXPreviewListener {
fun onInitPhotoMode()
@@ -30,6 +30,7 @@ interface CameraXPreviewListener {
isFrontCamera: Boolean,
onSelect: (index: Int, changed: Boolean) -> Unit,
)
+
fun showFlashOptions(photoCapture: Boolean)
fun adjustPreviewView(requiresCentering: Boolean)
}
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/interfaces/MyPreview.kt b/app/src/main/kotlin/org/fossify/camera/interfaces/MyPreview.kt
similarity index 86%
rename from app/src/main/kotlin/com/simplemobiletools/camera/interfaces/MyPreview.kt
rename to app/src/main/kotlin/org/fossify/camera/interfaces/MyPreview.kt
index f3b770a8..990f38bc 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/interfaces/MyPreview.kt
+++ b/app/src/main/kotlin/org/fossify/camera/interfaces/MyPreview.kt
@@ -1,4 +1,4 @@
-package com.simplemobiletools.camera.interfaces
+package org.fossify.camera.interfaces
interface MyPreview {
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/models/CameraSelectorImageQualities.kt b/app/src/main/kotlin/org/fossify/camera/models/CameraSelectorImageQualities.kt
similarity index 78%
rename from app/src/main/kotlin/com/simplemobiletools/camera/models/CameraSelectorImageQualities.kt
rename to app/src/main/kotlin/org/fossify/camera/models/CameraSelectorImageQualities.kt
index b354f453..5b36e7c3 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/models/CameraSelectorImageQualities.kt
+++ b/app/src/main/kotlin/org/fossify/camera/models/CameraSelectorImageQualities.kt
@@ -1,4 +1,4 @@
-package com.simplemobiletools.camera.models
+package org.fossify.camera.models
import androidx.camera.core.CameraSelector
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/models/CameraSelectorVideoQualities.kt b/app/src/main/kotlin/org/fossify/camera/models/CameraSelectorVideoQualities.kt
similarity index 78%
rename from app/src/main/kotlin/com/simplemobiletools/camera/models/CameraSelectorVideoQualities.kt
rename to app/src/main/kotlin/org/fossify/camera/models/CameraSelectorVideoQualities.kt
index cca1c2ed..ea24d267 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/models/CameraSelectorVideoQualities.kt
+++ b/app/src/main/kotlin/org/fossify/camera/models/CameraSelectorVideoQualities.kt
@@ -1,4 +1,4 @@
-package com.simplemobiletools.camera.models
+package org.fossify.camera.models
import androidx.camera.core.CameraSelector
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/models/CaptureMode.kt b/app/src/main/kotlin/org/fossify/camera/models/CaptureMode.kt
similarity index 70%
rename from app/src/main/kotlin/com/simplemobiletools/camera/models/CaptureMode.kt
rename to app/src/main/kotlin/org/fossify/camera/models/CaptureMode.kt
index 0d6f9229..a0533410 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/models/CaptureMode.kt
+++ b/app/src/main/kotlin/org/fossify/camera/models/CaptureMode.kt
@@ -1,7 +1,7 @@
-package com.simplemobiletools.camera.models
+package org.fossify.camera.models
import androidx.annotation.StringRes
-import com.simplemobiletools.camera.R
+import org.fossify.camera.R
enum class CaptureMode(@StringRes val stringResId: Int) {
MINIMIZE_LATENCY(R.string.minimize_latency),
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/models/MediaOutput.kt b/app/src/main/kotlin/org/fossify/camera/models/MediaOutput.kt
similarity index 95%
rename from app/src/main/kotlin/com/simplemobiletools/camera/models/MediaOutput.kt
rename to app/src/main/kotlin/org/fossify/camera/models/MediaOutput.kt
index 58803472..5ff05f2d 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/models/MediaOutput.kt
+++ b/app/src/main/kotlin/org/fossify/camera/models/MediaOutput.kt
@@ -1,4 +1,4 @@
-package com.simplemobiletools.camera.models
+package org.fossify.camera.models
import android.content.ContentValues
import android.net.Uri
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/models/MySize.kt b/app/src/main/kotlin/org/fossify/camera/models/MySize.kt
similarity index 94%
rename from app/src/main/kotlin/com/simplemobiletools/camera/models/MySize.kt
rename to app/src/main/kotlin/org/fossify/camera/models/MySize.kt
index 2d14b1b5..fcd8efe4 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/models/MySize.kt
+++ b/app/src/main/kotlin/org/fossify/camera/models/MySize.kt
@@ -1,9 +1,9 @@
-package com.simplemobiletools.camera.models
+package org.fossify.camera.models
import android.content.Context
import androidx.annotation.DrawableRes
import androidx.annotation.IdRes
-import com.simplemobiletools.camera.R
+import org.fossify.camera.R
data class MySize(val width: Int, val height: Int, val isFullScreen: Boolean = false) {
companion object {
@@ -63,7 +63,7 @@ data class MySize(val width: Int, val height: Int, val isFullScreen: Boolean = f
isNineteenToEight() -> "19:8"
isSquare() -> "1:1"
isTwoToOne() -> "2:1"
- else -> context.resources.getString(com.simplemobiletools.commons.R.string.other)
+ else -> context.resources.getString(org.fossify.commons.R.string.other)
}
@DrawableRes
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/models/ResolutionOption.kt b/app/src/main/kotlin/org/fossify/camera/models/ResolutionOption.kt
similarity index 80%
rename from app/src/main/kotlin/com/simplemobiletools/camera/models/ResolutionOption.kt
rename to app/src/main/kotlin/org/fossify/camera/models/ResolutionOption.kt
index 39b9eac6..f2c668e4 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/models/ResolutionOption.kt
+++ b/app/src/main/kotlin/org/fossify/camera/models/ResolutionOption.kt
@@ -1,4 +1,4 @@
-package com.simplemobiletools.camera.models
+package org.fossify.camera.models
import androidx.annotation.DrawableRes
import androidx.annotation.IdRes
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/models/TimerMode.kt b/app/src/main/kotlin/org/fossify/camera/models/TimerMode.kt
similarity index 88%
rename from app/src/main/kotlin/com/simplemobiletools/camera/models/TimerMode.kt
rename to app/src/main/kotlin/org/fossify/camera/models/TimerMode.kt
index bdbbe5e0..8bd3cec6 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/models/TimerMode.kt
+++ b/app/src/main/kotlin/org/fossify/camera/models/TimerMode.kt
@@ -1,6 +1,6 @@
-package com.simplemobiletools.camera.models
+package org.fossify.camera.models
-import com.simplemobiletools.camera.R
+import org.fossify.camera.R
enum class TimerMode(val millisInFuture: Long) {
OFF(0),
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/models/VideoQuality.kt b/app/src/main/kotlin/org/fossify/camera/models/VideoQuality.kt
similarity index 87%
rename from app/src/main/kotlin/com/simplemobiletools/camera/models/VideoQuality.kt
rename to app/src/main/kotlin/org/fossify/camera/models/VideoQuality.kt
index c548d2ed..1497ed51 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/models/VideoQuality.kt
+++ b/app/src/main/kotlin/org/fossify/camera/models/VideoQuality.kt
@@ -1,9 +1,9 @@
-package com.simplemobiletools.camera.models
+package org.fossify.camera.models
import android.content.Context
import androidx.annotation.DrawableRes
import androidx.annotation.IdRes
-import com.simplemobiletools.camera.R
+import org.fossify.camera.R
enum class VideoQuality(val width: Int, val height: Int) {
UHD(3840, 2160),
@@ -13,7 +13,8 @@ enum class VideoQuality(val width: Int, val height: Int) {
val pixels: Int = width * height
- val megaPixels: String = String.format("%.1f", (width * height.toFloat()) / VideoQuality.ONE_MEGA_PIXEL)
+ val megaPixels: String =
+ String.format("%.1f", (width * height.toFloat()) / VideoQuality.ONE_MEGA_PIXEL)
val ratio = width / height.toFloat()
@@ -51,7 +52,7 @@ enum class VideoQuality(val width: Int, val height: Int) {
isNineteenToEight() -> "19:8"
isSquare() -> "1:1"
isTwoToOne() -> "2:1"
- else -> context.resources.getString(com.simplemobiletools.commons.R.string.other)
+ else -> context.resources.getString(org.fossify.commons.R.string.other)
}
@DrawableRes
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/receivers/HardwareShutterReceiver.kt b/app/src/main/kotlin/org/fossify/camera/receivers/HardwareShutterReceiver.kt
similarity index 81%
rename from app/src/main/kotlin/com/simplemobiletools/camera/receivers/HardwareShutterReceiver.kt
rename to app/src/main/kotlin/org/fossify/camera/receivers/HardwareShutterReceiver.kt
index 413900a9..4f3c3e65 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/receivers/HardwareShutterReceiver.kt
+++ b/app/src/main/kotlin/org/fossify/camera/receivers/HardwareShutterReceiver.kt
@@ -1,9 +1,9 @@
-package com.simplemobiletools.camera.receivers
+package org.fossify.camera.receivers
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
-import com.simplemobiletools.camera.activities.MainActivity
+import org.fossify.camera.activities.MainActivity
class HardwareShutterReceiver : BroadcastReceiver() {
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/views/FocusCircleView.kt b/app/src/main/kotlin/org/fossify/camera/views/FocusCircleView.kt
similarity index 89%
rename from app/src/main/kotlin/com/simplemobiletools/camera/views/FocusCircleView.kt
rename to app/src/main/kotlin/org/fossify/camera/views/FocusCircleView.kt
index 8a75b6d6..f3d94915 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/views/FocusCircleView.kt
+++ b/app/src/main/kotlin/org/fossify/camera/views/FocusCircleView.kt
@@ -1,12 +1,11 @@
-package com.simplemobiletools.camera.views
+package org.fossify.camera.views
import android.content.Context
import android.graphics.Canvas
import android.graphics.Paint
import android.os.Handler
import android.view.ViewGroup
-import com.simplemobiletools.camera.extensions.config
-import com.simplemobiletools.commons.extensions.getProperPrimaryColor
+import org.fossify.commons.extensions.getProperPrimaryColor
class FocusCircleView(context: Context) : ViewGroup(context) {
private val CIRCLE_RADIUS = 50f
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/views/ShadowDrawable.kt b/app/src/main/kotlin/org/fossify/camera/views/ShadowDrawable.kt
similarity index 81%
rename from app/src/main/kotlin/com/simplemobiletools/camera/views/ShadowDrawable.kt
rename to app/src/main/kotlin/org/fossify/camera/views/ShadowDrawable.kt
index eaaaa812..56eb8141 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/views/ShadowDrawable.kt
+++ b/app/src/main/kotlin/org/fossify/camera/views/ShadowDrawable.kt
@@ -1,17 +1,25 @@
-package com.simplemobiletools.camera.views
+package org.fossify.camera.views
import android.content.Context
import android.content.res.ColorStateList
-import android.graphics.*
+import android.graphics.Bitmap
+import android.graphics.BlurMaskFilter
+import android.graphics.Canvas
+import android.graphics.Color
+import android.graphics.ColorFilter
+import android.graphics.Paint
+import android.graphics.PorterDuff
+import android.graphics.Rect
import android.graphics.drawable.Drawable
import androidx.annotation.DrawableRes
import androidx.annotation.StyleRes
import androidx.core.content.ContextCompat
-import com.simplemobiletools.camera.R
+import org.fossify.camera.R
import kotlin.math.ceil
import kotlin.math.roundToInt
-class ShadowDrawable(context: Context, private val drawable: Drawable, @StyleRes styleResId: Int) : Drawable() {
+class ShadowDrawable(context: Context, private val drawable: Drawable, @StyleRes styleResId: Int) :
+ Drawable() {
companion object {
private const val SHARED_BITMAP_BUFFER_SIZE = 640
@@ -63,12 +71,23 @@ class ShadowDrawable(context: Context, private val drawable: Drawable, @StyleRes
}
}
if (styleResId != 0) {
- val obtainStyledAttributes = context.obtainStyledAttributes(styleResId, R.styleable.ShadowDrawable)
+ val obtainStyledAttributes =
+ context.obtainStyledAttributes(styleResId, R.styleable.ShadowDrawable)
shadowColor =
- obtainStyledAttributes.getColor(R.styleable.ShadowDrawable_android_shadowColor, ContextCompat.getColor(context, com.simplemobiletools.commons.R.color.md_grey_400_dark))
- shadowDx = obtainStyledAttributes.getFloat(R.styleable.ShadowDrawable_android_shadowDx, 0f).toInt()
- shadowDy = obtainStyledAttributes.getFloat(R.styleable.ShadowDrawable_android_shadowDy, 0f).toInt()
- val shadowRadius = obtainStyledAttributes.getFloat(R.styleable.ShadowDrawable_android_shadowRadius, 0.0f).coerceAtLeast(0.0f)
+ obtainStyledAttributes.getColor(
+ R.styleable.ShadowDrawable_android_shadowColor,
+ ContextCompat.getColor(context, org.fossify.commons.R.color.md_grey_400_dark)
+ )
+ shadowDx =
+ obtainStyledAttributes.getFloat(R.styleable.ShadowDrawable_android_shadowDx, 0f)
+ .toInt()
+ shadowDy =
+ obtainStyledAttributes.getFloat(R.styleable.ShadowDrawable_android_shadowDy, 0f)
+ .toInt()
+ val shadowRadius = obtainStyledAttributes.getFloat(
+ R.styleable.ShadowDrawable_android_shadowRadius,
+ 0.0f
+ ).coerceAtLeast(0.0f)
shadowRadiusCeiling = ceil(shadowRadius).toInt()
val alpha = Color.alpha(shadowColor)
if (shadowRadius > 0.0f && alpha > 0) {
@@ -103,9 +122,13 @@ class ShadowDrawable(context: Context, private val drawable: Drawable, @StyleRes
if (sharedBitmap != null) {
sharedBitmap.eraseColor(0)
} else {
- sharedBitmap = Bitmap.createBitmap(SHARED_BITMAP_BUFFER_SIZE, SHARED_BITMAP_BUFFER_SIZE, Bitmap.Config.ARGB_8888)
+ sharedBitmap = Bitmap.createBitmap(
+ SHARED_BITMAP_BUFFER_SIZE,
+ SHARED_BITMAP_BUFFER_SIZE,
+ Bitmap.Config.ARGB_8888
+ )
sharedDrawableBitmapBuffer.set(sharedBitmap)
- sharedDrawableCanvasBuffer.set(Canvas(sharedBitmap!!))
+ sharedDrawableCanvasBuffer.set(Canvas(sharedBitmap))
}
createBitmap = sharedBitmap
canvas2 = sharedDrawableCanvasBuffer.get()!!
@@ -150,10 +173,13 @@ class ShadowDrawable(context: Context, private val drawable: Drawable, @StyleRes
outputBufferCanvas!!.drawBitmap(createBitmap, srcRect, destRect, bitmapPaint)
srcRect[0, 0, unionBounds.width()] = unionBounds.height()
destRect.set(unionBounds)
- canvas.drawBitmap(outputBuffer!!, srcRect, destRect, bitmapPaint)
+ canvas.drawBitmap(outputBuffer, srcRect, destRect, bitmapPaint)
}
- @Deprecated("Deprecated in Java", ReplaceWith("PixelFormat.TRANSLUCENT", "android.graphics.PixelFormat"))
+ @Deprecated(
+ "Deprecated in Java",
+ ReplaceWith("PixelFormat.TRANSLUCENT", "android.graphics.PixelFormat")
+ )
override fun getOpacity(): Int {
return drawable.opacity
}
diff --git a/app/src/main/res/drawable-v26/ic_launcher_foreground.xml b/app/src/main/res/drawable-v26/ic_launcher_foreground.xml
deleted file mode 100644
index 2fa81ce3..00000000
--- a/app/src/main/res/drawable-v26/ic_launcher_foreground.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml
new file mode 100644
index 00000000..82a87d26
--- /dev/null
+++ b/app/src/main/res/drawable/ic_launcher_foreground.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_launcher_monochrome.xml b/app/src/main/res/drawable/ic_launcher_monochrome.xml
index 4b16f51e..82a87d26 100644
--- a/app/src/main/res/drawable/ic_launcher_monochrome.xml
+++ b/app/src/main/res/drawable/ic_launcher_monochrome.xml
@@ -1,3 +1,9 @@
-
-
+
+
diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml
index 25aa66bd..a3c9e037 100644
--- a/app/src/main/res/layout/activity_settings.xml
+++ b/app/src/main/res/layout/activity_settings.xml
@@ -42,7 +42,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_amber.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_amber.xml
index b9bf82a7..7b4ef572 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_amber.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_amber.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_blue.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_blue.xml
index fe4c0f72..c8173849 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_blue.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_blue.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_blue_grey.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_blue_grey.xml
index 794a0ba8..e5ae9a17 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_blue_grey.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_blue_grey.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_brown.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_brown.xml
index 213d4eca..6c1d2603 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_brown.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_brown.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_cyan.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_cyan.xml
index 9958c2c4..cc384dc6 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_cyan.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_cyan.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_deep_orange.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_deep_orange.xml
index 8390cf09..5250a44f 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_deep_orange.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_deep_orange.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_deep_purple.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_deep_purple.xml
index 80e20d58..81ba15b5 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_deep_purple.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_deep_purple.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_green.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_green.xml
index b73af9bd..064533a6 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_green.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_green.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_grey_black.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_grey_black.xml
index 968374cf..c0477c1e 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_grey_black.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_grey_black.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_indigo.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_indigo.xml
index 791c1a46..20f9f44a 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_indigo.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_indigo.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_light_blue.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_light_blue.xml
index c559382f..dd752f85 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_light_blue.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_light_blue.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_light_green.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_light_green.xml
index cb8e9f0f..eee16d21 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_light_green.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_light_green.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_lime.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_lime.xml
index 77975833..cfe22da4 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_lime.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_lime.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_pink.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_pink.xml
index a6163778..00a28a52 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_pink.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_pink.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_purple.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_purple.xml
index c0ce2da8..8c55541a 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_purple.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_purple.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_red.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_red.xml
index 64e53a68..f500e3c1 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_red.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_red.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_teal.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_teal.xml
index 17b0961f..64fd7f8b 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_teal.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_teal.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_yellow.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_yellow.xml
index 044ebd10..74726f57 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_yellow.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_yellow.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index 63732e1c..00000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_amber.png b/app/src/main/res/mipmap-hdpi/ic_launcher_amber.png
deleted file mode 100644
index 42e50cf6..00000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_amber.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_blue.png b/app/src/main/res/mipmap-hdpi/ic_launcher_blue.png
deleted file mode 100644
index ac6abf35..00000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_blue.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_blue_grey.png b/app/src/main/res/mipmap-hdpi/ic_launcher_blue_grey.png
deleted file mode 100644
index 2d20b405..00000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_blue_grey.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_brown.png b/app/src/main/res/mipmap-hdpi/ic_launcher_brown.png
deleted file mode 100644
index a9addc9b..00000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_brown.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_cyan.png b/app/src/main/res/mipmap-hdpi/ic_launcher_cyan.png
deleted file mode 100644
index ded2df1d..00000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_cyan.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_deep_orange.png b/app/src/main/res/mipmap-hdpi/ic_launcher_deep_orange.png
deleted file mode 100644
index 503ea184..00000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_deep_orange.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_deep_purple.png b/app/src/main/res/mipmap-hdpi/ic_launcher_deep_purple.png
deleted file mode 100644
index faa72271..00000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_deep_purple.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
deleted file mode 100644
index cc546c32..00000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_green.png b/app/src/main/res/mipmap-hdpi/ic_launcher_green.png
deleted file mode 100644
index 0ec20a55..00000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_green.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_grey_black.png b/app/src/main/res/mipmap-hdpi/ic_launcher_grey_black.png
deleted file mode 100644
index 61d62bc5..00000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_grey_black.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_indigo.png b/app/src/main/res/mipmap-hdpi/ic_launcher_indigo.png
deleted file mode 100644
index 21ed5c91..00000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_indigo.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_light_blue.png b/app/src/main/res/mipmap-hdpi/ic_launcher_light_blue.png
deleted file mode 100644
index 07c253cf..00000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_light_blue.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_light_green.png b/app/src/main/res/mipmap-hdpi/ic_launcher_light_green.png
deleted file mode 100644
index d0252249..00000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_light_green.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_lime.png b/app/src/main/res/mipmap-hdpi/ic_launcher_lime.png
deleted file mode 100644
index a4eb5a82..00000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_lime.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_pink.png b/app/src/main/res/mipmap-hdpi/ic_launcher_pink.png
deleted file mode 100644
index 2bd7bed4..00000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_pink.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_purple.png b/app/src/main/res/mipmap-hdpi/ic_launcher_purple.png
deleted file mode 100644
index c70cd1fa..00000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_purple.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_red.png b/app/src/main/res/mipmap-hdpi/ic_launcher_red.png
deleted file mode 100644
index 18bf5ec7..00000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_red.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_teal.png b/app/src/main/res/mipmap-hdpi/ic_launcher_teal.png
deleted file mode 100644
index 9b3e647c..00000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_teal.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_yellow.png b/app/src/main/res/mipmap-hdpi/ic_launcher_yellow.png
deleted file mode 100644
index 6c1e5a3b..00000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_yellow.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index d26657fc..00000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_amber.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_amber.png
deleted file mode 100644
index c56d1f25..00000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_amber.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_blue.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_blue.png
deleted file mode 100644
index 76d776d9..00000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_blue.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_blue_grey.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_blue_grey.png
deleted file mode 100644
index 67078fe8..00000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_blue_grey.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_brown.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_brown.png
deleted file mode 100644
index 39e16bd6..00000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_brown.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_cyan.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_cyan.png
deleted file mode 100644
index e42e73b0..00000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_cyan.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_deep_orange.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_deep_orange.png
deleted file mode 100644
index 97c29bcc..00000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_deep_orange.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_deep_purple.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_deep_purple.png
deleted file mode 100644
index 6fff618e..00000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_deep_purple.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
deleted file mode 100644
index be6004b0..00000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_green.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_green.png
deleted file mode 100644
index 28f9d4d7..00000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_green.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_grey_black.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_grey_black.png
deleted file mode 100644
index 7b97362e..00000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_grey_black.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_indigo.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_indigo.png
deleted file mode 100644
index 3dd23db4..00000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_indigo.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_light_blue.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_light_blue.png
deleted file mode 100644
index 5df9048b..00000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_light_blue.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_light_green.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_light_green.png
deleted file mode 100644
index 03ff77a9..00000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_light_green.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_lime.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_lime.png
deleted file mode 100644
index 261744b6..00000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_lime.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_pink.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_pink.png
deleted file mode 100644
index e4d91888..00000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_pink.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_purple.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_purple.png
deleted file mode 100644
index 8441caf1..00000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_purple.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_red.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_red.png
deleted file mode 100644
index 9985b2b5..00000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_red.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_teal.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_teal.png
deleted file mode 100644
index 7e0ca081..00000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_teal.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_yellow.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_yellow.png
deleted file mode 100644
index 3318608f..00000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_yellow.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 855d766a..00000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_amber.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_amber.png
deleted file mode 100644
index bcc07827..00000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_amber.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_blue.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_blue.png
deleted file mode 100644
index b0f5900d..00000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_blue.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_blue_grey.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_blue_grey.png
deleted file mode 100644
index 38bbf295..00000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_blue_grey.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_brown.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_brown.png
deleted file mode 100644
index c0ade623..00000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_brown.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_cyan.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_cyan.png
deleted file mode 100644
index 7cf930cf..00000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_cyan.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_deep_orange.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_deep_orange.png
deleted file mode 100644
index 13765eb0..00000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_deep_orange.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_deep_purple.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_deep_purple.png
deleted file mode 100644
index d7a07d09..00000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_deep_purple.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
deleted file mode 100644
index 50c62830..00000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_green.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_green.png
deleted file mode 100644
index fba17147..00000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_green.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_grey_black.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_grey_black.png
deleted file mode 100644
index f5ac90cb..00000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_grey_black.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_indigo.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_indigo.png
deleted file mode 100644
index 305c26f0..00000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_indigo.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_light_blue.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_light_blue.png
deleted file mode 100644
index b896e8ac..00000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_light_blue.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_light_green.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_light_green.png
deleted file mode 100644
index 5124f66a..00000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_light_green.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_lime.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_lime.png
deleted file mode 100644
index 7778983a..00000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_lime.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_pink.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_pink.png
deleted file mode 100644
index 9d5029bf..00000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_pink.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_purple.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_purple.png
deleted file mode 100644
index ac8702ae..00000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_purple.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_red.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_red.png
deleted file mode 100644
index 5e67224e..00000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_red.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_teal.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_teal.png
deleted file mode 100644
index 619854a3..00000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_teal.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_yellow.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_yellow.png
deleted file mode 100644
index a405b0a0..00000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_yellow.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index 5fe2ef75..00000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_amber.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_amber.png
deleted file mode 100644
index 680719a3..00000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_amber.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_blue.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_blue.png
deleted file mode 100644
index 6357caf2..00000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_blue.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_blue_grey.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_blue_grey.png
deleted file mode 100644
index 497f9497..00000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_blue_grey.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_brown.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_brown.png
deleted file mode 100644
index 374f3dea..00000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_brown.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_cyan.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_cyan.png
deleted file mode 100644
index a0307bb3..00000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_cyan.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_deep_orange.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_deep_orange.png
deleted file mode 100644
index b50b199d..00000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_deep_orange.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_deep_purple.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_deep_purple.png
deleted file mode 100644
index 624e02c2..00000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_deep_purple.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
deleted file mode 100644
index 129e4765..00000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_green.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_green.png
deleted file mode 100644
index f3fa7018..00000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_green.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_grey_black.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_grey_black.png
deleted file mode 100644
index 48e5ffd3..00000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_grey_black.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_indigo.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_indigo.png
deleted file mode 100644
index ce8b7d35..00000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_indigo.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_light_blue.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_light_blue.png
deleted file mode 100644
index 4b05d848..00000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_light_blue.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_light_green.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_light_green.png
deleted file mode 100644
index 14c925f1..00000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_light_green.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_lime.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_lime.png
deleted file mode 100644
index 24aef3ee..00000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_lime.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_pink.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_pink.png
deleted file mode 100644
index 738c25d5..00000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_pink.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_purple.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_purple.png
deleted file mode 100644
index d55b94e1..00000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_purple.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_red.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_red.png
deleted file mode 100644
index bc6359fe..00000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_red.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_teal.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_teal.png
deleted file mode 100644
index 2ca8b65d..00000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_teal.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_yellow.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_yellow.png
deleted file mode 100644
index 9f43c079..00000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_yellow.png and /dev/null differ
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index a2249eff..15287a96 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -1,6 +1,5 @@
- الكاميرا البسيطة
الكاميرا
وضع الالتقاط
زيادة الجودة
diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml
index b5e4cfda..e535fd38 100644
--- a/app/src/main/res/values-az/strings.xml
+++ b/app/src/main/res/values-az/strings.xml
@@ -1,6 +1,5 @@
- Sadə Kamera
Kamera
Kamera əlçatan deyil
Kameranı açarkən xəta baş verdi
diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml
index 763f8018..01bedb8e 100644
--- a/app/src/main/res/values-bg/strings.xml
+++ b/app/src/main/res/values-bg/strings.xml
@@ -1,6 +1,5 @@
- Обикновена Камера
Камера
Камерата не е налична
Възникна грешка при достъпа до камерата
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index 1cf7bd8d..3b66c6ad 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -1,6 +1,5 @@
- Jednoduchý fotoaparát
Fotoaparát
Režim snímání
Maximalizovat kvalitu
diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml
index 96fa53ee..04a239fe 100644
--- a/app/src/main/res/values-da/strings.xml
+++ b/app/src/main/res/values-da/strings.xml
@@ -34,7 +34,6 @@
Gem Exif-metadata i fotos
Fotokomprimeringskvalitet
Lukker
- Simpelt Kamera
Minimér ventetid
Maksimér kvalitet
Skift mellem foto- og videotilstand
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 8d5fceea..3e8bb5de 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -1,6 +1,5 @@
- Fossify Camera
Kamera
Aufnahmemodus
Qualität maximieren
diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml
index ddcf1795..ae2955e3 100644
--- a/app/src/main/res/values-el/strings.xml
+++ b/app/src/main/res/values-el/strings.xml
@@ -1,6 +1,5 @@
- Απλή Κάμερα
Κάμερα
Λειτουργία καταγραφής
Μέγιστη ποιότητα
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 5babb8ad..c2df5255 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -1,6 +1,5 @@
- Simple Camera
Cámara
Modo de captura
Maximiza la calidad
diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml
index f5952768..7eb7846a 100644
--- a/app/src/main/res/values-et/strings.xml
+++ b/app/src/main/res/values-et/strings.xml
@@ -1,6 +1,5 @@
- Lihtne kaamera
Kaamera
Pildistamisrežiim
Eelista parimat kvaliteeti
diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml
index eeede714..a6b3daec 100644
--- a/app/src/main/res/values-eu/strings.xml
+++ b/app/src/main/res/values-eu/strings.xml
@@ -1,4 +1,2 @@
-
- Kamera
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml
index e8b67e8b..a048c679 100644
--- a/app/src/main/res/values-fi/strings.xml
+++ b/app/src/main/res/values-fi/strings.xml
@@ -1,6 +1,5 @@
- Yksinkertainen kamera
Kamera
Kaappaustila
Paras mahdollinen laatu
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 7973182a..aa76c878 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -1,6 +1,5 @@
- Fossify Camera
Appareil photo
Mode capture
Maximiser la qualité
diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml
index 5c9a9f42..35bcb910 100644
--- a/app/src/main/res/values-gl/strings.xml
+++ b/app/src/main/res/values-gl/strings.xml
@@ -1,6 +1,5 @@
- Cámara sinxela
Cámara
Modo de captura
Maximizala calidade
diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml
index cebf6803..8dfe59b6 100644
--- a/app/src/main/res/values-hi/strings.xml
+++ b/app/src/main/res/values-hi/strings.xml
@@ -6,7 +6,6 @@
रिज़ॉल्यूशन बदलें
परेशान न करें मोड सक्षम है। कृपया अक्षम करें और पुनः प्रयास करें
अपर्याप्त स्टोरेज के कारण वीडियो रिकॉर्डिंग विफल रही
- Fossify Camera
कब्जा प्रकार
गुणवत्ता अधिकतम करें
कैमरे तक पहुंचने में त्रुटि उत्पन्न हुई
diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml
index 56a3bccd..0a148b44 100644
--- a/app/src/main/res/values-hr/strings.xml
+++ b/app/src/main/res/values-hr/strings.xml
@@ -1,6 +1,5 @@
- Jednostavna kamera
Kamera
Način snimanja
Maksimiraj kvalitetu
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index daa7044a..c87c17ce 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -1,6 +1,5 @@
- Egyszerű kamera
Kamera
Rögzítési mód
Minőség maximalizálása
diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml
index 30cb461f..dbbca78b 100644
--- a/app/src/main/res/values-in/strings.xml
+++ b/app/src/main/res/values-in/strings.xml
@@ -1,6 +1,5 @@
- Kamera Fossify
Kamera
Mode tangkapan
Tingkatkan kualitas
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 3d24e03e..af73190f 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -1,6 +1,5 @@
- Fotocamera Semplice
Fotocamera
Modalità di cattura
Massimizza la qualità
diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml
index 7467c168..4021c2e2 100644
--- a/app/src/main/res/values-iw/strings.xml
+++ b/app/src/main/res/values-iw/strings.xml
@@ -1,6 +1,5 @@
- מצלמה פשוטה
מצלמה
המצלמה לא זמינה
אירעה שגיאה בגישה למצלמה
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index a999206b..45fc903e 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -1,6 +1,5 @@
- シンプル カメラ
カメラ
撮影モード
品質の最大化
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index 16a9c540..518dcd6b 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -1,6 +1,5 @@
- 심플 카메라
카메라
카메라를 사용할 수 없습니다
카메라에 액세스하는 중에 오류가 발생했습니다
diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml
index af376c07..b7e4b6db 100644
--- a/app/src/main/res/values-lt/strings.xml
+++ b/app/src/main/res/values-lt/strings.xml
@@ -1,6 +1,5 @@
- Paprasta kamera
Kamera
Fotografavimo veiksena
Pagerinti kokybę
diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml
index 10004b90..a4ecc2d6 100644
--- a/app/src/main/res/values-ml/strings.xml
+++ b/app/src/main/res/values-ml/strings.xml
@@ -1,6 +1,5 @@
- സിമ്പിൾ ക്യാമറ
ക്യാമറ
ക്യാമറ ലഭ്യമല്ല
ക്യാമറ ആക്സസ് ചെയ്യുന്നതിൽ ഒരു പിശക് സംഭവിച്ചു
diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml
index a7f1f0cd..6b75ddf9 100644
--- a/app/src/main/res/values-nb-rNO/strings.xml
+++ b/app/src/main/res/values-nb-rNO/strings.xml
@@ -1,6 +1,5 @@
- Enkelt kamera
Kamera
Kamera utilgjengelig
Fikk ikke tilgang til kameraet
diff --git a/app/src/main/res/values-ne/strings.xml b/app/src/main/res/values-ne/strings.xml
index 8d6a53e4..f98145fd 100644
--- a/app/src/main/res/values-ne/strings.xml
+++ b/app/src/main/res/values-ne/strings.xml
@@ -1,6 +1,5 @@
- सिम्पल क्यामेरा
क्यामेरा
क्यामेरा उपलब्ध छैन
क्यामेरा पहुचहुनमा समस्या आयो
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 95638ffd..54ca0f4b 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -1,6 +1,5 @@
- Eenvoudige Camera
Opnamemodus
Kwaliteit maximaliseren
Vertraging minimaliseren
diff --git a/app/src/main/res/values-nn/strings.xml b/app/src/main/res/values-nn/strings.xml
index 8fe87a97..d6419c08 100644
--- a/app/src/main/res/values-nn/strings.xml
+++ b/app/src/main/res/values-nn/strings.xml
@@ -1,6 +1,5 @@
- Einfelt kamera
Kamera
Opptaksmodus
Best kvalitet
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 49c2fa65..d4c82ddc 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -1,6 +1,5 @@
- Prosty aparat
Aparat
Tryb przechwytywania
Maksymalizuj jakość
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index a9a862d4..67487a1d 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -1,6 +1,5 @@
- Câmera Simples
Câmera
Modo de captura
Maximizar a qualidade
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index 32a9ea0a..64437e13 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -45,5 +45,4 @@
Guardar localização dos vídeos e das fotos
Qualidade de compressão da foto
Obturador
- Câmara
\ No newline at end of file
diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml
index 94216808..ea4ab584 100644
--- a/app/src/main/res/values-ro/strings.xml
+++ b/app/src/main/res/values-ro/strings.xml
@@ -1,7 +1,6 @@
- Cameră simplă
- Camera
+ Cameră
Cameră indisponibilă
A apărut o eroare la accesarea camerei
S-a produs o eroare la crearea fișierului video
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index f755e205..8d03cfad 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -1,6 +1,5 @@
- Простая камера
Камера
Режим съёмки
Максимальное качество
diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml
index c2117b7a..8ec4d7a6 100644
--- a/app/src/main/res/values-sk/strings.xml
+++ b/app/src/main/res/values-sk/strings.xml
@@ -1,6 +1,5 @@
- Jednoduchý fotoaparát
Fotoaparát
Režim snímania
Maximálna kvalita
diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml
index b9bb831e..d24382b3 100644
--- a/app/src/main/res/values-sl/strings.xml
+++ b/app/src/main/res/values-sl/strings.xml
@@ -1,6 +1,5 @@
- Enostavna kamera
Kamera
Način slikanja
Povečanje kakovosti
diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml
index 89c4a0da..2f72dab7 100644
--- a/app/src/main/res/values-sr/strings.xml
+++ b/app/src/main/res/values-sr/strings.xml
@@ -1,6 +1,5 @@
- Једноставна камера
Камера
Режим снимања
Максимизирајте квалитет
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 8f524174..9221cf66 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -1,6 +1,5 @@
- Basit Kamera
Kamera
Çekim modu
Kaliteyi en üst düzeye çıkar
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index 94bcb472..63b964ac 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -1,6 +1,5 @@
- Проста Камера
Камера
Режим зйомки
Максимальна якість
diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml
index 70a4d674..b382b0b7 100644
--- a/app/src/main/res/values-vi/strings.xml
+++ b/app/src/main/res/values-vi/strings.xml
@@ -35,7 +35,6 @@
Hiển thị bản xem trước ảnh sau khi chụp
Độ phân giải camera sau
Âm thanh chụp
- Máy ảnh Fossify
Ảnh chụp
Lấy nét trước khi chụp
Tắt đèn flash khi khởi động
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index caea93e4..d1fbe2d7 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -1,6 +1,5 @@
- 简单相机
相机
拍照模式
最高画质
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index a09ed3bd..92640674 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -1,6 +1,5 @@
- Simple 相機
相機
拍攝模式
極致畫質
diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml
index aaab27c1..83d4780c 100644
--- a/app/src/main/res/values/donottranslate.xml
+++ b/app/src/main/res/values/donottranslate.xml
@@ -1,20 +1,5 @@
- com.simplemobiletools.camera
-
-
- Allow changing the photo compression quality
- Added optional exif metadata saving, enabled by default
- Added a toggle for flipping front camera photos horizontally
-
- Add an option to focus the photo before capture\n
- Add an option to use the volume buttons as shutter
-
- Added an automatic flash mode
-
- Added more color customization options\n
- Your settings have been cleared, please reset them\n
- Moved the resolution picker onto the main screen
-
-
+ org.fossify.camera
+ Fossify Camera
diff --git a/app/src/main/res/values/ic_launcher_background.xml b/app/src/main/res/values/ic_launcher_background.xml
new file mode 100644
index 00000000..07fea199
--- /dev/null
+++ b/app/src/main/res/values/ic_launcher_background.xml
@@ -0,0 +1,4 @@
+
+
+ #106D20
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index f4f4dc2a..d7735218 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,6 +1,5 @@
- Simple Camera
Camera
Capture mode
Maximize quality
diff --git a/fastlane/Appfile b/fastlane/Appfile
index 34821e38..2e636284 100644
--- a/fastlane/Appfile
+++ b/fastlane/Appfile
@@ -1,2 +1,2 @@
json_key_file("fastlane/fastlane.json") # Path to the json secret file - Follow https://docs.fastlane.tools/actions/supply/#setup to get one
-package_name("com.simplemobiletools.camera") # e.g. com.krausefx.app
+package_name("org.fossify.camera") # e.g. com.krausefx.app
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 2a01e632..0e5c0f0b 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -10,8 +10,8 @@ androidx-lifecycle = "2.6.1"
androidx-window = "1.2.0-beta01"
androidx-camera = "1.3.0-beta02"
androidx-ktx = "2.6.1"
-#Simple tools
-simple-commons = "73d78e5cd3"
+#Fossify
+commons = "6500fc4111"
#Gradle
gradlePlugins-agp = "8.6.1"
#build
@@ -21,9 +21,9 @@ app-build-minimumSDK = "29"
app-build-javaVersion = "VERSION_17"
app-build-kotlinJVMTarget = "17"
#versioning
-app-version-appId = "com.simplemobiletools.camera"
-app-version-versionCode = "89"
-app-version-versionName = "5.7.2"
+app-version-appId = "org.fossify.camera"
+app-version-versionCode = "1"
+app-version-versionName = "1.0.0"
[libraries]
#Android X
androidx-camera-core = { module = "androidx.camera:camera-core", version.ref = "androidx-camera" }
@@ -36,8 +36,8 @@ androidx-window = { module = "androidx.window:window", version.ref = "androidx-w
androidx-lifecycle-runtime-ktx = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "androidx-ktx" }
androidx-exifinterface = { module = "androidx.exifinterface:exifinterface", version.ref = "androidx-exif-interface" }
androidx-documentfile = { module = "androidx.documentfile:documentfile", version.ref = "androidx-document-file" }
-#Simple Mobile Tools
-simple-tools-commons = { module = "com.github.SimpleMobileTools:Simple-Commons", version.ref = "simple-commons" }
+#Fossify
+fossify-commons = { module = "org.fossify:commons", version.ref = "commons" }
[bundles]
androidx-camera = [
"androidx-camera-core",
diff --git a/graphics/foreground.svg b/graphics/foreground.svg
new file mode 100644
index 00000000..3cfa2ff3
--- /dev/null
+++ b/graphics/foreground.svg
@@ -0,0 +1,12 @@
+
+
+
diff --git a/graphics/icon.svg b/graphics/icon.svg
new file mode 100644
index 00000000..7f9a0c80
--- /dev/null
+++ b/graphics/icon.svg
@@ -0,0 +1,5 @@
+
\ No newline at end of file