commit
37ae12850c
72 changed files with 1996 additions and 526 deletions
|
@ -1,6 +1,13 @@
|
|||
Changelog
|
||||
==========
|
||||
|
||||
Version 6.2.2 *(2019-01-10)*
|
||||
----------------------------
|
||||
|
||||
* Reverted to the old way of playing videos, opening them on a separate screen can be enabled in the app settings
|
||||
* Added some memory related improvements at displaying fullscreen images
|
||||
* Allow showing videos in slideshows
|
||||
|
||||
Version 6.2.1 *(2019-01-08)*
|
||||
----------------------------
|
||||
|
||||
|
|
|
@ -15,8 +15,8 @@ android {
|
|||
applicationId "com.simplemobiletools.gallery.pro"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 28
|
||||
versionCode 219
|
||||
versionName "6.2.1"
|
||||
versionCode 220
|
||||
versionName "6.2.2"
|
||||
multiDexEnabled true
|
||||
setProperty("archivesBaseName", "gallery")
|
||||
}
|
||||
|
@ -57,7 +57,7 @@ android {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'com.simplemobiletools:commons:5.6.6'
|
||||
implementation 'com.simplemobiletools:commons:5.6.7'
|
||||
implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0'
|
||||
implementation 'androidx.multidex:multidex:2.0.1'
|
||||
implementation 'it.sephiroth.android.exif:library:1.0.1'
|
||||
|
@ -78,7 +78,7 @@ dependencies {
|
|||
|
||||
//implementation 'com.davemorrissey.labs:subsampling-scale-image-view:3.10.0'
|
||||
//implementation 'com.github.tibbi:subsampling-scale-image-view:v3.10.1-fork'
|
||||
implementation 'com.github.tibbi:subsampling-scale-image-view:7a000e651e'
|
||||
implementation 'com.github.tibbi:subsampling-scale-image-view:9e9a393cc3'
|
||||
|
||||
// implementation 'com.github.chrisbanes:PhotoView:2.3.0'
|
||||
implementation 'com.github.tibbi:PhotoView:2.3.0-fork'
|
||||
|
|
|
@ -18,17 +18,20 @@ import android.widget.RelativeLayout
|
|||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.load.DataSource
|
||||
import com.bumptech.glide.load.DecodeFormat
|
||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||
import com.bumptech.glide.load.engine.GlideException
|
||||
import com.bumptech.glide.request.RequestListener
|
||||
import com.bumptech.glide.request.RequestOptions
|
||||
import com.bumptech.glide.request.target.Target
|
||||
import com.simplemobiletools.commons.dialogs.ColorPickerDialog
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.OTG_PATH
|
||||
import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_STORAGE
|
||||
import com.simplemobiletools.commons.helpers.REAL_FILE_PATH
|
||||
import com.simplemobiletools.commons.helpers.isNougatPlus
|
||||
import com.simplemobiletools.commons.models.FileDirItem
|
||||
import com.simplemobiletools.gallery.pro.BuildConfig
|
||||
import com.simplemobiletools.gallery.pro.R
|
||||
import com.simplemobiletools.gallery.pro.adapters.FiltersAdapter
|
||||
import com.simplemobiletools.gallery.pro.dialogs.OtherAspectRatioDialog
|
||||
|
@ -45,6 +48,7 @@ import kotlinx.android.synthetic.main.activity_edit.*
|
|||
import kotlinx.android.synthetic.main.bottom_actions_aspect_ratio.*
|
||||
import kotlinx.android.synthetic.main.bottom_editor_actions_filter.*
|
||||
import kotlinx.android.synthetic.main.bottom_editor_crop_rotate_actions.*
|
||||
import kotlinx.android.synthetic.main.bottom_editor_draw_actions.*
|
||||
import kotlinx.android.synthetic.main.bottom_editor_primary_actions.*
|
||||
import java.io.*
|
||||
|
||||
|
@ -55,6 +59,7 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
}
|
||||
}
|
||||
|
||||
private val TEMP_FOLDER_NAME = "images"
|
||||
private val ASPECT_X = "aspectX"
|
||||
private val ASPECT_Y = "aspectY"
|
||||
private val CROP = "crop"
|
||||
|
@ -63,6 +68,7 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
private val PRIMARY_ACTION_NONE = 0
|
||||
private val PRIMARY_ACTION_FILTER = 1
|
||||
private val PRIMARY_ACTION_CROP_ROTATE = 2
|
||||
private val PRIMARY_ACTION_DRAW = 3
|
||||
|
||||
private val CROP_ROTATE_NONE = 0
|
||||
private val CROP_ROTATE_ASPECT_RATIO = 1
|
||||
|
@ -71,15 +77,17 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
private lateinit var saveUri: Uri
|
||||
private var resizeWidth = 0
|
||||
private var resizeHeight = 0
|
||||
private var drawColor = 0
|
||||
private var lastOtherAspectRatio: Pair<Int, Int>? = null
|
||||
private var currPrimaryAction = PRIMARY_ACTION_NONE
|
||||
private var currCropRotateAction = CROP_ROTATE_NONE
|
||||
private var currAspectRatio = ASPECT_RATIO_FREE
|
||||
private var isCropIntent = false
|
||||
private var isEditingWithThirdParty = false
|
||||
private var isSharingBitmap = false
|
||||
private var wasDrawCanvasPositioned = false
|
||||
private var oldExif: ExifInterface? = null
|
||||
|
||||
private var initialBitmap: Bitmap? = null
|
||||
private var filterInitialBitmap: Bitmap? = null
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
@ -95,6 +103,33 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
isEditingWithThirdParty = false
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
super.onStop()
|
||||
if (isEditingWithThirdParty) {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||
menuInflater.inflate(R.menu.menu_editor, menu)
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
when (item.itemId) {
|
||||
R.id.save_as -> saveImage()
|
||||
R.id.edit -> editWith()
|
||||
R.id.share -> shareImage()
|
||||
else -> return super.onOptionsItemSelected(item)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
private fun initEditActivity() {
|
||||
if (intent.data == null) {
|
||||
toast(R.string.invalid_image_path)
|
||||
|
@ -150,35 +185,10 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
updateAspectRatio(config.lastEditorCropAspectRatio)
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
isEditingWithThirdParty = false
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
super.onStop()
|
||||
if (isEditingWithThirdParty) {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||
menuInflater.inflate(R.menu.menu_editor, menu)
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
when (item.itemId) {
|
||||
R.id.save_as -> saveImage()
|
||||
R.id.edit -> editWith()
|
||||
else -> return super.onOptionsItemSelected(item)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
private fun loadDefaultImageView() {
|
||||
default_image_view.beVisible()
|
||||
crop_image_view.beGone()
|
||||
editor_draw_canvas.beGone()
|
||||
|
||||
val options = RequestOptions()
|
||||
.skipMemoryCache(true)
|
||||
|
@ -193,21 +203,22 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
|
||||
override fun onResourceReady(bitmap: Bitmap?, model: Any?, target: Target<Bitmap>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
|
||||
val currentFilter = getFiltersAdapter()?.getCurrentFilter()
|
||||
if (initialBitmap == null) {
|
||||
if (filterInitialBitmap == null) {
|
||||
loadCropImageView()
|
||||
bottomCropRotateClicked()
|
||||
}
|
||||
|
||||
if (initialBitmap != null && currentFilter != null && currentFilter.filter.name != getString(R.string.none)) {
|
||||
if (filterInitialBitmap != null && currentFilter != null && currentFilter.filter.name != getString(R.string.none)) {
|
||||
default_image_view.onGlobalLayout {
|
||||
applyFilter(currentFilter)
|
||||
}
|
||||
} else {
|
||||
initialBitmap = bitmap
|
||||
filterInitialBitmap = bitmap
|
||||
}
|
||||
|
||||
if (isCropIntent) {
|
||||
bottom_primary_filter.beGone()
|
||||
bottom_primary_draw.beGone()
|
||||
}
|
||||
|
||||
return false
|
||||
|
@ -217,6 +228,7 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
|
||||
private fun loadCropImageView() {
|
||||
default_image_view.beGone()
|
||||
editor_draw_canvas.beGone()
|
||||
crop_image_view.apply {
|
||||
beVisible()
|
||||
setOnCropImageCompleteListener(this@EditActivity)
|
||||
|
@ -231,6 +243,52 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
}
|
||||
}
|
||||
|
||||
private fun loadDrawCanvas() {
|
||||
default_image_view.beGone()
|
||||
crop_image_view.beGone()
|
||||
editor_draw_canvas.beVisible()
|
||||
|
||||
if (!wasDrawCanvasPositioned) {
|
||||
wasDrawCanvasPositioned = true
|
||||
editor_draw_canvas.onGlobalLayout {
|
||||
Thread {
|
||||
fillCanvasBackground()
|
||||
}.start()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun fillCanvasBackground() {
|
||||
val size = Point()
|
||||
windowManager.defaultDisplay.getSize(size)
|
||||
val options = RequestOptions()
|
||||
.format(DecodeFormat.PREFER_ARGB_8888)
|
||||
.skipMemoryCache(true)
|
||||
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
||||
.fitCenter()
|
||||
|
||||
try {
|
||||
val builder = Glide.with(applicationContext)
|
||||
.asBitmap()
|
||||
.load(uri)
|
||||
.apply(options)
|
||||
.into(editor_draw_canvas.width, editor_draw_canvas.height)
|
||||
|
||||
val bitmap = builder.get()
|
||||
runOnUiThread {
|
||||
editor_draw_canvas.apply {
|
||||
updateBackgroundBitmap(bitmap)
|
||||
layoutParams.width = bitmap.width
|
||||
layoutParams.height = bitmap.height
|
||||
y = (height - bitmap.height) / 2f
|
||||
requestLayout()
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
showErrorToast(e)
|
||||
}
|
||||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.N)
|
||||
private fun saveImage() {
|
||||
var inputStream: InputStream? = null
|
||||
|
@ -246,6 +304,18 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
|
||||
if (crop_image_view.isVisible()) {
|
||||
crop_image_view.getCroppedImageAsync()
|
||||
} else if (editor_draw_canvas.isVisible()) {
|
||||
val bitmap = editor_draw_canvas.getBitmap()
|
||||
if (saveUri.scheme == "file") {
|
||||
SaveAsDialog(this, saveUri.path, true) {
|
||||
saveBitmapToFile(bitmap, it, true)
|
||||
}
|
||||
} else if (saveUri.scheme == "content") {
|
||||
val filePathGetter = getNewFilePath()
|
||||
SaveAsDialog(this, filePathGetter.first, filePathGetter.second) {
|
||||
saveBitmapToFile(bitmap, it, true)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
val currentFilter = getFiltersAdapter()?.getCurrentFilter() ?: return
|
||||
val filePathGetter = getNewFilePath()
|
||||
|
@ -271,12 +341,77 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
}
|
||||
}
|
||||
|
||||
private fun shareImage() {
|
||||
Thread {
|
||||
when {
|
||||
default_image_view.isVisible() -> {
|
||||
val currentFilter = getFiltersAdapter()?.getCurrentFilter()
|
||||
if (currentFilter == null) {
|
||||
toast(R.string.unknown_error_occurred)
|
||||
}
|
||||
|
||||
val originalBitmap = Glide.with(applicationContext).asBitmap().load(uri).submit(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL).get()
|
||||
currentFilter!!.filter.processFilter(originalBitmap)
|
||||
shareBitmap(originalBitmap)
|
||||
}
|
||||
crop_image_view.isVisible() -> {
|
||||
isSharingBitmap = true
|
||||
runOnUiThread {
|
||||
crop_image_view.getCroppedImageAsync()
|
||||
}
|
||||
}
|
||||
editor_draw_canvas.isVisible() -> shareBitmap(editor_draw_canvas.getBitmap())
|
||||
}
|
||||
}.start()
|
||||
}
|
||||
|
||||
private fun getTempImagePath(bitmap: Bitmap, callback: (path: String?) -> Unit) {
|
||||
val bytes = ByteArrayOutputStream()
|
||||
bitmap.compress(Bitmap.CompressFormat.PNG, 0, bytes)
|
||||
|
||||
val folder = File(cacheDir, TEMP_FOLDER_NAME)
|
||||
if (!folder.exists()) {
|
||||
if (!folder.mkdir()) {
|
||||
callback(null)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
val filename = applicationContext.getFilenameFromContentUri(saveUri) ?: "tmp.jpg"
|
||||
val newPath = "$folder/$filename"
|
||||
val fileDirItem = FileDirItem(newPath, filename)
|
||||
getFileOutputStream(fileDirItem, true) {
|
||||
if (it != null) {
|
||||
try {
|
||||
it.write(bytes.toByteArray())
|
||||
callback(newPath)
|
||||
} catch (e: Exception) {
|
||||
} finally {
|
||||
it.close()
|
||||
}
|
||||
} else {
|
||||
callback("")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun shareBitmap(bitmap: Bitmap) {
|
||||
getTempImagePath(bitmap) {
|
||||
if (it != null) {
|
||||
sharePathIntent(it, BuildConfig.APPLICATION_ID)
|
||||
} else {
|
||||
toast(R.string.unknown_error_occurred)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun getFiltersAdapter() = bottom_actions_filter_list.adapter as? FiltersAdapter
|
||||
|
||||
private fun setupBottomActions() {
|
||||
setupPrimaryActionButtons()
|
||||
setupCropRotateActionButtons()
|
||||
setupAspectRatioButtons()
|
||||
setupDrawButtons()
|
||||
}
|
||||
|
||||
private fun setupPrimaryActionButtons() {
|
||||
|
@ -287,6 +422,10 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
bottom_primary_crop_rotate.setOnClickListener {
|
||||
bottomCropRotateClicked()
|
||||
}
|
||||
|
||||
bottom_primary_draw.setOnClickListener {
|
||||
bottomDrawClicked()
|
||||
}
|
||||
}
|
||||
|
||||
private fun bottomFilterClicked() {
|
||||
|
@ -307,6 +446,15 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
updatePrimaryActionButtons()
|
||||
}
|
||||
|
||||
private fun bottomDrawClicked() {
|
||||
currPrimaryAction = if (currPrimaryAction == PRIMARY_ACTION_DRAW) {
|
||||
PRIMARY_ACTION_NONE
|
||||
} else {
|
||||
PRIMARY_ACTION_DRAW
|
||||
}
|
||||
updatePrimaryActionButtons()
|
||||
}
|
||||
|
||||
private fun setupCropRotateActionButtons() {
|
||||
bottom_rotate.setOnClickListener {
|
||||
crop_image_view.rotateImage(90)
|
||||
|
@ -368,26 +516,60 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
updateAspectRatioButtons()
|
||||
}
|
||||
|
||||
private fun setupDrawButtons() {
|
||||
updateDrawColor(config.lastEditorDrawColor)
|
||||
bottom_draw_width.progress = config.lastEditorBrushSize
|
||||
updateBrushSize(config.lastEditorBrushSize)
|
||||
|
||||
bottom_draw_color_clickable.setOnClickListener {
|
||||
ColorPickerDialog(this, drawColor) { wasPositivePressed, color ->
|
||||
if (wasPositivePressed) {
|
||||
updateDrawColor(color)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bottom_draw_width.onSeekBarChangeListener {
|
||||
config.lastEditorBrushSize = it
|
||||
updateBrushSize(it)
|
||||
}
|
||||
|
||||
bottom_draw_undo.setOnClickListener {
|
||||
editor_draw_canvas.undo()
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateBrushSize(percent: Int) {
|
||||
editor_draw_canvas.updateBrushSize(percent)
|
||||
val scale = Math.max(0.03f, percent / 100f)
|
||||
bottom_draw_color.scaleX = scale
|
||||
bottom_draw_color.scaleY = scale
|
||||
}
|
||||
|
||||
private fun updatePrimaryActionButtons() {
|
||||
if (crop_image_view.isGone() && currPrimaryAction == PRIMARY_ACTION_CROP_ROTATE) {
|
||||
loadCropImageView()
|
||||
} else if (default_image_view.isGone() && currPrimaryAction == PRIMARY_ACTION_FILTER) {
|
||||
loadDefaultImageView()
|
||||
} else if (editor_draw_canvas.isGone() && currPrimaryAction == PRIMARY_ACTION_DRAW) {
|
||||
loadDrawCanvas()
|
||||
}
|
||||
|
||||
arrayOf(bottom_primary_filter, bottom_primary_crop_rotate).forEach {
|
||||
arrayOf(bottom_primary_filter, bottom_primary_crop_rotate, bottom_primary_draw).forEach {
|
||||
it.applyColorFilter(Color.WHITE)
|
||||
}
|
||||
|
||||
val currentPrimaryActionButton = when (currPrimaryAction) {
|
||||
PRIMARY_ACTION_FILTER -> bottom_primary_filter
|
||||
PRIMARY_ACTION_CROP_ROTATE -> bottom_primary_crop_rotate
|
||||
PRIMARY_ACTION_DRAW -> bottom_primary_draw
|
||||
else -> null
|
||||
}
|
||||
|
||||
currentPrimaryActionButton?.applyColorFilter(config.primaryColor)
|
||||
bottom_editor_filter_actions.beVisibleIf(currPrimaryAction == PRIMARY_ACTION_FILTER)
|
||||
bottom_editor_crop_rotate_actions.beVisibleIf(currPrimaryAction == PRIMARY_ACTION_CROP_ROTATE)
|
||||
bottom_editor_draw_actions.beVisibleIf(currPrimaryAction == PRIMARY_ACTION_DRAW)
|
||||
|
||||
if (currPrimaryAction == PRIMARY_ACTION_FILTER && bottom_actions_filter_list.adapter == null) {
|
||||
Thread {
|
||||
|
@ -436,7 +618,7 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
}
|
||||
|
||||
private fun applyFilter(filterItem: FilterItem) {
|
||||
val newBitmap = Bitmap.createBitmap(initialBitmap)
|
||||
val newBitmap = Bitmap.createBitmap(filterInitialBitmap)
|
||||
default_image_view.setImageBitmap(filterItem.filter.processFilter(newBitmap))
|
||||
}
|
||||
|
||||
|
@ -490,6 +672,13 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
primaryActionView?.applyColorFilter(config.primaryColor)
|
||||
}
|
||||
|
||||
private fun updateDrawColor(color: Int) {
|
||||
drawColor = color
|
||||
bottom_draw_color.applyColorFilter(color)
|
||||
config.lastEditorDrawColor = color
|
||||
editor_draw_canvas.updateColor(color)
|
||||
}
|
||||
|
||||
private fun resizeImage() {
|
||||
val point = getAreaSize()
|
||||
if (point == null) {
|
||||
|
@ -525,15 +714,22 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
|
||||
override fun onCropImageComplete(view: CropImageView, result: CropImageView.CropResult) {
|
||||
if (result.error == null) {
|
||||
val bitmap = result.bitmap
|
||||
if (isSharingBitmap) {
|
||||
isSharingBitmap = false
|
||||
shareBitmap(bitmap)
|
||||
return
|
||||
}
|
||||
|
||||
if (isCropIntent) {
|
||||
if (saveUri.scheme == "file") {
|
||||
saveBitmapToFile(result.bitmap, saveUri.path, true)
|
||||
saveBitmapToFile(bitmap, saveUri.path, true)
|
||||
} else {
|
||||
var inputStream: InputStream? = null
|
||||
var outputStream: OutputStream? = null
|
||||
try {
|
||||
val stream = ByteArrayOutputStream()
|
||||
result.bitmap.compress(CompressFormat.JPEG, 100, stream)
|
||||
bitmap.compress(CompressFormat.JPEG, 100, stream)
|
||||
inputStream = ByteArrayInputStream(stream.toByteArray())
|
||||
outputStream = contentResolver.openOutputStream(saveUri)
|
||||
inputStream.copyTo(outputStream)
|
||||
|
@ -551,12 +747,12 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
}
|
||||
} else if (saveUri.scheme == "file") {
|
||||
SaveAsDialog(this, saveUri.path, true) {
|
||||
saveBitmapToFile(result.bitmap, it, true)
|
||||
saveBitmapToFile(bitmap, it, true)
|
||||
}
|
||||
} else if (saveUri.scheme == "content") {
|
||||
val filePathGetter = getNewFilePath()
|
||||
SaveAsDialog(this, filePathGetter.first, filePathGetter.second) {
|
||||
saveBitmapToFile(result.bitmap, it, true)
|
||||
saveBitmapToFile(bitmap, it, true)
|
||||
}
|
||||
} else {
|
||||
toast(R.string.unknown_file_location)
|
||||
|
@ -633,7 +829,7 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
|
|||
}
|
||||
|
||||
private fun editWith() {
|
||||
openEditor(uri.toString())
|
||||
openEditor(uri.toString(), true)
|
||||
isEditingWithThirdParty = true
|
||||
}
|
||||
|
||||
|
|
|
@ -927,7 +927,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
|
|||
}
|
||||
mDirs = dirs.clone() as ArrayList<Directory>
|
||||
|
||||
if (mDirs.size > 100) {
|
||||
if (mDirs.size > 55) {
|
||||
excludeSpamFolders()
|
||||
}
|
||||
}
|
||||
|
@ -1231,6 +1231,7 @@ class MainActivity : SimpleActivity(), DirectoryOperationsListener {
|
|||
add(Release(206, R.string.release_206))
|
||||
add(Release(213, R.string.release_213))
|
||||
add(Release(217, R.string.release_217))
|
||||
add(Release(220, R.string.release_220))
|
||||
checkWhatsNew(this, BuildConfig.VERSION_CODE)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -558,7 +558,9 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
|
|||
}
|
||||
|
||||
mIsGettingMedia = true
|
||||
if (!mLoadedInitialPhotos) {
|
||||
if (mLoadedInitialPhotos) {
|
||||
startAsyncTask()
|
||||
} else {
|
||||
getCachedMedia(mPath, mIsGetVideoIntent, mIsGetImageIntent, mMediumDao) {
|
||||
if (it.isEmpty()) {
|
||||
runOnUiThread {
|
||||
|
@ -569,9 +571,6 @@ class MediaActivity : SimpleActivity(), MediaOperationsListener {
|
|||
}
|
||||
startAsyncTask()
|
||||
}
|
||||
} else {
|
||||
media_refresh_layout.isRefreshing = true
|
||||
startAsyncTask()
|
||||
}
|
||||
|
||||
mLoadedInitialPhotos = true
|
||||
|
|
|
@ -72,7 +72,7 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
|
|||
mUri = intent.data ?: return
|
||||
var filename = getFilenameFromUri(mUri!!)
|
||||
mIsFromGallery = intent.getBooleanExtra(IS_FROM_GALLERY, false)
|
||||
if (mIsFromGallery && filename.isVideoFast()) {
|
||||
if (mIsFromGallery && filename.isVideoFast() && config.openVideosOnSeparateScreen) {
|
||||
launchVideoPlayer()
|
||||
return
|
||||
}
|
||||
|
|
|
@ -42,6 +42,7 @@ class SettingsActivity : SimpleActivity() {
|
|||
setupAutoplayVideos()
|
||||
setupRememberLastVideo()
|
||||
setupLoopVideos()
|
||||
setupOpenVideosOnSeparateScreen()
|
||||
setupAnimateGifs()
|
||||
setupMaxBrightness()
|
||||
setupCropThumbnails()
|
||||
|
@ -174,6 +175,14 @@ class SettingsActivity : SimpleActivity() {
|
|||
}
|
||||
}
|
||||
|
||||
private fun setupOpenVideosOnSeparateScreen() {
|
||||
settings_open_videos_on_separate_screen.isChecked = config.openVideosOnSeparateScreen
|
||||
settings_open_videos_on_separate_screen_holder.setOnClickListener {
|
||||
settings_open_videos_on_separate_screen.toggle()
|
||||
config.openVideosOnSeparateScreen = settings_open_videos_on_separate_screen.isChecked
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupAnimateGifs() {
|
||||
settings_animate_gifs.isChecked = config.animateGifs
|
||||
settings_animate_gifs_holder.setOnClickListener {
|
||||
|
|
|
@ -5,6 +5,7 @@ import android.content.Intent
|
|||
import android.content.pm.ActivityInfo
|
||||
import android.content.res.Configuration
|
||||
import android.graphics.Color
|
||||
import android.graphics.Matrix
|
||||
import android.graphics.Point
|
||||
import android.graphics.SurfaceTexture
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
|
@ -43,19 +44,28 @@ open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListen
|
|||
private var mScreenWidth = 0
|
||||
private var mCurrTime = 0
|
||||
private var mDuration = 0
|
||||
private var mVideoSize = Point(0, 0)
|
||||
private var mSaveScale = 1f
|
||||
private var mRight = 0f
|
||||
private var mBottom = 0f
|
||||
private var mLastTouchX = 0f
|
||||
private var mLastTouchY = 0f
|
||||
private var mDragThreshold = 0f
|
||||
|
||||
private var mUri: Uri? = null
|
||||
private var mExoPlayer: SimpleExoPlayer? = null
|
||||
private var mTimerHandler = Handler()
|
||||
private var mPlayWhenReadyHandler = Handler()
|
||||
|
||||
private var mTouchDownX = 0f
|
||||
private var mTouchDownY = 0f
|
||||
private var mTouchDownTime = 0L
|
||||
private var mProgressAtDown = 0L
|
||||
private var mCloseDownThreshold = 100f
|
||||
private var mCurrZoomMode = ZOOM_MODE_NONE
|
||||
|
||||
private var mUri: Uri? = null
|
||||
private var mExoPlayer: SimpleExoPlayer? = null
|
||||
private var mVideoSize = Point(0, 0)
|
||||
private var mTimerHandler = Handler()
|
||||
private var mPlayWhenReadyHandler = Handler()
|
||||
private var mScaleDetector: ScaleGestureDetector? = null
|
||||
private var mMatrices = FloatArray(9)
|
||||
private val mMatrix = Matrix()
|
||||
|
||||
private var mIgnoreCloseDown = false
|
||||
|
||||
public override fun onCreate(savedInstanceState: Bundle?) {
|
||||
|
@ -176,7 +186,7 @@ open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListen
|
|||
}
|
||||
|
||||
video_surface.setOnTouchListener { view, event ->
|
||||
handleEvent(event)
|
||||
handleEventWithZooming(event)
|
||||
true
|
||||
}
|
||||
|
||||
|
@ -185,11 +195,11 @@ open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListen
|
|||
|
||||
if (config.allowVideoGestures) {
|
||||
video_brightness_controller.initialize(this, slide_info, true, video_player_holder) { x, y ->
|
||||
fullscreenToggled(!mIsFullscreen)
|
||||
toggleFullscreen()
|
||||
}
|
||||
|
||||
video_volume_controller.initialize(this, slide_info, false, video_player_holder) { x, y ->
|
||||
fullscreenToggled(!mIsFullscreen)
|
||||
toggleFullscreen()
|
||||
}
|
||||
} else {
|
||||
video_brightness_controller.beGone()
|
||||
|
@ -199,10 +209,11 @@ open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListen
|
|||
if (config.hideSystemUI) {
|
||||
Handler().postDelayed({
|
||||
fullscreenToggled(true)
|
||||
}, 500)
|
||||
}, HIDE_SYSTEM_UI_DELAY)
|
||||
}
|
||||
|
||||
mDragThreshold = DRAG_THRESHOLD * resources.displayMetrics.density
|
||||
mScaleDetector = ScaleGestureDetector(applicationContext, ScaleListener())
|
||||
}
|
||||
|
||||
private fun initExoPlayer() {
|
||||
|
@ -418,6 +429,10 @@ open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListen
|
|||
}
|
||||
}
|
||||
|
||||
private fun toggleFullscreen() {
|
||||
fullscreenToggled(!mIsFullscreen)
|
||||
}
|
||||
|
||||
private fun fullscreenToggled(isFullScreen: Boolean) {
|
||||
mIsFullscreen = isFullScreen
|
||||
if (isFullScreen) {
|
||||
|
@ -523,7 +538,8 @@ open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListen
|
|||
val diffX = mTouchDownX - event.x
|
||||
val diffY = mTouchDownY - event.y
|
||||
|
||||
if (config.allowDownGesture && !mIgnoreCloseDown && Math.abs(diffY) > Math.abs(diffX) && diffY < -mCloseDownThreshold) {
|
||||
val downGestureDuration = System.currentTimeMillis() - mTouchDownTime
|
||||
if (config.allowDownGesture && !mIgnoreCloseDown && Math.abs(diffY) > Math.abs(diffX) && diffY < -mCloseDownThreshold && downGestureDuration < MAX_CLOSE_DOWN_GESTURE_DURATION) {
|
||||
supportFinishAfterTransition()
|
||||
}
|
||||
|
||||
|
@ -539,8 +555,8 @@ open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListen
|
|||
togglePlayPause()
|
||||
}
|
||||
} else {
|
||||
if (System.currentTimeMillis() - mTouchDownTime < CLICK_MAX_DURATION) {
|
||||
fullscreenToggled(!mIsFullscreen)
|
||||
if (Math.abs(diffX) < CLICK_MAX_DISTANCE && Math.abs(diffY) < CLICK_MAX_DISTANCE && System.currentTimeMillis() - mTouchDownTime < CLICK_MAX_DURATION) {
|
||||
toggleFullscreen()
|
||||
}
|
||||
}
|
||||
mIsDragged = false
|
||||
|
@ -615,6 +631,151 @@ open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListen
|
|||
}.start()
|
||||
}
|
||||
|
||||
override fun onSurfaceTextureSizeChanged(surface: SurfaceTexture?, width: Int, height: Int) {
|
||||
override fun onSurfaceTextureSizeChanged(surface: SurfaceTexture?, width: Int, height: Int) {}
|
||||
|
||||
private fun handleEventWithZooming(event: MotionEvent) {
|
||||
mScaleDetector?.onTouchEvent(event)
|
||||
|
||||
mMatrix.getValues(mMatrices)
|
||||
val x = mMatrices[Matrix.MTRANS_X]
|
||||
val y = mMatrices[Matrix.MTRANS_Y]
|
||||
|
||||
when (event.actionMasked) {
|
||||
MotionEvent.ACTION_DOWN -> {
|
||||
mTouchDownTime = System.currentTimeMillis()
|
||||
mCurrZoomMode = ZOOM_MODE_DRAG
|
||||
mLastTouchX = event.x
|
||||
mLastTouchY = event.y
|
||||
|
||||
mTouchDownX = event.x
|
||||
mTouchDownY = event.y
|
||||
mProgressAtDown = mExoPlayer!!.currentPosition
|
||||
}
|
||||
MotionEvent.ACTION_UP -> {
|
||||
mCurrZoomMode = ZOOM_MODE_NONE
|
||||
val diffX = mTouchDownX - event.x
|
||||
val diffY = mTouchDownY - event.y
|
||||
|
||||
val downGestureDuration = System.currentTimeMillis() - mTouchDownTime
|
||||
if (!mIgnoreCloseDown && Math.abs(diffY) > Math.abs(diffX) && diffY < -mCloseDownThreshold && downGestureDuration < MAX_CLOSE_DOWN_GESTURE_DURATION && mSaveScale == 1f) {
|
||||
supportFinishAfterTransition()
|
||||
}
|
||||
mIgnoreCloseDown = false
|
||||
|
||||
if (mIsDragged) {
|
||||
if (mIsFullscreen) {
|
||||
arrayOf(video_curr_time, video_seekbar, video_duration).forEach {
|
||||
it.animate().alpha(0f).start()
|
||||
}
|
||||
}
|
||||
|
||||
if (!mIsPlaying) {
|
||||
togglePlayPause()
|
||||
}
|
||||
} else {
|
||||
if (Math.abs(diffX) < CLICK_MAX_DISTANCE && Math.abs(diffY) < CLICK_MAX_DISTANCE && System.currentTimeMillis() - mTouchDownTime < CLICK_MAX_DURATION) {
|
||||
toggleFullscreen()
|
||||
}
|
||||
}
|
||||
|
||||
mIsDragged = false
|
||||
}
|
||||
MotionEvent.ACTION_POINTER_DOWN -> {
|
||||
mLastTouchX = event.x
|
||||
mLastTouchY = event.y
|
||||
mCurrZoomMode = ZOOM_MODE_ZOOM
|
||||
mIgnoreCloseDown = true
|
||||
}
|
||||
MotionEvent.ACTION_MOVE -> {
|
||||
val diffX = event.x - mTouchDownX
|
||||
val diffY = event.y - mTouchDownY
|
||||
if (mSaveScale == 1f && (mIsDragged || (Math.abs(diffX) > mDragThreshold && Math.abs(diffX) > Math.abs(diffY)))) {
|
||||
if (!mIsDragged) {
|
||||
arrayOf(video_curr_time, video_seekbar, video_duration).forEach {
|
||||
it.animate().alpha(1f).start()
|
||||
}
|
||||
}
|
||||
mIgnoreCloseDown = true
|
||||
mIsDragged = true
|
||||
var percent = ((diffX / mScreenWidth) * 100).toInt()
|
||||
percent = Math.min(100, Math.max(-100, percent))
|
||||
|
||||
val skipLength = (mDuration * 1000f) * (percent / 100f)
|
||||
var newProgress = mProgressAtDown + skipLength
|
||||
newProgress = Math.max(Math.min(mExoPlayer!!.duration.toFloat(), newProgress), 0f)
|
||||
val newSeconds = (newProgress / 1000).toInt()
|
||||
setPosition(newSeconds)
|
||||
resetPlayWhenReady()
|
||||
} else if (mCurrZoomMode == ZOOM_MODE_ZOOM || mCurrZoomMode == ZOOM_MODE_DRAG && mSaveScale > MIN_VIDEO_ZOOM_SCALE) {
|
||||
var deltaX = event.x - mLastTouchX
|
||||
var deltaY = event.y - mLastTouchY
|
||||
if (y + deltaY > 0) {
|
||||
deltaY = -y
|
||||
} else if (y + deltaY < -mBottom) {
|
||||
deltaY = -(y + mBottom)
|
||||
}
|
||||
|
||||
if (x + deltaX > 0) {
|
||||
deltaX = -x
|
||||
} else if (x + deltaX < -mRight) {
|
||||
deltaX = -(x + mRight)
|
||||
}
|
||||
|
||||
mMatrix.postTranslate(deltaX, deltaY)
|
||||
mLastTouchX = event.x
|
||||
mLastTouchY = event.y
|
||||
}
|
||||
}
|
||||
MotionEvent.ACTION_POINTER_UP -> {
|
||||
mCurrZoomMode = ZOOM_MODE_NONE
|
||||
}
|
||||
}
|
||||
|
||||
video_surface.setTransform(mMatrix)
|
||||
video_surface.invalidate()
|
||||
}
|
||||
|
||||
// taken from https://github.com/Manuiq/ZoomableTextureView
|
||||
private inner class ScaleListener : ScaleGestureDetector.SimpleOnScaleGestureListener() {
|
||||
override fun onScaleBegin(detector: ScaleGestureDetector): Boolean {
|
||||
mCurrZoomMode = ZOOM_MODE_ZOOM
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onScale(detector: ScaleGestureDetector): Boolean {
|
||||
val width = video_surface.width
|
||||
val height = video_surface.height
|
||||
if (width <= 0 || height <= 0) {
|
||||
return true
|
||||
}
|
||||
|
||||
var scaleFactor = detector.scaleFactor
|
||||
val origScale = mSaveScale
|
||||
mSaveScale *= scaleFactor
|
||||
|
||||
if (mSaveScale > MAX_VIDEO_ZOOM_SCALE) {
|
||||
mSaveScale = MAX_VIDEO_ZOOM_SCALE
|
||||
scaleFactor = MAX_VIDEO_ZOOM_SCALE / origScale
|
||||
} else if (mSaveScale < MIN_VIDEO_ZOOM_SCALE) {
|
||||
mSaveScale = MIN_VIDEO_ZOOM_SCALE
|
||||
scaleFactor = MIN_VIDEO_ZOOM_SCALE / origScale
|
||||
}
|
||||
|
||||
mRight = width * mSaveScale - width
|
||||
mBottom = height * mSaveScale - height
|
||||
mMatrix.postScale(scaleFactor, scaleFactor, detector.focusX, detector.focusY)
|
||||
if (scaleFactor < 1) {
|
||||
mMatrix.getValues(mMatrices)
|
||||
val y = mMatrices[Matrix.MTRANS_Y]
|
||||
if (scaleFactor < 1) {
|
||||
if (y < -mBottom) {
|
||||
mMatrix.postTranslate(0f, -(y + mBottom))
|
||||
} else if (y > 0) {
|
||||
mMatrix.postTranslate(0f, -y)
|
||||
}
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,10 +8,7 @@ import android.content.Intent
|
|||
import android.content.pm.ActivityInfo
|
||||
import android.content.res.Configuration
|
||||
import android.database.Cursor
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.BitmapFactory
|
||||
import android.graphics.Color
|
||||
import android.graphics.Matrix
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.media.ExifInterface
|
||||
import android.net.Uri
|
||||
|
@ -26,7 +23,6 @@ import android.view.WindowManager
|
|||
import android.view.animation.DecelerateInterpolator
|
||||
import android.widget.Toast
|
||||
import androidx.viewpager.widget.ViewPager
|
||||
import com.bumptech.glide.Glide
|
||||
import com.simplemobiletools.commons.dialogs.PropertiesDialog
|
||||
import com.simplemobiletools.commons.dialogs.RenameItemDialog
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
|
@ -41,6 +37,7 @@ import com.simplemobiletools.gallery.pro.dialogs.SaveAsDialog
|
|||
import com.simplemobiletools.gallery.pro.dialogs.SlideshowDialog
|
||||
import com.simplemobiletools.gallery.pro.extensions.*
|
||||
import com.simplemobiletools.gallery.pro.fragments.PhotoFragment
|
||||
import com.simplemobiletools.gallery.pro.fragments.VideoFragment
|
||||
import com.simplemobiletools.gallery.pro.fragments.ViewPagerFragment
|
||||
import com.simplemobiletools.gallery.pro.helpers.*
|
||||
import com.simplemobiletools.gallery.pro.models.Medium
|
||||
|
@ -48,9 +45,6 @@ import com.simplemobiletools.gallery.pro.models.ThumbnailItem
|
|||
import kotlinx.android.synthetic.main.activity_medium.*
|
||||
import kotlinx.android.synthetic.main.bottom_actions.*
|
||||
import java.io.File
|
||||
import java.io.FileOutputStream
|
||||
import java.io.InputStream
|
||||
import java.io.OutputStream
|
||||
import java.util.*
|
||||
|
||||
class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, ViewPagerFragment.FragmentListener {
|
||||
|
@ -305,7 +299,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
view_pager.onGlobalLayout {
|
||||
Handler().postDelayed({
|
||||
fragmentClicked()
|
||||
}, 500)
|
||||
}, HIDE_SYSTEM_UI_DELAY)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -492,6 +486,8 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
swipeToNextMedium()
|
||||
}
|
||||
}, mSlideshowInterval * 1000L)
|
||||
} else {
|
||||
(getCurrentFragment() as? VideoFragment)!!.playVideo()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -502,7 +498,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
|
||||
private fun getMediaForSlideshow(): Boolean {
|
||||
mSlideshowMedia = mMediaFiles.filter {
|
||||
it.isImage() || (config.slideshowIncludeGIFs && it.isGIF())
|
||||
it.isImage() || (config.slideshowIncludeVideos && it.isVideo() || (config.slideshowIncludeGIFs && it.isGIF()))
|
||||
}.toMutableList()
|
||||
|
||||
if (config.slideshowRandomOrder) {
|
||||
|
@ -591,111 +587,18 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
val currPath = getCurrentPath()
|
||||
SaveAsDialog(this, currPath, false) {
|
||||
handleSAFDialog(it) {
|
||||
toast(R.string.saving)
|
||||
Thread {
|
||||
saveImageToFile(currPath, it)
|
||||
saveRotatedImageToFile(currPath, it, mRotationDegrees) {
|
||||
toast(R.string.file_saved)
|
||||
mRotationDegrees = 0
|
||||
invalidateOptionsMenu()
|
||||
}
|
||||
}.start()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun saveImageToFile(oldPath: String, newPath: String) {
|
||||
toast(R.string.saving)
|
||||
if (oldPath == newPath && oldPath.isJpg()) {
|
||||
if (tryRotateByExif(oldPath)) {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
val tmpPath = "$recycleBinPath/.tmp_${newPath.getFilenameFromPath()}"
|
||||
val tmpFileDirItem = FileDirItem(tmpPath, tmpPath.getFilenameFromPath())
|
||||
try {
|
||||
getFileOutputStream(tmpFileDirItem) {
|
||||
if (it == null) {
|
||||
toast(R.string.unknown_error_occurred)
|
||||
return@getFileOutputStream
|
||||
}
|
||||
|
||||
val oldLastModified = getCurrentFile().lastModified()
|
||||
if (oldPath.isJpg()) {
|
||||
copyFile(getCurrentPath(), tmpPath)
|
||||
saveExifRotation(ExifInterface(tmpPath), mRotationDegrees)
|
||||
} else {
|
||||
val inputstream = getFileInputStreamSync(oldPath)
|
||||
val bitmap = BitmapFactory.decodeStream(inputstream)
|
||||
saveFile(tmpPath, bitmap, it as FileOutputStream)
|
||||
}
|
||||
|
||||
if (getDoesFilePathExist(newPath)) {
|
||||
tryDeleteFileDirItem(FileDirItem(newPath, newPath.getFilenameFromPath()), false, true)
|
||||
}
|
||||
|
||||
copyFile(tmpPath, newPath)
|
||||
scanPathRecursively(newPath)
|
||||
toast(R.string.file_saved)
|
||||
|
||||
if (config.keepLastModified) {
|
||||
File(newPath).setLastModified(oldLastModified)
|
||||
updateLastModified(newPath, oldLastModified)
|
||||
}
|
||||
|
||||
it.flush()
|
||||
it.close()
|
||||
mRotationDegrees = 0
|
||||
invalidateOptionsMenu()
|
||||
|
||||
// we cannot refresh a specific image in Glide Cache, so just clear it all
|
||||
val glide = Glide.get(applicationContext)
|
||||
glide.clearDiskCache()
|
||||
runOnUiThread {
|
||||
glide.clearMemory()
|
||||
}
|
||||
}
|
||||
} catch (e: OutOfMemoryError) {
|
||||
toast(R.string.out_of_memory_error)
|
||||
} catch (e: Exception) {
|
||||
showErrorToast(e)
|
||||
} finally {
|
||||
tryDeleteFileDirItem(tmpFileDirItem, false, true)
|
||||
}
|
||||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.N)
|
||||
private fun tryRotateByExif(path: String): Boolean {
|
||||
return try {
|
||||
if (saveImageRotation(path, mRotationDegrees)) {
|
||||
mRotationDegrees = 0
|
||||
invalidateOptionsMenu()
|
||||
toast(R.string.file_saved)
|
||||
true
|
||||
} else {
|
||||
false
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
showErrorToast(e)
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
private fun copyFile(source: String, destination: String) {
|
||||
var inputStream: InputStream? = null
|
||||
var out: OutputStream? = null
|
||||
try {
|
||||
out = getFileOutputStreamSync(destination, source.getMimeType())
|
||||
inputStream = getFileInputStreamSync(source)
|
||||
inputStream?.copyTo(out!!)
|
||||
} finally {
|
||||
inputStream?.close()
|
||||
out?.close()
|
||||
}
|
||||
}
|
||||
|
||||
private fun saveFile(path: String, bitmap: Bitmap, out: FileOutputStream) {
|
||||
val matrix = Matrix()
|
||||
matrix.postRotate(mRotationDegrees.toFloat())
|
||||
val bmp = Bitmap.createBitmap(bitmap, 0, 0, bitmap.width, bitmap.height, matrix, true)
|
||||
bmp.compress(path.getCompressionFormat(), 90, out)
|
||||
}
|
||||
|
||||
private fun isShowHiddenFlagNeeded(): Boolean {
|
||||
val file = File(mPath)
|
||||
if (file.isHidden) {
|
||||
|
@ -1160,8 +1063,6 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
|
||||
private fun getCurrentPath() = getCurrentMedium()?.path ?: ""
|
||||
|
||||
private fun getCurrentFile() = File(getCurrentPath())
|
||||
|
||||
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}
|
||||
|
||||
override fun onPageSelected(position: Int) {
|
||||
|
|
|
@ -1,11 +1,7 @@
|
|||
package com.simplemobiletools.gallery.pro.adapters
|
||||
|
||||
import android.content.ContentProviderOperation
|
||||
import android.media.ExifInterface
|
||||
import android.media.MediaMetadataRetriever
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.provider.MediaStore
|
||||
import android.view.Menu
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
|
@ -32,7 +28,6 @@ import com.simplemobiletools.gallery.pro.models.ThumbnailItem
|
|||
import com.simplemobiletools.gallery.pro.models.ThumbnailSection
|
||||
import kotlinx.android.synthetic.main.photo_video_item_grid.view.*
|
||||
import kotlinx.android.synthetic.main.thumbnail_section.view.*
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
|
||||
class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList<ThumbnailItem>, val listener: MediaOperationsListener?, val isAGetIntent: Boolean,
|
||||
|
@ -41,7 +36,6 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList<Thumbnai
|
|||
|
||||
private val INSTANT_LOAD_DURATION = 2000L
|
||||
private val IMAGE_LOAD_DELAY = 100L
|
||||
private val BATCH_SIZE = 100
|
||||
private val ITEM_SECTION = 0
|
||||
private val ITEM_MEDIUM = 1
|
||||
|
||||
|
@ -142,6 +136,9 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList<Thumbnai
|
|||
R.id.cab_remove_from_favorites -> toggleFavorites(false)
|
||||
R.id.cab_restore_recycle_bin_files -> restoreFiles()
|
||||
R.id.cab_share -> shareMedia()
|
||||
R.id.cab_rotate_right -> rotateSelection(90)
|
||||
R.id.cab_rotate_left -> rotateSelection(270)
|
||||
R.id.cab_rotate_one_eighty -> rotateSelection(180)
|
||||
R.id.cab_copy_to -> copyMoveTo(true)
|
||||
R.id.cab_move_to -> moveFilesTo()
|
||||
R.id.cab_select_all -> selectAll()
|
||||
|
@ -278,6 +275,25 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList<Thumbnai
|
|||
}
|
||||
}
|
||||
|
||||
private fun rotateSelection(degrees: Int) {
|
||||
activity.toast(R.string.saving)
|
||||
Thread {
|
||||
val paths = getSelectedPaths()
|
||||
var fileCnt = paths.size
|
||||
paths.forEach {
|
||||
activity.saveRotatedImageToFile(it, it, degrees) {
|
||||
fileCnt--
|
||||
if (fileCnt == 0) {
|
||||
activity.runOnUiThread {
|
||||
listener?.refreshItems()
|
||||
finishActMode()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}.start()
|
||||
}
|
||||
|
||||
private fun moveFilesTo() {
|
||||
activity.handleDeletePasswordProtection {
|
||||
copyMoveTo(false)
|
||||
|
@ -312,56 +328,10 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList<Thumbnai
|
|||
}
|
||||
|
||||
private fun fixDateTaken() {
|
||||
activity.toast(R.string.fixing)
|
||||
Thread {
|
||||
try {
|
||||
var didUpdateFile = false
|
||||
val operations = ArrayList<ContentProviderOperation>()
|
||||
val mediumDao = activity.galleryDB.MediumDao()
|
||||
val paths = getSelectedPaths()
|
||||
for (path in paths) {
|
||||
val dateTime = ExifInterface(path).getAttribute(ExifInterface.TAG_DATETIME_ORIGINAL)
|
||||
?: ExifInterface(path).getAttribute(ExifInterface.TAG_DATETIME) ?: continue
|
||||
|
||||
// some formats contain a "T" in the middle, some don't
|
||||
// sample dates: 2015-07-26T14:55:23, 2018:09:05 15:09:05
|
||||
val t = if (dateTime.substring(10, 11) == "T") "\'T\'" else " "
|
||||
val separator = dateTime.substring(4, 5)
|
||||
val format = "yyyy${separator}MM${separator}dd${t}kk:mm:ss"
|
||||
val formatter = SimpleDateFormat(format, Locale.getDefault())
|
||||
val timestamp = formatter.parse(dateTime).time
|
||||
|
||||
val uri = activity.getFileUri(path)
|
||||
ContentProviderOperation.newUpdate(uri).apply {
|
||||
val selection = "${MediaStore.Images.Media.DATA} = ?"
|
||||
val selectionArgs = arrayOf(path)
|
||||
withSelection(selection, selectionArgs)
|
||||
withValue(MediaStore.Images.Media.DATE_TAKEN, timestamp)
|
||||
operations.add(build())
|
||||
}
|
||||
|
||||
if (operations.size % BATCH_SIZE == 0) {
|
||||
activity.contentResolver.applyBatch(MediaStore.AUTHORITY, operations)
|
||||
operations.clear()
|
||||
}
|
||||
|
||||
mediumDao.updateFavoriteDateTaken(path, timestamp)
|
||||
didUpdateFile = true
|
||||
}
|
||||
|
||||
val resultSize = activity.contentResolver.applyBatch(MediaStore.AUTHORITY, operations).size
|
||||
if (resultSize == 0) {
|
||||
didUpdateFile = false
|
||||
activity.rescanPaths(paths)
|
||||
}
|
||||
|
||||
activity.toast(if (didUpdateFile) R.string.dates_fixed_successfully else R.string.unknown_error_occurred)
|
||||
activity.runOnUiThread {
|
||||
listener?.refreshItems()
|
||||
finishActMode()
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
activity.showErrorToast(e)
|
||||
activity.fixDateTaken(getSelectedPaths()) {
|
||||
listener?.refreshItems()
|
||||
finishActMode()
|
||||
}
|
||||
}.start()
|
||||
}
|
||||
|
@ -515,13 +485,4 @@ class MediaAdapter(activity: BaseSimpleActivity, var media: MutableList<Thumbnai
|
|||
thumbnail_section.setTextColor(textColor)
|
||||
}
|
||||
}
|
||||
|
||||
private fun getFormattedVideoLength(medium: Medium): String {
|
||||
if (medium.isVideo()) {
|
||||
val retriever = MediaMetadataRetriever()
|
||||
retriever.setDataSource(medium.path)
|
||||
return Math.round(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION).toInt() / 1000f).getFormattedDuration()
|
||||
}
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,6 +28,11 @@ class SlideshowDialog(val activity: BaseSimpleActivity, val callback: () -> Unit
|
|||
activity.hideKeyboard(v)
|
||||
}
|
||||
|
||||
include_videos_holder.setOnClickListener {
|
||||
interval_value.clearFocus()
|
||||
include_videos.toggle()
|
||||
}
|
||||
|
||||
include_gifs_holder.setOnClickListener {
|
||||
interval_value.clearFocus()
|
||||
include_gifs.toggle()
|
||||
|
@ -74,6 +79,7 @@ class SlideshowDialog(val activity: BaseSimpleActivity, val callback: () -> Unit
|
|||
val config = activity.config
|
||||
view.apply {
|
||||
interval_value.setText(config.slideshowInterval.toString())
|
||||
include_videos.isChecked = config.slideshowIncludeVideos
|
||||
include_gifs.isChecked = config.slideshowIncludeGIFs
|
||||
random_order.isChecked = config.slideshowRandomOrder
|
||||
use_fade.isChecked = config.slideshowUseFade
|
||||
|
@ -89,6 +95,7 @@ class SlideshowDialog(val activity: BaseSimpleActivity, val callback: () -> Unit
|
|||
|
||||
activity.config.apply {
|
||||
slideshowInterval = interval.toInt()
|
||||
slideshowIncludeVideos = view.include_videos.isChecked
|
||||
slideshowIncludeGIFs = view.include_gifs.isChecked
|
||||
slideshowRandomOrder = view.random_order.isChecked
|
||||
slideshowUseFade = view.use_fade.isChecked
|
||||
|
|
|
@ -1,11 +1,19 @@
|
|||
package com.simplemobiletools.gallery.pro.extensions
|
||||
|
||||
import android.annotation.TargetApi
|
||||
import android.app.Activity
|
||||
import android.content.ContentProviderOperation
|
||||
import android.content.Intent
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.BitmapFactory
|
||||
import android.graphics.Matrix
|
||||
import android.media.ExifInterface
|
||||
import android.os.Build
|
||||
import android.provider.MediaStore
|
||||
import android.util.DisplayMetrics
|
||||
import android.view.View
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.bumptech.glide.Glide
|
||||
import com.simplemobiletools.commons.activities.BaseSimpleActivity
|
||||
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
|
@ -19,9 +27,12 @@ import com.simplemobiletools.gallery.pro.dialogs.PickDirectoryDialog
|
|||
import com.simplemobiletools.gallery.pro.helpers.NOMEDIA
|
||||
import com.simplemobiletools.gallery.pro.helpers.RECYCLE_BIN
|
||||
import com.simplemobiletools.gallery.pro.interfaces.MediumDao
|
||||
import com.squareup.picasso.Picasso
|
||||
import java.io.File
|
||||
import java.io.FileOutputStream
|
||||
import java.io.InputStream
|
||||
import java.io.OutputStream
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
|
||||
fun Activity.sharePath(path: String) {
|
||||
|
@ -48,8 +59,8 @@ fun Activity.openPath(path: String, forceChooser: Boolean) {
|
|||
openPathIntent(path, forceChooser, BuildConfig.APPLICATION_ID)
|
||||
}
|
||||
|
||||
fun Activity.openEditor(path: String) {
|
||||
openEditorIntent(path, BuildConfig.APPLICATION_ID)
|
||||
fun Activity.openEditor(path: String, forceChooser: Boolean = false) {
|
||||
openEditorIntent(path, forceChooser, BuildConfig.APPLICATION_ID)
|
||||
}
|
||||
|
||||
fun Activity.launchCamera() {
|
||||
|
@ -70,7 +81,7 @@ fun SimpleActivity.launchAbout() {
|
|||
FAQItem(R.string.faq_1_title, R.string.faq_1_text),
|
||||
FAQItem(R.string.faq_2_title, R.string.faq_2_text),
|
||||
FAQItem(R.string.faq_3_title, R.string.faq_3_text),
|
||||
FAQItem(R.string.faq_4_title, R.string.faq_4_text_old),
|
||||
FAQItem(R.string.faq_4_title, R.string.faq_4_text),
|
||||
FAQItem(R.string.faq_5_title, R.string.faq_5_text),
|
||||
FAQItem(R.string.faq_6_title, R.string.faq_6_text),
|
||||
FAQItem(R.string.faq_7_title, R.string.faq_7_text),
|
||||
|
@ -233,6 +244,7 @@ fun BaseSimpleActivity.restoreRecycleBinPath(path: String, callback: () -> Unit)
|
|||
|
||||
fun BaseSimpleActivity.restoreRecycleBinPaths(paths: ArrayList<String>, mediumDao: MediumDao = galleryDB.MediumDao(), callback: () -> Unit) {
|
||||
Thread {
|
||||
val newPaths = ArrayList<String>()
|
||||
paths.forEach {
|
||||
val source = it
|
||||
val destination = it.removePrefix(recycleBinPath)
|
||||
|
@ -246,6 +258,7 @@ fun BaseSimpleActivity.restoreRecycleBinPaths(paths: ArrayList<String>, mediumDa
|
|||
if (File(source).length() == File(destination).length()) {
|
||||
mediumDao.updateDeleted(destination.removePrefix(recycleBinPath), 0, "$RECYCLE_BIN$destination")
|
||||
}
|
||||
newPaths.add(destination)
|
||||
} catch (e: Exception) {
|
||||
showErrorToast(e)
|
||||
} finally {
|
||||
|
@ -257,6 +270,8 @@ fun BaseSimpleActivity.restoreRecycleBinPaths(paths: ArrayList<String>, mediumDa
|
|||
runOnUiThread {
|
||||
callback()
|
||||
}
|
||||
|
||||
fixDateTaken(newPaths)
|
||||
}.start()
|
||||
}
|
||||
|
||||
|
@ -305,3 +320,156 @@ fun Activity.hasNavBar(): Boolean {
|
|||
|
||||
return (realDisplayMetrics.widthPixels - displayMetrics.widthPixels > 0) || (realDisplayMetrics.heightPixels - displayMetrics.heightPixels > 0)
|
||||
}
|
||||
|
||||
fun Activity.fixDateTaken(paths: ArrayList<String>, callback: (() -> Unit)? = null) {
|
||||
val BATCH_SIZE = 50
|
||||
toast(R.string.fixing)
|
||||
try {
|
||||
var didUpdateFile = false
|
||||
val operations = ArrayList<ContentProviderOperation>()
|
||||
val mediumDao = galleryDB.MediumDao()
|
||||
for (path in paths) {
|
||||
val dateTime = ExifInterface(path).getAttribute(ExifInterface.TAG_DATETIME_ORIGINAL)
|
||||
?: ExifInterface(path).getAttribute(ExifInterface.TAG_DATETIME) ?: continue
|
||||
|
||||
// some formats contain a "T" in the middle, some don't
|
||||
// sample dates: 2015-07-26T14:55:23, 2018:09:05 15:09:05
|
||||
val t = if (dateTime.substring(10, 11) == "T") "\'T\'" else " "
|
||||
val separator = dateTime.substring(4, 5)
|
||||
val format = "yyyy${separator}MM${separator}dd${t}kk:mm:ss"
|
||||
val formatter = SimpleDateFormat(format, Locale.getDefault())
|
||||
val timestamp = formatter.parse(dateTime).time
|
||||
|
||||
val uri = getFileUri(path)
|
||||
ContentProviderOperation.newUpdate(uri).apply {
|
||||
val selection = "${MediaStore.Images.Media.DATA} = ?"
|
||||
val selectionArgs = arrayOf(path)
|
||||
withSelection(selection, selectionArgs)
|
||||
withValue(MediaStore.Images.Media.DATE_TAKEN, timestamp)
|
||||
operations.add(build())
|
||||
}
|
||||
|
||||
if (operations.size % BATCH_SIZE == 0) {
|
||||
contentResolver.applyBatch(MediaStore.AUTHORITY, operations)
|
||||
operations.clear()
|
||||
}
|
||||
|
||||
mediumDao.updateFavoriteDateTaken(path, timestamp)
|
||||
didUpdateFile = true
|
||||
}
|
||||
|
||||
val resultSize = contentResolver.applyBatch(MediaStore.AUTHORITY, operations).size
|
||||
if (resultSize == 0) {
|
||||
didUpdateFile = false
|
||||
rescanPaths(paths)
|
||||
}
|
||||
|
||||
toast(if (didUpdateFile) R.string.dates_fixed_successfully else R.string.unknown_error_occurred)
|
||||
runOnUiThread {
|
||||
callback?.invoke()
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
showErrorToast(e)
|
||||
}
|
||||
}
|
||||
|
||||
fun BaseSimpleActivity.saveRotatedImageToFile(oldPath: String, newPath: String, degrees: Int, callback: () -> Unit) {
|
||||
if (oldPath == newPath && oldPath.isJpg()) {
|
||||
if (tryRotateByExif(oldPath, degrees, callback)) {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
val tmpPath = "$recycleBinPath/.tmp_${newPath.getFilenameFromPath()}"
|
||||
val tmpFileDirItem = FileDirItem(tmpPath, tmpPath.getFilenameFromPath())
|
||||
try {
|
||||
getFileOutputStream(tmpFileDirItem) {
|
||||
if (it == null) {
|
||||
toast(R.string.unknown_error_occurred)
|
||||
return@getFileOutputStream
|
||||
}
|
||||
|
||||
val oldLastModified = File(oldPath).lastModified()
|
||||
if (oldPath.isJpg()) {
|
||||
copyFile(oldPath, tmpPath)
|
||||
saveExifRotation(ExifInterface(tmpPath), degrees)
|
||||
} else {
|
||||
val inputstream = getFileInputStreamSync(oldPath)
|
||||
val bitmap = BitmapFactory.decodeStream(inputstream)
|
||||
saveFile(tmpPath, bitmap, it as FileOutputStream, degrees)
|
||||
}
|
||||
|
||||
if (getDoesFilePathExist(newPath)) {
|
||||
tryDeleteFileDirItem(FileDirItem(newPath, newPath.getFilenameFromPath()), false, true)
|
||||
}
|
||||
|
||||
copyFile(tmpPath, newPath)
|
||||
scanPathRecursively(newPath)
|
||||
fileRotatedSuccessfully(newPath, oldLastModified)
|
||||
|
||||
it.flush()
|
||||
it.close()
|
||||
callback.invoke()
|
||||
}
|
||||
} catch (e: OutOfMemoryError) {
|
||||
toast(R.string.out_of_memory_error)
|
||||
} catch (e: Exception) {
|
||||
showErrorToast(e)
|
||||
} finally {
|
||||
tryDeleteFileDirItem(tmpFileDirItem, false, true)
|
||||
}
|
||||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.N)
|
||||
fun Activity.tryRotateByExif(path: String, degrees: Int, callback: () -> Unit): Boolean {
|
||||
return try {
|
||||
val file = File(path)
|
||||
val oldLastModified = file.lastModified()
|
||||
if (saveImageRotation(path, degrees)) {
|
||||
fileRotatedSuccessfully(path, oldLastModified)
|
||||
callback.invoke()
|
||||
toast(R.string.file_saved)
|
||||
true
|
||||
} else {
|
||||
false
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
showErrorToast(e)
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
fun Activity.fileRotatedSuccessfully(path: String, lastModified: Long) {
|
||||
if (config.keepLastModified) {
|
||||
File(path).setLastModified(lastModified)
|
||||
updateLastModified(path, lastModified)
|
||||
}
|
||||
|
||||
Picasso.get().invalidate(path.getFileKey())
|
||||
// we cannot refresh a specific image in Glide Cache, so just clear it all
|
||||
val glide = Glide.get(applicationContext)
|
||||
glide.clearDiskCache()
|
||||
runOnUiThread {
|
||||
glide.clearMemory()
|
||||
}
|
||||
}
|
||||
|
||||
fun BaseSimpleActivity.copyFile(source: String, destination: String) {
|
||||
var inputStream: InputStream? = null
|
||||
var out: OutputStream? = null
|
||||
try {
|
||||
out = getFileOutputStreamSync(destination, source.getMimeType())
|
||||
inputStream = getFileInputStreamSync(source)
|
||||
inputStream?.copyTo(out!!)
|
||||
} finally {
|
||||
inputStream?.close()
|
||||
out?.close()
|
||||
}
|
||||
}
|
||||
|
||||
fun saveFile(path: String, bitmap: Bitmap, out: FileOutputStream, degrees: Int) {
|
||||
val matrix = Matrix()
|
||||
matrix.postRotate(degrees.toFloat())
|
||||
val bmp = Bitmap.createBitmap(bitmap, 0, 0, bitmap.width, bitmap.height, matrix, true)
|
||||
bmp.compress(path.getCompressionFormat(), 90, out)
|
||||
}
|
||||
|
|
|
@ -6,9 +6,11 @@ import com.simplemobiletools.commons.helpers.OTG_PATH
|
|||
import java.io.File
|
||||
import java.io.IOException
|
||||
|
||||
fun String.getFileSignature(): ObjectKey {
|
||||
fun String.getFileSignature() = ObjectKey(getFileKey())
|
||||
|
||||
fun String.getFileKey(): String {
|
||||
val file = File(this)
|
||||
return ObjectKey("${file.absolutePath}${file.lastModified()}")
|
||||
return "${file.absolutePath}${file.lastModified()}"
|
||||
}
|
||||
|
||||
fun String.isThisOrParentIncluded(includedPaths: MutableSet<String>) = includedPaths.any { startsWith(it, true) }
|
||||
|
@ -21,6 +23,8 @@ fun String.shouldFolderBeVisible(excludedPaths: MutableSet<String>, includedPath
|
|||
false
|
||||
} else if (!showHidden && file.containsNoMedia()) {
|
||||
false
|
||||
} else if (excludedPaths.contains(this) && !includedPaths.contains(this)) {
|
||||
false
|
||||
} else if (isThisOrParentIncluded(includedPaths)) {
|
||||
true
|
||||
} else if (isThisOrParentExcluded(excludedPaths)) {
|
||||
|
|
|
@ -2,10 +2,7 @@ package com.simplemobiletools.gallery.pro.fragments
|
|||
|
||||
import android.content.Intent
|
||||
import android.content.res.Configuration
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.BitmapFactory
|
||||
import android.graphics.Color
|
||||
import android.graphics.Matrix
|
||||
import android.graphics.*
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.graphics.drawable.PictureDrawable
|
||||
import android.media.ExifInterface.*
|
||||
|
@ -106,11 +103,6 @@ class PhotoFragment : ViewPagerFragment() {
|
|||
}
|
||||
|
||||
if (context.config.allowDownGesture) {
|
||||
gif_view.setOnTouchListener { v, event ->
|
||||
handleEvent(event)
|
||||
false
|
||||
}
|
||||
|
||||
subsampling_view.setOnTouchListener { v, event ->
|
||||
if (mView.subsampling_view.scale == mOriginalSubsamplingScale) {
|
||||
handleEvent(event)
|
||||
|
@ -204,6 +196,33 @@ class PhotoFragment : ViewPagerFragment() {
|
|||
storeStateVariables()
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
super.onDestroyView()
|
||||
if (activity?.isDestroyed == false) {
|
||||
mView.subsampling_view.recycle()
|
||||
}
|
||||
mIoadZoomableViewHandler.removeCallbacksAndMessages(null)
|
||||
}
|
||||
|
||||
override fun onConfigurationChanged(newConfig: Configuration) {
|
||||
super.onConfigurationChanged(newConfig)
|
||||
|
||||
// avoid GIFs being skewed, played in wrong aspect ratio
|
||||
if (mMedium.isGIF()) {
|
||||
mView.onGlobalLayout {
|
||||
Handler().postDelayed({
|
||||
loadGif()
|
||||
}, 50)
|
||||
}
|
||||
} else {
|
||||
hideZoomableView()
|
||||
loadImage()
|
||||
}
|
||||
|
||||
initExtendedDetails()
|
||||
updateInstantSwitchWidths()
|
||||
}
|
||||
|
||||
override fun setMenuVisibility(menuVisible: Boolean) {
|
||||
super.setMenuVisibility(menuVisible)
|
||||
mIsFragmentVisible = menuVisible
|
||||
|
@ -265,6 +284,7 @@ class PhotoFragment : ViewPagerFragment() {
|
|||
}
|
||||
|
||||
private fun loadImage() {
|
||||
checkScreenDimensions()
|
||||
mImageOrientation = getImageOrientation()
|
||||
when {
|
||||
mMedium.isGIF() -> loadGif()
|
||||
|
@ -283,8 +303,13 @@ class PhotoFragment : ViewPagerFragment() {
|
|||
}
|
||||
|
||||
mView.photo_view.beGone()
|
||||
mView.gif_view.beVisible()
|
||||
mView.gif_view.setInputSource(source)
|
||||
val resolution = mMedium.path.getImageResolution() ?: Point(0, 0)
|
||||
mView.gif_view.apply {
|
||||
setInputSource(source)
|
||||
setupGIFView(resolution.x, resolution.y, mScreenWidth, mScreenHeight) {
|
||||
activity?.supportFinishAfterTransition()
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
loadBitmap()
|
||||
} catch (e: OutOfMemoryError) {
|
||||
|
@ -301,7 +326,6 @@ class PhotoFragment : ViewPagerFragment() {
|
|||
}
|
||||
|
||||
private fun loadBitmap(degrees: Int = 0) {
|
||||
checkScreenDimensions()
|
||||
var pathToLoad = if (mMedium.path.startsWith("content://")) mMedium.path else "file://${mMedium.path}"
|
||||
pathToLoad = pathToLoad.replace("%", "%25").replace("#", "%23")
|
||||
|
||||
|
@ -309,6 +333,7 @@ class PhotoFragment : ViewPagerFragment() {
|
|||
val picasso = Picasso.get()
|
||||
.load(pathToLoad)
|
||||
.centerInside()
|
||||
.stableKey(mMedium.path.getFileKey())
|
||||
.resize(mScreenWidth, mScreenHeight)
|
||||
|
||||
if (degrees != 0) {
|
||||
|
@ -537,33 +562,6 @@ class PhotoFragment : ViewPagerFragment() {
|
|||
}
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
super.onDestroyView()
|
||||
if (activity?.isDestroyed == false) {
|
||||
mView.subsampling_view.recycle()
|
||||
}
|
||||
mIoadZoomableViewHandler.removeCallbacksAndMessages(null)
|
||||
}
|
||||
|
||||
override fun onConfigurationChanged(newConfig: Configuration) {
|
||||
super.onConfigurationChanged(newConfig)
|
||||
|
||||
// avoid GIFs being skewed, played in wrong aspect ratio
|
||||
if (mMedium.isGIF()) {
|
||||
mView.onGlobalLayout {
|
||||
Handler().postDelayed({
|
||||
loadGif()
|
||||
}, 50)
|
||||
}
|
||||
} else {
|
||||
hideZoomableView()
|
||||
loadImage()
|
||||
}
|
||||
|
||||
initExtendedDetails()
|
||||
updateInstantSwitchWidths()
|
||||
}
|
||||
|
||||
private fun hideZoomableView() {
|
||||
if (context?.config?.allowZoomingImages == true) {
|
||||
mIsSubsamplingVisible = false
|
||||
|
|
|
@ -2,56 +2,131 @@ package com.simplemobiletools.gallery.pro.fragments
|
|||
|
||||
import android.content.Intent
|
||||
import android.content.res.Configuration
|
||||
import android.graphics.Matrix
|
||||
import android.graphics.Point
|
||||
import android.graphics.SurfaceTexture
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.os.Handler
|
||||
import android.util.DisplayMetrics
|
||||
import android.view.*
|
||||
import android.widget.ImageView
|
||||
import android.widget.RelativeLayout
|
||||
import android.widget.SeekBar
|
||||
import android.widget.TextView
|
||||
import com.bumptech.glide.Glide
|
||||
import com.google.android.exoplayer2.*
|
||||
import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory
|
||||
import com.google.android.exoplayer2.source.ExtractorMediaSource
|
||||
import com.google.android.exoplayer2.source.TrackGroupArray
|
||||
import com.google.android.exoplayer2.trackselection.TrackSelectionArray
|
||||
import com.google.android.exoplayer2.upstream.ContentDataSource
|
||||
import com.google.android.exoplayer2.upstream.DataSource
|
||||
import com.google.android.exoplayer2.upstream.DataSpec
|
||||
import com.google.android.exoplayer2.upstream.FileDataSource
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.gallery.pro.R
|
||||
import com.simplemobiletools.gallery.pro.activities.PanoramaVideoActivity
|
||||
import com.simplemobiletools.gallery.pro.activities.VideoActivity
|
||||
import com.simplemobiletools.gallery.pro.extensions.*
|
||||
import com.simplemobiletools.gallery.pro.helpers.MEDIUM
|
||||
import com.simplemobiletools.gallery.pro.helpers.PATH
|
||||
import com.simplemobiletools.gallery.pro.helpers.*
|
||||
import com.simplemobiletools.gallery.pro.models.Medium
|
||||
import com.simplemobiletools.gallery.pro.views.MediaSideScroll
|
||||
import kotlinx.android.synthetic.main.bottom_video_time_holder.view.*
|
||||
import kotlinx.android.synthetic.main.pager_video_item.view.*
|
||||
import java.io.File
|
||||
import java.io.FileInputStream
|
||||
|
||||
class VideoFragment : ViewPagerFragment() {
|
||||
class VideoFragment : ViewPagerFragment(), TextureView.SurfaceTextureListener, SeekBar.OnSeekBarChangeListener {
|
||||
private val PROGRESS = "progress"
|
||||
|
||||
private var mIsFullscreen = false
|
||||
private var mWasFragmentInit = false
|
||||
private var mIsPanorama = false
|
||||
private var mIsFragmentVisible = false
|
||||
private var mIsPlaying = false
|
||||
private var mIsDragged = false
|
||||
private var mWasVideoStarted = false
|
||||
private var mCurrTime = 0
|
||||
private var mDuration = 0
|
||||
private var mSaveScale = 1f
|
||||
private var mRight = 0f
|
||||
private var mBottom = 0f
|
||||
private var mLastTouchX = 0f
|
||||
private var mLastTouchY = 0f
|
||||
private var mCurrZoomMode = ZOOM_MODE_NONE
|
||||
|
||||
private var mExoPlayer: SimpleExoPlayer? = null
|
||||
private var mVideoSize = Point(0, 0)
|
||||
private var mTimerHandler = Handler()
|
||||
private var mScaleDetector: ScaleGestureDetector? = null
|
||||
private var mMatrices = FloatArray(9)
|
||||
private val mMatrix = Matrix()
|
||||
|
||||
private var mStoredShowExtendedDetails = false
|
||||
private var mStoredHideExtendedDetails = false
|
||||
private var mStoredBottomActions = true
|
||||
private var mStoredExtendedDetails = 0
|
||||
private var mStoredRememberLastVideoPosition = false
|
||||
private var mStoredLastVideoPath = ""
|
||||
private var mStoredLastVideoPosition = 0
|
||||
|
||||
private lateinit var mTimeHolder: View
|
||||
private lateinit var mBrightnessSideScroll: MediaSideScroll
|
||||
private lateinit var mVolumeSideScroll: MediaSideScroll
|
||||
|
||||
private lateinit var mView: View
|
||||
private lateinit var mMedium: Medium
|
||||
private lateinit var mConfig: Config
|
||||
private lateinit var mTextureView: TextureView
|
||||
private lateinit var mCurrTimeView: TextView
|
||||
private lateinit var mPlayPauseButton: ImageView
|
||||
private lateinit var mSeekBar: SeekBar
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||
mConfig = context!!.config
|
||||
mScaleDetector = ScaleGestureDetector(context, ScaleListener())
|
||||
mView = inflater.inflate(R.layout.pager_video_item, container, false).apply {
|
||||
instant_prev_item.setOnClickListener { listener?.goToPrevItem() }
|
||||
instant_next_item.setOnClickListener { listener?.goToNextItem() }
|
||||
video_curr_time.setOnClickListener { skip(false) }
|
||||
video_duration.setOnClickListener { skip(true) }
|
||||
video_holder.setOnClickListener { toggleFullscreen() }
|
||||
video_preview.setOnClickListener { toggleFullscreen() }
|
||||
panorama_outline.setOnClickListener { openPanorama() }
|
||||
video_play_outline.setOnClickListener { launchVideoPlayer() }
|
||||
video_play_outline.setOnClickListener {
|
||||
if (mConfig.openVideosOnSeparateScreen) {
|
||||
launchVideoPlayer()
|
||||
} else {
|
||||
togglePlayPause()
|
||||
}
|
||||
}
|
||||
|
||||
mPlayPauseButton = video_toggle_play_pause
|
||||
mPlayPauseButton.setOnClickListener {
|
||||
togglePlayPause()
|
||||
}
|
||||
|
||||
mSeekBar = video_seekbar
|
||||
mSeekBar.setOnSeekBarChangeListener(this@VideoFragment)
|
||||
// adding an empty click listener just to avoid ripple animation at toggling fullscreen
|
||||
mSeekBar.setOnClickListener { }
|
||||
|
||||
mTimeHolder = video_time_holder
|
||||
mCurrTimeView = video_curr_time
|
||||
mBrightnessSideScroll = video_brightness_controller
|
||||
mVolumeSideScroll = video_volume_controller
|
||||
mTextureView = video_surface
|
||||
|
||||
if (context.config.allowDownGesture) {
|
||||
video_preview.setOnTouchListener { v, event ->
|
||||
if (mConfig.allowDownGesture) {
|
||||
video_preview.setOnTouchListener { view, event ->
|
||||
handleEvent(event)
|
||||
false
|
||||
}
|
||||
|
||||
video_surface.setOnTouchListener { view, event ->
|
||||
handleEventWithZooming(event)
|
||||
true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -59,9 +134,20 @@ class VideoFragment : ViewPagerFragment() {
|
|||
mMedium = arguments!!.getSerializable(MEDIUM) as Medium
|
||||
Glide.with(context!!).load(mMedium.path).into(mView.video_preview)
|
||||
|
||||
// setMenuVisibility is not called at VideoActivity (third party intent)
|
||||
if (!mIsFragmentVisible && activity is VideoActivity) {
|
||||
mIsFragmentVisible = true
|
||||
}
|
||||
|
||||
mIsFullscreen = activity!!.window.decorView.systemUiVisibility and View.SYSTEM_UI_FLAG_FULLSCREEN == View.SYSTEM_UI_FLAG_FULLSCREEN
|
||||
initTimeHolder()
|
||||
checkIfPanorama()
|
||||
|
||||
mMedium.path.getVideoResolution()?.apply {
|
||||
mVideoSize.x = x
|
||||
mVideoSize.y = y
|
||||
}
|
||||
|
||||
if (mIsPanorama) {
|
||||
mView.apply {
|
||||
panorama_outline.beVisible()
|
||||
|
@ -73,8 +159,17 @@ class VideoFragment : ViewPagerFragment() {
|
|||
}
|
||||
|
||||
if (!mIsPanorama) {
|
||||
setupPlayer()
|
||||
if (savedInstanceState != null) {
|
||||
mCurrTime = savedInstanceState.getInt(PROGRESS)
|
||||
}
|
||||
|
||||
mWasFragmentInit = true
|
||||
|
||||
if (mVideoSize.x != 0 && mVideoSize.y != 0) {
|
||||
setVideoSize()
|
||||
}
|
||||
|
||||
mView.apply {
|
||||
mBrightnessSideScroll.initialize(activity!!, slide_info, true, container) { x, y ->
|
||||
video_holder.performClick()
|
||||
|
@ -83,19 +178,31 @@ class VideoFragment : ViewPagerFragment() {
|
|||
mVolumeSideScroll.initialize(activity!!, slide_info, false, container) { x, y ->
|
||||
video_holder.performClick()
|
||||
}
|
||||
|
||||
video_surface.onGlobalLayout {
|
||||
if (mIsFragmentVisible && mConfig.autoplayVideos && !mConfig.openVideosOnSeparateScreen) {
|
||||
playVideo()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
setupVideoDuration()
|
||||
if (mStoredRememberLastVideoPosition) {
|
||||
setLastVideoSavedPosition()
|
||||
}
|
||||
|
||||
updateInstantSwitchWidths()
|
||||
return mView
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
mConfig = context!!.config // make sure we get a new config, in case the user changed something in the app settings
|
||||
activity!!.updateTextColors(mView.video_holder)
|
||||
val config = context!!.config
|
||||
val allowVideoGestures = config.allowVideoGestures
|
||||
val allowInstantChange = config.allowInstantChange
|
||||
val allowVideoGestures = mConfig.allowVideoGestures
|
||||
val allowInstantChange = mConfig.allowInstantChange
|
||||
mTextureView.beGoneIf(mConfig.openVideosOnSeparateScreen || mIsPanorama)
|
||||
mView.apply {
|
||||
video_volume_controller.beVisibleIf(allowVideoGestures && !mIsPanorama)
|
||||
video_brightness_controller.beVisibleIf(allowVideoGestures && !mIsPanorama)
|
||||
|
@ -105,29 +212,174 @@ class VideoFragment : ViewPagerFragment() {
|
|||
}
|
||||
|
||||
checkExtendedDetails()
|
||||
initTimeHolder()
|
||||
storeStateVariables()
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
super.onPause()
|
||||
storeStateVariables()
|
||||
pauseVideo()
|
||||
if (mStoredRememberLastVideoPosition && mIsFragmentVisible && mWasVideoStarted) {
|
||||
saveVideoProgress()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
if (activity?.isChangingConfigurations == false) {
|
||||
cleanup()
|
||||
}
|
||||
}
|
||||
|
||||
override fun setMenuVisibility(menuVisible: Boolean) {
|
||||
super.setMenuVisibility(menuVisible)
|
||||
if (mIsFragmentVisible && !menuVisible) {
|
||||
pauseVideo()
|
||||
}
|
||||
|
||||
mIsFragmentVisible = menuVisible
|
||||
if (mWasFragmentInit && menuVisible && mConfig.autoplayVideos && !mConfig.openVideosOnSeparateScreen) {
|
||||
playVideo()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onConfigurationChanged(newConfig: Configuration) {
|
||||
super.onConfigurationChanged(newConfig)
|
||||
setVideoSize()
|
||||
initTimeHolder()
|
||||
checkExtendedDetails()
|
||||
updateInstantSwitchWidths()
|
||||
}
|
||||
|
||||
override fun onSaveInstanceState(outState: Bundle) {
|
||||
super.onSaveInstanceState(outState)
|
||||
outState.putInt(PROGRESS, mCurrTime)
|
||||
}
|
||||
|
||||
|
||||
private fun storeStateVariables() {
|
||||
context!!.config.apply {
|
||||
mConfig.apply {
|
||||
mStoredShowExtendedDetails = showExtendedDetails
|
||||
mStoredHideExtendedDetails = hideExtendedDetails
|
||||
mStoredExtendedDetails = extendedDetails
|
||||
mStoredBottomActions = bottomActions
|
||||
mStoredRememberLastVideoPosition = rememberLastVideoPosition
|
||||
mStoredLastVideoPath = lastVideoPath
|
||||
mStoredLastVideoPosition = lastVideoPosition
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupPlayer() {
|
||||
if (activity == null || mConfig.openVideosOnSeparateScreen || mIsPanorama) {
|
||||
return
|
||||
}
|
||||
|
||||
mTextureView.setOnClickListener { toggleFullscreen() }
|
||||
mTextureView.surfaceTextureListener = this
|
||||
|
||||
checkExtendedDetails()
|
||||
|
||||
mExoPlayer = ExoPlayerFactory.newSimpleInstance(context)
|
||||
mExoPlayer!!.seekParameters = SeekParameters.CLOSEST_SYNC
|
||||
initExoPlayerListeners()
|
||||
}
|
||||
|
||||
private fun saveVideoProgress() {
|
||||
if (!videoEnded()) {
|
||||
mStoredLastVideoPosition = mExoPlayer!!.currentPosition.toInt() / 1000
|
||||
mStoredLastVideoPath = mMedium.path
|
||||
}
|
||||
|
||||
mConfig.apply {
|
||||
lastVideoPosition = mStoredLastVideoPosition
|
||||
lastVideoPath = mStoredLastVideoPath
|
||||
}
|
||||
}
|
||||
|
||||
private fun setLastVideoSavedPosition() {
|
||||
if (mStoredLastVideoPath == mMedium.path && mStoredLastVideoPosition > 0) {
|
||||
setPosition(mStoredLastVideoPosition)
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupTimeHolder() {
|
||||
mSeekBar.max = mDuration
|
||||
mView.video_duration.text = mDuration.getFormattedDuration()
|
||||
setupTimer()
|
||||
}
|
||||
|
||||
private fun setupTimer() {
|
||||
activity!!.runOnUiThread(object : Runnable {
|
||||
override fun run() {
|
||||
if (mExoPlayer != null && !mIsDragged && mIsPlaying) {
|
||||
mCurrTime = (mExoPlayer!!.currentPosition / 1000).toInt()
|
||||
mSeekBar.progress = mCurrTime
|
||||
mCurrTimeView.text = mCurrTime.getFormattedDuration()
|
||||
}
|
||||
|
||||
mTimerHandler.postDelayed(this, 1000)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
private fun initExoPlayer() {
|
||||
val isContentUri = mMedium.path.startsWith("content://")
|
||||
val uri = if (isContentUri) Uri.parse(mMedium.path) else Uri.fromFile(File(mMedium.path))
|
||||
val dataSpec = DataSpec(uri)
|
||||
val fileDataSource = if (isContentUri) ContentDataSource(context) else FileDataSource()
|
||||
try {
|
||||
fileDataSource.open(dataSpec)
|
||||
} catch (e: Exception) {
|
||||
activity?.showErrorToast(e)
|
||||
}
|
||||
|
||||
val factory = DataSource.Factory { fileDataSource }
|
||||
val audioSource = ExtractorMediaSource(fileDataSource.uri, factory, DefaultExtractorsFactory(), null, null)
|
||||
mExoPlayer!!.audioStreamType = C.STREAM_TYPE_MUSIC
|
||||
mExoPlayer!!.prepare(audioSource)
|
||||
}
|
||||
|
||||
private fun initExoPlayerListeners() {
|
||||
mExoPlayer!!.addListener(object : Player.EventListener {
|
||||
override fun onPlaybackParametersChanged(playbackParameters: PlaybackParameters?) {}
|
||||
|
||||
override fun onSeekProcessed() {}
|
||||
|
||||
override fun onTracksChanged(trackGroups: TrackGroupArray?, trackSelections: TrackSelectionArray?) {}
|
||||
|
||||
override fun onPlayerError(error: ExoPlaybackException?) {
|
||||
}
|
||||
|
||||
override fun onLoadingChanged(isLoading: Boolean) {}
|
||||
|
||||
override fun onPositionDiscontinuity(reason: Int) {}
|
||||
|
||||
override fun onRepeatModeChanged(repeatMode: Int) {}
|
||||
|
||||
override fun onShuffleModeEnabledChanged(shuffleModeEnabled: Boolean) {}
|
||||
|
||||
override fun onTimelineChanged(timeline: Timeline?, manifest: Any?, reason: Int) {}
|
||||
|
||||
override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) {
|
||||
when (playbackState) {
|
||||
Player.STATE_READY -> videoPrepared()
|
||||
Player.STATE_ENDED -> videoCompleted()
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
mExoPlayer!!.addVideoListener(object : SimpleExoPlayer.VideoListener {
|
||||
override fun onVideoSizeChanged(width: Int, height: Int, unappliedRotationDegrees: Int, pixelWidthHeightRatio: Float) {
|
||||
mVideoSize.x = width
|
||||
mVideoSize.y = height
|
||||
setVideoSize()
|
||||
}
|
||||
|
||||
override fun onRenderedFirstFrame() {}
|
||||
})
|
||||
}
|
||||
|
||||
private fun launchVideoPlayer() {
|
||||
listener?.launchViewVideoIntent(mMedium.path)
|
||||
}
|
||||
|
@ -137,7 +389,7 @@ class VideoFragment : ViewPagerFragment() {
|
|||
}
|
||||
|
||||
private fun checkExtendedDetails() {
|
||||
if (context!!.config.showExtendedDetails) {
|
||||
if (mConfig.showExtendedDetails) {
|
||||
mView.video_details.apply {
|
||||
beInvisible() // make it invisible so we can measure it, but not show yet
|
||||
text = getMediumExtendedDetails(mMedium)
|
||||
|
@ -147,7 +399,7 @@ class VideoFragment : ViewPagerFragment() {
|
|||
if (realY > 0) {
|
||||
y = realY
|
||||
beVisibleIf(text.isNotEmpty())
|
||||
alpha = if (!context!!.config.hideExtendedDetails || !mIsFullscreen) 1f else 0f
|
||||
alpha = if (!mConfig.hideExtendedDetails || !mIsFullscreen) 1f else 0f
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -157,11 +409,31 @@ class VideoFragment : ViewPagerFragment() {
|
|||
}
|
||||
}
|
||||
|
||||
private fun initTimeHolder() {
|
||||
var right = 0
|
||||
var bottom = context!!.navigationBarHeight
|
||||
if (mConfig.bottomActions) {
|
||||
bottom += resources.getDimension(R.dimen.bottom_actions_height).toInt()
|
||||
}
|
||||
|
||||
if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE && activity?.hasNavBar() == true) {
|
||||
right += activity!!.navigationBarWidth
|
||||
}
|
||||
|
||||
(mTimeHolder.layoutParams as RelativeLayout.LayoutParams).apply {
|
||||
bottomMargin = bottom
|
||||
rightMargin = right
|
||||
}
|
||||
mTimeHolder.beInvisibleIf(mIsFullscreen)
|
||||
}
|
||||
|
||||
private fun checkIfPanorama() {
|
||||
try {
|
||||
val fis = FileInputStream(File(mMedium.path))
|
||||
context!!.parseFileChannel(mMedium.path, fis.channel, 0, 0, 0) {
|
||||
mIsPanorama = true
|
||||
fis.use { fis ->
|
||||
context!!.parseFileChannel(mMedium.path, fis.channel, 0, 0, 0) {
|
||||
mIsPanorama = true
|
||||
}
|
||||
}
|
||||
} catch (ignored: Exception) {
|
||||
} catch (ignored: OutOfMemoryError) {
|
||||
|
@ -183,12 +455,23 @@ class VideoFragment : ViewPagerFragment() {
|
|||
|
||||
override fun fullscreenToggled(isFullscreen: Boolean) {
|
||||
mIsFullscreen = isFullscreen
|
||||
val newAlpha = if (isFullscreen) 0f else 1f
|
||||
if (!mIsFullscreen) {
|
||||
mTimeHolder.beVisible()
|
||||
}
|
||||
|
||||
mSeekBar.setOnSeekBarChangeListener(if (mIsFullscreen) null else this)
|
||||
arrayOf(mView.video_curr_time, mView.video_duration).forEach {
|
||||
it.isClickable = !mIsFullscreen
|
||||
}
|
||||
|
||||
mTimeHolder.animate().alpha(newAlpha).start()
|
||||
mView.video_details.apply {
|
||||
if (mStoredShowExtendedDetails && isVisible()) {
|
||||
animate().y(getExtendedDetailsY(height))
|
||||
|
||||
if (mStoredHideExtendedDetails) {
|
||||
animate().alpha(if (isFullscreen) 0f else 1f).start()
|
||||
animate().alpha(newAlpha).start()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -197,7 +480,344 @@ class VideoFragment : ViewPagerFragment() {
|
|||
private fun getExtendedDetailsY(height: Int): Float {
|
||||
val smallMargin = resources.getDimension(R.dimen.small_margin)
|
||||
val fullscreenOffset = smallMargin + if (mIsFullscreen) 0 else context!!.navigationBarHeight
|
||||
val actionsHeight = if (context!!.config.bottomActions && !mIsFullscreen) resources.getDimension(R.dimen.bottom_actions_height) else 0f
|
||||
var actionsHeight = 0f
|
||||
if (!mIsFullscreen) {
|
||||
actionsHeight += resources.getDimension(R.dimen.video_player_play_pause_size)
|
||||
if (mConfig.bottomActions) {
|
||||
actionsHeight += resources.getDimension(R.dimen.bottom_actions_height)
|
||||
}
|
||||
}
|
||||
return context!!.realScreenSize.y - height - actionsHeight - fullscreenOffset
|
||||
}
|
||||
|
||||
private fun skip(forward: Boolean) {
|
||||
if (mExoPlayer == null || mIsPanorama) {
|
||||
return
|
||||
}
|
||||
|
||||
val curr = mExoPlayer!!.currentPosition
|
||||
val twoPercents = Math.max((mExoPlayer!!.duration / 50).toInt(), MIN_SKIP_LENGTH)
|
||||
val newProgress = if (forward) curr + twoPercents else curr - twoPercents
|
||||
val roundProgress = Math.round(newProgress / 1000f)
|
||||
val limitedProgress = Math.max(Math.min(mExoPlayer!!.duration.toInt(), roundProgress), 0)
|
||||
setPosition(limitedProgress)
|
||||
if (!mIsPlaying) {
|
||||
togglePlayPause()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
|
||||
if (mExoPlayer != null && fromUser) {
|
||||
setPosition(progress)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onStartTrackingTouch(seekBar: SeekBar) {
|
||||
if (mExoPlayer == null)
|
||||
return
|
||||
|
||||
mExoPlayer!!.playWhenReady = false
|
||||
mIsDragged = true
|
||||
}
|
||||
|
||||
override fun onStopTrackingTouch(seekBar: SeekBar) {
|
||||
if (mIsPanorama) {
|
||||
openPanorama()
|
||||
return
|
||||
}
|
||||
|
||||
if (mExoPlayer == null)
|
||||
return
|
||||
|
||||
if (mIsPlaying) {
|
||||
mExoPlayer!!.playWhenReady = true
|
||||
} else {
|
||||
togglePlayPause()
|
||||
}
|
||||
|
||||
mIsDragged = false
|
||||
}
|
||||
|
||||
private fun togglePlayPause() {
|
||||
if (activity == null || !isAdded)
|
||||
return
|
||||
|
||||
mIsPlaying = !mIsPlaying
|
||||
if (mIsPlaying) {
|
||||
playVideo()
|
||||
} else {
|
||||
pauseVideo()
|
||||
}
|
||||
}
|
||||
|
||||
fun playVideo() {
|
||||
if (mExoPlayer == null) {
|
||||
return
|
||||
}
|
||||
|
||||
if (mView.video_preview.isVisible()) {
|
||||
mView.video_preview.beGone()
|
||||
initExoPlayer()
|
||||
}
|
||||
|
||||
val wasEnded = videoEnded()
|
||||
if (wasEnded) {
|
||||
setPosition(0)
|
||||
}
|
||||
|
||||
if (mStoredRememberLastVideoPosition) {
|
||||
setLastVideoSavedPosition()
|
||||
clearLastVideoSavedProgress()
|
||||
}
|
||||
|
||||
if (!wasEnded || !mConfig.loopVideos) {
|
||||
mPlayPauseButton.setImageResource(R.drawable.ic_pause_outline)
|
||||
}
|
||||
|
||||
if (!mWasVideoStarted) {
|
||||
mView.video_play_outline.beGone()
|
||||
mPlayPauseButton.beVisible()
|
||||
}
|
||||
|
||||
mWasVideoStarted = true
|
||||
mIsPlaying = true
|
||||
mExoPlayer?.playWhenReady = true
|
||||
activity!!.window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
||||
}
|
||||
|
||||
private fun clearLastVideoSavedProgress() {
|
||||
mStoredLastVideoPosition = 0
|
||||
mStoredLastVideoPath = ""
|
||||
}
|
||||
|
||||
private fun pauseVideo() {
|
||||
if (mExoPlayer == null) {
|
||||
return
|
||||
}
|
||||
|
||||
mIsPlaying = false
|
||||
if (!videoEnded()) {
|
||||
mExoPlayer?.playWhenReady = false
|
||||
}
|
||||
|
||||
mPlayPauseButton.setImageResource(R.drawable.ic_play_outline)
|
||||
activity?.window?.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
||||
}
|
||||
|
||||
private fun videoEnded(): Boolean {
|
||||
val currentPos = mExoPlayer?.currentPosition ?: 0
|
||||
val duration = mExoPlayer?.duration ?: 0
|
||||
return currentPos != 0L && currentPos >= duration
|
||||
}
|
||||
|
||||
private fun setPosition(seconds: Int) {
|
||||
mExoPlayer?.seekTo(seconds * 1000L)
|
||||
mSeekBar.progress = seconds
|
||||
mCurrTimeView.text = seconds.getFormattedDuration()
|
||||
}
|
||||
|
||||
private fun setupVideoDuration() {
|
||||
mDuration = mMedium.path.getVideoDuration()
|
||||
setupTimeHolder()
|
||||
setPosition(0)
|
||||
}
|
||||
|
||||
private fun videoPrepared() {
|
||||
if (mDuration == 0) {
|
||||
mDuration = (mExoPlayer!!.duration / 1000).toInt()
|
||||
setupTimeHolder()
|
||||
setPosition(mCurrTime)
|
||||
|
||||
if (mIsFragmentVisible && (mConfig.autoplayVideos)) {
|
||||
playVideo()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun videoCompleted() {
|
||||
if (!isAdded || mExoPlayer == null) {
|
||||
return
|
||||
}
|
||||
|
||||
mCurrTime = (mExoPlayer!!.duration / 1000).toInt()
|
||||
if (listener?.videoEnded() == false && mConfig.loopVideos) {
|
||||
playVideo()
|
||||
} else {
|
||||
mSeekBar.progress = mSeekBar.max
|
||||
mCurrTimeView.text = mDuration.getFormattedDuration()
|
||||
pauseVideo()
|
||||
}
|
||||
}
|
||||
|
||||
private fun cleanup() {
|
||||
pauseVideo()
|
||||
releaseExoPlayer()
|
||||
|
||||
if (mWasFragmentInit) {
|
||||
mCurrTimeView.text = 0.getFormattedDuration()
|
||||
mSeekBar.progress = 0
|
||||
mTimerHandler.removeCallbacksAndMessages(null)
|
||||
}
|
||||
}
|
||||
|
||||
private fun releaseExoPlayer() {
|
||||
mExoPlayer?.stop()
|
||||
Thread {
|
||||
mExoPlayer?.release()
|
||||
mExoPlayer = null
|
||||
}.start()
|
||||
}
|
||||
|
||||
override fun onSurfaceTextureSizeChanged(surface: SurfaceTexture?, width: Int, height: Int) {}
|
||||
|
||||
override fun onSurfaceTextureUpdated(surface: SurfaceTexture?) {}
|
||||
|
||||
override fun onSurfaceTextureDestroyed(surface: SurfaceTexture?) = false
|
||||
|
||||
override fun onSurfaceTextureAvailable(surface: SurfaceTexture?, width: Int, height: Int) {
|
||||
Thread {
|
||||
mExoPlayer?.setVideoSurface(Surface(mTextureView.surfaceTexture))
|
||||
}.start()
|
||||
}
|
||||
|
||||
private fun setVideoSize() {
|
||||
if (activity == null || mConfig.openVideosOnSeparateScreen) {
|
||||
return
|
||||
}
|
||||
|
||||
val videoProportion = mVideoSize.x.toFloat() / mVideoSize.y.toFloat()
|
||||
val display = activity!!.windowManager.defaultDisplay
|
||||
val screenWidth: Int
|
||||
val screenHeight: Int
|
||||
|
||||
val realMetrics = DisplayMetrics()
|
||||
display.getRealMetrics(realMetrics)
|
||||
screenWidth = realMetrics.widthPixels
|
||||
screenHeight = realMetrics.heightPixels
|
||||
|
||||
val screenProportion = screenWidth.toFloat() / screenHeight.toFloat()
|
||||
|
||||
mTextureView.layoutParams.apply {
|
||||
if (videoProportion > screenProportion) {
|
||||
width = screenWidth
|
||||
height = (screenWidth.toFloat() / videoProportion).toInt()
|
||||
} else {
|
||||
width = (videoProportion * screenHeight.toFloat()).toInt()
|
||||
height = screenHeight
|
||||
}
|
||||
mTextureView.layoutParams = this
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleEventWithZooming(event: MotionEvent) {
|
||||
mScaleDetector?.onTouchEvent(event)
|
||||
|
||||
mMatrix.getValues(mMatrices)
|
||||
val x = mMatrices[Matrix.MTRANS_X]
|
||||
val y = mMatrices[Matrix.MTRANS_Y]
|
||||
|
||||
when (event.actionMasked) {
|
||||
MotionEvent.ACTION_DOWN -> {
|
||||
mTouchDownTime = System.currentTimeMillis()
|
||||
mCurrZoomMode = ZOOM_MODE_DRAG
|
||||
mLastTouchX = event.x
|
||||
mLastTouchY = event.y
|
||||
|
||||
mTouchDownX = event.x
|
||||
mTouchDownY = event.y
|
||||
}
|
||||
MotionEvent.ACTION_UP -> {
|
||||
mCurrZoomMode = ZOOM_MODE_NONE
|
||||
val diffX = mTouchDownX - event.x
|
||||
val diffY = mTouchDownY - event.y
|
||||
|
||||
if (Math.abs(diffX) < CLICK_MAX_DISTANCE && Math.abs(diffY) < CLICK_MAX_DISTANCE && System.currentTimeMillis() - mTouchDownTime < CLICK_MAX_DURATION) {
|
||||
mTextureView.performClick()
|
||||
} else {
|
||||
val downGestureDuration = System.currentTimeMillis() - mTouchDownTime
|
||||
if (!mIgnoreCloseDown && Math.abs(diffY) > Math.abs(diffX) && diffY < -mCloseDownThreshold && downGestureDuration < MAX_CLOSE_DOWN_GESTURE_DURATION && mSaveScale == 1f) {
|
||||
activity?.supportFinishAfterTransition()
|
||||
}
|
||||
}
|
||||
mIgnoreCloseDown = false
|
||||
}
|
||||
MotionEvent.ACTION_POINTER_DOWN -> {
|
||||
mLastTouchX = event.x
|
||||
mLastTouchY = event.y
|
||||
mCurrZoomMode = ZOOM_MODE_ZOOM
|
||||
mIgnoreCloseDown = true
|
||||
}
|
||||
MotionEvent.ACTION_MOVE -> {
|
||||
if (mCurrZoomMode == ZOOM_MODE_ZOOM || mCurrZoomMode == ZOOM_MODE_DRAG && mSaveScale > MIN_VIDEO_ZOOM_SCALE) {
|
||||
var diffX = event.x - mLastTouchX
|
||||
var diffY = event.y - mLastTouchY
|
||||
if (y + diffY > 0) {
|
||||
diffY = -y
|
||||
} else if (y + diffY < -mBottom) {
|
||||
diffY = -(y + mBottom)
|
||||
}
|
||||
|
||||
if (x + diffX > 0) {
|
||||
diffX = -x
|
||||
} else if (x + diffX < -mRight) {
|
||||
diffX = -(x + mRight)
|
||||
}
|
||||
|
||||
mMatrix.postTranslate(diffX, diffY)
|
||||
mLastTouchX = event.x
|
||||
mLastTouchY = event.y
|
||||
}
|
||||
}
|
||||
MotionEvent.ACTION_POINTER_UP -> {
|
||||
mCurrZoomMode = ZOOM_MODE_NONE
|
||||
}
|
||||
}
|
||||
|
||||
mTextureView.setTransform(mMatrix)
|
||||
mTextureView.invalidate()
|
||||
}
|
||||
|
||||
// taken from https://github.com/Manuiq/ZoomableTextureView
|
||||
private inner class ScaleListener : ScaleGestureDetector.SimpleOnScaleGestureListener() {
|
||||
override fun onScaleBegin(detector: ScaleGestureDetector): Boolean {
|
||||
mCurrZoomMode = ZOOM_MODE_ZOOM
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onScale(detector: ScaleGestureDetector): Boolean {
|
||||
val width = mTextureView.width
|
||||
val height = mTextureView.height
|
||||
if (width <= 0 || height <= 0) {
|
||||
return true
|
||||
}
|
||||
|
||||
var scaleFactor = detector.scaleFactor
|
||||
val origScale = mSaveScale
|
||||
mSaveScale *= scaleFactor
|
||||
|
||||
if (mSaveScale > MAX_VIDEO_ZOOM_SCALE) {
|
||||
mSaveScale = MAX_VIDEO_ZOOM_SCALE
|
||||
scaleFactor = MAX_VIDEO_ZOOM_SCALE / origScale
|
||||
} else if (mSaveScale < MIN_VIDEO_ZOOM_SCALE) {
|
||||
mSaveScale = MIN_VIDEO_ZOOM_SCALE
|
||||
scaleFactor = MIN_VIDEO_ZOOM_SCALE / origScale
|
||||
}
|
||||
|
||||
mRight = width * mSaveScale - width
|
||||
mBottom = height * mSaveScale - height
|
||||
mMatrix.postScale(scaleFactor, scaleFactor, detector.focusX, detector.focusY)
|
||||
if (scaleFactor < 1) {
|
||||
mMatrix.getValues(mMatrices)
|
||||
val y = mMatrices[Matrix.MTRANS_Y]
|
||||
if (scaleFactor < 1) {
|
||||
if (y < -mBottom) {
|
||||
mMatrix.postTranslate(0f, -(y + mBottom))
|
||||
} else if (y > 0) {
|
||||
mMatrix.postTranslate(0f, -y)
|
||||
}
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ import java.io.File
|
|||
abstract class ViewPagerFragment : Fragment() {
|
||||
var listener: FragmentListener? = null
|
||||
|
||||
protected var mTouchDownTime = 0L
|
||||
protected var mTouchDownX = 0f
|
||||
protected var mTouchDownY = 0f
|
||||
protected var mCloseDownThreshold = 100f
|
||||
|
@ -98,6 +99,7 @@ abstract class ViewPagerFragment : Fragment() {
|
|||
protected fun handleEvent(event: MotionEvent) {
|
||||
when (event.actionMasked) {
|
||||
MotionEvent.ACTION_DOWN -> {
|
||||
mTouchDownTime = System.currentTimeMillis()
|
||||
mTouchDownX = event.x
|
||||
mTouchDownY = event.y
|
||||
}
|
||||
|
@ -106,7 +108,8 @@ abstract class ViewPagerFragment : Fragment() {
|
|||
val diffX = mTouchDownX - event.x
|
||||
val diffY = mTouchDownY - event.y
|
||||
|
||||
if (!mIgnoreCloseDown && Math.abs(diffY) > Math.abs(diffX) && diffY < -mCloseDownThreshold) {
|
||||
val downGestureDuration = System.currentTimeMillis() - mTouchDownTime
|
||||
if (!mIgnoreCloseDown && Math.abs(diffY) > Math.abs(diffX) && diffY < -mCloseDownThreshold && downGestureDuration < MAX_CLOSE_DOWN_GESTURE_DURATION) {
|
||||
activity?.supportFinishAfterTransition()
|
||||
}
|
||||
mIgnoreCloseDown = false
|
||||
|
|
|
@ -153,7 +153,7 @@ class Config(context: Context) : BaseConfig(context) {
|
|||
set(includedFolders) = prefs.edit().remove(INCLUDED_FOLDERS).putStringSet(INCLUDED_FOLDERS, includedFolders).apply()
|
||||
|
||||
var autoplayVideos: Boolean
|
||||
get() = prefs.getBoolean(AUTOPLAY_VIDEOS, true)
|
||||
get() = prefs.getBoolean(AUTOPLAY_VIDEOS, false)
|
||||
set(autoplay) = prefs.edit().putBoolean(AUTOPLAY_VIDEOS, autoplay).apply()
|
||||
|
||||
var animateGifs: Boolean
|
||||
|
@ -180,6 +180,10 @@ class Config(context: Context) : BaseConfig(context) {
|
|||
get() = prefs.getBoolean(LOOP_VIDEOS, false)
|
||||
set(loop) = prefs.edit().putBoolean(LOOP_VIDEOS, loop).apply()
|
||||
|
||||
var openVideosOnSeparateScreen: Boolean
|
||||
get() = prefs.getBoolean(OPEN_VIDEOS_ON_SEPARATE_SCREEN, false)
|
||||
set(openVideosOnSeparateScreen) = prefs.edit().putBoolean(OPEN_VIDEOS_ON_SEPARATE_SCREEN, openVideosOnSeparateScreen).apply()
|
||||
|
||||
var displayFileNames: Boolean
|
||||
get() = prefs.getBoolean(DISPLAY_FILE_NAMES, false)
|
||||
set(display) = prefs.edit().putBoolean(DISPLAY_FILE_NAMES, display).apply()
|
||||
|
@ -281,6 +285,10 @@ class Config(context: Context) : BaseConfig(context) {
|
|||
get() = prefs.getInt(SLIDESHOW_INTERVAL, SLIDESHOW_DEFAULT_INTERVAL)
|
||||
set(slideshowInterval) = prefs.edit().putInt(SLIDESHOW_INTERVAL, slideshowInterval).apply()
|
||||
|
||||
var slideshowIncludeVideos: Boolean
|
||||
get() = prefs.getBoolean(SLIDESHOW_INCLUDE_VIDEOS, false)
|
||||
set(slideshowIncludeVideos) = prefs.edit().putBoolean(SLIDESHOW_INCLUDE_VIDEOS, slideshowIncludeVideos).apply()
|
||||
|
||||
var slideshowIncludeGIFs: Boolean
|
||||
get() = prefs.getBoolean(SLIDESHOW_INCLUDE_GIFS, false)
|
||||
set(slideshowIncludeGIFs) = prefs.edit().putBoolean(SLIDESHOW_INCLUDE_GIFS, slideshowIncludeGIFs).apply()
|
||||
|
@ -445,4 +453,12 @@ class Config(context: Context) : BaseConfig(context) {
|
|||
var allowOneToOneZoom: Boolean
|
||||
get() = prefs.getBoolean(ALLOW_ONE_TO_ONE_ZOOM, false)
|
||||
set(allowOneToOneZoom) = prefs.edit().putBoolean(ALLOW_ONE_TO_ONE_ZOOM, allowOneToOneZoom).apply()
|
||||
|
||||
var lastEditorDrawColor: Int
|
||||
get() = prefs.getInt(LAST_EDITOR_DRAW_COLOR, primaryColor)
|
||||
set(lastEditorDrawColor) = prefs.edit().putInt(LAST_EDITOR_DRAW_COLOR, lastEditorDrawColor).apply()
|
||||
|
||||
var lastEditorBrushSize: Int
|
||||
get() = prefs.getInt(LAST_EDITOR_BRUSH_SIZE, 50)
|
||||
set(lastEditorBrushSize) = prefs.edit().putInt(LAST_EDITOR_BRUSH_SIZE, lastEditorBrushSize).apply()
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ const val IS_THIRD_PARTY_INTENT = "is_third_party_intent"
|
|||
const val AUTOPLAY_VIDEOS = "autoplay_videos"
|
||||
const val REMEMBER_LAST_VIDEO_POSITION = "remember_last_video_position"
|
||||
const val LOOP_VIDEOS = "loop_videos"
|
||||
const val OPEN_VIDEOS_ON_SEPARATE_SCREEN = "open_videos_on_separate_screen"
|
||||
const val ANIMATE_GIFS = "animate_gifs"
|
||||
const val MAX_BRIGHTNESS = "max_brightness"
|
||||
const val CROP_THUMBNAILS = "crop_thumbnails"
|
||||
|
@ -75,9 +76,12 @@ const val LAST_EDITOR_CROP_OTHER_ASPECT_RATIO_Y = "last_editor_crop_other_aspect
|
|||
const val GROUP_DIRECT_SUBFOLDERS = "group_direct_subfolders"
|
||||
const val SHOW_WIDGET_FOLDER_NAME = "show_widget_folder_name"
|
||||
const val ALLOW_ONE_TO_ONE_ZOOM = "allow_one_to_one_zoom"
|
||||
const val LAST_EDITOR_DRAW_COLOR = "last_editor_draw_color"
|
||||
const val LAST_EDITOR_BRUSH_SIZE = "last_editor_brush_size"
|
||||
|
||||
// slideshow
|
||||
const val SLIDESHOW_INTERVAL = "slideshow_interval"
|
||||
const val SLIDESHOW_INCLUDE_VIDEOS = "slideshow_include_videos"
|
||||
const val SLIDESHOW_INCLUDE_GIFS = "slideshow_include_gifs"
|
||||
const val SLIDESHOW_RANDOM_ORDER = "slideshow_random_order"
|
||||
const val SLIDESHOW_USE_FADE = "slideshow_use_fade"
|
||||
|
@ -99,9 +103,12 @@ const val GO_TO_PREV_ITEM = "go_to_prev_item"
|
|||
const val MAX_COLUMN_COUNT = 20
|
||||
const val SHOW_TEMP_HIDDEN_DURATION = 300000L
|
||||
const val CLICK_MAX_DURATION = 150
|
||||
const val CLICK_MAX_DISTANCE = 100
|
||||
const val MAX_CLOSE_DOWN_GESTURE_DURATION = 400
|
||||
const val DRAG_THRESHOLD = 8
|
||||
const val MONTH_MILLISECONDS = MONTH_SECONDS * 1000L
|
||||
const val MIN_SKIP_LENGTH = 2000
|
||||
const val HIDE_SYSTEM_UI_DELAY = 500L
|
||||
|
||||
const val DIRECTORY = "directory"
|
||||
const val MEDIUM = "medium"
|
||||
|
@ -177,3 +184,10 @@ const val ASPECT_RATIO_ONE_ONE = 1
|
|||
const val ASPECT_RATIO_FOUR_THREE = 2
|
||||
const val ASPECT_RATIO_SIXTEEN_NINE = 3
|
||||
const val ASPECT_RATIO_OTHER = 4
|
||||
|
||||
// some constants related to zooming videos
|
||||
const val MIN_VIDEO_ZOOM_SCALE = 1f
|
||||
const val MAX_VIDEO_ZOOM_SCALE = 5f
|
||||
const val ZOOM_MODE_NONE = 0
|
||||
const val ZOOM_MODE_DRAG = 1
|
||||
const val ZOOM_MODE_ZOOM = 2
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
package com.simplemobiletools.gallery.pro.models
|
||||
|
||||
import android.graphics.Color
|
||||
|
||||
data class PaintOptions(var color: Int = Color.BLACK, var strokeWidth: Float = 5f)
|
|
@ -0,0 +1,147 @@
|
|||
package com.simplemobiletools.gallery.pro.views
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.*
|
||||
import android.util.AttributeSet
|
||||
import android.view.MotionEvent
|
||||
import android.view.View
|
||||
import com.simplemobiletools.gallery.pro.R
|
||||
import com.simplemobiletools.gallery.pro.extensions.config
|
||||
import com.simplemobiletools.gallery.pro.models.PaintOptions
|
||||
import java.util.*
|
||||
|
||||
class EditorDrawCanvas(context: Context, attrs: AttributeSet) : View(context, attrs) {
|
||||
private var mCurX = 0f
|
||||
private var mCurY = 0f
|
||||
private var mStartX = 0f
|
||||
private var mStartY = 0f
|
||||
private var mColor = 0
|
||||
private var mWasMultitouch = false
|
||||
|
||||
private var mPaths = LinkedHashMap<Path, PaintOptions>()
|
||||
private var mPaint = Paint()
|
||||
private var mPath = Path()
|
||||
private var mPaintOptions = PaintOptions()
|
||||
|
||||
private var backgroundBitmap: Bitmap? = null
|
||||
|
||||
init {
|
||||
mColor = context.config.primaryColor
|
||||
mPaint.apply {
|
||||
color = mColor
|
||||
style = Paint.Style.STROKE
|
||||
strokeJoin = Paint.Join.ROUND
|
||||
strokeCap = Paint.Cap.ROUND
|
||||
strokeWidth = 40f
|
||||
isAntiAlias = true
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDraw(canvas: Canvas) {
|
||||
super.onDraw(canvas)
|
||||
canvas.save()
|
||||
|
||||
if (backgroundBitmap != null) {
|
||||
canvas.drawBitmap(backgroundBitmap!!, 0f, 0f, null)
|
||||
}
|
||||
|
||||
for ((key, value) in mPaths) {
|
||||
changePaint(value)
|
||||
canvas.drawPath(key, mPaint)
|
||||
}
|
||||
|
||||
changePaint(mPaintOptions)
|
||||
canvas.drawPath(mPath, mPaint)
|
||||
canvas.restore()
|
||||
}
|
||||
|
||||
override fun onTouchEvent(event: MotionEvent): Boolean {
|
||||
val x = event.x
|
||||
val y = event.y
|
||||
|
||||
when (event.action and MotionEvent.ACTION_MASK) {
|
||||
MotionEvent.ACTION_DOWN -> {
|
||||
mWasMultitouch = false
|
||||
mStartX = x
|
||||
mStartY = y
|
||||
actionDown(x, y)
|
||||
}
|
||||
MotionEvent.ACTION_MOVE -> {
|
||||
if (event.pointerCount == 1 && !mWasMultitouch) {
|
||||
actionMove(x, y)
|
||||
}
|
||||
}
|
||||
MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> actionUp()
|
||||
MotionEvent.ACTION_POINTER_DOWN -> mWasMultitouch = true
|
||||
}
|
||||
|
||||
invalidate()
|
||||
return true
|
||||
}
|
||||
|
||||
private fun actionDown(x: Float, y: Float) {
|
||||
mPath.reset()
|
||||
mPath.moveTo(x, y)
|
||||
mCurX = x
|
||||
mCurY = y
|
||||
}
|
||||
|
||||
private fun actionMove(x: Float, y: Float) {
|
||||
mPath.quadTo(mCurX, mCurY, (x + mCurX) / 2, (y + mCurY) / 2)
|
||||
mCurX = x
|
||||
mCurY = y
|
||||
}
|
||||
|
||||
private fun actionUp() {
|
||||
if (!mWasMultitouch) {
|
||||
mPath.lineTo(mCurX, mCurY)
|
||||
|
||||
// draw a dot on click
|
||||
if (mStartX == mCurX && mStartY == mCurY) {
|
||||
mPath.lineTo(mCurX, mCurY + 2)
|
||||
mPath.lineTo(mCurX + 1, mCurY + 2)
|
||||
mPath.lineTo(mCurX + 1, mCurY)
|
||||
}
|
||||
}
|
||||
|
||||
mPaths[mPath] = mPaintOptions
|
||||
mPath = Path()
|
||||
mPaintOptions = PaintOptions(mPaintOptions.color, mPaintOptions.strokeWidth)
|
||||
}
|
||||
|
||||
private fun changePaint(paintOptions: PaintOptions) {
|
||||
mPaint.color = paintOptions.color
|
||||
mPaint.strokeWidth = paintOptions.strokeWidth
|
||||
}
|
||||
|
||||
fun updateColor(newColor: Int) {
|
||||
mPaintOptions.color = newColor
|
||||
}
|
||||
|
||||
fun updateBrushSize(newBrushSize: Int) {
|
||||
mPaintOptions.strokeWidth = resources.getDimension(R.dimen.full_brush_size) * (newBrushSize / 100f)
|
||||
}
|
||||
|
||||
fun updateBackgroundBitmap(bitmap: Bitmap) {
|
||||
backgroundBitmap = bitmap
|
||||
invalidate()
|
||||
}
|
||||
|
||||
fun getBitmap(): Bitmap {
|
||||
val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
|
||||
val canvas = Canvas(bitmap)
|
||||
canvas.drawColor(Color.WHITE)
|
||||
draw(canvas)
|
||||
return bitmap
|
||||
}
|
||||
|
||||
fun undo() {
|
||||
if (mPaths.isEmpty()) {
|
||||
return
|
||||
}
|
||||
|
||||
val lastKey = mPaths.keys.lastOrNull()
|
||||
mPaths.remove(lastKey)
|
||||
invalidate()
|
||||
}
|
||||
}
|
|
@ -5,6 +5,7 @@ import android.util.AttributeSet
|
|||
import android.view.MotionEvent
|
||||
import android.view.ViewGroup
|
||||
import android.widget.RelativeLayout
|
||||
import com.simplemobiletools.gallery.pro.helpers.CLICK_MAX_DISTANCE
|
||||
import com.simplemobiletools.gallery.pro.helpers.CLICK_MAX_DURATION
|
||||
import com.simplemobiletools.gallery.pro.helpers.DRAG_THRESHOLD
|
||||
|
||||
|
@ -40,7 +41,9 @@ class InstantItemSwitch(context: Context, attrs: AttributeSet) : RelativeLayout(
|
|||
mTouchDownTime = System.currentTimeMillis()
|
||||
}
|
||||
MotionEvent.ACTION_UP -> {
|
||||
if (System.currentTimeMillis() - mTouchDownTime < CLICK_MAX_DURATION) {
|
||||
val diffX = mTouchDownX - event.x
|
||||
val diffY = mTouchDownY - event.y
|
||||
if (Math.abs(diffX) < CLICK_MAX_DISTANCE && Math.abs(diffY) < CLICK_MAX_DISTANCE && System.currentTimeMillis() - mTouchDownTime < CLICK_MAX_DURATION) {
|
||||
performClick()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ import android.widget.TextView
|
|||
import com.simplemobiletools.commons.extensions.onGlobalLayout
|
||||
import com.simplemobiletools.gallery.pro.R
|
||||
import com.simplemobiletools.gallery.pro.extensions.audioManager
|
||||
import com.simplemobiletools.gallery.pro.helpers.CLICK_MAX_DISTANCE
|
||||
import com.simplemobiletools.gallery.pro.helpers.CLICK_MAX_DURATION
|
||||
import com.simplemobiletools.gallery.pro.helpers.DRAG_THRESHOLD
|
||||
|
||||
|
@ -106,7 +107,9 @@ class MediaSideScroll(context: Context, attrs: AttributeSet) : RelativeLayout(co
|
|||
mLastTouchY = event.y
|
||||
}
|
||||
MotionEvent.ACTION_UP -> {
|
||||
if (System.currentTimeMillis() - mTouchDownTime < CLICK_MAX_DURATION) {
|
||||
val diffX = mTouchDownX - event.x
|
||||
val diffY = mTouchDownY - event.y
|
||||
if (Math.abs(diffX) < CLICK_MAX_DISTANCE && Math.abs(diffY) < CLICK_MAX_DISTANCE && System.currentTimeMillis() - mTouchDownTime < CLICK_MAX_DURATION) {
|
||||
callback(event.rawX, event.rawY)
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,177 @@
|
|||
package com.simplemobiletools.gallery.pro.views
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Matrix
|
||||
import android.graphics.RectF
|
||||
import android.util.AttributeSet
|
||||
import android.view.MotionEvent
|
||||
import android.view.ScaleGestureDetector
|
||||
import android.widget.ImageView
|
||||
import com.simplemobiletools.commons.extensions.beVisible
|
||||
import com.simplemobiletools.gallery.pro.extensions.config
|
||||
import com.simplemobiletools.gallery.pro.helpers.*
|
||||
import pl.droidsonroids.gif.GifTextureView
|
||||
|
||||
// allow horizontal swipes through the layout, else it can cause glitches at zoomed in images
|
||||
class MyZoomableGifTextureView(context: Context, attrs: AttributeSet) : GifTextureView(context, attrs) {
|
||||
private var mSaveScale = 1f
|
||||
private var mLastTouchX = 0f
|
||||
private var mLastTouchY = 0f
|
||||
private var mTouchDownTime = 0L
|
||||
private var mTouchDownX = 0f
|
||||
private var mTouchDownY = 0f
|
||||
private var mGifWidth = 0f
|
||||
private var mGifHeight = 0f
|
||||
private var mScreenWidth = 0f
|
||||
private var mScreenHeight = 0f
|
||||
private var mLastFocusX = 0f
|
||||
private var mLastFocusY = 0f
|
||||
private var mCloseDownThreshold = 100f
|
||||
private var mIgnoreCloseDown = false
|
||||
private var mCurrZoomMode = ZOOM_MODE_NONE
|
||||
|
||||
private var mScaleDetector: ScaleGestureDetector? = null
|
||||
private var mMatrices = FloatArray(9)
|
||||
private val mMatrix = Matrix()
|
||||
private var mCurrentViewport = RectF()
|
||||
private var mCloseDownCallback: (() -> Unit)? = null
|
||||
|
||||
init {
|
||||
mScaleDetector = ScaleGestureDetector(context, ScaleListener())
|
||||
}
|
||||
|
||||
fun setupGIFView(gifWidth: Int, gifHeight: Int, screenWidth: Int, screenHeight: Int, callback: () -> Unit) {
|
||||
mCloseDownCallback = callback
|
||||
// if we don't know the gifs' resolution, just display it and disable zooming
|
||||
if (gifWidth == 0 || gifHeight == 0) {
|
||||
scaleType = ImageView.ScaleType.FIT_CENTER
|
||||
mScaleDetector = null
|
||||
beVisible()
|
||||
return
|
||||
}
|
||||
|
||||
mGifWidth = gifWidth.toFloat()
|
||||
mGifHeight = gifHeight.toFloat()
|
||||
mScreenWidth = screenWidth.toFloat()
|
||||
mScreenHeight = screenHeight.toFloat()
|
||||
|
||||
// we basically want scaleType fitCenter, but we have to use matrices to reach that
|
||||
val origRect = RectF(0f, 0f, mGifWidth, mGifHeight)
|
||||
val wantedRect = RectF(0f, 0f, mScreenWidth, mScreenHeight)
|
||||
mMatrix.setRectToRect(origRect, wantedRect, Matrix.ScaleToFit.CENTER)
|
||||
mMatrix.getValues(mMatrices)
|
||||
|
||||
val left = mMatrices[Matrix.MTRANS_X]
|
||||
val top = mMatrices[Matrix.MTRANS_Y]
|
||||
val right = mScreenWidth - left
|
||||
val bottom = mScreenHeight - top
|
||||
mCurrentViewport.set(left, top, right, bottom)
|
||||
|
||||
setTransform(mMatrix)
|
||||
invalidate()
|
||||
beVisible()
|
||||
}
|
||||
|
||||
override fun onTouchEvent(event: MotionEvent): Boolean {
|
||||
mScaleDetector?.onTouchEvent(event)
|
||||
|
||||
when (event.actionMasked) {
|
||||
MotionEvent.ACTION_DOWN -> {
|
||||
mTouchDownTime = System.currentTimeMillis()
|
||||
mCurrZoomMode = ZOOM_MODE_DRAG
|
||||
mLastTouchX = event.x
|
||||
mLastTouchY = event.y
|
||||
|
||||
mTouchDownX = event.x
|
||||
mTouchDownY = event.y
|
||||
}
|
||||
MotionEvent.ACTION_UP -> {
|
||||
val diffX = mTouchDownX - event.x
|
||||
val diffY = mTouchDownY - event.y
|
||||
mCurrZoomMode = ZOOM_MODE_NONE
|
||||
if (Math.abs(diffX) < CLICK_MAX_DISTANCE && Math.abs(diffY) < CLICK_MAX_DISTANCE && System.currentTimeMillis() - mTouchDownTime < CLICK_MAX_DURATION) {
|
||||
performClick()
|
||||
} else {
|
||||
val downGestureDuration = System.currentTimeMillis() - mTouchDownTime
|
||||
val areDiffsOK = Math.abs(diffY) > Math.abs(diffX) && diffY < -mCloseDownThreshold
|
||||
if (mSaveScale == 1f && !mIgnoreCloseDown && areDiffsOK && context.config.allowDownGesture && downGestureDuration < MAX_CLOSE_DOWN_GESTURE_DURATION) {
|
||||
mCloseDownCallback?.invoke()
|
||||
}
|
||||
}
|
||||
mIgnoreCloseDown = false
|
||||
}
|
||||
MotionEvent.ACTION_POINTER_DOWN -> {
|
||||
mLastTouchX = event.x
|
||||
mLastTouchY = event.y
|
||||
mCurrZoomMode = ZOOM_MODE_ZOOM
|
||||
}
|
||||
MotionEvent.ACTION_MOVE -> {
|
||||
if (mCurrZoomMode == ZOOM_MODE_ZOOM || mCurrZoomMode == ZOOM_MODE_DRAG && mSaveScale > MIN_VIDEO_ZOOM_SCALE) {
|
||||
var diffX = event.x - mLastTouchX
|
||||
|
||||
// horizontal bounds
|
||||
if (mCurrentViewport.left >= 0) {
|
||||
diffX = -mCurrentViewport.left
|
||||
} else if (mCurrentViewport.right + diffX >= mScreenWidth * mSaveScale) {
|
||||
diffX = -((mScreenWidth * mSaveScale) - mCurrentViewport.right)
|
||||
}
|
||||
|
||||
mCurrentViewport.left += diffX
|
||||
mCurrentViewport.right += diffX
|
||||
|
||||
mMatrix.postTranslate(diffX, 0f)
|
||||
|
||||
mCurrentViewport.left = Math.max(mCurrentViewport.left, 0f)
|
||||
mCurrentViewport.right = Math.min(mCurrentViewport.right, mScreenWidth)
|
||||
|
||||
mLastTouchX = event.x
|
||||
mLastTouchY = event.y
|
||||
}
|
||||
}
|
||||
MotionEvent.ACTION_POINTER_UP -> {
|
||||
mCurrZoomMode = ZOOM_MODE_NONE
|
||||
}
|
||||
}
|
||||
|
||||
setTransform(mMatrix)
|
||||
invalidate()
|
||||
return true
|
||||
}
|
||||
|
||||
// taken from https://github.com/Manuiq/ZoomableTextureView
|
||||
private inner class ScaleListener : ScaleGestureDetector.SimpleOnScaleGestureListener() {
|
||||
override fun onScaleBegin(detector: ScaleGestureDetector): Boolean {
|
||||
mCurrZoomMode = ZOOM_MODE_ZOOM
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onScale(detector: ScaleGestureDetector): Boolean {
|
||||
if (width <= 0 || height <= 0) {
|
||||
return true
|
||||
}
|
||||
|
||||
mLastFocusX = detector.focusX
|
||||
mLastFocusY = detector.focusY
|
||||
var scaleFactor = detector.scaleFactor
|
||||
val origScale = mSaveScale
|
||||
mSaveScale *= scaleFactor
|
||||
|
||||
if (mSaveScale > MAX_VIDEO_ZOOM_SCALE) {
|
||||
mSaveScale = MAX_VIDEO_ZOOM_SCALE
|
||||
scaleFactor = MAX_VIDEO_ZOOM_SCALE / origScale
|
||||
} else if (mSaveScale < MIN_VIDEO_ZOOM_SCALE) {
|
||||
mSaveScale = MIN_VIDEO_ZOOM_SCALE
|
||||
scaleFactor = MIN_VIDEO_ZOOM_SCALE / origScale
|
||||
}
|
||||
|
||||
mMatrix.postScale(scaleFactor, scaleFactor, detector.focusX, detector.focusY)
|
||||
mMatrix.getValues(mMatrices)
|
||||
val left = mMatrices[Matrix.MTRANS_X]
|
||||
val top = mMatrices[Matrix.MTRANS_Y]
|
||||
val right = mScreenWidth - left
|
||||
val bottom = mScreenHeight - top
|
||||
mCurrentViewport.set(left, top, right, bottom)
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
BIN
app/src/main/res/drawable-hdpi/ic_draw.png
Normal file
BIN
app/src/main/res/drawable-hdpi/ic_draw.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 464 B |
BIN
app/src/main/res/drawable-xhdpi/ic_draw.png
Normal file
BIN
app/src/main/res/drawable-xhdpi/ic_draw.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 601 B |
BIN
app/src/main/res/drawable-xxhdpi/ic_draw.png
Normal file
BIN
app/src/main/res/drawable-xxhdpi/ic_draw.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 867 B |
BIN
app/src/main/res/drawable-xxxhdpi/ic_draw.png
Normal file
BIN
app/src/main/res/drawable-xxxhdpi/ic_draw.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
|
@ -11,18 +11,26 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_above="@+id/bottom_editor_crop_rotate_actions"
|
||||
android:layout_marginBottom="@dimen/activity_margin"/>
|
||||
android:layout_marginBottom="@dimen/bottom_filters_height_with_margin"/>
|
||||
|
||||
<com.theartofdev.edmodo.cropper.CropImageView
|
||||
android:id="@+id/crop_image_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_above="@+id/bottom_editor_crop_rotate_actions"
|
||||
android:layout_marginBottom="@dimen/activity_margin"
|
||||
android:layout_marginBottom="@dimen/bottom_actions_height_bigger"
|
||||
android:visibility="gone"
|
||||
app:cropBackgroundColor="@color/crop_image_view_background"
|
||||
app:cropInitialCropWindowPaddingRatio="0"/>
|
||||
|
||||
<com.simplemobiletools.gallery.pro.views.EditorDrawCanvas
|
||||
android:id="@+id/editor_draw_canvas"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_marginBottom="@dimen/bottom_actions_height_double"
|
||||
android:background="@android:color/transparent"
|
||||
android:visibility="gone"/>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/bottom_editor_actions_background"
|
||||
android:layout_width="match_parent"
|
||||
|
@ -54,6 +62,14 @@
|
|||
android:layout_above="@+id/bottom_editor_primary_actions"
|
||||
android:visibility="gone"/>
|
||||
|
||||
<include
|
||||
android:id="@+id/bottom_editor_draw_actions"
|
||||
layout="@layout/bottom_editor_draw_actions"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_above="@+id/bottom_editor_primary_actions"
|
||||
android:visibility="gone"/>
|
||||
|
||||
<include
|
||||
android:id="@+id/bottom_editor_primary_actions"
|
||||
layout="@layout/bottom_editor_primary_actions"/>
|
||||
|
|
|
@ -280,6 +280,30 @@
|
|||
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/settings_open_videos_on_separate_screen_holder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingLeft="@dimen/normal_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingRight="@dimen/normal_margin"
|
||||
android:paddingBottom="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_open_videos_on_separate_screen"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@null"
|
||||
android:clickable="false"
|
||||
android:paddingStart="@dimen/medium_margin"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:text="@string/open_videos_on_separate_screen"
|
||||
app:switchPadding="@dimen/medium_margin"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/settings_allow_video_gestures_holder"
|
||||
android:layout_width="match_parent"
|
||||
|
|
58
app/src/main/res/layout/bottom_editor_draw_actions.xml
Normal file
58
app/src/main/res/layout/bottom_editor_draw_actions.xml
Normal file
|
@ -0,0 +1,58 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/bottom_editor_draw_actions_wrapper"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/bottom_actions_height"
|
||||
android:layout_alignParentBottom="true">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySeekBar
|
||||
android:id="@+id/bottom_draw_width"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginLeft="@dimen/activity_margin"
|
||||
android:layout_marginRight="@dimen/activity_margin"
|
||||
android:max="100"
|
||||
android:progress="50"
|
||||
app:layout_constraintBottom_toBottomOf="@id/bottom_draw_color"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toLeftOf="@+id/bottom_draw_color"
|
||||
app:layout_constraintTop_toTopOf="@+id/bottom_draw_color"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/bottom_draw_color_clickable"
|
||||
android:layout_width="@dimen/bottom_editor_color_picker_size"
|
||||
android:layout_height="@dimen/bottom_editor_color_picker_size"
|
||||
android:layout_marginRight="@dimen/small_margin"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintRight_toLeftOf="@+id/bottom_draw_undo"
|
||||
app:layout_constraintTop_toTopOf="parent"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/bottom_draw_color"
|
||||
android:layout_width="@dimen/bottom_editor_color_picker_size"
|
||||
android:layout_height="@dimen/bottom_editor_color_picker_size"
|
||||
android:layout_marginRight="@dimen/small_margin"
|
||||
android:clickable="false"
|
||||
android:padding="@dimen/small_margin"
|
||||
android:src="@drawable/circle_background"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintRight_toLeftOf="@+id/bottom_draw_undo"
|
||||
app:layout_constraintTop_toTopOf="parent"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/bottom_draw_undo"
|
||||
android:layout_width="@dimen/bottom_editor_color_picker_size"
|
||||
android:layout_height="@dimen/bottom_editor_color_picker_size"
|
||||
android:layout_marginRight="@dimen/normal_margin"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
android:clickable="false"
|
||||
android:padding="@dimen/medium_margin"
|
||||
android:src="@drawable/ic_undo"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -16,7 +16,6 @@
|
|||
android:src="@drawable/ic_photo_filter"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@+id/bottom_primary_crop_rotate"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"/>
|
||||
|
||||
|
@ -28,9 +27,20 @@
|
|||
android:padding="@dimen/normal_margin"
|
||||
android:src="@drawable/ic_crop_rotate"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintEnd_toStartOf="@+id/bottom_primary_draw"
|
||||
app:layout_constraintStart_toEndOf="@+id/bottom_primary_filter"
|
||||
app:layout_constraintTop_toTopOf="parent"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/bottom_primary_draw"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
android:padding="@dimen/normal_margin"
|
||||
android:src="@drawable/ic_draw"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@+id/bottom_primary_crop_rotate"
|
||||
app:layout_constraintTop_toTopOf="parent"/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
android:textSize="@dimen/normal_text_size"/>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/include_gifs_holder"
|
||||
android:id="@+id/include_videos_holder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/interval_label"
|
||||
|
@ -47,6 +47,27 @@
|
|||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingBottom="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/include_videos"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@null"
|
||||
android:clickable="false"
|
||||
android:text="@string/include_videos"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/include_gifs_holder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/include_videos_holder"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:paddingStart="@dimen/medium_margin"
|
||||
android:paddingLeft="@dimen/medium_margin"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
android:paddingBottom="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/include_gifs"
|
||||
android:layout_width="match_parent"
|
||||
|
|
|
@ -11,10 +11,11 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
<pl.droidsonroids.gif.GifTextureView
|
||||
<com.simplemobiletools.gallery.pro.views.MyZoomableGifTextureView
|
||||
android:id="@+id/gif_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:scaleType="matrix"
|
||||
android:visibility="gone"/>
|
||||
|
||||
<com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
|
||||
|
|
|
@ -11,6 +11,12 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
<TextureView
|
||||
android:id="@+id/video_surface"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerInParent="true"/>
|
||||
|
||||
<com.simplemobiletools.gallery.pro.views.MediaSideScroll
|
||||
android:id="@+id/video_volume_controller"
|
||||
android:layout_width="@dimen/media_side_slider_width"
|
||||
|
@ -83,4 +89,6 @@
|
|||
android:visibility="gone"
|
||||
tools:text="My video\nAnother line"/>
|
||||
|
||||
<include layout="@layout/bottom_video_time_holder"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
|
|
@ -16,6 +16,23 @@
|
|||
android:icon="@drawable/ic_share"
|
||||
android:title="@string/share"
|
||||
app:showAsAction="ifRoom"/>
|
||||
<item
|
||||
android:id="@+id/cab_rotate"
|
||||
android:icon="@drawable/ic_rotate_right"
|
||||
android:title="@string/rotate"
|
||||
app:showAsAction="ifRoom">
|
||||
<menu>
|
||||
<item
|
||||
android:id="@+id/cab_rotate_right"
|
||||
android:title="@string/rotate_right"/>
|
||||
<item
|
||||
android:id="@+id/cab_rotate_left"
|
||||
android:title="@string/rotate_left"/>
|
||||
<item
|
||||
android:id="@+id/cab_rotate_one_eighty"
|
||||
android:title="@string/rotate_one_eighty"/>
|
||||
</menu>
|
||||
</item>
|
||||
<item
|
||||
android:id="@+id/cab_properties"
|
||||
android:icon="@drawable/ic_info"
|
||||
|
|
|
@ -11,4 +11,9 @@
|
|||
android:icon="@drawable/ic_edit"
|
||||
android:title="@string/edit_with"
|
||||
app:showAsAction="ifRoom"/>
|
||||
<item
|
||||
android:id="@+id/share"
|
||||
android:icon="@drawable/ic_share"
|
||||
android:title="@string/share"
|
||||
app:showAsAction="ifRoom"/>
|
||||
</menu>
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">Fix Date Taken value</string>
|
||||
<string name="fixing">Fixing…</string>
|
||||
<string name="dates_fixed_successfully">Dates fixed successfully</string>
|
||||
<string name="share_resized">Share a resized version</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">فلتر الميديا</string>
|
||||
|
@ -91,7 +92,6 @@
|
|||
<string name="flip">قلب</string>
|
||||
<string name="flip_horizontally">قلب أفقيا</string>
|
||||
<string name="flip_vertically">قلب عموديا</string>
|
||||
<string name="edit_with">تعديل باستخدام</string>
|
||||
<string name="free_aspect_ratio">Free</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">Other</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
|
@ -161,7 +161,6 @@
|
|||
<string name="allow_photo_gestures">السماح بالتحكم في سطوع الصورة باستخدام الإيماءات الرأسية</string>
|
||||
<string name="allow_video_gestures">السماح بالتحكم في صوت الفيديو والسطوع بالإيماءات العمودية</string>
|
||||
<string name="show_media_count">إظهار عدد لوسائط المجلد على طريقة العرض الرئيسية</string>
|
||||
<string name="replace_share_with_rotate">استبدال خيار المشاركة مع خيار تدوير في القائمة ملء الشاشة</string>
|
||||
<string name="show_extended_details">عرض تفاصيل موسعة على وسائط ملء الشاشة</string>
|
||||
<string name="manage_extended_details">إدارة المجلدات المستبعدة</string>
|
||||
<string name="one_finger_zoom">السماح بتكبير الوسائط بأصبع واحد في وضع ملء الشاشة</string>
|
||||
|
@ -176,6 +175,7 @@
|
|||
<string name="show_recycle_bin_last">Show the Recycle Bin as the last item on the main screen</string>
|
||||
<string name="allow_down_gesture">Allow closing the fullscreen view with a down gesture</string>
|
||||
<string name="allow_one_to_one_zoom">Allow 1:1 zooming in with two double taps</string>
|
||||
<string name="open_videos_on_separate_screen">Always open videos on a separate screen with new horizontal gestures</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">المصغرات</string>
|
||||
|
@ -197,7 +197,6 @@
|
|||
<string name="faq_3_text">يمكنك الضغط لفترة طويلة على الألبوم المطلوب وتحديد أيقونة الدبوس في الإجراء ، والتي سوف تثبيته إلى الأعلى. يمكنك تثبيت عدة مجلدات أيضًا ، وسيتم ترتيب العناصر المثبتة حسب طريقة الفرز الافتراضية.</string>
|
||||
<string name="faq_4_title">كيف يمكنني تقديم مقاطع فيديو بسرعة؟</string>
|
||||
<string name="faq_4_text">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string>
|
||||
<string name="faq_4_text_old">يمكنك النقر على النصوص الحالية أو أقصى مدة قريبة من شريط السحب ، والتي ستنقل الفيديو إما للخلف أو إلى الأمام.</string>
|
||||
<string name="faq_5_title">ما الفرق بين إخفاء واستبعاد مجلد؟</string>
|
||||
<string name="faq_5_text">يمنع الاستبعاد من عرض المجلد في الاستوديو البسيط فقط ، بينما يقوم بإخفاء بالعمل على مستوى النظام ككل ويقوم بإخفاء المجلد من المعارض الأخرى أيضًا. وهو يعمل عن طريق إنشاء ملف \".nomedia\" فارغ في المجلد المحدد ، والذي يمكنك بعد ذلك إزالته مع أي مدير ملفات أيضًا.</string>
|
||||
<string name="faq_6_title">لماذا تظهر المجلدات التي تحتوي على ملصقات أو ملصقات موسيقى تغطيها؟</string>
|
||||
|
@ -206,8 +205,6 @@
|
|||
<string name="faq_7_text">يمكن أن يكون ذلك لأسباب متعددة ، ولكن حلها أمر سهل. أذهب إلى الإعدادات -> إدارة المجلدات المضمنة ، اضغط علامة الزائد وانتقل إلى المجلد المطلوب.</string>
|
||||
<string name="faq_8_title">ماذا لو كنت أرغب في رؤية بعض المجلدات الخاصة؟</string>
|
||||
<string name="faq_8_text">لا يؤدي إضافة مجلد في \"المجلدات المضمنة\" إلى استبعاد أي شيء تلقائيًا. ما يمكنك فعله هو الذهاب إلى الإعدادات -> إدارة المجلدات المستبعدة ، واستبعاد المجلد الجذر \"/\" ، ثم إضافة المجلدات المطلوبة في الإعدادات -> إدارة المجلدات المضمنة. سيؤدي ذلك إلى إظهار المجلدات المحددة فقط ، حيث أن الاستبعاد والتضمين يكونان متكررين ، وإذا تم استبعاد أحد المجلدات وإدراجه ، فسيظهر.</string>
|
||||
<string name="faq_9_title">الصور بملء الشاشة لها آثار غريبة ، هل يمكنني تحسين الجودة؟</string>
|
||||
<string name="faq_9_text">نعم ، هناك تبديل في الإعدادات يقول \"استبدل صورًا ذات زووم عميق بجودة أفضل منها\" ، يمكنك استخدام ذلك. سيؤدي ذلك إلى تحسين جودة الصور ، ولكن ستظهر بشكل واضح عند محاولة التكبير كثيرًا.</string>
|
||||
<string name="faq_10_title">هل يمكنني قص الصور باستخدام هذا التطبيق؟</string>
|
||||
<string name="faq_10_text">نعم ، يمكنك اقتصاص الصور في المحرر ، عن طريق سحب زوايا الصورة. يمكنك الوصول إلى المحرر إما عن طريق الضغط لفترة طويلة على صورة مصغرة وتحديد تحرير ، أو تحديد تحرير من العرض بملء الشاشة.</string>
|
||||
<string name="faq_11_title">Can I somehow group media file thumbnails?</string>
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">Fix Date Taken value</string>
|
||||
<string name="fixing">Fixing…</string>
|
||||
<string name="dates_fixed_successfully">Dates fixed successfully</string>
|
||||
<string name="share_resized">Share a resized version</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">Filter media</string>
|
||||
|
@ -87,7 +88,6 @@
|
|||
<string name="flip">Flip</string>
|
||||
<string name="flip_horizontally">Flip horizontally</string>
|
||||
<string name="flip_vertically">Flip vertically</string>
|
||||
<string name="edit_with">Edit with</string>
|
||||
<string name="free_aspect_ratio">Free</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">Other</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
|
@ -157,7 +157,6 @@
|
|||
<string name="allow_photo_gestures">Allow controlling photo brightness with vertical gestures</string>
|
||||
<string name="allow_video_gestures">Allow controlling video volume and brightness with vertical gestures</string>
|
||||
<string name="show_media_count">Show folder media count on the main view</string>
|
||||
<string name="replace_share_with_rotate">Replace Share with Rotate at fullscreen menu</string>
|
||||
<string name="show_extended_details">Show extended details over fullscreen media</string>
|
||||
<string name="manage_extended_details">Manage extended details</string>
|
||||
<string name="one_finger_zoom">Allow one finger zoom at fullscreen media</string>
|
||||
|
@ -172,6 +171,7 @@
|
|||
<string name="show_recycle_bin_last">Show the Recycle Bin as the last item on the main screen</string>
|
||||
<string name="allow_down_gesture">Allow closing the fullscreen view with a down gesture</string>
|
||||
<string name="allow_one_to_one_zoom">Allow 1:1 zooming in with two double taps</string>
|
||||
<string name="open_videos_on_separate_screen">Always open videos on a separate screen with new horizontal gestures</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Thumbnails</string>
|
||||
|
@ -194,7 +194,6 @@
|
|||
<string name="faq_3_text">You can long press the desired album and select the Pin icon at the actionmenu, that will pin it to the top. You can pin multiple folders too, pinned items will be sorted by the default sorting method.</string>
|
||||
<string name="faq_4_title">How can I fast-forward videos?</string>
|
||||
<string name="faq_4_text">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string>
|
||||
<string name="faq_4_text_old">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string>
|
||||
<string name="faq_5_title">What is the difference between hiding and excluding a folder?</string>
|
||||
<string name="faq_5_text">Exclude prevents displaying the folder only in Simple Gallery, while Hide works system-wise and it hides the folder from other galleries too. It works by creating an empty \".nomedia\" file in the given folder, which you can then remove with any file manager too.</string>
|
||||
<string name="faq_6_title">Why do folders with music cover art or stickers show up?</string>
|
||||
|
@ -204,8 +203,6 @@
|
|||
<string name="faq_8_title">What if I want just a few particular folders visible?</string>
|
||||
<string name="faq_8_text">Adding a folder at the Included Folders doesn\'t automatically exclude anything. What you can do is go in Settings -> Manage Excluded Folders, exclude the root folder \"/\", then add the desired folders at Settings -> Manage Included Folders.
|
||||
That will make only the selected folders visible, as both excluding and including are recursive and if a folder is both excluded and included, it will show up.</string>
|
||||
<string name="faq_9_title">Fullscreen images have weird artifacts, can I somehow improve the quality?</string>
|
||||
<string name="faq_9_text">Yea, there is a toggle in Settings saying \"Replace deep zoomable images with better quality ones\", you can use that. It will improve the quality of the images, but they will get blurred once you try zooming in too much.</string>
|
||||
<string name="faq_10_title">Can I crop images with this app?</string>
|
||||
<string name="faq_10_text">Yes, you can crop images in the editor, by dragging the image corners. You can get to the editor either by long pressing an image thumbnail and selecting Edit, or selecting Edit from the fullscreen view.</string>
|
||||
<string name="faq_11_title">Can I somehow group media file thumbnails?</string>
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">Fixar la data de presa</string>
|
||||
<string name="fixing">Fixant…</string>
|
||||
<string name="dates_fixed_successfully">Data fixada correctament</string>
|
||||
<string name="share_resized">Share a resized version</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">Filtre d\'arxius</string>
|
||||
|
@ -87,7 +88,6 @@
|
|||
<string name="flip">Girar</string>
|
||||
<string name="flip_horizontally">Horizontalment</string>
|
||||
<string name="flip_vertically">Verticalment</string>
|
||||
<string name="edit_with">Editar amb</string>
|
||||
<string name="free_aspect_ratio">Lliure</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">Altres</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
|
@ -157,7 +157,6 @@
|
|||
<string name="allow_photo_gestures">Permet controlar la brillantor amb gestos verticals</string>
|
||||
<string name="allow_video_gestures">Permet controlar el volum i la brillantor del vídeo amb gestos verticals</string>
|
||||
<string name="show_media_count">Mostrar el número de mitjans de les carpetes a la vista principal</string>
|
||||
<string name="replace_share_with_rotate">Reemplaçar Compartir per Girar al menú de pantalla complerta</string>
|
||||
<string name="show_extended_details">Mostrar detalls estesos sobre mitjans a pantalla complerta</string>
|
||||
<string name="manage_extended_details">Gestioneu els detalls ampliats</string>
|
||||
<string name="one_finger_zoom">Permet fer zoom amb un sol dit a pantalla complerta</string>
|
||||
|
@ -172,6 +171,7 @@
|
|||
<string name="show_recycle_bin_last">Mostra la paperera de reciclatge com a últim element a la pantalla principal</string>
|
||||
<string name="allow_down_gesture">Permet tancar la vista de pantalla completa amb un gest avall</string>
|
||||
<string name="allow_one_to_one_zoom">Allow 1:1 zooming in with two double taps</string>
|
||||
<string name="open_videos_on_separate_screen">Always open videos on a separate screen with new horizontal gestures</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Miniatures</string>
|
||||
|
@ -194,7 +194,6 @@
|
|||
<string name="faq_3_text">Podeu prémer l\'àlbum desitjat i seleccionar la icona de la xinxeta al menú d\'acció i el fixarà a la part superior. També podeu enganxar diverses carpetes, els elements fixats s\'ordenaran pel mètode de classificació predeterminat.</string>
|
||||
<string name="faq_4_title">Com puc fer avançar els vídeos?</string>
|
||||
<string name="faq_4_text">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string>
|
||||
<string name="faq_4_text_old">Podeu fer clic als textos actuals o de duració màxima que hi ha a prop de la barra de cerca, això mourà el vídeo cap a enrere o cap endavant.</string>
|
||||
<string name="faq_5_title">Quina és la diferència entre ocultar i excloure una carpeta?</string>
|
||||
<string name="faq_5_text">Excloure impedeix mostrar la carpeta només a Simple Galery, mentre que Ocultar també amaga la carpeta a altres galeries. Funciona creant un fitxer \". Nomedia \" buit a la carpeta donada, que podeu eliminar amb qualsevol gestor de fitxers.</string>
|
||||
<string name="faq_6_title">Per què apareixen les carpetes amb les portades de la música o adhesius?</string>
|
||||
|
@ -204,8 +203,6 @@
|
|||
<string name="faq_8_title">Què passa si vull veure només algunes carpetes concretes?</string>
|
||||
<string name="faq_8_text">L\'addició d\'una carpeta a les carpetes incloses no exclou automàticament res. El que podeu fer és anar a Configuració -> Gestionar carpetes excloses, excloure la carpeta arrel \"/\" i, a continuació, afegir les carpetes desitjades a Configuració -> Gestionar carpetes incloses.
|
||||
Això farà que només les carpetes seleccionades siguin visibles, ja que tant excloure com incloure són recursius i si una carpeta està exclosa i inclosa, es mostrarà.</string>
|
||||
<string name="faq_9_title">Les imatges a pantalla completa tenen artefactes estranys, puc millorar d\'alguna manera la qualitat?</string>
|
||||
<string name="faq_9_text">Sí, hi ha un commutador a la configuració que diu \"Substituïu imatges ampliades i de gran qualitat\", podeu fer-ho. Millora la qualitat de les imatges, però es borraran una vegada que intenteu fer zoom massa.</string>
|
||||
<string name="faq_10_title">Puc retallar imatges amb aquesta aplicació?</string>
|
||||
<string name="faq_10_text">Sí, pots retallar imatges a l\'editor, arrossegant les cantonades de la imatge. Pots accedir a l\'editor prement una miniatura d\'imatge i seleccionant Edita o seleccionant Edita des de la visualització de pantalla completa.</string>
|
||||
<string name="faq_11_title">Puc agrupar d\'alguna manera les miniatures del fitxer multimèdia?</string>
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">Opravit datum vytvoření</string>
|
||||
<string name="fixing">Opravuji…</string>
|
||||
<string name="dates_fixed_successfully">Datumy byly úspěšně opraveny</string>
|
||||
<string name="share_resized">Share a resized version</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">Filtr médií</string>
|
||||
|
@ -87,7 +88,6 @@
|
|||
<string name="flip">Překlopit</string>
|
||||
<string name="flip_horizontally">Překlopit vodorovně</string>
|
||||
<string name="flip_vertically">Překlopit svisle</string>
|
||||
<string name="edit_with">Upravit s</string>
|
||||
<string name="free_aspect_ratio">Volný</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">Other</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
|
@ -157,7 +157,6 @@
|
|||
<string name="allow_photo_gestures">Povolit ovládání jasu vertikálními tahy</string>
|
||||
<string name="allow_video_gestures">Povolit ovládání hlasitosti a jasu videí vertikálními tahy</string>
|
||||
<string name="show_media_count">Zobrazit počet médií ve složce na hlavní obrazovce</string>
|
||||
<string name="replace_share_with_rotate">Nahradit Sdílení s Otočením v celoobrazovkovém menu</string>
|
||||
<string name="show_extended_details">Zobrazit rozšířené vlastnosti přes celoobrazovkové média</string>
|
||||
<string name="manage_extended_details">Spravovat rozšířené vlastnosti</string>
|
||||
<string name="one_finger_zoom">Povolit přibližování jedním prstem v celoobrazovkovém režimu</string>
|
||||
|
@ -172,6 +171,7 @@
|
|||
<string name="show_recycle_bin_last">Zobrazit odpadkový koš jako poslední položku na hlavní obrazovce</string>
|
||||
<string name="allow_down_gesture">Povolit zavírání celoobrazovkového režimu tažením prstu dolů</string>
|
||||
<string name="allow_one_to_one_zoom">Allow 1:1 zooming in with two double taps</string>
|
||||
<string name="open_videos_on_separate_screen">Always open videos on a separate screen with new horizontal gestures</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Náhledy</string>
|
||||
|
@ -194,7 +194,6 @@
|
|||
<string name="faq_3_text">Můžete označit danou složku dlouhým podržením a zvolit tlačítko s obrázkem připínáčku, to jej připne na vrch. Můžete připnout i více složek, budou seřazeny podle zvoleného řazení.</string>
|
||||
<string name="faq_4_title">Jak můžu rychle posunout videa?</string>
|
||||
<string name="faq_4_text">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string>
|
||||
<string name="faq_4_text_old">Můžete kliknout na texty současné nebo maximální délky videa, které jsou vedle indikátoru současného progresu. To posune video buď vpřed, nebo vzad.</string>
|
||||
<string name="faq_5_title">Jaký je rozdíl mezi Skrytím a Vyloučením složky?</string>
|
||||
<string name="faq_5_text">Zatímco vyloučení předejde zobrazení složky pouze vrámci Jednoduché Galerie, skrytí ho ukryje vrámci celého systému, tedy to ovlivní i ostatní galerie. Skrytí funguje pomocí vytvoření prázdného \".nomedia\" souboru v daném adresáři, který můžete vymazat i nějakým správcem souborů.</string>
|
||||
<string name="faq_6_title">Proč se mi zobrazují složky s obaly hudebních alb, nebo nálepkami?</string>
|
||||
|
@ -204,8 +203,6 @@
|
|||
<string name="faq_8_title">Co v případě, že chci mít zobrazeno pouze několik složek?</string>
|
||||
<string name="faq_8_text">Přidání složky mezi Přidané složky automaticky nevyloučí ostatní. Můžete ale jít do Nastavení -> Spravovat vyloučené složky a zvolit Kořenovou složku \"/\", následně přidat požadované složky v Nastavení -> Spravovat přidané složky.
|
||||
To způsobí, že budou zobrazeny pouze vyžádané složky, protože vyloučení i přidání fungují rekurzivně a pokud je složka vyloučena i přidaná, bude viditelná.</string>
|
||||
<string name="faq_9_title">Fotky přes celou obrazovku mají zhoršenou kvalitu, můžu to nějak zlepšit?</string>
|
||||
<string name="faq_9_text">Ano, v nastavení je přepínač s textem \"Nahradit hluboko priblížiteľné obrázky s obrázky s lepší kvalitou\", můžete to zkusit. Způsobí to vyšší kvalitu obrázků, po přiblížení se ale budou rozmazávat mnohem dříve.</string>
|
||||
<string name="faq_10_title">Můžu s touto aplikací oříznout obrázky?</string>
|
||||
<string name="faq_10_text">Ano, oříznutí je možné v editoru potažením rohů obrázků. Do editoru se můžete dostat buď dlouhým podržením náhledu obrázku a zvolením menu položky Upravit nebo zvolením Upravit při celoobrazovkovém režimu.</string>
|
||||
<string name="faq_11_title">Můžu nějakým způsobem seskupit náhledy souborů?</string>
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">Fiks Dato Taget værdi</string>
|
||||
<string name="fixing">Fikser…</string>
|
||||
<string name="dates_fixed_successfully">Datoer fikset med succes</string>
|
||||
<string name="share_resized">Share a resized version</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">Filtrér medier</string>
|
||||
|
@ -87,7 +88,6 @@
|
|||
<string name="flip">Spejlvend</string>
|
||||
<string name="flip_horizontally">Spejlvend vandret</string>
|
||||
<string name="flip_vertically">Spejlvend lodret</string>
|
||||
<string name="edit_with">Rediger med</string>
|
||||
<string name="free_aspect_ratio">Fri</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">Andet</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
|
@ -157,7 +157,6 @@
|
|||
<string name="allow_photo_gestures">Tillad kontrol af lysstyrke på billeder med lodrette bevægelser</string>
|
||||
<string name="allow_video_gestures">Tillad kontrol af lyd- og lysstyrke på videoer med lodrette bevægelser</string>
|
||||
<string name="show_media_count">Vis antal filer i hver mappe i oversigten</string>
|
||||
<string name="replace_share_with_rotate">Erstat Del med Rotér i fuldskærmsmenuen</string>
|
||||
<string name="show_extended_details">Vis udvidede oplysninger over medier i fuldskærm</string>
|
||||
<string name="manage_extended_details">Administrer udvidede oplysninger</string>
|
||||
<string name="one_finger_zoom">Tillad zoom med en finger når medier er i fuldskærm</string>
|
||||
|
@ -172,6 +171,7 @@
|
|||
<string name="show_recycle_bin_last">Vis papirkurven som sidste element på hovedskærmen</string>
|
||||
<string name="allow_down_gesture">Luk fuldskærmsvisning ved at swipe ned</string>
|
||||
<string name="allow_one_to_one_zoom">Tillad 1:1 zooming med to dobbelttryk</string>
|
||||
<string name="open_videos_on_separate_screen">Always open videos on a separate screen with new horizontal gestures</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Miniaturer</string>
|
||||
|
@ -194,7 +194,6 @@
|
|||
<string name="faq_3_text">You can long press the desired album and select the Pin icon at the actionmenu, that will pin it to the top. You can pin multiple folders too, pinned items will be sorted by the default sorting method.</string>
|
||||
<string name="faq_4_title">How can I fast-forward videos?</string>
|
||||
<string name="faq_4_text">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string>
|
||||
<string name="faq_4_text_old">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string>
|
||||
<string name="faq_5_title">What is the difference between hiding and excluding a folder?</string>
|
||||
<string name="faq_5_text">Exclude prevents displaying the folder only in Simple Gallery, while Hide works system-wise and it hides the folder from other galleries too. It works by creating an empty \".nomedia\" file in the given folder, which you can then remove with any file manager too.</string>
|
||||
<string name="faq_6_title">Why do folders with music cover art or stickers show up?</string>
|
||||
|
@ -204,8 +203,6 @@
|
|||
<string name="faq_8_title">What if I want just a few particular folders visible?</string>
|
||||
<string name="faq_8_text">Adding a folder at the Included Folders doesn\'t automatically exclude anything. What you can do is go in Settings -> Manage Excluded Folders, exclude the root folder \"/\", then add the desired folders at Settings -> Manage Included Folders.
|
||||
That will make only the selected folders visible, as both excluding and including are recursive and if a folder is both excluded and included, it will show up.</string>
|
||||
<string name="faq_9_title">Fullscreen images have weird artifacts, can I somehow improve the quality?</string>
|
||||
<string name="faq_9_text">Yea, there is a toggle in Settings saying \"Replace deep zoomable images with better quality ones\", you can use that. It will improve the quality of the images, but they will get blurred once you try zooming in too much.</string>
|
||||
<string name="faq_10_title">Can I crop images with this app?</string>
|
||||
<string name="faq_10_text">Yes, you can crop images in the editor, by dragging the image corners. You can get to the editor either by long pressing an image thumbnail and selecting Edit, or selecting Edit from the fullscreen view.</string>
|
||||
<string name="faq_11_title">Can I somehow group media file thumbnails?</string>
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">Aufnahmedatum korrigieren</string>
|
||||
<string name="fixing">Korrigiere…</string>
|
||||
<string name="dates_fixed_successfully">Datum erfolgreich korrigiert.</string>
|
||||
<string name="share_resized">Share a resized version</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">Filter</string>
|
||||
|
@ -87,7 +88,6 @@
|
|||
<string name="flip">Spiegeln</string>
|
||||
<string name="flip_horizontally">Horizontal spiegeln</string>
|
||||
<string name="flip_vertically">Vertikal spiegeln</string>
|
||||
<string name="edit_with">Bearbeiten mit:</string>
|
||||
<string name="free_aspect_ratio">Beliebiges</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">Anderes</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
|
@ -157,7 +157,6 @@
|
|||
<string name="allow_photo_gestures">Fotohelligkeit mit vertikalen Gesten ändern</string>
|
||||
<string name="allow_video_gestures">Gesten für Videolautstärke/Helligkeit zulassen</string>
|
||||
<string name="show_media_count">Medienanzahl bei Ordnern anzeigen</string>
|
||||
<string name="replace_share_with_rotate">Teilen/Drehen im Vollbild-Menü vertauschen</string>
|
||||
<string name="show_extended_details">Dateieigenschaften in Vollbild-Anzeige einblenden</string>
|
||||
<string name="manage_extended_details">Eigenschaften auswählen</string>
|
||||
<string name="one_finger_zoom">Ein-Finger-Zoom im Vollbild zulassen</string>
|
||||
|
@ -172,6 +171,7 @@
|
|||
<string name="show_recycle_bin_last">Zeige den Papierkorb als letztes Element auf dem Hauptbildschirm</string>
|
||||
<string name="allow_down_gesture">Erlaube das Schließen der Vollbildansicht mit einer Abwärtsgeste</string>
|
||||
<string name="allow_one_to_one_zoom">Allow 1:1 zooming in with two double taps</string>
|
||||
<string name="open_videos_on_separate_screen">Always open videos on a separate screen with new horizontal gestures</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Thumbnails</string>
|
||||
|
@ -194,7 +194,6 @@
|
|||
<string name="faq_3_text">Du kannst lange auf das gewünschte Album drücken und im Aktionsmenü das Stecknadelsymbol auswählen; es wird nun zuoberst angepinnt. Ebenso kannst du mehrere Ordner anpinnen. Angepinnte Objekte werden nach der Standardmethode sortiert.</string>
|
||||
<string name="faq_4_title">Wie kann ich in Videos vor- oder zurückspringen?</string>
|
||||
<string name="faq_4_text">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string>
|
||||
<string name="faq_4_text_old">Du kannst auf den Text der aktuellen oder der maximalen Dauer nahe der Suchleiste drücken, um im Video vor- oder zurück zu springen.</string>
|
||||
<string name="faq_5_title">Was ist der Unterschied zwischen \'Verstecken\' und \'Ausschließen\' eines Ordners?</string>
|
||||
<string name="faq_5_text">\'Ausschließen\' verhindert lediglich, dass der Ordner in Schlichte Galerie angezeigt wird. \'Verstecken\' hingegen versteckt den Ordner auch vor anderen Apps. Dies funktioniert durch das Erstellen einer leeren \".nomedia\"-Datei im betroffenen Ordner, welche du mit jedem Dateimanager wieder löschen kannst.</string>
|
||||
<string name="faq_6_title">Wieso erscheinen Ordner mit Musik-Cover oder Stickers?</string>
|
||||
|
@ -203,8 +202,6 @@
|
|||
<string name="faq_7_text">Öffne die Galerie-Einstellungen, wähle dort \'Einbezogene Ordner verwalten\', dann das Plus-Zeichen oben rechts und navigiere zum gewünschten Ordner.</string>
|
||||
<string name="faq_8_title">Wie kann ich erreichen, dass nur ein paar definierte Ordner sichtbar sind?</string>
|
||||
<string name="faq_8_text">Einen Ordner zu den \'einbezogenen Ordnern\' hinzuzufügen, schließt nicht automatisch alle anderen aus. Eine Möglichkeit ist, in den Galerie-Einstellungen \'Ausgeschlossene Ordner verwalten\' zu wählen, den Stammordner \"/\" auszuschliessen und dann alle gewünschten Ordner in \'Einbezogene Ordner verwalten\' hinzuzufügen.</string>
|
||||
<string name="faq_9_title">Als Vollbild angezeigte Bilder haben seltsame Artefakte. Kann ich die Qualität verbessern?</string>
|
||||
<string name="faq_9_text">Ja, es gibt einen Schalter in den Einstellungen, gekennzeichnet mit \"Stark zoombare Bilder durch Bilder mit hoher Qualität ersetzen\". Dieser wird die Bildqualität verbessern, aber sie werden bei sehr hoher Zoomstufe unscharf.</string>
|
||||
<string name="faq_10_title">Kann ich mit dieser App Bilder zuschneiden?</string>
|
||||
<string name="faq_10_text">Ja, du kannst Bilder über das Ziehen der Bildecken im Editor zuschneiden. Du gelangst zum Editor indem du lange auf ein Vorschaubild drückst und Bearbeiten auswählst oder durch Auswählen von Bearbeiten in der Vollbildansicht.</string>
|
||||
<string name="faq_11_title">Kann ich Mediendatei-Thumbnails irgendwie gruppieren?</string>
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">Διόρθωση ημερ. λήψης</string>
|
||||
<string name="fixing">Διορθώνεται…</string>
|
||||
<string name="dates_fixed_successfully">Ημερ. διορθώθηκε με επιτυχία</string>
|
||||
<string name="share_resized">Share a resized version</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">Φιλτράρισμα πολυμέσων</string>
|
||||
|
@ -87,7 +88,6 @@
|
|||
<string name="flip">Αναποδογύρισμα</string>
|
||||
<string name="flip_horizontally">Οριζόντιο αναποδογύρισμα</string>
|
||||
<string name="flip_vertically">Κατακόρυφο αναποδογύρισμα</string>
|
||||
<string name="edit_with">Επεξεργασία με</string>
|
||||
<string name="free_aspect_ratio">Ελεύθερο</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">Other</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
|
@ -157,7 +157,6 @@
|
|||
<string name="allow_photo_gestures">Να επιτρέπεται ο έλεγχος φωτεινότητας με κατακόρυφες κινήσεις</string>
|
||||
<string name="allow_video_gestures">Να επιτρέπεται ο έλεγχος έντασης του βίντεο και φωτεινότητας με κατακόρυφες κινήσεις (gestures)</string>
|
||||
<string name="show_media_count">Εμφάνιση του αριθμού πολυμέσων στον φάκελο, στην κύρια οθόνη</string>
|
||||
<string name="replace_share_with_rotate">Αντικατάσταση της "Κοινής χρήσης" με "Περιστροφή" στο μενού πλήρους οθόνης</string>
|
||||
<string name="show_extended_details">Εμφάνιση λεπτομερειών στα πολυμέσα σε κατάσταση πλήρους οθόνης</string>
|
||||
<string name="manage_extended_details">Διαχείριση εκτεταμένων λεπτομερειών</string>
|
||||
<string name="one_finger_zoom">Να επιτρέπεται μεγένθυση με ένα δάχτυλο σε πλήρη οθόνη</string>
|
||||
|
@ -172,6 +171,7 @@
|
|||
<string name="show_recycle_bin_last">Εμφάνιση του Κάδου ως τελευταίο στοιχείο στην κύρια οθόνη</string>
|
||||
<string name="allow_down_gesture">Επιτρέψτε το κλείσιμο προβολής πλήρους οθόνης με χειρονομία προς τα κάτω</string>
|
||||
<string name="allow_one_to_one_zoom">Allow 1:1 zooming in with two double taps</string>
|
||||
<string name="open_videos_on_separate_screen">Always open videos on a separate screen with new horizontal gestures</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Εικονίδια</string>
|
||||
|
@ -194,7 +194,6 @@
|
|||
<string name="faq_3_text">Μπορείτε να πατήσετε παρατεταμένα στο άλμπουμ και να επιλέξετε το εικονίδιο καρφιτσώματος στο μενού, αυτό θα το καρφιτσώσει στην κορυφή. Επίσης μπορείτε να καρφιτσώσετε πολλαπλούς φακέλους, τα καρφιτσωμένα αντικείμενα θα είναι ταξινομημένα με την προεπιλεγμένη μέθοδο.</string>
|
||||
<string name="faq_4_title">Πώς μπορώ να τρέξω μπροστά (fast-forward) τα βίντεο;</string>
|
||||
<string name="faq_4_text">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string>
|
||||
<string name="faq_4_text_old">Μπορείτε να αγγίξετε στο τρέχον ή στο κείμενο μέγιστης διάρκειας κοντά στην μπάρα αναζήτησης. Αυτό θα μετακινήσει το βίντεο μπροστά ή πίσω.</string>
|
||||
<string name="faq_5_title">Ποια είναι διαφορά μεταξύ απόκρυψης και εξαίρεσης ενός φακέλου;</string>
|
||||
<string name="faq_5_text">Η εξαίρεση δεν επιτρέπει την εμφάνιση του φακέλου μόνο στο Simple Gallery, ενώ η απόκρυψη λειτουργεί σε επίπεδο συστήματος και θα αποκρύψει τον φάκελο και από άλλες εφαρμογές γκάλερι. Λειτουργεί δημιουργώντας ένα άδειο \".nomedia\" αρχείο στον επιλεγμένο φάκελο, το οποίο μπορείτε να το διαγράψετε και με οποιονδήποτε διαχειριστή αρχείων.</string>
|
||||
<string name="faq_6_title">Γιατί εμφανίζονται φάκελοι με εξώφυλλο μουσικής ή αυτόκολλητα;</string>
|
||||
|
@ -204,8 +203,6 @@
|
|||
<string name="faq_8_title">Πώς μπορώ να επιλέξω μόνο κάποιους φακέλους να εμφανίζονται;</string>
|
||||
<string name="faq_8_text">Η προσθήκη ενός φακέλου στους Συμπεριλαμβανόμενους Φακέλους δεν εξαιρεί αυτόματα τίποτα. Μπορείτε να πάτε στις Ρυμίσεις-> Διαχείριση Εξαιρεμένων Φακέλων, εξαιρέστε τον ριζικό φάκελο \"/\", έπειτα προσθέστε τους φακέλους στο Ρυθμίσεις -> Διαχείριση Συμπεριλαμβανομένων Φακέλων.
|
||||
Αυτό θα κάνει ορατούς μόνο τους επιλεγμένους φακέλους, καθώς η εξαίρεση και η συμπερίληψη λειτουργούν αναδρομικά και αν ενας φάκελος ανήκει και στα δύο, θα εμφανιστεί.</string>
|
||||
<string name="faq_9_title">Οι εικόνες πλήρους οθόνης έχουν κάποια περίεργα σημάδια. Μπορώ κάπως να βελτιώσω την ποιότητα;</string>
|
||||
<string name="faq_9_text">Ναι. Υπάρχει ένας διακόπτης στις Ρυθμίσεις με το κείμενο \"Αντικατάσταση των φωτογραφιών που απαιτούν ζούμ με άλλες καλύτερης ποιότητας\". Μπορείτε να χρησιμοποιήσετε αυτό. Θα βελτιώσει την ποιότητα των φωτογραφιών, αλλά θα θολώσουν στο μεγάλο ζουμ.</string>
|
||||
<string name="faq_10_title">Μπορώ να περικόψω εικόνες με την εφαρμογή;</string>
|
||||
<string name="faq_10_text">Ναι, μπορείτε να περικόψετε εικόνες στον επεξεργαστή, σύροντας τις γωνίες εικόνας. Μπορείτε να μεταβείτε στον επεξεργαστή είτε πατώντας παρατεταμένα μια μικρογραφία εικόνας και επιλέγοντας Επεξεργασία, είτε επιλέγοντας Επεξεργασία από την προβολή πλήρους οθόνης.</string>
|
||||
<string name="faq_11_title">Μπορώ να ομαδοποιήσω κάπως τις μικρογραφίες των αρχείων πολυμέσων?</string>
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">Fijar fecha de toma</string>
|
||||
<string name="fixing">Fijando…</string>
|
||||
<string name="dates_fixed_successfully">Fecha fijada correctamente</string>
|
||||
<string name="share_resized">Share a resized version</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">Filtro de medios</string>
|
||||
|
@ -87,7 +88,6 @@
|
|||
<string name="flip">Girar</string>
|
||||
<string name="flip_horizontally">Horizontalmente</string>
|
||||
<string name="flip_vertically">Verticalmente</string>
|
||||
<string name="edit_with">Editar con</string>
|
||||
<string name="free_aspect_ratio">Libre</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">Otros</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
|
@ -157,7 +157,6 @@
|
|||
<string name="allow_photo_gestures">Permite controlar el brillo con gestos verticales</string>
|
||||
<string name="allow_video_gestures">Permite controlar el volumen y el brillo del video con gestos verticales</string>
|
||||
<string name="show_media_count">Mostrar el conteo de medios de las carpetas en la vista principal</string>
|
||||
<string name="replace_share_with_rotate">Reemplazar Compartir con Girar en el menú de pantalla completa</string>
|
||||
<string name="show_extended_details">Mostrar detalles extendidos sobre medios en pantalla completa</string>
|
||||
<string name="manage_extended_details">Administrar detalles ampliados</string>
|
||||
<string name="one_finger_zoom">Permitir zoom con un dedo en pantalla completa</string>
|
||||
|
@ -172,6 +171,7 @@
|
|||
<string name="show_recycle_bin_last">Mostrar la Papelera de reciclaje como el último elemento en la pantalla principal</string>
|
||||
<string name="allow_down_gesture">Permite cerrar la vista de pantalla completa con un gesto hacia abajo.</string>
|
||||
<string name="allow_one_to_one_zoom">Allow 1:1 zooming in with two double taps</string>
|
||||
<string name="open_videos_on_separate_screen">Always open videos on a separate screen with new horizontal gestures</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Miniaturas</string>
|
||||
|
@ -194,7 +194,6 @@
|
|||
<string name="faq_3_text">Puede aguantar pulsado el álbum deseado y seleccionar el ícono Pin en el menú de acción, que lo fijará en la parte superior. También puede anclar varias carpetas, los artículos fijados se ordenarán por el método de clasificación predeterminado.</string>
|
||||
<string name="faq_4_title">¿Cómo puedo avanzar videos?</string>
|
||||
<string name="faq_4_text">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar, that will move the video either backward, or forward.</string>
|
||||
<string name="faq_4_text_old">Puede hacer clic en los textos de duración actual o máxima cerca de la barra de búsqueda, que moverán el video hacia atrás o hacia adelante.</string>
|
||||
<string name="faq_5_title">¿Cuál es la diferencia entre ocultar y excluir una carpeta?</string>
|
||||
<string name="faq_5_text">Excluir evita mostrar la carpeta solo en Simple Gallery, mientras que Ocultar funciona en el sistema y oculta la carpeta de otras galerías también. Funciona al crear un archivo \".nomedia \" vacío en la carpeta determinada, que luego puede eliminar también con cualquier administrador de archivos.</string>
|
||||
<string name="faq_6_title">¿Por qué aparecen las carpetas con la portada de la música o las pegatinas?</string>
|
||||
|
@ -204,8 +203,6 @@
|
|||
<string name="faq_8_title">¿Qué pasa si quiero solo algunas carpetas concretas visibles?</string>
|
||||
<string name="faq_8_text">Agregar una carpeta en las carpetas incluidas no excluye automáticamente nada. Lo que puede hacer es ir a Ajustes -> Administrar carpetas excluidas, excluir la carpeta raíz \"/\", luego agregar las carpetas deseadas en Configuración -> Administrar carpetas incluidas.
|
||||
Esto hará que solo las carpetas seleccionadas sean visibles, ya que tanto la exclusión como la inclusión son recursivas y si una carpeta está excluida e incluida, aparecerá.</string>
|
||||
<string name="faq_9_title">Las imágenes a pantalla completa tienen artefactos extraños, ¿puedo de alguna manera mejorar la calidad?</string>
|
||||
<string name="faq_9_text">Sí, hay una alternancia en Ajustes que dice \"Reemplazar imágenes con zoom profundo con las de mejor calidad\", puede usar eso. Mejorará la calidad de las imágenes, pero se volverán borrosas una vez que intente ampliar demasiado.</string>
|
||||
<string name="faq_10_title">¿Puedo recortar imágenes con esta aplicación?</string>
|
||||
<string name="faq_10_text">Sí, puede recortar imágenes en el editor arrastrando las esquinas de la imagen. Puede acceder al editor pulsando prolongadamente una imagen en miniatura y seleccionando Editar, o seleccionando Editar en la vista de pantalla completa.</string>
|
||||
<string name="faq_11_title">¿Puedo de alguna manera agrupar miniaturas de archivos multimedia?</string>
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">Fix Date Taken value</string>
|
||||
<string name="fixing">Fixing…</string>
|
||||
<string name="dates_fixed_successfully">Dates fixed successfully</string>
|
||||
<string name="share_resized">Share a resized version</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">Suodata media</string>
|
||||
|
@ -87,7 +88,6 @@
|
|||
<string name="flip">Pyöräytä</string>
|
||||
<string name="flip_horizontally">Pyöräytä vaakasuoraan</string>
|
||||
<string name="flip_vertically">Pyöräytä pystysuoraan</string>
|
||||
<string name="edit_with">Muokkaa sovelluksella</string>
|
||||
<string name="free_aspect_ratio">Free</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">Other</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
|
@ -157,7 +157,6 @@
|
|||
<string name="allow_photo_gestures">Salli kirkkauden säätäminen pystysuorilla eleillä</string>
|
||||
<string name="allow_video_gestures">Salli videon äänenvoimakkuuden ja kirkkauden säätö pystysuorilla eleillä</string>
|
||||
<string name="show_media_count">Näytä kansioiden sisällön määrä päänäkymässä</string>
|
||||
<string name="replace_share_with_rotate">Korvaa jakaminen kääntämisellä koko näytön tilassa</string>
|
||||
<string name="show_extended_details">Näytä yksityiskohtaiset tiedot täyden näytön tilassa</string>
|
||||
<string name="manage_extended_details">Hallitse yksityiskohtaisia tietoja</string>
|
||||
<string name="one_finger_zoom">Salli lähentäminen yhdellä sormella täyden ruudun tilassa</string>
|
||||
|
@ -172,6 +171,7 @@
|
|||
<string name="show_recycle_bin_last">Show the Recycle Bin as the last item on the main screen</string>
|
||||
<string name="allow_down_gesture">Allow closing the fullscreen view with a down gesture</string>
|
||||
<string name="allow_one_to_one_zoom">Allow 1:1 zooming in with two double taps</string>
|
||||
<string name="open_videos_on_separate_screen">Always open videos on a separate screen with new horizontal gestures</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Esikatselukuvat</string>
|
||||
|
@ -194,7 +194,6 @@
|
|||
<string name="faq_3_text">You can long press the desired album and select the Pin icon at the actionmenu, that will pin it to the top. You can pin multiple folders too, pinned items will be sorted by the default sorting method.</string>
|
||||
<string name="faq_4_title">How can I fast-forward videos?</string>
|
||||
<string name="faq_4_text">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string>
|
||||
<string name="faq_4_text_old">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string>
|
||||
<string name="faq_5_title">What is the difference between hiding and excluding a folder?</string>
|
||||
<string name="faq_5_text">Exclude prevents displaying the folder only in Simple Gallery, while Hide works system-wise and it hides the folder from other galleries too. It works by creating an empty \".nomedia\" file in the given folder, which you can then remove with any file manager too.</string>
|
||||
<string name="faq_6_title">Why do folders with music cover art or stickers show up?</string>
|
||||
|
@ -204,8 +203,6 @@
|
|||
<string name="faq_8_title">What if I want just a few particular folders visible?</string>
|
||||
<string name="faq_8_text">Adding a folder at the Included Folders doesn\'t automatically exclude anything. What you can do is go in Settings -> Manage Excluded Folders, exclude the root folder \"/\", then add the desired folders at Settings -> Manage Included Folders.
|
||||
That will make only the selected folders visible, as both excluding and including are recursive and if a folder is both excluded and included, it will show up.</string>
|
||||
<string name="faq_9_title">Fullscreen images have weird artifacts, can I somehow improve the quality?</string>
|
||||
<string name="faq_9_text">Yea, there is a toggle in Settings saying \"Replace deep zoomable images with better quality ones\", you can use that. It will improve the quality of the images, but they will get blurred once you try zooming in too much.</string>
|
||||
<string name="faq_10_title">Can I crop images with this app?</string>
|
||||
<string name="faq_10_text">Yes, you can crop images in the editor, by dragging the image corners. You can get to the editor either by long pressing an image thumbnail and selecting Edit, or selecting Edit from the fullscreen view.</string>
|
||||
<string name="faq_11_title">Can I somehow group media file thumbnails?</string>
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">Corriger la valeur des dates de prise des photos</string>
|
||||
<string name="fixing">Correction en cours....</string>
|
||||
<string name="dates_fixed_successfully">Dates corrigées</string>
|
||||
<string name="share_resized">Share a resized version</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">Filtrer les médias</string>
|
||||
|
@ -87,7 +88,6 @@
|
|||
<string name="flip">Retourner</string>
|
||||
<string name="flip_horizontally">Retourner horizontalement</string>
|
||||
<string name="flip_vertically">Retourner verticalement</string>
|
||||
<string name="edit_with">Modifier avec</string>
|
||||
<string name="free_aspect_ratio">Libre</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">Other</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
|
@ -157,7 +157,6 @@
|
|||
<string name="allow_photo_gestures">Contrôler la luminosité de la photo avec des gestes verticaux</string>
|
||||
<string name="allow_video_gestures">Contrôler le volume et la luminosité de la vidéo avec des gestes verticaux</string>
|
||||
<string name="show_media_count">Afficher le nombre de fichiers dans les dossiers</string>
|
||||
<string name="replace_share_with_rotate">Remplacer \"Partager\" par \"Pivoter\" en plein écran</string>
|
||||
<string name="show_extended_details">Afficher en surimpression les informations supplémentaires du média en plein écran</string>
|
||||
<string name="manage_extended_details">Gérer les informations supplémentaires</string>
|
||||
<string name="one_finger_zoom">Effectuer le zoom avec un doigt sur une image en plein écran</string>
|
||||
|
@ -172,6 +171,7 @@
|
|||
<string name="show_recycle_bin_last">Afficher la corbeille en dernière place sur l\'écran principal</string>
|
||||
<string name="allow_down_gesture">Fermeture de la vue plein écran par un geste vers le bas</string>
|
||||
<string name="allow_one_to_one_zoom">Allow 1:1 zooming in with two double taps</string>
|
||||
<string name="open_videos_on_separate_screen">Always open videos on a separate screen with new horizontal gestures</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Miniatures</string>
|
||||
|
@ -193,7 +193,6 @@
|
|||
<string name="faq_3_text">Vous devez simplement à effectuer un appui prolongé sur l\'album en question et choisir l\'icône \"Épingler\" dans le menu d\'actions. Vous pouvez en épingler plusieurs. Les éléments épinglés seront alors triés selon l\'ordre par défaut.</string>
|
||||
<string name="faq_4_title">Comment avancer rapidement dans les vidéos ?</string>
|
||||
<string name="faq_4_text">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string>
|
||||
<string name="faq_4_text_old">Vous pouvez appuyer sur la durée actuelle ou totale de la vidéo sur la barre de progression, la vidéo reculera ou avancera selon votre choix.</string>
|
||||
<string name="faq_5_title">Quelle est la différence entre masquer et exclure un dossier ?</string>
|
||||
<string name="faq_5_text">\"Exclure un dossier\" permet de ne pas l\'afficher uniquement dans Simple Gallery, alors que \"Masquer un dossier\" rend le dossier invisible sur l\'ensemble de l\'appareil, y compris les autres applications de galerie. Dans le dernier cas, un fichier \".nomedia\" est créé dans le dossier masqué, et peut être supprimé avec n\'importe quel explorateur de fichiers.</string>
|
||||
<string name="faq_6_title">Pourquoi des dossiers avec des pochettes d\'albums musicaux ou des miniatures d\'images sont affichés ?</string>
|
||||
|
@ -202,8 +201,6 @@
|
|||
<string name="faq_7_text">Cela peut arriver pour de multiples raisons, mais c\'est facile à résoudre. Allez dans \"Paramètres\", puis \"Gérer les dossiers inclus\", appuyez sur \"+\" et sélectionnez le dossier voulu.</string>
|
||||
<string name="faq_8_title">Comment faire apparaître uniquement certains dossiers ?</string>
|
||||
<string name="faq_8_text">Ajouter un dossier dans les \"Dossiers inclus\" rend visible l\'ensemble du contenu du dossier. Pour exclure certains dossiers, il faut aller dans \"Paramètres\", puis \"Gérer les dossiers exclus\", exclure le dossier racine \"/\", puis ajouter les dossiers souhaités dans \"Paramètres\", puis \"Gérer les dossiers inclus\". Seuls les dossiers sélectionnés seront visibles, du fait que les exclusions et inclusions sont récursives, et si un dossier est à la fois exclus et inclus, il sera affiché.</string>
|
||||
<string name="faq_9_title">Les images en plein écran contiennent des artefacts, est-ce possible d\'améliorer la qualité ?</string>
|
||||
<string name="faq_9_text">Oui, il existe dans \"Paramètres\" une option \"Afficher les images avec la plus haute qualité possible\", mais les images seront alors floues si vous zoomez trop.</string>
|
||||
<string name="faq_10_title">Puis-je recadrer des images avec cette application ?</string>
|
||||
<string name="faq_10_text">Oui, vous pouvez recadrer les images dans l\'éditeur en faisant glisser les coins de l\'image. Vous pouvez accéder à l\'éditeur en appuyant longuement sur une vignette d\'image et en sélectionnant \"Modifier\", ou en sélectionnant \"Modifier\" en mode plein écran.</string>
|
||||
<string name="faq_11_title">Puis-je regrouper les miniatures des fichiers multimédias ?</string>
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">Fix Date Taken value</string>
|
||||
<string name="fixing">Fixing…</string>
|
||||
<string name="dates_fixed_successfully">Dates fixed successfully</string>
|
||||
<string name="share_resized">Share a resized version</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">Filtrar medios</string>
|
||||
|
@ -87,7 +88,6 @@
|
|||
<string name="flip">Voltear</string>
|
||||
<string name="flip_horizontally">Voltear horizontalmente</string>
|
||||
<string name="flip_vertically">Voltear verticalmente</string>
|
||||
<string name="edit_with">Editar con</string>
|
||||
<string name="free_aspect_ratio">Free</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">Other</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
|
@ -157,7 +157,6 @@
|
|||
<string name="allow_photo_gestures">Permitir controlar o brillo da foto con xestos verticais</string>
|
||||
<string name="allow_video_gestures">Permitir controlar o volume do vídeo e o brillo con xestos verticáis</string>
|
||||
<string name="show_media_count">Mostrar a conta de medios do cartafol na vista principal</string>
|
||||
<string name="replace_share_with_rotate">Substituír Compartir con Rotar no menú de pantalla completa</string>
|
||||
<string name="show_extended_details">Mostrar información pormenorizada sobre medios a pantalla completa</string>
|
||||
<string name="manage_extended_details">Xestionar información polo miúdo</string>
|
||||
<string name="one_finger_zoom">Permitir zoom con un dedo a pantalla completa</string>
|
||||
|
@ -172,6 +171,7 @@
|
|||
<string name="show_recycle_bin_last">Show the Recycle Bin as the last item on the main screen</string>
|
||||
<string name="allow_down_gesture">Allow closing the fullscreen view with a down gesture</string>
|
||||
<string name="allow_one_to_one_zoom">Allow 1:1 zooming in with two double taps</string>
|
||||
<string name="open_videos_on_separate_screen">Always open videos on a separate screen with new horizontal gestures</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Iconas</string>
|
||||
|
@ -194,7 +194,6 @@
|
|||
<string name="faq_3_text">Pode manter premido o álbume e escoller a icona de Fixar no menú de accións, esto fixarao arriba. Pode fixar varios cartafoles tambén, os elementos fixados estarán ordenados polo criterio por omisión.</string>
|
||||
<string name="faq_4_title">Cómo podo aumentar a velocidade de reprodución de vídeo?</string>
|
||||
<string name="faq_4_text">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string>
|
||||
<string name="faq_4_text_old">Pode pulsar no texto de duración actual ou máxima preto da barra de busca, esto moverá ou vídeo hacia adiante ou atrás.</string>
|
||||
<string name="faq_5_title">Cal é a diferenza entre agochar e excluír un cartafol?</string>
|
||||
<string name="faq_5_text">A Exclusión prevén que se mostre o cartafol só en Simple Gallery, mentras Agochar funciona para todo o sistema e agocha o cartafol para outras galerías tamén. Esto funciona creando un ficheiro baldeiro de nome \".nomedia\" no cartafol, que tamén pode quitar con calquer xestor de ficheiros.</string>
|
||||
<string name="faq_6_title">Por qué aparecen cartafoles de música con portadas ou pegatinas?</string>
|
||||
|
@ -204,8 +203,6 @@
|
|||
<string name="faq_8_title">E qué pasa si só quero que sexan visibles certos cartafoles</string>
|
||||
<string name="faq_8_text">Engadir un cartafol a Cartafoles incluídos non exclúe nada de xeito automático. O que pode facer é ir a Axustes -> Xestionar cartafoles incluídos, excluír o cartafol root \"/\", e despóis engadir os cartafoles desexados con Axustes -> Xestionar Cartafoles Incluídos.
|
||||
Esto fará visibles só aos cartafoles escollidos, como tanto excluír e incluír son recursivos e si está excluído e logo incluído, será mostrado.</string>
|
||||
<string name="faq_9_title">As imaxes a pantalla completa teñen píxeles extranos, podo mellorar a calidade da imaxe?</string>
|
||||
<string name="faq_9_text">Si, hai unha opción en Axustes que di \"Substituír imaxes con un gran zoom con imaxes de mellor calidade\", pode usar eso. mellorará a calidade das imaxes, mais farase máis borrosaxa si intenta facer moito zoom.</string>
|
||||
<string name="faq_10_title">Can I crop images with this app?</string>
|
||||
<string name="faq_10_text">Yes, you can crop images in the editor, by dragging the image corners. You can get to the editor either by long pressing an image thumbnail and selecting Edit, or selecting Edit from the fullscreen view.</string>
|
||||
<string name="faq_11_title">Can I somehow group media file thumbnails?</string>
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">Ispravi vrijednost datuma snimanja</string>
|
||||
<string name="fixing">Popravljam…</string>
|
||||
<string name="dates_fixed_successfully">Datumi uspješno popravljeni</string>
|
||||
<string name="share_resized">Share a resized version</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">Filtriranje medija</string>
|
||||
|
@ -87,7 +88,6 @@
|
|||
<string name="flip">Okreni</string>
|
||||
<string name="flip_horizontally">Okreni horizontalno</string>
|
||||
<string name="flip_vertically">Okreni vertikalno</string>
|
||||
<string name="edit_with">Uredi pomoću</string>
|
||||
<string name="free_aspect_ratio">Slobodan odabir</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">Ostalo</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
|
@ -157,7 +157,6 @@
|
|||
<string name="allow_photo_gestures">Omogućite kontrolu svjetline fotografije vertikalnim pokretima</string>
|
||||
<string name="allow_video_gestures">Omogući kontrolu glasnoće videa i svjetline pomoću vertikalnih pokreta</string>
|
||||
<string name="show_media_count">Prikaz broja medija mapa u glavnom prikazu</string>
|
||||
<string name="replace_share_with_rotate">Zamjeni Dijeli s Rotiraj pri pregledu datoteka</string>
|
||||
<string name="show_extended_details">Prikaži proširene pojedinosti preko medija na cijelom zaslonu</string>
|
||||
<string name="manage_extended_details">Upravljaj proširenim pojedinostima</string>
|
||||
<string name="one_finger_zoom">Omogući zumiranje jednim prstom na mediju cijelog zaslona</string>
|
||||
|
@ -172,6 +171,7 @@
|
|||
<string name="show_recycle_bin_last">Prikaži koš za smeće kao posljednju stavku na glavnom zaslonu</string>
|
||||
<string name="allow_down_gesture">Omogućite zatvaranje prikaza preko cijelog zaslona pokretom prema dolje</string>
|
||||
<string name="allow_one_to_one_zoom">Dopusti zumiranje 1: 1 s dva dvostruka dodira</string>
|
||||
<string name="open_videos_on_separate_screen">Always open videos on a separate screen with new horizontal gestures</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Sličice</string>
|
||||
|
@ -194,7 +194,6 @@
|
|||
<string name="faq_3_text">Dugo pritisnute željeni album i odaberite ikonu igle na akcijskom izborniku, koji će ga pričvrstiti na vrh. Možete prikvačiti više mapa odjednom, prikvačene stavke će biti razvrstane prema zadanom načinu razvrstavanja.</string>
|
||||
<string name="faq_4_title">Kako mogu ubrzati video?</string>
|
||||
<string name="faq_4_text">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string>
|
||||
<string name="faq_4_text_old">Možete pritisnuti trenutačno vrijeme ili ukupno trajanje videozapisa na traci napretka, videozapis će se prema Vašem izboru pomicati unatrag ili prema naprijed.</string>
|
||||
<string name="faq_5_title">Koja je razlika između skrivanja i izuzimanja mape?</string>
|
||||
<string name="faq_5_text">Izuzimanje sprječava prikaz mape samo u Jednostavnoj galeriji, a skrivanje radi na razini sustava i skriva mapu iz drugih galerija. Djeluje stvaranjem praznih \".nomedia\" datoteka u zadanoj mapi, koju možete ukloniti pomoću bilo kojeg upraviteljem datoteka.</string>
|
||||
<string name="faq_6_title">Zašto se prikazuju mape s naslovnicama albuma i minijaturama slika?</string>
|
||||
|
@ -204,8 +203,6 @@
|
|||
<string name="faq_8_title">Što ako želim vidjeti samo nekoliko određenih mapa?</string>
|
||||
<string name="faq_8_text">Dodavanje direktorija u uključene mape ne izuzima ništa automatski. Da biste to učinili, idite na "Postavke", a zatim "Upravljanje izuzetim mapama", izuzmite korijenski direktorij \"/\", a zatim dodajte željene direktorije u "Postavke" i "Upravljanje uključenim mapama".
|
||||
Samo će odabrane mape biti vidljive, jer su izuzimanja i uključivanja rekurzivni, a ako je mapa isključena i uključena, bit će prikazana.</string>
|
||||
<string name="faq_9_title">Slike na cijelom zaslonu imaju čudne artefakte, mogu li nekako poboljšati kvalitetu?</string>
|
||||
<string name="faq_9_text">Da, u "Postavkama" postoji opcija "Zamjena duboko zumiranih slika s kvalitetnijim slikama", ali slike će biti zamućene ako zumirate previše.</string>
|
||||
<string name="faq_10_title">Mogu li izrezati slike pomoću ove aplikacije?</string>
|
||||
<string name="faq_10_text">Da, možete obrezati slike u uređivaču povlačenjem uglova. Možete doći do uređivača dugim pritiskom na minijaturu slike i odabirom Uređivanje ili odabirom Uredi iz prikaza preko cijelog zaslona.</string>
|
||||
<string name="faq_11_title">Mogu li nekako grupirati sličice medijskih datoteka?</string>
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">Dátum javítása</string>
|
||||
<string name="fixing">Javítás…</string>
|
||||
<string name="dates_fixed_successfully">Sikeres dátum javítás</string>
|
||||
<string name="share_resized">Share a resized version</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">Média szűrő</string>
|
||||
|
@ -87,7 +88,6 @@
|
|||
<string name="flip">Tükrözés</string>
|
||||
<string name="flip_horizontally">Tükrözés vízszintesen</string>
|
||||
<string name="flip_vertically">Tükrözés függőlegesen</string>
|
||||
<string name="edit_with">Szerkesztés ezzel</string>
|
||||
<string name="free_aspect_ratio">Kötetlen</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">Egyéb</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
|
@ -158,7 +158,6 @@
|
|||
<string name="allow_photo_gestures">Engedélyezi a kép fényerő módosítást függőleges gesztusokkal</string>
|
||||
<string name="allow_video_gestures">Engedélyezi a videó hangerő és fényerő módosítást függőleges gesztusokkal</string>
|
||||
<string name="show_media_count">Mutassa a fájlok számát a mappákban</string>
|
||||
<string name="replace_share_with_rotate">Cserélje meg a Megosztást a Forgatással a teljes képernyős menüben</string>
|
||||
<string name="show_extended_details">Mutassa a kiterjesztett adatokat a teljes képernyős médián keresztül</string>
|
||||
<string name="manage_extended_details">Bővített részletek kezelése</string>
|
||||
<string name="one_finger_zoom">Engedélyezi az egy ujjas nagyítást a teljes képernyős médiában</string>
|
||||
|
@ -173,6 +172,7 @@
|
|||
<string name="show_recycle_bin_last">Mutassa a Lomtárat a fő képernyő utolsó elemeként</string>
|
||||
<string name="allow_down_gesture">Engedélyezi a teljes képernyős nézetet a lefelé mozdulattal</string>
|
||||
<string name="allow_one_to_one_zoom">Engedélyezi az 1:1 nagyítást két dupla érintéssel</string>
|
||||
<string name="open_videos_on_separate_screen">Always open videos on a separate screen with new horizontal gestures</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Miniatűrök</string>
|
||||
|
@ -195,7 +195,6 @@ A következő alkalommal, amikor megpróbál megnyitni egy képet vagy videót,
|
|||
<string name="faq_3_text">Hosszan nyomja meg a kívánt albumot, és válassza ki a Kitűzés ikont a művelet menüben, ami rögzíti felülre. Többféle mappát is kitűzhet, ezeket az elemeket az alapértelmezett rendezési mód szerint rendezi.</string>
|
||||
<string name="faq_4_title">Hogyan tudom előre tekerni a videókat?</string>
|
||||
<string name="faq_4_text">Húzhatja az ujját vízszintesen a videolejátszón, vagy kattintson az aktuális vagy a max. időtartam szövegekre a keresősáv közelében. Ez visszafelé vagy előre mozgatja a videót.</string>
|
||||
<string name="faq_4_text_old">Húzhatja az ujját vízszintesen a videolejátszón, vagy kattintson az aktuális vagy a max. időtartam szövegekre a keresősáv közelében. Ez visszafelé vagy előre mozgatja a videót.</string>
|
||||
<string name="faq_5_title">Mi a különbség a mappa elrejtése és kizárása között?</string>
|
||||
<string name="faq_5_text">A Kizárás megakadályozza, hogy a mappát a Simple Gallery megjelenítse, az Elrejtés pedig rendszer szinten működik, és elrejti a mappát más galériákból is. Úgy működik, hogy létrehoz egy üres \". nomedia\" nevű fájlt az adott mappában, amelyet bármikor eltávolíthat bármilyen fájlkezelővel is.</string>
|
||||
<string name="faq_6_title">Miért jelennek meg a zenei borítóval vagy matricával rendelkező mappák?</string>
|
||||
|
@ -205,8 +204,6 @@ A következő alkalommal, amikor megpróbál megnyitni egy képet vagy videót,
|
|||
<string name="faq_8_title">Mi van, ha csak néhány különleges mappát szeretnék látni?</string>
|
||||
<string name="faq_8_text">A Befoglalt mappákhoz tartozó mappák hozzáadása nem zár ki automatikusan semmit. Amit tehetünk, menjünk a Beállítások -> Kizárt mappák kezelése, kizárjuk a gyökérmappát \"/ \", utána hozzáadjuk a kívánt mappákat a Beállítások -> Befoglalt mappák kezelése menüpontban.
|
||||
Ezzel csak a kiválasztott mappák láthatók, mivel a kizárás és a befoglalás rekurzív. Ha egy mappát hozzáadunk mindkettőhöz, akkor megjelenik.</string>
|
||||
<string name="faq_9_title">A teljes képernyős képek furcsán néznek ki, tudnám valahogy javítani a minőséget?</string>
|
||||
<string name="faq_9_text">Igen, van egy kapcsoló a Beállításokban: \"Cserélje le a mély nagyítású képeket jobb minőségűekre\", akkor használhatja. Javítja a képek minőségét, de elmosódik, ha túl nagy zoomolást használ.</string>
|
||||
<string name="faq_10_title">Tudom vágni a képeket ezzel az alkalmazással?</string>
|
||||
<string name="faq_10_text">Igen, megvághatja a képeket a szerkesztőben a kép sarkainak húzásával. A szerkesztőhöz eljuthat egy miniatűr kép hosszú megnyomásával és a Szerkesztés választásával, vagy a Szerkesztés választásával a teljes képernyős nézetben.</string>
|
||||
<string name="faq_11_title">Valamilyen módon össze tudom csoportosítani a médiafájl bélyegképeit?</string>
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">Perbaiki Tanggal Diambil</string>
|
||||
<string name="fixing">Memperbaiki…</string>
|
||||
<string name="dates_fixed_successfully">Tanggal berhasil diperbaiki</string>
|
||||
<string name="share_resized">Share a resized version</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">Filter media</string>
|
||||
|
@ -87,7 +88,6 @@
|
|||
<string name="flip">Balik</string>
|
||||
<string name="flip_horizontally">Balik horizontal</string>
|
||||
<string name="flip_vertically">Balik vertikal</string>
|
||||
<string name="edit_with">Edit dengan</string>
|
||||
<string name="free_aspect_ratio">Bebas</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">Lainnya</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
|
@ -157,7 +157,6 @@
|
|||
<string name="allow_photo_gestures">Izinkan mengontrol kecerahan foto dengan gerakan vertikal</string>
|
||||
<string name="allow_video_gestures">Izinkan mengontrol kecerahan dan volume video dengan gerakan vertikal</string>
|
||||
<string name="show_media_count">Tampilkan jumlah folder media di tampilan utama</string>
|
||||
<string name="replace_share_with_rotate">Ganti tombol Bagikan dengan Rotasi di menu layar penuh</string>
|
||||
<string name="show_extended_details">Tampilkan detail tambahan saat layar penuh</string>
|
||||
<string name="manage_extended_details">Atur detail tambahan</string>
|
||||
<string name="one_finger_zoom">Izinkan zoom satu jari di layar penuh</string>
|
||||
|
@ -172,6 +171,7 @@
|
|||
<string name="show_recycle_bin_last">Tampilkan Sampah sebagai item terakhir di layar utama</string>
|
||||
<string name="allow_down_gesture">Izinkan keluar dari layar penuh dengan menggeser kebawah</string>
|
||||
<string name="allow_one_to_one_zoom">Allow 1:1 zooming in with two double taps</string>
|
||||
<string name="open_videos_on_separate_screen">Always open videos on a separate screen with new horizontal gestures</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Thumbnail</string>
|
||||
|
@ -194,7 +194,6 @@
|
|||
<string name="faq_3_text">Anda bisa menekan lama album tersebut dan pilih ikon Pin di menu tindakan, itu akan menaruhnya di atas daftar. Anda juga bisa menyematkan beberapa folder, item yang di-pin akan diurutkan berdasarkan metode urutan default.</string>
|
||||
<string name="faq_4_title">Bagaimana cara mempercepat laju video?</string>
|
||||
<string name="faq_4_text">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string>
|
||||
<string name="faq_4_text_old">Anda bisa mengklik teks durasi saat ini/maksimal di dekat penggeser durasi, itu akan memajukan atau memundurkan video.</string>
|
||||
<string name="faq_5_title">Apa perbedaan antara menyembunyikan dan mengecualikan folder?</string>
|
||||
<string name="faq_5_text">Mengecualikan tidak akan menampilkan folder di Simple Gallery, sedangkan Sembunyikan bekerja sesuai aturan sistem dan akan menyembunyikan folder juga dari aplikasi galeri yang lain. Cara kerjanya dengan membuat file \".nomedia\" kosong pada folder yang diinginkan, yang bisa Anda hapus juga dengan aplikasi file manager.</string>
|
||||
<string name="faq_6_title">Mengapa folder dengan gambar album musik atau stiker muncul?</string>
|
||||
|
@ -204,8 +203,6 @@
|
|||
<string name="faq_8_title">Bagaimana jika saya hanya ingin beberapa folder saja yang terlihat?</string>
|
||||
<string name="faq_8_text">Menambahkan folder di Folder yang Disertakan tidak otomatis mengecualikan folder yang lain. Yang bisa Anda lakukan adalah pergi ke Setelan -> Atur Folder yang Dikecualikan, lalu kecualikan folder root \"/\", lalu tambahkan folder yang diinginkan di Setelan -> Atur Folder yang Disertakan.
|
||||
Itu akan membuat folder yang dipilih saja yang muncul, dan jika sebuah folder disertakan dan dikecualikan secara bersamaan, folder tersebut akan muncul.</string>
|
||||
<string name="faq_9_title">Gambar layar penuh terlihat pecah, bisakah ditingkatkan kualitasnya?</string>
|
||||
<string name="faq_9_text">Ya, ada opsi di Setelan \"Ganti zoom mendalam dengan kualitas gambar yang lebih bagus\", Anda bisa menggunakannya. Ini akan meningkatkan kualitas gambar, namun gambar akan terlihat kabur jika Anda zoom terlalu banyak.</string>
|
||||
<string name="faq_10_title">Bisakah saya meng-crop gambar dengan aplikasi ini?</string>
|
||||
<string name="faq_10_text">Ya, Anda bisa melakukannya di Editor, dengan menyeret sudut gambar. Anda bisa masuk ke editor dengan menekan lama thumbnail gambar dan memilih Edit, atau pilih Edit dari tampilan layar penuh.</string>
|
||||
<string name="faq_11_title">Bisakah saya mengelompokkan thumbnail file media?</string>
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">Correggi valore Data acquisizione</string>
|
||||
<string name="fixing">Correzione in corso…</string>
|
||||
<string name="dates_fixed_successfully">Date aggiornate correttamente</string>
|
||||
<string name="share_resized">Share a resized version</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">Filtra i file</string>
|
||||
|
@ -87,7 +88,6 @@
|
|||
<string name="flip">Capovolgi</string>
|
||||
<string name="flip_horizontally">Capovolgi orizzontalmente</string>
|
||||
<string name="flip_vertically">Capovolgi verticalmente</string>
|
||||
<string name="edit_with">Modifica con</string>
|
||||
<string name="free_aspect_ratio">Libero</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">Altro</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
|
@ -157,7 +157,6 @@
|
|||
<string name="allow_photo_gestures">Controlla la luminosità delle foto con gesti verticali</string>
|
||||
<string name="allow_video_gestures">Gestisci il volume e la luminosità dei video con gesti verticali</string>
|
||||
<string name="show_media_count">Mostra numero elementi nella cartella</string>
|
||||
<string name="replace_share_with_rotate">Sostituisci Condividi con Ruota a schermo intero</string>
|
||||
<string name="show_extended_details">Mostra informazioni estese su media a schermo intero</string>
|
||||
<string name="manage_extended_details">Gestisci le informazioni estese</string>
|
||||
<string name="one_finger_zoom">Abilita zoom con un dito su media a schermo intero</string>
|
||||
|
@ -172,6 +171,7 @@
|
|||
<string name="show_recycle_bin_last">Mostra il cestino come ultimo elemento nella schermata principale</string>
|
||||
<string name="allow_down_gesture">Chiudi la visuale a schermo intero con un gesto verso il basso</string>
|
||||
<string name="allow_one_to_one_zoom">Permetti l\'ingrandimento 1:1 con un doppio tasto</string>
|
||||
<string name="open_videos_on_separate_screen">Apri sempre i video su uno schermo separato con i nuovi movimenti orizzontali</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Anteprime</string>
|
||||
|
@ -194,7 +194,6 @@
|
|||
<string name="faq_3_text">Si può toccare a lungo l\'album desiderato e selezionare l\'icona puntina nel menù azioni, ciò lo fisserà in cima. Si possono anche fissare varie cartelle, gli elementi fissati saranno ordinati dal metodo di ordinamento predefinito.</string>
|
||||
<string name="faq_4_title">Come avanzo velocemente nei video?</string>
|
||||
<string name="faq_4_text">Si possono trascinare le proprie dita orrizontalmente sul video, oppure cliccando i testi accanto alla barra di avanzamento. In questo modo il video andrà avanti o indietro.</string>
|
||||
<string name="faq_4_text_old">Si può cliccare sui testi di durata attuale o massima vicino alla barra di avanzamento, ciò avanzerà o riavvolgerà il video.</string>
|
||||
<string name="faq_5_title">Che differenza c\'è tra nascondere ed escludere una cartella?</string>
|
||||
<string name="faq_5_text">Escludere impedisce la visualizzazione della cartella solo in Semplice Galleria, mentre nascondere ha effetto in tutto il sistema e nasconde la cartella anche alle altre gallerie. Funziona creando un file vuoto \".nomedia\" nella cartella in questione, si possono anche rimuovere successivamente con qualsiasi gestore dei file.</string>
|
||||
<string name="faq_6_title">Perchè vengono mostrate cartelle con copertine o adesivi di musica?</string>
|
||||
|
@ -204,8 +203,6 @@
|
|||
<string name="faq_8_title">Che fare se voglio rendere visibili solo poche particolari cartelle?</string>
|
||||
<string name="faq_8_text">Aggiungere una cartella nelle Cartelle Incluse non esclude automaticamente nulla. Quello che puoi fare è andare in Impostazioni → Gestisci le cartelle escluse, escludi la cartella root \"/\", poi aggiungi le cartelle desiderate in Impostazioni → Gestisci le cartelle incluse.
|
||||
Ciò renderà visibili solo le cartelle selezionate, dato che sia l\'esclusione che l\'inclusione sono ricorsive e se una cartella è sia esclusa che inclusa, verrà mostrata.</string>
|
||||
<string name="faq_9_title">Le immagini a schermo intero hanno strani artefatti, posso migliorarne la qualità in qualche modo?</string>
|
||||
<string name="faq_9_text">Sì, c\'è un\'opzione nelle impostazioni che dice \"Sostituisci le immagini ingrandibili a fondo con altre di migliore qualità\". Ciò migliorerà la qualità delle immagini, ma saranno sfuocate quando si proverà a ingrandirle troppo.</string>
|
||||
<string name="faq_10_title">Posso ritagliare le immagini con questa app?</string>
|
||||
<string name="faq_10_text">Sì, si possono ritagliare le immagini nell\'editor, trascinando gli angoli dell\'immagine. Si può accedere all\'editor sia premendo a lungo la miniatura di un\'immagine e selezionando Modifica, oppure selezionando Modifica mentre si vede una foto a schermo intero.</string>
|
||||
<string name="faq_11_title">Posso raggruppare in qualche modo le miniature dei file?</string>
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">撮影日の値を修正</string>
|
||||
<string name="fixing">修正中…</string>
|
||||
<string name="dates_fixed_successfully">撮影日が正常に修正されました</string>
|
||||
<string name="share_resized">Share a resized version</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">表示する形式</string>
|
||||
|
@ -87,7 +88,6 @@
|
|||
<string name="flip">反転</string>
|
||||
<string name="flip_horizontally">水平方向に反転</string>
|
||||
<string name="flip_vertically">垂直方向に反転</string>
|
||||
<string name="edit_with">他のアプリで編集</string>
|
||||
<string name="free_aspect_ratio">Free</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">Other</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
|
@ -157,7 +157,6 @@
|
|||
<string name="allow_photo_gestures">垂直の動作で写真の明るさを制御</string>
|
||||
<string name="allow_video_gestures">音量と明るさを縦の動作で変更</string>
|
||||
<string name="show_media_count">フォルダ内のメディア数を表示する</string>
|
||||
<string name="replace_share_with_rotate">フルスクリーン時の「共有」を「回転」に置き換える</string>
|
||||
<string name="show_extended_details">フルスクリーンに詳細を重ねて表示する</string>
|
||||
<string name="manage_extended_details">詳細表示を管理する</string>
|
||||
<string name="one_finger_zoom">メディアを指だけでズームする</string>
|
||||
|
@ -172,6 +171,7 @@
|
|||
<string name="show_recycle_bin_last">ごみ箱をメイン画面の最後に表示</string>
|
||||
<string name="allow_down_gesture">Allow closing the fullscreen view with a down gesture</string>
|
||||
<string name="allow_one_to_one_zoom">Allow 1:1 zooming in with two double taps</string>
|
||||
<string name="open_videos_on_separate_screen">Always open videos on a separate screen with new horizontal gestures</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">サムネイル設定</string>
|
||||
|
@ -194,7 +194,6 @@
|
|||
<string name="faq_3_text">You can long press the desired album and select the Pin icon at the actionmenu, that will pin it to the top. You can pin multiple folders too, pinned items will be sorted by the default sorting method.</string>
|
||||
<string name="faq_4_title">動画を早送りするにはどうすればよいですか?</string>
|
||||
<string name="faq_4_text">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string>
|
||||
<string name="faq_4_text_old">シークバーの隣にある経過時間または最大時間の表示を押すごとに早送り、または巻き戻しが作動します。</string>
|
||||
<string name="faq_5_title">What is the difference between hiding and excluding a folder?</string>
|
||||
<string name="faq_5_text">Exclude prevents displaying the folder only in Simple Gallery, while Hide works system-wise and it hides the folder from other galleries too. It works by creating an empty \".nomedia\" file in the given folder, which you can then remove with any file manager too.</string>
|
||||
<string name="faq_6_title">Why do folders with music cover art or stickers show up?</string>
|
||||
|
@ -204,8 +203,6 @@
|
|||
<string name="faq_8_title">What if I want just a few particular folders visible?</string>
|
||||
<string name="faq_8_text">Adding a folder at the Included Folders doesn\'t automatically exclude anything. What you can do is go in Settings -> Manage Excluded Folders, exclude the root folder \"/\", then add the desired folders at Settings -> Manage Included Folders.
|
||||
That will make only the selected folders visible, as both excluding and including are recursive and if a folder is both excluded and included, it will show up.</string>
|
||||
<string name="faq_9_title">Fullscreen images have weird artifacts, can I somehow improve the quality?</string>
|
||||
<string name="faq_9_text">Yea, there is a toggle in Settings saying \"Replace deep zoomable images with better quality ones\", you can use that. It will improve the quality of the images, but they will get blurred once you try zooming in too much.</string>
|
||||
<string name="faq_10_title">Can I crop images with this app?</string>
|
||||
<string name="faq_10_text">Yes, you can crop images in the editor, by dragging the image corners. You can get to the editor either by long pressing an image thumbnail and selecting Edit, or selecting Edit from the fullscreen view.</string>
|
||||
<string name="faq_11_title">Can I somehow group media file thumbnails?</string>
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">Fix Date Taken value</string>
|
||||
<string name="fixing">Fixing…</string>
|
||||
<string name="dates_fixed_successfully">Dates fixed successfully</string>
|
||||
<string name="share_resized">Share a resized version</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">미디어 필터 설정</string>
|
||||
|
@ -87,7 +88,6 @@
|
|||
<string name="flip">반전</string>
|
||||
<string name="flip_horizontally">가로 반전</string>
|
||||
<string name="flip_vertically">세로 반전</string>
|
||||
<string name="edit_with">이미지편집 프로그램 연결</string>
|
||||
<string name="free_aspect_ratio">Free</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">Other</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
|
@ -157,7 +157,6 @@
|
|||
<string name="allow_photo_gestures">상하 제스처로 사진 밝기 제어</string>
|
||||
<string name="allow_video_gestures">수직 제스처로 비디오 볼륨 및 밝기 제어</string>
|
||||
<string name="show_media_count">폴더에 포함된 미디어파일 수 표시</string>
|
||||
<string name="replace_share_with_rotate">전체화면 메뉴의 공유 아이콘을 회전 아이콘으로 변경</string>
|
||||
<string name="show_extended_details">전체화면 모드에서 세부정보 표시</string>
|
||||
<string name="manage_extended_details">확장된 세부정보 관리</string>
|
||||
<string name="one_finger_zoom">전체화면 모드에서 한 손가락으로 확대 및 축소</string>
|
||||
|
@ -172,6 +171,7 @@
|
|||
<string name="show_recycle_bin_last">Show the Recycle Bin as the last item on the main screen</string>
|
||||
<string name="allow_down_gesture">Allow closing the fullscreen view with a down gesture</string>
|
||||
<string name="allow_one_to_one_zoom">Allow 1:1 zooming in with two double taps</string>
|
||||
<string name="open_videos_on_separate_screen">Always open videos on a separate screen with new horizontal gestures</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">섬네일</string>
|
||||
|
@ -194,7 +194,6 @@
|
|||
<string name="faq_3_text">You can long press the desired album and select the Pin icon at the actionmenu, that will pin it to the top. You can pin multiple folders too, pinned items will be sorted by the default sorting method.</string>
|
||||
<string name="faq_4_title">How can I fast-forward videos?</string>
|
||||
<string name="faq_4_text">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string>
|
||||
<string name="faq_4_text_old">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string>
|
||||
<string name="faq_5_title">What is the difference between hiding and excluding a folder?</string>
|
||||
<string name="faq_5_text">Exclude prevents displaying the folder only in Simple Gallery, while Hide works system-wise and it hides the folder from other galleries too. It works by creating an empty \".nomedia\" file in the given folder, which you can then remove with any file manager too.</string>
|
||||
<string name="faq_6_title">Why do folders with music cover art or stickers show up?</string>
|
||||
|
@ -204,8 +203,6 @@
|
|||
<string name="faq_8_title">What if I want just a few particular folders visible?</string>
|
||||
<string name="faq_8_text">Adding a folder at the Included Folders doesn\'t automatically exclude anything. What you can do is go in Settings -> Manage Excluded Folders, exclude the root folder \"/\", then add the desired folders at Settings -> Manage Included Folders.
|
||||
That will make only the selected folders visible, as both excluding and including are recursive and if a folder is both excluded and included, it will show up.</string>
|
||||
<string name="faq_9_title">Fullscreen images have weird artifacts, can I somehow improve the quality?</string>
|
||||
<string name="faq_9_text">Yea, there is a toggle in Settings saying \"Replace deep zoomable images with better quality ones\", you can use that. It will improve the quality of the images, but they will get blurred once you try zooming in too much.</string>
|
||||
<string name="faq_10_title">Can I crop images with this app?</string>
|
||||
<string name="faq_10_text">Yes, you can crop images in the editor, by dragging the image corners. You can get to the editor either by long pressing an image thumbnail and selecting Edit, or selecting Edit from the fullscreen view.</string>
|
||||
<string name="faq_11_title">Can I somehow group media file thumbnails?</string>
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">Fix Date Taken value</string>
|
||||
<string name="fixing">Fixing…</string>
|
||||
<string name="dates_fixed_successfully">Dates fixed successfully</string>
|
||||
<string name="share_resized">Share a resized version</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">Filtruoti mediją</string>
|
||||
|
@ -87,7 +88,6 @@
|
|||
<string name="flip">Apversti</string>
|
||||
<string name="flip_horizontally">Apversti horizontaliai</string>
|
||||
<string name="flip_vertically">Apversti vertikaliai</string>
|
||||
<string name="edit_with">Redaguoti su</string>
|
||||
<string name="free_aspect_ratio">Free</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">Other</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
|
@ -157,7 +157,6 @@
|
|||
<string name="allow_photo_gestures">Leisti valdyti nuotraukų ryškumą vertikaliais gestais</string>
|
||||
<string name="allow_video_gestures">Leisti kontroliuoti vaizdo įrašo garsumą ir ryškumą vertikaliais gestais</string>
|
||||
<string name="show_media_count">Rodyti aplanko bylų skaičių pagrindiniame rodinyje</string>
|
||||
<string name="replace_share_with_rotate">Pakeisti bendrinti su rotacija viso ekrano meniu</string>
|
||||
<string name="show_extended_details">Rodyti išsamią informaciją per visą ekraną</string>
|
||||
<string name="manage_extended_details">Tvarkykite išsamią informaciją</string>
|
||||
<string name="one_finger_zoom">Leisti vienu pirštu pritraukti viso ekrano rėžime</string>
|
||||
|
@ -172,6 +171,7 @@
|
|||
<string name="show_recycle_bin_last">Show the Recycle Bin as the last item on the main screen</string>
|
||||
<string name="allow_down_gesture">Allow closing the fullscreen view with a down gesture</string>
|
||||
<string name="allow_one_to_one_zoom">Allow 1:1 zooming in with two double taps</string>
|
||||
<string name="open_videos_on_separate_screen">Always open videos on a separate screen with new horizontal gestures</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Miniatiūros</string>
|
||||
|
@ -194,7 +194,6 @@
|
|||
<string name="faq_3_text">Galite ilgai paspausti norimą albumą ir pasirinkti "Prisegti" piktogramą, esančią meniu "Veiksmo meniu", viršuje. Galite prisegti kelis aplankus, prisegti elementai bus rūšiuojami pagal numatytąjį rūšiavimo metodą.</string>
|
||||
<string name="faq_4_title">Kaip galėčiau greitai prasukti vaizdo įrašus?</string>
|
||||
<string name="faq_4_text">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string>
|
||||
<string name="faq_4_text_old">Galite spustelėti tekstus šalia slinkties juostos, kad būtų perkeltas vaizdo įrašas atgal arba į priekį.</string>
|
||||
<string name="faq_5_title">Koks skirtumas tarp slėpimo ir išskyrimo iš aplanko?</string>
|
||||
<string name="faq_5_text">Išskyrimas neleidžia rodyti aplanko tik paprastoje galerijoje, tuo tarpu slėpimas slepia aplanką iš kitų galerijų. Tai veikia, sukuriant tuščią \ ". Nomedia \" bylą tam tikrame aplanke, kurį vėliau galite pašalinti bet kuria bylų tvarkykle.</string>
|
||||
<string name="faq_6_title">Kodėl pasirodo aplankai su muzikos viršeliu ar lipdukais?</string>
|
||||
|
@ -204,8 +203,6 @@
|
|||
<string name="faq_8_title">Ką daryti, jei noriu matyti tik keletą konkrečių aplankų?</string>
|
||||
<string name="faq_8_text">Pridėjus aplanką į "Įtraukti aplankai", automatiškai neįtraukiama nieko. Ką jūs galite padaryti, eikite į Nustatymai -> Tvarkyti išskirtus aplankus, išskirkite šakninį aplanką \ "/ \", tada pridėkite norimus aplankus, esančius Nustatymai -> Tvarkyti įtrauktas aplankas.
|
||||
Tai leis matyti tik tuos pasirinktus aplankus, nes abu atmetami ir įtraukti yra rekursyvūs, ir jei aplankas yra išskirtas ir įtrauktas, jis bus rodomas.</string>
|
||||
<string name="faq_9_title">Viso ekrano atvaizdai turi keistus artefaktus, galiu kokiu nors būdu pagerinti kokybę?</string>
|
||||
<string name="faq_9_text">Taip, "Nustatymuose" perjunkite \ "Pakeisti giliuosius, patobulintus vaizdus geresnės kokybės vaizdais \", galite tai naudoti. Tai pagerins vaizdų kokybę, tačiau kai jūs pabandysite per daug padidinti vaizdą, jie bus neryškūs.</string>
|
||||
<string name="faq_10_title">Ar galiu apkarpyti vaizdus naudojant šią programėlę?</string>
|
||||
<string name="faq_10_text">Taip, redaguodami vaizdus, galite juos apkarpyti, vilkdami vaizdo kampus. Galite patekti į redaktorių ilgai paspaudę vaizdo miniatiūrą ir pasirinkę "Redaguoti" arba iš viso ekrano rodinio pasirinkę "Redaguoti".</string>
|
||||
<string name="faq_11_title">Can I somehow group media file thumbnails?</string>
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">Korriger Dato tatt-verdi</string>
|
||||
<string name="fixing">Korrigerer…</string>
|
||||
<string name="dates_fixed_successfully">Datoer er korrigerte</string>
|
||||
<string name="share_resized">Share a resized version</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">Filtrer media</string>
|
||||
|
@ -87,7 +88,6 @@
|
|||
<string name="flip">Speilvend</string>
|
||||
<string name="flip_horizontally">Speilvend horisontalt</string>
|
||||
<string name="flip_vertically">Speilvend vertikalt</string>
|
||||
<string name="edit_with">Rediger med</string>
|
||||
<string name="free_aspect_ratio">Fri</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">Annen</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
|
@ -122,7 +122,7 @@
|
|||
<string name="change_view_type">Endre visningstype</string>
|
||||
<string name="grid">Rutenett</string>
|
||||
<string name="list">Liste</string>
|
||||
<string name="group_direct_subfolders">Group direct subfolders</string>
|
||||
<string name="group_direct_subfolders">Grupper direkte undermapper</string>
|
||||
|
||||
<!-- Grouping at media thumbnails -->
|
||||
<string name="group_by">Grupper etter</string>
|
||||
|
@ -157,7 +157,6 @@
|
|||
<string name="allow_photo_gestures">Tillat å styre fotolysstyrke med vertikale bevegelser</string>
|
||||
<string name="allow_video_gestures">Tillat å styre videovolum og lysstyrke med vertikale bevegelser</string>
|
||||
<string name="show_media_count">Vis mediaantallet i mapper på hovedvisningen</string>
|
||||
<string name="replace_share_with_rotate">Erstatt Del med Roter i meny ved mediavisning</string>
|
||||
<string name="show_extended_details">Vis flere detaljer i mediavisningen</string>
|
||||
<string name="manage_extended_details">Velg detaljer</string>
|
||||
<string name="one_finger_zoom">Tillat en-finger-zoom i mediavisningen</string>
|
||||
|
@ -172,6 +171,7 @@
|
|||
<string name="show_recycle_bin_last">Vis papirkurven som siste element på hovedskjermen</string>
|
||||
<string name="allow_down_gesture">Tillat lukking av mediavisningen med en nedoverbevegelse</string>
|
||||
<string name="allow_one_to_one_zoom">Tillat å zoome 1:1 med to dobbeltrykk</string>
|
||||
<string name="open_videos_on_separate_screen">Åpne alltid videoer på en separat skjerm med nye horisontale bevegelser</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Minibilder</string>
|
||||
|
@ -194,7 +194,6 @@
|
|||
<string name="faq_3_text">You can long press the desired album and select the Pin icon at the actionmenu, that will pin it to the top. You can pin multiple folders too, pinned items will be sorted by the default sorting method.</string>
|
||||
<string name="faq_4_title">How can I fast-forward videos?</string>
|
||||
<string name="faq_4_text">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string>
|
||||
<string name="faq_4_text_old">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string>
|
||||
<string name="faq_5_title">What is the difference between hiding and excluding a folder?</string>
|
||||
<string name="faq_5_text">Exclude prevents displaying the folder only in Simple Gallery, while Hide works system-wise and it hides the folder from other galleries too. It works by creating an empty \".nomedia\" file in the given folder, which you can then remove with any file manager too.</string>
|
||||
<string name="faq_6_title">Why do folders with music cover art or stickers show up?</string>
|
||||
|
@ -204,8 +203,6 @@
|
|||
<string name="faq_8_title">What if I want just a few particular folders visible?</string>
|
||||
<string name="faq_8_text">Adding a folder at the Included Folders doesn\'t automatically exclude anything. What you can do is go in Settings -> Manage Excluded Folders, exclude the root folder \"/\", then add the desired folders at Settings -> Manage Included Folders.
|
||||
That will make only the selected folders visible, as both excluding and including are recursive and if a folder is both excluded and included, it will show up.</string>
|
||||
<string name="faq_9_title">Fullscreen images have weird artifacts, can I somehow improve the quality?</string>
|
||||
<string name="faq_9_text">Yea, there is a toggle in Settings saying \"Replace deep zoomable images with better quality ones\", you can use that. It will improve the quality of the images, but they will get blurred once you try zooming in too much.</string>
|
||||
<string name="faq_10_title">Can I crop images with this app?</string>
|
||||
<string name="faq_10_text">Yes, you can crop images in the editor, by dragging the image corners. You can get to the editor either by long pressing an image thumbnail and selecting Edit, or selecting Edit from the fullscreen view.</string>
|
||||
<string name="faq_11_title">Can I somehow group media file thumbnails?</string>
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">Datum opname corrigeren</string>
|
||||
<string name="fixing">Corrigeren…</string>
|
||||
<string name="dates_fixed_successfully">Datums zijn gecorrigeerd</string>
|
||||
<string name="share_resized">Verkleinde versie delen</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">Media filteren</string>
|
||||
|
@ -87,7 +88,6 @@
|
|||
<string name="flip">Kantelen</string>
|
||||
<string name="flip_horizontally">Horizontaal kantelen</string>
|
||||
<string name="flip_vertically">Verticaal kantelen</string>
|
||||
<string name="edit_with">Bewerken met</string>
|
||||
<string name="free_aspect_ratio">Vrij</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">Anders</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
|
@ -157,7 +157,6 @@
|
|||
<string name="allow_photo_gestures">Helderheid voor afbeeldingen aanpassen met verticale veeggebaren</string>
|
||||
<string name="allow_video_gestures">Volume en helderheid voor video\'s aanpassen met verticale veeggebaren</string>
|
||||
<string name="show_media_count">Aantallen in mappen tonen</string>
|
||||
<string name="replace_share_with_rotate">Menu-item Draaien vastzetten in volledig scherm (in plaats van Delen)</string>
|
||||
<string name="show_extended_details">Uitgebreide informatie tonen in volledig scherm</string>
|
||||
<string name="manage_extended_details">Uitgebreide informatie</string>
|
||||
<string name="one_finger_zoom">Met één vinger zoomen in volledig scherm</string>
|
||||
|
@ -172,6 +171,7 @@
|
|||
<string name="show_recycle_bin_last">Prullenbak als laatste item tonen</string>
|
||||
<string name="allow_down_gesture">Naar beneden vegen om volledig scherm af te sluiten</string>
|
||||
<string name="allow_one_to_one_zoom">1:1 zoomen na 2x dubbelklikken</string>
|
||||
<string name="open_videos_on_separate_screen">Video\'s altijd in apart scherm met horizontale veeggebaren openen</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Miniatuurvoorbeelden</string>
|
||||
|
@ -185,37 +185,34 @@
|
|||
<string name="toggle_file_visibility">Bestand tonen/verbergen</string>
|
||||
|
||||
<!-- FAQ -->
|
||||
<string name="faq_1_title">How can I make Simple Gallery the default device gallery?</string>
|
||||
<string name="faq_1_text">First you have to find the currently default gallery in the Apps section of your device settings, look for a button that says something like \"Open by default\", click on it, then select \"Clear defaults\".
|
||||
The next time you will try opening an image or video you should see an app picker, where you can select Simple Gallery and make it the default app.</string>
|
||||
<string name="faq_2_title">I locked the app with a password, but I forgot it. What can I do?</string>
|
||||
<string name="faq_2_text">You can solve it in 2 ways. You can either reinstall the app, or find the app in your device settings and select \"Clear data\". It will reset all your settings, it will not remove any media files.</string>
|
||||
<string name="faq_3_title">How can I make an album always appear at the top?</string>
|
||||
<string name="faq_3_text">You can long press the desired album and select the Pin icon at the actionmenu, that will pin it to the top. You can pin multiple folders too, pinned items will be sorted by the default sorting method.</string>
|
||||
<string name="faq_4_title">How can I fast-forward videos?</string>
|
||||
<string name="faq_4_text">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string>
|
||||
<string name="faq_4_text_old">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string>
|
||||
<string name="faq_5_title">What is the difference between hiding and excluding a folder?</string>
|
||||
<string name="faq_5_text">Exclude prevents displaying the folder only in Simple Gallery, while Hide works system-wise and it hides the folder from other galleries too. It works by creating an empty \".nomedia\" file in the given folder, which you can then remove with any file manager too.</string>
|
||||
<string name="faq_6_title">Why do folders with music cover art or stickers show up?</string>
|
||||
<string name="faq_6_text">It can happen that you will see some unusual albums show up. You can easily exclude them by long pressing them and selecting Exclude. In the next dialog you can then select the parent folder, chances are it will prevent the other related albums showing up too.</string>
|
||||
<string name="faq_7_title">A folder with images isn\'t showing up, what can I do?</string>
|
||||
<string name="faq_7_text">That can have multiple reasons, but solving it is easy. Just go in Settings -> Manage Included Folders, select Plus and navigate to the required folder.</string>
|
||||
<string name="faq_8_title">What if I want just a few particular folders visible?</string>
|
||||
<string name="faq_8_text">Adding a folder at the Included Folders doesn\'t automatically exclude anything. What you can do is go in Settings -> Manage Excluded Folders, exclude the root folder \"/\", then add the desired folders at Settings -> Manage Included Folders.
|
||||
That will make only the selected folders visible, as both excluding and including are recursive and if a folder is both excluded and included, it will show up.</string>
|
||||
<string name="faq_9_title">Fullscreen images have weird artifacts, can I somehow improve the quality?</string>
|
||||
<string name="faq_9_text">Yea, there is a toggle in Settings saying \"Replace deep zoomable images with better quality ones\", you can use that. It will improve the quality of the images, but they will get blurred once you try zooming in too much.</string>
|
||||
<string name="faq_10_title">Can I crop images with this app?</string>
|
||||
<string name="faq_10_text">Yes, you can crop images in the editor, by dragging the image corners. You can get to the editor either by long pressing an image thumbnail and selecting Edit, or selecting Edit from the fullscreen view.</string>
|
||||
<string name="faq_11_title">Can I somehow group media file thumbnails?</string>
|
||||
<string name="faq_11_text">Sure, just use the \"Group by\" menu item while at the thumbnails view. You can group files by multiple criteria, including Date Taken. If you use the \"Show all folders content\" function you can group them by folders too.</string>
|
||||
<string name="faq_12_title">Sorting by Date Taken doesn\'t seem to work properly, how can I fix it?</string>
|
||||
<string name="faq_12_text">It is most likely caused by the files being copied from somewhere. You can fix it by selecting the file thumbnails and selecting \"Fix Date Taken value\".</string>
|
||||
<string name="faq_13_title">I see some color banding on the images. How can I improve the quality?</string>
|
||||
<string name="faq_13_text">The current solution for displaying images works fine in the vast majority of cases, but if you want even better image quality, you can enable the \"Show images in the highest possible quality\" at the app settings, in the \"Deep zoomable images\" section.</string>
|
||||
<string name="faq_14_title">I have hidden a file/folder. How can I unhide it?</string>
|
||||
<string name="faq_14_text">You can either press the \"Temporarily show hidden items\" menu item at the main screen, or toggle \"Show hidden items\" in the app settings to see the hidden item. If you want to unhide it, just long press it and select \"Unhide\". Folders are hidden by adding a hidden \".nomedia\" file into them, you can delete the file with any file manager too.</string>
|
||||
<string name="faq_1_title">Hoe kan ik Eenvoudige Galerij instellen als standaard-app voor foto\'s en video\'s?</string>
|
||||
<string name="faq_1_text">Zoek eerst de huidige standaard-app voor foto\'s en video\'s in de Android-instellingen (via \"Apps\" of "\Apps en meldingen\"). Klik bij de App-info op \"Standaardwaarden wissen\" (soms onder \"Standaard openen\").
|
||||
Bij het openen van een foto of video zal de volgende keer een keuzescherm verschijnen, waarin Eenvoudige Galerij als standaard-app kan worden ingesteld.</string>
|
||||
<string name="faq_2_title">Ik heb de app beveiligd met een wachtwoord, maar ben het wachtwoord nu vergeten. Wat kan ik doen?</string>
|
||||
<string name="faq_2_text">Deïnstalleer en herinstalleer de app, of ga naar de app in de Android-instellingen (via \"Apps (en meldingen)\" -> \"App-info\") en kies via \"Opslagruimte\" voor \"Gegevens wissen\". Hiermee worden alleen de instellingen van deze app gewist.</string>
|
||||
<string name="faq_3_title">Hoe kan ik een map bovenaan vastzetten?</string>
|
||||
<string name="faq_3_text">Druk lang op het map en kies vervolgens de punaise in het actiemenu. Als er meerdere mappen zijn vastgezet, zullen deze worden weergeven op basis van de standaardsortering.</string>
|
||||
<string name="faq_4_title">Hoe kan ik terug- of vooruitspoelen in video\'s?</string>
|
||||
<string name="faq_4_text">Sleep horizontaal over de videospeler, of klik bij de zoekbalk op de cijfers die de huidige voortgang of de lengte weergeven. Hierbij zal de video respectievelijk terug- of vooruitspringen.</string>
|
||||
<string name="faq_5_title">Wat is het verschil tussen het verbergen en het uitsluiten van mappen?</string>
|
||||
<string name="faq_5_text">Met \"Uitsluiten\" wordt het tonen van de map alleen binnen deze app voorkomen, terwijl \"Verbergen\" de map ook zal verbergen voor andere galerij-apps. Met \"Verbergen\" wordt een bestand genaamd \".nomedia\" in de te verbergen map aangemaakt (het verwijderen van dit bestand uit de map maakt het verbergen ongedaan).</string>
|
||||
<string name="faq_6_title">Waarom zie ik mappen met stickers of covers van muziekalbums?</string>
|
||||
<string name="faq_6_text">Soms worden er wat ongebruikelijke afbeeldingen van andere apps getoond. Deze zijn gemakkelijk uit het overzicht te halen door lang te drukken op de map en vervolgens te kiezen voor \"Uitsluiten\". In het daaropvolgende venster is ook de bovenliggende map te kiezen; dit zou het tonen van soortgelijke ongewenste items kunnen voorkomen.</string>
|
||||
<string name="faq_7_title">Een bepaalde map met afbeeldingen wordt niet getoond. Wat kan ik doen?</string>
|
||||
<string name="faq_7_text">Dit kan verschillende redenen hebben, maar is eenvoudig op te lossen. Ga naar \"Instellingen\" -> \"Toegevoegde mappen beheren\", klik vervolgens op het plus-symbool en navigeer naar de gewenste map.</string>
|
||||
<string name="faq_8_title">Wat als ik slechts een beperkt aantal mappen wil laten zien?</string>
|
||||
<string name="faq_8_text">Het toevoegen van mappen aan de lijst bij \"Toegevoegde mappen beheren\" sluit niet automatisch alle andere mappen uit. Sluit daarom de hoofdmap \"/\" uit via \"Instellingen\" -> \"Uitgesloten mappen beheren\" en voeg vervolgens de te tonen mappen toe bij \"Instellingen\" -> \"Toegevoegde mappen beheren\".
|
||||
Dit zal ervoor zorgen dat alleen de toegevoegde mappen worden getoond (mappen toevoegen of uitsluiten gebeurt recursief, maar een toegevoegde map zal altijd worden getoond).</string>
|
||||
<string name="faq_10_title">Kan ik afbeeldingen bijsnijden met deze app?</string>
|
||||
<string name="faq_10_text">Ja, dat kan bij \"Bewerken\" door de hoeken te verslepen. Druk lang op een afbeelding in het overzicht of ga naar het volledig scherm en klik vervolgens op \"Bewerken\".</string>
|
||||
<string name="faq_11_title">Hoe kan ik mediabestanden groeperen?</string>
|
||||
<string name="faq_11_text">Kies het menu-item \"Groeperen op\" om op basis van verschillende criteria te groeperen. Dit kan ook ongeacht de mappenstructuur als voor de functie \"Alles weergeven\" is gekozen.</string>
|
||||
<string name="faq_12_title">Sorteren op Datum opname lijkt niet te werken. Hoe kan ik dit oplossen?</string>
|
||||
<string name="faq_12_text">Waarschijnlijk zijn de bestanden gekopieerd vanaf een andere locatie. Selecteer de bestanden en kies \"Datum opname corrigeren\".</string>
|
||||
<string name="faq_13_title">Ik zie \"color banding\" op de afbeeldingen. Hoe kan ik de kwaliteit verbeteren?</string>
|
||||
<string name="faq_13_text">In de meeste gevallen werkt de huidige methode voor het weergeven van afbeeldingen prima, maar met de instelling \"Afbeeldingen in de hoogst mogelijke kwaliteit weergeven\" onder \"Afbeeldingen ver inzoomen\" kan een nog betere kwaliteit worden bewerkstelligd.</string>
|
||||
<string name="faq_14_title">Ik heb een bestand of map verborgen. Hoe kan ik dit ongedaan maken?</string>
|
||||
<string name="faq_14_text">Kies het menu-item \"Verborgen items tijdelijk tonen\", of schakel de instelling \"Verborgen items tonen\" in om het verborgen item te kunnen zien. Druk vervolgens lang op het item en kies \"Tonen\" om het verbergen ongedaan te maken. Mappen worden verborgen door het bestand \".nomedia\" in de map te plaatsen; dit bestand kan ook handmatig in een andere app worden verwijderd.</string>
|
||||
|
||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">Napraw datę utworzenia</string>
|
||||
<string name="fixing">Naprawiam…</string>
|
||||
<string name="dates_fixed_successfully">Daty zostały naprawione</string>
|
||||
<string name="share_resized">Share a resized version</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">Filtruj multimedia</string>
|
||||
|
@ -87,7 +88,6 @@
|
|||
<string name="flip">Przewróć</string>
|
||||
<string name="flip_horizontally">Przewróć w poziomie</string>
|
||||
<string name="flip_vertically">Przewróć w pionie</string>
|
||||
<string name="edit_with">Edytuj w:</string>
|
||||
<string name="free_aspect_ratio">Wolne</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">Inny</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
|
@ -157,7 +157,6 @@
|
|||
<string name="allow_photo_gestures">Zezwalaj na kontrolowanie jasności zdjęcia pionowymi gestami</string>
|
||||
<string name="allow_video_gestures">Zezwalaj na kontrolowanie jasności i głośności filmów pionowymi gestami</string>
|
||||
<string name="show_media_count">Pokazuj liczbę elementów w folderach w głównym widoku</string>
|
||||
<string name="replace_share_with_rotate">Zamień funkcję udostępniania na obracanie w menu pełnoekranowym</string>
|
||||
<string name="show_extended_details">Dodatkowe szczegóły przy podglądzie pełnoekranowym</string>
|
||||
<string name="manage_extended_details">Zarządzaj dodatkowymi szczegółami</string>
|
||||
<string name="one_finger_zoom">Zezwalaj na powiększanie jednym palcem w widoku pełnoekranowym</string>
|
||||
|
@ -172,6 +171,7 @@
|
|||
<string name="show_recycle_bin_last">Pokazuj kosz jako ostatni element na głównym ekranie</string>
|
||||
<string name="allow_down_gesture">Zezwalaj na zamykanie pełnoekranowego widoku gestem pociągnięcia w dół</string>
|
||||
<string name="allow_one_to_one_zoom">Allow 1:1 zooming in with two double taps</string>
|
||||
<string name="open_videos_on_separate_screen">Always open videos on a separate screen with new horizontal gestures</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Miniatury</string>
|
||||
|
@ -193,7 +193,6 @@
|
|||
<string name="faq_3_text">Przytrzymaj album(y) i wybierz ikonę przypięcia w pasku akcji.</string>
|
||||
<string name="faq_4_title">Jak mogę przwijać filmy?</string>
|
||||
<string name="faq_4_text">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string>
|
||||
<string name="faq_4_text_old">Kliknij na napisie z czasem trwania filmu, bądź tym z obecnym momentem filmu.</string>
|
||||
<string name="faq_5_title">Jaka jest różnica między ukryciem, a wykluczeniem folderu?</string>
|
||||
<string name="faq_5_text">Wykluczenie działa tylko w obrębie niniejszej aplikacji (wszędzie indziej pliki są normalnie widoczne), ukrywanie - w obrębie całego systemu (nie widać ich nigdzie), dodawany jest wtedy do folderu pusty plik \'.nomedia\', który możesz usunąć w dowolnym menedżerze plików.</string>
|
||||
<string name="faq_6_title">Dlaczego pokazują mi się foldery z okładkami do piosenek i tym podobne rzeczy?</string>
|
||||
|
@ -202,8 +201,6 @@
|
|||
<string name="faq_7_text">Wejdź do ustawień aplikacji i w sekcji z dołączonymi folderami dodaj tenże folder do listy.</string>
|
||||
<string name="faq_8_title">Co jeśli chcę widzieć tylko wybrane foldery?</string>
|
||||
<string name="faq_8_text">Przejdź do sekcji z wykluczonymi folderami w ustawieniach aplikacji, dodaj tam folder główny (\"/\"), a następnie dodaj pożądane foldery w sekcji z dołączonymi folderami.</string>
|
||||
<string name="faq_9_title">Zdjęcia w widoku pełnoekranowym mają dziwne artefakty. Jak mogę to naprawić?</string>
|
||||
<string name="faq_9_text">W ustawieniach aplikacji włącz opcję \'Zamieniaj powiększalne obrazy na te o lepszej jakości\'. Poprawi ona jakość zdjęć, jednak przy bardzo dużych powiększeniach mogą się stać one zbyt rozmazane.</string>
|
||||
<string name="faq_10_title">Czy mogę w tej aplikacji przycinać obrazy?</string>
|
||||
<string name="faq_10_text">Tak, możesz to zrobić w edytorze, przeciągając krawędzie obrazu. Edytor otworzysz przytrzymując miniaturę obrazu i wybierając opcję \'Edytuj\', bądź wybierając tą samą opcję w menu pełnoekranowym.</string>
|
||||
<string name="faq_11_title">Czy mogę jakoś grupować miniatury plików?</string>
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">Fix Date Taken value</string>
|
||||
<string name="fixing">Fixing…</string>
|
||||
<string name="dates_fixed_successfully">Dates fixed successfully</string>
|
||||
<string name="share_resized">Share a resized version</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">Filtrar mídia</string>
|
||||
|
@ -87,7 +88,6 @@
|
|||
<string name="flip">Inverter</string>
|
||||
<string name="flip_horizontally">Horizontalmente</string>
|
||||
<string name="flip_vertically">Verticalmente</string>
|
||||
<string name="edit_with">Editar com</string>
|
||||
<string name="free_aspect_ratio">Free</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">Other</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
|
@ -157,7 +157,6 @@
|
|||
<string name="allow_photo_gestures">Permitir controle do brilho com gestos na vertical</string>
|
||||
<string name="allow_video_gestures">Permitir controle do volume e brilho com gestos na vertical</string>
|
||||
<string name="show_media_count">Mostrar quantidade de arquivos das pastas</string>
|
||||
<string name="replace_share_with_rotate">Substituir botão "Compartilhar" por "Rotação de tela" quando em tela cheia</string>
|
||||
<string name="show_extended_details">Exibir detalhes extendidos quando em tela cheia</string>
|
||||
<string name="manage_extended_details">Gerenciar detalhes extendidos</string>
|
||||
<string name="one_finger_zoom">Permitir zoom com um dedo quando em exibição de tela cheia</string>
|
||||
|
@ -172,6 +171,7 @@
|
|||
<string name="show_recycle_bin_last">Show the Recycle Bin as the last item on the main screen</string>
|
||||
<string name="allow_down_gesture">Allow closing the fullscreen view with a down gesture</string>
|
||||
<string name="allow_one_to_one_zoom">Allow 1:1 zooming in with two double taps</string>
|
||||
<string name="open_videos_on_separate_screen">Always open videos on a separate screen with new horizontal gestures</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Miniaturas</string>
|
||||
|
@ -194,7 +194,6 @@
|
|||
<string name="faq_3_text">You can long press the desired album and select the Pin icon at the actionmenu, that will pin it to the top. You can pin multiple folders too, pinned items will be sorted by the default sorting method.</string>
|
||||
<string name="faq_4_title">How can I fast-forward videos?</string>
|
||||
<string name="faq_4_text">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string>
|
||||
<string name="faq_4_text_old">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string>
|
||||
<string name="faq_5_title">What is the difference between hiding and excluding a folder?</string>
|
||||
<string name="faq_5_text">Exclude prevents displaying the folder only in Simple Gallery, while Hide works system-wise and it hides the folder from other galleries too. It works by creating an empty \".nomedia\" file in the given folder, which you can then remove with any file manager too.</string>
|
||||
<string name="faq_6_title">Why do folders with music cover art or stickers show up?</string>
|
||||
|
@ -204,8 +203,6 @@
|
|||
<string name="faq_8_title">What if I want just a few particular folders visible?</string>
|
||||
<string name="faq_8_text">Adding a folder at the Included Folders doesn\'t automatically exclude anything. What you can do is go in Settings -> Manage Excluded Folders, exclude the root folder \"/\", then add the desired folders at Settings -> Manage Included Folders.
|
||||
That will make only the selected folders visible, as both excluding and including are recursive and if a folder is both excluded and included, it will show up.</string>
|
||||
<string name="faq_9_title">Fullscreen images have weird artifacts, can I somehow improve the quality?</string>
|
||||
<string name="faq_9_text">Yea, there is a toggle in Settings saying \"Replace deep zoomable images with better quality ones\", you can use that. It will improve the quality of the images, but they will get blurred once you try zooming in too much.</string>
|
||||
<string name="faq_10_title">Can I crop images with this app?</string>
|
||||
<string name="faq_10_text">Yes, you can crop images in the editor, by dragging the image corners. You can get to the editor either by long pressing an image thumbnail and selecting Edit, or selecting Edit from the fullscreen view.</string>
|
||||
<string name="faq_11_title">Can I somehow group media file thumbnails?</string>
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">Corrigir data de obtenção</string>
|
||||
<string name="fixing">A corrigir…</string>
|
||||
<string name="dates_fixed_successfully">Dados corrigidos com sucesso</string>
|
||||
<string name="share_resized">Share a resized version</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">Filtrar multimédia</string>
|
||||
|
@ -87,7 +88,6 @@
|
|||
<string name="flip">Inverter</string>
|
||||
<string name="flip_horizontally">Horizontalmente</string>
|
||||
<string name="flip_vertically">Verticalmente</string>
|
||||
<string name="edit_with">Editar com</string>
|
||||
<string name="free_aspect_ratio">Livre</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">Outro</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
|
@ -116,7 +116,7 @@
|
|||
<string name="loop_slideshow">Apresentação em ciclo</string>
|
||||
<string name="slideshow_ended">Apresentação terminada</string>
|
||||
<string name="no_media_for_slideshow">Não foram encontrados ficheiros para a apresentação</string>
|
||||
<string name="use_crossfade_animation">Use crossfade animations</string>
|
||||
<string name="use_crossfade_animation">Utilizar animação de transição</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Tipo de exibição</string>
|
||||
|
@ -134,8 +134,8 @@
|
|||
<string name="by_extension">Extensão</string>
|
||||
|
||||
<!-- Widgets -->
|
||||
<string name="folder_on_widget">Folder shown on the widget:</string>
|
||||
<string name="show_folder_name">Show folder name</string>
|
||||
<string name="folder_on_widget">Pasta mostrada no widget:</string>
|
||||
<string name="show_folder_name">Mostrar nome da pasta</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="autoplay_videos">Reproduzir vídeos automaticamente</string>
|
||||
|
@ -157,7 +157,6 @@
|
|||
<string name="allow_photo_gestures">Permitir controlo do brilho das fotos com gestos verticais</string>
|
||||
<string name="allow_video_gestures">Permitir controlo do volume e do brilho dos vídeos através de gestos verticais</string>
|
||||
<string name="show_media_count">Mostrar número de ficheiros na vista principal</string>
|
||||
<string name="replace_share_with_rotate">Substituir a opção Partilhar pela opção Rodar se em ecrã completo</string>
|
||||
<string name="show_extended_details">Mostrar detalhes se em ecrã completo</string>
|
||||
<string name="manage_extended_details">Gerir detalhes exibidos</string>
|
||||
<string name="one_finger_zoom">Permitir ampliação com um dedo se em ecrã completo</string>
|
||||
|
@ -171,7 +170,8 @@
|
|||
<string name="show_highest_quality">Mostrar fotos com a melhor qualidade possível</string>
|
||||
<string name="show_recycle_bin_last">Mostrar a reciclagem como o último item do ecrã principal</string>
|
||||
<string name="allow_down_gesture">Sair de ecrã completo com um gesto para baixo</string>
|
||||
<string name="allow_one_to_one_zoom">Allow 1:1 zooming in with two double taps</string>
|
||||
<string name="allow_one_to_one_zoom">Permitir ampliação 1:1 com dois toques</string>
|
||||
<string name="open_videos_on_separate_screen">Abrir vídeos em ecrã distinto com os novos toques horizontais</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Miniaturas</string>
|
||||
|
@ -194,7 +194,6 @@
|
|||
<string name="faq_3_text">You can long press the desired album and select the Pin icon at the actionmenu, that will pin it to the top. You can pin multiple folders too, pinned items will be sorted by the default sorting method.</string>
|
||||
<string name="faq_4_title">How can I fast-forward videos?</string>
|
||||
<string name="faq_4_text">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string>
|
||||
<string name="faq_4_text_old">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string>
|
||||
<string name="faq_5_title">What is the difference between hiding and excluding a folder?</string>
|
||||
<string name="faq_5_text">Exclude prevents displaying the folder only in Simple Gallery, while Hide works system-wise and it hides the folder from other galleries too. It works by creating an empty \".nomedia\" file in the given folder, which you can then remove with any file manager too.</string>
|
||||
<string name="faq_6_title">Why do folders with music cover art or stickers show up?</string>
|
||||
|
@ -204,8 +203,6 @@
|
|||
<string name="faq_8_title">What if I want just a few particular folders visible?</string>
|
||||
<string name="faq_8_text">Adding a folder at the Included Folders doesn\'t automatically exclude anything. What you can do is go in Settings -> Manage Excluded Folders, exclude the root folder \"/\", then add the desired folders at Settings -> Manage Included Folders.
|
||||
That will make only the selected folders visible, as both excluding and including are recursive and if a folder is both excluded and included, it will show up.</string>
|
||||
<string name="faq_9_title">Fullscreen images have weird artifacts, can I somehow improve the quality?</string>
|
||||
<string name="faq_9_text">Yea, there is a toggle in Settings saying \"Replace deep zoomable images with better quality ones\", you can use that. It will improve the quality of the images, but they will get blurred once you try zooming in too much.</string>
|
||||
<string name="faq_10_title">Can I crop images with this app?</string>
|
||||
<string name="faq_10_text">Yes, you can crop images in the editor, by dragging the image corners. You can get to the editor either by long pressing an image thumbnail and selecting Edit, or selecting Edit from the fullscreen view.</string>
|
||||
<string name="faq_11_title">Can I somehow group media file thumbnails?</string>
|
||||
|
@ -219,7 +216,7 @@
|
|||
|
||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
<string name="app_short_description">An offline gallery for managing your files without ads, respecting your privacy.</string>
|
||||
<string name="app_short_description">Aplicação para gerir os seus ficheiros, sem anúncios e com total privacidade.</string>
|
||||
<string name="app_long_description">
|
||||
Um aplicação capaz de mostrar diversos tipos de imagens e vídeos incluíndo SVG, RAW, fotos panorâmicas e vídeos.
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">Исправить дату</string>
|
||||
<string name="fixing">Исправление…</string>
|
||||
<string name="dates_fixed_successfully">Даты исправлены</string>
|
||||
<string name="share_resized">Share a resized version</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">Фильтр медиа</string>
|
||||
|
@ -87,7 +88,6 @@
|
|||
<string name="flip">Отразить</string>
|
||||
<string name="flip_horizontally">По горизонтали</string>
|
||||
<string name="flip_vertically">По вертикали</string>
|
||||
<string name="edit_with">Редактировать в…</string>
|
||||
<string name="free_aspect_ratio">Произвольно</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">Другое</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
|
@ -157,7 +157,6 @@
|
|||
<string name="allow_photo_gestures">Управление яркостью при просмотре изображения вертикальными жестами</string>
|
||||
<string name="allow_video_gestures">Управление громкостью и яркостью при просмотре видео вертикальными жестами</string>
|
||||
<string name="show_media_count">Показывать количество файлов в папках</string>
|
||||
<string name="replace_share_with_rotate">Заменить \"Поделиться\" на \"Повернуть\" в меню при просмотре изображения</string>
|
||||
<string name="show_extended_details">Показывать сведения о файле</string>
|
||||
<string name="manage_extended_details">Выбор сведений о файле</string>
|
||||
<string name="one_finger_zoom">Масштабирование одним пальцем при просмотре изображения</string>
|
||||
|
@ -172,6 +171,7 @@
|
|||
<string name="show_recycle_bin_last">Показывать корзину как последний элемент на главном экране</string>
|
||||
<string name="allow_down_gesture">Выходить из полноэкранного режима жестом вниз</string>
|
||||
<string name="allow_one_to_one_zoom">Масштаб 1:1 двумя двойными нажатиями</string>
|
||||
<string name="open_videos_on_separate_screen">Always open videos on a separate screen with new horizontal gestures</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Миниатюры</string>
|
||||
|
@ -194,7 +194,6 @@
|
|||
<string name="faq_3_text">Вы можете длительным нажатием на желаемый альбом открыть меню действий в нём выбрать пункт \"Закрепить\". Можно закрепить несколько альбомов (папок); прикреплённые элементы будут отсортированы по методу сортировки по умолчанию.</string>
|
||||
<string name="faq_4_title">Как ускорить перемотку видео?</string>
|
||||
<string name="faq_4_text">Вы можете либо перемещать пальцем по горизонтали над видеоплеером, либо нажать на цифры текущего положения или максимальной длительности видео рядом с панелью поиска, что приведёт к перемещению позиции воспроизведения назад или вперёд.</string>
|
||||
<string name="faq_4_text_old">Вы можете нажать на цифры текущего положения или максимальной длительности видео рядом с панелью поиска, что приведёт к перемещению позиции воспроизведения либо назад, либо вперёд.</string>
|
||||
<string name="faq_5_title">В чём разница между скрытием и исключением папки?</string>
|
||||
<string name="faq_5_text">Исключение запрещает отображение папки только в Simple Gallery, в то время как скрытие работает системно и скрывает папку из других галерей. Это достигается путём создания пустого файла \".nomedia\" в данной папке, который впоследствии можно удалить любым файловым менеджером.</string>
|
||||
<string name="faq_6_title">Почему отображаются папки с музыкальными обложками?</string>
|
||||
|
@ -204,8 +203,6 @@
|
|||
<string name="faq_8_title">Что делать, если я хочу видеть только несколько конкретных папок?</string>
|
||||
<string name="faq_8_text">Добавление папки во включённые не исключает автоматически остальные. Что вы можете сделать это через \"Настройки\" -> \"Управление исключёнными папками\". Исключите корневую папку \"/\", затем добавьте нужные папки в \"Настройки\" -> \"Управление включёнными папками\".
|
||||
Это сделает видимыми только выбранные папки, так как исключение и включение являются рекурсивными, и если папка исключена и включена, то она будет отображаться.</string>
|
||||
<string name="faq_9_title">Полноэкранные изображения имеют странные артефакты, можно как-то улучшить качество?</string>
|
||||
<string name="faq_9_text">Да, в настройках есть переключатель \"Заменять масштабируемые изображения высококачественными\", использовуйте его. Это улучшит качество изображений, но они будут размыты, если вы попытаетесь сильно увеличить масштаб отображения.</string>
|
||||
<string name="faq_10_title">Можно ли обрезать изображения с помощью данного приложения?</string>
|
||||
<string name="faq_10_text">Да, вы можете обрезать изображения в редакторе, перетаскивая за углы. К редактированию можно перейти, выбрав соответсвующий пункт в меню, открывающемуся длительным нажатием на миниатюру или изображение в полноэкранном режиме.</string>
|
||||
<string name="faq_11_title">Могу ли я как-то сгруппировать миниатюры медиафайлов?</string>
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">Opraviť dátum vytvorenia</string>
|
||||
<string name="fixing">Opravuje sa…</string>
|
||||
<string name="dates_fixed_successfully">Dátumy boli úspešne opravené</string>
|
||||
<string name="share_resized">Zdieľať verziu so zmenenou veľkosťou</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">Filter médií</string>
|
||||
|
@ -87,7 +88,6 @@
|
|||
<string name="flip">Preklopiť</string>
|
||||
<string name="flip_horizontally">Preklopiť vodorovne</string>
|
||||
<string name="flip_vertically">Preklopiť zvisle</string>
|
||||
<string name="edit_with">Upraviť s</string>
|
||||
<string name="free_aspect_ratio">Voľný</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">Iný</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
|
@ -157,7 +157,6 @@
|
|||
<string name="allow_photo_gestures">Povoliť ovládanie jasu vertikálnymi ťahmi</string>
|
||||
<string name="allow_video_gestures">Povoliť ovládanie hlasitosti a jasu videí vertikálnymi ťahmi</string>
|
||||
<string name="show_media_count">Zobraziť počet médií v priečinku na hlavnej obrazovke</string>
|
||||
<string name="replace_share_with_rotate">Nahradiť Zdieľanie s Otočením v celoobrazovkovom menu</string>
|
||||
<string name="show_extended_details">Zobraziť rozšírené vlastnosti ponad celoobrazovkové médiá</string>
|
||||
<string name="manage_extended_details">Spravovať rozšírené vlastnosti</string>
|
||||
<string name="one_finger_zoom">Povoliť približovanie jedným prstom v celoobrazovkovom režime</string>
|
||||
|
@ -172,6 +171,7 @@
|
|||
<string name="show_recycle_bin_last">Zobraziť odpadkový kôš ako poslednú položku na hlavnej obrazovke</string>
|
||||
<string name="allow_down_gesture">Povoliť zatváranie celoobrazovkového režimu potiahnutím prsta dole</string>
|
||||
<string name="allow_one_to_one_zoom">Povoliť 1:1 priblíženie dvojnásobným dvojklikom</string>
|
||||
<string name="open_videos_on_separate_screen">Vždy otvárať videá na vlastnej obrazovke s novými vodorovnými gestami</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Náhľady</string>
|
||||
|
@ -194,7 +194,6 @@
|
|||
<string name="faq_3_text">Môžete označiť daný priečinok dlhým podržaním a zvoliť tlačidlo s obrázkom pripinačky, to ho pripne na vrch. Môžete pripnúť aj viacero priečinkov, budú zoradené podľa zvoleného radenia.</string>
|
||||
<string name="faq_4_title">Ako viem posunúť video vpred?</string>
|
||||
<string name="faq_4_text">Môžete to dosiahnuť vodorovným potiahnutím prsta cez video prehrávač, alebo kliknúť na texty súčasnej, alebo maximálnej dĺžky videa, ktoré sú vedľa indikátora súčasného progresu. To posunie video buď vpred, alebo vzad.</string>
|
||||
<string name="faq_4_text_old">Môžete kliknúť na texty súčasnej, alebo maximálnej dĺžky videa, ktoré sú vedľa indikátora súčasného progresu. To posunie video buď vpred, alebo vzad.</string>
|
||||
<string name="faq_5_title">Aký je rozdiel medzi Skrytím a Vylúčením priečinka?</string>
|
||||
<string name="faq_5_text">Kým vylúčenie predíde zobrazeniu priečinka iba vrámci Jednoduchej Galérie, skrytie ho ukryje vrámci celého systému, teda to ovplyvní aj ostatné galérie. Skrytie funguje pomocou vytvorenia prázdneho \".nomedia\" súboru v danom priečinku, ktorý viete vymazať aj nejakým správcom súborov.</string>
|
||||
<string name="faq_6_title">Prečo sa mi zobrazujú priečinky s obalmi hudobných albumov, alebo nálepkami?</string>
|
||||
|
@ -204,8 +203,6 @@
|
|||
<string name="faq_8_title">Čo v prípade, ak chcem mať zobrazených iba pár priečinkov?</string>
|
||||
<string name="faq_8_text">Pridanie priečinka medzi Pridané Priečinky automaticky nevylúči ostatné. Môžete ale ísť do Nastavenia -> Spravovať vylúčené priečinky a zvoliť Koreňový priečinok \"/\", následne pridať žiadané priečinky v Nastavenia -> Spravovať pridané priečinky.
|
||||
To spôsobí, že budú zobrazené iba vyžiadané priečinky, keďže aj vylúčenie, aj pridanie fungujú rekurzívne a ak je priečinok vylúčený, aj pridaný, bude viditeľný.</string>
|
||||
<string name="faq_9_title">Fotky na celú obrazovku majú zhoršenú kvalitu, viem ju nejak zlepšiť?</string>
|
||||
<string name="faq_9_text">Áno, v nastaveniach je prepínač s textom \"Nahradiť hlboko priblížiteľné obrázky s obrázkami s lepšou kvalitou\", môžete ho skúsiť. Spôsobí to vyššiu kvalitu obrázkov, po priblížení sa ale budú rozmazávať oveľa skôr.</string>
|
||||
<string name="faq_10_title">Dá sa s touto aplikáciou orezať obrázky?</string>
|
||||
<string name="faq_10_text">Áno, orezanie je možné v editore, potiahnutím rohov obrázkov. Do editoru sa môžete dostať buď dlhým podržaním náhľadu obrázku a zvolením menu položky Upraviť, alebo zvolením Upraviť pri celoobrazovkovom režime.</string>
|
||||
<string name="faq_11_title">Viem nejakým spôsobom zoskupiť náhľady súborov?</string>
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">Popravi datum posnetka</string>
|
||||
<string name="fixing">Popravljam…</string>
|
||||
<string name="dates_fixed_successfully">Datumi uspešno popravljeni</string>
|
||||
<string name="share_resized">Share a resized version</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">Filtriranje datotek</string>
|
||||
|
@ -87,9 +88,8 @@
|
|||
<string name="flip">Zrcaljenje</string>
|
||||
<string name="flip_horizontally">Zrcali horizontalno</string>
|
||||
<string name="flip_vertically">Zrcali vertikalno</string>
|
||||
<string name="edit_with">Uredi z</string>
|
||||
<string name="free_aspect_ratio">Prosto</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">Other</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
<string name="other_aspect_ratio">Drugo</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
<!-- Set wallpaper -->
|
||||
<string name="simple_wallpaper">Simple ozadje</string>
|
||||
|
@ -116,7 +116,7 @@
|
|||
<string name="loop_slideshow">Ponavljaj diaprojekcijo</string>
|
||||
<string name="slideshow_ended">Diaprojekcija se je zaključila</string>
|
||||
<string name="no_media_for_slideshow">Ne najdem datotek za diaprojekcijo</string>
|
||||
<string name="use_crossfade_animation">Use crossfade animations</string>
|
||||
<string name="use_crossfade_animation">Uporabi križanje animacij</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">Spremeni tip pogleda</string>
|
||||
|
@ -134,8 +134,8 @@
|
|||
<string name="by_extension">Končnica</string>
|
||||
|
||||
<!-- Widgets -->
|
||||
<string name="folder_on_widget">Folder shown on the widget:</string>
|
||||
<string name="show_folder_name">Show folder name</string>
|
||||
<string name="folder_on_widget">Mapa uporabljena na pripomočku:</string>
|
||||
<string name="show_folder_name">Prikaži ime mape</string>
|
||||
|
||||
<!-- Settings -->
|
||||
<string name="autoplay_videos">Avtomatično predvajaj videoposnetke</string>
|
||||
|
@ -157,7 +157,6 @@
|
|||
<string name="allow_photo_gestures">Dovoli nadzor svetlosti fotografije z vertikalnimi gestami</string>
|
||||
<string name="allow_video_gestures">Dovoli nadzor glasnosti in svetlosti videoposnetka z vertikalnimi gestami</string>
|
||||
<string name="show_media_count">Pokaži število elementov v glavnem pogledu</string>
|
||||
<string name="replace_share_with_rotate">Zamenjaj Deli z Obrni v celozaslonskem meniju</string>
|
||||
<string name="show_extended_details">Prikaži razširjene podrobnosti nad celozaslonskim prikazom</string>
|
||||
<string name="manage_extended_details">Urejaj razširjene podrobnosti</string>
|
||||
<string name="one_finger_zoom">Dovoli enoprstno povečavo v celozaslonskem načinu</string>
|
||||
|
@ -171,7 +170,8 @@
|
|||
<string name="show_highest_quality">Prikaži slike v največji možni kvaliteti</string>
|
||||
<string name="show_recycle_bin_last">Prikaži Koš kot zadnji element na glavnem zaslonu</string>
|
||||
<string name="allow_down_gesture">Dovoli zapiranje celozaslonskega načina z gesto navzdol</string>
|
||||
<string name="allow_one_to_one_zoom">Allow 1:1 zooming in with two double taps</string>
|
||||
<string name="allow_one_to_one_zoom">Dovoli 1:1 povečavo z dvojnim pritiskom</string>
|
||||
<string name="open_videos_on_separate_screen">Vedno odpri videoposnetke na ločenem zaslonu z novimi horizontalnimi gestami</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Sličice</string>
|
||||
|
@ -194,7 +194,6 @@
|
|||
<string name="faq_3_text">Z dolgim pritiskom na album se vam prikaže meni, v katerem je na voljo bucika, s katero pripnete album na željeno mesto. Na ta način lahko pripnete več albumov, ki bodo razvrščeni v skladu s privzetim načinom razvrščanja.</string>
|
||||
<string name="faq_4_title">Ali lahko hitro predvajam videoposnetke?</string>
|
||||
<string name="faq_4_text">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar, that will move the video either backward, or forward.</string>
|
||||
<string name="faq_4_text_old">Lahko kliknete na napis trenutnega ali maksimalnega trajanja poleg vrstice položaja, kar premakne/preskoči video naprej ali nazaj.</string>
|
||||
<string name="faq_5_title">Kakšna je razlika med skrivanjem in izključevanjem mape?</string>
|
||||
<string name="faq_5_text">Izključevanje mape jo skrije le v Simple galeriji, medtem ko jo skrivanje skrije tudi v ostalih aplikacijah oz. galerijah. Deluje tako, da kreira prazno \".nomedia\" datoteko v izbrani mapi, katero lahko odstranite tudi s katerimkoli urejevalnikom datotek.</string>
|
||||
<string name="faq_6_title">Zakaj se v galeriji prikažejo datoteke z naslovnicami glasbenih map ali nalepk?</string>
|
||||
|
@ -204,8 +203,6 @@
|
|||
<string name="faq_8_title">Kaj, če želim prikazati le nekaj izbranih map?</string>
|
||||
<string name="faq_8_text">Dodajanje mape med vključene mape avtomatično ne izključi ničesar. Lahko pa naredite sledeče: v Nastavitvah -> Urejaj izključene mape izključite korensko mapo \"/\", željene mape pa dodajte v Nastavitvah -> Urejaj vključene mape.
|
||||
To bo naredilo vidne le vključene mape, saj sta tako vključevanje kot tudi izključevanje rekurzivna, kar pomeni, da je mapa, ki je istočasno izključena in vključena, vidna.</string>
|
||||
<string name="faq_9_title">Celozaslonske slike imajo čuden izgled, lahko kako popravim kvaliteto?</string>
|
||||
<string name="faq_9_text">Da, v Nastavitvah je opcija \"Nadomesti globoko povečljive slike z bolj kvalitetnimi\", ki jo lahko uporabite. To bo slike izboljšalo, vendar bodo te bolj zamegljene, ko jih boste želeli preveč povečati.</string>
|
||||
<string name="faq_10_title">Ali lahko obrezujem slike s to aplikacijo?</string>
|
||||
<string name="faq_10_text">Da, slike lahko obrezujete z vlečenjem kotov slike. Do urejevalnika lahko pridete z dolgim pritiskom na sličico fotografije in izborom opcije Uredi ali izborom funkcije Uredi iz celozaslonskega načina prikaza.</string>
|
||||
<string name="faq_11_title">Ali lahko združujem sličice medijskih datotek?</string>
|
||||
|
@ -218,7 +215,7 @@
|
|||
<string name="faq_14_text">Lahko uporabite funkcijo \"Začasno prikaži skrite elemente\", ki se nahaja v meniju na glavnem zaslonu ali preklopite \"Prikaži skrite elemente\" v Nastavitvah aplikacije. Če želite element označiti kot viden, z dolgim pritiskom nanj prikličite meni in izberite \"Prikaži\". Skrivanje map deluje tako, da se kreira prazno \".nomedia\" datoteko v izbrani mapi, ki jo lahko odstranite tudi s katerimkoli urejevalnikom datotek.</string>
|
||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
<string name="app_short_description">An offline gallery for managing your files without ads, respecting your privacy.</string>
|
||||
<string name="app_short_description">Galerija brez obvezne internetne povezave za urejanje vaših datotek brez prikazovanja oglasov in z upoštevanjem vaše zasebnosti.</string>
|
||||
<string name="app_long_description">
|
||||
Visoko prilagodljiva galerija, zmožna prikazovanja različnih tipov fotografij in videoposnetkov, vključno s SVGji, RAWi, panoramskimi fotografijami in videoposnetki.
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">Korrigera fotodatum</string>
|
||||
<string name="fixing">Korrigerar…</string>
|
||||
<string name="dates_fixed_successfully">Datumen har korrigerats</string>
|
||||
<string name="share_resized">Share a resized version</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">Filtrera media</string>
|
||||
|
@ -87,7 +88,6 @@
|
|||
<string name="flip">Vänd</string>
|
||||
<string name="flip_horizontally">Vänd horisontellt</string>
|
||||
<string name="flip_vertically">Vänd vertikalt</string>
|
||||
<string name="edit_with">Redigera med</string>
|
||||
<string name="free_aspect_ratio">Fritt</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">Other</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
|
@ -157,7 +157,6 @@
|
|||
<string name="allow_photo_gestures">Tillåt styrning av fotoljusstyrka med vertikala gester</string>
|
||||
<string name="allow_video_gestures">Tillåt styrning av videovolym och videoljusstyrka med vertikala gester</string>
|
||||
<string name="show_media_count">Visa antalet mediefiler i varje mapp i huvudvyn</string>
|
||||
<string name="replace_share_with_rotate">Ersätt Dela med Rotera i helskärmsmenyn</string>
|
||||
<string name="show_extended_details">Visa utökad information över media i helskärmsläge</string>
|
||||
<string name="manage_extended_details">Hantera utökad information</string>
|
||||
<string name="one_finger_zoom">Tillåt zoomning med ett finger när media visas i helskärmsläge</string>
|
||||
|
@ -172,6 +171,7 @@
|
|||
<string name="show_recycle_bin_last">Visa Papperskorgen som det sista objektet i huvudvyn</string>
|
||||
<string name="allow_down_gesture">Allow closing the fullscreen view with a down gesture</string>
|
||||
<string name="allow_one_to_one_zoom">Allow 1:1 zooming in with two double taps</string>
|
||||
<string name="open_videos_on_separate_screen">Always open videos on a separate screen with new horizontal gestures</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Miniatyrer</string>
|
||||
|
@ -194,7 +194,6 @@
|
|||
<string name="faq_3_text">You can long press the desired album and select the Pin icon at the actionmenu, that will pin it to the top. You can pin multiple folders too, pinned items will be sorted by the default sorting method.</string>
|
||||
<string name="faq_4_title">How can I fast-forward videos?</string>
|
||||
<string name="faq_4_text">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar, that will move the video either backward, or forward.</string>
|
||||
<string name="faq_4_text_old">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string>
|
||||
<string name="faq_5_title">What is the difference between hiding and excluding a folder?</string>
|
||||
<string name="faq_5_text">Exclude prevents displaying the folder only in Simple Gallery, while Hide works system-wise and it hides the folder from other galleries too. It works by creating an empty \".nomedia\" file in the given folder, which you can then remove with any file manager too.</string>
|
||||
<string name="faq_6_title">Why do folders with music cover art or stickers show up?</string>
|
||||
|
@ -204,8 +203,6 @@
|
|||
<string name="faq_8_title">What if I want just a few particular folders visible?</string>
|
||||
<string name="faq_8_text">Adding a folder at the Included Folders doesn\'t automatically exclude anything. What you can do is go in Settings -> Manage Excluded Folders, exclude the root folder \"/\", then add the desired folders at Settings -> Manage Included Folders.
|
||||
That will make only the selected folders visible, as both excluding and including are recursive and if a folder is both excluded and included, it will show up.</string>
|
||||
<string name="faq_9_title">Fullscreen images have weird artifacts, can I somehow improve the quality?</string>
|
||||
<string name="faq_9_text">Yea, there is a toggle in Settings saying \"Replace deep zoomable images with better quality ones\", you can use that. It will improve the quality of the images, but they will get blurred once you try zooming in too much.</string>
|
||||
<string name="faq_10_title">Can I crop images with this app?</string>
|
||||
<string name="faq_10_text">Yes, you can crop images in the editor, by dragging the image corners. You can get to the editor either by long pressing an image thumbnail and selecting Edit, or selecting Edit from the fullscreen view.</string>
|
||||
<string name="faq_11_title">Can I somehow group media file thumbnails?</string>
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">Çekilen tarih değerini düzelt</string>
|
||||
<string name="fixing">Düzeltiliyor…</string>
|
||||
<string name="dates_fixed_successfully">Tarihler başarıyla düzeltildi</string>
|
||||
<string name="share_resized">Share a resized version</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">Medyayı filtrele</string>
|
||||
|
@ -87,7 +88,6 @@
|
|||
<string name="flip">Çevir</string>
|
||||
<string name="flip_horizontally">Yatay olarak çevir</string>
|
||||
<string name="flip_vertically">Dikey olarak çevir</string>
|
||||
<string name="edit_with">Şununla düzenle</string>
|
||||
<string name="free_aspect_ratio">Serbest</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">Other</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
|
@ -157,7 +157,6 @@
|
|||
<string name="allow_photo_gestures">Dikey hareketlerle fotoğraf parlaklığının kontrolüne izin ver</string>
|
||||
<string name="allow_video_gestures">Video sesini ve parlaklığını dikey hareketlerle kontrol etmeye izin ver</string>
|
||||
<string name="show_media_count">Ana görünümde klasör medya sayısını göster</string>
|
||||
<string name="replace_share_with_rotate">Tam ekran menüsünde Döndür ile Paylaş\'ın yerini değiştir</string>
|
||||
<string name="show_extended_details">Tam ekran medya üzerinde genişletilmiş ayrıntıları göster</string>
|
||||
<string name="manage_extended_details">Genişletilmiş ayrıntıları yönet</string>
|
||||
<string name="one_finger_zoom">Tam ekran medyalarda tek parmakla yakınlaştırmaya izin ver</string>
|
||||
|
@ -172,6 +171,7 @@
|
|||
<string name="show_recycle_bin_last">Geri dönüşüm kutusu\'nu ana ekranda son öğe olarak göster</string>
|
||||
<string name="allow_down_gesture">Tam ekran görünümünü aşağı hareketi ile kapatmaya izin ver</string>
|
||||
<string name="allow_one_to_one_zoom">Allow 1:1 zooming in with two double taps</string>
|
||||
<string name="open_videos_on_separate_screen">Always open videos on a separate screen with new horizontal gestures</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Küçük resimler</string>
|
||||
|
@ -194,7 +194,6 @@
|
|||
<string name="faq_3_text">İstediğiniz albüme uzunca basabilir ve eylem menüsündeki Sabitle simgesini seçebilirsiniz. Birden çok klasörü de sabitleyebilirsiniz, sabitlenmiş öğeler varsayılan sıralama yöntemine göre sıralanır.</string>
|
||||
<string name="faq_4_title">Videoları nasıl hızlıca ileri sarabilirim?</string>
|
||||
<string name="faq_4_text">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar, that will move the video either backward, or forward.</string>
|
||||
<string name="faq_4_text_old">Videoyu geriye ya da ileriye taşıyacak olan arama çubuğunun yakınındaki geçerli veya maksimum süre metinlerini tıklayabilirsiniz.</string>
|
||||
<string name="faq_5_title">Klasörün gizlenmesi ve hariç tutulması arasındaki fark nedir?</string>
|
||||
<string name="faq_5_text">Hariç tut, klasörü yalnızca Basit Galeri\'de görüntülemeyi engellerken, Gizle sistem genelinde çalışır ve klasörü diğer galerilerden de gizler. Verilen klasörde boş bir \".nomedia\" dosyası oluşturarak çalışır, daha sonra herhangi bir dosya yöneticisi ile kaldırabilirsiniz.</string>
|
||||
<string name="faq_6_title">Neden albüm resimlerini içeren klasörler görünüyor?</string>
|
||||
|
@ -204,8 +203,6 @@
|
|||
<string name="faq_8_title">Sadece birkaç belirli klasörün görünmesini istersem ne olur?</string>
|
||||
<string name="faq_8_text">Dahil Edilen Klasörler\'e bir klasör eklemek otomatik olarak hiçbir şeyi hariç tutmaz. Yapabilecekleriniz Ayarlar -> Hariç Tutulan Klasörleri Yönet, kök klasörü \"/\" hariç tut, ardından Ayarlar -> Dahil Edilen Klasörleri Yönet.
|
||||
Bu, hem hariç tutulan hem de dahil edilen olmak üzere, yalnızca seçilen klasörleri görünür hale getirir ve bir klasör her ikisi de hariç tutulur ve dahil edilirse, görünür.</string>
|
||||
<string name="faq_9_title">Tam ekran görüntülerde garip eserler var, bir şekilde kaliteyi artırabilir miyim?</string>
|
||||
<string name="faq_9_text">Evet, Ayarlar\'da \"Daha iyi kalitede olanlar ile derin yakınlaştırılabilir resimleri değiştir\" diyen bir geçiş var. Bunu kullanabilirsiniz. Görüntülerin kalitesini artırır, ancak çok fazla zum yapmaya çalıştığınızda bulanıklaşır.</string>
|
||||
<string name="faq_10_title">Bu uygulamayla görüntüleri kırpabilir miyim?</string>
|
||||
<string name="faq_10_text">Evet, görüntü köşelerini sürükleyerek resimleri düzenleyicide kırpabilirsiniz. Düzenleyiciye, bir resim küçük resmine uzun basıp Düzenle\'yi seçerek veya tam ekran görünümünden Düzenle\'yi seçerek ulaşabilirsiniz.</string>
|
||||
<string name="faq_11_title">Medya dosyası küçük resimlerini bir şekilde gruplayabilir miyim?</string>
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">Виправити дату зйомки</string>
|
||||
<string name="fixing">Виправлення…</string>
|
||||
<string name="dates_fixed_successfully">Дати успішно виправлені</string>
|
||||
<string name="share_resized">Поділитися зображенням іншого розміру</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">Фільтр мультимедійних файлів</string>
|
||||
|
@ -87,7 +88,6 @@
|
|||
<string name="flip">Віддзеркалити</string>
|
||||
<string name="flip_horizontally">Віддзеркалити горизонтально</string>
|
||||
<string name="flip_vertically">Віддзеркалити вертикально</string>
|
||||
<string name="edit_with">Редагувати за допомогою</string>
|
||||
<string name="free_aspect_ratio">Вільне</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">Інше</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
|
@ -157,7 +157,6 @@
|
|||
<string name="allow_photo_gestures">Дозволити керування яскравістю фотографій вертикальними жестами</string>
|
||||
<string name="allow_video_gestures">Дозволити керування яскравістю та гучністю відео вертикальними жестами</string>
|
||||
<string name="show_media_count">Показувати кількість файлів у теці на головному екрані</string>
|
||||
<string name="replace_share_with_rotate">Замінити \"Поділитися\" на \"Обернути\" в повноекранному меню</string>
|
||||
<string name="show_extended_details">Показувати розширені подробиці при повноекранному перегляді</string>
|
||||
<string name="manage_extended_details">Керування розширеними подробицями</string>
|
||||
<string name="one_finger_zoom">Дозволити масштабування одним пальцем при повноекранному перегляді</string>
|
||||
|
@ -172,6 +171,7 @@
|
|||
<string name="show_recycle_bin_last">Показувати \"Кошик\" останнім елементом на головному екрані</string>
|
||||
<string name="allow_down_gesture">Дозволити закриття повноекранного перегляду свайпом згори вниз</string>
|
||||
<string name="allow_one_to_one_zoom">Дозволити масштабування до 1:1 подвійним тапом</string>
|
||||
<string name="open_videos_on_separate_screen">Завжди відкривати відео на окремому екрані з новими горизонтальними жестами</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Ескізи</string>
|
||||
|
@ -194,7 +194,6 @@
|
|||
<string name="faq_3_text">Ви можете виконати довге натискання на бажаному альбомі і вибрати піктограму \"Закріпити\" у меню дій, що закріпить його вгорі. Ви також можете закріпити декілька тек; закріплені елементи будуть відсортовані за методом сортування за-замовчуванням.</string>
|
||||
<string name="faq_4_title">Як я можу швидко прокручувати відео?</string>
|
||||
<string name="faq_4_text">Ви можете або провести пальцем горизонтально під час відтворення відео, або натиснути на текст поточної або максимальної тривалості відео біля прогрес-бару, що прокрутить відео або назад, або вперед.</string>
|
||||
<string name="faq_4_text_old">Ви можете натиснути на текст поточного таймінгу або на текст загальної тривалості відео на прогрес-барі, що перемістить відео або назад, або вперед.</string>
|
||||
<string name="faq_5_title">В чому полягає різниця між приховуванням та виключенням теки?</string>
|
||||
<string name="faq_5_text">\"Виключити\" запобігає відображенню теки тільки в додатку Simple Gallery, в той час як \"Приховати\" працює на системному рівні і приховує теку і в інших галереях також. Це здійснюється шляхом створення порожнього файлу \".nomedia\" в заданій теці, який може бути видалений пізніше будь-яким файловим менеджером.</string>
|
||||
<string name="faq_6_title">Чому відображаються теки з музичними обкладинками або стікерами?</string>
|
||||
|
@ -204,8 +203,6 @@
|
|||
<string name="faq_8_title">Що робити, якщо я хочу, щоб лише кілька окремих тек були видимими?</string>
|
||||
<string name="faq_8_text">Додавання теки до \"Включених тек\" автоматично не виключає нічого. Що ви можете зробити, то це перейти в \"Налаштування\" -> \"Керування виключеними теками\", виключити кореневу теку \"/\", потім додати бажані теки через \"Налаштування\" -> \"Керування включеними теками\".
|
||||
Це зробить видимими лише обрані теки. Якщо тека є одночасно і виключеною, і включеною, вона відобразиться, оскільки і виключення, і включення є рекурсивним.</string>
|
||||
<string name="faq_9_title">Повноекранні зображення мають дивні артефакти. Чи можна якось покращити якість?</string>
|
||||
<string name="faq_9_text">Так, у \"Налаштуваннях\" є перемикач з текстом \"Замінити глибокомасштабовані зображення іншими кращої якості\", скористайтеся ним. Він покращить якість зображень, але вони будуть розмиватися, якщо ви занадто їх збільшуватимете.</string>
|
||||
<string name="faq_10_title">Чи можу я обрізати зображення у цьому додатку?</string>
|
||||
<string name="faq_10_text">Так, обрізати зображення можна у редакторі шляхом перетягування кутів зображення. Відкрити редактор можна або довгим натисканням на ескіз зображення і наступним вибором \"Редагувати\", або вибором \"Редагувати\" при повноекранному перегляді.</string>
|
||||
<string name="faq_11_title">Чи можу я якимось чином згрупувати ескізи медіафайлів?</string>
|
||||
|
|
|
@ -5,10 +5,10 @@
|
|||
<string name="edit">编辑</string>
|
||||
<string name="open_camera">打开相机</string>
|
||||
<string name="hidden">(隐藏)</string>
|
||||
<string name="excluded">(排除)</string>
|
||||
<string name="excluded">(排除)</string>
|
||||
<string name="pin_folder">锁定目录</string>
|
||||
<string name="unpin_folder">解除锁定目录</string>
|
||||
<string name="pin_to_the_top">锁定到顶部</string>
|
||||
<string name="pin_to_the_top">固定到顶部</string>
|
||||
<string name="show_all">文件视图</string>
|
||||
<string name="all_folders">所有目录</string>
|
||||
<string name="folder_view">目录视图</string>
|
||||
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">修复拍摄日期</string>
|
||||
<string name="fixing">正在修复…</string>
|
||||
<string name="dates_fixed_successfully">日期修复成功</string>
|
||||
<string name="share_resized">调整图像尺寸并分享</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">要显示的媒体文件</string>
|
||||
|
@ -75,19 +76,18 @@
|
|||
<string name="save">保存</string>
|
||||
<string name="rotate">旋转</string>
|
||||
<string name="path">路径</string>
|
||||
<string name="invalid_image_path">无效图片路径</string>
|
||||
<string name="invalid_image_path">无效的图片路径</string>
|
||||
<string name="image_editing_failed">图片编辑失败</string>
|
||||
<string name="edit_image_with">编辑方式:</string>
|
||||
<string name="no_editor_found">未找到可用图片编辑器</string>
|
||||
<string name="unknown_file_location">未知的文件路径</string>
|
||||
<string name="error_saving_file">不能覆盖源文件</string>
|
||||
<string name="error_saving_file">无法覆盖源文件</string>
|
||||
<string name="rotate_left">向左旋转</string>
|
||||
<string name="rotate_right">向右旋转</string>
|
||||
<string name="rotate_one_eighty">旋转 180º</string>
|
||||
<string name="flip">翻转</string>
|
||||
<string name="flip_horizontally">水平翻转</string>
|
||||
<string name="flip_vertically">垂直翻转</string>
|
||||
<string name="edit_with">编辑方式</string>
|
||||
<string name="free_aspect_ratio">自由</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">其他</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
|
@ -116,7 +116,7 @@
|
|||
<string name="loop_slideshow">循环幻灯片</string>
|
||||
<string name="slideshow_ended">幻灯片结束</string>
|
||||
<string name="no_media_for_slideshow">未发现可用媒体</string>
|
||||
<string name="use_crossfade_animation">使用交叉渐变动画</string>
|
||||
<string name="use_crossfade_animation">使用淡入淡出动画</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">更改视图类型</string>
|
||||
|
@ -157,7 +157,6 @@
|
|||
<string name="allow_photo_gestures">使用纵向滑动手势控制照片亮度</string>
|
||||
<string name="allow_video_gestures">使用纵向滑动手势控制视频音量和亮度</string>
|
||||
<string name="show_media_count">在主界面显示文件夹媒体计数</string>
|
||||
<string name="replace_share_with_rotate">替换全屏时菜单栏的“分享”为“旋转”</string>
|
||||
<string name="show_extended_details">全屏浏览媒体时显示详细信息</string>
|
||||
<string name="manage_extended_details">要显示的详细信息项目</string>
|
||||
<string name="one_finger_zoom">单指缩放</string>
|
||||
|
@ -172,6 +171,7 @@
|
|||
<string name="show_recycle_bin_last">在主屏幕界面的最后一项显示回收站</string>
|
||||
<string name="allow_down_gesture">使用下滑手势关闭全屏视图</string>
|
||||
<string name="allow_one_to_one_zoom">双击两次后 1:1 放大图像</string>
|
||||
<string name="open_videos_on_separate_screen">使用新的水平手势在独立页面播放视频</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">缩略图</string>
|
||||
|
@ -193,7 +193,6 @@
|
|||
<string name="faq_3_text">你可以长按该相册并在操作栏中点击图钉图标,这样 就可以将其固定在顶部了。你也可以固定多个文件夹,固定项目将按照默认排序方法排序。</string>
|
||||
<string name="faq_4_title">如何快进/快退视频?</string>
|
||||
<string name="faq_4_text">只需在视频播放器上左右滑动,或点击底栏进度条两侧的时间文本,即可前进或后退视频。</string>
|
||||
<string name="faq_4_text_old">可以点击底栏进度条两侧的时间文本,或拖动进度条。</string>
|
||||
<string name="faq_5_title">文件夹的隐藏和排除有什么区别?</string>
|
||||
<string name="faq_5_text">排除功能只是防止其在简约图库中显示,而隐藏功能则使用的是系统的方法,这样做也会在其他图库中隐藏。它的工作原理是在给定的文件夹中创建一个空的.nomedia文件,你可以使用任何文件管理器删除它。</string>
|
||||
<string name="faq_6_title">为什么会出现音乐艺术家封面或贴纸文件夹?</string>
|
||||
|
@ -202,8 +201,6 @@
|
|||
<string name="faq_7_text">原因可能有很多,但解决方法很简单。只需进入设置 -> 管理包含目录,点击+号并选择到所需的文件夹。</string>
|
||||
<string name="faq_8_title">如果我只想显示几个特定的文件夹,该如何操作?</string>
|
||||
<string name="faq_8_text">在包含目录中添加文件夹不会自动排除其他的内容。你可以做的:进入设置 -> 管理排除目录,排除根目录\"/\",然后在设置 -> 管理包含目录中添加所需的文件夹。这样就只显示选定的文件夹了,由于排除和包含都是递归的,所以排除并包含的文件夹是会显示的。</string>
|
||||
<string name="faq_9_title">全屏图像有些奇怪的东西,该如何提高画面质量?</string>
|
||||
<string name="faq_9_text">在设置中有一个“用质量更好的图像替换可深度缩放的图像”开关,打开它后就可以提高图像的显示质量,但是一旦尝试放大太多次,它们就又会变得模糊不清。</string>
|
||||
<string name="faq_10_title">可以裁剪图片吗?</string>
|
||||
<string name="faq_10_text">当然,通过长按图片缩略图并选择编辑,或在全屏视图中选择编辑来打开编辑器。你可以通过拖动图片边角来剪裁图像。</string>
|
||||
<string name="faq_11_title">我能将媒体文件缩略图分组吗?</string>
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">修復拍照日期數值</string>
|
||||
<string name="fixing">修復中…</string>
|
||||
<string name="dates_fixed_successfully">日期修復成功</string>
|
||||
<string name="share_resized">Share a resized version</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">篩選媒體檔案</string>
|
||||
|
@ -87,7 +88,6 @@
|
|||
<string name="flip">翻轉</string>
|
||||
<string name="flip_horizontally">水平翻轉</string>
|
||||
<string name="flip_vertically">垂直翻轉</string>
|
||||
<string name="edit_with">用其他程式編輯</string>
|
||||
<string name="free_aspect_ratio">自由</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">其它</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
|
@ -116,7 +116,7 @@
|
|||
<string name="loop_slideshow">投影片循環</string>
|
||||
<string name="slideshow_ended">投影片結束</string>
|
||||
<string name="no_media_for_slideshow">找不到投影片的媒體檔案</string>
|
||||
<string name="use_crossfade_animation">Use crossfade animations</string>
|
||||
<string name="use_crossfade_animation">使用淡入淡出動畫</string>
|
||||
|
||||
<!-- View types -->
|
||||
<string name="change_view_type">改變瀏覽類型</string>
|
||||
|
@ -139,7 +139,7 @@
|
|||
|
||||
<!-- Settings -->
|
||||
<string name="autoplay_videos">自動播放影片</string>
|
||||
<string name="remember_last_video_position">記住影片上次撥放位置</string>
|
||||
<string name="remember_last_video_position">記住影片上次播放位置</string>
|
||||
<string name="toggle_filename">顯示檔案名稱</string>
|
||||
<string name="loop_videos">影片循環播放</string>
|
||||
<string name="animate_gifs">縮圖顯示GIF動畫</string>
|
||||
|
@ -157,7 +157,6 @@
|
|||
<string name="allow_photo_gestures">允許用上下手勢來控制相片的亮度</string>
|
||||
<string name="allow_video_gestures">允許用上下手勢來控制影片的音量和亮度</string>
|
||||
<string name="show_media_count">主畫面顯示資料夾內的媒體檔案數量</string>
|
||||
<string name="replace_share_with_rotate">將全螢幕選單的分享取代為旋轉</string>
|
||||
<string name="show_extended_details">全螢幕時顯示詳細資訊</string>
|
||||
<string name="manage_extended_details">管理詳細資訊</string>
|
||||
<string name="one_finger_zoom">全螢幕時允許單指縮放</string>
|
||||
|
@ -172,6 +171,7 @@
|
|||
<string name="show_recycle_bin_last">回收桶顯示在主畫面最後一項</string>
|
||||
<string name="allow_down_gesture">允許用下滑手勢來關閉全螢幕檢視</string>
|
||||
<string name="allow_one_to_one_zoom">允許用兩次雙擊來1:1縮放</string>
|
||||
<string name="open_videos_on_separate_screen">總是用新的水平手勢在獨立畫面開啟影片</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">縮圖</string>
|
||||
|
@ -193,8 +193,7 @@
|
|||
<string name="faq_3_title">我如何讓某個相冊總是出現在頂端?</string>
|
||||
<string name="faq_3_text">你可以長按想要的相冊,然後在操作選單中選擇[圖釘]圖示,就會釘選於頂端。你也能釘選多個資料夾,釘選的項目會依預設的排序方法來排序。</string>
|
||||
<string name="faq_4_title">我如何快轉影片?</string>
|
||||
<string name="faq_4_text">你可以在影片撥放器上水平滑動你的手指,或者點擊進度條附近的當前或總時長文字。這會使影片快轉或倒轉。</string>
|
||||
<string name="faq_4_text_old">你可以點擊進度條附近的當前或總時長文字,影片就會快轉或倒轉。</string>
|
||||
<string name="faq_4_text">你可以在影片播放器上水平滑動你的手指,或者點擊進度條附近的當前或總時長文字。這會使影片快轉或倒轉。</string>
|
||||
<string name="faq_5_title">隱藏和排除資料夾,兩者有什麼不同?</string>
|
||||
<string name="faq_5_text">[排除]只在簡易相簿中避免顯示出來;而[隱藏]則作用於整個系統,資料夾也會被其他相簿隱藏。這是藉由在指定資料夾內建立一個\".nomedia\"空白檔案來進行隱藏,你之後也能用任何檔案管理器移除。</string>
|
||||
<string name="faq_6_title">為什麼有些音樂專輯封面或貼圖的資料夾會出現?</string>
|
||||
|
@ -204,8 +203,6 @@
|
|||
<string name="faq_8_title">如果我只想看到幾個特定的資料夾,怎麼做?</string>
|
||||
<string name="faq_8_text">在[包含資料夾]內添加資料夾並不會自動排除任何東西。你能做的是到[設定] -> [管理排除資料夾],排除根目錄 \"/\",然後在[設定] -> [管理包含資料夾]添加想要的資料夾。
|
||||
那樣的話就只有選擇的資料夾可見。因為排除和包含都是遞迴的,如果一個資料夾被排除又被包含,則會顯示出來。</string>
|
||||
<string name="faq_9_title">全螢幕圖片有雜訊,我有辦法提高品質嗎?</string>
|
||||
<string name="faq_9_text">可啊,[設定]內有個開關叫做「可深度縮放的圖片用品質更佳的來取代」,你能用用看。這會提高圖片的品質,不過一旦你放大太多就會模糊掉。</string>
|
||||
<string name="faq_10_title">我可以用這程式裁減圖片嗎?</string>
|
||||
<string name="faq_10_text">是的,你能夠在編輯器內拉動圖片角落來裁剪圖片。要進入編輯器,你可以長按圖片縮圖然後選擇[編輯],或是在全螢幕檢視下選擇[編輯]。</string>
|
||||
<string name="faq_11_title">我可以歸類媒體檔案的縮圖嗎?</string>
|
||||
|
|
|
@ -12,9 +12,14 @@
|
|||
<dimen name="instant_change_bar_width">50dp</dimen>
|
||||
<dimen name="list_view_folder_thumbnail_size">72dp</dimen>
|
||||
<dimen name="bottom_actions_height">64dp</dimen>
|
||||
<dimen name="bottom_actions_height_double">128dp</dimen>
|
||||
<dimen name="bottom_actions_height_bigger">164dp</dimen>
|
||||
<dimen name="bottom_editor_color_picker_size">48dp</dimen>
|
||||
<dimen name="bottom_filters_thumbnail_size">76dp</dimen>
|
||||
<dimen name="bottom_filters_height">90dp</dimen>
|
||||
<dimen name="bottom_filters_height_with_margin">98dp</dimen>
|
||||
<dimen name="bottom_editor_actions_shadow_height">180dp</dimen>
|
||||
<dimen name="default_status_action_height">86dp</dimen>
|
||||
<dimen name="widget_initial_size">110dp</dimen>
|
||||
<dimen name="full_brush_size">40dp</dimen>
|
||||
</resources>
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
<resources>
|
||||
|
||||
<!-- Release notes -->
|
||||
<string name="release_220">Reverted to the old way of opening videos, opening on separate screen can be enabled in the app settings</string>
|
||||
<string name="release_217">
|
||||
Rewrote video playback, use a separate screen + added fast-forwarding with horizontal swiping\n
|
||||
Added optional 1:1 pixel ratio zooming with two double taps at fullscreen view\n
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="fix_date_taken">Fix Date Taken value</string>
|
||||
<string name="fixing">Fixing…</string>
|
||||
<string name="dates_fixed_successfully">Dates fixed successfully</string>
|
||||
<string name="share_resized">Share a resized version</string>
|
||||
|
||||
<!-- Filter -->
|
||||
<string name="filter_media">Filter media</string>
|
||||
|
@ -87,7 +88,6 @@
|
|||
<string name="flip">Flip</string>
|
||||
<string name="flip_horizontally">Flip horizontally</string>
|
||||
<string name="flip_vertically">Flip vertically</string>
|
||||
<string name="edit_with">Edit with</string>
|
||||
<string name="free_aspect_ratio">Free</string> <!-- available as an option: 1:1, 4:3, 16:9, free -->
|
||||
<string name="other_aspect_ratio">Other</string> <!-- available as an option: 1:1, 4:3, 16:9, free, other -->
|
||||
|
||||
|
@ -157,7 +157,6 @@
|
|||
<string name="allow_photo_gestures">Allow controlling photo brightness with vertical gestures</string>
|
||||
<string name="allow_video_gestures">Allow controlling video volume and brightness with vertical gestures</string>
|
||||
<string name="show_media_count">Show folder media count on the main view</string>
|
||||
<string name="replace_share_with_rotate">Replace Share with Rotate at fullscreen menu</string>
|
||||
<string name="show_extended_details">Show extended details over fullscreen media</string>
|
||||
<string name="manage_extended_details">Manage extended details</string>
|
||||
<string name="one_finger_zoom">Allow one finger zoom at fullscreen media</string>
|
||||
|
@ -172,6 +171,7 @@
|
|||
<string name="show_recycle_bin_last">Show the Recycle Bin as the last item on the main screen</string>
|
||||
<string name="allow_down_gesture">Allow closing the fullscreen view with a down gesture</string>
|
||||
<string name="allow_one_to_one_zoom">Allow 1:1 zooming in with two double taps</string>
|
||||
<string name="open_videos_on_separate_screen">Always open videos on a separate screen with new horizontal gestures</string>
|
||||
|
||||
<!-- Setting sections -->
|
||||
<string name="thumbnails">Thumbnails</string>
|
||||
|
@ -194,7 +194,6 @@
|
|||
<string name="faq_3_text">You can long press the desired album and select the Pin icon at the actionmenu, that will pin it to the top. You can pin multiple folders too, pinned items will be sorted by the default sorting method.</string>
|
||||
<string name="faq_4_title">How can I fast-forward videos?</string>
|
||||
<string name="faq_4_text">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string>
|
||||
<string name="faq_4_text_old">You can either drag your finger horizontally over the video player, or click on the current or max duration texts near the seekbar. That will move the video either backward, or forward.</string>
|
||||
<string name="faq_5_title">What is the difference between hiding and excluding a folder?</string>
|
||||
<string name="faq_5_text">Exclude prevents displaying the folder only in Simple Gallery, while Hide works system-wise and it hides the folder from other galleries too. It works by creating an empty \".nomedia\" file in the given folder, which you can then remove with any file manager too.</string>
|
||||
<string name="faq_6_title">Why do folders with music cover art or stickers show up?</string>
|
||||
|
@ -204,8 +203,6 @@
|
|||
<string name="faq_8_title">What if I want just a few particular folders visible?</string>
|
||||
<string name="faq_8_text">Adding a folder at the Included Folders doesn\'t automatically exclude anything. What you can do is go in Settings -> Manage Excluded Folders, exclude the root folder \"/\", then add the desired folders at Settings -> Manage Included Folders.
|
||||
That will make only the selected folders visible, as both excluding and including are recursive and if a folder is both excluded and included, it will show up.</string>
|
||||
<string name="faq_9_title">Fullscreen images have weird artifacts, can I somehow improve the quality?</string>
|
||||
<string name="faq_9_text">Yea, there is a toggle in Settings saying \"Replace deep zoomable images with better quality ones\", you can use that. It will improve the quality of the images, but they will get blurred once you try zooming in too much.</string>
|
||||
<string name="faq_10_title">Can I crop images with this app?</string>
|
||||
<string name="faq_10_text">Yes, you can crop images in the editor, by dragging the image corners. You can get to the editor either by long pressing an image thumbnail and selecting Edit, or selecting Edit from the fullscreen view.</string>
|
||||
<string name="faq_11_title">Can I somehow group media file thumbnails?</string>
|
||||
|
|
|
@ -9,7 +9,7 @@ buildscript {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:3.2.1'
|
||||
classpath 'com.android.tools.build:gradle:3.3.0'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
|
|
4
gradle/wrapper/gradle-wrapper.properties
vendored
4
gradle/wrapper/gradle-wrapper.properties
vendored
|
@ -1,6 +1,6 @@
|
|||
#Wed Sep 26 14:42:41 CEST 2018
|
||||
#Wed Jan 16 16:59:58 CET 2019
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
|
||||
|
|
Loading…
Reference in a new issue