Merge pull request #332 from KryptKode/feat/camera-x

CameraX - Fix some warnings
This commit is contained in:
Tibor Kaputa 2022-07-13 21:47:10 +02:00 committed by GitHub
commit b9c4d38465
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
54 changed files with 451 additions and 121 deletions

View File

@ -34,7 +34,7 @@ android {
buildTypes { buildTypes {
debug { debug {
applicationIdSuffix ".debugcamerax" applicationIdSuffix ".debug"
} }
release { release {
minifyEnabled true minifyEnabled true

View File

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<!--TODO Revert to Camera_debug --> <string name="app_launcher_name">Camera_debug</string>
<string name="app_launcher_name">CameraX_debug</string>
</resources> </resources>

View File

@ -7,8 +7,8 @@ import android.hardware.SensorManager
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.os.Handler import android.os.Handler
import android.os.Looper
import android.provider.MediaStore import android.provider.MediaStore
import android.util.Log
import android.view.* import android.view.*
import android.widget.RelativeLayout import android.widget.RelativeLayout
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
@ -31,9 +31,10 @@ import java.util.concurrent.TimeUnit
import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, CameraXPreviewListener { class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, CameraXPreviewListener {
private val TAG = "MainActivity" companion object {
private val FADE_DELAY = 5000L private const val FADE_DELAY = 5000L
private val CAPTURE_ANIMATION_DURATION = 100L private const val CAPTURE_ANIMATION_DURATION = 100L
}
lateinit var mTimerHandler: Handler lateinit var mTimerHandler: Handler
private lateinit var mOrientationEventListener: OrientationEventListener private lateinit var mOrientationEventListener: OrientationEventListener
@ -49,14 +50,8 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
private var mCurrVideoRecTimer = 0 private var mCurrVideoRecTimer = 0
var mLastHandledOrientation = 0 var mLastHandledOrientation = 0
@Suppress("DEPRECATION")
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
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
)
useDynamicTheme = false useDynamicTheme = false
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
appLaunched(BuildConfig.APPLICATION_ID) appLaunched(BuildConfig.APPLICATION_ID)
@ -67,6 +62,22 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
supportActionBar?.hide() supportActionBar?.hide()
checkWhatsNewDialog() checkWhatsNewDialog()
setupOrientationEventListener() setupOrientationEventListener()
if (isRPlus()) {
setShowWhenLocked(true)
setTurnScreenOn(true)
window.insetsController?.hide(WindowInsets.Type.statusBars())
} else if (isOreoMr1Plus()) {
setShowWhenLocked(true)
setTurnScreenOn(true)
window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
} 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
)
}
} }
override fun onResume() { override fun onResume() {
@ -109,15 +120,12 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
private fun initVariables() { private fun initVariables() {
mIsInPhotoMode = if (isVideoCaptureIntent()) { mIsInPhotoMode = if (isVideoCaptureIntent()) {
Log.w(TAG, "initializeCamera: video capture")
false false
} else if (isImageCaptureIntent()) { } else if (isImageCaptureIntent()) {
Log.w(TAG, "initializeCamera: image capture mode")
true true
} else { } else {
config.initPhotoMode config.initPhotoMode
} }
Log.w(TAG, "initInPhotoMode = $mIsInPhotoMode")
mIsCameraAvailable = false mIsCameraAvailable = false
mIsHardwareShutterHandled = false mIsHardwareShutterHandled = false
mCurrVideoRecTimer = 0 mCurrVideoRecTimer = 0
@ -189,7 +197,6 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
private fun checkImageCaptureIntent() { private fun checkImageCaptureIntent() {
if (isImageCaptureIntent()) { if (isImageCaptureIntent()) {
Log.i(TAG, "isImageCaptureIntent: ")
hideIntentButtons() hideIntentButtons()
val output = intent.extras?.get(MediaStore.EXTRA_OUTPUT) val output = intent.extras?.get(MediaStore.EXTRA_OUTPUT)
if (output != null && output is Uri) { if (output != null && output is Uri) {
@ -200,7 +207,6 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
private fun checkVideoCaptureIntent() { private fun checkVideoCaptureIntent() {
if (intent?.action == MediaStore.ACTION_VIDEO_CAPTURE) { if (intent?.action == MediaStore.ACTION_VIDEO_CAPTURE) {
Log.i(TAG, "checkVideoCaptureIntent: ")
mIsInPhotoMode = false mIsInPhotoMode = false
hideIntentButtons() hideIntentButtons()
shutter.setImageResource(R.drawable.ic_video_rec) shutter.setImageResource(R.drawable.ic_video_rec)
@ -238,8 +244,8 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
mFocusCircleView = FocusCircleView(applicationContext) mFocusCircleView = FocusCircleView(applicationContext)
view_holder.addView(mFocusCircleView) view_holder.addView(mFocusCircleView)
mTimerHandler = Handler() mTimerHandler = Handler(Looper.getMainLooper())
mFadeHandler = Handler() mFadeHandler = Handler(Looper.getMainLooper())
setupPreviewImage(true) setupPreviewImage(true)
val initialFlashlightState = FLASH_OFF val initialFlashlightState = FLASH_OFF
@ -389,7 +395,6 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
mPreviewUri = Uri.withAppendedPath(uri, lastMediaId.toString()) mPreviewUri = Uri.withAppendedPath(uri, lastMediaId.toString())
Log.e(TAG, "mPreviewUri= $mPreviewUri")
loadLastTakenMedia(mPreviewUri) loadLastTakenMedia(mPreviewUri)
} }
@ -439,8 +444,13 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
view.isClickable = value != .0f view.isClickable = value != .0f
} }
@Suppress("DEPRECATION")
private fun hideNavigationBarIcons() { private fun hideNavigationBarIcons() {
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LOW_PROFILE if (isRPlus()) {
window.insetsController?.hide(WindowInsets.Type.systemBars())
} else {
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LOW_PROFILE
}
} }
private fun showTimer() { private fun showTimer() {
@ -567,7 +577,6 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
flags = Intent.FLAG_GRANT_READ_URI_PERMISSION flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
setResult(Activity.RESULT_OK, this) setResult(Activity.RESULT_OK, this)
} }
Log.w(TAG, "onMediaCaptured: exiting uri=$uri")
finish() finish()
} else if (isVideoCaptureIntent()) { } else if (isVideoCaptureIntent()) {
Intent().apply { Intent().apply {
@ -575,7 +584,6 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
flags = Intent.FLAG_GRANT_READ_URI_PERMISSION flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
setResult(Activity.RESULT_OK, this) setResult(Activity.RESULT_OK, this)
} }
Log.w(TAG, "onMediaCaptured: video exiting uri=$uri")
finish() finish()
} }
} }
@ -586,7 +594,6 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
putExtra("data", bitmap) putExtra("data", bitmap)
setResult(Activity.RESULT_OK, this) setResult(Activity.RESULT_OK, this)
} }
Log.w(TAG, "onImageCaptured: exiting bitmap size=${bitmap.byteCount}")
finish() finish()
} }
} }
@ -645,7 +652,6 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
fun drawFocusCircle(x: Float, y: Float) = mFocusCircleView.drawFocusCircle(x, y) fun drawFocusCircle(x: Float, y: Float) = mFocusCircleView.drawFocusCircle(x, y)
override fun mediaSaved(path: String) { override fun mediaSaved(path: String) {
Log.e(TAG, "mediaSaved: $path")
rescanPaths(arrayListOf(path)) { rescanPaths(arrayListOf(path)) {
setupPreviewImage(true) setupPreviewImage(true)
Intent(BROADCAST_REFRESH_MEDIA).apply { Intent(BROADCAST_REFRESH_MEDIA).apply {

View File

@ -1,8 +1,10 @@
package com.simplemobiletools.camera.activities package com.simplemobiletools.camera.activities
import android.annotation.SuppressLint
import android.os.Bundle import android.os.Bundle
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import androidx.core.content.res.ResourcesCompat
import com.simplemobiletools.camera.BuildConfig import com.simplemobiletools.camera.BuildConfig
import com.simplemobiletools.camera.R import com.simplemobiletools.camera.R
import com.simplemobiletools.camera.extensions.config import com.simplemobiletools.camera.extensions.config
@ -14,6 +16,7 @@ import com.simplemobiletools.commons.helpers.NavigationIcon
import com.simplemobiletools.commons.models.FAQItem import com.simplemobiletools.commons.models.FAQItem
import com.simplemobiletools.commons.models.RadioItem import com.simplemobiletools.commons.models.RadioItem
import java.util.Locale import java.util.Locale
import kotlin.system.exitProcess
import kotlinx.android.synthetic.main.activity_settings.* import kotlinx.android.synthetic.main.activity_settings.*
class SettingsActivity : SimpleActivity() { class SettingsActivity : SimpleActivity() {
@ -77,7 +80,7 @@ class SettingsActivity : SimpleActivity() {
// make sure the corners at ripple fit the stroke rounded corners // make sure the corners at ripple fit the stroke rounded corners
if (settings_purchase_thank_you_holder.isGone()) { if (settings_purchase_thank_you_holder.isGone()) {
settings_use_english_holder.background = resources.getDrawable(R.drawable.ripple_top_corners, theme) settings_use_english_holder.background = ResourcesCompat.getDrawable(resources, R.drawable.ripple_top_corners, theme)
} }
settings_purchase_thank_you_holder.setOnClickListener { settings_purchase_thank_you_holder.setOnClickListener {
@ -97,13 +100,13 @@ class SettingsActivity : SimpleActivity() {
settings_use_english.isChecked = config.useEnglish settings_use_english.isChecked = config.useEnglish
if (settings_use_english_holder.isGone() && settings_purchase_thank_you_holder.isGone()) { if (settings_use_english_holder.isGone() && settings_purchase_thank_you_holder.isGone()) {
settings_keep_settings_visible_holder.background = resources.getDrawable(R.drawable.ripple_all_corners, theme) settings_keep_settings_visible_holder.background = ResourcesCompat.getDrawable(resources, R.drawable.ripple_all_corners, theme)
} }
settings_use_english_holder.setOnClickListener { settings_use_english_holder.setOnClickListener {
settings_use_english.toggle() settings_use_english.toggle()
config.useEnglish = settings_use_english.isChecked config.useEnglish = settings_use_english.isChecked
System.exit(0) exitProcess(0)
} }
} }
@ -172,8 +175,8 @@ class SettingsActivity : SimpleActivity() {
settings_save_photos_holder.setOnClickListener { settings_save_photos_holder.setOnClickListener {
FilePickerDialog(this, config.savePhotosFolder, false, showFAB = true) { FilePickerDialog(this, config.savePhotosFolder, false, showFAB = true) {
val path = it val path = it
handleSAFDialog(it) { handleSAFDialog(it) { success ->
if (it) { if (success) {
config.savePhotosFolder = path config.savePhotosFolder = path
settings_save_photos.text = getLastPart(config.savePhotosFolder) settings_save_photos.text = getLastPart(config.savePhotosFolder)
} }
@ -206,6 +209,7 @@ class SettingsActivity : SimpleActivity() {
} }
} }
@SuppressLint("SetTextI18n")
private fun updatePhotoQuality(quality: Int) { private fun updatePhotoQuality(quality: Int) {
settings_photo_quality.text = "$quality%" settings_photo_quality.text = "$quality%"
} }

View File

@ -1,7 +1,6 @@
package com.simplemobiletools.camera.dialogs package com.simplemobiletools.camera.dialogs
import android.app.Activity import android.app.Activity
import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
@ -28,7 +27,6 @@ class ChangeResolutionDialogX(
private var dialog: AlertDialog? = null private var dialog: AlertDialog? = null
private val config = activity.config private val config = activity.config
private val TAG = "ChangeResolutionDialogX"
init { init {
val view = LayoutInflater.from(activity).inflate(R.layout.dialog_change_resolution, null).apply { val view = LayoutInflater.from(activity).inflate(R.layout.dialog_change_resolution, null).apply {
setupPhotoResolutionPicker(this) setupPhotoResolutionPicker(this)
@ -57,7 +55,6 @@ class ChangeResolutionDialogX(
view.change_resolution_photo_holder.setOnClickListener { view.change_resolution_photo_holder.setOnClickListener {
RadioGroupDialog(activity, ArrayList(items), selectionIndex) { RadioGroupDialog(activity, ArrayList(items), selectionIndex) {
selectionIndex = it as Int selectionIndex = it as Int
Log.w(TAG, "setupPhotoResolutionPicker: selectionIndex=$it")
view.change_resolution_photo.text = items[selectionIndex].title view.change_resolution_photo.text = items[selectionIndex].title
if (isFrontCamera) { if (isFrontCamera) {
config.frontPhotoResIndex = it config.frontPhotoResIndex = it
@ -80,8 +77,6 @@ class ChangeResolutionDialogX(
var selectionIndex = if (isFrontCamera) config.frontVideoResIndex else config.backVideoResIndex var selectionIndex = if (isFrontCamera) config.frontVideoResIndex else config.backVideoResIndex
selectionIndex = selectionIndex.coerceAtLeast(0) selectionIndex = selectionIndex.coerceAtLeast(0)
Log.i(TAG, "videoResolutions=$videoResolutions")
Log.i(TAG, "setupVideoResolutionPicker: selectionIndex=$selectionIndex")
view.change_resolution_video_holder.setOnClickListener { view.change_resolution_video_holder.setOnClickListener {
RadioGroupDialog(activity, ArrayList(items), selectionIndex) { RadioGroupDialog(activity, ArrayList(items), selectionIndex) {
@ -91,7 +86,7 @@ class ChangeResolutionDialogX(
if (isFrontCamera) { if (isFrontCamera) {
config.frontVideoResIndex = selectionIndex config.frontVideoResIndex = selectionIndex
} else { } else {
config.backPhotoResIndex = selectionIndex config.backVideoResIndex = selectionIndex
} }
dialog?.dismiss() dialog?.dismiss()
callback.invoke() callback.invoke()
@ -99,6 +94,5 @@ class ChangeResolutionDialogX(
} }
val selectedItem = items.getOrNull(selectionIndex) val selectedItem = items.getOrNull(selectionIndex)
view.change_resolution_video.text = selectedItem?.title view.change_resolution_video.text = selectedItem?.title
Log.i(TAG, "setupVideoResolutionPicker: selectedItem=$selectedItem")
} }
} }

View File

@ -2,14 +2,12 @@ package com.simplemobiletools.camera.helpers
import android.graphics.Bitmap import android.graphics.Bitmap
import android.graphics.BitmapFactory import android.graphics.BitmapFactory
import android.util.Log
import kotlin.math.ceil import kotlin.math.ceil
import kotlin.math.floor import kotlin.math.floor
import kotlin.math.sqrt import kotlin.math.sqrt
//inspired by https://android.googlesource.com/platform/packages/apps/Camera2/+/refs/heads/master/src/com/android/camera/util/CameraUtil.java#244 //inspired by https://android.googlesource.com/platform/packages/apps/Camera2/+/refs/heads/master/src/com/android/camera/util/CameraUtil.java#244
object BitmapUtils { object BitmapUtils {
private const val TAG = "BitmapUtils"
private const val INLINE_BITMAP_MAX_PIXEL_NUM = 50 * 1024 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? {
@ -31,7 +29,6 @@ object BitmapUtils {
options options
) )
} catch (ex: OutOfMemoryError) { } catch (ex: OutOfMemoryError) {
Log.e(TAG, "Got oom exception ", ex)
null null
} }
} }

View File

@ -6,20 +6,19 @@ import android.hardware.camera2.CameraCharacteristics
import android.hardware.camera2.CameraManager import android.hardware.camera2.CameraManager
import android.hardware.camera2.params.StreamConfigurationMap import android.hardware.camera2.params.StreamConfigurationMap
import android.media.MediaRecorder import android.media.MediaRecorder
import android.util.Log
import android.util.Size import android.util.Size
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.camera.core.CameraSelector import androidx.camera.core.CameraSelector
import com.simplemobiletools.camera.extensions.config import com.simplemobiletools.camera.extensions.config
import com.simplemobiletools.camera.models.CameraSelectorImageQualities import com.simplemobiletools.camera.models.CameraSelectorImageQualities
import com.simplemobiletools.camera.models.MySize import com.simplemobiletools.camera.models.MySize
import com.simplemobiletools.commons.extensions.showErrorToast
class ImageQualityManager( class ImageQualityManager(
activity: AppCompatActivity, private val activity: AppCompatActivity,
) { ) {
companion object { companion object {
private const val TAG = "ImageQualityManager"
private const val MAX_VIDEO_WIDTH = 4096 private const val MAX_VIDEO_WIDTH = 4096
private const val MAX_VIDEO_HEIGHT = 2160 private const val MAX_VIDEO_HEIGHT = 2160
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)
@ -39,11 +38,10 @@ class ImageQualityManager(
val imageSizes = configMap.getOutputSizes(ImageFormat.JPEG).map { MySize(it.width, it.height) } val imageSizes = configMap.getOutputSizes(ImageFormat.JPEG).map { MySize(it.width, it.height) }
val cameraSelector = lens.toCameraSelector() val cameraSelector = lens.toCameraSelector()
imageQualities.add(CameraSelectorImageQualities(cameraSelector, imageSizes)) imageQualities.add(CameraSelectorImageQualities(cameraSelector, imageSizes))
Log.i(TAG, "initQualities: imageSizes=$imageSizes")
} }
} }
} catch (e: Exception) { } catch (e: Exception) {
Log.e(TAG, "Camera ID=$cameraId is not supported", e) activity.showErrorToast(e)
} }
} }
} }
@ -69,12 +67,7 @@ class ImageQualityManager(
.sortedByDescending { it.pixels } .sortedByDescending { it.pixels }
.distinctBy { it.pixels } .distinctBy { it.pixels }
.map { Size(it.width, it.height) } .map { Size(it.width, it.height) }
.also { .getOrNull(index)
Log.i(TAG, "Resolutions: $it, index=$index")
}
.getOrNull(index).also {
Log.i(TAG, "getUserSelectedResolution: $it, index=$index")
}
} }
fun getSupportedResolutions(cameraSelector: CameraSelector): List<MySize> { fun getSupportedResolutions(cameraSelector: CameraSelector): List<MySize> {

View File

@ -5,13 +5,14 @@ import android.net.Uri
import android.os.Environment import android.os.Environment
import android.os.ParcelFileDescriptor import android.os.ParcelFileDescriptor
import android.provider.MediaStore import android.provider.MediaStore
import android.util.Log
import com.simplemobiletools.camera.extensions.config import com.simplemobiletools.camera.extensions.config
import com.simplemobiletools.camera.extensions.getOutputMediaFile import com.simplemobiletools.camera.extensions.getOutputMediaFile
import com.simplemobiletools.camera.extensions.getRandomMediaName import com.simplemobiletools.camera.extensions.getRandomMediaName
import com.simplemobiletools.camera.models.MediaOutput import com.simplemobiletools.camera.models.MediaOutput
import com.simplemobiletools.commons.activities.BaseSimpleActivity import com.simplemobiletools.commons.activities.BaseSimpleActivity
import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.isOreoPlus
import com.simplemobiletools.commons.helpers.isQPlus
import java.io.File import java.io.File
import java.io.OutputStream import java.io.OutputStream
@ -23,8 +24,8 @@ class MediaOutputHelper(
) { ) {
companion object { companion object {
private const val TAG = "MediaOutputHelper"
private const val MODE = "rw" private const val MODE = "rw"
private const val EXTERNAL_VOLUME = "external"
private const val IMAGE_MIME_TYPE = "image/jpeg" private const val IMAGE_MIME_TYPE = "image/jpeg"
private const val VIDEO_MIME_TYPE = "video/mp4" private const val VIDEO_MIME_TYPE = "video/mp4"
} }
@ -53,44 +54,62 @@ class MediaOutputHelper(
fun getVideoMediaOutput(): MediaOutput { fun getVideoMediaOutput(): MediaOutput {
return if (is3rdPartyIntent) { return if (is3rdPartyIntent) {
if (outputUri != null) { if (outputUri != null) {
val fileDescriptor = openFileDescriptor(outputUri) if (isOreoPlus()) {
if (fileDescriptor != null) { val fileDescriptor = openFileDescriptor(outputUri)
MediaOutput.FileDescriptorMediaOutput(fileDescriptor, outputUri) if (fileDescriptor != null) {
MediaOutput.FileDescriptorMediaOutput(fileDescriptor, outputUri)
} else {
errorHandler.showSaveToInternalStorage()
getMediaStoreOutput(isPhoto = false)
}
} else { } else {
errorHandler.showSaveToInternalStorage() val path = activity.getRealPathFromURI(outputUri)
getMediaStoreOutput(isPhoto = false) if (path != null) {
MediaOutput.FileMediaOutput(File(path), outputUri)
} else {
errorHandler.showSaveToInternalStorage()
getMediaStoreOutput(isPhoto = false)
}
} }
} else { } else {
getMediaStoreOutput(isPhoto = false) getMediaStoreOutput(isPhoto = false)
} }
} else { } else {
getFileDescriptorMediaOutput() ?: getMediaStoreOutput(isPhoto = false) if (isOreoPlus()) {
getFileDescriptorMediaOutput() ?: getMediaStoreOutput(isPhoto = false)
} else {
getFileMediaOutput() ?: getMediaStoreOutput(isPhoto = false)
}
} }
} }
private fun getMediaStoreOutput(isPhoto: Boolean): MediaOutput.MediaStoreOutput { private fun getMediaStoreOutput(isPhoto: Boolean): MediaOutput.MediaStoreOutput {
val contentValues = getContentValues(isPhoto) val contentValues = getContentValues(isPhoto)
val contentUri = if (isPhoto) { val contentUri = if (isPhoto) {
MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY) MediaStore.Images.Media.getContentUri(EXTERNAL_VOLUME)
} else { } else {
MediaStore.Video.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY) MediaStore.Video.Media.getContentUri(EXTERNAL_VOLUME)
} }
return MediaOutput.MediaStoreOutput(contentValues, contentUri) return MediaOutput.MediaStoreOutput(contentValues, contentUri)
} }
@Suppress("DEPRECATION")
private fun getContentValues(isPhoto: Boolean): ContentValues { private fun getContentValues(isPhoto: Boolean): ContentValues {
val mimeType = if (isPhoto) IMAGE_MIME_TYPE else VIDEO_MIME_TYPE val mimeType = if (isPhoto) IMAGE_MIME_TYPE else VIDEO_MIME_TYPE
return ContentValues().apply { return ContentValues().apply {
put(MediaStore.MediaColumns.DISPLAY_NAME, getRandomMediaName(isPhoto)) put(MediaStore.MediaColumns.DISPLAY_NAME, getRandomMediaName(isPhoto))
put(MediaStore.MediaColumns.MIME_TYPE, mimeType) put(MediaStore.MediaColumns.MIME_TYPE, mimeType)
put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DCIM) if (isQPlus()) {
put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DCIM)
} else {
put(MediaStore.MediaColumns.DATA, Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).toString())
}
} }
} }
private fun getOutputStreamMediaOutput(): MediaOutput.OutputStreamMediaOutput? { private fun getOutputStreamMediaOutput(): MediaOutput.OutputStreamMediaOutput? {
var mediaOutput: MediaOutput.OutputStreamMediaOutput? = null var mediaOutput: MediaOutput.OutputStreamMediaOutput? = null
val canWrite = canWriteToFilePath(mediaStorageDir) val canWrite = canWriteToFilePath(mediaStorageDir)
Log.i(TAG, "getMediaOutput: canWrite=${canWrite}")
if (canWrite) { if (canWrite) {
val path = activity.getOutputMediaFile(true) val path = activity.getOutputMediaFile(true)
val uri = getUriForFilePath(path) val uri = getUriForFilePath(path)
@ -99,16 +118,14 @@ class MediaOutputHelper(
mediaOutput = MediaOutput.OutputStreamMediaOutput(outputStream, uri) mediaOutput = MediaOutput.OutputStreamMediaOutput(outputStream, uri)
} }
} }
Log.i(TAG, "OutputStreamMediaOutput: $mediaOutput")
return mediaOutput return mediaOutput
} }
private fun openOutputStream(uri: Uri): OutputStream? { private fun openOutputStream(uri: Uri): OutputStream? {
return try { return try {
Log.i(TAG, "uri: $uri")
contentResolver.openOutputStream(uri) contentResolver.openOutputStream(uri)
} catch (e: Exception) { } catch (e: Exception) {
e.printStackTrace() activity.showErrorToast(e)
null null
} }
} }
@ -116,7 +133,6 @@ class MediaOutputHelper(
private fun getFileDescriptorMediaOutput(): MediaOutput.FileDescriptorMediaOutput? { private fun getFileDescriptorMediaOutput(): MediaOutput.FileDescriptorMediaOutput? {
var mediaOutput: MediaOutput.FileDescriptorMediaOutput? = null var mediaOutput: MediaOutput.FileDescriptorMediaOutput? = null
val canWrite = canWriteToFilePath(mediaStorageDir) val canWrite = canWriteToFilePath(mediaStorageDir)
Log.i(TAG, "getMediaOutput: canWrite=${canWrite}")
if (canWrite) { if (canWrite) {
val path = activity.getOutputMediaFile(false) val path = activity.getOutputMediaFile(false)
val uri = getUriForFilePath(path) val uri = getUriForFilePath(path)
@ -127,16 +143,27 @@ class MediaOutputHelper(
} }
} }
} }
Log.i(TAG, "FileDescriptorMediaOutput: $mediaOutput") return mediaOutput
}
private fun getFileMediaOutput(): MediaOutput.FileMediaOutput? {
var mediaOutput: MediaOutput.FileMediaOutput? = null
val canWrite = canWriteToFilePath(mediaStorageDir)
if (canWrite) {
val path = activity.getOutputMediaFile(false)
val uri = getUriForFilePath(path)
if (uri != null) {
mediaOutput = MediaOutput.FileMediaOutput(File(path), uri)
}
}
return mediaOutput return mediaOutput
} }
private fun openFileDescriptor(uri: Uri): ParcelFileDescriptor? { private fun openFileDescriptor(uri: Uri): ParcelFileDescriptor? {
return try { return try {
Log.i(TAG, "uri: $uri")
contentResolver.openFileDescriptor(uri, MODE) contentResolver.openFileDescriptor(uri, MODE)
} catch (e: Exception) { } catch (e: Exception) {
e.printStackTrace() activity.showErrorToast(e)
null null
} }
} }
@ -178,7 +205,6 @@ class MediaOutputHelper(
documentFile.createFile(path.getMimeType(), path.getFilenameFromPath())?.uri documentFile.createFile(path.getMimeType(), path.getFilenameFromPath())?.uri
} }
} catch (e: Exception) { } catch (e: Exception) {
e.printStackTrace()
null null
} }
} }
@ -187,7 +213,6 @@ class MediaOutputHelper(
try { try {
activity.createDocumentUriUsingFirstParentTreeUri(path) activity.createDocumentUriUsingFirstParentTreeUri(path)
} catch (e: Exception) { } catch (e: Exception) {
e.printStackTrace()
null null
} ?: Uri.fromFile(targetFile) } ?: Uri.fromFile(targetFile)
} }

View File

@ -1,6 +1,5 @@
package com.simplemobiletools.camera.helpers package com.simplemobiletools.camera.helpers
import android.util.Log
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.camera.core.CameraSelector import androidx.camera.core.CameraSelector
import androidx.camera.lifecycle.ProcessCameraProvider import androidx.camera.lifecycle.ProcessCameraProvider
@ -11,13 +10,13 @@ import com.simplemobiletools.camera.extensions.toCameraXQuality
import com.simplemobiletools.camera.extensions.toVideoQuality import com.simplemobiletools.camera.extensions.toVideoQuality
import com.simplemobiletools.camera.models.CameraSelectorVideoQualities import com.simplemobiletools.camera.models.CameraSelectorVideoQualities
import com.simplemobiletools.camera.models.VideoQuality import com.simplemobiletools.camera.models.VideoQuality
import com.simplemobiletools.commons.extensions.showErrorToast
class VideoQualityManager( class VideoQualityManager(
private val activity: AppCompatActivity, private val activity: AppCompatActivity,
) { ) {
companion object { companion object {
private const val TAG = "VideoQualityHelper"
private val QUALITIES = listOf(Quality.UHD, Quality.FHD, Quality.HD, Quality.SD) 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)
} }
@ -37,12 +36,10 @@ class VideoQualityManager(
.also { allQualities -> .also { allQualities ->
val qualities = allQualities.map { it.toVideoQuality() } val qualities = allQualities.map { it.toVideoQuality() }
videoQualities.add(CameraSelectorVideoQualities(camSelector, qualities)) videoQualities.add(CameraSelectorVideoQualities(camSelector, qualities))
} }
Log.i(TAG, "bindCameraUseCases: videoQualities=$videoQualities")
} }
} catch (e: Exception) { } catch (e: Exception) {
Log.e(TAG, "Camera Face $camSelector is not supported", e) activity.showErrorToast(e)
} }
} }
} }
@ -51,7 +48,7 @@ class VideoQualityManager(
fun getUserSelectedQuality(cameraSelector: CameraSelector): Quality { fun getUserSelectedQuality(cameraSelector: CameraSelector): Quality {
var selectionIndex = if (cameraSelector == CameraSelector.DEFAULT_FRONT_CAMERA) config.frontVideoResIndex else config.backVideoResIndex var selectionIndex = if (cameraSelector == CameraSelector.DEFAULT_FRONT_CAMERA) config.frontVideoResIndex else config.backVideoResIndex
selectionIndex = selectionIndex.coerceAtLeast(0) selectionIndex = selectionIndex.coerceAtLeast(0)
return getSupportedQualities(cameraSelector)[selectionIndex].toCameraXQuality() return getSupportedQualities(cameraSelector).getOrElse(selectionIndex) { VideoQuality.HD }.toCameraXQuality()
} }
fun getSupportedQualities(cameraSelector: CameraSelector): List<VideoQuality> { fun getSupportedQualities(cameraSelector: CameraSelector): List<VideoQuality> {

View File

@ -4,7 +4,6 @@ import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.hardware.SensorManager import android.hardware.SensorManager
import android.hardware.display.DisplayManager import android.hardware.display.DisplayManager
import android.util.Log
import android.util.Size import android.util.Size
import android.view.* import android.view.*
import android.view.GestureDetector.SimpleOnGestureListener import android.view.GestureDetector.SimpleOnGestureListener
@ -43,7 +42,6 @@ class CameraXPreview(
) : MyPreview, DefaultLifecycleObserver { ) : MyPreview, DefaultLifecycleObserver {
companion object { companion object {
private const val TAG = "CameraXPreview"
private const val RATIO_4_3_VALUE = 4.0 / 3.0 private const val RATIO_4_3_VALUE = 4.0 / 3.0
private const val RATIO_16_9_VALUE = 16.0 / 9.0 private const val RATIO_16_9_VALUE = 16.0 / 9.0
@ -75,7 +73,6 @@ class CameraXPreview(
in 225 until 315 -> Surface.ROTATION_90 in 225 until 315 -> Surface.ROTATION_90
else -> Surface.ROTATION_0 else -> Surface.ROTATION_0
} }
Log.i(TAG, "onOrientationChanged: rotation=$rotation")
preview?.targetRotation = rotation preview?.targetRotation = rotation
imageCapture?.targetRotation = rotation imageCapture?.targetRotation = rotation
videoCapture?.targetRotation = rotation videoCapture?.targetRotation = rotation
@ -91,9 +88,7 @@ class CameraXPreview(
private var recordingState: VideoRecordEvent? = null private var recordingState: VideoRecordEvent? = null
private var cameraSelector = config.lastUsedCameraLens.toCameraSelector() private var cameraSelector = config.lastUsedCameraLens.toCameraSelector()
private var flashMode = FLASH_MODE_OFF private var flashMode = FLASH_MODE_OFF
private var isPhotoCapture = initInPhotoMode.also { private var isPhotoCapture = initInPhotoMode
Log.i(TAG, "initInPhotoMode= $it")
}
init { init {
bindToLifeCycle() bindToLifeCycle()
@ -108,7 +103,6 @@ class CameraXPreview(
} }
private fun startCamera(switching: Boolean = false) { private fun startCamera(switching: Boolean = false) {
Log.i(TAG, "startCamera: ")
imageQualityManager.initSupportedQualities() imageQualityManager.initSupportedQualities()
val cameraProviderFuture = ProcessCameraProvider.getInstance(activity) val cameraProviderFuture = ProcessCameraProvider.getInstance(activity)
@ -120,7 +114,6 @@ class CameraXPreview(
bindCameraUseCases() bindCameraUseCases()
setupCameraObservers() setupCameraObservers()
} catch (e: Exception) { } catch (e: Exception) {
Log.e(TAG, "startCamera: ", e)
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) activity.toast(errorMessage)
} }
@ -197,9 +190,6 @@ class CameraXPreview(
.apply { .apply {
imageQualityManager.getUserSelectedResolution(cameraSelector)?.let { resolution -> imageQualityManager.getUserSelectedResolution(cameraSelector)?.let { resolution ->
val rotatedResolution = getRotatedResolution(rotation, resolution) val rotatedResolution = getRotatedResolution(rotation, resolution)
Log.i(TAG, "buildImageCapture: rotation=$rotation")
Log.i(TAG, "buildImageCapture: resolution=$resolution")
Log.i(TAG, "buildImageCapture: rotatedResolution=$rotatedResolution")
setTargetResolution(rotatedResolution) setTargetResolution(rotatedResolution)
} ?: setTargetAspectRatio(aspectRatio) } ?: setTargetAspectRatio(aspectRatio)
} }
@ -255,7 +245,6 @@ class CameraXPreview(
@SuppressLint("ClickableViewAccessibility") @SuppressLint("ClickableViewAccessibility")
// source: https://stackoverflow.com/a/60095886/10552591 // source: https://stackoverflow.com/a/60095886/10552591
private fun setupZoomAndFocus() { private fun setupZoomAndFocus() {
Log.i(TAG, "camera controller: ${previewView.controller}")
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() { val gestureDetector = GestureDetector(activity, object : SimpleOnGestureListener() {
override fun onSingleTapConfirmed(event: MotionEvent): Boolean { override fun onSingleTapConfirmed(event: MotionEvent): Boolean {
@ -263,7 +252,6 @@ class CameraXPreview(
val display = displayManager.getDisplay(Display.DEFAULT_DISPLAY) val display = displayManager.getDisplay(Display.DEFAULT_DISPLAY)
val width = previewView.width.toFloat() val width = previewView.width.toFloat()
val height = previewView.height.toFloat() val height = previewView.height.toFloat()
Log.i(TAG, "onSingleTapConfirmed: width=$width,height=$height")
val factory = DisplayOrientedMeteringPointFactory(display, it, width, height) val factory = DisplayOrientedMeteringPointFactory(display, it, width, height)
val xPos = event.x val xPos = event.x
val yPos = event.y val yPos = event.y
@ -275,13 +263,11 @@ class CameraXPreview(
.build() .build()
camera?.cameraControl?.startFocusAndMetering(focusMeteringAction) camera?.cameraControl?.startFocusAndMetering(focusMeteringAction)
listener.onFocusCamera(xPos, yPos) listener.onFocusCamera(xPos, yPos)
Log.i(TAG, "start focus")
true true
} ?: false } ?: false
} }
}) })
previewView.setOnTouchListener { _, event -> previewView.setOnTouchListener { _, event ->
Log.i(TAG, "setOnTouchListener: x=${event.x}, y=${event.y}")
gestureDetector.onTouchEvent(event) gestureDetector.onTouchEvent(event)
scaleGesture?.onTouchEvent(event) scaleGesture?.onTouchEvent(event)
true true
@ -405,7 +391,6 @@ class CameraXPreview(
} }
private fun handleImageCaptureError(exception: ImageCaptureException) { private fun handleImageCaptureError(exception: ImageCaptureException) {
Log.e(TAG, "Error", exception)
listener.toggleBottomButtons(false) listener.toggleBottomButtons(false)
cameraErrorHandler.handleImageCaptureError(exception.imageCaptureError) cameraErrorHandler.handleImageCaptureError(exception.imageCaptureError)
} }
@ -421,17 +406,15 @@ class CameraXPreview(
} }
override fun toggleRecording() { override fun toggleRecording() {
Log.d(TAG, "toggleRecording: currentRecording=$currentRecording, recordingState=$recordingState")
if (currentRecording == null || recordingState is VideoRecordEvent.Finalize) { if (currentRecording == null || recordingState is VideoRecordEvent.Finalize) {
startRecording() startRecording()
} else { } else {
currentRecording?.stop() currentRecording?.stop()
currentRecording = null currentRecording = null
Log.d(TAG, "Recording stopped")
} }
} }
@SuppressLint("MissingPermission") @SuppressLint("MissingPermission", "NewApi")
private fun startRecording() { private fun startRecording() {
val videoCapture = videoCapture ?: throw IllegalStateException("Camera initialization failed.") val videoCapture = videoCapture ?: throw IllegalStateException("Camera initialization failed.")
@ -441,6 +424,10 @@ class CameraXPreview(
FileDescriptorOutputOptions.Builder(mediaOutput.fileDescriptor).build() FileDescriptorOutputOptions.Builder(mediaOutput.fileDescriptor).build()
.let { videoCapture.output.prepareRecording(activity, it) } .let { videoCapture.output.prepareRecording(activity, it) }
} }
is MediaOutput.FileMediaOutput -> {
FileOutputOptions.Builder(mediaOutput.file).build()
.let { videoCapture.output.prepareRecording(activity, it) }
}
is MediaOutput.MediaStoreOutput -> { is MediaOutput.MediaStoreOutput -> {
MediaStoreOutputOptions.Builder(contentResolver, mediaOutput.contentUri).setContentValues(mediaOutput.contentValues).build() MediaStoreOutputOptions.Builder(contentResolver, mediaOutput.contentUri).setContentValues(mediaOutput.contentValues).build()
.let { videoCapture.output.prepareRecording(activity, it) } .let { videoCapture.output.prepareRecording(activity, it) }
@ -450,7 +437,6 @@ class CameraXPreview(
currentRecording = recording.withAudioEnabled() currentRecording = recording.withAudioEnabled()
.start(mainExecutor) { recordEvent -> .start(mainExecutor) { recordEvent ->
Log.d(TAG, "recordEvent=$recordEvent ")
recordingState = recordEvent recordingState = recordEvent
when (recordEvent) { when (recordEvent) {
is VideoRecordEvent.Start -> { is VideoRecordEvent.Start -> {
@ -466,7 +452,6 @@ class CameraXPreview(
playStopVideoRecordingSoundIfEnabled() playStopVideoRecordingSoundIfEnabled()
listener.onVideoRecordingStopped() listener.onVideoRecordingStopped()
if (recordEvent.hasError()) { if (recordEvent.hasError()) {
Log.e(TAG, "recording failed:", recordEvent.cause)
cameraErrorHandler.handleVideoRecordingError(recordEvent.error) cameraErrorHandler.handleVideoRecordingError(recordEvent.error)
} else { } else {
listener.onMediaSaved(mediaOutput.uri ?: recordEvent.outputResults.outputUri) listener.onMediaSaved(mediaOutput.uri ?: recordEvent.outputResults.outputUri)
@ -474,7 +459,6 @@ class CameraXPreview(
} }
} }
} }
Log.d(TAG, "Recording started")
} }
private fun playShutterSoundIfEnabled() { private fun playShutterSoundIfEnabled() {

View File

@ -3,6 +3,7 @@ package com.simplemobiletools.camera.models
import android.content.ContentValues import android.content.ContentValues
import android.net.Uri import android.net.Uri
import android.os.ParcelFileDescriptor import android.os.ParcelFileDescriptor
import java.io.File
import java.io.OutputStream import java.io.OutputStream
sealed class MediaOutput( sealed class MediaOutput(
@ -23,5 +24,10 @@ sealed class MediaOutput(
override val uri: Uri, override val uri: Uri,
) : MediaOutput(uri) ) : MediaOutput(uri)
data class FileMediaOutput(
val file: File,
override val uri: Uri,
) : MediaOutput(uri)
object BitmapOutput : MediaOutput(null) object BitmapOutput : MediaOutput(null)
} }

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/view_holder" android:id="@+id/view_holder"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
@ -10,7 +11,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" /> android:layout_height="match_parent" />
<ImageView <View
android:id="@+id/capture_black_screen" android:id="@+id/capture_black_screen"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
@ -21,7 +22,8 @@
android:id="@+id/settings" android:id="@+id/settings"
android:layout_width="@dimen/icon_size" android:layout_width="@dimen/icon_size"
android:layout_height="@dimen/icon_size" android:layout_height="@dimen/icon_size"
android:layout_alignParentRight="true" android:layout_alignParentEnd="true"
android:contentDescription="@string/settings"
android:padding="@dimen/normal_margin" android:padding="@dimen/normal_margin"
android:src="@drawable/ic_settings_cog_vector" /> android:src="@drawable/ic_settings_cog_vector" />
@ -30,7 +32,8 @@
android:layout_width="@dimen/icon_size" android:layout_width="@dimen/icon_size"
android:layout_height="@dimen/icon_size" android:layout_height="@dimen/icon_size"
android:layout_below="@+id/settings" android:layout_below="@+id/settings"
android:layout_alignParentRight="true" android:layout_alignParentEnd="true"
android:contentDescription="@string/toggle_photo_video"
android:padding="@dimen/normal_margin" android:padding="@dimen/normal_margin"
android:src="@drawable/ic_video_vector" /> android:src="@drawable/ic_video_vector" />
@ -39,7 +42,8 @@
android:layout_width="@dimen/icon_size" android:layout_width="@dimen/icon_size"
android:layout_height="@dimen/icon_size" android:layout_height="@dimen/icon_size"
android:layout_below="@+id/toggle_photo_video" android:layout_below="@+id/toggle_photo_video"
android:layout_alignParentRight="true" android:layout_alignParentEnd="true"
android:contentDescription="@string/resolution"
android:padding="@dimen/normal_margin" android:padding="@dimen/normal_margin"
android:src="@drawable/ic_resolution_vector" /> android:src="@drawable/ic_resolution_vector" />
@ -48,13 +52,15 @@
android:layout_width="@dimen/icon_size" android:layout_width="@dimen/icon_size"
android:layout_height="@dimen/icon_size" android:layout_height="@dimen/icon_size"
android:layout_below="@+id/change_resolution" android:layout_below="@+id/change_resolution"
android:layout_alignParentRight="true" android:layout_alignParentEnd="true"
android:contentDescription="@string/view_last_media"
android:padding="@dimen/medium_margin" /> android:padding="@dimen/medium_margin" />
<LinearLayout <LinearLayout
android:id="@+id/btn_holder" android:id="@+id/btn_holder"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentBottom="true" android:layout_alignParentBottom="true"
android:gravity="center_horizontal|bottom"> android:gravity="center_horizontal|bottom">
@ -63,6 +69,7 @@
android:layout_width="@dimen/icon_size" android:layout_width="@dimen/icon_size"
android:layout_height="@dimen/icon_size" android:layout_height="@dimen/icon_size"
android:layout_weight="1" android:layout_weight="1"
android:contentDescription="@string/toggle_camera"
android:padding="@dimen/normal_margin" android:padding="@dimen/normal_margin"
android:src="@drawable/ic_camera_front_vector" /> android:src="@drawable/ic_camera_front_vector" />
@ -71,6 +78,7 @@
android:layout_width="@dimen/icon_size" android:layout_width="@dimen/icon_size"
android:layout_height="@dimen/icon_size" android:layout_height="@dimen/icon_size"
android:layout_weight="1" android:layout_weight="1"
android:contentDescription="@string/shutter"
android:src="@drawable/ic_shutter_vector" /> android:src="@drawable/ic_shutter_vector" />
<ImageView <ImageView
@ -78,6 +86,7 @@
android:layout_width="@dimen/icon_size" android:layout_width="@dimen/icon_size"
android:layout_height="@dimen/icon_size" android:layout_height="@dimen/icon_size"
android:layout_weight="1" android:layout_weight="1"
android:contentDescription="@string/toggle_flash"
android:padding="@dimen/normal_margin" android:padding="@dimen/normal_margin"
android:src="@drawable/ic_flash_off_vector" /> android:src="@drawable/ic_flash_off_vector" />
@ -89,8 +98,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_above="@+id/btn_holder" android:layout_above="@+id/btn_holder"
android:layout_centerHorizontal="true" android:layout_centerHorizontal="true"
android:text="00:00"
android:textColor="@android:color/white" android:textColor="@android:color/white"
android:visibility="gone" /> android:visibility="gone"
tools:text="00:00" />
</RelativeLayout> </RelativeLayout>

View File

@ -18,6 +18,14 @@
<string name="camera_dnd_error">"Do Not Disturb" mode is enabled. Please disable and try again</string> <string name="camera_dnd_error">"Do Not Disturb" mode is enabled. Please disable and try again</string>
<string name="photo_capture_failed">Photo capture failed</string> <string name="photo_capture_failed">Photo capture failed</string>
<string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string> <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">ما هي جودة ضغط الصور التي يجب تعيينها؟</string> <string name="faq_1_title">ما هي جودة ضغط الصور التي يجب تعيينها؟</string>
<string name="faq_1_text">ذلك يعتمد على هدفك. لأغراض عامة ينصح معظم الناس باستخدام 75٪ -80٪، عندما تكون الصورة لا تزال ذات نوعية جيدة حقا، ولكن يتم تقليل حجم الملف بشكل كبير مقارنة مع 100٪.</string> <string name="faq_1_text">ذلك يعتمد على هدفك. لأغراض عامة ينصح معظم الناس باستخدام 75٪ -80٪، عندما تكون الصورة لا تزال ذات نوعية جيدة حقا، ولكن يتم تقليل حجم الملف بشكل كبير مقارنة مع 100٪.</string>

View File

@ -19,6 +19,13 @@
<string name="photo_capture_failed">Photo capture failed</string> <string name="photo_capture_failed">Photo capture failed</string>
<string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string> <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">Şəkli hansı keyfiyyətdə yaddaşa salmalıyam?</string> <string name="faq_1_title">Şəkli hansı keyfiyyətdə yaddaşa salmalıyam?</string>
<string name="faq_1_text">Ümumiyyətlə, özünüzdən asılıdır. Gündəlik istifadə üçün çoxları 75%-80%\'i tövsiyyə edir, hansı ki, bu parametrdə şəkil hələ də yaxşı görünür, amma fayl ölçüsü 100%\'ə nəzərən kiçilmişdir.</string> <string name="faq_1_text">Ümumiyyətlə, özünüzdən asılıdır. Gündəlik istifadə üçün çoxları 75%-80%\'i tövsiyyə edir, hansı ki, bu parametrdə şəkil hələ də yaxşı görünür, amma fayl ölçüsü 100%\'ə nəzərən kiçilmişdir.</string>

View File

@ -21,6 +21,13 @@
<string name="photo_capture_failed">Photo capture failed</string> <string name="photo_capture_failed">Photo capture failed</string>
<string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string> <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">What photo compression quality should I set?</string> <string name="faq_1_title">What photo compression quality should I set?</string>
<string name="faq_1_text">It depends on your goal. For generic purposes most people advise using 75%-80%, when the image is still really good quality, but the file size is reduced drastically compared to 100%.</string> <string name="faq_1_text">It depends on your goal. For generic purposes most people advise using 75%-80%, when the image is still really good quality, but the file size is reduced drastically compared to 100%.</string>

View File

@ -18,6 +18,13 @@
<string name="camera_dnd_error">"Do Not Disturb" mode is enabled. Please disable and try again</string> <string name="camera_dnd_error">"Do Not Disturb" mode is enabled. Please disable and try again</string>
<string name="photo_capture_failed">Photo capture failed</string> <string name="photo_capture_failed">Photo capture failed</string>
<string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string> <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">Колко трябва да компресирам качеството на снимките\?</string> <string name="faq_1_title">Колко трябва да компресирам качеството на снимките\?</string>
<string name="faq_1_text">Зависи. За общо ползване повечето хора съветват да 75%-80%, като изображението все още е с наистина добро качество, но размерът на файла е драстично намален в сравнение със 100%.</string> <string name="faq_1_text">Зависи. За общо ползване повечето хора съветват да 75%-80%, като изображението все още е с наистина добро качество, но размерът на файла е драстично намален в сравнение със 100%.</string>
@ -42,4 +49,4 @@
Haven't found some strings? There's more at Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
--> -->
</resources> </resources>

View File

@ -12,12 +12,20 @@
<string name="photo_not_saved">No s\'ha pogut desar la foto</string> <string name="photo_not_saved">No s\'ha pogut desar la foto</string>
<string name="setting_resolution_failed">No s\'ha pogut establir la resolució adequada</string> <string name="setting_resolution_failed">No s\'ha pogut establir la resolució adequada</string>
<string name="video_recording_failed">Ha fallat la gravació de vídeo, proveu d\'utilitzar una resolució diferent</string> <string name="video_recording_failed">Ha fallat la gravació de vídeo, proveu d\'utilitzar una resolució diferent</string>
<string name="camera_in_use_error">Una altra aplicació està utilitzant la càmera; tanqueu l\'aplicació i torneu-ho a provar</string> <string name="camera_in_use_error">Camera is in use by another app, please close the app and try again</string>
<string name="camera_configure_error">S\'ha produït un error en configurar la càmera</string> <string name="camera_configure_error">An error occurred while configuring the camera</string>
<string name="camera_disabled_by_admin_error">L\'administrador ha desactivat la càmera</string> <string name="camera_disabled_by_admin_error">Camera is disabled by the admin</string>
<string name="camera_dnd_error">El mode «No molestis» està activat. Desactiveu-lo i torneu-ho a provar</string> <string name="camera_dnd_error">"Do Not Disturb" mode is enabled. Please disable and try again</string>
<string name="photo_capture_failed">Ha fallat la captura de la foto</string> <string name="photo_capture_failed">Photo capture failed</string>
<string name="video_capture_insufficient_storage_error">Ha fallat la gravació del vídeo a causa d\'un emmagatzematge insuficient</string> <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">Quina qualitat de compressió fotogràfica he d\'establir\?</string> <string name="faq_1_title">Quina qualitat de compressió fotogràfica he d\'establir\?</string>
<string name="faq_1_text">Depèn del vostre objectiu. Amb finalitats genèriques, la majoria de la gent aconsella utilitzar un 75%-80%, quan la imatge encara és de molt bona qualitat, però la mida del fitxer es redueix dràsticament en comparació amb el 100%.</string> <string name="faq_1_text">Depèn del vostre objectiu. Amb finalitats genèriques, la majoria de la gent aconsella utilitzar un 75%-80%, quan la imatge encara és de molt bona qualitat, però la mida del fitxer es redueix dràsticament en comparació amb el 100%.</string>

View File

@ -19,6 +19,13 @@
<string name="photo_capture_failed">Photo capture failed</string> <string name="photo_capture_failed">Photo capture failed</string>
<string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string> <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">Jakou kvalitu fotek bych měl použít?</string> <string name="faq_1_title">Jakou kvalitu fotek bych měl použít?</string>
<string name="faq_1_text">Záleží to na vášem cíli. Pro obecné účely doporučuje většina lidí 75%-80%, kdy je kvalita fotek stále vysoká, ale výsledný soubor má o mnoho menší velikost v porovnání se 100% kvalitou.</string> <string name="faq_1_text">Záleží to na vášem cíli. Pro obecné účely doporučuje většina lidí 75%-80%, kdy je kvalita fotek stále vysoká, ale výsledný soubor má o mnoho menší velikost v porovnání se 100% kvalitou.</string>

View File

@ -19,6 +19,13 @@
<string name="photo_capture_failed">Photo capture failed</string> <string name="photo_capture_failed">Photo capture failed</string>
<string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string> <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">Pa ansawdd cywasgu llun dylwn ei osod?</string> <string name="faq_1_title">Pa ansawdd cywasgu llun dylwn ei osod?</string>
<string name="faq_1_text">Mae\'n dibynnu ar dy bwrpas. Ar gyfer defnydd cyffredin, argymhellir defnyddio 75%-80% fel bod safon y llun yn dal i fod yn dda iawn ond bydd maint y ffeil yn dipyn llai na 100%.</string> <string name="faq_1_text">Mae\'n dibynnu ar dy bwrpas. Ar gyfer defnydd cyffredin, argymhellir defnyddio 75%-80% fel bod safon y llun yn dal i fod yn dda iawn ond bydd maint y ffeil yn dipyn llai na 100%.</string>

View File

@ -18,6 +18,14 @@
<string name="camera_dnd_error">"Do Not Disturb" mode is enabled. Please disable and try again</string> <string name="camera_dnd_error">"Do Not Disturb" mode is enabled. Please disable and try again</string>
<string name="photo_capture_failed">Photo capture failed</string> <string name="photo_capture_failed">Photo capture failed</string>
<string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string> <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">Hvilken fotokomprimeringskvalitet skal jeg anvende\?</string> <string name="faq_1_title">Hvilken fotokomprimeringskvalitet skal jeg anvende\?</string>
<string name="faq_1_text">Det afhænger af dit mål. Til almindelige formål anbefaler de fleste at bruge 75-80 %, hvor billedet stadig har en rigtig god kvalitet, men hvor filstørrelsen er reduceret drastisk i forhold til 100 %.</string> <string name="faq_1_text">Det afhænger af dit mål. Til almindelige formål anbefaler de fleste at bruge 75-80 %, hvor billedet stadig har en rigtig god kvalitet, men hvor filstørrelsen er reduceret drastisk i forhold til 100 %.</string>

View File

@ -18,6 +18,14 @@
<string name="camera_dnd_error">Der „Bitte nicht stören“-Modus ist aktiviert. Bitte deaktivieren Sie ihn und versuchen Sie es erneut</string> <string name="camera_dnd_error">Der „Bitte nicht stören“-Modus ist aktiviert. Bitte deaktivieren Sie ihn und versuchen Sie es erneut</string>
<string name="photo_capture_failed">Fotoaufnahme fehlgeschlagen</string> <string name="photo_capture_failed">Fotoaufnahme fehlgeschlagen</string>
<string name="video_capture_insufficient_storage_error">Videoaufzeichnung aufgrund unzureichender Speicherkapazität fehlgeschlagen</string> <string name="video_capture_insufficient_storage_error">Videoaufzeichnung aufgrund unzureichender Speicherkapazität fehlgeschlagen</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">Was für eine Fotokomprimierungsqualität soll ich einstellen?</string> <string name="faq_1_title">Was für eine Fotokomprimierungsqualität soll ich einstellen?</string>
<string name="faq_1_text">Das hängt von deinem Ziel ab. Für allgemeine Zwecke empfehlen die meisten 75 - 80 %, wodurch die Qualität immer noch sehr gut bleibt, aber die Dateigrösse drastisch reduziert ist im Vergleich zu 100 %.</string> <string name="faq_1_text">Das hängt von deinem Ziel ab. Für allgemeine Zwecke empfehlen die meisten 75 - 80 %, wodurch die Qualität immer noch sehr gut bleibt, aber die Dateigrösse drastisch reduziert ist im Vergleich zu 100 %.</string>
@ -42,4 +50,4 @@
Haven't found some strings? There's more at Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
--> -->
</resources> </resources>

View File

@ -19,6 +19,13 @@
<string name="photo_capture_failed">Αποτυχία λήψης φωτογραφιών</string> <string name="photo_capture_failed">Αποτυχία λήψης φωτογραφιών</string>
<string name="video_capture_insufficient_storage_error">Η εγγραφή βίντεο απέτυχε λόγω ανεπαρκούς αποθηκευτικού χώρου</string> <string name="video_capture_insufficient_storage_error">Η εγγραφή βίντεο απέτυχε λόγω ανεπαρκούς αποθηκευτικού χώρου</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">Ποια ποιότητα συμπίεσης φωτογραφιών πρέπει να ορίσω;</string> <string name="faq_1_title">Ποια ποιότητα συμπίεσης φωτογραφιών πρέπει να ορίσω;</string>
<string name="faq_1_text">Εξαρτάται από το στόχο σας. Για γενικούς σκοπούς, οι περισσότεροι συμβουλεύουν τη χρήση του 75%-80%, όταν η εικόνα εξακολουθεί να είναι πραγματικά καλής ποιότητας, αλλά το μέγεθος του αρχείου μειώνεται δραστικά σε σύγκριση με το 100%.</string> <string name="faq_1_text">Εξαρτάται από το στόχο σας. Για γενικούς σκοπούς, οι περισσότεροι συμβουλεύουν τη χρήση του 75%-80%, όταν η εικόνα εξακολουθεί να είναι πραγματικά καλής ποιότητας, αλλά το μέγεθος του αρχείου μειώνεται δραστικά σε σύγκριση με το 100%.</string>

View File

@ -19,6 +19,13 @@
<string name="photo_capture_failed">Photo capture failed</string> <string name="photo_capture_failed">Photo capture failed</string>
<string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string> <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">What photo compression quality should I set?</string> <string name="faq_1_title">What photo compression quality should I set?</string>
<string name="faq_1_text">It depends on your goal. For generic purposes most people advise using 75%-80%, when the image is still really good quality, but the file size is reduced drastically compared to 100%.</string> <string name="faq_1_text">It depends on your goal. For generic purposes most people advise using 75%-80%, when the image is still really good quality, but the file size is reduced drastically compared to 100%.</string>

View File

@ -18,6 +18,14 @@
<string name="camera_dnd_error">"Do Not Disturb" mode is enabled. Please disable and try again</string> <string name="camera_dnd_error">"Do Not Disturb" mode is enabled. Please disable and try again</string>
<string name="photo_capture_failed">Photo capture failed</string> <string name="photo_capture_failed">Photo capture failed</string>
<string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string> <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">¿Qué calidad de compresión de foto debería establecer?</string> <string name="faq_1_title">¿Qué calidad de compresión de foto debería establecer?</string>
<string name="faq_1_text">Depende de tu objetivo. Para propósitos generales, la mayoría de las personas aconsejan usar 75%-80%, y la imagen seguirá siendo de calidad realmente buena, pero el tamaño del archivo es reducido drásticamente comparado con el 100%.</string> <string name="faq_1_text">Depende de tu objetivo. Para propósitos generales, la mayoría de las personas aconsejan usar 75%-80%, y la imagen seguirá siendo de calidad realmente buena, pero el tamaño del archivo es reducido drásticamente comparado con el 100%.</string>

View File

@ -18,6 +18,14 @@
<string name="camera_dnd_error">Ära häiri režiim on sisse lülitatud. Palun lülita see välja ja proovi uuesti</string> <string name="camera_dnd_error">Ära häiri režiim on sisse lülitatud. Palun lülita see välja ja proovi uuesti</string>
<string name="photo_capture_failed">Foto jäädvustamine ei õnnestunud</string> <string name="photo_capture_failed">Foto jäädvustamine ei õnnestunud</string>
<string name="video_capture_insufficient_storage_error">Video salvestamine ei õnnestunud ebapiisava salvestusruumi tõttu</string> <string name="video_capture_insufficient_storage_error">Video salvestamine ei õnnestunud ebapiisava salvestusruumi tõttu</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">Missugust piltide pakkimise kvaliteeti peaksin kasutama\?</string> <string name="faq_1_title">Missugust piltide pakkimise kvaliteeti peaksin kasutama\?</string>
<string name="faq_1_text">See sõltub sinu eesmärkidest. Üldiselt soovitame 75-80-protsendilist pakkimist, mispuhul piltide kvaliteet on jätkuvalt mõistlik, kuid piltide suurus on 100-protsendilise kvaliteediga võrreldes väiksem.</string> <string name="faq_1_text">See sõltub sinu eesmärkidest. Üldiselt soovitame 75-80-protsendilist pakkimist, mispuhul piltide kvaliteet on jätkuvalt mõistlik, kuid piltide suurus on 100-protsendilise kvaliteediga võrreldes väiksem.</string>

View File

@ -18,6 +18,14 @@
<string name="camera_dnd_error">"Do Not Disturb" mode is enabled. Please disable and try again</string> <string name="camera_dnd_error">"Do Not Disturb" mode is enabled. Please disable and try again</string>
<string name="photo_capture_failed">Photo capture failed</string> <string name="photo_capture_failed">Photo capture failed</string>
<string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string> <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">Mitä valokuvan pakkauslaatua minun pitäisi käyttää?</string> <string name="faq_1_title">Mitä valokuvan pakkauslaatua minun pitäisi käyttää?</string>
<string name="faq_1_text">Se riippuu tarkoituksestasi. Yleisissä tarkoituksissa useimmat ihmiset suosittelevat käyttämään 75-80%, kun kuva on edelleen todella hyvälaatuinen, mutta tiedoston koko pienenee huomattavasti verrattuna 100%:iin.</string> <string name="faq_1_text">Se riippuu tarkoituksestasi. Yleisissä tarkoituksissa useimmat ihmiset suosittelevat käyttämään 75-80%, kun kuva on edelleen todella hyvälaatuinen, mutta tiedoston koko pienenee huomattavasti verrattuna 100%:iin.</string>
@ -42,4 +50,4 @@
Haven't found some strings? There's more at Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
--> -->
</resources> </resources>

View File

@ -18,6 +18,14 @@
<string name="camera_dnd_error">Le mode Ne pas déranger est activé. Veuillez le désactiver et réessayer</string> <string name="camera_dnd_error">Le mode Ne pas déranger est activé. Veuillez le désactiver et réessayer</string>
<string name="photo_capture_failed">Échec de la prise de photo</string> <string name="photo_capture_failed">Échec de la prise de photo</string>
<string name="video_capture_insufficient_storage_error">L\'enregistrement vidéo a échoué en raison d\'un stockage insuffisant</string> <string name="video_capture_insufficient_storage_error">L\'enregistrement vidéo a échoué en raison d\'un stockage insuffisant</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">Quelle valeur devrais-je mettre pour la qualité des photos \?</string> <string name="faq_1_title">Quelle valeur devrais-je mettre pour la qualité des photos \?</string>
<string name="faq_1_text">Tout dépend de ce que vous voulez en faire. Pour la plupart des usages, il est recommandé entre 75 et 80 %, ce qui est reste de qualité acceptable, tout en générant un fichier de taille bien inférieure à une photo avec une qualité de 100 %.</string> <string name="faq_1_text">Tout dépend de ce que vous voulez en faire. Pour la plupart des usages, il est recommandé entre 75 et 80 %, ce qui est reste de qualité acceptable, tout en générant un fichier de taille bien inférieure à une photo avec une qualité de 100 %.</string>
@ -42,4 +50,4 @@
Haven't found some strings? There's more at Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
--> -->
</resources> </resources>

View File

@ -19,6 +19,13 @@
<string name="photo_capture_failed">Photo capture failed</string> <string name="photo_capture_failed">Photo capture failed</string>
<string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string> <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">Que calidade de compresión debo escoller para a foto?</string> <string name="faq_1_title">Que calidade de compresión debo escoller para a foto?</string>
<string name="faq_1_text">Depende do obxectivo. Para uso xeral a maioría das persoas usuarias recomendan entre un 75%-80%, que é un valor bastante bo, pero o tamaño do ficheiro redúcese drasticamente comparado co 100%.</string> <string name="faq_1_text">Depende do obxectivo. Para uso xeral a maioría das persoas usuarias recomendan entre un 75%-80%, que é un valor bastante bo, pero o tamaño do ficheiro redúcese drasticamente comparado co 100%.</string>

View File

@ -18,6 +18,14 @@
<string name="camera_dnd_error">Modus „Ne smetaj” je aktiviran. Deaktiviraj ga i pokušaj ponovo</string> <string name="camera_dnd_error">Modus „Ne smetaj” je aktiviran. Deaktiviraj ga i pokušaj ponovo</string>
<string name="photo_capture_failed">Snimanje fotografije nije uspjelo</string> <string name="photo_capture_failed">Snimanje fotografije nije uspjelo</string>
<string name="video_capture_insufficient_storage_error">Snimanje videa nije uspjelo zbog nedovoljne memorije</string> <string name="video_capture_insufficient_storage_error">Snimanje videa nije uspjelo zbog nedovoljne memorije</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">Koju kvalitetu kompresije fotografija trebam postaviti\?</string> <string name="faq_1_title">Koju kvalitetu kompresije fotografija trebam postaviti\?</string>
<string name="faq_1_text">Ovisi o tvom cilju. Za opće namjene, većina ljudi savjetuje korištenje 75 do 80 % kad je slika dobre kvalitete, ali se veličina datoteke drastično smanjuje u usporedbi sa 100 %.</string> <string name="faq_1_text">Ovisi o tvom cilju. Za opće namjene, većina ljudi savjetuje korištenje 75 do 80 % kad je slika dobre kvalitete, ali se veličina datoteke drastično smanjuje u usporedbi sa 100 %.</string>

View File

@ -19,6 +19,13 @@
<string name="photo_capture_failed">Photo capture failed</string> <string name="photo_capture_failed">Photo capture failed</string>
<string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string> <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">What photo compression quality should I set?</string> <string name="faq_1_title">What photo compression quality should I set?</string>
<string name="faq_1_text">It depends on your goal. For generic purposes most people advise using 75%-80%, when the image is still really good quality, but the file size is reduced drastically compared to 100%.</string> <string name="faq_1_text">It depends on your goal. For generic purposes most people advise using 75%-80%, when the image is still really good quality, but the file size is reduced drastically compared to 100%.</string>

View File

@ -18,6 +18,14 @@
<string name="camera_dnd_error">Mode Jangan Ganggu diaktifkan. Silakan nonaktifkan dan coba lagi</string> <string name="camera_dnd_error">Mode Jangan Ganggu diaktifkan. Silakan nonaktifkan dan coba lagi</string>
<string name="photo_capture_failed">Gagal mengambil foto</string> <string name="photo_capture_failed">Gagal mengambil foto</string>
<string name="video_capture_insufficient_storage_error">Gagal merekam video karena penyimpanan tidak cukup</string> <string name="video_capture_insufficient_storage_error">Gagal merekam video karena penyimpanan tidak cukup</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">Kualitas kompresi foto mana yang harus saya gunakan?</string> <string name="faq_1_title">Kualitas kompresi foto mana yang harus saya gunakan?</string>
<string name="faq_1_text">Tergantung tujuan anda. Untuk hal-hal yang umum direkomendasikan menggunakan 75%-80%, kualitas gambar masih sangat bagus, tetapi ukuran berkas berkurang signifikan dibandingkan dengan 100%.</string> <string name="faq_1_text">Tergantung tujuan anda. Untuk hal-hal yang umum direkomendasikan menggunakan 75%-80%, kualitas gambar masih sangat bagus, tetapi ukuran berkas berkurang signifikan dibandingkan dengan 100%.</string>
@ -42,4 +50,4 @@
Haven't found some strings? There's more at Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
--> -->
</resources> </resources>

View File

@ -18,6 +18,14 @@
<string name="camera_dnd_error">La modalità non disturbare è abilitata. Disabilitare e riprovare</string> <string name="camera_dnd_error">La modalità non disturbare è abilitata. Disabilitare e riprovare</string>
<string name="photo_capture_failed">Acquisizione di foto non riuscita</string> <string name="photo_capture_failed">Acquisizione di foto non riuscita</string>
<string name="video_capture_insufficient_storage_error">Registrazione video non riuscita a causa dello spazio d\'archiviazione insufficiente</string> <string name="video_capture_insufficient_storage_error">Registrazione video non riuscita a causa dello spazio d\'archiviazione insufficiente</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">Che qualità di compressione dovrei impostare?</string> <string name="faq_1_title">Che qualità di compressione dovrei impostare?</string>
<string name="faq_1_text">Dipende dal proprio obiettivo. In genere si consiglia di utilizzare una qualità del 75%-80%, in modo che l\'immagine sia ancora di ottima qualità, ma la dimensione del file viene ridotta drasticamente rispetto al 100%.</string> <string name="faq_1_text">Dipende dal proprio obiettivo. In genere si consiglia di utilizzare una qualità del 75%-80%, in modo che l\'immagine sia ancora di ottima qualità, ma la dimensione del file viene ridotta drasticamente rispetto al 100%.</string>

View File

@ -18,6 +18,14 @@
<string name="camera_dnd_error">"Do Not Disturb" mode is enabled. Please disable and try again</string> <string name="camera_dnd_error">"Do Not Disturb" mode is enabled. Please disable and try again</string>
<string name="photo_capture_failed">Photo capture failed</string> <string name="photo_capture_failed">Photo capture failed</string>
<string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string> <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">איזו איכות דחיסת תמונה עלי להגדיר\?</string> <string name="faq_1_title">איזו איכות דחיסת תמונה עלי להגדיר\?</string>
<string name="faq_1_text">זה תלוי במטרה שלך. למטרות כלליות רוב האנשים ממליצים להשתמש ב-75%-80%, כאשר התמונה עדיין באיכות טובה, אך גודל הקובץ מצטמצם באופן דרסטי בהשוואה ל-100%.</string> <string name="faq_1_text">זה תלוי במטרה שלך. למטרות כלליות רוב האנשים ממליצים להשתמש ב-75%-80%, כאשר התמונה עדיין באיכות טובה, אך גודל הקובץ מצטמצם באופן דרסטי בהשוואה ל-100%.</string>

View File

@ -19,6 +19,13 @@
<string name="photo_capture_failed">Photo capture failed</string> <string name="photo_capture_failed">Photo capture failed</string>
<string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string> <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">写真の圧縮品質はどのように設定すればよいですか?</string> <string name="faq_1_title">写真の圧縮品質はどのように設定すればよいですか?</string>
<string name="faq_1_text">これはあなたの求める目標によります。一般的な用途には、75%80%の使用をおすすめします。この設定でも画像は十分に良い品質ですが、ファイルサイズは100%と比べて大幅に削減することができます。</string> <string name="faq_1_text">これはあなたの求める目標によります。一般的な用途には、75%80%の使用をおすすめします。この設定でも画像は十分に良い品質ですが、ファイルサイズは100%と比べて大幅に削減することができます。</string>

View File

@ -19,6 +19,13 @@
<string name="photo_capture_failed">Photo capture failed</string> <string name="photo_capture_failed">Photo capture failed</string>
<string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string> <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">사진 압축품질을 무엇으로 설정해야 하나요?</string> <string name="faq_1_title">사진 압축품질을 무엇으로 설정해야 하나요?</string>
<string name="faq_1_text">압축품질은 촬영용도에 따라 달라질 수 있지만, 일반적으로 75% -80%를 사용하도록 권고합니다. 75% -80%로 압축 품질을 설정하면 파일 크기는 100%에 비해 크게 줄어듭니다.</string> <string name="faq_1_text">압축품질은 촬영용도에 따라 달라질 수 있지만, 일반적으로 75% -80%를 사용하도록 권고합니다. 75% -80%로 압축 품질을 설정하면 파일 크기는 100%에 비해 크게 줄어듭니다.</string>

View File

@ -19,6 +19,13 @@
<string name="photo_capture_failed">Photo capture failed</string> <string name="photo_capture_failed">Photo capture failed</string>
<string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string> <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">Kokią nuotraukos suspaudimo kokybę turėčiau nustatyti?</string> <string name="faq_1_title">Kokią nuotraukos suspaudimo kokybę turėčiau nustatyti?</string>
<string name="faq_1_text">Tai priklauso nuo Jūsų tikslų. Įprastiems tikslams dauguma žmonių pataria naudoti 75%-80%, kai nuotrauka vistiek yra geros kokybės, bet bylos dydis sumažėja kardinaliai palyginus su 100%.</string> <string name="faq_1_text">Tai priklauso nuo Jūsų tikslų. Įprastiems tikslams dauguma žmonių pataria naudoti 75%-80%, kai nuotrauka vistiek yra geros kokybės, bet bylos dydis sumažėja kardinaliai palyginus su 100%.</string>

View File

@ -19,6 +19,13 @@
<string name="photo_capture_failed">Photo capture failed</string> <string name="photo_capture_failed">Photo capture failed</string>
<string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string> <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">ഏത് ഫോട്ടോ കംപ്രഷനാണ് ഞാൻ ഉപയോഗിക്കേണ്ടത്?</string> <string name="faq_1_title">ഏത് ഫോട്ടോ കംപ്രഷനാണ് ഞാൻ ഉപയോഗിക്കേണ്ടത്?</string>
<string name="faq_1_text">It depends on your goal. For generic purposes most people advise using 75%-80%, when the image is still really good quality, but the file size is reduced drastically compared to 100%.</string> <string name="faq_1_text">It depends on your goal. For generic purposes most people advise using 75%-80%, when the image is still really good quality, but the file size is reduced drastically compared to 100%.</string>

View File

@ -18,6 +18,14 @@
<string name="camera_dnd_error">"Do Not Disturb" mode is enabled. Please disable and try again</string> <string name="camera_dnd_error">"Do Not Disturb" mode is enabled. Please disable and try again</string>
<string name="photo_capture_failed">Photo capture failed</string> <string name="photo_capture_failed">Photo capture failed</string>
<string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string> <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">Hvilket bildekomprimeringsnivå bør jeg bruke\?</string> <string name="faq_1_title">Hvilket bildekomprimeringsnivå bør jeg bruke\?</string>
<string name="faq_1_text">Det avhenger av hva du vil. Til alminnelige formål anbefales 75%-80%. Fremdeles god kvalitet, men vesentlig redusert filstørrelse sammenlignet med 100%.</string> <string name="faq_1_text">Det avhenger av hva du vil. Til alminnelige formål anbefales 75%-80%. Fremdeles god kvalitet, men vesentlig redusert filstørrelse sammenlignet med 100%.</string>

View File

@ -19,6 +19,13 @@
<string name="photo_capture_failed">Photo capture failed</string> <string name="photo_capture_failed">Photo capture failed</string>
<string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string> <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">मैले कस्तो फोटो खदाईको गुणस्तर स्थापित गर्नुपर्छ ?</string> <string name="faq_1_title">मैले कस्तो फोटो खदाईको गुणस्तर स्थापित गर्नुपर्छ ?</string>
<string name="faq_1_text">यो तपाईको चाहानामा भर पर्छ । सामान्यतया सबैले 75%-80% मा प्रयोग गर्छन, जब तस्बिर राम्रो गुणस्तरको छ, तर 100% को तुलनामा फाईल साईज अस्वभाविक रुपले घट्छ </string> <string name="faq_1_text">यो तपाईको चाहानामा भर पर्छ । सामान्यतया सबैले 75%-80% मा प्रयोग गर्छन, जब तस्बिर राम्रो गुणस्तरको छ, तर 100% को तुलनामा फाईल साईज अस्वभाविक रुपले घट्छ </string>

View File

@ -18,6 +18,14 @@
<string name="camera_dnd_error">De modus \"Niet storen\" is ingeschakeld. Schakel deze uit en probeer het nog eens.</string> <string name="camera_dnd_error">De modus \"Niet storen\" is ingeschakeld. Schakel deze uit en probeer het nog eens.</string>
<string name="photo_capture_failed">Foto-opname mislukt</string> <string name="photo_capture_failed">Foto-opname mislukt</string>
<string name="video_capture_insufficient_storage_error">Video-opname mislukt door onvoldoende opslag</string> <string name="video_capture_insufficient_storage_error">Video-opname mislukt door onvoldoende opslag</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">Welke kwaliteit voor foto\'s moet ik instellen?</string> <string name="faq_1_title">Welke kwaliteit voor foto\'s moet ik instellen?</string>
<string name="faq_1_text">Voor normaal gebruik adviseren de meeste mensen een compressie van 75%-80%. De afbeelding zal dan nog steeds van goede kwaliteit zijn en de bestandsgrootte zal enorm veel kleiner zijn dan met 100%.</string> <string name="faq_1_text">Voor normaal gebruik adviseren de meeste mensen een compressie van 75%-80%. De afbeelding zal dan nog steeds van goede kwaliteit zijn en de bestandsgrootte zal enorm veel kleiner zijn dan met 100%.</string>

View File

@ -18,6 +18,14 @@
<string name="camera_dnd_error">Tryb Nie przeszkadzać jest włączony. Wyłącz go i spróbuj ponownie.</string> <string name="camera_dnd_error">Tryb Nie przeszkadzać jest włączony. Wyłącz go i spróbuj ponownie.</string>
<string name="photo_capture_failed">Nie udało się zrobić zdjęcia</string> <string name="photo_capture_failed">Nie udało się zrobić zdjęcia</string>
<string name="video_capture_insufficient_storage_error">Nagrywanie wideo nie powiodło się z powodu niewystarczającej ilości miejsca</string> <string name="video_capture_insufficient_storage_error">Nagrywanie wideo nie powiodło się z powodu niewystarczającej ilości miejsca</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">Jaką jakość kompresji zdjęć powinienem ustawić\?</string> <string name="faq_1_title">Jaką jakość kompresji zdjęć powinienem ustawić\?</string>
<string name="faq_1_text">Zależy to od Twojego celu. Do celów ogólnych większość ludzi zaleca poziom 75-80% — wtedy obraz jest nadal w dobrej jakości, ale rozmiar pliku znacznie zmniejsza się w porównaniu do 100%.</string> <string name="faq_1_text">Zależy to od Twojego celu. Do celów ogólnych większość ludzi zaleca poziom 75-80% — wtedy obraz jest nadal w dobrej jakości, ale rozmiar pliku znacznie zmniejsza się w porównaniu do 100%.</string>

View File

@ -18,6 +18,14 @@
<string name="camera_dnd_error">O modo Não perturbe está ativado. Desative e tente novamente</string> <string name="camera_dnd_error">O modo Não perturbe está ativado. Desative e tente novamente</string>
<string name="photo_capture_failed">Erro ao tirar foto</string> <string name="photo_capture_failed">Erro ao tirar foto</string>
<string name="video_capture_insufficient_storage_error">Erro ao gravar vídeo devido a armazenamento insuficiente</string> <string name="video_capture_insufficient_storage_error">Erro ao gravar vídeo devido a armazenamento insuficiente</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">Que qualidade de compressão de imagem devo definir\?</string> <string name="faq_1_title">Que qualidade de compressão de imagem devo definir\?</string>
<string name="faq_1_text">It depends on your goal. For generic purposes most people advise using 75%-80%, when the image is still really good quality, but the file size is reduced drastically compared to 100%.</string> <string name="faq_1_text">It depends on your goal. For generic purposes most people advise using 75%-80%, when the image is still really good quality, but the file size is reduced drastically compared to 100%.</string>

View File

@ -19,6 +19,13 @@
<string name="photo_capture_failed">Photo capture failed</string> <string name="photo_capture_failed">Photo capture failed</string>
<string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string> <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">What photo compression quality should I set?</string> <string name="faq_1_title">What photo compression quality should I set?</string>
<string name="faq_1_text">It depends on your goal. For generic purposes most people advise using 75%-80%, when the image is still really good quality, but the file size is reduced drastically compared to 100%.</string> <string name="faq_1_text">It depends on your goal. For generic purposes most people advise using 75%-80%, when the image is still really good quality, but the file size is reduced drastically compared to 100%.</string>

View File

@ -18,6 +18,14 @@
<string name="camera_dnd_error">"Do Not Disturb" mode is enabled. Please disable and try again</string> <string name="camera_dnd_error">"Do Not Disturb" mode is enabled. Please disable and try again</string>
<string name="photo_capture_failed">Photo capture failed</string> <string name="photo_capture_failed">Photo capture failed</string>
<string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string> <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">Que qualidade de compressão de imagem devo definir?</string> <string name="faq_1_title">Que qualidade de compressão de imagem devo definir?</string>
<string name="faq_1_text">Depende de seu objetivo. Para fins genéricos, aconselha-se o uso de 75%-80%, no qual a imagem ainda apresenta boa qualidade, porém tamanho drasticamente reduzido em comparação a 100%.</string> <string name="faq_1_text">Depende de seu objetivo. Para fins genéricos, aconselha-se o uso de 75%-80%, no qual a imagem ainda apresenta boa qualidade, porém tamanho drasticamente reduzido em comparação a 100%.</string>

View File

@ -19,6 +19,13 @@
<string name="photo_capture_failed">Photo capture failed</string> <string name="photo_capture_failed">Photo capture failed</string>
<string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string> <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">Ce calitate de compresie a fotografiilor ar trebui să setez?</string> <string name="faq_1_title">Ce calitate de compresie a fotografiilor ar trebui să setez?</string>
<string name="faq_1_text">Depinde de obiectivul dumneavoastră. În general, majoritatea oamenilor recomandă utilizarea a 75%-80%, atunci când calitatea imaginii este foarte bună, dar dimensiunea fișierului este redusă drastic în comparație cu 100%.</string> <string name="faq_1_text">Depinde de obiectivul dumneavoastră. În general, majoritatea oamenilor recomandă utilizarea a 75%-80%, atunci când calitatea imaginii este foarte bună, dar dimensiunea fișierului este redusă drastic în comparație cu 100%.</string>

View File

@ -18,6 +18,14 @@
<string name="camera_dnd_error">Включён режим \"Не беспокоить\", отключите и повторите попытку</string> <string name="camera_dnd_error">Включён режим \"Не беспокоить\", отключите и повторите попытку</string>
<string name="photo_capture_failed">Не удалось сделать снимок</string> <string name="photo_capture_failed">Не удалось сделать снимок</string>
<string name="video_capture_insufficient_storage_error">Запись видео не удалась из-за нехватки памяти</string> <string name="video_capture_insufficient_storage_error">Запись видео не удалась из-за нехватки памяти</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">Какое качество сжатия фото нужно установить?</string> <string name="faq_1_title">Какое качество сжатия фото нужно установить?</string>
<string name="faq_1_text">Это зависит от вашей цели. В общем случае большинство людей советуют использовать 75%-80%, тогда изображение всё ещё действительно хорошего качества, но размер файла резко уменьшается по сравнению со 100%.</string> <string name="faq_1_text">Это зависит от вашей цели. В общем случае большинство людей советуют использовать 75%-80%, тогда изображение всё ещё действительно хорошего качества, но размер файла резко уменьшается по сравнению со 100%.</string>

View File

@ -19,6 +19,13 @@
<string name="photo_capture_failed">Snímanie fotografie zlyhalo</string> <string name="photo_capture_failed">Snímanie fotografie zlyhalo</string>
<string name="video_capture_insufficient_storage_error">Nahrávanie videa zlyhalo pre nedostatok miesta</string> <string name="video_capture_insufficient_storage_error">Nahrávanie videa zlyhalo pre nedostatok miesta</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">Akú kvalitu fotiek by som mal použiť?</string> <string name="faq_1_title">Akú kvalitu fotiek by som mal použiť?</string>
<string name="faq_1_text">Záleží to od vášho cieľa. Pre všeobecné použitie odporúča väčšina ľudí 75%-80% kedy je kvalita fotiek stále vysoká, ale výsledný súbor má oveľa menšiu veľkosť v porovnaní so 100% kvalitou.</string> <string name="faq_1_text">Záleží to od vášho cieľa. Pre všeobecné použitie odporúča väčšina ľudí 75%-80% kedy je kvalita fotiek stále vysoká, ale výsledný súbor má oveľa menšiu veľkosť v porovnaní so 100% kvalitou.</string>

View File

@ -18,6 +18,14 @@
<string name="camera_dnd_error">"Do Not Disturb" mode is enabled. Please disable and try again</string> <string name="camera_dnd_error">"Do Not Disturb" mode is enabled. Please disable and try again</string>
<string name="photo_capture_failed">Photo capture failed</string> <string name="photo_capture_failed">Photo capture failed</string>
<string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string> <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">Vilken kvalitet för fotokomprimering ska jag ställa in\?</string> <string name="faq_1_title">Vilken kvalitet för fotokomprimering ska jag ställa in\?</string>
<string name="faq_1_text">Det beror på ditt mål. För generiska ändamål rekommenderar de flesta att man använder 75-80 %, då bilden fortfarande har riktigt bra kvalitet, men filstorleken minskar drastiskt jämfört med 100 %.</string> <string name="faq_1_text">Det beror på ditt mål. För generiska ändamål rekommenderar de flesta att man använder 75-80 %, då bilden fortfarande har riktigt bra kvalitet, men filstorleken minskar drastiskt jämfört med 100 %.</string>

View File

@ -21,6 +21,13 @@
<string name="photo_capture_failed">Photo capture failed</string> <string name="photo_capture_failed">Photo capture failed</string>
<string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string> <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">What photo compression quality should I set?</string> <string name="faq_1_title">What photo compression quality should I set?</string>
<string name="faq_1_text">It depends on your goal. For generic purposes most people advise using 75%-80%, when the image is still really good quality, but the file size is reduced drastically compared to 100%.</string> <string name="faq_1_text">It depends on your goal. For generic purposes most people advise using 75%-80%, when the image is still really good quality, but the file size is reduced drastically compared to 100%.</string>

View File

@ -18,6 +18,13 @@
<string name="camera_dnd_error">Rahatsız Etmeyin modu etkinleştirildi. Lütfen devre dışı bırakın ve tekrar deneyin</string> <string name="camera_dnd_error">Rahatsız Etmeyin modu etkinleştirildi. Lütfen devre dışı bırakın ve tekrar deneyin</string>
<string name="photo_capture_failed">Fotoğraf çekimi başarısız oldu</string> <string name="photo_capture_failed">Fotoğraf çekimi başarısız oldu</string>
<string name="video_capture_insufficient_storage_error">Yetersiz depolama alanı nedeniyle video kaydı başarısız oldu</string> <string name="video_capture_insufficient_storage_error">Yetersiz depolama alanı nedeniyle video kaydı başarısız oldu</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">Hangi fotoğraf sıkıştırma kalitesini ayarlamalıyım?</string> <string name="faq_1_title">Hangi fotoğraf sıkıştırma kalitesini ayarlamalıyım?</string>
<string name="faq_1_text">Hedefinize bağlı. Genel amaçlar için çoğu kişi %75-%80\'i kullanmanızı önerir, görüntü hala gerçekten kaliteliyken, dosya boyutu %100\'e göre büyük ölçüde azalır.</string> <string name="faq_1_text">Hedefinize bağlı. Genel amaçlar için çoğu kişi %75-%80\'i kullanmanızı önerir, görüntü hala gerçekten kaliteliyken, dosya boyutu %100\'e göre büyük ölçüde azalır.</string>

View File

@ -18,6 +18,14 @@
<string name="camera_dnd_error">Увімкнено режим «Не турбувати». Будь ласка, вимкніть і спробуйте знову</string> <string name="camera_dnd_error">Увімкнено режим «Не турбувати». Будь ласка, вимкніть і спробуйте знову</string>
<string name="photo_capture_failed">Не вдалося зняти світлину</string> <string name="photo_capture_failed">Не вдалося зняти світлину</string>
<string name="video_capture_insufficient_storage_error">Через нестачу пам’яті не вдалося записати відео</string> <string name="video_capture_insufficient_storage_error">Через нестачу пам’яті не вдалося записати відео</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">Який ступінь стиснення фото слід встановити?</string> <string name="faq_1_title">Який ступінь стиснення фото слід встановити?</string>
<string name="faq_1_text">Це залежить від вашої мети. Загалом більшість людей радять використовувати 75%-80%, тоді зображення ще дійсно гарної якості, але розмір файлу істотно зменшується порівняно зі 100%.</string> <string name="faq_1_text">Це залежить від вашої мети. Загалом більшість людей радять використовувати 75%-80%, тоді зображення ще дійсно гарної якості, але розмір файлу істотно зменшується порівняно зі 100%.</string>

View File

@ -18,6 +18,14 @@
<string name="camera_dnd_error">勿扰模式处于开启状态。 请禁用并重试</string> <string name="camera_dnd_error">勿扰模式处于开启状态。 请禁用并重试</string>
<string name="photo_capture_failed">照片拍摄失败</string> <string name="photo_capture_failed">照片拍摄失败</string>
<string name="video_capture_insufficient_storage_error">由于存储空间不足,视频录制失败</string> <string name="video_capture_insufficient_storage_error">由于存储空间不足,视频录制失败</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">我应该选用怎样的照片压缩率呢?</string> <string name="faq_1_title">我应该选用怎样的照片压缩率呢?</string>
<string name="faq_1_text">这取决于您的目的。对大多数人的一般用途来说,建议使用 75%-80%,此时图片仍有不错的品质,而文件大小相比 100% 时大幅减小。</string> <string name="faq_1_text">这取决于您的目的。对大多数人的一般用途来说,建议使用 75%-80%,此时图片仍有不错的品质,而文件大小相比 100% 时大幅减小。</string>

View File

@ -18,6 +18,14 @@
<string name="camera_dnd_error">零打擾模式已啟用,請將其停用後再試一次</string> <string name="camera_dnd_error">零打擾模式已啟用,請將其停用後再試一次</string>
<string name="photo_capture_failed">拍照失敗</string> <string name="photo_capture_failed">拍照失敗</string>
<string name="video_capture_insufficient_storage_error">儲存空間不足,錄影失敗</string> <string name="video_capture_insufficient_storage_error">儲存空間不足,錄影失敗</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">我應該設定什麼相片壓縮品質?</string> <string name="faq_1_title">我應該設定什麼相片壓縮品質?</string>
<string name="faq_1_text">視你目標而定。對大多數一般人而言建議使用75%-80%圖片依然是相當高品質但檔案大小比100%大幅減少很多。</string> <string name="faq_1_text">視你目標而定。對大多數一般人而言建議使用75%-80%圖片依然是相當高品質但檔案大小比100%大幅減少很多。</string>
@ -42,4 +50,4 @@
Haven't found some strings? There's more at Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
--> -->
</resources> </resources>

View File

@ -21,6 +21,13 @@
<string name="photo_capture_failed">Photo capture failed</string> <string name="photo_capture_failed">Photo capture failed</string>
<string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string> <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
<!--Camera Screen Icons Content Description-->
<string name="toggle_photo_video">Toggle photo/video mode</string>
<string name="change_resolution">Change Resolution</string>
<string name="view_last_media">View last captured media</string>
<string name="toggle_camera">Toggle front/back camera</string>
<string name="toggle_flash">Toggle the flashlight mode</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">What photo compression quality should I set?</string> <string name="faq_1_title">What photo compression quality should I set?</string>
<string name="faq_1_text">It depends on your goal. For generic purposes most people advise using 75%-80%, when the image is still really good quality, but the file size is reduced drastically compared to 100%.</string> <string name="faq_1_text">It depends on your goal. For generic purposes most people advise using 75%-80%, when the image is still really good quality, but the file size is reduced drastically compared to 100%.</string>