67
CHANGELOG.md
|
@ -1,6 +1,73 @@
|
||||||
Changelog
|
Changelog
|
||||||
==========
|
==========
|
||||||
|
|
||||||
|
Version 2.13.0 *(2017-08-07)*
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
* Allow changing the screen brightness and volume at videos by vertically dragging the screen sides
|
||||||
|
* Fixed sorting of numbers in filenames
|
||||||
|
* Fixed a glitch with hidden files sometimes temporarily visible
|
||||||
|
* Unified thumbnail corner icon sizes and style
|
||||||
|
|
||||||
|
Version 2.12.6 *(2017-08-05)*
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
* Added slideshow at the fullscreen view
|
||||||
|
* Replaced the foreground color of selected items with a check
|
||||||
|
* Made copy/move to SD card a lot faster
|
||||||
|
|
||||||
|
Version 2.12.5 *(2017-08-03)*
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
* Updating file operation on SD card
|
||||||
|
|
||||||
|
Version 2.12.4 *(2017-08-03)*
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
* Fixed SD card file operations
|
||||||
|
|
||||||
|
Version 2.12.3 *(2017-08-02)*
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
* Added pattern/pin protection for showing hidden items
|
||||||
|
* Hopefully fixed unintentional SD card file deleting
|
||||||
|
|
||||||
|
Version 2.12.2 *(2017-07-09)*
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
* Added a toggle for replacing Share with Rotate at fullscreen media
|
||||||
|
* Some crashfixes and translation updates
|
||||||
|
|
||||||
|
Version 2.12.1 *(2017-07-02)*
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
* Couple crashfixes
|
||||||
|
|
||||||
|
Version 2.12.0 *(2017-07-01)*
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
* Added a button for disabling "Temporarily show hidden"
|
||||||
|
* Updated Glide (library used for loading images) to 4.0.0
|
||||||
|
* Made playing gifs smooth
|
||||||
|
|
||||||
|
Version 2.11.5 *(2017-06-29)*
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
* Added an indicator of folders located on SD cards
|
||||||
|
* Improved the way of rotating jpg images on the internal storage by modifying the exif tags + added autosave
|
||||||
|
|
||||||
|
Version 2.11.4 *(2017-06-26)*
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
* Added an option for automatically hiding the system UI at entering fullscreen mode
|
||||||
|
* Fix deleting SD card files on some devices
|
||||||
|
* Couple crashfixes
|
||||||
|
|
||||||
|
Version 2.11.3 *(2017-06-24)*
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
* Added optional horizontal scrolling
|
||||||
|
|
||||||
Version 2.11.1 *(2017-06-19)*
|
Version 2.11.1 *(2017-06-19)*
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
|
|
|
@ -10,8 +10,8 @@ android {
|
||||||
applicationId "com.simplemobiletools.gallery"
|
applicationId "com.simplemobiletools.gallery"
|
||||||
minSdkVersion 16
|
minSdkVersion 16
|
||||||
targetSdkVersion 23
|
targetSdkVersion 23
|
||||||
versionCode 111
|
versionCode 124
|
||||||
versionName "2.11.1"
|
versionName "2.13.1"
|
||||||
}
|
}
|
||||||
|
|
||||||
signingConfigs {
|
signingConfigs {
|
||||||
|
@ -29,25 +29,30 @@ android {
|
||||||
sourceSets {
|
sourceSets {
|
||||||
main.java.srcDirs += 'src/main/kotlin'
|
main.java.srcDirs += 'src/main/kotlin'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lintOptions {
|
||||||
|
checkReleaseBuilds false
|
||||||
|
abortOnError false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compile 'com.simplemobiletools:commons:2.21.4'
|
compile 'com.simplemobiletools:commons:2.25.4'
|
||||||
compile 'com.davemorrissey.labs:subsampling-scale-image-view:3.6.0'
|
compile 'com.davemorrissey.labs:subsampling-scale-image-view:3.6.0'
|
||||||
compile 'com.theartofdev.edmodo:android-image-cropper:2.4.0'
|
compile 'com.theartofdev.edmodo:android-image-cropper:2.4.0'
|
||||||
compile 'com.bignerdranch.android:recyclerview-multiselect:0.2'
|
compile 'com.bignerdranch.android:recyclerview-multiselect:0.2'
|
||||||
compile 'com.google.code.gson:gson:2.8.0'
|
compile 'com.google.code.gson:gson:2.8.0'
|
||||||
compile 'com.github.chrisbanes:PhotoView:1.3.1'
|
compile 'com.github.chrisbanes:PhotoView:2.1.2'
|
||||||
compile 'it.sephiroth.android.exif:library:1.0.1'
|
compile 'it.sephiroth.android.exif:library:1.0.1'
|
||||||
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
||||||
|
|
||||||
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5'
|
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.1'
|
||||||
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
|
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1'
|
||||||
testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
|
testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1'
|
||||||
}
|
}
|
||||||
|
|
||||||
buildscript {
|
buildscript {
|
||||||
ext.kotlin_version = '1.1.2-5'
|
ext.kotlin_version = '1.1.4-2'
|
||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
}
|
}
|
||||||
|
|
2
app/proguard-rules.pro
vendored
|
@ -2,4 +2,4 @@
|
||||||
-dontwarn com.simplemobiletools.**
|
-dontwarn com.simplemobiletools.**
|
||||||
|
|
||||||
-renamesourcefileattribute SourceFile
|
-renamesourcefileattribute SourceFile
|
||||||
-keepattributes SourceFile, LineNumberTable
|
-keepattributes SourceFile,LineNumberTable
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher"
|
||||||
android:label="@string/app_launcher_name"
|
android:label="@string/app_launcher_name"
|
||||||
|
android:roundIcon="@mipmap/ic_launcher_round"
|
||||||
android:supportsRtl="true"
|
android:supportsRtl="true"
|
||||||
android:theme="@style/AppTheme">
|
android:theme="@style/AppTheme">
|
||||||
|
|
||||||
|
|
|
@ -4,11 +4,14 @@ import android.app.Application
|
||||||
import com.squareup.leakcanary.LeakCanary
|
import com.squareup.leakcanary.LeakCanary
|
||||||
|
|
||||||
class App : Application() {
|
class App : Application() {
|
||||||
|
val USE_LEAK_CANARY = false
|
||||||
override fun onCreate() {
|
override fun onCreate() {
|
||||||
super.onCreate()
|
super.onCreate()
|
||||||
|
if (USE_LEAK_CANARY) {
|
||||||
if (LeakCanary.isInAnalyzerProcess(this)) {
|
if (LeakCanary.isInAnalyzerProcess(this)) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
LeakCanary.install(this)
|
LeakCanary.install(this)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,7 @@ import android.widget.FrameLayout
|
||||||
import com.google.gson.Gson
|
import com.google.gson.Gson
|
||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
import com.simplemobiletools.commons.models.Release
|
import com.simplemobiletools.commons.models.Release
|
||||||
|
import com.simplemobiletools.commons.views.MyScalableRecyclerView
|
||||||
import com.simplemobiletools.gallery.BuildConfig
|
import com.simplemobiletools.gallery.BuildConfig
|
||||||
import com.simplemobiletools.gallery.R
|
import com.simplemobiletools.gallery.R
|
||||||
import com.simplemobiletools.gallery.adapters.DirectoryAdapter
|
import com.simplemobiletools.gallery.adapters.DirectoryAdapter
|
||||||
|
@ -27,7 +28,6 @@ import com.simplemobiletools.gallery.dialogs.ChangeSortingDialog
|
||||||
import com.simplemobiletools.gallery.extensions.*
|
import com.simplemobiletools.gallery.extensions.*
|
||||||
import com.simplemobiletools.gallery.helpers.*
|
import com.simplemobiletools.gallery.helpers.*
|
||||||
import com.simplemobiletools.gallery.models.Directory
|
import com.simplemobiletools.gallery.models.Directory
|
||||||
import com.simplemobiletools.gallery.views.MyScalableRecyclerView
|
|
||||||
import kotlinx.android.synthetic.main.activity_main.*
|
import kotlinx.android.synthetic.main.activity_main.*
|
||||||
import java.io.*
|
import java.io.*
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
@ -87,7 +87,8 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
|
||||||
menu.findItem(R.id.increase_column_count).isVisible = config.dirColumnCnt < 10
|
menu.findItem(R.id.increase_column_count).isVisible = config.dirColumnCnt < 10
|
||||||
menu.findItem(R.id.reduce_column_count).isVisible = config.dirColumnCnt > 1
|
menu.findItem(R.id.reduce_column_count).isVisible = config.dirColumnCnt > 1
|
||||||
}
|
}
|
||||||
menu.findItem(R.id.temporarily_show_hidden).isVisible = !config.showHiddenMedia
|
menu.findItem(R.id.temporarily_show_hidden).isVisible = !config.shouldShowHidden
|
||||||
|
menu.findItem(R.id.stop_showing_hidden).isVisible = config.temporarilyShowHidden
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,7 +97,8 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
|
||||||
R.id.sort -> showSortingDialog()
|
R.id.sort -> showSortingDialog()
|
||||||
R.id.open_camera -> launchCamera()
|
R.id.open_camera -> launchCamera()
|
||||||
R.id.show_all -> showAllMedia()
|
R.id.show_all -> showAllMedia()
|
||||||
R.id.temporarily_show_hidden -> temporarilyShowHidden()
|
R.id.temporarily_show_hidden -> tryToggleTemporarilyShowHidden()
|
||||||
|
R.id.stop_showing_hidden -> tryToggleTemporarilyShowHidden()
|
||||||
R.id.increase_column_count -> increaseColumnCount()
|
R.id.increase_column_count -> increaseColumnCount()
|
||||||
R.id.reduce_column_count -> reduceColumnCount()
|
R.id.reduce_column_count -> reduceColumnCount()
|
||||||
R.id.settings -> launchSettings()
|
R.id.settings -> launchSettings()
|
||||||
|
@ -109,16 +111,19 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
if (mStoredAnimateGifs != config.animateGifs) {
|
if (mStoredAnimateGifs != config.animateGifs) {
|
||||||
directories_grid.adapter.notifyDataSetChanged()
|
directories_grid.adapter?.notifyDataSetChanged()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mStoredCropThumbnails != config.cropThumbnails) {
|
if (mStoredCropThumbnails != config.cropThumbnails) {
|
||||||
directories_grid.adapter.notifyDataSetChanged()
|
directories_grid.adapter?.notifyDataSetChanged()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mStoredScrollHorizontally != config.scrollHorizontally) {
|
if (mStoredScrollHorizontally != config.scrollHorizontally) {
|
||||||
(directories_grid.adapter as DirectoryAdapter).scrollVertically = !config.scrollHorizontally
|
directories_grid.adapter?.let {
|
||||||
directories_grid.adapter.notifyDataSetChanged()
|
(it as DirectoryAdapter).scrollVertically = !config.scrollHorizontally
|
||||||
|
it.notifyDataSetChanged()
|
||||||
|
}
|
||||||
|
setupScrollDirection()
|
||||||
}
|
}
|
||||||
|
|
||||||
tryloadGallery()
|
tryloadGallery()
|
||||||
|
@ -134,7 +139,7 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
|
||||||
mStoredAnimateGifs = config.animateGifs
|
mStoredAnimateGifs = config.animateGifs
|
||||||
mStoredCropThumbnails = config.cropThumbnails
|
mStoredCropThumbnails = config.cropThumbnails
|
||||||
mStoredScrollHorizontally = config.scrollHorizontally
|
mStoredScrollHorizontally = config.scrollHorizontally
|
||||||
MyScalableRecyclerView.mListener = null
|
directories_grid.listener = null
|
||||||
mLastMediaHandler.removeCallbacksAndMessages(null)
|
mLastMediaHandler.removeCallbacksAndMessages(null)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -205,15 +210,27 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
|
||||||
finish()
|
finish()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun temporarilyShowHidden() {
|
private fun tryToggleTemporarilyShowHidden() {
|
||||||
config.temporarilyShowHidden = true
|
if (config.temporarilyShowHidden) {
|
||||||
|
toggleTemporarilyShowHidden(false)
|
||||||
|
} else {
|
||||||
|
handleHiddenFolderPasswordProtection {
|
||||||
|
toggleTemporarilyShowHidden(true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun toggleTemporarilyShowHidden(show: Boolean) {
|
||||||
|
config.temporarilyShowHidden = show
|
||||||
getDirectories()
|
getDirectories()
|
||||||
|
invalidateOptionsMenu()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun checkIfColorChanged() {
|
private fun checkIfColorChanged() {
|
||||||
if (directories_grid.adapter != null && getRecyclerAdapter().foregroundColor != config.primaryColor) {
|
if (directories_grid.adapter != null && getRecyclerAdapter().primaryColor != config.primaryColor) {
|
||||||
getRecyclerAdapter().updatePrimaryColor(config.primaryColor)
|
getRecyclerAdapter().primaryColor = config.primaryColor
|
||||||
directories_fastscroller.updateHandleColor()
|
directories_vertical_fastscroller.updateHandleColor()
|
||||||
|
directories_horizontal_fastscroller.updateHandleColor()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -239,8 +256,10 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
|
||||||
directories_refresh_layout.layoutParams = FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
|
directories_refresh_layout.layoutParams = FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
directories_grid.isDragSelectionEnabled = true
|
||||||
|
directories_grid.isZoomingEnabled = true
|
||||||
layoutManager.spanCount = config.dirColumnCnt
|
layoutManager.spanCount = config.dirColumnCnt
|
||||||
MyScalableRecyclerView.mListener = object : MyScalableRecyclerView.MyScalableRecyclerViewListener {
|
directories_grid.listener = object : MyScalableRecyclerView.MyScalableRecyclerViewListener {
|
||||||
override fun zoomIn() {
|
override fun zoomIn() {
|
||||||
if (layoutManager.spanCount > 1) {
|
if (layoutManager.spanCount > 1) {
|
||||||
reduceColumnCount()
|
reduceColumnCount()
|
||||||
|
@ -268,13 +287,13 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
|
||||||
private fun increaseColumnCount() {
|
private fun increaseColumnCount() {
|
||||||
config.dirColumnCnt = ++(directories_grid.layoutManager as GridLayoutManager).spanCount
|
config.dirColumnCnt = ++(directories_grid.layoutManager as GridLayoutManager).spanCount
|
||||||
invalidateOptionsMenu()
|
invalidateOptionsMenu()
|
||||||
directories_grid.adapter.notifyDataSetChanged()
|
directories_grid.adapter?.notifyDataSetChanged()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun reduceColumnCount() {
|
private fun reduceColumnCount() {
|
||||||
config.dirColumnCnt = --(directories_grid.layoutManager as GridLayoutManager).spanCount
|
config.dirColumnCnt = --(directories_grid.layoutManager as GridLayoutManager).spanCount
|
||||||
invalidateOptionsMenu()
|
invalidateOptionsMenu()
|
||||||
directories_grid.adapter.notifyDataSetChanged()
|
directories_grid.adapter?.notifyDataSetChanged()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun isPickImageIntent(intent: Intent) = isPickIntent(intent) && (hasImageContentData(intent) || isImageType(intent))
|
private fun isPickImageIntent(intent: Intent) = isPickIntent(intent) && (hasImageContentData(intent) || isImageType(intent))
|
||||||
|
@ -373,7 +392,9 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
|
||||||
|
|
||||||
mDirs = dirs
|
mDirs = dirs
|
||||||
|
|
||||||
|
runOnUiThread {
|
||||||
setupAdapter()
|
setupAdapter()
|
||||||
|
}
|
||||||
storeDirectories()
|
storeDirectories()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -385,17 +406,29 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupAdapter() {
|
private fun setupAdapter() {
|
||||||
val adapter = DirectoryAdapter(this, mDirs, this) {
|
val currAdapter = directories_grid.adapter
|
||||||
|
if (currAdapter == null) {
|
||||||
|
directories_grid.adapter = DirectoryAdapter(this, mDirs, this, isPickIntent(intent) || isGetAnyContentIntent(intent)) {
|
||||||
itemClicked(it.path)
|
itemClicked(it.path)
|
||||||
}
|
}
|
||||||
|
|
||||||
val currAdapter = directories_grid.adapter
|
|
||||||
if (currAdapter != null) {
|
|
||||||
(currAdapter as DirectoryAdapter).updateDirs(mDirs)
|
|
||||||
} else {
|
} else {
|
||||||
directories_grid.adapter = adapter
|
(currAdapter as DirectoryAdapter).updateDirs(mDirs)
|
||||||
|
}
|
||||||
|
setupScrollDirection()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setupScrollDirection() {
|
||||||
|
directories_vertical_fastscroller.isHorizontal = false
|
||||||
|
directories_vertical_fastscroller.beGoneIf(config.scrollHorizontally)
|
||||||
|
|
||||||
|
directories_horizontal_fastscroller.isHorizontal = true
|
||||||
|
directories_horizontal_fastscroller.beVisibleIf(config.scrollHorizontally)
|
||||||
|
|
||||||
|
if (config.scrollHorizontally) {
|
||||||
|
directories_horizontal_fastscroller.setViews(directories_grid, directories_refresh_layout)
|
||||||
|
} else {
|
||||||
|
directories_vertical_fastscroller.setViews(directories_grid, directories_refresh_layout)
|
||||||
}
|
}
|
||||||
directories_fastscroller.setViews(directories_grid, directories_refresh_layout)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun checkLastMediaChanged() {
|
private fun checkLastMediaChanged() {
|
||||||
|
@ -454,6 +487,13 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
|
||||||
add(Release(97, R.string.release_97))
|
add(Release(97, R.string.release_97))
|
||||||
add(Release(98, R.string.release_98))
|
add(Release(98, R.string.release_98))
|
||||||
add(Release(108, R.string.release_108))
|
add(Release(108, R.string.release_108))
|
||||||
|
add(Release(112, R.string.release_112))
|
||||||
|
add(Release(114, R.string.release_114))
|
||||||
|
add(Release(115, R.string.release_115))
|
||||||
|
add(Release(118, R.string.release_118))
|
||||||
|
add(Release(119, R.string.release_119))
|
||||||
|
add(Release(122, R.string.release_122))
|
||||||
|
add(Release(123, R.string.release_123))
|
||||||
checkWhatsNew(this, BuildConfig.VERSION_CODE)
|
checkWhatsNew(this, BuildConfig.VERSION_CODE)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,18 +9,19 @@ import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.support.v7.widget.GridLayoutManager
|
import android.support.v7.widget.GridLayoutManager
|
||||||
import android.util.Log
|
|
||||||
import android.view.Menu
|
import android.view.Menu
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.FrameLayout
|
import android.widget.FrameLayout
|
||||||
import com.bumptech.glide.Glide
|
import com.bumptech.glide.Glide
|
||||||
import com.bumptech.glide.request.animation.GlideAnimation
|
import com.bumptech.glide.request.RequestOptions
|
||||||
import com.bumptech.glide.request.target.SimpleTarget
|
import com.bumptech.glide.request.target.SimpleTarget
|
||||||
|
import com.bumptech.glide.request.transition.Transition
|
||||||
import com.google.gson.Gson
|
import com.google.gson.Gson
|
||||||
import com.google.gson.reflect.TypeToken
|
import com.google.gson.reflect.TypeToken
|
||||||
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
|
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
|
||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
|
import com.simplemobiletools.commons.views.MyScalableRecyclerView
|
||||||
import com.simplemobiletools.gallery.R
|
import com.simplemobiletools.gallery.R
|
||||||
import com.simplemobiletools.gallery.adapters.MediaAdapter
|
import com.simplemobiletools.gallery.adapters.MediaAdapter
|
||||||
import com.simplemobiletools.gallery.asynctasks.GetMediaAsynctask
|
import com.simplemobiletools.gallery.asynctasks.GetMediaAsynctask
|
||||||
|
@ -29,7 +30,6 @@ import com.simplemobiletools.gallery.dialogs.ExcludeFolderDialog
|
||||||
import com.simplemobiletools.gallery.extensions.*
|
import com.simplemobiletools.gallery.extensions.*
|
||||||
import com.simplemobiletools.gallery.helpers.*
|
import com.simplemobiletools.gallery.helpers.*
|
||||||
import com.simplemobiletools.gallery.models.Medium
|
import com.simplemobiletools.gallery.models.Medium
|
||||||
import com.simplemobiletools.gallery.views.MyScalableRecyclerView
|
|
||||||
import kotlinx.android.synthetic.main.activity_media.*
|
import kotlinx.android.synthetic.main.activity_media.*
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
|
@ -79,16 +79,19 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
if (mShowAll && mStoredAnimateGifs != config.animateGifs) {
|
if (mShowAll && mStoredAnimateGifs != config.animateGifs) {
|
||||||
media_grid.adapter.notifyDataSetChanged()
|
media_grid.adapter?.notifyDataSetChanged()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mStoredCropThumbnails != config.cropThumbnails) {
|
if (mStoredCropThumbnails != config.cropThumbnails) {
|
||||||
media_grid.adapter.notifyDataSetChanged()
|
media_grid.adapter?.notifyDataSetChanged()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mStoredScrollHorizontally != config.scrollHorizontally) {
|
if (mStoredScrollHorizontally != config.scrollHorizontally) {
|
||||||
(media_grid.adapter as MediaAdapter).scrollVertically = !config.scrollHorizontally
|
media_grid.adapter?.let {
|
||||||
media_grid.adapter.notifyDataSetChanged()
|
(it as MediaAdapter).scrollVertically = !config.scrollHorizontally
|
||||||
|
it.notifyDataSetChanged()
|
||||||
|
}
|
||||||
|
setupScrollDirection()
|
||||||
}
|
}
|
||||||
|
|
||||||
tryloadGallery()
|
tryloadGallery()
|
||||||
|
@ -102,7 +105,7 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
||||||
mStoredAnimateGifs = config.animateGifs
|
mStoredAnimateGifs = config.animateGifs
|
||||||
mStoredCropThumbnails = config.cropThumbnails
|
mStoredCropThumbnails = config.cropThumbnails
|
||||||
mStoredScrollHorizontally = config.scrollHorizontally
|
mStoredScrollHorizontally = config.scrollHorizontally
|
||||||
MyScalableRecyclerView.mListener = null
|
media_grid.listener = null
|
||||||
mLastMediaHandler.removeCallbacksAndMessages(null)
|
mLastMediaHandler.removeCallbacksAndMessages(null)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -126,9 +129,10 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun checkIfColorChanged() {
|
private fun checkIfColorChanged() {
|
||||||
if (media_grid.adapter != null && getRecyclerAdapter().foregroundColor != config.primaryColor) {
|
if (media_grid.adapter != null && getRecyclerAdapter().primaryColor != config.primaryColor) {
|
||||||
getRecyclerAdapter().updatePrimaryColor(config.primaryColor)
|
getRecyclerAdapter().primaryColor = config.primaryColor
|
||||||
media_fastscroller.updateHandleColor()
|
media_horizontal_fastscroller.updateHandleColor()
|
||||||
|
media_vertical_fastscroller.updateHandleColor()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -136,17 +140,29 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
||||||
if (isDirEmpty())
|
if (isDirEmpty())
|
||||||
return
|
return
|
||||||
|
|
||||||
val adapter = MediaAdapter(this, mMedia, this) {
|
val currAdapter = media_grid.adapter
|
||||||
|
if (currAdapter == null) {
|
||||||
|
media_grid.adapter = MediaAdapter(this, mMedia, this, mIsGetAnyIntent) {
|
||||||
itemClicked(it.path)
|
itemClicked(it.path)
|
||||||
}
|
}
|
||||||
|
|
||||||
val currAdapter = media_grid.adapter
|
|
||||||
if (currAdapter != null) {
|
|
||||||
(currAdapter as MediaAdapter).updateMedia(mMedia)
|
|
||||||
} else {
|
} else {
|
||||||
media_grid.adapter = adapter
|
(currAdapter as MediaAdapter).updateMedia(mMedia)
|
||||||
|
}
|
||||||
|
setupScrollDirection()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setupScrollDirection() {
|
||||||
|
media_vertical_fastscroller.isHorizontal = false
|
||||||
|
media_vertical_fastscroller.beGoneIf(config.scrollHorizontally)
|
||||||
|
|
||||||
|
media_horizontal_fastscroller.isHorizontal = true
|
||||||
|
media_horizontal_fastscroller.beVisibleIf(config.scrollHorizontally)
|
||||||
|
|
||||||
|
if (config.scrollHorizontally) {
|
||||||
|
media_horizontal_fastscroller.setViews(media_grid, media_refresh_layout)
|
||||||
|
} else {
|
||||||
|
media_vertical_fastscroller.setViews(media_grid, media_refresh_layout)
|
||||||
}
|
}
|
||||||
media_fastscroller.setViews(media_grid, media_refresh_layout)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun checkLastMediaChanged() {
|
private fun checkLastMediaChanged() {
|
||||||
|
@ -181,7 +197,8 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
||||||
findItem(R.id.open_camera).isVisible = mShowAll
|
findItem(R.id.open_camera).isVisible = mShowAll
|
||||||
findItem(R.id.about).isVisible = mShowAll
|
findItem(R.id.about).isVisible = mShowAll
|
||||||
|
|
||||||
findItem(R.id.temporarily_show_hidden).isVisible = !config.showHiddenMedia
|
findItem(R.id.temporarily_show_hidden).isVisible = !config.shouldShowHidden
|
||||||
|
findItem(R.id.stop_showing_hidden).isVisible = config.temporarilyShowHidden
|
||||||
|
|
||||||
findItem(R.id.increase_column_count).isVisible = config.mediaColumnCnt < 10
|
findItem(R.id.increase_column_count).isVisible = config.mediaColumnCnt < 10
|
||||||
findItem(R.id.reduce_column_count).isVisible = config.mediaColumnCnt > 1
|
findItem(R.id.reduce_column_count).isVisible = config.mediaColumnCnt > 1
|
||||||
|
@ -199,7 +216,8 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
||||||
R.id.hide_folder -> tryHideFolder()
|
R.id.hide_folder -> tryHideFolder()
|
||||||
R.id.unhide_folder -> unhideFolder()
|
R.id.unhide_folder -> unhideFolder()
|
||||||
R.id.exclude_folder -> tryExcludeFolder()
|
R.id.exclude_folder -> tryExcludeFolder()
|
||||||
R.id.temporarily_show_hidden -> temporarilyShowHidden()
|
R.id.temporarily_show_hidden -> tryToggleTemporarilyShowHidden()
|
||||||
|
R.id.stop_showing_hidden -> tryToggleTemporarilyShowHidden()
|
||||||
R.id.increase_column_count -> increaseColumnCount()
|
R.id.increase_column_count -> increaseColumnCount()
|
||||||
R.id.reduce_column_count -> reduceColumnCount()
|
R.id.reduce_column_count -> reduceColumnCount()
|
||||||
R.id.settings -> launchSettings()
|
R.id.settings -> launchSettings()
|
||||||
|
@ -298,9 +316,20 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun temporarilyShowHidden() {
|
private fun tryToggleTemporarilyShowHidden() {
|
||||||
config.temporarilyShowHidden = true
|
if (config.temporarilyShowHidden) {
|
||||||
|
toggleTemporarilyShowHidden(false)
|
||||||
|
} else {
|
||||||
|
handleHiddenFolderPasswordProtection {
|
||||||
|
toggleTemporarilyShowHidden(true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun toggleTemporarilyShowHidden(show: Boolean) {
|
||||||
|
config.temporarilyShowHidden = show
|
||||||
getMedia()
|
getMedia()
|
||||||
|
invalidateOptionsMenu()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getRecyclerAdapter() = (media_grid.adapter as MediaAdapter)
|
private fun getRecyclerAdapter() = (media_grid.adapter as MediaAdapter)
|
||||||
|
@ -315,8 +344,10 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
||||||
media_refresh_layout.layoutParams = FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
|
media_refresh_layout.layoutParams = FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
media_grid.isDragSelectionEnabled = true
|
||||||
|
media_grid.isZoomingEnabled = true
|
||||||
layoutManager.spanCount = config.mediaColumnCnt
|
layoutManager.spanCount = config.mediaColumnCnt
|
||||||
MyScalableRecyclerView.mListener = object : MyScalableRecyclerView.MyScalableRecyclerViewListener {
|
media_grid.listener = object : MyScalableRecyclerView.MyScalableRecyclerViewListener {
|
||||||
override fun zoomIn() {
|
override fun zoomIn() {
|
||||||
if (layoutManager.spanCount > 1) {
|
if (layoutManager.spanCount > 1) {
|
||||||
reduceColumnCount()
|
reduceColumnCount()
|
||||||
|
@ -344,13 +375,13 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
||||||
private fun increaseColumnCount() {
|
private fun increaseColumnCount() {
|
||||||
config.mediaColumnCnt = ++(media_grid.layoutManager as GridLayoutManager).spanCount
|
config.mediaColumnCnt = ++(media_grid.layoutManager as GridLayoutManager).spanCount
|
||||||
invalidateOptionsMenu()
|
invalidateOptionsMenu()
|
||||||
media_grid.adapter.notifyDataSetChanged()
|
media_grid.adapter?.notifyDataSetChanged()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun reduceColumnCount() {
|
private fun reduceColumnCount() {
|
||||||
config.mediaColumnCnt = --(media_grid.layoutManager as GridLayoutManager).spanCount
|
config.mediaColumnCnt = --(media_grid.layoutManager as GridLayoutManager).spanCount
|
||||||
invalidateOptionsMenu()
|
invalidateOptionsMenu()
|
||||||
media_grid.adapter.notifyDataSetChanged()
|
media_grid.adapter?.notifyDataSetChanged()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun isSetWallpaperIntent() = intent.getBooleanExtra(SET_WALLPAPER_INTENT, false)
|
private fun isSetWallpaperIntent() = intent.getBooleanExtra(SET_WALLPAPER_INTENT, false)
|
||||||
|
@ -372,18 +403,22 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
||||||
val wantedWidth = wallpaperDesiredMinimumWidth
|
val wantedWidth = wallpaperDesiredMinimumWidth
|
||||||
val wantedHeight = wallpaperDesiredMinimumHeight
|
val wantedHeight = wallpaperDesiredMinimumHeight
|
||||||
val ratio = wantedWidth.toFloat() / wantedHeight
|
val ratio = wantedWidth.toFloat() / wantedHeight
|
||||||
Glide.with(this)
|
|
||||||
.load(File(path))
|
val options = RequestOptions()
|
||||||
.asBitmap()
|
|
||||||
.override((wantedWidth * ratio).toInt(), wantedHeight)
|
.override((wantedWidth * ratio).toInt(), wantedHeight)
|
||||||
.fitCenter()
|
.fitCenter()
|
||||||
|
|
||||||
|
Glide.with(this)
|
||||||
|
.asBitmap()
|
||||||
|
.load(File(path))
|
||||||
|
.apply(options)
|
||||||
.into(object : SimpleTarget<Bitmap>() {
|
.into(object : SimpleTarget<Bitmap>() {
|
||||||
override fun onResourceReady(bitmap: Bitmap?, glideAnimation: GlideAnimation<in Bitmap>?) {
|
override fun onResourceReady(resource: Bitmap?, transition: Transition<in Bitmap>?) {
|
||||||
try {
|
try {
|
||||||
WallpaperManager.getInstance(applicationContext).setBitmap(bitmap)
|
WallpaperManager.getInstance(applicationContext).setBitmap(resource)
|
||||||
setResult(Activity.RESULT_OK)
|
setResult(Activity.RESULT_OK)
|
||||||
} catch (e: IOException) {
|
} catch (ignored: IOException) {
|
||||||
Log.e(TAG, "item click $e")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
finish()
|
finish()
|
||||||
|
@ -424,7 +459,9 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
||||||
|
|
||||||
mLastDrawnHashCode = media.hashCode()
|
mLastDrawnHashCode = media.hashCode()
|
||||||
mMedia = media
|
mMedia = media
|
||||||
|
runOnUiThread {
|
||||||
setupAdapter()
|
setupAdapter()
|
||||||
|
}
|
||||||
storeFolder()
|
storeFolder()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,9 +31,9 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
|
||||||
private val STORAGE_PERMISSION = 1
|
private val STORAGE_PERMISSION = 1
|
||||||
private var mMedium: Medium? = null
|
private var mMedium: Medium? = null
|
||||||
private var mIsFullScreen = false
|
private var mIsFullScreen = false
|
||||||
|
private var mFragment: ViewPagerFragment? = null
|
||||||
|
|
||||||
lateinit var mUri: Uri
|
lateinit var mUri: Uri
|
||||||
lateinit var mFragment: ViewPagerFragment
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
var mIsVideo = false
|
var mIsVideo = false
|
||||||
|
@ -76,8 +76,8 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
|
||||||
|
|
||||||
if (savedInstanceState == null) {
|
if (savedInstanceState == null) {
|
||||||
mFragment = if (mIsVideo) VideoFragment() else PhotoFragment()
|
mFragment = if (mIsVideo) VideoFragment() else PhotoFragment()
|
||||||
mFragment.listener = this
|
mFragment!!.listener = this
|
||||||
mFragment.arguments = bundle
|
mFragment!!.arguments = bundle
|
||||||
supportFragmentManager.beginTransaction().replace(R.id.fragment_holder, mFragment).commit()
|
supportFragmentManager.beginTransaction().replace(R.id.fragment_holder, mFragment).commit()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,6 +98,11 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
|
||||||
} finally {
|
} finally {
|
||||||
cursor?.close()
|
cursor?.close()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
window.decorView.setOnSystemUiVisibilityChangeListener { visibility ->
|
||||||
|
val isFullscreen = visibility and View.SYSTEM_UI_FLAG_FULLSCREEN != 0
|
||||||
|
mFragment?.fullscreenToggled(isFullscreen)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
|
@ -158,12 +163,5 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun systemUiVisibilityChanged(visibility: Int) {
|
override fun videoEnded() = false
|
||||||
if (visibility and View.SYSTEM_UI_FLAG_FULLSCREEN == 0) {
|
|
||||||
mIsFullScreen = false
|
|
||||||
showSystemUI()
|
|
||||||
} else {
|
|
||||||
mIsFullScreen = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,10 @@ import android.content.Intent
|
||||||
import android.content.res.Resources
|
import android.content.res.Resources
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
|
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
|
||||||
|
import com.simplemobiletools.commons.dialogs.SecurityDialog
|
||||||
|
import com.simplemobiletools.commons.extensions.handleHiddenFolderPasswordProtection
|
||||||
import com.simplemobiletools.commons.extensions.updateTextColors
|
import com.simplemobiletools.commons.extensions.updateTextColors
|
||||||
|
import com.simplemobiletools.commons.helpers.SHOW_ALL_TABS
|
||||||
import com.simplemobiletools.commons.models.RadioItem
|
import com.simplemobiletools.commons.models.RadioItem
|
||||||
import com.simplemobiletools.gallery.R
|
import com.simplemobiletools.gallery.R
|
||||||
import com.simplemobiletools.gallery.extensions.config
|
import com.simplemobiletools.gallery.extensions.config
|
||||||
|
@ -35,7 +38,10 @@ class SettingsActivity : SimpleActivity() {
|
||||||
setupDarkBackground()
|
setupDarkBackground()
|
||||||
setupScrollHorizontally()
|
setupScrollHorizontally()
|
||||||
setupScreenRotation()
|
setupScreenRotation()
|
||||||
|
setupReplaceShare()
|
||||||
|
setupPasswordProtection()
|
||||||
setupShowMedia()
|
setupShowMedia()
|
||||||
|
setupHideSystemUI()
|
||||||
updateTextColors(settings_holder)
|
updateTextColors(settings_holder)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,10 +66,20 @@ class SettingsActivity : SimpleActivity() {
|
||||||
private fun setupShowHiddenFolders() {
|
private fun setupShowHiddenFolders() {
|
||||||
settings_show_hidden_folders.isChecked = config.showHiddenMedia
|
settings_show_hidden_folders.isChecked = config.showHiddenMedia
|
||||||
settings_show_hidden_folders_holder.setOnClickListener {
|
settings_show_hidden_folders_holder.setOnClickListener {
|
||||||
|
if (config.showHiddenMedia) {
|
||||||
|
toggleHiddenFolders()
|
||||||
|
} else {
|
||||||
|
handleHiddenFolderPasswordProtection {
|
||||||
|
toggleHiddenFolders()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun toggleHiddenFolders() {
|
||||||
settings_show_hidden_folders.toggle()
|
settings_show_hidden_folders.toggle()
|
||||||
config.showHiddenMedia = settings_show_hidden_folders.isChecked
|
config.showHiddenMedia = settings_show_hidden_folders.isChecked
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private fun setupAutoplayVideos() {
|
private fun setupAutoplayVideos() {
|
||||||
settings_autoplay_videos.isChecked = config.autoplayVideos
|
settings_autoplay_videos.isChecked = config.autoplayVideos
|
||||||
|
@ -121,6 +137,36 @@ class SettingsActivity : SimpleActivity() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun setupHideSystemUI() {
|
||||||
|
settings_hide_system_ui.isChecked = config.hideSystemUI
|
||||||
|
settings_hide_system_ui_holder.setOnClickListener {
|
||||||
|
settings_hide_system_ui.toggle()
|
||||||
|
config.hideSystemUI = settings_hide_system_ui.isChecked
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setupReplaceShare() {
|
||||||
|
settings_replace_share.isChecked = config.replaceShare
|
||||||
|
settings_replace_share_holder.setOnClickListener {
|
||||||
|
settings_replace_share.toggle()
|
||||||
|
config.replaceShare = settings_replace_share.isChecked
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setupPasswordProtection() {
|
||||||
|
settings_password_protection.isChecked = config.isPasswordProtectionOn
|
||||||
|
settings_password_protection_holder.setOnClickListener {
|
||||||
|
val tabToShow = if (config.isPasswordProtectionOn) config.protectionType else SHOW_ALL_TABS
|
||||||
|
SecurityDialog(this, config.passwordHash, tabToShow) { hash, type ->
|
||||||
|
val hasPasswordProtection = config.isPasswordProtectionOn
|
||||||
|
settings_password_protection.isChecked = !hasPasswordProtection
|
||||||
|
config.isPasswordProtectionOn = !hasPasswordProtection
|
||||||
|
config.passwordHash = if (hasPasswordProtection) "" else hash
|
||||||
|
config.protectionType = type
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun setupScreenRotation() {
|
private fun setupScreenRotation() {
|
||||||
settings_screen_rotation.text = getScreenRotationText()
|
settings_screen_rotation.text = getScreenRotationText()
|
||||||
settings_screen_rotation_holder.setOnClickListener {
|
settings_screen_rotation_holder.setOnClickListener {
|
||||||
|
|
|
@ -15,13 +15,11 @@ import android.media.ExifInterface
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.os.Handler
|
||||||
import android.provider.MediaStore
|
import android.provider.MediaStore
|
||||||
import android.support.v4.view.ViewPager
|
import android.support.v4.view.ViewPager
|
||||||
import android.util.DisplayMetrics
|
import android.util.DisplayMetrics
|
||||||
import android.view.Menu
|
import android.view.*
|
||||||
import android.view.MenuItem
|
|
||||||
import android.view.OrientationEventListener
|
|
||||||
import android.view.View
|
|
||||||
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
|
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
|
||||||
import com.simplemobiletools.commons.dialogs.PropertiesDialog
|
import com.simplemobiletools.commons.dialogs.PropertiesDialog
|
||||||
import com.simplemobiletools.commons.dialogs.RenameItemDialog
|
import com.simplemobiletools.commons.dialogs.RenameItemDialog
|
||||||
|
@ -31,8 +29,10 @@ import com.simplemobiletools.gallery.activities.MediaActivity.Companion.mMedia
|
||||||
import com.simplemobiletools.gallery.adapters.MyPagerAdapter
|
import com.simplemobiletools.gallery.adapters.MyPagerAdapter
|
||||||
import com.simplemobiletools.gallery.asynctasks.GetMediaAsynctask
|
import com.simplemobiletools.gallery.asynctasks.GetMediaAsynctask
|
||||||
import com.simplemobiletools.gallery.dialogs.SaveAsDialog
|
import com.simplemobiletools.gallery.dialogs.SaveAsDialog
|
||||||
|
import com.simplemobiletools.gallery.dialogs.SlideshowDialog
|
||||||
import com.simplemobiletools.gallery.extensions.*
|
import com.simplemobiletools.gallery.extensions.*
|
||||||
import com.simplemobiletools.gallery.fragments.PhotoFragment
|
import com.simplemobiletools.gallery.fragments.PhotoFragment
|
||||||
|
import com.simplemobiletools.gallery.fragments.VideoFragment
|
||||||
import com.simplemobiletools.gallery.fragments.ViewPagerFragment
|
import com.simplemobiletools.gallery.fragments.ViewPagerFragment
|
||||||
import com.simplemobiletools.gallery.helpers.*
|
import com.simplemobiletools.gallery.helpers.*
|
||||||
import com.simplemobiletools.gallery.models.Medium
|
import com.simplemobiletools.gallery.models.Medium
|
||||||
|
@ -49,10 +49,17 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
||||||
private var mIsFullScreen = false
|
private var mIsFullScreen = false
|
||||||
private var mPos = -1
|
private var mPos = -1
|
||||||
private var mShowAll = false
|
private var mShowAll = false
|
||||||
|
private var mIsSlideshowActive = false
|
||||||
private var mRotationDegrees = 0f
|
private var mRotationDegrees = 0f
|
||||||
private var mLastHandledOrientation = 0
|
private var mLastHandledOrientation = 0
|
||||||
private var mPrevHashcode = 0
|
private var mPrevHashcode = 0
|
||||||
|
|
||||||
|
private var mSlideshowHandler = Handler()
|
||||||
|
private var mSlideshowInterval = SLIDESHOW_DEFAULT_INTERVAL
|
||||||
|
private var mSlideshowMoveBackwards = false
|
||||||
|
private var mSlideshowMedia = mutableListOf<Medium>()
|
||||||
|
private var mAreSlideShowMediaVisible = false
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
var screenWidth = 0
|
var screenWidth = 0
|
||||||
var screenHeight = 0
|
var screenHeight = 0
|
||||||
|
@ -91,18 +98,28 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if (intent.extras?.containsKey(IS_VIEW_INTENT) == true) {
|
if (intent.extras?.containsKey(IS_VIEW_INTENT) == true && File(mPath).isHidden) {
|
||||||
|
if (!config.isPasswordProtectionOn) {
|
||||||
config.temporarilyShowHidden = true
|
config.temporarilyShowHidden = true
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
showSystemUI()
|
showSystemUI()
|
||||||
|
|
||||||
mDirectory = File(mPath).parent
|
mDirectory = File(mPath).parent
|
||||||
title = mPath.getFilenameFromPath()
|
title = mPath.getFilenameFromPath()
|
||||||
|
|
||||||
|
view_pager.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
|
||||||
|
override fun onGlobalLayout() {
|
||||||
|
view_pager.viewTreeObserver.removeOnGlobalLayoutListener(this)
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && isDestroyed)
|
||||||
|
return
|
||||||
|
|
||||||
if (mMedia.isNotEmpty()) {
|
if (mMedia.isNotEmpty()) {
|
||||||
gotMedia(mMedia)
|
gotMedia(mMedia)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
reloadViewPager()
|
reloadViewPager()
|
||||||
scanPath(mPath) {}
|
scanPath(mPath) {}
|
||||||
|
@ -110,6 +127,17 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
||||||
|
|
||||||
if (config.darkBackground)
|
if (config.darkBackground)
|
||||||
view_pager.background = ColorDrawable(Color.BLACK)
|
view_pager.background = ColorDrawable(Color.BLACK)
|
||||||
|
|
||||||
|
if (config.hideSystemUI)
|
||||||
|
fragmentClicked()
|
||||||
|
|
||||||
|
window.decorView.setOnSystemUiVisibilityChangeListener { visibility ->
|
||||||
|
mIsFullScreen = visibility and View.SYSTEM_UI_FLAG_FULLSCREEN != 0
|
||||||
|
view_pager.adapter?.let {
|
||||||
|
(it as MyPagerAdapter).toggleFullscreen(mIsFullScreen)
|
||||||
|
checkSystemUI()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
|
@ -163,32 +191,29 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
||||||
} else if (config.screenRotation == ROTATE_BY_SYSTEM_SETTING) {
|
} else if (config.screenRotation == ROTATE_BY_SYSTEM_SETTING) {
|
||||||
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
|
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
|
||||||
}
|
}
|
||||||
|
|
||||||
|
invalidateOptionsMenu()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onPause() {
|
override fun onPause() {
|
||||||
super.onPause()
|
super.onPause()
|
||||||
mOrientationEventListener.disable()
|
mOrientationEventListener.disable()
|
||||||
|
stopSlideshow()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||||
menuInflater.inflate(R.menu.menu_viewpager, menu)
|
menuInflater.inflate(R.menu.menu_viewpager, menu)
|
||||||
if (getCurrentMedium() == null)
|
val currentMedium = getCurrentMedium() ?: return true
|
||||||
return true
|
|
||||||
|
|
||||||
menu.apply {
|
menu.apply {
|
||||||
findItem(R.id.menu_set_as).isVisible = getCurrentMedium()!!.isImage() == true
|
findItem(R.id.menu_share_1).isVisible = !config.replaceShare
|
||||||
findItem(R.id.menu_edit).isVisible = getCurrentMedium()!!.isImage() == true
|
findItem(R.id.menu_share_2).isVisible = config.replaceShare
|
||||||
findItem(R.id.menu_rotate).isVisible = getCurrentMedium()!!.isImage() == true
|
findItem(R.id.menu_set_as).isVisible = currentMedium.isImage()
|
||||||
|
findItem(R.id.menu_edit).isVisible = currentMedium.isImage()
|
||||||
|
findItem(R.id.menu_rotate).isVisible = currentMedium.isImage()
|
||||||
findItem(R.id.menu_save_as).isVisible = mRotationDegrees != 0f
|
findItem(R.id.menu_save_as).isVisible = mRotationDegrees != 0f
|
||||||
findItem(R.id.menu_hide).isVisible = !getCurrentMedium()!!.name.startsWith('.')
|
findItem(R.id.menu_hide).isVisible = !currentMedium.name.startsWith('.')
|
||||||
findItem(R.id.menu_unhide).isVisible = getCurrentMedium()!!.name.startsWith('.')
|
findItem(R.id.menu_unhide).isVisible = currentMedium.name.startsWith('.')
|
||||||
|
|
||||||
findItem(R.id.menu_rotate).subMenu.apply {
|
|
||||||
clearHeader()
|
|
||||||
findItem(R.id.rotate_right).icon = resources.getColoredDrawable(R.drawable.ic_rotate_right, R.color.actionbar_menu_icon)
|
|
||||||
findItem(R.id.rotate_left).icon = resources.getColoredDrawable(R.drawable.ic_rotate_left, R.color.actionbar_menu_icon)
|
|
||||||
findItem(R.id.rotate_one_eighty).icon = resources.getColoredDrawable(R.drawable.ic_rotate_one_eighty, R.color.actionbar_menu_icon)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true
|
return true
|
||||||
|
@ -200,39 +225,125 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
||||||
|
|
||||||
when (item.itemId) {
|
when (item.itemId) {
|
||||||
R.id.menu_set_as -> trySetAs(getCurrentFile())
|
R.id.menu_set_as -> trySetAs(getCurrentFile())
|
||||||
|
R.id.slideshow -> initSlideshow()
|
||||||
R.id.menu_copy_to -> copyMoveTo(true)
|
R.id.menu_copy_to -> copyMoveTo(true)
|
||||||
R.id.menu_move_to -> copyMoveTo(false)
|
R.id.menu_move_to -> copyMoveTo(false)
|
||||||
R.id.menu_open_with -> openWith(getCurrentFile())
|
R.id.menu_open_with -> openWith(getCurrentFile())
|
||||||
R.id.menu_hide -> toggleFileVisibility(true)
|
R.id.menu_hide -> toggleFileVisibility(true)
|
||||||
R.id.menu_unhide -> toggleFileVisibility(false)
|
R.id.menu_unhide -> toggleFileVisibility(false)
|
||||||
R.id.menu_share -> shareMedium(getCurrentMedium()!!)
|
R.id.menu_share_1 -> shareMedium(getCurrentMedium()!!)
|
||||||
|
R.id.menu_share_2 -> shareMedium(getCurrentMedium()!!)
|
||||||
R.id.menu_delete -> askConfirmDelete()
|
R.id.menu_delete -> askConfirmDelete()
|
||||||
R.id.menu_rename -> renameFile()
|
R.id.menu_rename -> renameFile()
|
||||||
R.id.menu_edit -> openFileEditor(getCurrentFile())
|
R.id.menu_edit -> openFileEditor(getCurrentFile())
|
||||||
R.id.menu_properties -> showProperties()
|
R.id.menu_properties -> showProperties()
|
||||||
R.id.menu_save_as -> saveImageAs()
|
|
||||||
R.id.show_on_map -> showOnMap()
|
R.id.show_on_map -> showOnMap()
|
||||||
R.id.rotate_right -> rotateImage(90f)
|
R.id.menu_rotate -> rotateImage()
|
||||||
R.id.rotate_left -> rotateImage(-90f)
|
R.id.menu_save_as -> saveImageAs()
|
||||||
R.id.rotate_one_eighty -> rotateImage(180f)
|
|
||||||
R.id.settings -> launchSettings()
|
R.id.settings -> launchSettings()
|
||||||
else -> return super.onOptionsItemSelected(item)
|
else -> return super.onOptionsItemSelected(item)
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updatePagerItems() {
|
private fun updatePagerItems(media: MutableList<Medium>) {
|
||||||
val pagerAdapter = MyPagerAdapter(this, supportFragmentManager, mMedia)
|
val pagerAdapter = MyPagerAdapter(this, supportFragmentManager, media)
|
||||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1 || !isDestroyed) {
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1 || !isDestroyed) {
|
||||||
view_pager.apply {
|
view_pager.apply {
|
||||||
adapter = pagerAdapter
|
adapter = pagerAdapter
|
||||||
|
adapter!!.notifyDataSetChanged()
|
||||||
currentItem = mPos
|
currentItem = mPos
|
||||||
addOnPageChangeListener(this@ViewPagerActivity)
|
addOnPageChangeListener(this@ViewPagerActivity)
|
||||||
adapter!!.notifyDataSetChanged()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun initSlideshow() {
|
||||||
|
SlideshowDialog(this) {
|
||||||
|
startSlideshow()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun startSlideshow() {
|
||||||
|
if (getMediaForSlideshow()) {
|
||||||
|
view_pager.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
|
||||||
|
override fun onGlobalLayout() {
|
||||||
|
view_pager.viewTreeObserver.removeOnGlobalLayoutListener(this)
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && isDestroyed)
|
||||||
|
return
|
||||||
|
|
||||||
|
hideSystemUI()
|
||||||
|
mSlideshowInterval = config.slideshowInterval
|
||||||
|
mSlideshowMoveBackwards = config.slideshowMoveBackwards
|
||||||
|
mIsSlideshowActive = true
|
||||||
|
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
||||||
|
scheduleSwipe()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun stopSlideshow() {
|
||||||
|
if (mIsSlideshowActive) {
|
||||||
|
showSystemUI()
|
||||||
|
mIsSlideshowActive = false
|
||||||
|
mSlideshowHandler.removeCallbacksAndMessages(null)
|
||||||
|
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun scheduleSwipe() {
|
||||||
|
mSlideshowHandler.removeCallbacksAndMessages(null)
|
||||||
|
if (mIsSlideshowActive) {
|
||||||
|
if (getCurrentMedium()!!.isImage() || getCurrentMedium()!!.isGif()) {
|
||||||
|
mSlideshowHandler.postDelayed({
|
||||||
|
if (mIsSlideshowActive && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && !isDestroyed) {
|
||||||
|
swipeToNextMedium()
|
||||||
|
}
|
||||||
|
}, mSlideshowInterval * 1000L)
|
||||||
|
} else {
|
||||||
|
(getCurrentFragment() as? VideoFragment)!!.playVideo()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun swipeToNextMedium() {
|
||||||
|
val before = view_pager.currentItem
|
||||||
|
view_pager.currentItem = if (mSlideshowMoveBackwards) --view_pager.currentItem else ++view_pager.currentItem
|
||||||
|
if (before == view_pager.currentItem) {
|
||||||
|
stopSlideshow()
|
||||||
|
toast(R.string.slideshow_ended)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getMediaForSlideshow(): Boolean {
|
||||||
|
mSlideshowMedia = mMedia.toMutableList()
|
||||||
|
if (!config.slideshowIncludePhotos) {
|
||||||
|
mSlideshowMedia = mSlideshowMedia.filter { !it.isImage() && !it.isGif() } as MutableList
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!config.slideshowIncludeVideos) {
|
||||||
|
mSlideshowMedia = mSlideshowMedia.filter { it.isImage() || it.isGif() } as MutableList
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config.slideshowRandomOrder) {
|
||||||
|
Collections.shuffle(mSlideshowMedia)
|
||||||
|
mPos = 0
|
||||||
|
} else {
|
||||||
|
mPath = getCurrentPath()
|
||||||
|
mPos = getPositionInList(mSlideshowMedia)
|
||||||
|
}
|
||||||
|
|
||||||
|
return if (mSlideshowMedia.isEmpty()) {
|
||||||
|
toast(R.string.no_media_for_slideshow)
|
||||||
|
false
|
||||||
|
} else {
|
||||||
|
updatePagerItems(mSlideshowMedia)
|
||||||
|
mAreSlideShowMediaVisible = true
|
||||||
|
true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun copyMoveTo(isCopyOperation: Boolean) {
|
private fun copyMoveTo(isCopyOperation: Boolean) {
|
||||||
val files = ArrayList<File>(1).apply { add(getCurrentFile()) }
|
val files = ArrayList<File>(1).apply { add(getCurrentFile()) }
|
||||||
tryCopyMoveFilesTo(files, isCopyOperation) {
|
tryCopyMoveFilesTo(files, isCopyOperation) {
|
||||||
|
@ -250,12 +361,48 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
||||||
getCurrentMedium()!!.apply {
|
getCurrentMedium()!!.apply {
|
||||||
name = newFileName
|
name = newFileName
|
||||||
path = it.absolutePath
|
path = it.absolutePath
|
||||||
mMedia[mPos] = this
|
getCurrentMedia()[mPos] = this
|
||||||
}
|
}
|
||||||
invalidateOptionsMenu()
|
invalidateOptionsMenu()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun rotateImage() {
|
||||||
|
val currentMedium = getCurrentMedium() ?: return
|
||||||
|
if (currentMedium.isJpg() && !isPathOnSD(currentMedium.path)) {
|
||||||
|
rotateByExif()
|
||||||
|
} else {
|
||||||
|
rotateByDegrees()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun rotateByExif() {
|
||||||
|
val exif = ExifInterface(getCurrentPath())
|
||||||
|
val rotation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL)
|
||||||
|
val newRotation = getNewRotation(rotation)
|
||||||
|
exif.setAttribute(ExifInterface.TAG_ORIENTATION, newRotation)
|
||||||
|
exif.saveAttributes()
|
||||||
|
File(getCurrentPath()).setLastModified(System.currentTimeMillis())
|
||||||
|
(getCurrentFragment() as? PhotoFragment)?.refreshBitmap()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getNewRotation(rotation: Int): String {
|
||||||
|
return when (rotation) {
|
||||||
|
ExifInterface.ORIENTATION_ROTATE_90 -> ExifInterface.ORIENTATION_ROTATE_180
|
||||||
|
ExifInterface.ORIENTATION_ROTATE_180 -> ExifInterface.ORIENTATION_ROTATE_270
|
||||||
|
ExifInterface.ORIENTATION_ROTATE_270 -> ExifInterface.ORIENTATION_NORMAL
|
||||||
|
else -> ExifInterface.ORIENTATION_ROTATE_90
|
||||||
|
}.toString()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun rotateByDegrees() {
|
||||||
|
mRotationDegrees = (mRotationDegrees + 90) % 360
|
||||||
|
getCurrentFragment()?.let {
|
||||||
|
(it as? PhotoFragment)?.rotateImageViewBy(mRotationDegrees)
|
||||||
|
}
|
||||||
|
supportInvalidateOptionsMenu()
|
||||||
|
}
|
||||||
|
|
||||||
private fun saveImageAs() {
|
private fun saveImageAs() {
|
||||||
val currPath = getCurrentPath()
|
val currPath = getCurrentPath()
|
||||||
SaveAsDialog(this, currPath) {
|
SaveAsDialog(this, currPath) {
|
||||||
|
@ -296,19 +443,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
||||||
out.close()
|
out.close()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun rotateImage(degrees: Float) {
|
private fun getCurrentFragment() = (view_pager.adapter as MyPagerAdapter).getCurrentFragment(view_pager.currentItem)
|
||||||
mRotationDegrees = (mRotationDegrees + degrees) % 360
|
|
||||||
getCurrentFragment()?.rotateImageViewBy(mRotationDegrees)
|
|
||||||
supportInvalidateOptionsMenu()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun getCurrentFragment(): PhotoFragment? {
|
|
||||||
val fragment = (view_pager.adapter as MyPagerAdapter).getCurrentFragment(view_pager.currentItem)
|
|
||||||
return if (fragment is PhotoFragment)
|
|
||||||
fragment
|
|
||||||
else
|
|
||||||
null
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun showProperties() {
|
private fun showProperties() {
|
||||||
if (getCurrentMedium() != null)
|
if (getCurrentMedium() != null)
|
||||||
|
@ -388,7 +523,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
||||||
|
|
||||||
private fun askConfirmDelete() {
|
private fun askConfirmDelete() {
|
||||||
ConfirmationDialog(this) {
|
ConfirmationDialog(this) {
|
||||||
deleteFileBg(File(mMedia[mPos].path)) {
|
deleteFileBg(File(getCurrentMedia()[mPos].path)) {
|
||||||
reloadViewPager()
|
reloadViewPager()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -405,7 +540,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
||||||
|
|
||||||
private fun renameFile() {
|
private fun renameFile() {
|
||||||
RenameItemDialog(this, getCurrentPath()) {
|
RenameItemDialog(this, getCurrentPath()) {
|
||||||
mMedia[mPos].path = it
|
getCurrentMedia()[mPos].path = it
|
||||||
updateActionbarTitle()
|
updateActionbarTitle()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -442,21 +577,21 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
||||||
mPrevHashcode = media.hashCode()
|
mPrevHashcode = media.hashCode()
|
||||||
mMedia = media
|
mMedia = media
|
||||||
if (mPos == -1) {
|
if (mPos == -1) {
|
||||||
mPos = getProperPosition()
|
mPos = getPositionInList(media)
|
||||||
} else {
|
} else {
|
||||||
mPos = Math.min(mPos, mMedia.size - 1)
|
mPos = Math.min(mPos, mMedia.size - 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
updateActionbarTitle()
|
updateActionbarTitle()
|
||||||
updatePagerItems()
|
updatePagerItems(mMedia.toMutableList())
|
||||||
invalidateOptionsMenu()
|
invalidateOptionsMenu()
|
||||||
checkOrientation()
|
checkOrientation()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getProperPosition(): Int {
|
private fun getPositionInList(items: MutableList<Medium>): Int {
|
||||||
mPos = 0
|
mPos = 0
|
||||||
var i = 0
|
var i = 0
|
||||||
for (medium in mMedia) {
|
for (medium in items) {
|
||||||
if (medium.path == mPath) {
|
if (medium.path == mPath) {
|
||||||
return i
|
return i
|
||||||
}
|
}
|
||||||
|
@ -487,37 +622,41 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
||||||
|
|
||||||
override fun fragmentClicked() {
|
override fun fragmentClicked() {
|
||||||
mIsFullScreen = !mIsFullScreen
|
mIsFullScreen = !mIsFullScreen
|
||||||
|
checkSystemUI()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun videoEnded(): Boolean {
|
||||||
|
if (mIsSlideshowActive)
|
||||||
|
swipeToNextMedium()
|
||||||
|
return mIsSlideshowActive
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun checkSystemUI() {
|
||||||
if (mIsFullScreen) {
|
if (mIsFullScreen) {
|
||||||
hideSystemUI()
|
hideSystemUI()
|
||||||
} else {
|
} else {
|
||||||
|
stopSlideshow()
|
||||||
showSystemUI()
|
showSystemUI()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun systemUiVisibilityChanged(visibility: Int) {
|
|
||||||
if (visibility and View.SYSTEM_UI_FLAG_FULLSCREEN == 0) {
|
|
||||||
mIsFullScreen = false
|
|
||||||
showSystemUI()
|
|
||||||
} else {
|
|
||||||
mIsFullScreen = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun updateActionbarTitle() {
|
private fun updateActionbarTitle() {
|
||||||
runOnUiThread {
|
runOnUiThread {
|
||||||
if (mPos < mMedia.size) {
|
if (mPos < getCurrentMedia().size) {
|
||||||
title = mMedia[mPos].path.getFilenameFromPath()
|
title = getCurrentMedia()[mPos].path.getFilenameFromPath()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getCurrentMedium(): Medium? {
|
private fun getCurrentMedium(): Medium? {
|
||||||
return if (mMedia.isEmpty() || mPos == -1)
|
return if (getCurrentMedia().isEmpty() || mPos == -1)
|
||||||
null
|
null
|
||||||
else
|
else
|
||||||
mMedia[Math.min(mPos, mMedia.size - 1)]
|
getCurrentMedia()[Math.min(mPos, getCurrentMedia().size - 1)]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun getCurrentMedia() = if (mAreSlideShowMediaVisible) mSlideshowMedia else mMedia
|
||||||
|
|
||||||
private fun getCurrentPath() = getCurrentMedium()!!.path
|
private fun getCurrentPath() = getCurrentMedium()!!.path
|
||||||
|
|
||||||
private fun getCurrentFile() = File(getCurrentPath())
|
private fun getCurrentFile() = File(getCurrentPath())
|
||||||
|
@ -534,6 +673,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
||||||
updateActionbarTitle()
|
updateActionbarTitle()
|
||||||
mRotationDegrees = 0f
|
mRotationDegrees = 0f
|
||||||
supportInvalidateOptionsMenu()
|
supportInvalidateOptionsMenu()
|
||||||
|
scheduleSwipe()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onPageScrollStateChanged(state: Int) {
|
override fun onPageScrollStateChanged(state: Int) {
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
package com.simplemobiletools.gallery.adapters
|
package com.simplemobiletools.gallery.adapters
|
||||||
|
|
||||||
import android.os.Build
|
import android.graphics.PorterDuff
|
||||||
import android.support.v7.view.ActionMode
|
import android.support.v7.view.ActionMode
|
||||||
import android.support.v7.widget.RecyclerView
|
import android.support.v7.widget.RecyclerView
|
||||||
import android.util.SparseArray
|
import android.util.SparseArray
|
||||||
import android.view.*
|
import android.view.*
|
||||||
import android.widget.FrameLayout
|
|
||||||
import com.bignerdranch.android.multiselector.ModalMultiSelectorCallback
|
import com.bignerdranch.android.multiselector.ModalMultiSelectorCallback
|
||||||
import com.bignerdranch.android.multiselector.MultiSelector
|
import com.bignerdranch.android.multiselector.MultiSelector
|
||||||
import com.bignerdranch.android.multiselector.SwappingHolder
|
import com.bignerdranch.android.multiselector.SwappingHolder
|
||||||
|
@ -14,10 +13,7 @@ import com.google.gson.Gson
|
||||||
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
|
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
|
||||||
import com.simplemobiletools.commons.dialogs.PropertiesDialog
|
import com.simplemobiletools.commons.dialogs.PropertiesDialog
|
||||||
import com.simplemobiletools.commons.dialogs.RenameItemDialog
|
import com.simplemobiletools.commons.dialogs.RenameItemDialog
|
||||||
import com.simplemobiletools.commons.extensions.isAStorageRootFolder
|
import com.simplemobiletools.commons.extensions.*
|
||||||
import com.simplemobiletools.commons.extensions.isImageVideoGif
|
|
||||||
import com.simplemobiletools.commons.extensions.needsStupidWritePermissions
|
|
||||||
import com.simplemobiletools.commons.extensions.toast
|
|
||||||
import com.simplemobiletools.gallery.R
|
import com.simplemobiletools.gallery.R
|
||||||
import com.simplemobiletools.gallery.activities.SimpleActivity
|
import com.simplemobiletools.gallery.activities.SimpleActivity
|
||||||
import com.simplemobiletools.gallery.dialogs.ExcludeFolderDialog
|
import com.simplemobiletools.gallery.dialogs.ExcludeFolderDialog
|
||||||
|
@ -26,12 +22,11 @@ import com.simplemobiletools.gallery.extensions.*
|
||||||
import com.simplemobiletools.gallery.models.AlbumCover
|
import com.simplemobiletools.gallery.models.AlbumCover
|
||||||
import com.simplemobiletools.gallery.models.Directory
|
import com.simplemobiletools.gallery.models.Directory
|
||||||
import kotlinx.android.synthetic.main.directory_item.view.*
|
import kotlinx.android.synthetic.main.directory_item.view.*
|
||||||
import kotlinx.android.synthetic.main.directory_tmb.view.*
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList<Directory>, val listener: DirOperationsListener?, val itemClick: (Directory) -> Unit) :
|
class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList<Directory>, val listener: DirOperationsListener?, val isPickIntent: Boolean,
|
||||||
RecyclerView.Adapter<DirectoryAdapter.ViewHolder>() {
|
val itemClick: (Directory) -> Unit) : RecyclerView.Adapter<DirectoryAdapter.ViewHolder>() {
|
||||||
|
|
||||||
val multiSelector = MultiSelector()
|
val multiSelector = MultiSelector()
|
||||||
val config = activity.config
|
val config = activity.config
|
||||||
|
@ -39,50 +34,30 @@ class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList<Direc
|
||||||
var actMode: ActionMode? = null
|
var actMode: ActionMode? = null
|
||||||
var itemViews = SparseArray<View>()
|
var itemViews = SparseArray<View>()
|
||||||
val selectedPositions = HashSet<Int>()
|
val selectedPositions = HashSet<Int>()
|
||||||
var foregroundColor = 0
|
var primaryColor = config.primaryColor
|
||||||
var pinnedFolders = config.pinnedFolders
|
var pinnedFolders = config.pinnedFolders
|
||||||
var scrollVertically = !config.scrollHorizontally
|
var scrollVertically = !config.scrollHorizontally
|
||||||
|
|
||||||
fun toggleItemSelection(select: Boolean, pos: Int) {
|
fun toggleItemSelection(select: Boolean, pos: Int) {
|
||||||
if (itemViews[pos] != null)
|
if (select) {
|
||||||
getProperView(itemViews[pos]!!).isSelected = select
|
itemViews[pos]?.dir_check?.background?.setColorFilter(primaryColor, PorterDuff.Mode.SRC_IN)
|
||||||
|
|
||||||
if (select)
|
|
||||||
selectedPositions.add(pos)
|
selectedPositions.add(pos)
|
||||||
else
|
} else
|
||||||
selectedPositions.remove(pos)
|
selectedPositions.remove(pos)
|
||||||
|
|
||||||
|
itemViews[pos]?.dir_check?.beVisibleIf(select)
|
||||||
|
|
||||||
if (selectedPositions.isEmpty()) {
|
if (selectedPositions.isEmpty()) {
|
||||||
actMode?.finish()
|
actMode?.finish()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
updateTitle(selectedPositions.size)
|
updateTitle(selectedPositions.size)
|
||||||
actMode?.invalidate()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getProperView(itemView: View): View {
|
|
||||||
return if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M)
|
|
||||||
itemView.dir_frame
|
|
||||||
else
|
|
||||||
itemView.dir_thumbnail
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateTitle(cnt: Int) {
|
fun updateTitle(cnt: Int) {
|
||||||
actMode?.title = "$cnt / ${dirs.size}"
|
actMode?.title = "$cnt / ${dirs.size}"
|
||||||
}
|
actMode?.invalidate()
|
||||||
|
|
||||||
fun updatePrimaryColor(color: Int) {
|
|
||||||
foregroundColor = color
|
|
||||||
(0..itemViews.size() - 1).mapNotNull { itemViews[it] }
|
|
||||||
.forEach { setupItemViewForeground(it) }
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setupItemViewForeground(itemView: View) {
|
|
||||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M)
|
|
||||||
(getProperView(itemView) as FrameLayout).foreground = foregroundColor.createSelector()
|
|
||||||
else
|
|
||||||
getProperView(itemView).foreground = foregroundColor.createSelector()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val adapterListener = object : MyAdapterListener {
|
val adapterListener = object : MyAdapterListener {
|
||||||
|
@ -90,17 +65,9 @@ class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList<Direc
|
||||||
toggleItemSelection(select, position)
|
toggleItemSelection(select, position)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setupItemForeground(itemView: View) {
|
|
||||||
setupItemViewForeground(itemView)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getSelectedPositions(): HashSet<Int> = selectedPositions
|
override fun getSelectedPositions(): HashSet<Int> = selectedPositions
|
||||||
}
|
}
|
||||||
|
|
||||||
init {
|
|
||||||
foregroundColor = config.primaryColor
|
|
||||||
}
|
|
||||||
|
|
||||||
val multiSelectorMode = object : ModalMultiSelectorCallback(multiSelector) {
|
val multiSelectorMode = object : ModalMultiSelectorCallback(multiSelector) {
|
||||||
override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {
|
override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {
|
||||||
when (item.itemId) {
|
when (item.itemId) {
|
||||||
|
@ -142,8 +109,7 @@ class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList<Direc
|
||||||
override fun onDestroyActionMode(actionMode: ActionMode?) {
|
override fun onDestroyActionMode(actionMode: ActionMode?) {
|
||||||
super.onDestroyActionMode(actionMode)
|
super.onDestroyActionMode(actionMode)
|
||||||
selectedPositions.forEach {
|
selectedPositions.forEach {
|
||||||
if (itemViews[it] != null)
|
itemViews[it]?.dir_check?.beGone()
|
||||||
getProperView(itemViews[it]!!).isSelected = false
|
|
||||||
}
|
}
|
||||||
selectedPositions.clear()
|
selectedPositions.clear()
|
||||||
actMode = null
|
actMode = null
|
||||||
|
@ -279,7 +245,6 @@ class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList<Direc
|
||||||
notifyItemChanged(i)
|
notifyItemChanged(i)
|
||||||
}
|
}
|
||||||
updateTitle(cnt)
|
updateTitle(cnt)
|
||||||
actMode?.invalidate()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun askConfirmDelete() {
|
private fun askConfirmDelete() {
|
||||||
|
@ -305,12 +270,14 @@ class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList<Direc
|
||||||
|
|
||||||
activity.handleSAFDialog(File(needPermissionForPath)) {
|
activity.handleSAFDialog(File(needPermissionForPath)) {
|
||||||
selectedPositions.sortedDescending().forEach {
|
selectedPositions.sortedDescending().forEach {
|
||||||
|
if (dirs.size > it) {
|
||||||
val directory = dirs[it]
|
val directory = dirs[it]
|
||||||
folders.add(File(directory.path))
|
folders.add(File(directory.path))
|
||||||
removeFolders.add(directory)
|
removeFolders.add(directory)
|
||||||
notifyItemRemoved(it)
|
notifyItemRemoved(it)
|
||||||
itemViews.put(it, null)
|
itemViews.put(it, null)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
dirs.removeAll(removeFolders)
|
dirs.removeAll(removeFolders)
|
||||||
selectedPositions.clear()
|
selectedPositions.clear()
|
||||||
|
@ -362,7 +329,7 @@ class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList<Direc
|
||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
|
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
|
||||||
val view = LayoutInflater.from(parent?.context).inflate(R.layout.directory_item, parent, false)
|
val view = LayoutInflater.from(parent?.context).inflate(R.layout.directory_item, parent, false)
|
||||||
return ViewHolder(view, adapterListener, activity, multiSelectorMode, multiSelector, listener, itemClick)
|
return ViewHolder(view, adapterListener, activity, multiSelectorMode, multiSelector, listener, isPickIntent, itemClick)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
||||||
|
@ -423,28 +390,29 @@ class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList<Direc
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ViewHolder(val view: View, val adapter: MyAdapterListener, val activity: SimpleActivity, val multiSelectorCallback: ModalMultiSelectorCallback,
|
class ViewHolder(val view: View, val adapterListener: MyAdapterListener, val activity: SimpleActivity, val multiSelectorCallback: ModalMultiSelectorCallback,
|
||||||
val multiSelector: MultiSelector, val listener: DirOperationsListener?, val itemClick: (Directory) -> (Unit)) :
|
val multiSelector: MultiSelector, val listener: DirOperationsListener?, val isPickIntent: Boolean, val itemClick: (Directory) -> (Unit)) :
|
||||||
SwappingHolder(view, MultiSelector()) {
|
SwappingHolder(view, MultiSelector()) {
|
||||||
fun bindView(directory: Directory, isPinned: Boolean, scrollVertically: Boolean): View {
|
fun bindView(directory: Directory, isPinned: Boolean, scrollVertically: Boolean): View {
|
||||||
itemView.apply {
|
itemView.apply {
|
||||||
dir_name.text = directory.name
|
dir_name.text = directory.name
|
||||||
photo_cnt.text = directory.mediaCnt.toString()
|
photo_cnt.text = directory.mediaCnt.toString()
|
||||||
dir_pin.visibility = if (isPinned) View.VISIBLE else View.GONE
|
|
||||||
activity.loadImage(directory.tmb, dir_thumbnail, scrollVertically)
|
activity.loadImage(directory.tmb, dir_thumbnail, scrollVertically)
|
||||||
|
dir_pin.beVisibleIf(isPinned)
|
||||||
|
dir_sd_card.beVisibleIf(activity.isPathOnSD(directory.path))
|
||||||
|
|
||||||
setOnClickListener { viewClicked(directory) }
|
setOnClickListener { viewClicked(directory) }
|
||||||
setOnLongClickListener { viewLongClicked(); true }
|
setOnLongClickListener { if (isPickIntent) viewClicked(directory) else viewLongClicked(); true }
|
||||||
|
|
||||||
|
|
||||||
adapter.setupItemForeground(this)
|
|
||||||
}
|
}
|
||||||
return itemView
|
return itemView
|
||||||
}
|
}
|
||||||
|
|
||||||
fun viewClicked(directory: Directory) {
|
fun viewClicked(directory: Directory) {
|
||||||
if (multiSelector.isSelectable) {
|
if (multiSelector.isSelectable) {
|
||||||
val isSelected = adapter.getSelectedPositions().contains(layoutPosition)
|
val isSelected = adapterListener.getSelectedPositions().contains(layoutPosition)
|
||||||
adapter.toggleItemSelectionAdapter(!isSelected, layoutPosition)
|
adapterListener.toggleItemSelectionAdapter(!isSelected, layoutPosition)
|
||||||
} else {
|
} else {
|
||||||
itemClick(directory)
|
itemClick(directory)
|
||||||
}
|
}
|
||||||
|
@ -454,7 +422,7 @@ class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList<Direc
|
||||||
if (listener != null) {
|
if (listener != null) {
|
||||||
if (!multiSelector.isSelectable) {
|
if (!multiSelector.isSelectable) {
|
||||||
activity.startSupportActionMode(multiSelectorCallback)
|
activity.startSupportActionMode(multiSelectorCallback)
|
||||||
adapter.toggleItemSelectionAdapter(true, layoutPosition)
|
adapterListener.toggleItemSelectionAdapter(true, layoutPosition)
|
||||||
}
|
}
|
||||||
|
|
||||||
listener.itemLongClicked(layoutPosition)
|
listener.itemLongClicked(layoutPosition)
|
||||||
|
@ -462,15 +430,14 @@ class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList<Direc
|
||||||
}
|
}
|
||||||
|
|
||||||
fun stopLoad() {
|
fun stopLoad() {
|
||||||
Glide.clear(view.dir_thumbnail)
|
if (!activity.isDestroyed)
|
||||||
|
Glide.with(activity).clear(view.dir_thumbnail)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
interface MyAdapterListener {
|
interface MyAdapterListener {
|
||||||
fun toggleItemSelectionAdapter(select: Boolean, position: Int)
|
fun toggleItemSelectionAdapter(select: Boolean, position: Int)
|
||||||
|
|
||||||
fun setupItemForeground(itemView: View)
|
|
||||||
|
|
||||||
fun getSelectedPositions(): HashSet<Int>
|
fun getSelectedPositions(): HashSet<Int>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
package com.simplemobiletools.gallery.adapters
|
package com.simplemobiletools.gallery.adapters
|
||||||
|
|
||||||
import android.os.Build
|
import android.graphics.PorterDuff
|
||||||
import android.support.v7.view.ActionMode
|
import android.support.v7.view.ActionMode
|
||||||
import android.support.v7.widget.RecyclerView
|
import android.support.v7.widget.RecyclerView
|
||||||
import android.util.SparseArray
|
import android.util.SparseArray
|
||||||
import android.view.*
|
import android.view.*
|
||||||
import android.widget.FrameLayout
|
|
||||||
import com.bignerdranch.android.multiselector.ModalMultiSelectorCallback
|
import com.bignerdranch.android.multiselector.ModalMultiSelectorCallback
|
||||||
import com.bignerdranch.android.multiselector.MultiSelector
|
import com.bignerdranch.android.multiselector.MultiSelector
|
||||||
import com.bignerdranch.android.multiselector.SwappingHolder
|
import com.bignerdranch.android.multiselector.SwappingHolder
|
||||||
|
@ -13,18 +12,18 @@ import com.bumptech.glide.Glide
|
||||||
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
|
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
|
||||||
import com.simplemobiletools.commons.dialogs.PropertiesDialog
|
import com.simplemobiletools.commons.dialogs.PropertiesDialog
|
||||||
import com.simplemobiletools.commons.dialogs.RenameItemDialog
|
import com.simplemobiletools.commons.dialogs.RenameItemDialog
|
||||||
|
import com.simplemobiletools.commons.extensions.beGone
|
||||||
import com.simplemobiletools.commons.extensions.beVisibleIf
|
import com.simplemobiletools.commons.extensions.beVisibleIf
|
||||||
import com.simplemobiletools.gallery.R
|
import com.simplemobiletools.gallery.R
|
||||||
import com.simplemobiletools.gallery.activities.SimpleActivity
|
import com.simplemobiletools.gallery.activities.SimpleActivity
|
||||||
import com.simplemobiletools.gallery.extensions.*
|
import com.simplemobiletools.gallery.extensions.*
|
||||||
import com.simplemobiletools.gallery.models.Medium
|
import com.simplemobiletools.gallery.models.Medium
|
||||||
import kotlinx.android.synthetic.main.photo_video_item.view.*
|
import kotlinx.android.synthetic.main.photo_video_item.view.*
|
||||||
import kotlinx.android.synthetic.main.photo_video_tmb.view.*
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class MediaAdapter(val activity: SimpleActivity, var media: MutableList<Medium>, val listener: MediaOperationsListener?, val itemClick: (Medium) -> Unit) :
|
class MediaAdapter(val activity: SimpleActivity, var media: MutableList<Medium>, val listener: MediaOperationsListener?, val isPickIntent: Boolean,
|
||||||
RecyclerView.Adapter<MediaAdapter.ViewHolder>() {
|
val itemClick: (Medium) -> Unit) : RecyclerView.Adapter<MediaAdapter.ViewHolder>() {
|
||||||
|
|
||||||
val multiSelector = MultiSelector()
|
val multiSelector = MultiSelector()
|
||||||
val config = activity.config
|
val config = activity.config
|
||||||
|
@ -32,50 +31,30 @@ class MediaAdapter(val activity: SimpleActivity, var media: MutableList<Medium>,
|
||||||
var actMode: ActionMode? = null
|
var actMode: ActionMode? = null
|
||||||
var itemViews = SparseArray<View>()
|
var itemViews = SparseArray<View>()
|
||||||
val selectedPositions = HashSet<Int>()
|
val selectedPositions = HashSet<Int>()
|
||||||
var foregroundColor = 0
|
var primaryColor = config.primaryColor
|
||||||
var displayFilenames = config.displayFileNames
|
var displayFilenames = config.displayFileNames
|
||||||
var scrollVertically = !config.scrollHorizontally
|
var scrollVertically = !config.scrollHorizontally
|
||||||
|
|
||||||
fun toggleItemSelection(select: Boolean, pos: Int) {
|
fun toggleItemSelection(select: Boolean, pos: Int) {
|
||||||
if (itemViews[pos] != null)
|
if (select) {
|
||||||
getProperView(itemViews[pos]!!).isSelected = select
|
itemViews[pos]?.medium_check?.background?.setColorFilter(primaryColor, PorterDuff.Mode.SRC_IN)
|
||||||
|
|
||||||
if (select)
|
|
||||||
selectedPositions.add(pos)
|
selectedPositions.add(pos)
|
||||||
else
|
} else
|
||||||
selectedPositions.remove(pos)
|
selectedPositions.remove(pos)
|
||||||
|
|
||||||
|
itemViews[pos]?.medium_check?.beVisibleIf(select)
|
||||||
|
|
||||||
if (selectedPositions.isEmpty()) {
|
if (selectedPositions.isEmpty()) {
|
||||||
actMode?.finish()
|
actMode?.finish()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
updateTitle(selectedPositions.size)
|
updateTitle(selectedPositions.size)
|
||||||
actMode?.invalidate()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getProperView(itemView: View): View {
|
|
||||||
return if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M)
|
|
||||||
itemView.medium_thumbnail_holder
|
|
||||||
else
|
|
||||||
itemView.medium_thumbnail
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateTitle(cnt: Int) {
|
fun updateTitle(cnt: Int) {
|
||||||
actMode?.title = "$cnt / ${media.size}"
|
actMode?.title = "$cnt / ${media.size}"
|
||||||
}
|
actMode?.invalidate()
|
||||||
|
|
||||||
fun updatePrimaryColor(color: Int) {
|
|
||||||
foregroundColor = color
|
|
||||||
(0..itemViews.size() - 1).mapNotNull { itemViews[it] }
|
|
||||||
.forEach { setupItemViewForeground(it) }
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setupItemViewForeground(itemView: View) {
|
|
||||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M)
|
|
||||||
(getProperView(itemView) as FrameLayout).foreground = foregroundColor.createSelector()
|
|
||||||
else
|
|
||||||
getProperView(itemView).foreground = foregroundColor.createSelector()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val adapterListener = object : MyAdapterListener {
|
val adapterListener = object : MyAdapterListener {
|
||||||
|
@ -83,17 +62,9 @@ class MediaAdapter(val activity: SimpleActivity, var media: MutableList<Medium>,
|
||||||
toggleItemSelection(select, position)
|
toggleItemSelection(select, position)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setupItemForeground(itemView: View) {
|
|
||||||
setupItemViewForeground(itemView)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getSelectedPositions(): HashSet<Int> = selectedPositions
|
override fun getSelectedPositions(): HashSet<Int> = selectedPositions
|
||||||
}
|
}
|
||||||
|
|
||||||
init {
|
|
||||||
foregroundColor = config.primaryColor
|
|
||||||
}
|
|
||||||
|
|
||||||
val multiSelectorMode = object : ModalMultiSelectorCallback(multiSelector) {
|
val multiSelectorMode = object : ModalMultiSelectorCallback(multiSelector) {
|
||||||
override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {
|
override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {
|
||||||
when (item.itemId) {
|
when (item.itemId) {
|
||||||
|
@ -131,8 +102,7 @@ class MediaAdapter(val activity: SimpleActivity, var media: MutableList<Medium>,
|
||||||
override fun onDestroyActionMode(actionMode: ActionMode?) {
|
override fun onDestroyActionMode(actionMode: ActionMode?) {
|
||||||
super.onDestroyActionMode(actionMode)
|
super.onDestroyActionMode(actionMode)
|
||||||
selectedPositions.forEach {
|
selectedPositions.forEach {
|
||||||
if (itemViews[it] != null)
|
itemViews[it]?.medium_check?.beGone()
|
||||||
getProperView(itemViews[it]!!).isSelected = false
|
|
||||||
}
|
}
|
||||||
selectedPositions.clear()
|
selectedPositions.clear()
|
||||||
actMode = null
|
actMode = null
|
||||||
|
@ -218,7 +188,6 @@ class MediaAdapter(val activity: SimpleActivity, var media: MutableList<Medium>,
|
||||||
notifyItemChanged(i)
|
notifyItemChanged(i)
|
||||||
}
|
}
|
||||||
updateTitle(cnt)
|
updateTitle(cnt)
|
||||||
actMode?.invalidate()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun askConfirmDelete() {
|
private fun askConfirmDelete() {
|
||||||
|
@ -237,6 +206,11 @@ class MediaAdapter(val activity: SimpleActivity, var media: MutableList<Medium>,
|
||||||
val files = ArrayList<File>(selectedPositions.size)
|
val files = ArrayList<File>(selectedPositions.size)
|
||||||
val removeMedia = ArrayList<Medium>(selectedPositions.size)
|
val removeMedia = ArrayList<Medium>(selectedPositions.size)
|
||||||
|
|
||||||
|
if (media.size <= selectedPositions.first()) {
|
||||||
|
actMode?.finish()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
activity.handleSAFDialog(File(media[selectedPositions.first()].path)) {
|
activity.handleSAFDialog(File(media[selectedPositions.first()].path)) {
|
||||||
selectedPositions.sortedDescending().forEach {
|
selectedPositions.sortedDescending().forEach {
|
||||||
val medium = media[it]
|
val medium = media[it]
|
||||||
|
@ -271,7 +245,7 @@ class MediaAdapter(val activity: SimpleActivity, var media: MutableList<Medium>,
|
||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
|
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
|
||||||
val view = LayoutInflater.from(parent?.context).inflate(R.layout.photo_video_item, parent, false)
|
val view = LayoutInflater.from(parent?.context).inflate(R.layout.photo_video_item, parent, false)
|
||||||
return ViewHolder(view, adapterListener, activity, multiSelectorMode, multiSelector, listener, itemClick)
|
return ViewHolder(view, adapterListener, activity, multiSelectorMode, multiSelector, listener, isPickIntent, itemClick)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
||||||
|
@ -336,8 +310,9 @@ class MediaAdapter(val activity: SimpleActivity, var media: MutableList<Medium>,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ViewHolder(val view: View, val adapter: MyAdapterListener, val activity: SimpleActivity, val multiSelectorCallback: ModalMultiSelectorCallback,
|
class ViewHolder(val view: View, val adapterListener: MyAdapterListener, val activity: SimpleActivity, val multiSelectorCallback: ModalMultiSelectorCallback,
|
||||||
val multiSelector: MultiSelector, val listener: MediaOperationsListener?, val itemClick: (Medium) -> (Unit)) : SwappingHolder(view, MultiSelector()) {
|
val multiSelector: MultiSelector, val listener: MediaOperationsListener?, val isPickIntent: Boolean, val itemClick: (Medium) -> (Unit)) :
|
||||||
|
SwappingHolder(view, MultiSelector()) {
|
||||||
fun bindView(medium: Medium, displayFilenames: Boolean, scrollVertically: Boolean): View {
|
fun bindView(medium: Medium, displayFilenames: Boolean, scrollVertically: Boolean): View {
|
||||||
itemView.apply {
|
itemView.apply {
|
||||||
play_outline.visibility = if (medium.video) View.VISIBLE else View.GONE
|
play_outline.visibility = if (medium.video) View.VISIBLE else View.GONE
|
||||||
|
@ -346,17 +321,15 @@ class MediaAdapter(val activity: SimpleActivity, var media: MutableList<Medium>,
|
||||||
activity.loadImage(medium.path, medium_thumbnail, scrollVertically)
|
activity.loadImage(medium.path, medium_thumbnail, scrollVertically)
|
||||||
|
|
||||||
setOnClickListener { viewClicked(medium) }
|
setOnClickListener { viewClicked(medium) }
|
||||||
setOnLongClickListener { viewLongClicked(); true }
|
setOnLongClickListener { if (isPickIntent) viewClicked(medium) else viewLongClicked(); true }
|
||||||
|
|
||||||
adapter.setupItemForeground(this)
|
|
||||||
}
|
}
|
||||||
return itemView
|
return itemView
|
||||||
}
|
}
|
||||||
|
|
||||||
fun viewClicked(medium: Medium) {
|
fun viewClicked(medium: Medium) {
|
||||||
if (multiSelector.isSelectable) {
|
if (multiSelector.isSelectable) {
|
||||||
val isSelected = adapter.getSelectedPositions().contains(layoutPosition)
|
val isSelected = adapterListener.getSelectedPositions().contains(layoutPosition)
|
||||||
adapter.toggleItemSelectionAdapter(!isSelected, layoutPosition)
|
adapterListener.toggleItemSelectionAdapter(!isSelected, layoutPosition)
|
||||||
} else {
|
} else {
|
||||||
itemClick(medium)
|
itemClick(medium)
|
||||||
}
|
}
|
||||||
|
@ -366,7 +339,7 @@ class MediaAdapter(val activity: SimpleActivity, var media: MutableList<Medium>,
|
||||||
if (listener != null) {
|
if (listener != null) {
|
||||||
if (!multiSelector.isSelectable) {
|
if (!multiSelector.isSelectable) {
|
||||||
activity.startSupportActionMode(multiSelectorCallback)
|
activity.startSupportActionMode(multiSelectorCallback)
|
||||||
adapter.toggleItemSelectionAdapter(true, layoutPosition)
|
adapterListener.toggleItemSelectionAdapter(true, layoutPosition)
|
||||||
}
|
}
|
||||||
|
|
||||||
listener.itemLongClicked(layoutPosition)
|
listener.itemLongClicked(layoutPosition)
|
||||||
|
@ -374,15 +347,14 @@ class MediaAdapter(val activity: SimpleActivity, var media: MutableList<Medium>,
|
||||||
}
|
}
|
||||||
|
|
||||||
fun stopLoad() {
|
fun stopLoad() {
|
||||||
Glide.clear(view.medium_thumbnail)
|
if (!activity.isDestroyed)
|
||||||
|
Glide.with(activity).clear(view.medium_thumbnail)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
interface MyAdapterListener {
|
interface MyAdapterListener {
|
||||||
fun toggleItemSelectionAdapter(select: Boolean, position: Int)
|
fun toggleItemSelectionAdapter(select: Boolean, position: Int)
|
||||||
|
|
||||||
fun setupItemForeground(itemView: View)
|
|
||||||
|
|
||||||
fun getSelectedPositions(): HashSet<Int>
|
fun getSelectedPositions(): HashSet<Int>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,6 @@ import android.support.v4.app.Fragment
|
||||||
import android.support.v4.app.FragmentManager
|
import android.support.v4.app.FragmentManager
|
||||||
import android.support.v4.app.FragmentStatePagerAdapter
|
import android.support.v4.app.FragmentStatePagerAdapter
|
||||||
import android.support.v4.view.PagerAdapter
|
import android.support.v4.view.PagerAdapter
|
||||||
import android.util.SparseArray
|
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import com.simplemobiletools.gallery.activities.ViewPagerActivity
|
import com.simplemobiletools.gallery.activities.ViewPagerActivity
|
||||||
import com.simplemobiletools.gallery.fragments.PhotoFragment
|
import com.simplemobiletools.gallery.fragments.PhotoFragment
|
||||||
|
@ -15,7 +14,7 @@ import com.simplemobiletools.gallery.helpers.MEDIUM
|
||||||
import com.simplemobiletools.gallery.models.Medium
|
import com.simplemobiletools.gallery.models.Medium
|
||||||
|
|
||||||
class MyPagerAdapter(val activity: ViewPagerActivity, fm: FragmentManager, val media: MutableList<Medium>) : FragmentStatePagerAdapter(fm) {
|
class MyPagerAdapter(val activity: ViewPagerActivity, fm: FragmentManager, val media: MutableList<Medium>) : FragmentStatePagerAdapter(fm) {
|
||||||
private val mFragments = SparseArray<ViewPagerFragment>()
|
private val mFragments = HashMap<Int, ViewPagerFragment>()
|
||||||
override fun getCount() = media.size
|
override fun getCount() = media.size
|
||||||
|
|
||||||
override fun getItem(position: Int): Fragment {
|
override fun getItem(position: Int): Fragment {
|
||||||
|
@ -43,10 +42,16 @@ class MyPagerAdapter(val activity: ViewPagerActivity, fm: FragmentManager, val m
|
||||||
return fragment
|
return fragment
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun destroyItem(container: ViewGroup?, position: Int, `object`: Any?) {
|
override fun destroyItem(container: ViewGroup?, position: Int, any: Any?) {
|
||||||
mFragments.remove(position)
|
mFragments.remove(position)
|
||||||
super.destroyItem(container, position, `object`)
|
super.destroyItem(container, position, any)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getCurrentFragment(position: Int) = mFragments.get(position)
|
fun getCurrentFragment(position: Int) = mFragments.get(position)
|
||||||
|
|
||||||
|
fun toggleFullscreen(isFullscreen: Boolean) {
|
||||||
|
for ((pos, fragment) in mFragments) {
|
||||||
|
fragment.fullscreenToggled(isFullscreen)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,8 +27,11 @@ class GetDirectoriesAsynctask(val context: Context, val isPickVideo: Boolean, va
|
||||||
|
|
||||||
val media = context.getFilesFrom("", isPickImage, isPickVideo)
|
val media = context.getFilesFrom("", isPickImage, isPickVideo)
|
||||||
val excludedPaths = config.excludedFolders
|
val excludedPaths = config.excludedFolders
|
||||||
|
val includedPaths = config.includedFolders
|
||||||
val directories = groupDirectories(media)
|
val directories = groupDirectories(media)
|
||||||
val dirs = ArrayList(directories.values.filter { File(it.path).exists() }).filter { shouldFolderBeVisible(it.path, excludedPaths) } as ArrayList<Directory>
|
val dirs = ArrayList(directories.values
|
||||||
|
.filter { File(it.path).exists() })
|
||||||
|
.filter { shouldFolderBeVisible(it.path, excludedPaths, includedPaths) } as ArrayList<Directory>
|
||||||
Directory.sorting = config.directorySorting
|
Directory.sorting = config.directorySorting
|
||||||
dirs.sort()
|
dirs.sort()
|
||||||
return movePinnedToFront(dirs)
|
return movePinnedToFront(dirs)
|
||||||
|
@ -43,8 +46,8 @@ class GetDirectoriesAsynctask(val context: Context, val isPickVideo: Boolean, va
|
||||||
cancel(true)
|
cancel(true)
|
||||||
|
|
||||||
val parentDir = File(path).parent ?: continue
|
val parentDir = File(path).parent ?: continue
|
||||||
if (directories.containsKey(parentDir)) {
|
if (directories.containsKey(parentDir.toLowerCase())) {
|
||||||
val directory = directories[parentDir]!!
|
val directory = directories[parentDir.toLowerCase()]!!
|
||||||
val newImageCnt = directory.mediaCnt + 1
|
val newImageCnt = directory.mediaCnt + 1
|
||||||
directory.mediaCnt = newImageCnt
|
directory.mediaCnt = newImageCnt
|
||||||
directory.addSize(size)
|
directory.addSize(size)
|
||||||
|
@ -71,17 +74,17 @@ class GetDirectoriesAsynctask(val context: Context, val isPickVideo: Boolean, va
|
||||||
}
|
}
|
||||||
|
|
||||||
val directory = Directory(parentDir, thumbnail, dirName, 1, dateModified, dateTaken, size)
|
val directory = Directory(parentDir, thumbnail, dirName, 1, dateModified, dateTaken, size)
|
||||||
directories.put(parentDir, directory)
|
directories.put(parentDir.toLowerCase(), directory)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return directories
|
return directories
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun shouldFolderBeVisible(path: String, excludedPaths: MutableSet<String>): Boolean {
|
private fun shouldFolderBeVisible(path: String, excludedPaths: MutableSet<String>, includedPaths: MutableSet<String>): Boolean {
|
||||||
val file = File(path)
|
val file = File(path)
|
||||||
return if (isThisOrParentExcluded(path, excludedPaths))
|
return if (isThisOrParentExcluded(path, excludedPaths, includedPaths)) {
|
||||||
false
|
false
|
||||||
else if (!config.shouldShowHidden && file.isDirectory && file.canonicalFile == file.absoluteFile) {
|
} else if (!config.shouldShowHidden && file.isDirectory && file.canonicalFile == file.absoluteFile) {
|
||||||
var containsNoMediaOrDot = file.containsNoMedia() || path.contains("/.")
|
var containsNoMediaOrDot = file.containsNoMedia() || path.contains("/.")
|
||||||
if (!containsNoMediaOrDot) {
|
if (!containsNoMediaOrDot) {
|
||||||
containsNoMediaOrDot = checkParentHasNoMedia(file.parentFile)
|
containsNoMediaOrDot = checkParentHasNoMedia(file.parentFile)
|
||||||
|
@ -105,7 +108,8 @@ class GetDirectoriesAsynctask(val context: Context, val isPickVideo: Boolean, va
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun isThisOrParentExcluded(path: String, excludedPaths: MutableSet<String>) = excludedPaths.any { path.startsWith(it) }
|
private fun isThisOrParentExcluded(path: String, excludedPaths: MutableSet<String>, includedPaths: MutableSet<String>) =
|
||||||
|
includedPaths.none { path.startsWith(it) } && excludedPaths.any { path.startsWith(it) }
|
||||||
|
|
||||||
private fun movePinnedToFront(dirs: ArrayList<Directory>): ArrayList<Directory> {
|
private fun movePinnedToFront(dirs: ArrayList<Directory>): ArrayList<Directory> {
|
||||||
val foundFolders = ArrayList<Directory>()
|
val foundFolders = ArrayList<Directory>()
|
||||||
|
|
|
@ -10,14 +10,13 @@ import com.simplemobiletools.commons.helpers.*
|
||||||
import com.simplemobiletools.gallery.R
|
import com.simplemobiletools.gallery.R
|
||||||
import com.simplemobiletools.gallery.activities.SimpleActivity
|
import com.simplemobiletools.gallery.activities.SimpleActivity
|
||||||
import com.simplemobiletools.gallery.extensions.config
|
import com.simplemobiletools.gallery.extensions.config
|
||||||
import com.simplemobiletools.gallery.helpers.Config
|
|
||||||
import kotlinx.android.synthetic.main.dialog_change_sorting.view.*
|
import kotlinx.android.synthetic.main.dialog_change_sorting.view.*
|
||||||
|
|
||||||
class ChangeSortingDialog(val activity: SimpleActivity, val isDirectorySorting: Boolean, showFolderCheckbox: Boolean,
|
class ChangeSortingDialog(val activity: SimpleActivity, val isDirectorySorting: Boolean, showFolderCheckbox: Boolean,
|
||||||
val path: String = "", val callback: () -> Unit) :
|
val path: String = "", val callback: () -> Unit) :
|
||||||
DialogInterface.OnClickListener {
|
DialogInterface.OnClickListener {
|
||||||
private var currSorting = 0
|
private var currSorting = 0
|
||||||
private var config: Config = activity.config
|
private var config = activity.config
|
||||||
private var view: View
|
private var view: View
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
@ -85,6 +84,6 @@ class ChangeSortingDialog(val activity: SimpleActivity, val isDirectorySorting:
|
||||||
config.fileSorting = sorting
|
config.fileSorting = sorting
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
callback.invoke()
|
callback()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,6 @@ import com.simplemobiletools.gallery.extensions.config
|
||||||
import kotlinx.android.synthetic.main.dialog_exclude_folder.view.*
|
import kotlinx.android.synthetic.main.dialog_exclude_folder.view.*
|
||||||
|
|
||||||
class ExcludeFolderDialog(val activity: SimpleActivity, val selectedPaths: List<String>, val callback: () -> Unit) {
|
class ExcludeFolderDialog(val activity: SimpleActivity, val selectedPaths: List<String>, val callback: () -> Unit) {
|
||||||
var dialog: AlertDialog? = null
|
|
||||||
val alternativePaths = getAlternativePathsList()
|
val alternativePaths = getAlternativePathsList()
|
||||||
var radioGroup: RadioGroup? = null
|
var radioGroup: RadioGroup? = null
|
||||||
|
|
||||||
|
@ -46,7 +45,7 @@ class ExcludeFolderDialog(val activity: SimpleActivity, val selectedPaths: List<
|
||||||
private fun dialogConfirmed() {
|
private fun dialogConfirmed() {
|
||||||
val path = if (alternativePaths.isEmpty()) selectedPaths[0] else alternativePaths[radioGroup!!.checkedRadioButtonId]
|
val path = if (alternativePaths.isEmpty()) selectedPaths[0] else alternativePaths[radioGroup!!.checkedRadioButtonId]
|
||||||
activity.config.addExcludedFolder(path)
|
activity.config.addExcludedFolder(path)
|
||||||
callback.invoke()
|
callback()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getAlternativePathsList(): List<String> {
|
private fun getAlternativePathsList(): List<String> {
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
package com.simplemobiletools.gallery.dialogs
|
package com.simplemobiletools.gallery.dialogs
|
||||||
|
|
||||||
import android.support.v7.app.AlertDialog
|
import android.support.v7.app.AlertDialog
|
||||||
import android.support.v7.widget.RecyclerView
|
import android.support.v7.widget.GridLayoutManager
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
import com.simplemobiletools.commons.dialogs.FilePickerDialog
|
import com.simplemobiletools.commons.dialogs.FilePickerDialog
|
||||||
|
import com.simplemobiletools.commons.extensions.beGoneIf
|
||||||
|
import com.simplemobiletools.commons.extensions.beVisibleIf
|
||||||
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
||||||
import com.simplemobiletools.commons.extensions.toast
|
import com.simplemobiletools.commons.extensions.toast
|
||||||
import com.simplemobiletools.gallery.R
|
import com.simplemobiletools.gallery.R
|
||||||
|
@ -17,12 +20,14 @@ import kotlinx.android.synthetic.main.dialog_directory_picker.view.*
|
||||||
|
|
||||||
class PickDirectoryDialog(val activity: SimpleActivity, val sourcePath: String, val callback: (path: String) -> Unit) {
|
class PickDirectoryDialog(val activity: SimpleActivity, val sourcePath: String, val callback: (path: String) -> Unit) {
|
||||||
var dialog: AlertDialog
|
var dialog: AlertDialog
|
||||||
var directoriesGrid: RecyclerView
|
|
||||||
var shownDirectories: ArrayList<Directory> = ArrayList()
|
var shownDirectories: ArrayList<Directory> = ArrayList()
|
||||||
|
var view: View = LayoutInflater.from(activity).inflate(R.layout.dialog_directory_picker, null)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
val view = LayoutInflater.from(activity).inflate(R.layout.dialog_directory_picker, null)
|
(view.directories_grid.layoutManager as GridLayoutManager).apply {
|
||||||
directoriesGrid = view.directories_grid
|
orientation = if (activity.config.scrollHorizontally) GridLayoutManager.HORIZONTAL else GridLayoutManager.VERTICAL
|
||||||
|
spanCount = activity.config.dirColumnCnt
|
||||||
|
}
|
||||||
|
|
||||||
dialog = AlertDialog.Builder(activity)
|
dialog = AlertDialog.Builder(activity)
|
||||||
.setPositiveButton(R.string.ok, null)
|
.setPositiveButton(R.string.ok, null)
|
||||||
|
@ -45,7 +50,7 @@ class PickDirectoryDialog(val activity: SimpleActivity, val sourcePath: String,
|
||||||
fun showOtherFolder() {
|
fun showOtherFolder() {
|
||||||
val showHidden = activity.config.shouldShowHidden
|
val showHidden = activity.config.shouldShowHidden
|
||||||
FilePickerDialog(activity, sourcePath, false, showHidden, true) {
|
FilePickerDialog(activity, sourcePath, false, showHidden, true) {
|
||||||
callback.invoke(it)
|
callback(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,15 +59,31 @@ class PickDirectoryDialog(val activity: SimpleActivity, val sourcePath: String,
|
||||||
return
|
return
|
||||||
|
|
||||||
shownDirectories = directories
|
shownDirectories = directories
|
||||||
val adapter = DirectoryAdapter(activity, directories, null) {
|
val adapter = DirectoryAdapter(activity, directories, null, true) {
|
||||||
if (it.path.trimEnd('/') == sourcePath) {
|
if (it.path.trimEnd('/') == sourcePath) {
|
||||||
activity.toast(R.string.source_and_destination_same)
|
activity.toast(R.string.source_and_destination_same)
|
||||||
return@DirectoryAdapter
|
return@DirectoryAdapter
|
||||||
} else {
|
} else {
|
||||||
callback.invoke(it.path)
|
callback(it.path)
|
||||||
dialog.dismiss()
|
dialog.dismiss()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
directoriesGrid.adapter = adapter
|
|
||||||
|
val scrollHorizontally = activity.config.scrollHorizontally
|
||||||
|
view.apply {
|
||||||
|
directories_grid.adapter = adapter
|
||||||
|
|
||||||
|
directories_vertical_fastscroller.isHorizontal = false
|
||||||
|
directories_vertical_fastscroller.beGoneIf(scrollHorizontally)
|
||||||
|
|
||||||
|
directories_horizontal_fastscroller.isHorizontal = true
|
||||||
|
directories_horizontal_fastscroller.beVisibleIf(scrollHorizontally)
|
||||||
|
|
||||||
|
if (scrollHorizontally) {
|
||||||
|
directories_horizontal_fastscroller.setViews(directories_grid)
|
||||||
|
} else {
|
||||||
|
directories_vertical_fastscroller.setViews(directories_grid)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,7 +47,7 @@ class PickMediumDialog(val activity: SimpleActivity, val path: String, val callb
|
||||||
return
|
return
|
||||||
|
|
||||||
shownMedia = media
|
shownMedia = media
|
||||||
val adapter = MediaAdapter(activity, media, null) {
|
val adapter = MediaAdapter(activity, media, null, true) {
|
||||||
callback(it.path)
|
callback(it.path)
|
||||||
dialog.dismiss()
|
dialog.dismiss()
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,7 +84,7 @@ class ResizeDialog(val activity: SimpleActivity, val size: Point, val callback:
|
||||||
}
|
}
|
||||||
|
|
||||||
val newSize = Point(getViewValue(widthView), getViewValue(heightView))
|
val newSize = Point(getViewValue(widthView), getViewValue(heightView))
|
||||||
callback.invoke(newSize)
|
callback(newSize)
|
||||||
dismiss()
|
dismiss()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,11 +66,11 @@ class SaveAsDialog(val activity: SimpleActivity, val path: String, val callback:
|
||||||
if (newFile.exists()) {
|
if (newFile.exists()) {
|
||||||
val title = String.format(activity.getString(R.string.file_already_exists_overwrite), newFile.name)
|
val title = String.format(activity.getString(R.string.file_already_exists_overwrite), newFile.name)
|
||||||
ConfirmationDialog(activity, title) {
|
ConfirmationDialog(activity, title) {
|
||||||
callback.invoke(newFile.absolutePath)
|
callback(newFile.absolutePath)
|
||||||
dismiss()
|
dismiss()
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
callback.invoke(newFile.absolutePath)
|
callback(newFile.absolutePath)
|
||||||
dismiss()
|
dismiss()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -0,0 +1,99 @@
|
||||||
|
package com.simplemobiletools.gallery.dialogs
|
||||||
|
|
||||||
|
import android.support.v7.app.AlertDialog
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.WindowManager
|
||||||
|
import com.simplemobiletools.commons.extensions.hideKeyboard
|
||||||
|
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
||||||
|
import com.simplemobiletools.gallery.R
|
||||||
|
import com.simplemobiletools.gallery.activities.SimpleActivity
|
||||||
|
import com.simplemobiletools.gallery.extensions.config
|
||||||
|
import com.simplemobiletools.gallery.helpers.SLIDESHOW_DEFAULT_INTERVAL
|
||||||
|
import kotlinx.android.synthetic.main.dialog_slideshow.view.*
|
||||||
|
|
||||||
|
|
||||||
|
class SlideshowDialog(val activity: SimpleActivity, val callback: () -> Unit) {
|
||||||
|
val dialog: AlertDialog
|
||||||
|
val view: View
|
||||||
|
|
||||||
|
init {
|
||||||
|
view = LayoutInflater.from(activity).inflate(R.layout.dialog_slideshow, null).apply {
|
||||||
|
interval_value.setOnClickListener {
|
||||||
|
val text = interval_value.text
|
||||||
|
if (text.isNotEmpty()) {
|
||||||
|
text.replace(0, 1, text.subSequence(0, 1), 0, 1)
|
||||||
|
interval_value.selectAll()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
interval_value.setOnFocusChangeListener { v, hasFocus ->
|
||||||
|
if (!hasFocus)
|
||||||
|
activity.hideKeyboard(v)
|
||||||
|
}
|
||||||
|
|
||||||
|
include_photos_holder.setOnClickListener {
|
||||||
|
interval_value.clearFocus()
|
||||||
|
include_photos.toggle()
|
||||||
|
}
|
||||||
|
|
||||||
|
include_videos_holder.setOnClickListener {
|
||||||
|
interval_value.clearFocus()
|
||||||
|
include_videos.toggle()
|
||||||
|
}
|
||||||
|
|
||||||
|
random_order_holder.setOnClickListener {
|
||||||
|
interval_value.clearFocus()
|
||||||
|
random_order.toggle()
|
||||||
|
}
|
||||||
|
|
||||||
|
use_fade_holder.setOnClickListener {
|
||||||
|
interval_value.clearFocus()
|
||||||
|
use_fade.toggle()
|
||||||
|
}
|
||||||
|
|
||||||
|
move_backwards_holder.setOnClickListener {
|
||||||
|
interval_value.clearFocus()
|
||||||
|
move_backwards.toggle()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
setupValues()
|
||||||
|
|
||||||
|
dialog = AlertDialog.Builder(activity)
|
||||||
|
.setPositiveButton(R.string.ok, { dialog, which -> dialogConfirmed() })
|
||||||
|
.setNegativeButton(R.string.cancel, null)
|
||||||
|
.create().apply {
|
||||||
|
window!!.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN)
|
||||||
|
activity.setupDialogStuff(view, this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setupValues() {
|
||||||
|
val config = activity.config
|
||||||
|
view.apply {
|
||||||
|
interval_value.setText(config.slideshowInterval.toString())
|
||||||
|
include_photos.isChecked = config.slideshowIncludePhotos
|
||||||
|
include_videos.isChecked = config.slideshowIncludeVideos
|
||||||
|
random_order.isChecked = config.slideshowRandomOrder
|
||||||
|
use_fade.isChecked = config.slideshowUseFade
|
||||||
|
move_backwards.isChecked = config.slideshowMoveBackwards
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun dialogConfirmed() {
|
||||||
|
var interval = view.interval_value.text.toString()
|
||||||
|
if (interval.trim('0').isEmpty())
|
||||||
|
interval = SLIDESHOW_DEFAULT_INTERVAL.toString()
|
||||||
|
|
||||||
|
activity.config.apply {
|
||||||
|
slideshowInterval = interval.toInt()
|
||||||
|
slideshowIncludePhotos = view.include_photos.isChecked
|
||||||
|
slideshowIncludeVideos = view.include_videos.isChecked
|
||||||
|
slideshowRandomOrder = view.random_order.isChecked
|
||||||
|
slideshowUseFade = view.use_fade.isChecked
|
||||||
|
slideshowMoveBackwards = view.move_backwards.isChecked
|
||||||
|
}
|
||||||
|
dialog.dismiss()
|
||||||
|
callback()
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,24 +0,0 @@
|
||||||
package com.simplemobiletools.gallery.extensions
|
|
||||||
|
|
||||||
import android.content.res.ColorStateList
|
|
||||||
import android.graphics.Color
|
|
||||||
import android.graphics.drawable.ColorDrawable
|
|
||||||
import android.graphics.drawable.RippleDrawable
|
|
||||||
import android.graphics.drawable.StateListDrawable
|
|
||||||
import android.os.Build
|
|
||||||
import com.simplemobiletools.commons.extensions.adjustAlpha
|
|
||||||
|
|
||||||
fun Int.createSelector(): StateListDrawable {
|
|
||||||
val statelist = StateListDrawable()
|
|
||||||
val selectedDrawable = ColorDrawable(adjustAlpha(0.5f))
|
|
||||||
statelist.addState(intArrayOf(android.R.attr.state_selected), selectedDrawable)
|
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
|
|
||||||
val pressedDrawable = ColorDrawable(adjustAlpha(0.2f))
|
|
||||||
statelist.addState(intArrayOf(android.R.attr.state_pressed), pressedDrawable)
|
|
||||||
} else {
|
|
||||||
val pressedDrawable = RippleDrawable(ColorStateList.valueOf(adjustAlpha(0.2f)), null, ColorDrawable(Color.WHITE))
|
|
||||||
statelist.addState(intArrayOf(), pressedDrawable)
|
|
||||||
}
|
|
||||||
return statelist
|
|
||||||
}
|
|
|
@ -15,7 +15,8 @@ import android.view.ViewConfiguration
|
||||||
import com.bumptech.glide.Glide
|
import com.bumptech.glide.Glide
|
||||||
import com.bumptech.glide.load.DecodeFormat
|
import com.bumptech.glide.load.DecodeFormat
|
||||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||||
import com.bumptech.glide.signature.StringSignature
|
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions
|
||||||
|
import com.bumptech.glide.request.RequestOptions
|
||||||
import com.google.gson.Gson
|
import com.google.gson.Gson
|
||||||
import com.google.gson.reflect.TypeToken
|
import com.google.gson.reflect.TypeToken
|
||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
|
@ -194,7 +195,7 @@ fun Activity.launchCamera() {
|
||||||
|
|
||||||
fun SimpleActivity.launchAbout() {
|
fun SimpleActivity.launchAbout() {
|
||||||
startAboutActivity(R.string.app_name, LICENSE_KOTLIN or LICENSE_GLIDE or LICENSE_CROPPER or LICENSE_MULTISELECT or LICENSE_RTL
|
startAboutActivity(R.string.app_name, LICENSE_KOTLIN or LICENSE_GLIDE or LICENSE_CROPPER or LICENSE_MULTISELECT or LICENSE_RTL
|
||||||
or LICENSE_PHOTOVIEW or LICENSE_SUBSAMPLING, BuildConfig.VERSION_NAME)
|
or LICENSE_PHOTOVIEW or LICENSE_SUBSAMPLING or LICENSE_PATTERN, BuildConfig.VERSION_NAME)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun AppCompatActivity.showSystemUI() {
|
fun AppCompatActivity.showSystemUI() {
|
||||||
|
@ -262,8 +263,6 @@ fun SimpleActivity.toggleFileVisibility(oldFile: File, hide: Boolean, callback:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Activity.getFileSignature(path: String) = StringSignature(File(path).lastModified().toString())
|
|
||||||
|
|
||||||
fun Activity.loadImage(path: String, target: MySquareImageView, verticalScroll: Boolean) {
|
fun Activity.loadImage(path: String, target: MySquareImageView, verticalScroll: Boolean) {
|
||||||
target.isVerticalScrolling = verticalScroll
|
target.isVerticalScrolling = verticalScroll
|
||||||
if (path.isImageFast() || path.isVideoFast()) {
|
if (path.isImageFast() || path.isVideoFast()) {
|
||||||
|
@ -282,49 +281,55 @@ fun Activity.loadImage(path: String, target: MySquareImageView, verticalScroll:
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Activity.loadPng(path: String, target: MySquareImageView) {
|
fun Activity.loadPng(path: String, target: MySquareImageView) {
|
||||||
val builder = Glide.with(applicationContext)
|
val options = RequestOptions()
|
||||||
.load(path)
|
.signature(path.getFileSignature())
|
||||||
.asBitmap()
|
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
||||||
.signature(getFileSignature(path))
|
|
||||||
.diskCacheStrategy(DiskCacheStrategy.RESULT)
|
|
||||||
.format(DecodeFormat.PREFER_ARGB_8888)
|
.format(DecodeFormat.PREFER_ARGB_8888)
|
||||||
|
|
||||||
if (config.cropThumbnails) builder.centerCrop() else builder.fitCenter()
|
val builder = Glide.with(applicationContext)
|
||||||
builder.into(target)
|
.asBitmap()
|
||||||
|
.load(path)
|
||||||
|
|
||||||
|
if (config.cropThumbnails) options.centerCrop() else options.fitCenter()
|
||||||
|
builder.apply(options).into(target)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Activity.loadJpg(path: String, target: MySquareImageView) {
|
fun Activity.loadJpg(path: String, target: MySquareImageView) {
|
||||||
|
val options = RequestOptions()
|
||||||
|
.signature(path.getFileSignature())
|
||||||
|
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
||||||
|
|
||||||
val builder = Glide.with(applicationContext)
|
val builder = Glide.with(applicationContext)
|
||||||
.load(path)
|
.load(path)
|
||||||
.signature(getFileSignature(path))
|
|
||||||
.diskCacheStrategy(DiskCacheStrategy.RESULT)
|
|
||||||
.crossFade()
|
|
||||||
|
|
||||||
if (config.cropThumbnails) builder.centerCrop() else builder.fitCenter()
|
if (config.cropThumbnails) options.centerCrop() else options.fitCenter()
|
||||||
builder.into(target)
|
builder.apply(options).transition(DrawableTransitionOptions.withCrossFade()).into(target)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Activity.loadAnimatedGif(path: String, target: MySquareImageView) {
|
fun Activity.loadAnimatedGif(path: String, target: MySquareImageView) {
|
||||||
val builder = Glide.with(applicationContext)
|
val options = RequestOptions()
|
||||||
.load(path)
|
.signature(path.getFileSignature())
|
||||||
.asGif()
|
|
||||||
.signature(getFileSignature(path))
|
|
||||||
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
||||||
.crossFade()
|
|
||||||
|
|
||||||
if (config.cropThumbnails) builder.centerCrop() else builder.fitCenter()
|
val builder = Glide.with(applicationContext)
|
||||||
builder.into(target)
|
.asGif()
|
||||||
|
.load(path)
|
||||||
|
|
||||||
|
if (config.cropThumbnails) options.centerCrop() else options.fitCenter()
|
||||||
|
builder.apply(options).transition(DrawableTransitionOptions.withCrossFade()).into(target)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Activity.loadStaticGif(path: String, target: MySquareImageView) {
|
fun Activity.loadStaticGif(path: String, target: MySquareImageView) {
|
||||||
val builder = Glide.with(applicationContext)
|
val options = RequestOptions()
|
||||||
.load(path)
|
.signature(path.getFileSignature())
|
||||||
.asBitmap()
|
.diskCacheStrategy(DiskCacheStrategy.DATA)
|
||||||
.signature(getFileSignature(path))
|
|
||||||
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
|
|
||||||
|
|
||||||
if (config.cropThumbnails) builder.centerCrop() else builder.fitCenter()
|
val builder = Glide.with(applicationContext)
|
||||||
builder.into(target)
|
.asBitmap()
|
||||||
|
.load(path)
|
||||||
|
|
||||||
|
if (config.cropThumbnails) options.centerCrop() else options.fitCenter()
|
||||||
|
builder.apply(options).into(target)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Activity.getCachedDirectories(): ArrayList<Directory> {
|
fun Activity.getCachedDirectories(): ArrayList<Directory> {
|
||||||
|
|
|
@ -4,6 +4,7 @@ import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.res.Configuration
|
import android.content.res.Configuration
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
|
import android.media.AudioManager
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.provider.MediaStore
|
import android.provider.MediaStore
|
||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
|
@ -21,6 +22,7 @@ import java.io.File
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
val Context.portrait get() = resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT
|
val Context.portrait get() = resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT
|
||||||
|
val Context.audioManager get() = getSystemService(Context.AUDIO_SERVICE) as AudioManager
|
||||||
|
|
||||||
fun Context.getRealPathFromURI(uri: Uri): String? {
|
fun Context.getRealPathFromURI(uri: Uri): String? {
|
||||||
var cursor: Cursor? = null
|
var cursor: Cursor? = null
|
||||||
|
@ -73,6 +75,7 @@ private fun parseCursor(context: Context, cur: Cursor, isPickImage: Boolean, isP
|
||||||
val config = context.config
|
val config = context.config
|
||||||
val showMedia = config.showMedia
|
val showMedia = config.showMedia
|
||||||
val showHidden = config.shouldShowHidden
|
val showHidden = config.shouldShowHidden
|
||||||
|
val includedFolders = config.includedFolders
|
||||||
val excludedFolders = config.excludedFolders
|
val excludedFolders = config.excludedFolders
|
||||||
val noMediaFolders = context.getNoMediaFolders()
|
val noMediaFolders = context.getNoMediaFolders()
|
||||||
|
|
||||||
|
@ -111,14 +114,19 @@ private fun parseCursor(context: Context, cur: Cursor, isPickImage: Boolean, isP
|
||||||
|
|
||||||
var isExcluded = false
|
var isExcluded = false
|
||||||
excludedFolders.forEach {
|
excludedFolders.forEach {
|
||||||
if (path.startsWith(it)) {
|
if (path.startsWith("$it/")) {
|
||||||
isExcluded = true
|
isExcluded = true
|
||||||
|
includedFolders.forEach {
|
||||||
|
if (path.startsWith("$it/")) {
|
||||||
|
isExcluded = false
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isExcluded && !showHidden) {
|
if (!isExcluded && !showHidden) {
|
||||||
noMediaFolders.forEach {
|
noMediaFolders.forEach {
|
||||||
if (path.startsWith(it)) {
|
if (path.startsWith("$it/")) {
|
||||||
isExcluded = true
|
isExcluded = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -142,7 +150,7 @@ private fun parseCursor(context: Context, cur: Cursor, isPickImage: Boolean, isP
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
config.includedFolders.filter { it.isEmpty() || it == curPath }.mapNotNull { File(it).listFiles() }.forEach {
|
config.includedFolders.filter { it.isNotEmpty() && (curPath.isEmpty() || it == curPath) }.mapNotNull { File(it).listFiles() }.forEach {
|
||||||
for (file in it) {
|
for (file in it) {
|
||||||
val size = file.length()
|
val size = file.length()
|
||||||
if (size <= 0L) {
|
if (size <= 0L) {
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
package com.simplemobiletools.gallery.extensions
|
||||||
|
|
||||||
|
import com.bumptech.glide.signature.ObjectKey
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
|
fun String.getFileSignature() = ObjectKey(File(this).lastModified().toString())
|
|
@ -7,15 +7,20 @@ import android.graphics.Color
|
||||||
import android.graphics.Matrix
|
import android.graphics.Matrix
|
||||||
import android.graphics.drawable.ColorDrawable
|
import android.graphics.drawable.ColorDrawable
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import com.bumptech.glide.Glide
|
import com.bumptech.glide.Glide
|
||||||
import com.bumptech.glide.Priority
|
import com.bumptech.glide.Priority
|
||||||
|
import com.bumptech.glide.load.DataSource
|
||||||
import com.bumptech.glide.load.DecodeFormat
|
import com.bumptech.glide.load.DecodeFormat
|
||||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||||
|
import com.bumptech.glide.load.engine.GlideException
|
||||||
|
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions
|
||||||
import com.bumptech.glide.request.RequestListener
|
import com.bumptech.glide.request.RequestListener
|
||||||
|
import com.bumptech.glide.request.RequestOptions
|
||||||
import com.bumptech.glide.request.target.Target
|
import com.bumptech.glide.request.target.Target
|
||||||
import com.davemorrissey.labs.subscaleview.ImageSource
|
import com.davemorrissey.labs.subscaleview.ImageSource
|
||||||
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
|
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
|
||||||
|
@ -33,7 +38,6 @@ import com.simplemobiletools.gallery.helpers.MEDIUM
|
||||||
import com.simplemobiletools.gallery.models.Medium
|
import com.simplemobiletools.gallery.models.Medium
|
||||||
import it.sephiroth.android.library.exif2.ExifInterface
|
import it.sephiroth.android.library.exif2.ExifInterface
|
||||||
import kotlinx.android.synthetic.main.pager_photo_item.view.*
|
import kotlinx.android.synthetic.main.pager_photo_item.view.*
|
||||||
import uk.co.senab.photoview.PhotoViewAttacher
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.FileOutputStream
|
import java.io.FileOutputStream
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
|
@ -43,7 +47,6 @@ class PhotoFragment : ViewPagerFragment() {
|
||||||
lateinit var view: ViewGroup
|
lateinit var view: ViewGroup
|
||||||
private var isFragmentVisible = false
|
private var isFragmentVisible = false
|
||||||
private var wasInit = false
|
private var wasInit = false
|
||||||
private var RATIO_THRESHOLD = 0.1
|
|
||||||
|
|
||||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
|
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
|
||||||
view = inflater.inflate(R.layout.pager_photo_item, container, false) as ViewGroup
|
view = inflater.inflate(R.layout.pager_photo_item, container, false) as ViewGroup
|
||||||
|
@ -89,21 +92,16 @@ class PhotoFragment : ViewPagerFragment() {
|
||||||
view.photo_view.apply {
|
view.photo_view.apply {
|
||||||
maximumScale = 8f
|
maximumScale = 8f
|
||||||
mediumScale = 3f
|
mediumScale = 3f
|
||||||
setOnPhotoTapListener(object : PhotoViewAttacher.OnPhotoTapListener {
|
setOnOutsidePhotoTapListener {
|
||||||
override fun onPhotoTap(view: View?, x: Float, y: Float) {
|
|
||||||
photoClicked()
|
photoClicked()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onOutsidePhotoTap() {
|
setOnPhotoTapListener { view, x, y ->
|
||||||
photoClicked()
|
photoClicked()
|
||||||
}
|
}
|
||||||
})
|
|
||||||
}
|
}
|
||||||
loadImage()
|
loadImage()
|
||||||
|
|
||||||
activity.window.decorView.setOnSystemUiVisibilityChangeListener { visibility ->
|
|
||||||
listener?.systemUiVisibilityChanged(visibility)
|
|
||||||
}
|
|
||||||
wasInit = true
|
wasInit = true
|
||||||
|
|
||||||
return view
|
return view
|
||||||
|
@ -147,12 +145,15 @@ class PhotoFragment : ViewPagerFragment() {
|
||||||
|
|
||||||
private fun loadImage() {
|
private fun loadImage() {
|
||||||
if (medium.isGif()) {
|
if (medium.isGif()) {
|
||||||
Glide.with(this)
|
val options = RequestOptions()
|
||||||
.load(medium.path)
|
|
||||||
.asGif()
|
|
||||||
.crossFade()
|
|
||||||
.priority(if (isFragmentVisible) Priority.IMMEDIATE else Priority.LOW)
|
.priority(if (isFragmentVisible) Priority.IMMEDIATE else Priority.LOW)
|
||||||
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
|
.diskCacheStrategy(DiskCacheStrategy.DATA)
|
||||||
|
|
||||||
|
Glide.with(this)
|
||||||
|
.asGif()
|
||||||
|
.load(medium.path)
|
||||||
|
.transition(DrawableTransitionOptions.withCrossFade())
|
||||||
|
.apply(options)
|
||||||
.into(view.photo_view)
|
.into(view.photo_view)
|
||||||
} else {
|
} else {
|
||||||
loadBitmap()
|
loadBitmap()
|
||||||
|
@ -164,31 +165,37 @@ class PhotoFragment : ViewPagerFragment() {
|
||||||
val targetWidth = if (ViewPagerActivity.screenWidth == 0) Target.SIZE_ORIGINAL else ViewPagerActivity.screenWidth
|
val targetWidth = if (ViewPagerActivity.screenWidth == 0) Target.SIZE_ORIGINAL else ViewPagerActivity.screenWidth
|
||||||
val targetHeight = if (ViewPagerActivity.screenHeight == 0) Target.SIZE_ORIGINAL else ViewPagerActivity.screenHeight
|
val targetHeight = if (ViewPagerActivity.screenHeight == 0) Target.SIZE_ORIGINAL else ViewPagerActivity.screenHeight
|
||||||
|
|
||||||
Glide.with(this)
|
val options = RequestOptions()
|
||||||
.load(medium.path)
|
.signature(medium.path.getFileSignature())
|
||||||
.asBitmap()
|
.format(DecodeFormat.PREFER_ARGB_8888)
|
||||||
.signature(activity.getFileSignature(medium.path))
|
|
||||||
.format(if (medium.isPng()) DecodeFormat.PREFER_ARGB_8888 else DecodeFormat.PREFER_RGB_565)
|
|
||||||
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
||||||
.override(targetWidth, targetHeight)
|
.override(targetWidth, targetHeight)
|
||||||
.listener(object : RequestListener<String, Bitmap> {
|
|
||||||
override fun onException(e: Exception?, model: String?, target: Target<Bitmap>?, isFirstResource: Boolean): Boolean {
|
Glide.with(this)
|
||||||
|
.asBitmap()
|
||||||
|
.load(medium.path)
|
||||||
|
.apply(options)
|
||||||
|
.listener(object : RequestListener<Bitmap> {
|
||||||
|
override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Bitmap>?, isFirstResource: Boolean): Boolean {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResourceReady(resource: Bitmap, model: String?, target: Target<Bitmap>?, isFromMemoryCache: Boolean, isFirstResource: Boolean): Boolean {
|
override fun onResourceReady(resource: Bitmap?, model: Any?, target: Target<Bitmap>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
|
||||||
if (isFragmentVisible)
|
if (isFragmentVisible)
|
||||||
addZoomableView()
|
addZoomableView()
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}).into(view.photo_view)
|
}).into(view.photo_view)
|
||||||
} else {
|
} else {
|
||||||
Glide.with(this)
|
val options = RequestOptions()
|
||||||
.load(medium.path)
|
|
||||||
.asBitmap()
|
|
||||||
.transform(GlideRotateTransformation(context, degrees))
|
|
||||||
.thumbnail(0.2f)
|
|
||||||
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
||||||
|
.transform(GlideRotateTransformation(context, degrees))
|
||||||
|
|
||||||
|
Glide.with(this)
|
||||||
|
.asBitmap()
|
||||||
|
.load(medium.path)
|
||||||
|
.thumbnail(0.2f)
|
||||||
|
.apply(options)
|
||||||
.into(view.photo_view)
|
.into(view.photo_view)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -249,9 +256,9 @@ class PhotoFragment : ViewPagerFragment() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroyView() {
|
fun refreshBitmap() {
|
||||||
super.onDestroyView()
|
view.subsampling_view.beGone()
|
||||||
Glide.clear(view.photo_view)
|
loadBitmap()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun rotateImageViewBy(degrees: Float) {
|
fun rotateImageViewBy(degrees: Float) {
|
||||||
|
@ -259,7 +266,14 @@ class PhotoFragment : ViewPagerFragment() {
|
||||||
loadBitmap(degrees)
|
loadBitmap(degrees)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onConfigurationChanged(newConfig: Configuration?) {
|
override fun onDestroyView() {
|
||||||
|
super.onDestroyView()
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && !activity.isDestroyed) {
|
||||||
|
Glide.with(context).clear(view.photo_view)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onConfigurationChanged(newConfig: Configuration) {
|
||||||
super.onConfigurationChanged(newConfig)
|
super.onConfigurationChanged(newConfig)
|
||||||
loadImage()
|
loadImage()
|
||||||
}
|
}
|
||||||
|
@ -267,4 +281,8 @@ class PhotoFragment : ViewPagerFragment() {
|
||||||
private fun photoClicked() {
|
private fun photoClicked() {
|
||||||
listener?.fragmentClicked()
|
listener?.fragmentClicked()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun fullscreenToggled(isFullscreen: Boolean) {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import android.net.Uri
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
|
import android.provider.Settings
|
||||||
import android.util.DisplayMetrics
|
import android.util.DisplayMetrics
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.view.*
|
import android.view.*
|
||||||
|
@ -17,6 +18,8 @@ import com.simplemobiletools.commons.extensions.getFormattedDuration
|
||||||
import com.simplemobiletools.commons.extensions.toast
|
import com.simplemobiletools.commons.extensions.toast
|
||||||
import com.simplemobiletools.commons.extensions.updateTextColors
|
import com.simplemobiletools.commons.extensions.updateTextColors
|
||||||
import com.simplemobiletools.gallery.R
|
import com.simplemobiletools.gallery.R
|
||||||
|
import com.simplemobiletools.gallery.activities.ViewPagerActivity
|
||||||
|
import com.simplemobiletools.gallery.extensions.audioManager
|
||||||
import com.simplemobiletools.gallery.extensions.config
|
import com.simplemobiletools.gallery.extensions.config
|
||||||
import com.simplemobiletools.gallery.extensions.getNavBarHeight
|
import com.simplemobiletools.gallery.extensions.getNavBarHeight
|
||||||
import com.simplemobiletools.gallery.extensions.hasNavBar
|
import com.simplemobiletools.gallery.extensions.hasNavBar
|
||||||
|
@ -26,6 +29,8 @@ import kotlinx.android.synthetic.main.pager_video_item.view.*
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
|
|
||||||
class VideoFragment : ViewPagerFragment(), SurfaceHolder.Callback, SeekBar.OnSeekBarChangeListener {
|
class VideoFragment : ViewPagerFragment(), SurfaceHolder.Callback, SeekBar.OnSeekBarChangeListener {
|
||||||
|
private val CLICK_MAX_DURATION = 150
|
||||||
|
private val SLIDE_INFO_FADE_DELAY = 1000L
|
||||||
|
|
||||||
private var mMediaPlayer: MediaPlayer? = null
|
private var mMediaPlayer: MediaPlayer? = null
|
||||||
private var mSurfaceView: SurfaceView? = null
|
private var mSurfaceView: SurfaceView? = null
|
||||||
|
@ -39,9 +44,21 @@ class VideoFragment : ViewPagerFragment(), SurfaceHolder.Callback, SeekBar.OnSee
|
||||||
private var mIsDragged = false
|
private var mIsDragged = false
|
||||||
private var mIsFullscreen = false
|
private var mIsFullscreen = false
|
||||||
private var mIsFragmentVisible = false
|
private var mIsFragmentVisible = false
|
||||||
|
private var mPlayOnPrepare = false
|
||||||
private var mCurrTime = 0
|
private var mCurrTime = 0
|
||||||
private var mDuration = 0
|
private var mDuration = 0
|
||||||
|
|
||||||
|
private var mTouchDownX = 0f
|
||||||
|
private var mTouchDownY = 0f
|
||||||
|
private var mTouchDownTime = 0L
|
||||||
|
private var mTouchDownVolume = 0
|
||||||
|
private var mTouchDownBrightness = -1
|
||||||
|
private var mTempBrightness = 0
|
||||||
|
private var mLastTouchY = 0f
|
||||||
|
|
||||||
|
private var mSlideInfoText = ""
|
||||||
|
private var mSlideInfoFadeHandler = Handler()
|
||||||
|
|
||||||
lateinit var mView: View
|
lateinit var mView: View
|
||||||
lateinit var medium: Medium
|
lateinit var medium: Medium
|
||||||
|
|
||||||
|
@ -60,13 +77,7 @@ class VideoFragment : ViewPagerFragment(), SurfaceHolder.Callback, SeekBar.OnSee
|
||||||
}
|
}
|
||||||
|
|
||||||
mIsFullscreen = activity.window.decorView.systemUiVisibility and View.SYSTEM_UI_FLAG_FULLSCREEN == View.SYSTEM_UI_FLAG_FULLSCREEN
|
mIsFullscreen = activity.window.decorView.systemUiVisibility and View.SYSTEM_UI_FLAG_FULLSCREEN == View.SYSTEM_UI_FLAG_FULLSCREEN
|
||||||
|
|
||||||
activity.window.decorView.setOnSystemUiVisibilityChangeListener { visibility ->
|
|
||||||
val fullscreen = visibility and View.SYSTEM_UI_FLAG_FULLSCREEN != 0
|
|
||||||
mIsFullscreen = fullscreen
|
|
||||||
checkFullscreen()
|
checkFullscreen()
|
||||||
listener?.systemUiVisibilityChanged(visibility)
|
|
||||||
}
|
|
||||||
|
|
||||||
return mView
|
return mView
|
||||||
}
|
}
|
||||||
|
@ -87,6 +98,15 @@ class VideoFragment : ViewPagerFragment(), SurfaceHolder.Callback, SeekBar.OnSee
|
||||||
mSurfaceHolder!!.addCallback(this)
|
mSurfaceHolder!!.addCallback(this)
|
||||||
mSurfaceView!!.setOnClickListener({ toggleFullscreen() })
|
mSurfaceView!!.setOnClickListener({ toggleFullscreen() })
|
||||||
mView.video_holder.setOnClickListener { toggleFullscreen() }
|
mView.video_holder.setOnClickListener { toggleFullscreen() }
|
||||||
|
mView.video_volume_controller.setOnTouchListener { v, event ->
|
||||||
|
handleVolumeTouched(event)
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
|
mView.video_brightness_controller.setOnTouchListener { v, event ->
|
||||||
|
handleBrightnessTouched(event)
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
initTimeHolder()
|
initTimeHolder()
|
||||||
}
|
}
|
||||||
|
@ -95,8 +115,9 @@ class VideoFragment : ViewPagerFragment(), SurfaceHolder.Callback, SeekBar.OnSee
|
||||||
super.setMenuVisibility(menuVisible)
|
super.setMenuVisibility(menuVisible)
|
||||||
mIsFragmentVisible = menuVisible
|
mIsFragmentVisible = menuVisible
|
||||||
if (menuVisible) {
|
if (menuVisible) {
|
||||||
if (mSurfaceView != null)
|
if (mSurfaceView != null && mSurfaceHolder!!.surface.isValid) {
|
||||||
initMediaPlayer()
|
initMediaPlayer()
|
||||||
|
}
|
||||||
|
|
||||||
if (context?.config?.autoplayVideos == true) {
|
if (context?.config?.autoplayVideos == true) {
|
||||||
playVideo()
|
playVideo()
|
||||||
|
@ -106,18 +127,135 @@ class VideoFragment : ViewPagerFragment(), SurfaceHolder.Callback, SeekBar.OnSee
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onConfigurationChanged(newConfig: Configuration?) {
|
override fun onConfigurationChanged(newConfig: Configuration) {
|
||||||
super.onConfigurationChanged(newConfig)
|
super.onConfigurationChanged(newConfig)
|
||||||
setVideoSize()
|
setVideoSize()
|
||||||
initTimeHolder()
|
initTimeHolder()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun toggleFullscreen() {
|
private fun toggleFullscreen() {
|
||||||
mIsFullscreen = !mIsFullscreen
|
|
||||||
checkFullscreen()
|
|
||||||
listener?.fragmentClicked()
|
listener?.fragmentClicked()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun handleVolumeTouched(event: MotionEvent) {
|
||||||
|
when (event.action) {
|
||||||
|
MotionEvent.ACTION_DOWN -> {
|
||||||
|
mTouchDownX = event.x
|
||||||
|
mTouchDownY = event.y
|
||||||
|
mLastTouchY = event.y
|
||||||
|
mTouchDownTime = System.currentTimeMillis()
|
||||||
|
mTouchDownVolume = getCurrentVolume()
|
||||||
|
mSlideInfoText = "${getString(R.string.volume)}:\n"
|
||||||
|
}
|
||||||
|
MotionEvent.ACTION_MOVE -> {
|
||||||
|
val diffX = mTouchDownX - event.x
|
||||||
|
val diffY = mTouchDownY - event.y
|
||||||
|
|
||||||
|
if (Math.abs(diffY) > Math.abs(diffX)) {
|
||||||
|
var percent = ((diffY / ViewPagerActivity.screenHeight) * 100).toInt() * 3
|
||||||
|
percent = Math.min(100, Math.max(-100, percent))
|
||||||
|
|
||||||
|
if ((percent == 100 && event.y > mLastTouchY) || (percent == -100 && event.y < mLastTouchY)) {
|
||||||
|
mTouchDownY = event.y
|
||||||
|
mTouchDownVolume = getCurrentVolume()
|
||||||
|
}
|
||||||
|
|
||||||
|
volumePercentChanged(percent)
|
||||||
|
}
|
||||||
|
mLastTouchY = event.y
|
||||||
|
}
|
||||||
|
MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> {
|
||||||
|
if (System.currentTimeMillis() - mTouchDownTime < CLICK_MAX_DURATION) {
|
||||||
|
mView.video_holder.performClick()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun handleBrightnessTouched(event: MotionEvent) {
|
||||||
|
when (event.action) {
|
||||||
|
MotionEvent.ACTION_DOWN -> {
|
||||||
|
mTouchDownX = event.x
|
||||||
|
mTouchDownY = event.y
|
||||||
|
mLastTouchY = event.y
|
||||||
|
mTouchDownTime = System.currentTimeMillis()
|
||||||
|
mSlideInfoText = "${getString(R.string.brightness)}:\n"
|
||||||
|
if (mTouchDownBrightness == -1)
|
||||||
|
mTouchDownBrightness = getCurrentBrightness()
|
||||||
|
}
|
||||||
|
MotionEvent.ACTION_MOVE -> {
|
||||||
|
val diffX = mTouchDownX - event.x
|
||||||
|
val diffY = mTouchDownY - event.y
|
||||||
|
|
||||||
|
if (Math.abs(diffY) > Math.abs(diffX)) {
|
||||||
|
var percent = ((diffY / ViewPagerActivity.screenHeight) * 100).toInt() * 3
|
||||||
|
percent = Math.min(100, Math.max(-100, percent))
|
||||||
|
|
||||||
|
if ((percent == 100 && event.y > mLastTouchY) || (percent == -100 && event.y < mLastTouchY)) {
|
||||||
|
mTouchDownY = event.y
|
||||||
|
mTouchDownBrightness = mTempBrightness
|
||||||
|
}
|
||||||
|
|
||||||
|
brightnessPercentChanged(percent)
|
||||||
|
}
|
||||||
|
mLastTouchY = event.y
|
||||||
|
}
|
||||||
|
MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> {
|
||||||
|
if (System.currentTimeMillis() - mTouchDownTime < CLICK_MAX_DURATION) {
|
||||||
|
mView.video_holder.performClick()
|
||||||
|
}
|
||||||
|
mTouchDownBrightness = mTempBrightness
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mView.video_holder
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getCurrentVolume() = context.audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)
|
||||||
|
|
||||||
|
private fun getCurrentBrightness() = Settings.System.getInt(activity.contentResolver, Settings.System.SCREEN_BRIGHTNESS)
|
||||||
|
|
||||||
|
private fun volumePercentChanged(percent: Int) {
|
||||||
|
val stream = AudioManager.STREAM_MUSIC
|
||||||
|
val maxVolume = context.audioManager.getStreamMaxVolume(stream)
|
||||||
|
val percentPerPoint = 100 / maxVolume
|
||||||
|
val addPoints = percent / percentPerPoint
|
||||||
|
val newVolume = Math.min(maxVolume, Math.max(0, mTouchDownVolume + addPoints))
|
||||||
|
context.audioManager.setStreamVolume(stream, newVolume, 0)
|
||||||
|
|
||||||
|
val absolutePercent = ((newVolume / maxVolume.toFloat()) * 100).toInt()
|
||||||
|
mView.slide_info.apply {
|
||||||
|
text = "$mSlideInfoText$absolutePercent%"
|
||||||
|
alpha = 1f
|
||||||
|
}
|
||||||
|
|
||||||
|
mSlideInfoFadeHandler.removeCallbacksAndMessages(null)
|
||||||
|
mSlideInfoFadeHandler.postDelayed({
|
||||||
|
mView.slide_info.animate().alpha(0f)
|
||||||
|
}, SLIDE_INFO_FADE_DELAY)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun brightnessPercentChanged(percent: Int) {
|
||||||
|
val maxBrightness = 255f
|
||||||
|
var newBrightness = (mTouchDownBrightness + 2.55 * percent).toFloat()
|
||||||
|
newBrightness = Math.min(maxBrightness, Math.max(0f, newBrightness))
|
||||||
|
mTempBrightness = newBrightness.toInt()
|
||||||
|
|
||||||
|
val absolutePercent = ((newBrightness / maxBrightness) * 100).toInt()
|
||||||
|
mView.slide_info.apply {
|
||||||
|
text = "$mSlideInfoText$absolutePercent%"
|
||||||
|
alpha = 1f
|
||||||
|
}
|
||||||
|
|
||||||
|
val attributes = activity.window.attributes
|
||||||
|
attributes.screenBrightness = absolutePercent / 100f
|
||||||
|
activity.window.attributes = attributes
|
||||||
|
|
||||||
|
mSlideInfoFadeHandler.removeCallbacksAndMessages(null)
|
||||||
|
mSlideInfoFadeHandler.postDelayed({
|
||||||
|
mView.slide_info.animate().alpha(0f)
|
||||||
|
}, SLIDE_INFO_FADE_DELAY)
|
||||||
|
}
|
||||||
|
|
||||||
private fun initTimeHolder() {
|
private fun initTimeHolder() {
|
||||||
mTimeHolder = mView.video_time_holder
|
mTimeHolder = mView.video_time_holder
|
||||||
val res = resources
|
val res = resources
|
||||||
|
@ -201,9 +339,13 @@ class VideoFragment : ViewPagerFragment(), SurfaceHolder.Callback, SeekBar.OnSee
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun playVideo() {
|
fun playVideo() {
|
||||||
|
if (mMediaPlayer != null) {
|
||||||
mIsPlaying = true
|
mIsPlaying = true
|
||||||
mMediaPlayer?.start()
|
mMediaPlayer?.start()
|
||||||
|
} else {
|
||||||
|
mPlayOnPrepare = true
|
||||||
|
}
|
||||||
mView.video_play_outline.setImageDrawable(null)
|
mView.video_play_outline.setImageDrawable(null)
|
||||||
activity.window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
activity.window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
||||||
}
|
}
|
||||||
|
@ -278,12 +420,12 @@ class VideoFragment : ViewPagerFragment(), SurfaceHolder.Callback, SeekBar.OnSee
|
||||||
setupTimeHolder()
|
setupTimeHolder()
|
||||||
setProgress(mCurrTime)
|
setProgress(mCurrTime)
|
||||||
|
|
||||||
if (mIsFragmentVisible && context.config.autoplayVideos)
|
if (mIsFragmentVisible && (context.config.autoplayVideos || mPlayOnPrepare))
|
||||||
playVideo()
|
playVideo()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun videoCompleted() {
|
private fun videoCompleted() {
|
||||||
if (context.config.loopVideos) {
|
if (listener?.videoEnded() == false && context.config.loopVideos) {
|
||||||
playVideo()
|
playVideo()
|
||||||
} else {
|
} else {
|
||||||
mSeekBar!!.progress = mSeekBar!!.max
|
mSeekBar!!.progress = mSeekBar!!.max
|
||||||
|
@ -366,9 +508,14 @@ class VideoFragment : ViewPagerFragment(), SurfaceHolder.Callback, SeekBar.OnSee
|
||||||
if (!mIsPlaying) {
|
if (!mIsPlaying) {
|
||||||
togglePlayPause()
|
togglePlayPause()
|
||||||
} else {
|
} else {
|
||||||
mMediaPlayer!!.start()
|
mMediaPlayer?.start()
|
||||||
}
|
}
|
||||||
|
|
||||||
mIsDragged = false
|
mIsDragged = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun fullscreenToggled(isFullscreen: Boolean) {
|
||||||
|
mIsFullscreen = isFullscreen
|
||||||
|
checkFullscreen()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,9 +5,11 @@ import android.support.v4.app.Fragment
|
||||||
abstract class ViewPagerFragment : Fragment() {
|
abstract class ViewPagerFragment : Fragment() {
|
||||||
var listener: FragmentListener? = null
|
var listener: FragmentListener? = null
|
||||||
|
|
||||||
|
abstract fun fullscreenToggled(isFullscreen: Boolean)
|
||||||
|
|
||||||
interface FragmentListener {
|
interface FragmentListener {
|
||||||
fun fragmentClicked()
|
fun fragmentClicked()
|
||||||
|
|
||||||
fun systemUiVisibilityChanged(visibility: Int)
|
fun videoEnded(): Boolean
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -224,4 +224,36 @@ class Config(context: Context) : BaseConfig(context) {
|
||||||
var scrollHorizontally: Boolean
|
var scrollHorizontally: Boolean
|
||||||
get() = prefs.getBoolean(SCROLL_HORIZONTALLY, false)
|
get() = prefs.getBoolean(SCROLL_HORIZONTALLY, false)
|
||||||
set(scrollHorizontally) = prefs.edit().putBoolean(SCROLL_HORIZONTALLY, scrollHorizontally).apply()
|
set(scrollHorizontally) = prefs.edit().putBoolean(SCROLL_HORIZONTALLY, scrollHorizontally).apply()
|
||||||
|
|
||||||
|
var hideSystemUI: Boolean
|
||||||
|
get() = prefs.getBoolean(HIDE_SYSTEM_UI, false)
|
||||||
|
set(hideSystemUI) = prefs.edit().putBoolean(HIDE_SYSTEM_UI, hideSystemUI).apply()
|
||||||
|
|
||||||
|
var replaceShare: Boolean
|
||||||
|
get() = prefs.getBoolean(REPLACE_SHARE_WITH_ROTATE, false)
|
||||||
|
set(replaceShare) = prefs.edit().putBoolean(REPLACE_SHARE_WITH_ROTATE, replaceShare).apply()
|
||||||
|
|
||||||
|
var slideshowInterval: Int
|
||||||
|
get() = prefs.getInt(SLIDESHOW_INTERVAL, SLIDESHOW_DEFAULT_INTERVAL)
|
||||||
|
set(slideshowInterval) = prefs.edit().putInt(SLIDESHOW_INTERVAL, slideshowInterval).apply()
|
||||||
|
|
||||||
|
var slideshowIncludePhotos: Boolean
|
||||||
|
get() = prefs.getBoolean(SLIDESHOW_INCLUDE_PHOTOS, true)
|
||||||
|
set(slideshowIncludePhotos) = prefs.edit().putBoolean(SLIDESHOW_INCLUDE_PHOTOS, slideshowIncludePhotos).apply()
|
||||||
|
|
||||||
|
var slideshowIncludeVideos: Boolean
|
||||||
|
get() = prefs.getBoolean(SLIDESHOW_INCLUDE_VIDEOS, false)
|
||||||
|
set(slideshowIncludeVideos) = prefs.edit().putBoolean(SLIDESHOW_INCLUDE_VIDEOS, slideshowIncludeVideos).apply()
|
||||||
|
|
||||||
|
var slideshowRandomOrder: Boolean
|
||||||
|
get() = prefs.getBoolean(SLIDESHOW_RANDOM_ORDER, false)
|
||||||
|
set(slideshowRandomOrder) = prefs.edit().putBoolean(SLIDESHOW_RANDOM_ORDER, slideshowRandomOrder).apply()
|
||||||
|
|
||||||
|
var slideshowUseFade: Boolean
|
||||||
|
get() = prefs.getBoolean(SLIDESHOW_USE_FADE, false)
|
||||||
|
set(slideshowUseFade) = prefs.edit().putBoolean(SLIDESHOW_USE_FADE, slideshowUseFade).apply()
|
||||||
|
|
||||||
|
var slideshowMoveBackwards: Boolean
|
||||||
|
get() = prefs.getBoolean(SLIDESHOW_MOVE_BACKWARDS, false)
|
||||||
|
set(slideshowMoveBackwards) = prefs.edit().putBoolean(SLIDESHOW_MOVE_BACKWARDS, slideshowMoveBackwards).apply()
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,17 @@ val EXCLUDED_FOLDERS = "excluded_folders"
|
||||||
val INCLUDED_FOLDERS = "included_folders"
|
val INCLUDED_FOLDERS = "included_folders"
|
||||||
val ALBUM_COVERS = "album_covers"
|
val ALBUM_COVERS = "album_covers"
|
||||||
val SCROLL_HORIZONTALLY = "scroll_horizontally"
|
val SCROLL_HORIZONTALLY = "scroll_horizontally"
|
||||||
|
val HIDE_SYSTEM_UI = "hide_system_ui"
|
||||||
|
val REPLACE_SHARE_WITH_ROTATE = "replace_share_with_rotate"
|
||||||
|
|
||||||
|
// slideshow
|
||||||
|
val SLIDESHOW_INTERVAL = "slideshow_interval"
|
||||||
|
val SLIDESHOW_INCLUDE_PHOTOS = "slideshow_include_photos"
|
||||||
|
val SLIDESHOW_INCLUDE_VIDEOS = "slideshow_include_videos"
|
||||||
|
val SLIDESHOW_RANDOM_ORDER = "slideshow_random_order"
|
||||||
|
val SLIDESHOW_USE_FADE = "slideshow_use_fade"
|
||||||
|
val SLIDESHOW_MOVE_BACKWARDS = "slideshow_move_backwards"
|
||||||
|
val SLIDESHOW_DEFAULT_INTERVAL = 5
|
||||||
|
|
||||||
val NOMEDIA = ".nomedia"
|
val NOMEDIA = ".nomedia"
|
||||||
|
|
||||||
|
|
|
@ -5,9 +5,9 @@ import android.graphics.Bitmap
|
||||||
import android.graphics.Matrix
|
import android.graphics.Matrix
|
||||||
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool
|
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool
|
||||||
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation
|
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation
|
||||||
|
import java.security.MessageDigest
|
||||||
|
|
||||||
class GlideRotateTransformation(context: Context, val rotateRotationAngle: Float) : BitmapTransformation(context) {
|
class GlideRotateTransformation(context: Context, val rotateRotationAngle: Float) : BitmapTransformation(context) {
|
||||||
|
|
||||||
override fun transform(pool: BitmapPool, bitmap: Bitmap, outWidth: Int, outHeight: Int): Bitmap {
|
override fun transform(pool: BitmapPool, bitmap: Bitmap, outWidth: Int, outHeight: Int): Bitmap {
|
||||||
if (rotateRotationAngle % 360 == 0f)
|
if (rotateRotationAngle % 360 == 0f)
|
||||||
return bitmap
|
return bitmap
|
||||||
|
@ -17,5 +17,6 @@ class GlideRotateTransformation(context: Context, val rotateRotationAngle: Float
|
||||||
return Bitmap.createBitmap(bitmap, 0, 0, bitmap.width, bitmap.height, matrix, true)
|
return Bitmap.createBitmap(bitmap, 0, 0, bitmap.width, bitmap.height, matrix, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getId() = "GlideRotateTransformation $rotateRotationAngle"
|
override fun updateDiskCacheKey(messageDigest: MessageDigest?) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
package com.simplemobiletools.gallery.models
|
package com.simplemobiletools.gallery.models
|
||||||
|
|
||||||
import com.simplemobiletools.commons.helpers.SORT_BY_DATE_MODIFIED
|
import com.simplemobiletools.commons.helpers.*
|
||||||
import com.simplemobiletools.commons.helpers.SORT_BY_NAME
|
|
||||||
import com.simplemobiletools.commons.helpers.SORT_BY_SIZE
|
|
||||||
import com.simplemobiletools.commons.helpers.SORT_DESCENDING
|
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
|
|
||||||
data class Directory(val path: String, val tmb: String, val name: String, var mediaCnt: Int, val modified: Long, val taken: Long,
|
data class Directory(val path: String, val tmb: String, val name: String, var mediaCnt: Int, val modified: Long, val taken: Long,
|
||||||
|
@ -20,7 +17,7 @@ data class Directory(val path: String, val tmb: String, val name: String, var me
|
||||||
override fun compareTo(other: Directory): Int {
|
override fun compareTo(other: Directory): Int {
|
||||||
var result: Int
|
var result: Int
|
||||||
if (sorting and SORT_BY_NAME != 0) {
|
if (sorting and SORT_BY_NAME != 0) {
|
||||||
result = name.toLowerCase().compareTo(other.name.toLowerCase())
|
result = AlphanumComparator().compare(name.toLowerCase(), other.name.toLowerCase())
|
||||||
} else if (sorting and SORT_BY_SIZE != 0) {
|
} else if (sorting and SORT_BY_SIZE != 0) {
|
||||||
result = if (size == other.size)
|
result = if (size == other.size)
|
||||||
0
|
0
|
||||||
|
|
|
@ -3,10 +3,7 @@ package com.simplemobiletools.gallery.models
|
||||||
import com.simplemobiletools.commons.extensions.getMimeType
|
import com.simplemobiletools.commons.extensions.getMimeType
|
||||||
import com.simplemobiletools.commons.extensions.isGif
|
import com.simplemobiletools.commons.extensions.isGif
|
||||||
import com.simplemobiletools.commons.extensions.isPng
|
import com.simplemobiletools.commons.extensions.isPng
|
||||||
import com.simplemobiletools.commons.helpers.SORT_BY_DATE_MODIFIED
|
import com.simplemobiletools.commons.helpers.*
|
||||||
import com.simplemobiletools.commons.helpers.SORT_BY_NAME
|
|
||||||
import com.simplemobiletools.commons.helpers.SORT_BY_SIZE
|
|
||||||
import com.simplemobiletools.commons.helpers.SORT_DESCENDING
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
|
|
||||||
|
@ -20,30 +17,32 @@ data class Medium(var name: String, var path: String, val video: Boolean, val mo
|
||||||
|
|
||||||
fun isGif() = path.isGif()
|
fun isGif() = path.isGif()
|
||||||
|
|
||||||
|
fun isJpg() = path.endsWith(".jpg", true) || path.endsWith(".jpeg", true)
|
||||||
|
|
||||||
fun isImage() = !isGif() && !video
|
fun isImage() = !isGif() && !video
|
||||||
|
|
||||||
fun getMimeType() = File(path).getMimeType()
|
fun getMimeType() = File(path).getMimeType()
|
||||||
|
|
||||||
override fun compareTo(other: Medium): Int {
|
override fun compareTo(other: Medium): Int {
|
||||||
var res: Int
|
var result: Int
|
||||||
if (sorting and SORT_BY_NAME != 0) {
|
if (sorting and SORT_BY_NAME != 0) {
|
||||||
res = name.toLowerCase().compareTo(other.name.toLowerCase())
|
result = AlphanumComparator().compare(name.toLowerCase(), other.name.toLowerCase())
|
||||||
} else if (sorting and SORT_BY_SIZE != 0) {
|
} else if (sorting and SORT_BY_SIZE != 0) {
|
||||||
res = if (size == other.size)
|
result = if (size == other.size)
|
||||||
0
|
0
|
||||||
else if (size > other.size)
|
else if (size > other.size)
|
||||||
1
|
1
|
||||||
else
|
else
|
||||||
-1
|
-1
|
||||||
} else if (sorting and SORT_BY_DATE_MODIFIED != 0) {
|
} else if (sorting and SORT_BY_DATE_MODIFIED != 0) {
|
||||||
res = if (modified == other.modified)
|
result = if (modified == other.modified)
|
||||||
0
|
0
|
||||||
else if (modified > other.modified)
|
else if (modified > other.modified)
|
||||||
1
|
1
|
||||||
else
|
else
|
||||||
-1
|
-1
|
||||||
} else {
|
} else {
|
||||||
res = if (taken == other.taken)
|
result = if (taken == other.taken)
|
||||||
0
|
0
|
||||||
else if (taken > other.taken)
|
else if (taken > other.taken)
|
||||||
1
|
1
|
||||||
|
@ -52,8 +51,8 @@ data class Medium(var name: String, var path: String, val video: Boolean, val mo
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sorting and SORT_DESCENDING != 0) {
|
if (sorting and SORT_DESCENDING != 0) {
|
||||||
res *= -1
|
result *= -1
|
||||||
}
|
}
|
||||||
return res
|
return result
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,208 +0,0 @@
|
||||||
package com.simplemobiletools.gallery.views
|
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import android.os.Handler
|
|
||||||
import android.support.v7.widget.RecyclerView
|
|
||||||
import android.util.AttributeSet
|
|
||||||
import android.view.MotionEvent
|
|
||||||
import android.view.ScaleGestureDetector
|
|
||||||
import com.simplemobiletools.gallery.R
|
|
||||||
|
|
||||||
// drag selection is based on https://github.com/afollestad/drag-select-recyclerview
|
|
||||||
class MyScalableRecyclerView : RecyclerView {
|
|
||||||
private val AUTO_SCROLL_DELAY = 25L
|
|
||||||
|
|
||||||
private var mScaleDetector: ScaleGestureDetector
|
|
||||||
|
|
||||||
private var dragSelectActive = false
|
|
||||||
private var lastDraggedIndex = -1
|
|
||||||
private var minReached = 0
|
|
||||||
private var maxReached = 0
|
|
||||||
private var initialSelection = 0
|
|
||||||
|
|
||||||
private var hotspotHeight = 0
|
|
||||||
private var hotspotOffsetTop = 0
|
|
||||||
private var hotspotOffsetBottom = 0
|
|
||||||
|
|
||||||
private var hotspotTopBoundStart = 0
|
|
||||||
private var hotspotTopBoundEnd = 0
|
|
||||||
private var hotspotBottomBoundStart = 0
|
|
||||||
private var hotspotBottomBoundEnd = 0
|
|
||||||
private var autoScrollVelocity = 0
|
|
||||||
|
|
||||||
private var inTopHotspot = false
|
|
||||||
private var inBottomHotspot = false
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
var mListener: MyScalableRecyclerViewListener? = null
|
|
||||||
var mCurrScaleFactor = 1.0f
|
|
||||||
var mLastUp = 0L // allow only pinch zoom, not double tap
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context) : super(context)
|
|
||||||
|
|
||||||
constructor(context: Context, attrs: AttributeSet) : super(context, attrs)
|
|
||||||
|
|
||||||
init {
|
|
||||||
hotspotHeight = context.resources.getDimensionPixelSize(R.dimen.dragselect_hotspot_height)
|
|
||||||
mScaleDetector = ScaleGestureDetector(context, GestureListener())
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onMeasure(widthSpec: Int, heightSpec: Int) {
|
|
||||||
super.onMeasure(widthSpec, heightSpec)
|
|
||||||
if (hotspotHeight > -1) {
|
|
||||||
hotspotTopBoundStart = hotspotOffsetTop
|
|
||||||
hotspotTopBoundEnd = hotspotOffsetTop + hotspotHeight
|
|
||||||
hotspotBottomBoundStart = measuredHeight - hotspotHeight - hotspotOffsetBottom
|
|
||||||
hotspotBottomBoundEnd = measuredHeight - hotspotOffsetBottom
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private var autoScrollHandler = Handler()
|
|
||||||
private val autoScrollRunnable = object : Runnable {
|
|
||||||
override fun run() {
|
|
||||||
if (inTopHotspot) {
|
|
||||||
scrollBy(0, -autoScrollVelocity)
|
|
||||||
autoScrollHandler.postDelayed(this, AUTO_SCROLL_DELAY)
|
|
||||||
} else if (inBottomHotspot) {
|
|
||||||
scrollBy(0, autoScrollVelocity)
|
|
||||||
autoScrollHandler.postDelayed(this, AUTO_SCROLL_DELAY)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
|
|
||||||
if (!dragSelectActive)
|
|
||||||
super.dispatchTouchEvent(ev)
|
|
||||||
|
|
||||||
when (ev.action) {
|
|
||||||
MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> {
|
|
||||||
dragSelectActive = false
|
|
||||||
inTopHotspot = false
|
|
||||||
inBottomHotspot = false
|
|
||||||
autoScrollHandler.removeCallbacks(autoScrollRunnable)
|
|
||||||
mCurrScaleFactor = 1.0f
|
|
||||||
mLastUp = System.currentTimeMillis()
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
MotionEvent.ACTION_MOVE -> {
|
|
||||||
if (dragSelectActive) {
|
|
||||||
val itemPosition = getItemPosition(ev)
|
|
||||||
if (hotspotHeight > -1) {
|
|
||||||
if (ev.y in hotspotTopBoundStart..hotspotTopBoundEnd) {
|
|
||||||
inBottomHotspot = false
|
|
||||||
if (!inTopHotspot) {
|
|
||||||
inTopHotspot = true
|
|
||||||
autoScrollHandler.removeCallbacks(autoScrollRunnable)
|
|
||||||
autoScrollHandler.postDelayed(autoScrollRunnable, AUTO_SCROLL_DELAY.toLong())
|
|
||||||
}
|
|
||||||
|
|
||||||
val simulatedFactor = (hotspotTopBoundEnd - hotspotTopBoundStart).toFloat()
|
|
||||||
val simulatedY = ev.y - hotspotTopBoundStart
|
|
||||||
autoScrollVelocity = (simulatedFactor - simulatedY).toInt() / 2
|
|
||||||
} else if (ev.y in hotspotBottomBoundStart..hotspotBottomBoundEnd) {
|
|
||||||
inTopHotspot = false
|
|
||||||
if (!inBottomHotspot) {
|
|
||||||
inBottomHotspot = true
|
|
||||||
autoScrollHandler.removeCallbacks(autoScrollRunnable)
|
|
||||||
autoScrollHandler.postDelayed(autoScrollRunnable, AUTO_SCROLL_DELAY.toLong())
|
|
||||||
}
|
|
||||||
|
|
||||||
val simulatedY = ev.y + hotspotBottomBoundEnd
|
|
||||||
val simulatedFactor = (hotspotBottomBoundStart + hotspotBottomBoundEnd).toFloat()
|
|
||||||
autoScrollVelocity = (simulatedY - simulatedFactor).toInt() / 2
|
|
||||||
} else if (inTopHotspot || inBottomHotspot) {
|
|
||||||
autoScrollHandler.removeCallbacks(autoScrollRunnable)
|
|
||||||
inTopHotspot = false
|
|
||||||
inBottomHotspot = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (itemPosition != RecyclerView.NO_POSITION && lastDraggedIndex != itemPosition) {
|
|
||||||
lastDraggedIndex = itemPosition
|
|
||||||
if (minReached == -1) {
|
|
||||||
minReached = lastDraggedIndex
|
|
||||||
}
|
|
||||||
|
|
||||||
if (maxReached == -1) {
|
|
||||||
maxReached = lastDraggedIndex
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lastDraggedIndex > maxReached) {
|
|
||||||
maxReached = lastDraggedIndex
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lastDraggedIndex < minReached) {
|
|
||||||
minReached = lastDraggedIndex
|
|
||||||
}
|
|
||||||
|
|
||||||
mListener?.selectRange(initialSelection, lastDraggedIndex, minReached, maxReached)
|
|
||||||
|
|
||||||
if (initialSelection == lastDraggedIndex) {
|
|
||||||
minReached = lastDraggedIndex
|
|
||||||
maxReached = lastDraggedIndex
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return mScaleDetector.onTouchEvent(ev)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun setDragSelectActive(initialSelection: Int) {
|
|
||||||
if (dragSelectActive)
|
|
||||||
return
|
|
||||||
|
|
||||||
lastDraggedIndex = -1
|
|
||||||
minReached = -1
|
|
||||||
maxReached = -1
|
|
||||||
this.initialSelection = initialSelection
|
|
||||||
dragSelectActive = true
|
|
||||||
mListener?.selectItem(initialSelection)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun getItemPosition(e: MotionEvent): Int {
|
|
||||||
val v = findChildViewUnder(e.x, e.y) ?: return RecyclerView.NO_POSITION
|
|
||||||
|
|
||||||
if (v.tag == null || v.tag !is RecyclerView.ViewHolder) {
|
|
||||||
throw IllegalStateException("Make sure your adapter makes a call to super.onBindViewHolder(), and doesn't override itemView tags.")
|
|
||||||
}
|
|
||||||
|
|
||||||
val holder = v.tag as RecyclerView.ViewHolder
|
|
||||||
return holder.adapterPosition
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class GestureListener : ScaleGestureDetector.SimpleOnScaleGestureListener() {
|
|
||||||
private val ZOOM_IN_THRESHOLD = -0.4f
|
|
||||||
private val ZOOM_OUT_THRESHOLD = 0.15f
|
|
||||||
|
|
||||||
override fun onScale(detector: ScaleGestureDetector): Boolean {
|
|
||||||
if (System.currentTimeMillis() - mLastUp < 1000)
|
|
||||||
return false
|
|
||||||
|
|
||||||
val diff = mCurrScaleFactor - detector.scaleFactor
|
|
||||||
if (diff < ZOOM_IN_THRESHOLD && mCurrScaleFactor == 1.0f) {
|
|
||||||
mListener?.zoomIn()
|
|
||||||
mCurrScaleFactor = detector.scaleFactor
|
|
||||||
} else if (diff > ZOOM_OUT_THRESHOLD && mCurrScaleFactor == 1.0f) {
|
|
||||||
mListener?.zoomOut()
|
|
||||||
mCurrScaleFactor = detector.scaleFactor
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
interface MyScalableRecyclerViewListener {
|
|
||||||
fun zoomOut()
|
|
||||||
|
|
||||||
fun zoomIn()
|
|
||||||
|
|
||||||
fun selectItem(position: Int)
|
|
||||||
|
|
||||||
fun selectRange(initialSelection: Int, lastDraggedIndex: Int, minReached: Int, maxReached: Int)
|
|
||||||
}
|
|
||||||
}
|
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 3 KiB After Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 8.2 KiB |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 9.4 KiB |
12
app/src/main/res/drawable/black_rounded_background.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
|
||||||
|
<corners
|
||||||
|
android:radius="@dimen/medium_margin"/>
|
||||||
|
|
||||||
|
<solid
|
||||||
|
android:color="@color/gradient_grey_start"/>
|
||||||
|
|
||||||
|
</shape>
|
9
app/src/main/res/drawable/circle_background.xml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="oval">
|
||||||
|
|
||||||
|
<solid
|
||||||
|
android:color="@color/color_primary"/>
|
||||||
|
|
||||||
|
</shape>
|
9
app/src/main/res/drawable/circle_black_background.xml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="oval">
|
||||||
|
|
||||||
|
<solid
|
||||||
|
android:color="@color/circle_black_background"/>
|
||||||
|
|
||||||
|
</shape>
|
|
@ -1,6 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<com.simplemobiletools.gallery.views.MySquareImageView
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:id="@+id/dir_thumbnail"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"/>
|
|
|
@ -1,6 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<com.simplemobiletools.gallery.views.MySquareImageView
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:id="@+id/medium_thumbnail"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"/>
|
|
|
@ -11,7 +11,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
<com.simplemobiletools.gallery.views.MyScalableRecyclerView
|
<com.simplemobiletools.commons.views.MyScalableRecyclerView
|
||||||
android:id="@+id/directories_grid"
|
android:id="@+id/directories_grid"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
@ -20,13 +20,41 @@
|
||||||
app:spanCount="@integer/directory_columns_vertical_scroll"/>
|
app:spanCount="@integer/directory_columns_vertical_scroll"/>
|
||||||
|
|
||||||
<com.simplemobiletools.commons.views.FastScroller
|
<com.simplemobiletools.commons.views.FastScroller
|
||||||
android:id="@+id/directories_fastscroller"
|
android:id="@+id/directories_vertical_fastscroller"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_alignParentEnd="true"
|
android:layout_alignParentEnd="true"
|
||||||
android:layout_alignParentRight="true"
|
android:layout_alignParentRight="true"
|
||||||
android:paddingLeft="@dimen/normal_margin"
|
android:paddingLeft="@dimen/normal_margin"
|
||||||
android:paddingStart="@dimen/normal_margin"/>
|
android:paddingStart="@dimen/normal_margin">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/fastscroller_handle_vertical"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="end"
|
||||||
|
android:alpha="0"
|
||||||
|
android:background="@drawable/fastscroller_handle_vertical"/>
|
||||||
|
|
||||||
|
</com.simplemobiletools.commons.views.FastScroller>
|
||||||
|
|
||||||
|
<com.simplemobiletools.commons.views.FastScroller
|
||||||
|
android:id="@+id/directories_horizontal_fastscroller"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentBottom="true"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_alignParentStart="true"
|
||||||
|
android:paddingTop="@dimen/normal_margin">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/fastscroller_handle_horizontal"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="bottom"
|
||||||
|
android:alpha="0"
|
||||||
|
android:background="@drawable/fastscroller_handle_horizontal"/>
|
||||||
|
|
||||||
|
</com.simplemobiletools.commons.views.FastScroller>
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
</android.support.v4.widget.SwipeRefreshLayout>
|
</android.support.v4.widget.SwipeRefreshLayout>
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
<com.simplemobiletools.gallery.views.MyScalableRecyclerView
|
<com.simplemobiletools.commons.views.MyScalableRecyclerView
|
||||||
android:id="@+id/media_grid"
|
android:id="@+id/media_grid"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
@ -20,13 +20,41 @@
|
||||||
app:spanCount="@integer/media_columns_vertical_scroll"/>
|
app:spanCount="@integer/media_columns_vertical_scroll"/>
|
||||||
|
|
||||||
<com.simplemobiletools.commons.views.FastScroller
|
<com.simplemobiletools.commons.views.FastScroller
|
||||||
android:id="@+id/media_fastscroller"
|
android:id="@+id/media_vertical_fastscroller"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_alignParentEnd="true"
|
android:layout_alignParentEnd="true"
|
||||||
android:layout_alignParentRight="true"
|
android:layout_alignParentRight="true"
|
||||||
android:paddingLeft="@dimen/normal_margin"
|
android:paddingLeft="@dimen/normal_margin"
|
||||||
android:paddingStart="@dimen/normal_margin"/>
|
android:paddingStart="@dimen/normal_margin">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/fastscroller_handle_vertical"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="end"
|
||||||
|
android:alpha="0"
|
||||||
|
android:background="@drawable/fastscroller_handle_vertical"/>
|
||||||
|
|
||||||
|
</com.simplemobiletools.commons.views.FastScroller>
|
||||||
|
|
||||||
|
<com.simplemobiletools.commons.views.FastScroller
|
||||||
|
android:id="@+id/media_horizontal_fastscroller"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentBottom="true"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_alignParentStart="true"
|
||||||
|
android:paddingTop="@dimen/normal_margin">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/fastscroller_handle_horizontal"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="bottom"
|
||||||
|
android:alpha="0"
|
||||||
|
android:background="@drawable/fastscroller_handle_horizontal"/>
|
||||||
|
|
||||||
|
</com.simplemobiletools.commons.views.FastScroller>
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
</android.support.v4.widget.SwipeRefreshLayout>
|
</android.support.v4.widget.SwipeRefreshLayout>
|
||||||
|
|
|
@ -214,8 +214,7 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="@dimen/medium_margin"
|
android:layout_marginTop="@dimen/medium_margin"
|
||||||
android:background="?attr/selectableItemBackground"
|
android:background="?attr/selectableItemBackground"
|
||||||
android:padding="@dimen/activity_margin"
|
android:padding="@dimen/activity_margin">
|
||||||
android:visibility="gone">
|
|
||||||
|
|
||||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||||
android:id="@+id/settings_scroll_horizontally"
|
android:id="@+id/settings_scroll_horizontally"
|
||||||
|
@ -229,6 +228,66 @@
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:id="@+id/settings_hide_system_ui_holder"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="@dimen/medium_margin"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:padding="@dimen/activity_margin">
|
||||||
|
|
||||||
|
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||||
|
android:id="@+id/settings_hide_system_ui"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@null"
|
||||||
|
android:clickable="false"
|
||||||
|
android:paddingLeft="@dimen/medium_margin"
|
||||||
|
android:paddingStart="@dimen/medium_margin"
|
||||||
|
android:text="@string/hide_system_ui_at_fullscreen"/>
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:id="@+id/settings_replace_share_holder"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="@dimen/medium_margin"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:padding="@dimen/activity_margin">
|
||||||
|
|
||||||
|
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||||
|
android:id="@+id/settings_replace_share"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@null"
|
||||||
|
android:clickable="false"
|
||||||
|
android:paddingLeft="@dimen/medium_margin"
|
||||||
|
android:paddingStart="@dimen/medium_margin"
|
||||||
|
android:text="@string/replace_share_with_rotate"/>
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:id="@+id/settings_password_protection_holder"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="@dimen/medium_margin"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:padding="@dimen/activity_margin">
|
||||||
|
|
||||||
|
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||||
|
android:id="@+id/settings_password_protection"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@null"
|
||||||
|
android:clickable="false"
|
||||||
|
android:paddingLeft="@dimen/medium_margin"
|
||||||
|
android:paddingStart="@dimen/medium_margin"
|
||||||
|
android:text="@string/password_protect_hidden_items"/>
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:id="@+id/settings_screen_rotation_holder"
|
android:id="@+id/settings_screen_rotation_holder"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|
|
@ -1,10 +1,55 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<android.support.v7.widget.RecyclerView
|
<RelativeLayout
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:id="@+id/directories_grid_holder"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingTop="@dimen/activity_margin">
|
||||||
|
|
||||||
|
<com.simplemobiletools.commons.views.MyScalableRecyclerView
|
||||||
android:id="@+id/directories_grid"
|
android:id="@+id/directories_grid"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingTop="@dimen/activity_margin"
|
android:scrollbars="none"
|
||||||
app:layoutManager="android.support.v7.widget.GridLayoutManager"
|
app:layoutManager="android.support.v7.widget.GridLayoutManager"
|
||||||
app:spanCount="@integer/directory_columns_vertical_scroll"/>
|
app:spanCount="@integer/directory_columns_vertical_scroll"/>
|
||||||
|
|
||||||
|
<com.simplemobiletools.commons.views.FastScroller
|
||||||
|
android:id="@+id/directories_vertical_fastscroller"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_alignParentEnd="true"
|
||||||
|
android:layout_alignParentRight="true"
|
||||||
|
android:paddingLeft="@dimen/normal_margin"
|
||||||
|
android:paddingStart="@dimen/normal_margin">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/fastscroller_handle_vertical"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="end"
|
||||||
|
android:alpha="0"
|
||||||
|
android:background="@drawable/fastscroller_handle_vertical"/>
|
||||||
|
|
||||||
|
</com.simplemobiletools.commons.views.FastScroller>
|
||||||
|
|
||||||
|
<com.simplemobiletools.commons.views.FastScroller
|
||||||
|
android:id="@+id/directories_horizontal_fastscroller"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentBottom="true"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_alignParentStart="true"
|
||||||
|
android:paddingTop="@dimen/normal_margin">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/fastscroller_handle_horizontal"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="bottom"
|
||||||
|
android:alpha="0"
|
||||||
|
android:background="@drawable/fastscroller_handle_horizontal"/>
|
||||||
|
|
||||||
|
</com.simplemobiletools.commons.views.FastScroller>
|
||||||
|
</RelativeLayout>
|
||||||
|
|
144
app/src/main/res/layout/dialog_slideshow.xml
Normal file
|
@ -0,0 +1,144 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<ScrollView
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:id="@+id/slideshow_scrollview"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:id="@+id/slideshow_holder"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:padding="@dimen/activity_margin">
|
||||||
|
|
||||||
|
<com.simplemobiletools.commons.views.MyTextView
|
||||||
|
android:id="@+id/interval_label"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingBottom="@dimen/activity_margin"
|
||||||
|
android:paddingLeft="@dimen/medium_margin"
|
||||||
|
android:paddingStart="@dimen/medium_margin"
|
||||||
|
android:paddingTop="@dimen/activity_margin"
|
||||||
|
android:text="@string/interval"/>
|
||||||
|
|
||||||
|
<com.simplemobiletools.commons.views.MyEditText
|
||||||
|
android:id="@+id/interval_value"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentEnd="true"
|
||||||
|
android:layout_alignParentRight="true"
|
||||||
|
android:ems="5"
|
||||||
|
android:gravity="right"
|
||||||
|
android:imeOptions="actionDone"
|
||||||
|
android:inputType="number"
|
||||||
|
android:maxLength="2"
|
||||||
|
android:textCursorDrawable="@null"/>
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:id="@+id/include_photos_holder"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@+id/interval_label"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:paddingBottom="@dimen/activity_margin"
|
||||||
|
android:paddingLeft="@dimen/medium_margin"
|
||||||
|
android:paddingStart="@dimen/medium_margin"
|
||||||
|
android:paddingTop="@dimen/activity_margin">
|
||||||
|
|
||||||
|
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||||
|
android:id="@+id/include_photos"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@null"
|
||||||
|
android:clickable="false"
|
||||||
|
android:text="@string/include_photos"/>
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:id="@+id/include_videos_holder"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@+id/include_photos_holder"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:paddingBottom="@dimen/activity_margin"
|
||||||
|
android:paddingLeft="@dimen/medium_margin"
|
||||||
|
android:paddingStart="@dimen/medium_margin"
|
||||||
|
android:paddingTop="@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/random_order_holder"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@+id/include_videos_holder"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:paddingBottom="@dimen/activity_margin"
|
||||||
|
android:paddingLeft="@dimen/medium_margin"
|
||||||
|
android:paddingStart="@dimen/medium_margin"
|
||||||
|
android:paddingTop="@dimen/activity_margin">
|
||||||
|
|
||||||
|
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||||
|
android:id="@+id/random_order"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@null"
|
||||||
|
android:clickable="false"
|
||||||
|
android:text="@string/random_order"/>
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:id="@+id/use_fade_holder"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@+id/random_order_holder"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:paddingBottom="@dimen/activity_margin"
|
||||||
|
android:paddingLeft="@dimen/medium_margin"
|
||||||
|
android:paddingStart="@dimen/medium_margin"
|
||||||
|
android:paddingTop="@dimen/activity_margin"
|
||||||
|
android:visibility="gone">
|
||||||
|
|
||||||
|
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||||
|
android:id="@+id/use_fade"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@null"
|
||||||
|
android:clickable="false"
|
||||||
|
android:text="@string/use_fade"/>
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:id="@+id/move_backwards_holder"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@+id/use_fade_holder"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:paddingBottom="@dimen/activity_margin"
|
||||||
|
android:paddingLeft="@dimen/medium_margin"
|
||||||
|
android:paddingStart="@dimen/medium_margin"
|
||||||
|
android:paddingTop="@dimen/activity_margin">
|
||||||
|
|
||||||
|
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||||
|
android:id="@+id/move_backwards"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@null"
|
||||||
|
android:clickable="false"
|
||||||
|
android:text="@string/move_backwards"/>
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
</RelativeLayout>
|
||||||
|
</ScrollView>
|
|
@ -6,16 +6,33 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:padding="1px">
|
android:padding="1px">
|
||||||
|
|
||||||
<include layout="@layout/directory_tmb"/>
|
<com.simplemobiletools.gallery.views.MySquareImageView
|
||||||
|
android:id="@+id/dir_thumbnail"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"/>
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/dir_check"
|
||||||
|
android:layout_width="@dimen/selection_check_size"
|
||||||
|
android:layout_height="@dimen/selection_check_size"
|
||||||
|
android:layout_alignParentEnd="true"
|
||||||
|
android:layout_alignParentRight="true"
|
||||||
|
android:layout_alignParentTop="true"
|
||||||
|
android:layout_margin="@dimen/small_margin"
|
||||||
|
android:background="@drawable/circle_background"
|
||||||
|
android:padding="@dimen/tiny_margin"
|
||||||
|
android:src="@drawable/ic_check"/>
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/dir_pin"
|
android:id="@+id/dir_pin"
|
||||||
android:layout_width="@dimen/pin_size"
|
android:layout_width="@dimen/selection_check_size"
|
||||||
android:layout_height="@dimen/pin_size"
|
android:layout_height="@dimen/selection_check_size"
|
||||||
android:layout_alignParentLeft="true"
|
android:layout_alignParentLeft="true"
|
||||||
android:layout_alignParentStart="true"
|
android:layout_alignParentStart="true"
|
||||||
android:layout_alignParentTop="true"
|
android:layout_alignParentTop="true"
|
||||||
android:layout_margin="@dimen/small_margin"
|
android:layout_margin="@dimen/small_margin"
|
||||||
|
android:background="@drawable/circle_black_background"
|
||||||
|
android:padding="@dimen/small_margin"
|
||||||
android:src="@drawable/ic_pin"/>
|
android:src="@drawable/ic_pin"/>
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
|
@ -29,7 +46,9 @@
|
||||||
android:id="@+id/dir_bottom_holder"
|
android:id="@+id/dir_bottom_holder"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignLeft="@+id/dir_thumbnail"
|
||||||
android:layout_alignParentBottom="true"
|
android:layout_alignParentBottom="true"
|
||||||
|
android:layout_alignRight="@+id/dir_thumbnail"
|
||||||
android:gravity="bottom"
|
android:gravity="bottom"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:paddingBottom="@dimen/small_margin"
|
android:paddingBottom="@dimen/small_margin"
|
||||||
|
@ -55,4 +74,19 @@
|
||||||
android:textSize="@dimen/normal_text_size"/>
|
android:textSize="@dimen/normal_text_size"/>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/dir_sd_card"
|
||||||
|
android:layout_width="@dimen/sd_card_icon_size"
|
||||||
|
android:layout_height="@dimen/sd_card_icon_size"
|
||||||
|
android:layout_alignParentBottom="true"
|
||||||
|
android:layout_alignParentEnd="true"
|
||||||
|
android:layout_alignParentRight="true"
|
||||||
|
android:alpha="0.8"
|
||||||
|
android:paddingBottom="@dimen/small_margin"
|
||||||
|
android:paddingEnd="@dimen/small_margin"
|
||||||
|
android:paddingRight="@dimen/small_margin"
|
||||||
|
android:src="@drawable/ic_sd_card"
|
||||||
|
android:visibility="gone"/>
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<merge>
|
|
||||||
|
|
||||||
<FrameLayout
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:id="@+id/dir_frame"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent">
|
|
||||||
|
|
||||||
<com.simplemobiletools.gallery.views.MySquareImageView
|
|
||||||
android:id="@+id/dir_thumbnail"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"/>
|
|
||||||
</FrameLayout>
|
|
||||||
</merge>
|
|
|
@ -5,7 +5,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<uk.co.senab.photoview.PhotoView
|
<com.github.chrisbanes.photoview.PhotoView
|
||||||
android:id="@+id/photo_view"
|
android:id="@+id/photo_view"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"/>
|
android:layout_height="match_parent"/>
|
||||||
|
|
|
@ -12,6 +12,18 @@
|
||||||
android:layout_centerInParent="true"
|
android:layout_centerInParent="true"
|
||||||
android:background="@android:color/transparent"/>
|
android:background="@android:color/transparent"/>
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:id="@+id/video_volume_controller"
|
||||||
|
android:layout_width="@dimen/video_side_slider_width"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_alignParentEnd="true"
|
||||||
|
android:layout_alignParentRight="true"/>
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:id="@+id/video_brightness_controller"
|
||||||
|
android:layout_width="@dimen/video_side_slider_width"
|
||||||
|
android:layout_height="match_parent"/>
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/video_play_outline"
|
android:id="@+id/video_play_outline"
|
||||||
android:layout_width="@dimen/play_outline_size_big"
|
android:layout_width="@dimen/play_outline_size_big"
|
||||||
|
@ -21,6 +33,23 @@
|
||||||
android:padding="@dimen/activity_margin"
|
android:padding="@dimen/activity_margin"
|
||||||
android:src="@drawable/img_play_outline_big"/>
|
android:src="@drawable/img_play_outline_big"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/slide_info"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentBottom="true"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:layout_marginBottom="120dp"
|
||||||
|
android:alpha="0"
|
||||||
|
android:background="@drawable/black_rounded_background"
|
||||||
|
android:gravity="center"
|
||||||
|
android:paddingBottom="@dimen/medium_margin"
|
||||||
|
android:paddingLeft="@dimen/activity_margin"
|
||||||
|
android:paddingRight="@dimen/activity_margin"
|
||||||
|
android:paddingTop="@dimen/medium_margin"
|
||||||
|
android:textColor="@android:color/white"
|
||||||
|
android:textSize="@dimen/extra_big_text_size"/>
|
||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:id="@+id/video_time_holder"
|
android:id="@+id/video_time_holder"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
|
|
|
@ -6,16 +6,31 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:padding="1px">
|
android:padding="1px">
|
||||||
|
|
||||||
<include layout="@layout/photo_video_tmb"/>
|
<com.simplemobiletools.gallery.views.MySquareImageView
|
||||||
|
android:id="@+id/medium_thumbnail"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"/>
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/play_outline"
|
android:id="@+id/medium_check"
|
||||||
android:layout_width="@dimen/play_outline_size"
|
android:layout_width="@dimen/selection_check_size"
|
||||||
android:layout_height="@dimen/play_outline_size"
|
android:layout_height="@dimen/selection_check_size"
|
||||||
android:layout_alignParentEnd="true"
|
android:layout_alignParentEnd="true"
|
||||||
android:layout_alignParentRight="true"
|
android:layout_alignParentRight="true"
|
||||||
android:layout_alignParentTop="true"
|
android:layout_alignParentTop="true"
|
||||||
android:layout_margin="@dimen/tiny_margin"
|
android:layout_margin="@dimen/small_margin"
|
||||||
|
android:background="@drawable/circle_background"
|
||||||
|
android:padding="@dimen/tiny_margin"
|
||||||
|
android:src="@drawable/ic_check"/>
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/play_outline"
|
||||||
|
android:layout_width="@dimen/selection_check_size"
|
||||||
|
android:layout_height="@dimen/selection_check_size"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_alignParentStart="true"
|
||||||
|
android:layout_alignParentTop="true"
|
||||||
|
android:layout_margin="@dimen/small_margin"
|
||||||
android:src="@drawable/img_play_outline"
|
android:src="@drawable/img_play_outline"
|
||||||
android:visibility="gone"/>
|
android:visibility="gone"/>
|
||||||
|
|
||||||
|
@ -23,11 +38,12 @@
|
||||||
android:id="@+id/photo_name"
|
android:id="@+id/photo_name"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignLeft="@+id/medium_thumbnail"
|
||||||
android:layout_alignParentBottom="true"
|
android:layout_alignParentBottom="true"
|
||||||
|
android:layout_alignRight="@+id/medium_thumbnail"
|
||||||
android:background="@drawable/gradient_background"
|
android:background="@drawable/gradient_background"
|
||||||
android:gravity="bottom"
|
android:gravity="bottom"
|
||||||
android:maxLines="3"
|
android:maxLines="3"
|
||||||
android:minHeight="@dimen/play_outline_size"
|
|
||||||
android:paddingBottom="@dimen/small_margin"
|
android:paddingBottom="@dimen/small_margin"
|
||||||
android:paddingLeft="@dimen/small_margin"
|
android:paddingLeft="@dimen/small_margin"
|
||||||
android:paddingRight="@dimen/small_margin"
|
android:paddingRight="@dimen/small_margin"
|
||||||
|
|
|
@ -1,16 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<merge>
|
|
||||||
|
|
||||||
<FrameLayout
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:id="@+id/medium_thumbnail_holder"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent">
|
|
||||||
|
|
||||||
<com.simplemobiletools.gallery.views.MySquareImageView
|
|
||||||
android:id="@+id/medium_thumbnail"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"/>
|
|
||||||
|
|
||||||
</FrameLayout>
|
|
||||||
</merge>
|
|
|
@ -2,9 +2,9 @@
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
<item
|
<item
|
||||||
android:id="@+id/cab_properties"
|
android:id="@+id/cab_delete"
|
||||||
android:icon="@drawable/ic_info"
|
android:icon="@drawable/ic_delete"
|
||||||
android:title="@string/properties"
|
android:title="@string/delete"
|
||||||
app:showAsAction="ifRoom"/>
|
app:showAsAction="ifRoom"/>
|
||||||
<item
|
<item
|
||||||
android:id="@+id/cab_pin"
|
android:id="@+id/cab_pin"
|
||||||
|
@ -16,6 +16,11 @@
|
||||||
android:icon="@drawable/ic_unpin"
|
android:icon="@drawable/ic_unpin"
|
||||||
android:title="@string/unpin_folder"
|
android:title="@string/unpin_folder"
|
||||||
app:showAsAction="ifRoom"/>
|
app:showAsAction="ifRoom"/>
|
||||||
|
<item
|
||||||
|
android:id="@+id/cab_properties"
|
||||||
|
android:icon="@drawable/ic_info"
|
||||||
|
android:title="@string/properties"
|
||||||
|
app:showAsAction="ifRoom"/>
|
||||||
<item
|
<item
|
||||||
android:id="@+id/cab_rename"
|
android:id="@+id/cab_rename"
|
||||||
android:icon="@drawable/ic_rename"
|
android:icon="@drawable/ic_rename"
|
||||||
|
@ -61,9 +66,4 @@
|
||||||
android:title="@string/use_default"/>
|
android:title="@string/use_default"/>
|
||||||
</menu>
|
</menu>
|
||||||
</item>
|
</item>
|
||||||
<item
|
|
||||||
android:id="@+id/cab_delete"
|
|
||||||
android:icon="@drawable/ic_delete"
|
|
||||||
android:title="@string/delete"
|
|
||||||
app:showAsAction="ifRoom"/>
|
|
||||||
</menu>
|
</menu>
|
||||||
|
|
|
@ -19,6 +19,10 @@
|
||||||
android:id="@+id/temporarily_show_hidden"
|
android:id="@+id/temporarily_show_hidden"
|
||||||
android:title="@string/temporarily_show_hidden"
|
android:title="@string/temporarily_show_hidden"
|
||||||
app:showAsAction="never"/>
|
app:showAsAction="never"/>
|
||||||
|
<item
|
||||||
|
android:id="@+id/stop_showing_hidden"
|
||||||
|
android:title="@string/stop_showing_hidden"
|
||||||
|
app:showAsAction="never"/>
|
||||||
<item
|
<item
|
||||||
android:id="@+id/increase_column_count"
|
android:id="@+id/increase_column_count"
|
||||||
android:title="@string/increase_column_count"
|
android:title="@string/increase_column_count"
|
||||||
|
|
|
@ -5,4 +5,8 @@
|
||||||
android:id="@+id/temporarily_show_hidden"
|
android:id="@+id/temporarily_show_hidden"
|
||||||
android:title="@string/temporarily_show_hidden"
|
android:title="@string/temporarily_show_hidden"
|
||||||
app:showAsAction="never"/>
|
app:showAsAction="never"/>
|
||||||
|
<item
|
||||||
|
android:id="@+id/stop_showing_hidden"
|
||||||
|
android:title="@string/stop_showing_hidden"
|
||||||
|
app:showAsAction="never"/>
|
||||||
</menu>
|
</menu>
|
||||||
|
|
|
@ -36,6 +36,10 @@
|
||||||
android:id="@+id/temporarily_show_hidden"
|
android:id="@+id/temporarily_show_hidden"
|
||||||
android:title="@string/temporarily_show_hidden"
|
android:title="@string/temporarily_show_hidden"
|
||||||
app:showAsAction="never"/>
|
app:showAsAction="never"/>
|
||||||
|
<item
|
||||||
|
android:id="@+id/stop_showing_hidden"
|
||||||
|
android:title="@string/stop_showing_hidden"
|
||||||
|
app:showAsAction="never"/>
|
||||||
<item
|
<item
|
||||||
android:id="@+id/increase_column_count"
|
android:id="@+id/increase_column_count"
|
||||||
android:title="@string/increase_column_count"
|
android:title="@string/increase_column_count"
|
||||||
|
|
|
@ -1,23 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
<item
|
|
||||||
android:id="@+id/menu_rotate"
|
|
||||||
android:icon="@drawable/ic_rotate_right"
|
|
||||||
android:title="@string/rotate"
|
|
||||||
app:showAsAction="ifRoom">
|
|
||||||
<menu>
|
|
||||||
<item
|
|
||||||
android:id="@+id/rotate_right"
|
|
||||||
android:title="@string/rotate_right"/>
|
|
||||||
<item
|
|
||||||
android:id="@+id/rotate_left"
|
|
||||||
android:title="@string/rotate_left"/>
|
|
||||||
<item
|
|
||||||
android:id="@+id/rotate_one_eighty"
|
|
||||||
android:title="@string/rotate_one_eighty"/>
|
|
||||||
</menu>
|
|
||||||
</item>
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/menu_save_as"
|
android:id="@+id/menu_save_as"
|
||||||
android:icon="@drawable/ic_check"
|
android:icon="@drawable/ic_check"
|
||||||
|
@ -30,10 +13,25 @@
|
||||||
android:title="@string/delete"
|
android:title="@string/delete"
|
||||||
app:showAsAction="ifRoom"/>
|
app:showAsAction="ifRoom"/>
|
||||||
<item
|
<item
|
||||||
android:id="@+id/menu_share"
|
android:id="@+id/menu_share_1"
|
||||||
android:icon="@drawable/ic_share"
|
android:icon="@drawable/ic_share"
|
||||||
android:title="@string/share"
|
android:title="@string/share"
|
||||||
app:showAsAction="ifRoom"/>
|
app:showAsAction="ifRoom"/>
|
||||||
|
<item
|
||||||
|
android:id="@+id/menu_rotate"
|
||||||
|
android:icon="@drawable/ic_rotate_right"
|
||||||
|
android:title="@string/rotate"
|
||||||
|
app:showAsAction="ifRoom"/>
|
||||||
|
<item
|
||||||
|
android:id="@+id/menu_share_2"
|
||||||
|
android:icon="@drawable/ic_share"
|
||||||
|
android:title="@string/share"
|
||||||
|
android:visible="false"
|
||||||
|
app:showAsAction="ifRoom"/>
|
||||||
|
<item
|
||||||
|
android:id="@+id/slideshow"
|
||||||
|
android:title="@string/slideshow"
|
||||||
|
app:showAsAction="never"/>
|
||||||
<item
|
<item
|
||||||
android:id="@+id/menu_copy_to"
|
android:id="@+id/menu_copy_to"
|
||||||
android:title="@string/copy_to"
|
android:title="@string/copy_to"
|
||||||
|
|
BIN
app/src/main/res/mipmap-hdpi/ic_launcher_round.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
Normal file
After Width: | Height: | Size: 5.7 KiB |
BIN
app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
Normal file
After Width: | Height: | Size: 6.6 KiB |
|
@ -19,11 +19,12 @@
|
||||||
<string name="no_camera_app_found">Nebyla nalezena žádná fotografická aplikace</string>
|
<string name="no_camera_app_found">Nebyla nalezena žádná fotografická aplikace</string>
|
||||||
<string name="increase_column_count">Zvýšit počet sloupců</string>
|
<string name="increase_column_count">Zvýšit počet sloupců</string>
|
||||||
<string name="reduce_column_count">Snížit počet sloupců</string>
|
<string name="reduce_column_count">Snížit počet sloupců</string>
|
||||||
<string name="temporarily_show_hidden">Dočasně zobrazit skryté</string>
|
|
||||||
<string name="change_cover_image">Change cover image</string>
|
<string name="change_cover_image">Change cover image</string>
|
||||||
<string name="select_photo">Select photo</string>
|
<string name="select_photo">Select photo</string>
|
||||||
<string name="use_default">Use default</string>
|
<string name="use_default">Use default</string>
|
||||||
<string name="set_as">Nastavit jako</string>
|
<string name="set_as">Nastavit jako</string>
|
||||||
|
<string name="volume">Volume</string>
|
||||||
|
<string name="brightness">Brightness</string>
|
||||||
|
|
||||||
<!-- Hide / Exclude -->
|
<!-- Hide / Exclude -->
|
||||||
<string name="hide_folder_description">Tato funkce skryje složku, včetně podsložek, přidáním souboru \'.nomedia\'. Zobrazíte je zvolením možnosti \'Zobrazit skryté složky\' v nastavení. Pokračovat?</string>
|
<string name="hide_folder_description">Tato funkce skryje složku, včetně podsložek, přidáním souboru \'.nomedia\'. Zobrazíte je zvolením možnosti \'Zobrazit skryté složky\' v nastavení. Pokračovat?</string>
|
||||||
|
@ -67,7 +68,6 @@
|
||||||
<string name="flip">Překlopit</string>
|
<string name="flip">Překlopit</string>
|
||||||
<string name="flip_horizontally">Překlopit vodorovně</string>
|
<string name="flip_horizontally">Překlopit vodorovně</string>
|
||||||
<string name="flip_vertically">Překlopit svisle</string>
|
<string name="flip_vertically">Překlopit svisle</string>
|
||||||
<string name="out_of_memory_error">Zařízení nemá dostatek paměti</string>
|
|
||||||
<string name="edit_with">Edit with</string>
|
<string name="edit_with">Edit with</string>
|
||||||
|
|
||||||
<!-- Set wallpaper -->
|
<!-- Set wallpaper -->
|
||||||
|
@ -81,6 +81,17 @@
|
||||||
<string name="portrait_aspect_ratio">Portrait aspect ratio</string>
|
<string name="portrait_aspect_ratio">Portrait aspect ratio</string>
|
||||||
<string name="landscape_aspect_ratio">Landscape aspect ratio</string>
|
<string name="landscape_aspect_ratio">Landscape aspect ratio</string>
|
||||||
|
|
||||||
|
<!-- Slideshow -->
|
||||||
|
<string name="slideshow">Slideshow</string>
|
||||||
|
<string name="interval">Interval (seconds):</string>
|
||||||
|
<string name="include_photos">Include photos and GIFs</string>
|
||||||
|
<string name="include_videos">Include videos</string>
|
||||||
|
<string name="random_order">Random order</string>
|
||||||
|
<string name="use_fade">Use fade animations</string>
|
||||||
|
<string name="move_backwards">Move backwards</string>
|
||||||
|
<string name="slideshow_ended">The slideshow ended</string>
|
||||||
|
<string name="no_media_for_slideshow">No media for the slideshow have been found</string>
|
||||||
|
|
||||||
<!-- Settings -->
|
<!-- Settings -->
|
||||||
<string name="show_hidden_media">Zobrazit skryté média</string>
|
<string name="show_hidden_media">Zobrazit skryté média</string>
|
||||||
<string name="autoplay_videos">Automaticky přehrávat videa</string>
|
<string name="autoplay_videos">Automaticky přehrávat videa</string>
|
||||||
|
@ -101,6 +112,8 @@
|
||||||
<string name="screen_rotation_aspect_ratio">Aspect ratio</string>
|
<string name="screen_rotation_aspect_ratio">Aspect ratio</string>
|
||||||
<string name="dark_background_at_fullscreen">Dark background at fullscreen media</string>
|
<string name="dark_background_at_fullscreen">Dark background at fullscreen media</string>
|
||||||
<string name="scroll_thumbnails_horizontally">Scroll thumbnails horizontally</string>
|
<string name="scroll_thumbnails_horizontally">Scroll thumbnails horizontally</string>
|
||||||
|
<string name="hide_system_ui_at_fullscreen">Automatically hide system UI at fullscreen media</string>
|
||||||
|
<string name="replace_share_with_rotate">Replace Share with Rotate at fullscreen menu</string>
|
||||||
|
|
||||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||||
<!-- Short description has to have less than 80 chars -->
|
<!-- Short description has to have less than 80 chars -->
|
||||||
|
|
|
@ -19,11 +19,12 @@
|
||||||
<string name="no_camera_app_found">Keine Kamera-App gefunden</string>
|
<string name="no_camera_app_found">Keine Kamera-App gefunden</string>
|
||||||
<string name="increase_column_count">Kacheln verkleinern</string>
|
<string name="increase_column_count">Kacheln verkleinern</string>
|
||||||
<string name="reduce_column_count">Kacheln vergrößern</string>
|
<string name="reduce_column_count">Kacheln vergrößern</string>
|
||||||
<string name="temporarily_show_hidden">Verstecktes temporär zeigen</string>
|
<string name="change_cover_image">Cover-Bild ändern</string>
|
||||||
<string name="change_cover_image">Change cover image</string>
|
<string name="select_photo">Auswählen</string>
|
||||||
<string name="select_photo">Bild auswählen</string>
|
<string name="use_default">Standard</string>
|
||||||
<string name="use_default">Standard verwenden</string>
|
|
||||||
<string name="set_as">Festlegen als</string>
|
<string name="set_as">Festlegen als</string>
|
||||||
|
<string name="volume">Lautstärke</string>
|
||||||
|
<string name="brightness">Helligkeit</string>
|
||||||
|
|
||||||
<!-- Hide / Exclude -->
|
<!-- Hide / Exclude -->
|
||||||
<string name="hide_folder_description">Diese Funktion versteckt ausgewählte Ordner (auch für andere Apps), indem dort im Dateisystem eine \'.nomedia\'-Datei abgelegt wird. Dadurch werden auch deren Unterordner versteckt. Solche Ordner werden nur gezeigt, wenn die Einstellung \'Versteckte Ordner zeigen\' aktiv ist (auch andere Apps bieten üblicherweise eine solche Option). Fortfahren?</string>
|
<string name="hide_folder_description">Diese Funktion versteckt ausgewählte Ordner (auch für andere Apps), indem dort im Dateisystem eine \'.nomedia\'-Datei abgelegt wird. Dadurch werden auch deren Unterordner versteckt. Solche Ordner werden nur gezeigt, wenn die Einstellung \'Versteckte Ordner zeigen\' aktiv ist (auch andere Apps bieten üblicherweise eine solche Option). Fortfahren?</string>
|
||||||
|
@ -57,7 +58,7 @@
|
||||||
<string name="path">Pfad</string>
|
<string name="path">Pfad</string>
|
||||||
<string name="invalid_image_path">Ungültiger Dateipfad</string>
|
<string name="invalid_image_path">Ungültiger Dateipfad</string>
|
||||||
<string name="image_editing_failed">Bildbearbeitung fehlgeschlagen</string>
|
<string name="image_editing_failed">Bildbearbeitung fehlgeschlagen</string>
|
||||||
<string name="edit_image_with">Bild bearbeiten mit:</string>
|
<string name="edit_image_with">Bild bearbeiten mit</string>
|
||||||
<string name="no_editor_found">Keine Bildeditor-App gefunden</string>
|
<string name="no_editor_found">Keine Bildeditor-App gefunden</string>
|
||||||
<string name="unknown_file_location">Unbekannter Dateiort</string>
|
<string name="unknown_file_location">Unbekannter Dateiort</string>
|
||||||
<string name="error_saving_file">Konnte Quelldatei nicht überschreiben</string>
|
<string name="error_saving_file">Konnte Quelldatei nicht überschreiben</string>
|
||||||
|
@ -67,20 +68,30 @@
|
||||||
<string name="flip">Spiegeln</string>
|
<string name="flip">Spiegeln</string>
|
||||||
<string name="flip_horizontally">Horizontal spiegeln</string>
|
<string name="flip_horizontally">Horizontal spiegeln</string>
|
||||||
<string name="flip_vertically">Vertikal spiegeln</string>
|
<string name="flip_vertically">Vertikal spiegeln</string>
|
||||||
<string name="out_of_memory_error">Fehler: Zuwenig Speicher</string>
|
<string name="edit_with">Bearbeiten mit</string>
|
||||||
<string name="edit_with">Edit with</string>
|
|
||||||
|
|
||||||
<!-- Set wallpaper -->
|
<!-- Set wallpaper -->
|
||||||
<string name="simple_wallpaper">Schlichter Hintergrund</string>
|
<string name="simple_wallpaper">Schlichter Hintergrund</string>
|
||||||
<string name="set_as_wallpaper">Als Hintergrund festlegen</string>
|
<string name="set_as_wallpaper">Als Hintergrund festlegen</string>
|
||||||
<string name="set_as_wallpaper_failed">Hintergrundbild festlegen fehlgeschlagen</string>
|
<string name="set_as_wallpaper_failed">Hintergrundbild festlegen fehlgeschlagen</string>
|
||||||
<string name="set_as_wallpaper_with">Als Hintergrund festlegen mit:</string>
|
<string name="set_as_wallpaper_with">Als Hintergrund festlegen mit</string>
|
||||||
<string name="no_capable_app_found">Keine Hintergrundbild-App gefunden</string>
|
<string name="no_capable_app_found">Keine Hintergrundbild-App gefunden</string>
|
||||||
<string name="setting_wallpaper">Hintergrund festlegen…</string>
|
<string name="setting_wallpaper">Hintergrund festlegen…</string>
|
||||||
<string name="wallpaper_set_successfully">Hintergrundbild erfolgreich festgelegt</string>
|
<string name="wallpaper_set_successfully">Hintergrundbild erfolgreich festgelegt</string>
|
||||||
<string name="portrait_aspect_ratio">Hochformat</string>
|
<string name="portrait_aspect_ratio">Hochformat</string>
|
||||||
<string name="landscape_aspect_ratio">Querformat</string>
|
<string name="landscape_aspect_ratio">Querformat</string>
|
||||||
|
|
||||||
|
<!-- Slideshow -->
|
||||||
|
<string name="slideshow">Diashow</string>
|
||||||
|
<string name="interval">Intervall (Sekunden):</string>
|
||||||
|
<string name="include_photos">Bilder/GIFs verwenden</string>
|
||||||
|
<string name="include_videos">Videos verwenden</string>
|
||||||
|
<string name="random_order">Zufällige Reihenfolge</string>
|
||||||
|
<string name="use_fade">Übergänge animieren</string>
|
||||||
|
<string name="move_backwards">Rückwärts abspielen</string>
|
||||||
|
<string name="slideshow_ended">Diashow beendet</string>
|
||||||
|
<string name="no_media_for_slideshow">Keine Medien für Diashow gefunden</string>
|
||||||
|
|
||||||
<!-- Settings -->
|
<!-- Settings -->
|
||||||
<string name="show_hidden_media">Versteckte Ordner zeigen</string>
|
<string name="show_hidden_media">Versteckte Ordner zeigen</string>
|
||||||
<string name="autoplay_videos">Videos automatisch abspielen</string>
|
<string name="autoplay_videos">Videos automatisch abspielen</string>
|
||||||
|
@ -92,7 +103,7 @@
|
||||||
<string name="images_videos_gifs">Bilder, Videos und GIFs</string>
|
<string name="images_videos_gifs">Bilder, Videos und GIFs</string>
|
||||||
<string name="images_and_videos">Bilder und Videos</string>
|
<string name="images_and_videos">Bilder und Videos</string>
|
||||||
<string name="loop_videos">Videos in Endlosschleife spielen</string>
|
<string name="loop_videos">Videos in Endlosschleife spielen</string>
|
||||||
<string name="animate_gifs">Kacheln bei GIFs animieren</string>
|
<string name="animate_gifs">Kacheln von GIFs animieren</string>
|
||||||
<string name="max_brightness">Helligkeit beim Betrachten maximieren</string>
|
<string name="max_brightness">Helligkeit beim Betrachten maximieren</string>
|
||||||
<string name="crop_thumbnails">Kacheln quadratisch zuschneiden</string>
|
<string name="crop_thumbnails">Kacheln quadratisch zuschneiden</string>
|
||||||
<string name="screen_rotation_by">Im Vollbild ausrichten nach</string>
|
<string name="screen_rotation_by">Im Vollbild ausrichten nach</string>
|
||||||
|
@ -101,6 +112,8 @@
|
||||||
<string name="screen_rotation_aspect_ratio">Seitenverhältnis</string>
|
<string name="screen_rotation_aspect_ratio">Seitenverhältnis</string>
|
||||||
<string name="dark_background_at_fullscreen">Schwarzer Hintergrund im Vollbild</string>
|
<string name="dark_background_at_fullscreen">Schwarzer Hintergrund im Vollbild</string>
|
||||||
<string name="scroll_thumbnails_horizontally">Kacheln horizontal scrollen</string>
|
<string name="scroll_thumbnails_horizontally">Kacheln horizontal scrollen</string>
|
||||||
|
<string name="hide_system_ui_at_fullscreen">Systemleisten ausblenden im Vollbild</string>
|
||||||
|
<string name="replace_share_with_rotate">Teilen/Drehen im Vollbild-Menü vertauschen</string>
|
||||||
|
|
||||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||||
<!-- Short description has to have less than 80 chars -->
|
<!-- Short description has to have less than 80 chars -->
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="app_name">Simple Gallery</string>
|
<string name="app_name">Simple Gallery</string>
|
||||||
<string name="app_launcher_name">Gallery</string>
|
<string name="app_launcher_name">Galería</string>
|
||||||
<string name="edit">Editar</string>
|
<string name="edit">Editar</string>
|
||||||
<string name="open_camera">Abrir cámara</string>
|
<string name="open_camera">Abrir cámara</string>
|
||||||
<string name="open_with">Abrir con…</string>
|
<string name="open_with">Abrir con…</string>
|
||||||
|
@ -19,11 +19,12 @@
|
||||||
<string name="no_camera_app_found">No se encontró aplicación de cámara</string>
|
<string name="no_camera_app_found">No se encontró aplicación de cámara</string>
|
||||||
<string name="increase_column_count">Aumentar el número de columnas</string>
|
<string name="increase_column_count">Aumentar el número de columnas</string>
|
||||||
<string name="reduce_column_count">Reducir el número de columnas</string>
|
<string name="reduce_column_count">Reducir el número de columnas</string>
|
||||||
<string name="temporarily_show_hidden">Mostrar ocultos temporalmente</string>
|
<string name="change_cover_image">Cambiar imagen de portada</string>
|
||||||
<string name="change_cover_image">Change cover image</string>
|
<string name="select_photo">Seleccionar imagen</string>
|
||||||
<string name="select_photo">Select photo</string>
|
<string name="use_default">Uso por defecto</string>
|
||||||
<string name="use_default">Use default</string>
|
<string name="set_as">Establecer como</string>
|
||||||
<string name="set_as">Set as</string>
|
<string name="volume">Volume</string>
|
||||||
|
<string name="brightness">Brightness</string>
|
||||||
|
|
||||||
<!-- Hide / Exclude -->
|
<!-- Hide / Exclude -->
|
||||||
<string name="hide_folder_description">Esta función oculta la carpeta agregando un archivo \'.nomedia\' en ella, y ocultará también las subcarpetas. Puede mostrarlas cambiando la opción \'Mostrar carpetas ocultas\' en los Ajustes. ¿Continuar?</string>
|
<string name="hide_folder_description">Esta función oculta la carpeta agregando un archivo \'.nomedia\' en ella, y ocultará también las subcarpetas. Puede mostrarlas cambiando la opción \'Mostrar carpetas ocultas\' en los Ajustes. ¿Continuar?</string>
|
||||||
|
@ -32,7 +33,7 @@
|
||||||
<string name="manage_excluded_folders">Gestionar carpetas excluidas</string>
|
<string name="manage_excluded_folders">Gestionar carpetas excluidas</string>
|
||||||
<string name="exclude_folder_description">Esto excluirá la selección junto con sus subcarpetas, solamente de Simple Gallery. Puede gestionar las carpetas excluidas en los Ajustes.</string>
|
<string name="exclude_folder_description">Esto excluirá la selección junto con sus subcarpetas, solamente de Simple Gallery. Puede gestionar las carpetas excluidas en los Ajustes.</string>
|
||||||
<string name="exclude_folder_parent">¿Excluir mejor la carpeta superior?</string>
|
<string name="exclude_folder_parent">¿Excluir mejor la carpeta superior?</string>
|
||||||
<string name="excluded_activity_placeholder">Excluding folders will make them together with their subfolders hidden just in Simple Gallery, they will still be visible in other applications.\\n\\nIf you want to hide them from other apps too, use the Hide function.</string>
|
<string name="excluded_activity_placeholder">Excluir las carpetas las hará junto a sus subcarpetas ocultas sólo en Simple Gallery, estas seguirán siendo visibles en otras aplicaciones.\\n\\nSi desea ocultarlo de otras aplicaciones, utilice la función de Ocultar.</string>
|
||||||
<string name="remove_all">Eliminar todo</string>
|
<string name="remove_all">Eliminar todo</string>
|
||||||
<string name="remove_all_description">¿Eliminar todas las carpetas de la lista de excluidas? Esto no borrará las carpetas.</string>
|
<string name="remove_all_description">¿Eliminar todas las carpetas de la lista de excluidas? Esto no borrará las carpetas.</string>
|
||||||
|
|
||||||
|
@ -67,8 +68,7 @@
|
||||||
<string name="flip">Girar</string>
|
<string name="flip">Girar</string>
|
||||||
<string name="flip_horizontally">Horizontalmente</string>
|
<string name="flip_horizontally">Horizontalmente</string>
|
||||||
<string name="flip_vertically">Verticalmente</string>
|
<string name="flip_vertically">Verticalmente</string>
|
||||||
<string name="out_of_memory_error">Error: sin memoria</string>
|
<string name="edit_with">Editar con</string>
|
||||||
<string name="edit_with">Edit with</string>
|
|
||||||
|
|
||||||
<!-- Set wallpaper -->
|
<!-- Set wallpaper -->
|
||||||
<string name="simple_wallpaper">Fondos de pantalla Simple Gallery</string>
|
<string name="simple_wallpaper">Fondos de pantalla Simple Gallery</string>
|
||||||
|
@ -81,6 +81,17 @@
|
||||||
<string name="portrait_aspect_ratio">Relación de aspecto tipo retrato</string>
|
<string name="portrait_aspect_ratio">Relación de aspecto tipo retrato</string>
|
||||||
<string name="landscape_aspect_ratio">Relación de aspecto tipo paisaje</string>
|
<string name="landscape_aspect_ratio">Relación de aspecto tipo paisaje</string>
|
||||||
|
|
||||||
|
<!-- Slideshow -->
|
||||||
|
<string name="slideshow">Slideshow</string>
|
||||||
|
<string name="interval">Interval (seconds):</string>
|
||||||
|
<string name="include_photos">Include photos and GIFs</string>
|
||||||
|
<string name="include_videos">Include videos</string>
|
||||||
|
<string name="random_order">Random order</string>
|
||||||
|
<string name="use_fade">Use fade animations</string>
|
||||||
|
<string name="move_backwards">Move backwards</string>
|
||||||
|
<string name="slideshow_ended">The slideshow ended</string>
|
||||||
|
<string name="no_media_for_slideshow">No media for the slideshow have been found</string>
|
||||||
|
|
||||||
<!-- Settings -->
|
<!-- Settings -->
|
||||||
<string name="show_hidden_media">Mostrar carpetas ocultas</string>
|
<string name="show_hidden_media">Mostrar carpetas ocultas</string>
|
||||||
<string name="autoplay_videos">Reproducir vídeos automáticamente</string>
|
<string name="autoplay_videos">Reproducir vídeos automáticamente</string>
|
||||||
|
@ -88,8 +99,8 @@
|
||||||
<string name="show_media">Mostrar multimedia</string>
|
<string name="show_media">Mostrar multimedia</string>
|
||||||
<string name="images">Solo imágenes</string>
|
<string name="images">Solo imágenes</string>
|
||||||
<string name="videos">Solo vídeos</string>
|
<string name="videos">Solo vídeos</string>
|
||||||
<string name="gifs">GIFs only</string>
|
<string name="gifs">solo GIFs</string>
|
||||||
<string name="images_videos_gifs">Images, videos, GIFs</string>
|
<string name="images_videos_gifs">Imágenes, vídeos, GIFs</string>
|
||||||
<string name="images_and_videos">Imágenes y vídeos</string>
|
<string name="images_and_videos">Imágenes y vídeos</string>
|
||||||
<string name="loop_videos">Reproducción continua de vídeos</string>
|
<string name="loop_videos">Reproducción continua de vídeos</string>
|
||||||
<string name="animate_gifs">Animar las miniaturas de GIFs</string>
|
<string name="animate_gifs">Animar las miniaturas de GIFs</string>
|
||||||
|
@ -100,7 +111,9 @@
|
||||||
<string name="screen_rotation_device_rotation">Rotación del dispositivo</string>
|
<string name="screen_rotation_device_rotation">Rotación del dispositivo</string>
|
||||||
<string name="screen_rotation_aspect_ratio">Relación de aspecto</string>
|
<string name="screen_rotation_aspect_ratio">Relación de aspecto</string>
|
||||||
<string name="dark_background_at_fullscreen">Utilizar siempre fondo oscuro en pantalla completa</string>
|
<string name="dark_background_at_fullscreen">Utilizar siempre fondo oscuro en pantalla completa</string>
|
||||||
<string name="scroll_thumbnails_horizontally">Scroll thumbnails horizontally</string>
|
<string name="scroll_thumbnails_horizontally">Desplazar miniaturas horizontalmente</string>
|
||||||
|
<string name="hide_system_ui_at_fullscreen">Ocultar automáticamente la interfaz de usuario del sistema en medios de pantalla completa</string>
|
||||||
|
<string name="replace_share_with_rotate">Reemplazar Compartir con Girar en el menú de pantalla completa</string>
|
||||||
|
|
||||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||||
<!-- Short description has to have less than 80 chars -->
|
<!-- Short description has to have less than 80 chars -->
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<string name="app_name">Simple Galerie</string>
|
<string name="app_name">Simple Galerie</string>
|
||||||
<string name="app_launcher_name">Galerie</string>
|
<string name="app_launcher_name">Galerie</string>
|
||||||
<string name="edit">Édition</string>
|
<string name="edit">Édition</string>
|
||||||
<string name="open_camera">Ouvrir caméra</string>
|
<string name="open_camera">Ouvrir appareil photo</string>
|
||||||
<string name="open_with">Ouvrir avec</string>
|
<string name="open_with">Ouvrir avec</string>
|
||||||
<string name="no_app_found">Aucune application valide trouvée</string>
|
<string name="no_app_found">Aucune application valide trouvée</string>
|
||||||
<string name="hidden">(caché)</string>
|
<string name="hidden">(caché)</string>
|
||||||
|
@ -16,14 +16,15 @@
|
||||||
<string name="show_on_map">Afficher sur la carte</string>
|
<string name="show_on_map">Afficher sur la carte</string>
|
||||||
<string name="unknown_location">Position inconnue</string>
|
<string name="unknown_location">Position inconnue</string>
|
||||||
<string name="no_map_application">Aucune application de cartes n\'a été trouvée</string>
|
<string name="no_map_application">Aucune application de cartes n\'a été trouvée</string>
|
||||||
<string name="no_camera_app_found">Aucune application d\appareil photo n\'a été trouvée</string>
|
<string name="no_camera_app_found">Aucune application d\\appareil photo n\'a été trouvée</string>
|
||||||
<string name="increase_column_count">Augmenter le nombre de colonnes</string>
|
<string name="increase_column_count">Augmenter le nombre de colonnes</string>
|
||||||
<string name="reduce_column_count">Réduire le nombre de colonnes</string>
|
<string name="reduce_column_count">Réduire le nombre de colonnes</string>
|
||||||
<string name="temporarily_show_hidden">Afficher temporairement les fichiers masqués</string>
|
|
||||||
<string name="change_cover_image">Change cover image</string>
|
<string name="change_cover_image">Change cover image</string>
|
||||||
<string name="select_photo">Select photo</string>
|
<string name="select_photo">Sélectionner une photo</string>
|
||||||
<string name="use_default">Use default</string>
|
<string name="use_default">Use default</string>
|
||||||
<string name="set_as">Set as</string>
|
<string name="set_as">Set as</string>
|
||||||
|
<string name="volume">Volume</string>
|
||||||
|
<string name="brightness">Luminosité</string>
|
||||||
|
|
||||||
<!-- Hide / Exclude -->
|
<!-- Hide / Exclude -->
|
||||||
<string name="hide_folder_description">Cette option masque le dossier en ajoutant un fichier \'.nomedia\' à l\'intérieur, cela masquera aussi tous les sous-dossiers. Vous pouvez les voir en modifiant l\'option \'Afficher les dossiers cachés\' dans les Paramètres. Continuer ?</string>
|
<string name="hide_folder_description">Cette option masque le dossier en ajoutant un fichier \'.nomedia\' à l\'intérieur, cela masquera aussi tous les sous-dossiers. Vous pouvez les voir en modifiant l\'option \'Afficher les dossiers cachés\' dans les Paramètres. Continuer ?</string>
|
||||||
|
@ -66,9 +67,8 @@
|
||||||
<string name="rotate_one_eighty">Pivoter à 180º</string>
|
<string name="rotate_one_eighty">Pivoter à 180º</string>
|
||||||
<string name="flip">Retourner</string>
|
<string name="flip">Retourner</string>
|
||||||
<string name="flip_horizontally">Retourner horizontalement</string>
|
<string name="flip_horizontally">Retourner horizontalement</string>
|
||||||
<string name="flip_vertically">Retourner verticallement</string>
|
<string name="flip_vertically">Retourner verticalement</string>
|
||||||
<string name="out_of_memory_error">Erreur excès de mémoire</string>
|
<string name="edit_with">Éditer avec</string>
|
||||||
<string name="edit_with">Edit with</string>
|
|
||||||
|
|
||||||
<!-- Set wallpaper -->
|
<!-- Set wallpaper -->
|
||||||
<string name="simple_wallpaper">Simple fond d\'écran</string>
|
<string name="simple_wallpaper">Simple fond d\'écran</string>
|
||||||
|
@ -76,44 +76,49 @@
|
||||||
<string name="set_as_wallpaper_failed">Échec de la définition en tant que fond d\'écran.</string>
|
<string name="set_as_wallpaper_failed">Échec de la définition en tant que fond d\'écran.</string>
|
||||||
<string name="set_as_wallpaper_with">Définir comme fond d\'écran avec :</string>
|
<string name="set_as_wallpaper_with">Définir comme fond d\'écran avec :</string>
|
||||||
<string name="no_capable_app_found">Aucune application trouvée pour continuer cette action</string>
|
<string name="no_capable_app_found">Aucune application trouvée pour continuer cette action</string>
|
||||||
<string name="setting_wallpaper">Paramètre de fond d\'écran…</string>
|
<string name="setting_wallpaper">Paramètres de fond d\'écran…</string>
|
||||||
<string name="wallpaper_set_successfully">Fond d\'écran défini avec succès.</string>
|
<string name="wallpaper_set_successfully">Fond d\'écran défini avec succès</string>
|
||||||
<string name="portrait_aspect_ratio">Ratio aspect Portrait</string>
|
<string name="portrait_aspect_ratio">Ratio aspect Portrait</string>
|
||||||
<string name="landscape_aspect_ratio">Ratio aspect Paysage</string>
|
<string name="landscape_aspect_ratio">Ratio aspect Paysage</string>
|
||||||
|
|
||||||
|
<!-- Slideshow -->
|
||||||
|
<string name="slideshow">Diaporama</string>
|
||||||
|
<string name="interval">Intervalle (secondes):</string>
|
||||||
|
<string name="include_photos">Inclure photos et GIFs</string>
|
||||||
|
<string name="include_videos">Inclure vidéos</string>
|
||||||
|
<string name="random_order">Ordre aléatoire</string>
|
||||||
|
<string name="use_fade">Utiliser un fondu</string>
|
||||||
|
<string name="move_backwards">Move backwards</string>
|
||||||
|
<string name="slideshow_ended">Diaporama terminé</string>
|
||||||
|
<string name="no_media_for_slideshow">No media for the slideshow have been found</string>
|
||||||
|
|
||||||
<!-- Settings -->
|
<!-- Settings -->
|
||||||
<string name="show_hidden_media">Afficher les dossiers cachés</string>
|
<string name="show_hidden_media">Afficher les dossiers cachés</string>
|
||||||
<string name="autoplay_videos">Lecture automatique des vidéos</string>
|
<string name="autoplay_videos">Lecture automatique des vidéos</string>
|
||||||
<string name="toggle_filename">Permutter la visibilité des noms de fichier</string>
|
<string name="toggle_filename">Permuter la visibilité des noms de fichier</string>
|
||||||
<string name="show_media">Afficher les médias</string>
|
<string name="show_media">Afficher les médias</string>
|
||||||
<string name="images">Seulement les images</string>
|
<string name="images">Seulement les images</string>
|
||||||
<string name="videos">Vidéos uniquement</string>
|
<string name="videos">Vidéos uniquement</string>
|
||||||
<string name="gifs">GIFs only</string>
|
<string name="gifs">GIFs seulement</string>
|
||||||
<string name="images_videos_gifs">Images, videos, GIFs</string>
|
<string name="images_videos_gifs">Images, vidéos, GIFs</string>
|
||||||
<string name="images_and_videos">Images et vidéos</string>
|
<string name="images_and_videos">Images et vidéos</string>
|
||||||
<string name="loop_videos">Tourner en boucle les vidéos</string>
|
<string name="loop_videos">Tourner en boucle les vidéos</string>
|
||||||
<string name="animate_gifs">GIFs animés sur les miniatures</string>
|
<string name="animate_gifs">GIFs animés sur les miniatures</string>
|
||||||
<string name="max_brightness">Luminosité maximale lors de l\'affichage de media</string>
|
<string name="max_brightness">Luminosité maximale lors de l\'affichage de media</string>
|
||||||
<string name="crop_thumbnails">Rogner les miniatures en carrés</string>
|
<string name="crop_thumbnails">Rogner les miniatures en carrés</string>
|
||||||
<string name="screen_rotation_by">Pivoter les medias plen écran selon</string>
|
<string name="screen_rotation_by">Pivoter les medias plein écran selon</string>
|
||||||
<string name="screen_rotation_system_setting">Paramètres système</string>
|
<string name="screen_rotation_system_setting">Paramètres système</string>
|
||||||
<string name="screen_rotation_device_rotation">Rotation de l\'appareil</string>
|
<string name="screen_rotation_device_rotation">Rotation de l\'appareil</string>
|
||||||
<string name="screen_rotation_aspect_ratio">Ratio d\'aspect</string>
|
<string name="screen_rotation_aspect_ratio">Ratio d\'aspect</string>
|
||||||
<string name="dark_background_at_fullscreen">Dark background at fullscreen media</string>
|
<string name="dark_background_at_fullscreen">Dark background at fullscreen media</string>
|
||||||
<string name="scroll_thumbnails_horizontally">Scroll thumbnails horizontally</string>
|
<string name="scroll_thumbnails_horizontally">Défilement des mignatures horizontalement</string>
|
||||||
|
<string name="hide_system_ui_at_fullscreen">Automatically hide system UI at fullscreen media</string>
|
||||||
|
<string name="replace_share_with_rotate">Replace Share with Rotate at fullscreen menu</string>
|
||||||
|
|
||||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||||
<!-- Short description has to have less than 80 chars -->
|
<!-- Short description has to have less than 80 chars -->
|
||||||
<string name="app_short_description">Un album pour visionner photos et vidéos sans publicité.</string>
|
<string name="app_short_description">Un album pour visionner photos et vidéos sans publicité.</string>
|
||||||
<string name="app_long_description">
|
<string name="app_long_description">Un simple outil pour visionner les photos et les vidéos. Elles peuvent être triées par dates, tailles, noms dans les deux sens (alphabétique comme désalphabétique), il est possible de zoomer sur les photos. Les fichiers sont affichés sur de multiple colonnes en fonction de la taille de l\'écran, vous pouvez changer le nombre de colonnes par pincement. Elles peuvent être renommées, partagées, supprimées, copiées et déplacées. Les images peuvent en plus être tournées, rognées ou être définies comme fond d\'écran directement depuis l\'application. La galerie est aussi offerte pour l\'utiliser comme une tierce partie pour de la prévisualisation des images/vidéos, joindre aux clients mail etc. C\'est parfait pour un usage au quotidien. L\'application ne contient ni de publicité ni d\'autorisation inutile. Elle est totalement OpenSource et est aussi fournie avec un thème sombre. Cette application est juste l\'une des applications d\'une plus grande suite. Vous pouvez trouver les autres sur http://www.simplemobiletools.com</string>
|
||||||
Un simple outil pour visionner les photos et les vidéos. Elles peuvent être triées par dates, tailles, noms dans les deux sens (alphabétique comme désalphabétique), il est possible de zoomer sur les photos. Les fichiers sont affichés sur de multiple colonnes en fonction de la taille de l\'écran, vous pouvez changer le nombre de colonnes par pincement. Elles peuvent être renommées, partagées, supprimées, copiées et déplacées. Les images peuvent en plus être tournées, rognées ou être définies comme fond d\'écran directement depuis l\'application.
|
|
||||||
|
|
||||||
La galerie est aussi offerte pour l\'utiliser comme une tierce partie pour de la prévisualisation des images/vidéos, joindre aux clients mail etc. C\'est parfait pour un usage au quotidien.
|
|
||||||
|
|
||||||
L\'application ne contient ni de publicité ni d\'autorisation inutile. Elle est totalement OpenSource et est aussi fournie avec un thème sombre.
|
|
||||||
|
|
||||||
Cette application est juste l\'une des applications d\'une plus grande suite. Vous pouvez trouver les autres sur http://www.simplemobiletools.com
|
|
||||||
</string>
|
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Haven't found some strings? There's more at
|
Haven't found some strings? There's more at
|
||||||
|
|
|
@ -19,11 +19,12 @@
|
||||||
<string name="no_camera_app_found">No Camera app has been found</string>
|
<string name="no_camera_app_found">No Camera app has been found</string>
|
||||||
<string name="increase_column_count">Increase column count</string>
|
<string name="increase_column_count">Increase column count</string>
|
||||||
<string name="reduce_column_count">Reduce column count</string>
|
<string name="reduce_column_count">Reduce column count</string>
|
||||||
<string name="temporarily_show_hidden">Temporarily show hidden</string>
|
|
||||||
<string name="change_cover_image">Change cover image</string>
|
<string name="change_cover_image">Change cover image</string>
|
||||||
<string name="select_photo">Select photo</string>
|
<string name="select_photo">Select photo</string>
|
||||||
<string name="use_default">Use default</string>
|
<string name="use_default">Use default</string>
|
||||||
<string name="set_as">Set as</string>
|
<string name="set_as">Set as</string>
|
||||||
|
<string name="volume">Volume</string>
|
||||||
|
<string name="brightness">Brightness</string>
|
||||||
|
|
||||||
<!-- Hide / Exclude -->
|
<!-- Hide / Exclude -->
|
||||||
<string name="hide_folder_description">This function hides the folder by adding a \'.nomedia\' file into it, it will hide all subfolders too. You can see them by toggling the \'Show hidden folders\' option in Settings. Continue?</string>
|
<string name="hide_folder_description">This function hides the folder by adding a \'.nomedia\' file into it, it will hide all subfolders too. You can see them by toggling the \'Show hidden folders\' option in Settings. Continue?</string>
|
||||||
|
@ -67,7 +68,6 @@
|
||||||
<string name="flip">Flip</string>
|
<string name="flip">Flip</string>
|
||||||
<string name="flip_horizontally">Flip horizontally</string>
|
<string name="flip_horizontally">Flip horizontally</string>
|
||||||
<string name="flip_vertically">Flip vertically</string>
|
<string name="flip_vertically">Flip vertically</string>
|
||||||
<string name="out_of_memory_error">Out of memory error</string>
|
|
||||||
<string name="edit_with">Edit with</string>
|
<string name="edit_with">Edit with</string>
|
||||||
|
|
||||||
<!-- Set wallpaper -->
|
<!-- Set wallpaper -->
|
||||||
|
@ -81,6 +81,17 @@
|
||||||
<string name="portrait_aspect_ratio">Portrait aspect ratio</string>
|
<string name="portrait_aspect_ratio">Portrait aspect ratio</string>
|
||||||
<string name="landscape_aspect_ratio">Landscape aspect ratio</string>
|
<string name="landscape_aspect_ratio">Landscape aspect ratio</string>
|
||||||
|
|
||||||
|
<!-- Slideshow -->
|
||||||
|
<string name="slideshow">Slideshow</string>
|
||||||
|
<string name="interval">Interval (seconds):</string>
|
||||||
|
<string name="include_photos">Include photos and GIFs</string>
|
||||||
|
<string name="include_videos">Include videos</string>
|
||||||
|
<string name="random_order">Random order</string>
|
||||||
|
<string name="use_fade">Use fade animations</string>
|
||||||
|
<string name="move_backwards">Move backwards</string>
|
||||||
|
<string name="slideshow_ended">The slideshow ended</string>
|
||||||
|
<string name="no_media_for_slideshow">No media for the slideshow have been found</string>
|
||||||
|
|
||||||
<!-- Settings -->
|
<!-- Settings -->
|
||||||
<string name="show_hidden_media">Show hidden media</string>
|
<string name="show_hidden_media">Show hidden media</string>
|
||||||
<string name="autoplay_videos">Play videos automatically</string>
|
<string name="autoplay_videos">Play videos automatically</string>
|
||||||
|
@ -101,6 +112,8 @@
|
||||||
<string name="screen_rotation_aspect_ratio">Aspect ratio</string>
|
<string name="screen_rotation_aspect_ratio">Aspect ratio</string>
|
||||||
<string name="dark_background_at_fullscreen">Dark background at fullscreen media</string>
|
<string name="dark_background_at_fullscreen">Dark background at fullscreen media</string>
|
||||||
<string name="scroll_thumbnails_horizontally">Scroll thumbnails horizontally</string>
|
<string name="scroll_thumbnails_horizontally">Scroll thumbnails horizontally</string>
|
||||||
|
<string name="hide_system_ui_at_fullscreen">Automatically hide system UI at fullscreen media</string>
|
||||||
|
<string name="replace_share_with_rotate">Replace Share with Rotate at fullscreen menu</string>
|
||||||
|
|
||||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||||
<!-- Short description has to have less than 80 chars -->
|
<!-- Short description has to have less than 80 chars -->
|
||||||
|
|
|
@ -19,11 +19,12 @@
|
||||||
<string name="no_camera_app_found">Nessuna app fotocamera trovata</string>
|
<string name="no_camera_app_found">Nessuna app fotocamera trovata</string>
|
||||||
<string name="increase_column_count">Aumenta numero colonne</string>
|
<string name="increase_column_count">Aumenta numero colonne</string>
|
||||||
<string name="reduce_column_count">Riduci numero colonne</string>
|
<string name="reduce_column_count">Riduci numero colonne</string>
|
||||||
<string name="temporarily_show_hidden">Mostra temporaneamente nascosti</string>
|
<string name="change_cover_image">Cambia immagine copertina</string>
|
||||||
<string name="change_cover_image">Change cover image</string>
|
<string name="select_photo">Seleziona foto</string>
|
||||||
<string name="select_photo">Select photo</string>
|
<string name="use_default">Usa predefinita</string>
|
||||||
<string name="use_default">Use default</string>
|
<string name="set_as">Imposta come</string>
|
||||||
<string name="set_as">Set as</string>
|
<string name="volume">Volume</string>
|
||||||
|
<string name="brightness">Luminosità</string>
|
||||||
|
|
||||||
<!-- Hide / Exclude -->
|
<!-- Hide / Exclude -->
|
||||||
<string name="hide_folder_description">Questa funzione nasconde la cartella aggiungendo un file \'.nomedia\' all\'interno, nasconderà anche tutte le sottocartelle. Puoi vederle attivando l\'opzione \'Mostra cartelle nascoste\' nelle impostazioni. Continuare?</string>
|
<string name="hide_folder_description">Questa funzione nasconde la cartella aggiungendo un file \'.nomedia\' all\'interno, nasconderà anche tutte le sottocartelle. Puoi vederle attivando l\'opzione \'Mostra cartelle nascoste\' nelle impostazioni. Continuare?</string>
|
||||||
|
@ -67,8 +68,7 @@
|
||||||
<string name="flip">Capovolgi</string>
|
<string name="flip">Capovolgi</string>
|
||||||
<string name="flip_horizontally">Capovolgi orizzontalmente</string>
|
<string name="flip_horizontally">Capovolgi orizzontalmente</string>
|
||||||
<string name="flip_vertically">Capovolgi verticalmente</string>
|
<string name="flip_vertically">Capovolgi verticalmente</string>
|
||||||
<string name="out_of_memory_error">Errore memoria esaurita</string>
|
<string name="edit_with">Modifica con</string>
|
||||||
<string name="edit_with">Edit with</string>
|
|
||||||
|
|
||||||
<!-- Set wallpaper -->
|
<!-- Set wallpaper -->
|
||||||
<string name="simple_wallpaper">Sfondo semplice</string>
|
<string name="simple_wallpaper">Sfondo semplice</string>
|
||||||
|
@ -81,6 +81,17 @@
|
||||||
<string name="portrait_aspect_ratio">Proporzioni ritratto</string>
|
<string name="portrait_aspect_ratio">Proporzioni ritratto</string>
|
||||||
<string name="landscape_aspect_ratio">Proporzioni panorama</string>
|
<string name="landscape_aspect_ratio">Proporzioni panorama</string>
|
||||||
|
|
||||||
|
<!-- Slideshow -->
|
||||||
|
<string name="slideshow">Presentazione</string>
|
||||||
|
<string name="interval">Intervallo (secondi):</string>
|
||||||
|
<string name="include_photos">Includi foto e GIF</string>
|
||||||
|
<string name="include_videos">Includi video</string>
|
||||||
|
<string name="random_order">Ordine sparso</string>
|
||||||
|
<string name="use_fade">Usa animazioni a dissolvenza</string>
|
||||||
|
<string name="move_backwards">Scorri al contrario</string>
|
||||||
|
<string name="slideshow_ended">La presentazione è terminata</string>
|
||||||
|
<string name="no_media_for_slideshow">Nessun media trovato per la presentazione</string>
|
||||||
|
|
||||||
<!-- Settings -->
|
<!-- Settings -->
|
||||||
<string name="show_hidden_media">Mostra cartelle nascoste</string>
|
<string name="show_hidden_media">Mostra cartelle nascoste</string>
|
||||||
<string name="autoplay_videos">Riproduci video automaticamente</string>
|
<string name="autoplay_videos">Riproduci video automaticamente</string>
|
||||||
|
@ -88,8 +99,8 @@
|
||||||
<string name="show_media">Mostra tipo di media</string>
|
<string name="show_media">Mostra tipo di media</string>
|
||||||
<string name="images">Solo immagini</string>
|
<string name="images">Solo immagini</string>
|
||||||
<string name="videos">Solo video</string>
|
<string name="videos">Solo video</string>
|
||||||
<string name="gifs">GIFs only</string>
|
<string name="gifs">Solo GIF</string>
|
||||||
<string name="images_videos_gifs">Images, videos, GIFs</string>
|
<string name="images_videos_gifs">Immagini, video, GIF</string>
|
||||||
<string name="images_and_videos">Immagini e video</string>
|
<string name="images_and_videos">Immagini e video</string>
|
||||||
<string name="loop_videos">Ripeti i video</string>
|
<string name="loop_videos">Ripeti i video</string>
|
||||||
<string name="animate_gifs">Anima le GIF in miniatura</string>
|
<string name="animate_gifs">Anima le GIF in miniatura</string>
|
||||||
|
@ -100,7 +111,9 @@
|
||||||
<string name="screen_rotation_device_rotation">Rotazione dispositivo</string>
|
<string name="screen_rotation_device_rotation">Rotazione dispositivo</string>
|
||||||
<string name="screen_rotation_aspect_ratio">Proporzioni</string>
|
<string name="screen_rotation_aspect_ratio">Proporzioni</string>
|
||||||
<string name="dark_background_at_fullscreen">Sfondo scuro a schermo intero</string>
|
<string name="dark_background_at_fullscreen">Sfondo scuro a schermo intero</string>
|
||||||
<string name="scroll_thumbnails_horizontally">Scroll thumbnails horizontally</string>
|
<string name="scroll_thumbnails_horizontally">Scorri miniature orizzontalmente</string>
|
||||||
|
<string name="hide_system_ui_at_fullscreen">Nascondi UI di sistema con media a schermo intero</string>
|
||||||
|
<string name="replace_share_with_rotate">Sostituisci Condividi con Ruota a schermo intero</string>
|
||||||
|
|
||||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||||
<!-- Short description has to have less than 80 chars -->
|
<!-- Short description has to have less than 80 chars -->
|
||||||
|
|
|
@ -19,11 +19,12 @@
|
||||||
<string name="no_camera_app_found">No Camera app has been found</string>
|
<string name="no_camera_app_found">No Camera app has been found</string>
|
||||||
<string name="increase_column_count">Increase column count</string>
|
<string name="increase_column_count">Increase column count</string>
|
||||||
<string name="reduce_column_count">Reduce column count</string>
|
<string name="reduce_column_count">Reduce column count</string>
|
||||||
<string name="temporarily_show_hidden">Temporarily show hidden</string>
|
|
||||||
<string name="change_cover_image">Change cover image</string>
|
<string name="change_cover_image">Change cover image</string>
|
||||||
<string name="select_photo">Select photo</string>
|
<string name="select_photo">Select photo</string>
|
||||||
<string name="use_default">Use default</string>
|
<string name="use_default">Use default</string>
|
||||||
<string name="set_as">Set as</string>
|
<string name="set_as">Set as</string>
|
||||||
|
<string name="volume">Volume</string>
|
||||||
|
<string name="brightness">Brightness</string>
|
||||||
|
|
||||||
<!-- Hide / Exclude -->
|
<!-- Hide / Exclude -->
|
||||||
<string name="hide_folder_description">This function hides the folder by adding a \'.nomedia\' file into it, it will hide all subfolders too. You can see them by toggling the \'Show hidden folders\' option in Settings. Continue?</string>
|
<string name="hide_folder_description">This function hides the folder by adding a \'.nomedia\' file into it, it will hide all subfolders too. You can see them by toggling the \'Show hidden folders\' option in Settings. Continue?</string>
|
||||||
|
@ -67,7 +68,6 @@
|
||||||
<string name="flip">Flip</string>
|
<string name="flip">Flip</string>
|
||||||
<string name="flip_horizontally">Flip horizontally</string>
|
<string name="flip_horizontally">Flip horizontally</string>
|
||||||
<string name="flip_vertically">Flip vertically</string>
|
<string name="flip_vertically">Flip vertically</string>
|
||||||
<string name="out_of_memory_error">Out of memory error</string>
|
|
||||||
<string name="edit_with">Edit with</string>
|
<string name="edit_with">Edit with</string>
|
||||||
|
|
||||||
<!-- Set wallpaper -->
|
<!-- Set wallpaper -->
|
||||||
|
@ -81,6 +81,17 @@
|
||||||
<string name="portrait_aspect_ratio">Portrait aspect ratio</string>
|
<string name="portrait_aspect_ratio">Portrait aspect ratio</string>
|
||||||
<string name="landscape_aspect_ratio">Landscape aspect ratio</string>
|
<string name="landscape_aspect_ratio">Landscape aspect ratio</string>
|
||||||
|
|
||||||
|
<!-- Slideshow -->
|
||||||
|
<string name="slideshow">Slideshow</string>
|
||||||
|
<string name="interval">Interval (seconds):</string>
|
||||||
|
<string name="include_photos">Include photos and GIFs</string>
|
||||||
|
<string name="include_videos">Include videos</string>
|
||||||
|
<string name="random_order">Random order</string>
|
||||||
|
<string name="use_fade">Use fade animations</string>
|
||||||
|
<string name="move_backwards">Move backwards</string>
|
||||||
|
<string name="slideshow_ended">The slideshow ended</string>
|
||||||
|
<string name="no_media_for_slideshow">No media for the slideshow have been found</string>
|
||||||
|
|
||||||
<!-- Settings -->
|
<!-- Settings -->
|
||||||
<string name="show_hidden_media">非表示フォルダーを表示</string>
|
<string name="show_hidden_media">非表示フォルダーを表示</string>
|
||||||
<string name="autoplay_videos">自動的にビデオを再生</string>
|
<string name="autoplay_videos">自動的にビデオを再生</string>
|
||||||
|
@ -101,6 +112,8 @@
|
||||||
<string name="screen_rotation_aspect_ratio">Aspect ratio</string>
|
<string name="screen_rotation_aspect_ratio">Aspect ratio</string>
|
||||||
<string name="dark_background_at_fullscreen">Dark background at fullscreen media</string>
|
<string name="dark_background_at_fullscreen">Dark background at fullscreen media</string>
|
||||||
<string name="scroll_thumbnails_horizontally">Scroll thumbnails horizontally</string>
|
<string name="scroll_thumbnails_horizontally">Scroll thumbnails horizontally</string>
|
||||||
|
<string name="hide_system_ui_at_fullscreen">Automatically hide system UI at fullscreen media</string>
|
||||||
|
<string name="replace_share_with_rotate">Replace Share with Rotate at fullscreen menu</string>
|
||||||
|
|
||||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||||
<!-- Short description has to have less than 80 chars -->
|
<!-- Short description has to have less than 80 chars -->
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="app_name">Simple Gallery</string>
|
<string name="app_name">Simple Gallery</string>
|
||||||
<string name="app_launcher_name">Galeria</string>
|
<string name="app_launcher_name">Simple Gallery</string>
|
||||||
<string name="edit">Edytuj</string>
|
<string name="edit">Edytuj</string>
|
||||||
<string name="open_camera">Aparat</string>
|
<string name="open_camera">Uruchom aplikację aparatu</string>
|
||||||
<string name="open_with">Otwórz w</string>
|
<string name="open_with">Otwórz w</string>
|
||||||
<string name="no_app_found">Nie znaleziono danych aplikacji</string>
|
<string name="no_app_found">Nie znaleziono danych aplikacji</string>
|
||||||
<string name="hidden">(ukryty)</string>
|
<string name="hidden">(ukryty)</string>
|
||||||
<string name="pin_folder">Pin folder</string>
|
<string name="pin_folder">Przypnij folder</string>
|
||||||
<string name="unpin_folder">Wypakuj folder</string>
|
<string name="unpin_folder">Wypakuj folder</string>
|
||||||
<string name="show_all">Pokaż wszystko</string>
|
<string name="show_all">Pokaż wszystko</string>
|
||||||
<string name="all_folders">Wszystkie foldery</string>
|
<string name="all_folders">Wszystkie foldery</string>
|
||||||
|
@ -19,105 +19,115 @@
|
||||||
<string name="no_camera_app_found">Brak aplikacji powiązanej z aparatem</string>
|
<string name="no_camera_app_found">Brak aplikacji powiązanej z aparatem</string>
|
||||||
<string name="increase_column_count">Zwiększ liczbę kolumn</string>
|
<string name="increase_column_count">Zwiększ liczbę kolumn</string>
|
||||||
<string name="reduce_column_count">Zmniejsz liczbę kolumn</string>
|
<string name="reduce_column_count">Zmniejsz liczbę kolumn</string>
|
||||||
<string name="temporarily_show_hidden">Temporarily show hidden</string>
|
<string name="change_cover_image">Zmień okładkę</string>
|
||||||
<string name="change_cover_image">Change cover image</string>
|
<string name="select_photo">Wybierz obraz</string>
|
||||||
<string name="select_photo">Select photo</string>
|
<string name="use_default">Użyj domyślnej</string>
|
||||||
<string name="use_default">Use default</string>
|
<string name="set_as">Ustaw jako</string>
|
||||||
<string name="set_as">Set as</string>
|
<string name="volume">Głośność</string>
|
||||||
|
<string name="brightness">Jasność</string>
|
||||||
|
|
||||||
<!-- Hide / Exclude -->
|
<!-- Hide / Exclude -->
|
||||||
<string name="hide_folder_description">Ta funkcja ukrywa folder dodając \'. \' Nomedia plik do niego, można tak ukryć wszystkie podfoldery. Można je zobaczyć poprzez przełączanie \'Pokaż ukryte foldery \' opcję w ustawieniach. Kontyntynuj?</string>
|
<string name="hide_folder_description">Ta funkcja ukrywa foldery dodając do nich pusty plik .nomedia. Aby móc je zobaczyć, należy włączyć opcję \'Pokazuj ukryte foldery\' w ustawieniach. Kontyntynuować?</string>
|
||||||
<string name="exclude">Wyklucz</string>
|
<string name="exclude">Wyklucz</string>
|
||||||
<string name="excluded_folders">Wyklucz foldery</string>
|
<string name="excluded_folders">Wykluczone foldery</string>
|
||||||
<string name="manage_excluded_folders">Zarządzaj wykluczonymi folderami</string>
|
<string name="manage_excluded_folders">Zarządzaj wykluczonymi folderami</string>
|
||||||
<string name="exclude_folder_description">Działa na folderach Galerii. Możesz zarządzać wykluczonymi folderami w Menu/Ustawienia.</string>
|
<string name="exclude_folder_description">Działa na folderach galerii. Możesz zarządzać wykluczonymi folderami w ustawieniach aplikacji.</string>
|
||||||
<string name="exclude_folder_parent">Wykluczyć folder nadżędny ?</string>
|
<string name="exclude_folder_parent">Wykluczyć folder nadrzędny?</string>
|
||||||
<string name="excluded_activity_placeholder">Excluding folders will make them together with their subfolders hidden just in Simple Gallery, they will still be visible in other applications.\\n\\nIf you want to hide them from other apps too, use the Hide function.</string>
|
<string name="excluded_activity_placeholder">Wykluczenie folderów ukryje je tylko w aplikacji Simple Gallery, w innych aplikacjach będą one wciąż widoczne.\n\nJeśli chcesz je ukryć także w innych aplikacjach, użyj funkcji ukrywania.</string>
|
||||||
<string name="remove_all">Usuń wszystko</string>
|
<string name="remove_all">Usuń wszystko</string>
|
||||||
<string name="remove_all_description">Usuń wszystkie foldery z listy wykluczone? To nie usuwa folderów.</string>
|
<string name="remove_all_description">Usunąć wszystkie foldery z listy wykluczonych? Foldery nie zostaną fizycznie usunięte.</string>
|
||||||
|
|
||||||
<!-- Include folders -->
|
<!-- Include folders -->
|
||||||
<string name="include_folders">Included folders</string>
|
<string name="include_folders">Dołączone foldery</string>
|
||||||
<string name="manage_included_folders">Manage included folders</string>
|
<string name="manage_included_folders">Zarządzaj dołączonymi folderami</string>
|
||||||
<string name="add_folder">Add folder</string>
|
<string name="add_folder">Dodaj folder</string>
|
||||||
<string name="included_activity_placeholder">If you have some folders which contain media, but were not recognized by the app, you can add them manually here.</string>
|
<string name="included_activity_placeholder">Jeśli masz jakieś foldery z multimediami, ale aplikacja ich nie wykryła, możesz je tutaj dodać ręcznie.</string>
|
||||||
|
|
||||||
<!-- Resizing -->
|
<!-- Resizing -->
|
||||||
<string name="resize">Zmień rozmiar</string>
|
<string name="resize">Zmień rozmiar</string>
|
||||||
<string name="resize_and_save">Zmień i zapisz</string>
|
<string name="resize_and_save">Zmień i zapisz</string>
|
||||||
<string name="width">Długość</string>
|
<string name="width">Szerokość</string>
|
||||||
<string name="height">Wysokość</string>
|
<string name="height">Wysokość</string>
|
||||||
<string name="keep_aspect_ratio">Zachowaj proporcje</string>
|
<string name="keep_aspect_ratio">Zachowaj proporcje</string>
|
||||||
<string name="invalid_values">Wpisz poprawną rozdzielczość</string>
|
<string name="invalid_values">Wpisz poprawną rozdzielczość</string>
|
||||||
|
|
||||||
<!-- Editor -->
|
<!-- Editor -->
|
||||||
<string name="editor">Edycja</string>
|
<string name="editor">Edycja</string>
|
||||||
<string name="save">zapisz</string>
|
<string name="save">Zapisz</string>
|
||||||
<string name="rotate">Obróć</string>
|
<string name="rotate">Obróć</string>
|
||||||
<string name="path">Ścieżka</string>
|
<string name="path">Ścieżka</string>
|
||||||
<string name="invalid_image_path">Nieprawidłowa ścieżka</string>
|
<string name="invalid_image_path">Nieprawidłowa ścieżka</string>
|
||||||
<string name="image_editing_failed">Edycja obrazu nie powiodło się</string>
|
<string name="image_editing_failed">Edycja obrazu nie powiodła się</string>
|
||||||
<string name="edit_image_with">Edytuj obraz w:</string>
|
<string name="edit_image_with">Edytuj obraz w:</string>
|
||||||
<string name="no_editor_found">Nie znaleziono edytora zdjęć</string>
|
<string name="no_editor_found">Nie znalazłem edytora zdjęć</string>
|
||||||
<string name="unknown_file_location">Nieznana lokalizacja pliku</string>
|
<string name="unknown_file_location">Nieznana lokalizacja pliku</string>
|
||||||
<string name="error_saving_file">Nie udało się zastąpić pliku</string>
|
<string name="error_saving_file">Nie udało się zastąpić pliku</string>
|
||||||
<string name="rotate_left">Obróć w lewo</string>
|
<string name="rotate_left">Obróć w lewo</string>
|
||||||
<string name="rotate_right">Obróć w prawo</string>
|
<string name="rotate_right">Obróć w prawo</string>
|
||||||
<string name="rotate_one_eighty">Obróć o 180o</string>
|
<string name="rotate_one_eighty">Obróć o 180 stopni</string>
|
||||||
<string name="flip">Flip</string>
|
<string name="flip">Przewróć</string>
|
||||||
<string name="flip_horizontally">Flip poziomo</string>
|
<string name="flip_horizontally">Przewróć w poziomie</string>
|
||||||
<string name="flip_vertically">Flip pionowo</string>
|
<string name="flip_vertically">Przewróć w pionie</string>
|
||||||
<string name="out_of_memory_error">Błąd pamięci</string>
|
<string name="edit_with">Edytuj w:</string>
|
||||||
<string name="edit_with">Edit with</string>
|
|
||||||
|
|
||||||
<!-- Set wallpaper -->
|
<!-- Set wallpaper -->
|
||||||
<string name="simple_wallpaper">Tapeta</string>
|
<string name="simple_wallpaper">Tapeta</string>
|
||||||
<string name="set_as_wallpaper">Ustaw jako tapeta</string>
|
<string name="set_as_wallpaper">Ustaw jako tapetę</string>
|
||||||
<string name="set_as_wallpaper_failed">Ustawienie tapety nie powiodło się</string>
|
<string name="set_as_wallpaper_failed">Ustawienie tapety nie powiodło się</string>
|
||||||
<string name="set_as_wallpaper_with">Ustaw jako tapetę w:</string>
|
<string name="set_as_wallpaper_with">Ustaw jako tapetę w:</string>
|
||||||
<string name="no_capable_app_found">Brak odpowiednich ustawień</string>
|
<string name="no_capable_app_found">Brak odpowiednich ustawień</string>
|
||||||
<string name="setting_wallpaper">Ustawianie tapety…</string>
|
<string name="setting_wallpaper">Ustawiam tapetę…</string>
|
||||||
<string name="wallpaper_set_successfully">Tapeta ustawiona</string>
|
<string name="wallpaper_set_successfully">Tapeta została ustawiona</string>
|
||||||
<string name="portrait_aspect_ratio">Portrait aspect ratio</string>
|
<string name="portrait_aspect_ratio">Proporcje ekranu w trybie pionowym</string>
|
||||||
<string name="landscape_aspect_ratio">Landscape aspect ratio</string>
|
<string name="landscape_aspect_ratio">Proporcje ekranu w trybie poziomym</string>
|
||||||
|
|
||||||
|
<!-- Slideshow -->
|
||||||
|
<string name="slideshow">Pokaz slajdów</string>
|
||||||
|
<string name="interval">Przedział (sekundy):</string>
|
||||||
|
<string name="include_photos">Dołączaj zdjęcia i GIFy</string>
|
||||||
|
<string name="include_videos">Dołączaj filmy</string>
|
||||||
|
<string name="random_order">Losowa kolejność</string>
|
||||||
|
<string name="use_fade">Używaj płynnych przejść</string>
|
||||||
|
<string name="move_backwards">Odwrotna kolejność</string>
|
||||||
|
<string name="slideshow_ended">Pokaz slajdów zakończony</string>
|
||||||
|
<string name="no_media_for_slideshow">Nie znalazłem multimediów do pokazu slajdów</string>
|
||||||
|
|
||||||
<!-- Settings -->
|
<!-- Settings -->
|
||||||
<string name="show_hidden_media">Pokaż ukryte foldery</string>
|
<string name="show_hidden_media">Pokazuj ukryte foldery</string>
|
||||||
<string name="autoplay_videos">Odtwarzaj pliki wideo automatycznie</string>
|
<string name="autoplay_videos">Odtwarzaj filmy automatycznie</string>
|
||||||
<string name="toggle_filename">Włącz widoczność nazwy pliku</string>
|
<string name="toggle_filename">Pokazuj / ukrywaj nazwy plików</string>
|
||||||
<string name="show_media">Wybierz co pokazywać</string>
|
<string name="show_media">Pokazywane typy multimediów</string>
|
||||||
<string name="images">Tylko Zdjęcia</string>
|
<string name="images">Tylko obrazy</string>
|
||||||
<string name="videos">Tylko Filmy</string>
|
<string name="videos">Tylko filmy</string>
|
||||||
<string name="gifs">GIFs only</string>
|
<string name="gifs">Tylko GIFy</string>
|
||||||
<string name="images_videos_gifs">Images, videos, GIFs</string>
|
<string name="images_videos_gifs">Obrazy, filmy i GIFy</string>
|
||||||
<string name="images_and_videos">Obrazy i wideo</string>
|
<string name="images_and_videos">Obrazy i filmy</string>
|
||||||
<string name="loop_videos">Pętla wideo</string>
|
<string name="loop_videos">Zapętlaj odtwarzanie filmów</string>
|
||||||
<string name="animate_gifs">Animowanie GIFy z miniaturkami</string>
|
<string name="animate_gifs">Animowane miniatury GIFów</string>
|
||||||
<string name="max_brightness">Max brightness when viewing media</string>
|
<string name="max_brightness">Maksymalna jasność podczas wyświetlania multimediów</string>
|
||||||
<string name="crop_thumbnails">Crop thumbnails into squares</string>
|
<string name="crop_thumbnails">Przycinaj miniatury do kwadratów</string>
|
||||||
<string name="screen_rotation_by">Rotate fullscreen media by</string>
|
<string name="screen_rotation_by">Obracaj pełnoekranowe multimedia według</string>
|
||||||
<string name="screen_rotation_system_setting">System setting</string>
|
<string name="screen_rotation_system_setting">Ustawień systemowych</string>
|
||||||
<string name="screen_rotation_device_rotation">Device rotation</string>
|
<string name="screen_rotation_device_rotation">Orientacji urządzenia</string>
|
||||||
<string name="screen_rotation_aspect_ratio">Aspect ratio</string>
|
<string name="screen_rotation_aspect_ratio">Proporcji</string>
|
||||||
<string name="dark_background_at_fullscreen">Dark background at fullscreen media</string>
|
<string name="dark_background_at_fullscreen">Czarne tło przy podglądzie pełnoekranowym</string>
|
||||||
<string name="scroll_thumbnails_horizontally">Scroll thumbnails horizontally</string>
|
<string name="scroll_thumbnails_horizontally">Przewijaj miniatury poziomo</string>
|
||||||
|
<string name="hide_system_ui_at_fullscreen">Ukrywaj interfejs przy pełnoekranowym podglądzie</string>
|
||||||
|
<string name="replace_share_with_rotate">Zamień funkcję udostępniania na obracanie w menu pełnoekranowym</string>
|
||||||
|
|
||||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||||
<!-- Short description has to have less than 80 chars -->
|
<!-- Short description has to have less than 80 chars -->
|
||||||
<string name="app_short_description">Darmowa Galeria bez reklam do przeglądania zdjęć i filmów.</string>
|
<string name="app_short_description">Darmowa galeria bez reklam do przeglądania obrazów i filmów.</string>
|
||||||
<string name="app_long_description">
|
<string name="app_long_description">
|
||||||
Prosta aplikacja galerii do oglądania zdjęć i filmów. Pliki mogą być sortowane według daty, rozmiaru, nazwy zarówno w porządku rosnącym lub malejącym, zdjęcia można powiększać. Pliki multimedialne są wyświetlane w wielu kolumnach w zależności od wielkości ekranu, można zmienić liczbę kolumn za pomocą gestów. Obrazy mogą być edytowane w galerii. Zdjęcia mogą być przycięte, można je obracać lub ustawić jako tapetę bezpośrednio z aplikacji. Kolor aplikacji mozna dowolnie ustawić według własnych preferencji.
|
Prosta aplikacja galerii do oglądania obrazów i filmów. Pliki mogą być sortowane według daty, rozmiaru i nazwy, zarówno w porządku rosnącym jak i malejącym. W zależności od wielkości ekranu wyświetlane mogą być w wielu kolumnach. Liczbę kolumn można zmieniać za pomocą gestów. Zdjęcia mogą być powiększane, przycinane, obracane lub ustawiane jako tapeta bezpośrednio z poziomu aplikacji. Kolory aplikacji można dowolnie ustawiać.
|
||||||
|
|
||||||
Galeria jest również oferowane do użytkowania przez osoby trzecie do podglądu zdjęć/filmów, dodawania załączników do klientów e-mail itp, Idealne nadaje się do codziennego użytku.
|
Aplikacja nie zawiera żadnych reklam ani niepotrzebnych uprawnień. Jest też w pełni otawrtoźrodłowa.
|
||||||
|
|
||||||
Nie zawiera żadnych reklam ani niepotrzebnych uprawnień. Jest w pełni opensource.
|
Niniejsza aplikacja jest tylko częścią naszego zestawu prostych aplikacji. Znajdziecie je na stronie http://www.simplemobiletools.com.
|
||||||
|
|
||||||
Ta aplikacja jest tylko jedą z większego szeregu naszych aplikacji. Można znaleźć resztę z nich w http://www.simplemobiletools.com
|
|
||||||
</string>
|
</string>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Haven't found some strings? There's more at
|
Haven't found some strings? There's more at
|
||||||
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
|
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
|
||||||
Polish translation : Dariusz Dróżdż - www.onlan.pl
|
|
||||||
-->
|
-->
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -6,7 +6,8 @@
|
||||||
<string name="open_camera">Abrir câmera</string>
|
<string name="open_camera">Abrir câmera</string>
|
||||||
<string name="open_with">Abrir com</string>
|
<string name="open_with">Abrir com</string>
|
||||||
<string name="no_app_found">Nenhum aplicativo encontrado</string>
|
<string name="no_app_found">Nenhum aplicativo encontrado</string>
|
||||||
<string name="hidden">(oculto)</string>
|
|
||||||
|
<string name="hidden">(oculto)</string>
|
||||||
<string name="pin_folder">Fixar pasta</string>
|
<string name="pin_folder">Fixar pasta</string>
|
||||||
<string name="unpin_folder">Desfixar pasta</string>
|
<string name="unpin_folder">Desfixar pasta</string>
|
||||||
<string name="show_all">Mostrar conteúdo de todas as pastas</string>
|
<string name="show_all">Mostrar conteúdo de todas as pastas</string>
|
||||||
|
@ -19,11 +20,12 @@
|
||||||
<string name="no_camera_app_found">Nenhum aplicativo de câmera encontrado</string>
|
<string name="no_camera_app_found">Nenhum aplicativo de câmera encontrado</string>
|
||||||
<string name="increase_column_count">Aumentar número de colunas</string>
|
<string name="increase_column_count">Aumentar número de colunas</string>
|
||||||
<string name="reduce_column_count">Reduzir número de colunas</string>
|
<string name="reduce_column_count">Reduzir número de colunas</string>
|
||||||
<string name="temporarily_show_hidden">Mostrar pastas ocultas temporariamente</string>
|
|
||||||
<string name="change_cover_image">Trocar imagem de capa</string>
|
<string name="change_cover_image">Trocar imagem de capa</string>
|
||||||
<string name="select_photo">Selecionar foto</string>
|
<string name="select_photo">Selecionar foto</string>
|
||||||
<string name="use_default">Usar padrão</string>
|
<string name="use_default">Usar padrão</string>
|
||||||
<string name="set_as">Set as</string>
|
<string name="set_as">Set as</string>
|
||||||
|
<string name="volume">Volume</string>
|
||||||
|
<string name="brightness">Brightness</string>
|
||||||
|
|
||||||
<!-- Hide / Exclude -->
|
<!-- Hide / Exclude -->
|
||||||
<string name="hide_folder_description">Esta opção oculta uma pasta com a adição de um arquivo \'.nomedia\' dentro dela, e irá ocultar todas as subpastas que estejam dentro da mesma. Você poderá rever essas pastas com a opção \'Mostrar pastas ocultas\'. Continuar?</string>
|
<string name="hide_folder_description">Esta opção oculta uma pasta com a adição de um arquivo \'.nomedia\' dentro dela, e irá ocultar todas as subpastas que estejam dentro da mesma. Você poderá rever essas pastas com a opção \'Mostrar pastas ocultas\'. Continuar?</string>
|
||||||
|
@ -67,7 +69,6 @@
|
||||||
<string name="flip">Inverter</string>
|
<string name="flip">Inverter</string>
|
||||||
<string name="flip_horizontally">Horizontalmente</string>
|
<string name="flip_horizontally">Horizontalmente</string>
|
||||||
<string name="flip_vertically">Verticalmente</string>
|
<string name="flip_vertically">Verticalmente</string>
|
||||||
<string name="out_of_memory_error">Memória insuficiente</string>
|
|
||||||
<string name="edit_with">Edit with</string>
|
<string name="edit_with">Edit with</string>
|
||||||
|
|
||||||
<!-- Set wallpaper -->
|
<!-- Set wallpaper -->
|
||||||
|
@ -81,6 +82,17 @@
|
||||||
<string name="portrait_aspect_ratio">Retrato</string>
|
<string name="portrait_aspect_ratio">Retrato</string>
|
||||||
<string name="landscape_aspect_ratio">Paisagem</string>
|
<string name="landscape_aspect_ratio">Paisagem</string>
|
||||||
|
|
||||||
|
<!-- Slideshow -->
|
||||||
|
<string name="slideshow">Slideshow</string>
|
||||||
|
<string name="interval">Interval (seconds):</string>
|
||||||
|
<string name="include_photos">Include photos and GIFs</string>
|
||||||
|
<string name="include_videos">Include videos</string>
|
||||||
|
<string name="random_order">Random order</string>
|
||||||
|
<string name="use_fade">Use fade animations</string>
|
||||||
|
<string name="move_backwards">Move backwards</string>
|
||||||
|
<string name="slideshow_ended">The slideshow ended</string>
|
||||||
|
<string name="no_media_for_slideshow">No media for the slideshow have been found</string>
|
||||||
|
|
||||||
<!-- Settings -->
|
<!-- Settings -->
|
||||||
<string name="show_hidden_media">Mostrar pastas ocultas</string>
|
<string name="show_hidden_media">Mostrar pastas ocultas</string>
|
||||||
<string name="autoplay_videos">Reproduzir vídeos automaticamente</string>
|
<string name="autoplay_videos">Reproduzir vídeos automaticamente</string>
|
||||||
|
@ -93,7 +105,7 @@
|
||||||
<string name="images_and_videos">Imagens e vídeos</string>
|
<string name="images_and_videos">Imagens e vídeos</string>
|
||||||
<string name="loop_videos">Reproduzir vídeos em ciclo</string>
|
<string name="loop_videos">Reproduzir vídeos em ciclo</string>
|
||||||
<string name="animate_gifs">Animação de GIFs nas miniaturas</string>
|
<string name="animate_gifs">Animação de GIFs nas miniaturas</string>
|
||||||
<string name="max_brightness">Brilho máximo ao visualizar mídia</string>
|
<string name="max_brightness">Brilho máximo ao visualizar mídia</string>
|
||||||
<string name="crop_thumbnails">Recortar miniaturas em quadrados</string>
|
<string name="crop_thumbnails">Recortar miniaturas em quadrados</string>
|
||||||
<string name="screen_rotation_by">Critério para rotação de tela</string>
|
<string name="screen_rotation_by">Critério para rotação de tela</string>
|
||||||
<string name="screen_rotation_system_setting">Padrão do sistema</string>
|
<string name="screen_rotation_system_setting">Padrão do sistema</string>
|
||||||
|
@ -101,6 +113,8 @@
|
||||||
<string name="screen_rotation_aspect_ratio">Proporção da mídia</string>
|
<string name="screen_rotation_aspect_ratio">Proporção da mídia</string>
|
||||||
<string name="dark_background_at_fullscreen">Fundo de tela escuro em mídia tela cheia</string>
|
<string name="dark_background_at_fullscreen">Fundo de tela escuro em mídia tela cheia</string>
|
||||||
<string name="scroll_thumbnails_horizontally">Rolar miniaturas horizontalmente</string>
|
<string name="scroll_thumbnails_horizontally">Rolar miniaturas horizontalmente</string>
|
||||||
|
<string name="hide_system_ui_at_fullscreen">Automatically hide system UI at fullscreen media</string>
|
||||||
|
<string name="replace_share_with_rotate">Replace Share with Rotate at fullscreen menu</string>
|
||||||
|
|
||||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||||
<!-- Short description has to have less than 80 chars -->
|
<!-- Short description has to have less than 80 chars -->
|
||||||
|
|
|
@ -19,11 +19,12 @@
|
||||||
<string name="no_camera_app_found">Não existe uma aplicação adequeada</string>
|
<string name="no_camera_app_found">Não existe uma aplicação adequeada</string>
|
||||||
<string name="increase_column_count">Aumentar número de colunas</string>
|
<string name="increase_column_count">Aumentar número de colunas</string>
|
||||||
<string name="reduce_column_count">Diminuir número de colunas</string>
|
<string name="reduce_column_count">Diminuir número de colunas</string>
|
||||||
<string name="temporarily_show_hidden">Mostrar ocultas temporariamente</string>
|
|
||||||
<string name="change_cover_image">Alterar imagem da capa</string>
|
<string name="change_cover_image">Alterar imagem da capa</string>
|
||||||
<string name="select_photo">Selecionar foto</string>
|
<string name="select_photo">Selecionar foto</string>
|
||||||
<string name="use_default">Predefinição</string>
|
<string name="use_default">Predefinição</string>
|
||||||
<string name="set_as">Set as</string>
|
<string name="set_as">Definir como</string>
|
||||||
|
<string name="volume">Volume</string>
|
||||||
|
<string name="brightness">Brilho</string>
|
||||||
|
|
||||||
<!-- Hide / Exclude -->
|
<!-- Hide / Exclude -->
|
||||||
<string name="hide_folder_description">Esta opção oculta uma pasta com a adição de um ficheiro \'.nomedia\' na pasta, e irá ocultar todas as subpastas existentes. Pode ver as pastas com a opção \'Mostrar pastas ocultas\'. Continuar?</string>
|
<string name="hide_folder_description">Esta opção oculta uma pasta com a adição de um ficheiro \'.nomedia\' na pasta, e irá ocultar todas as subpastas existentes. Pode ver as pastas com a opção \'Mostrar pastas ocultas\'. Continuar?</string>
|
||||||
|
@ -67,8 +68,7 @@
|
||||||
<string name="flip">Inverter</string>
|
<string name="flip">Inverter</string>
|
||||||
<string name="flip_horizontally">Horizontalmente</string>
|
<string name="flip_horizontally">Horizontalmente</string>
|
||||||
<string name="flip_vertically">Verticalmente</string>
|
<string name="flip_vertically">Verticalmente</string>
|
||||||
<string name="out_of_memory_error">Memória insuficiente</string>
|
<string name="edit_with">Editar com</string>
|
||||||
<string name="edit_with">Edit with</string>
|
|
||||||
|
|
||||||
<!-- Set wallpaper -->
|
<!-- Set wallpaper -->
|
||||||
<string name="simple_wallpaper">Simple Wallpaper</string>
|
<string name="simple_wallpaper">Simple Wallpaper</string>
|
||||||
|
@ -81,6 +81,17 @@
|
||||||
<string name="portrait_aspect_ratio">Proporção na vertical</string>
|
<string name="portrait_aspect_ratio">Proporção na vertical</string>
|
||||||
<string name="landscape_aspect_ratio">Proporção na horizontal</string>
|
<string name="landscape_aspect_ratio">Proporção na horizontal</string>
|
||||||
|
|
||||||
|
<!-- Slideshow -->
|
||||||
|
<string name="slideshow">Apresentação</string>
|
||||||
|
<string name="interval">Intervalo (segundos):</string>
|
||||||
|
<string name="include_photos">Incluir fotos e GIFs</string>
|
||||||
|
<string name="include_videos">Incluir vídeos</string>
|
||||||
|
<string name="random_order">Ordem aleatória</string>
|
||||||
|
<string name="use_fade">Usar animações</string>
|
||||||
|
<string name="move_backwards">Mover para trás</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>
|
||||||
|
|
||||||
<!-- Settings -->
|
<!-- Settings -->
|
||||||
<string name="show_hidden_media">Mostrar pastas ocultas</string>
|
<string name="show_hidden_media">Mostrar pastas ocultas</string>
|
||||||
<string name="autoplay_videos">Reproduzir vídeos automaticamente</string>
|
<string name="autoplay_videos">Reproduzir vídeos automaticamente</string>
|
||||||
|
@ -101,6 +112,8 @@
|
||||||
<string name="screen_rotation_aspect_ratio">Proporção</string>
|
<string name="screen_rotation_aspect_ratio">Proporção</string>
|
||||||
<string name="dark_background_at_fullscreen">Usar sempre um fundo escuro se em ecrã completo</string>
|
<string name="dark_background_at_fullscreen">Usar sempre um fundo escuro se em ecrã completo</string>
|
||||||
<string name="scroll_thumbnails_horizontally">Deslocação horizontal de miniaturas</string>
|
<string name="scroll_thumbnails_horizontally">Deslocação horizontal de miniaturas</string>
|
||||||
|
<string name="hide_system_ui_at_fullscreen">Ocultar interface do sistema se em ecrã completo</string>
|
||||||
|
<string name="replace_share_with_rotate">Substituir a opção Partilhar pela opção Rodar se em ecrã completo</string>
|
||||||
|
|
||||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||||
<!-- Short description has to have less than 80 chars -->
|
<!-- Short description has to have less than 80 chars -->
|
||||||
|
|
|
@ -19,11 +19,12 @@
|
||||||
<string name="no_camera_app_found">Не найдено приложения камеры</string>
|
<string name="no_camera_app_found">Не найдено приложения камеры</string>
|
||||||
<string name="increase_column_count">Добавить 1 столбец</string>
|
<string name="increase_column_count">Добавить 1 столбец</string>
|
||||||
<string name="reduce_column_count">Убрать 1 столбец</string>
|
<string name="reduce_column_count">Убрать 1 столбец</string>
|
||||||
<string name="temporarily_show_hidden">Временный показ скрытых</string>
|
|
||||||
<string name="change_cover_image">Change cover image</string>
|
<string name="change_cover_image">Change cover image</string>
|
||||||
<string name="select_photo">Select photo</string>
|
<string name="select_photo">Select photo</string>
|
||||||
<string name="use_default">Use default</string>
|
<string name="use_default">Use default</string>
|
||||||
<string name="set_as">Set as</string>
|
<string name="set_as">Set as</string>
|
||||||
|
<string name="volume">Volume</string>
|
||||||
|
<string name="brightness">Brightness</string>
|
||||||
|
|
||||||
<!-- Hide / Exclude -->
|
<!-- Hide / Exclude -->
|
||||||
<string name="hide_folder_description">Эта опция скрывает папку, добавляя в неё файл \'.nomedia\'; будут скрыты все подпапки. Можно показывать их, переключая \'Показать скрытые папки\' в настройках. Продолжить?</string>
|
<string name="hide_folder_description">Эта опция скрывает папку, добавляя в неё файл \'.nomedia\'; будут скрыты все подпапки. Можно показывать их, переключая \'Показать скрытые папки\' в настройках. Продолжить?</string>
|
||||||
|
@ -67,7 +68,6 @@
|
||||||
<string name="flip">Отразить</string>
|
<string name="flip">Отразить</string>
|
||||||
<string name="flip_horizontally">По горизонтали</string>
|
<string name="flip_horizontally">По горизонтали</string>
|
||||||
<string name="flip_vertically">По вертикали</string>
|
<string name="flip_vertically">По вертикали</string>
|
||||||
<string name="out_of_memory_error">Память переполнена</string>
|
|
||||||
<string name="edit_with">Edit with</string>
|
<string name="edit_with">Edit with</string>
|
||||||
|
|
||||||
<!-- Set wallpaper -->
|
<!-- Set wallpaper -->
|
||||||
|
@ -81,6 +81,17 @@
|
||||||
<string name="portrait_aspect_ratio">Формат изображения</string>
|
<string name="portrait_aspect_ratio">Формат изображения</string>
|
||||||
<string name="landscape_aspect_ratio">Пейзажное соотношение сторон</string>
|
<string name="landscape_aspect_ratio">Пейзажное соотношение сторон</string>
|
||||||
|
|
||||||
|
<!-- Slideshow -->
|
||||||
|
<string name="slideshow">Slideshow</string>
|
||||||
|
<string name="interval">Interval (seconds):</string>
|
||||||
|
<string name="include_photos">Include photos and GIFs</string>
|
||||||
|
<string name="include_videos">Include videos</string>
|
||||||
|
<string name="random_order">Random order</string>
|
||||||
|
<string name="use_fade">Use fade animations</string>
|
||||||
|
<string name="move_backwards">Move backwards</string>
|
||||||
|
<string name="slideshow_ended">The slideshow ended</string>
|
||||||
|
<string name="no_media_for_slideshow">No media for the slideshow have been found</string>
|
||||||
|
|
||||||
<!-- Settings -->
|
<!-- Settings -->
|
||||||
<string name="show_hidden_media">Показать скрытые папки</string>
|
<string name="show_hidden_media">Показать скрытые папки</string>
|
||||||
<string name="autoplay_videos">Воспроизводить видео автоматически</string>
|
<string name="autoplay_videos">Воспроизводить видео автоматически</string>
|
||||||
|
@ -101,6 +112,8 @@
|
||||||
<string name="screen_rotation_aspect_ratio">Соотношение сторон</string>
|
<string name="screen_rotation_aspect_ratio">Соотношение сторон</string>
|
||||||
<string name="dark_background_at_fullscreen">Dark background at fullscreen media</string>
|
<string name="dark_background_at_fullscreen">Dark background at fullscreen media</string>
|
||||||
<string name="scroll_thumbnails_horizontally">Scroll thumbnails horizontally</string>
|
<string name="scroll_thumbnails_horizontally">Scroll thumbnails horizontally</string>
|
||||||
|
<string name="hide_system_ui_at_fullscreen">Automatically hide system UI at fullscreen media</string>
|
||||||
|
<string name="replace_share_with_rotate">Replace Share with Rotate at fullscreen menu</string>
|
||||||
|
|
||||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||||
<!-- Short description has to have less than 80 chars -->
|
<!-- Short description has to have less than 80 chars -->
|
||||||
|
|
|
@ -19,11 +19,12 @@
|
||||||
<string name="no_camera_app_found">Nenašla sa žiadna aplikácia pre fotoaparát</string>
|
<string name="no_camera_app_found">Nenašla sa žiadna aplikácia pre fotoaparát</string>
|
||||||
<string name="increase_column_count">Zvýšiť počet stĺpcov</string>
|
<string name="increase_column_count">Zvýšiť počet stĺpcov</string>
|
||||||
<string name="reduce_column_count">Znížiť počet stĺpcov</string>
|
<string name="reduce_column_count">Znížiť počet stĺpcov</string>
|
||||||
<string name="temporarily_show_hidden">Dočasne zobraziť skryté</string>
|
|
||||||
<string name="change_cover_image">Zmeniť obal albumu</string>
|
<string name="change_cover_image">Zmeniť obal albumu</string>
|
||||||
<string name="select_photo">Zvoliť foto</string>
|
<string name="select_photo">Zvoliť foto</string>
|
||||||
<string name="use_default">Použiť predvolený</string>
|
<string name="use_default">Použiť predvolený</string>
|
||||||
<string name="set_as">Nastaviť ako</string>
|
<string name="set_as">Nastaviť ako</string>
|
||||||
|
<string name="volume">Hlasitosť</string>
|
||||||
|
<string name="brightness">Jas</string>
|
||||||
|
|
||||||
<!-- Hide / Exclude -->
|
<!-- Hide / Exclude -->
|
||||||
<string name="hide_folder_description">Táto funkcia skryje priečinok pridaním súboru \'.nomedia\', skryté budú aj podpriečinky. Môžete ich vidieť zvolením možnosti \'Zobraziť skryté priečinky\' v nastaveniach. Pokračovať?</string>
|
<string name="hide_folder_description">Táto funkcia skryje priečinok pridaním súboru \'.nomedia\', skryté budú aj podpriečinky. Môžete ich vidieť zvolením možnosti \'Zobraziť skryté priečinky\' v nastaveniach. Pokračovať?</string>
|
||||||
|
@ -67,7 +68,6 @@
|
||||||
<string name="flip">Preklopiť</string>
|
<string name="flip">Preklopiť</string>
|
||||||
<string name="flip_horizontally">Preklopiť vodorovne</string>
|
<string name="flip_horizontally">Preklopiť vodorovne</string>
|
||||||
<string name="flip_vertically">Preklopiť zvisle</string>
|
<string name="flip_vertically">Preklopiť zvisle</string>
|
||||||
<string name="out_of_memory_error">Došlo k chybe s nedostatkom pamäte</string>
|
|
||||||
<string name="edit_with">Upraviť s</string>
|
<string name="edit_with">Upraviť s</string>
|
||||||
|
|
||||||
<!-- Set wallpaper -->
|
<!-- Set wallpaper -->
|
||||||
|
@ -81,6 +81,17 @@
|
||||||
<string name="portrait_aspect_ratio">Orientácia nastojato</string>
|
<string name="portrait_aspect_ratio">Orientácia nastojato</string>
|
||||||
<string name="landscape_aspect_ratio">Orientácia naležato</string>
|
<string name="landscape_aspect_ratio">Orientácia naležato</string>
|
||||||
|
|
||||||
|
<!-- Slideshow -->
|
||||||
|
<string name="slideshow">Prezentácia</string>
|
||||||
|
<string name="interval">Interval (sekundy):</string>
|
||||||
|
<string name="include_photos">Zahrnúť fotky a GIF súbory</string>
|
||||||
|
<string name="include_videos">Zahrnúť videá</string>
|
||||||
|
<string name="random_order">Náhodné poradie</string>
|
||||||
|
<string name="use_fade">Používať miznúce animácie</string>
|
||||||
|
<string name="move_backwards">Ísť opačným smerom</string>
|
||||||
|
<string name="slideshow_ended">Prezentácia skončila</string>
|
||||||
|
<string name="no_media_for_slideshow">Pre prezentáciu sa nenašli žiadne vhodné súbory</string>
|
||||||
|
|
||||||
<!-- Settings -->
|
<!-- Settings -->
|
||||||
<string name="show_hidden_media">Zobraziť skryté médiá</string>
|
<string name="show_hidden_media">Zobraziť skryté médiá</string>
|
||||||
<string name="autoplay_videos">Spúšťať videá automaticky</string>
|
<string name="autoplay_videos">Spúšťať videá automaticky</string>
|
||||||
|
@ -101,6 +112,8 @@
|
||||||
<string name="screen_rotation_aspect_ratio">Pomeru strán</string>
|
<string name="screen_rotation_aspect_ratio">Pomeru strán</string>
|
||||||
<string name="dark_background_at_fullscreen">Tmavé pozadie pri médiách na celú obrazovku</string>
|
<string name="dark_background_at_fullscreen">Tmavé pozadie pri médiách na celú obrazovku</string>
|
||||||
<string name="scroll_thumbnails_horizontally">Prehliadať miniatúry vodorovne</string>
|
<string name="scroll_thumbnails_horizontally">Prehliadať miniatúry vodorovne</string>
|
||||||
|
<string name="hide_system_ui_at_fullscreen">Automaticky skrývať systémové lišty pri celoobrazovkových médiách</string>
|
||||||
|
<string name="replace_share_with_rotate">Nahradiť Zdieľanie s Otočením v celoobrazovkovom menu</string>
|
||||||
|
|
||||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||||
<!-- Short description has to have less than 80 chars -->
|
<!-- Short description has to have less than 80 chars -->
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="app_name">Simple Gallery</string>
|
<string name="app_name">Simple Gallery</string>
|
||||||
<string name="app_launcher_name">Gallery</string>
|
<string name="app_launcher_name">Galleri</string>
|
||||||
<string name="edit">Redigera</string>
|
<string name="edit">Redigera</string>
|
||||||
<string name="open_camera">Starta kameran</string>
|
<string name="open_camera">Starta kameran</string>
|
||||||
<string name="open_with">Öppna med</string>
|
<string name="open_with">Öppna med</string>
|
||||||
|
@ -13,34 +13,35 @@
|
||||||
<string name="all_folders">Alla mappar</string>
|
<string name="all_folders">Alla mappar</string>
|
||||||
<string name="folder_view">Byt till mappvy</string>
|
<string name="folder_view">Byt till mappvy</string>
|
||||||
<string name="other_folder">Andra mappar</string>
|
<string name="other_folder">Andra mappar</string>
|
||||||
<string name="show_on_map">Show on map</string>
|
<string name="show_on_map">Visa på karta</string>
|
||||||
<string name="unknown_location">Unknown location</string>
|
<string name="unknown_location">Okänd plats</string>
|
||||||
<string name="no_map_application">No application with maps has been found</string>
|
<string name="no_map_application">Ingen app med kartor hittades</string>
|
||||||
<string name="no_camera_app_found">No Camera app has been found</string>
|
<string name="no_camera_app_found">Ingen Kamera-app hittades</string>
|
||||||
<string name="increase_column_count">Increase column count</string>
|
<string name="increase_column_count">Öka antalet kolumner</string>
|
||||||
<string name="reduce_column_count">Reduce column count</string>
|
<string name="reduce_column_count">Minska antalet kolumner</string>
|
||||||
<string name="temporarily_show_hidden">Temporarily show hidden</string>
|
<string name="change_cover_image">Byt omslagsbild</string>
|
||||||
<string name="change_cover_image">Change cover image</string>
|
<string name="select_photo">Välj foto</string>
|
||||||
<string name="select_photo">Select photo</string>
|
<string name="use_default">Använd standard</string>
|
||||||
<string name="use_default">Use default</string>
|
<string name="set_as">Ange som</string>
|
||||||
<string name="set_as">Set as</string>
|
<string name="volume">Volume</string>
|
||||||
|
<string name="brightness">Brightness</string>
|
||||||
|
|
||||||
<!-- Hide / Exclude -->
|
<!-- Hide / Exclude -->
|
||||||
<string name="hide_folder_description">This function hides the folder by adding a \'.nomedia\' file into it, it will hide all subfolders too. You can see them by toggling the \'Show hidden folders\' option in Settings. Continue?</string>
|
<string name="hide_folder_description">Denna funktion döljer mappen och alla dess undermappar genom att lägga till en \'.nomedia\'-fil i den. Du kan se dem genom att växla \'Visa dolda mappar\'-alternativet i Inställningar. Vill du fortsätta?</string>
|
||||||
<string name="exclude">Exclude</string>
|
<string name="exclude">Uteslut</string>
|
||||||
<string name="excluded_folders">Excluded folders</string>
|
<string name="excluded_folders">Uteslutna mappar</string>
|
||||||
<string name="manage_excluded_folders">Manage excluded folders</string>
|
<string name="manage_excluded_folders">Hantera uteslutna mappar</string>
|
||||||
<string name="exclude_folder_description">This will exclude the selection together with its subfolders from Simple Gallery only. You can manage excluded folders in Settings.</string>
|
<string name="exclude_folder_description">Detta utesluter bara den markerade mappen och dess undermappar från Simple Gallery. Du kan hantera uteslutna mappar i Inställningar.</string>
|
||||||
<string name="exclude_folder_parent">Exclude a parent instead?</string>
|
<string name="exclude_folder_parent">Vill du utesluta en överordnad mapp istället?</string>
|
||||||
<string name="excluded_activity_placeholder">Excluding folders will make them together with their subfolders hidden just in Simple Gallery, they will still be visible in other applications.\\n\\nIf you want to hide them from other apps too, use the Hide function.</string>
|
<string name="excluded_activity_placeholder">Uteslutning av mappar döljer bara dem och deras undermappar i Simple Gallery, de visas fortfarande i andra appar.\\n\\nAnvänd Dölj-funktionen om du även vill dölja dem från andra appar.</string>
|
||||||
<string name="remove_all">Remove all</string>
|
<string name="remove_all">Ta bort alla</string>
|
||||||
<string name="remove_all_description">Remove all folders from the list of excluded? This will not delete the folders.</string>
|
<string name="remove_all_description">Vill du ta bort alla mappar från uteslutningslistan? Detta raderar inte mapparna.</string>
|
||||||
|
|
||||||
<!-- Include folders -->
|
<!-- Include folders -->
|
||||||
<string name="include_folders">Included folders</string>
|
<string name="include_folders">Inkluderade mappar</string>
|
||||||
<string name="manage_included_folders">Manage included folders</string>
|
<string name="manage_included_folders">Hantera inkluderade mappar</string>
|
||||||
<string name="add_folder">Add folder</string>
|
<string name="add_folder">Lägg till mapp</string>
|
||||||
<string name="included_activity_placeholder">If you have some folders which contain media, but were not recognized by the app, you can add them manually here.</string>
|
<string name="included_activity_placeholder">Om du har vissa mappar som innehåller media men som inte känns igen av appen kan du lägga till dem manuellt här.</string>
|
||||||
|
|
||||||
<!-- Resizing -->
|
<!-- Resizing -->
|
||||||
<string name="resize">Ändra storlek</string>
|
<string name="resize">Ändra storlek</string>
|
||||||
|
@ -56,19 +57,18 @@
|
||||||
<string name="rotate">Rotera</string>
|
<string name="rotate">Rotera</string>
|
||||||
<string name="path">Sökväg</string>
|
<string name="path">Sökväg</string>
|
||||||
<string name="invalid_image_path">Ogiltig bildsökväg</string>
|
<string name="invalid_image_path">Ogiltig bildsökväg</string>
|
||||||
<string name="image_editing_failed">Image editing failed</string>
|
<string name="image_editing_failed">Bilden kunde inte redigeras</string>
|
||||||
<string name="edit_image_with">Redigera bilden med:</string>
|
<string name="edit_image_with">Redigera bilden med:</string>
|
||||||
<string name="no_editor_found">Hittade ingen bildredigerare</string>
|
<string name="no_editor_found">Hittade ingen bildredigerare</string>
|
||||||
<string name="unknown_file_location">Okänd filplats</string>
|
<string name="unknown_file_location">Okänd filplats</string>
|
||||||
<string name="error_saving_file">Det gick inte att skriva över källfilen</string>
|
<string name="error_saving_file">Det gick inte att skriva över källfilen</string>
|
||||||
<string name="rotate_left">Rotate left</string>
|
<string name="rotate_left">Rotera åt vänster</string>
|
||||||
<string name="rotate_right">Rotate right</string>
|
<string name="rotate_right">Rotera åt höger</string>
|
||||||
<string name="rotate_one_eighty">Rotate by 180º</string>
|
<string name="rotate_one_eighty">Rotera 180º</string>
|
||||||
<string name="flip">Flip</string>
|
<string name="flip">Vänd</string>
|
||||||
<string name="flip_horizontally">Flip horizontally</string>
|
<string name="flip_horizontally">Vänd horisontellt</string>
|
||||||
<string name="flip_vertically">Flip vertically</string>
|
<string name="flip_vertically">Vänd vertikalt</string>
|
||||||
<string name="out_of_memory_error">Out of memory error</string>
|
<string name="edit_with">Redigera med</string>
|
||||||
<string name="edit_with">Edit with</string>
|
|
||||||
|
|
||||||
<!-- Set wallpaper -->
|
<!-- Set wallpaper -->
|
||||||
<string name="simple_wallpaper">Bakgrundsbild</string>
|
<string name="simple_wallpaper">Bakgrundsbild</string>
|
||||||
|
@ -78,8 +78,19 @@
|
||||||
<string name="no_capable_app_found">Hittade ingen app som klarar av detta</string>
|
<string name="no_capable_app_found">Hittade ingen app som klarar av detta</string>
|
||||||
<string name="setting_wallpaper">Inställningar för bakgrundsbild…</string>
|
<string name="setting_wallpaper">Inställningar för bakgrundsbild…</string>
|
||||||
<string name="wallpaper_set_successfully">Bakgrundsbilden är ändrad</string>
|
<string name="wallpaper_set_successfully">Bakgrundsbilden är ändrad</string>
|
||||||
<string name="portrait_aspect_ratio">Portrait aspect ratio</string>
|
<string name="portrait_aspect_ratio">Stående bildförhållande</string>
|
||||||
<string name="landscape_aspect_ratio">Landscape aspect ratio</string>
|
<string name="landscape_aspect_ratio">Liggande bildförhållande</string>
|
||||||
|
|
||||||
|
<!-- Slideshow -->
|
||||||
|
<string name="slideshow">Slideshow</string>
|
||||||
|
<string name="interval">Interval (seconds):</string>
|
||||||
|
<string name="include_photos">Include photos and GIFs</string>
|
||||||
|
<string name="include_videos">Include videos</string>
|
||||||
|
<string name="random_order">Random order</string>
|
||||||
|
<string name="use_fade">Use fade animations</string>
|
||||||
|
<string name="move_backwards">Move backwards</string>
|
||||||
|
<string name="slideshow_ended">The slideshow ended</string>
|
||||||
|
<string name="no_media_for_slideshow">No media for the slideshow have been found</string>
|
||||||
|
|
||||||
<!-- Settings -->
|
<!-- Settings -->
|
||||||
<string name="show_hidden_media">Visa dolda mappar</string>
|
<string name="show_hidden_media">Visa dolda mappar</string>
|
||||||
|
@ -88,19 +99,21 @@
|
||||||
<string name="show_media">Visa media</string>
|
<string name="show_media">Visa media</string>
|
||||||
<string name="images">Endast bilder</string>
|
<string name="images">Endast bilder</string>
|
||||||
<string name="videos">Endast videos</string>
|
<string name="videos">Endast videos</string>
|
||||||
<string name="gifs">GIFs only</string>
|
<string name="gifs">Bara GIF-bilder</string>
|
||||||
<string name="images_videos_gifs">Images, videos, GIFs</string>
|
<string name="images_videos_gifs">Bilder, videor, GIF-bilder</string>
|
||||||
<string name="images_and_videos">Bilder och videos</string>
|
<string name="images_and_videos">Bilder och videos</string>
|
||||||
<string name="loop_videos">Återspela videos</string>
|
<string name="loop_videos">Återspela videos</string>
|
||||||
<string name="animate_gifs">Animate GIFs at thumbnails</string>
|
<string name="animate_gifs">Animera GIF-bilders miniatyrer</string>
|
||||||
<string name="max_brightness">Max brightness when viewing media</string>
|
<string name="max_brightness">Maximal ljusstyrka när media visas</string>
|
||||||
<string name="crop_thumbnails">Crop thumbnails into squares</string>
|
<string name="crop_thumbnails">Beskär miniatyrer till kvadrater</string>
|
||||||
<string name="screen_rotation_by">Rotate fullscreen media by</string>
|
<string name="screen_rotation_by">Rotera media i helskärmsläge</string>
|
||||||
<string name="screen_rotation_system_setting">System setting</string>
|
<string name="screen_rotation_system_setting">Systeminställning</string>
|
||||||
<string name="screen_rotation_device_rotation">Device rotation</string>
|
<string name="screen_rotation_device_rotation">Enhetens rotation</string>
|
||||||
<string name="screen_rotation_aspect_ratio">Aspect ratio</string>
|
<string name="screen_rotation_aspect_ratio">Bildförhållande</string>
|
||||||
<string name="dark_background_at_fullscreen">Dark background at fullscreen media</string>
|
<string name="dark_background_at_fullscreen">Mörk bakgrund när media visas i helskärmsläge</string>
|
||||||
<string name="scroll_thumbnails_horizontally">Scroll thumbnails horizontally</string>
|
<string name="scroll_thumbnails_horizontally">Rulla horisontellt genom miniatyrer</string>
|
||||||
|
<string name="hide_system_ui_at_fullscreen">Dölj systemanvändargränssnittet automatiskt när media visas i helskärmsläge</string>
|
||||||
|
<string name="replace_share_with_rotate">Replace Share with Rotate at fullscreen menu</string>
|
||||||
|
|
||||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||||
<!-- Short description has to have less than 80 chars -->
|
<!-- Short description has to have less than 80 chars -->
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<dimen name="dir_tmb_size">150dp</dimen>
|
<dimen name="dir_tmb_size">150dp</dimen>
|
||||||
<dimen name="medium_tmb_size">120dp</dimen>
|
<dimen name="medium_tmb_size">120dp</dimen>
|
||||||
<dimen name="pin_size">30dp</dimen>
|
<dimen name="sd_card_icon_size">30dp</dimen>
|
||||||
<dimen name="play_outline_size">60dp</dimen>
|
<dimen name="selection_check_size">38dp</dimen>
|
||||||
<dimen name="play_outline_size_big">230dp</dimen>
|
<dimen name="play_outline_size_big">230dp</dimen>
|
||||||
<dimen name="timer_padding">32dp</dimen>
|
<dimen name="timer_padding">32dp</dimen>
|
||||||
<dimen name="tmb_shadow_height">60dp</dimen>
|
<dimen name="tmb_shadow_height">60dp</dimen>
|
||||||
|
<dimen name="video_side_slider_width">250dp</dimen>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -19,11 +19,12 @@
|
||||||
<string name="no_camera_app_found">Hiçbir Kamera uygulaması bulunamadı</string>
|
<string name="no_camera_app_found">Hiçbir Kamera uygulaması bulunamadı</string>
|
||||||
<string name="increase_column_count">Sütun sayısını artır</string>
|
<string name="increase_column_count">Sütun sayısını artır</string>
|
||||||
<string name="reduce_column_count">Sütun sayısını azalt</string>
|
<string name="reduce_column_count">Sütun sayısını azalt</string>
|
||||||
<string name="temporarily_show_hidden">Geçici olarak gizli göster</string>
|
|
||||||
<string name="change_cover_image">Change cover image</string>
|
<string name="change_cover_image">Change cover image</string>
|
||||||
<string name="select_photo">Select photo</string>
|
<string name="select_photo">Select photo</string>
|
||||||
<string name="use_default">Use default</string>
|
<string name="use_default">Use default</string>
|
||||||
<string name="set_as">Set as</string>
|
<string name="set_as">Set as</string>
|
||||||
|
<string name="volume">Volume</string>
|
||||||
|
<string name="brightness">Brightness</string>
|
||||||
|
|
||||||
<!-- Hide / Exclude -->
|
<!-- Hide / Exclude -->
|
||||||
<string name="hide_folder_description">Bu işlev, klasöre\'.medya yok\'dosyası ekleyerek gizler; tüm alt klasörleri de gizler. Bunları Ayarlar\'da\'Gizli klasörleri göster\'seçeneğine basarak görebilirsiniz. Devam et?</string>
|
<string name="hide_folder_description">Bu işlev, klasöre\'.medya yok\'dosyası ekleyerek gizler; tüm alt klasörleri de gizler. Bunları Ayarlar\'da\'Gizli klasörleri göster\'seçeneğine basarak görebilirsiniz. Devam et?</string>
|
||||||
|
@ -67,7 +68,6 @@
|
||||||
<string name="flip">Çevir</string>
|
<string name="flip">Çevir</string>
|
||||||
<string name="flip_horizontally">Yatay</string>
|
<string name="flip_horizontally">Yatay</string>
|
||||||
<string name="flip_vertically">Dikey</string>
|
<string name="flip_vertically">Dikey</string>
|
||||||
<string name="out_of_memory_error">Yetersiz bellek hatası</string>
|
|
||||||
<string name="edit_with">Edit with</string>
|
<string name="edit_with">Edit with</string>
|
||||||
|
|
||||||
<!-- Set wallpaper -->
|
<!-- Set wallpaper -->
|
||||||
|
@ -81,6 +81,17 @@
|
||||||
<string name="portrait_aspect_ratio">Portrait aspect ratio</string>
|
<string name="portrait_aspect_ratio">Portrait aspect ratio</string>
|
||||||
<string name="landscape_aspect_ratio">Landscape aspect ratio</string>
|
<string name="landscape_aspect_ratio">Landscape aspect ratio</string>
|
||||||
|
|
||||||
|
<!-- Slideshow -->
|
||||||
|
<string name="slideshow">Slideshow</string>
|
||||||
|
<string name="interval">Interval (seconds):</string>
|
||||||
|
<string name="include_photos">Include photos and GIFs</string>
|
||||||
|
<string name="include_videos">Include videos</string>
|
||||||
|
<string name="random_order">Random order</string>
|
||||||
|
<string name="use_fade">Use fade animations</string>
|
||||||
|
<string name="move_backwards">Move backwards</string>
|
||||||
|
<string name="slideshow_ended">The slideshow ended</string>
|
||||||
|
<string name="no_media_for_slideshow">No media for the slideshow have been found</string>
|
||||||
|
|
||||||
<!-- Settings -->
|
<!-- Settings -->
|
||||||
<string name="show_hidden_media">Gizli klasörleri göster</string>
|
<string name="show_hidden_media">Gizli klasörleri göster</string>
|
||||||
<string name="autoplay_videos">Videoları otomatik olarak oynat</string>
|
<string name="autoplay_videos">Videoları otomatik olarak oynat</string>
|
||||||
|
@ -101,6 +112,8 @@
|
||||||
<string name="screen_rotation_aspect_ratio">En-boy oranı</string>
|
<string name="screen_rotation_aspect_ratio">En-boy oranı</string>
|
||||||
<string name="dark_background_at_fullscreen">Dark background at fullscreen media</string>
|
<string name="dark_background_at_fullscreen">Dark background at fullscreen media</string>
|
||||||
<string name="scroll_thumbnails_horizontally">Scroll thumbnails horizontally</string>
|
<string name="scroll_thumbnails_horizontally">Scroll thumbnails horizontally</string>
|
||||||
|
<string name="hide_system_ui_at_fullscreen">Automatically hide system UI at fullscreen media</string>
|
||||||
|
<string name="replace_share_with_rotate">Replace Share with Rotate at fullscreen menu</string>
|
||||||
|
|
||||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||||
<!-- Short description has to have less than 80 chars -->
|
<!-- Short description has to have less than 80 chars -->
|
||||||
|
|
|
@ -3,4 +3,5 @@
|
||||||
<style name="FullScreenTheme" parent="FullScreenTheme.Base">
|
<style name="FullScreenTheme" parent="FullScreenTheme.Base">
|
||||||
<item name="android:windowTranslucentNavigation">true</item>
|
<item name="android:windowTranslucentNavigation">true</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -19,11 +19,12 @@
|
||||||
<string name="no_camera_app_found">未找到相机应用</string>
|
<string name="no_camera_app_found">未找到相机应用</string>
|
||||||
<string name="increase_column_count">增加一栏</string>
|
<string name="increase_column_count">增加一栏</string>
|
||||||
<string name="reduce_column_count">减少一栏</string>
|
<string name="reduce_column_count">减少一栏</string>
|
||||||
<string name="temporarily_show_hidden">显示/隐藏缓存内容</string>
|
|
||||||
<string name="change_cover_image">更改封面图片</string>
|
<string name="change_cover_image">更改封面图片</string>
|
||||||
<string name="select_photo">选择图片</string>
|
<string name="select_photo">选择图片</string>
|
||||||
<string name="use_default">使用默认</string>
|
<string name="use_default">使用默认</string>
|
||||||
<string name="set_as">设置为</string>
|
<string name="set_as">设置为</string>
|
||||||
|
<string name="volume">Volume</string>
|
||||||
|
<string name="brightness">Brightness</string>
|
||||||
|
|
||||||
<!-- Hide / Exclude -->
|
<!-- Hide / Exclude -->
|
||||||
<string name="hide_folder_description">通过添加文件 \'.nomedia\' 到目录,可以防止目录及其子目录下的所有媒体被扫描。您可以通过设置中的 \'显示隐藏目录\' 选项改变设置,是否继续?</string>
|
<string name="hide_folder_description">通过添加文件 \'.nomedia\' 到目录,可以防止目录及其子目录下的所有媒体被扫描。您可以通过设置中的 \'显示隐藏目录\' 选项改变设置,是否继续?</string>
|
||||||
|
@ -67,7 +68,6 @@
|
||||||
<string name="flip">翻转</string>
|
<string name="flip">翻转</string>
|
||||||
<string name="flip_horizontally">水平翻转</string>
|
<string name="flip_horizontally">水平翻转</string>
|
||||||
<string name="flip_vertically">垂直翻转</string>
|
<string name="flip_vertically">垂直翻转</string>
|
||||||
<string name="out_of_memory_error">内存不足</string>
|
|
||||||
<string name="edit_with">编辑方式</string>
|
<string name="edit_with">编辑方式</string>
|
||||||
|
|
||||||
<!-- Set wallpaper -->
|
<!-- Set wallpaper -->
|
||||||
|
@ -81,6 +81,17 @@
|
||||||
<string name="portrait_aspect_ratio">纵向长宽比</string>
|
<string name="portrait_aspect_ratio">纵向长宽比</string>
|
||||||
<string name="landscape_aspect_ratio">横向长宽比</string>
|
<string name="landscape_aspect_ratio">横向长宽比</string>
|
||||||
|
|
||||||
|
<!-- Slideshow -->
|
||||||
|
<string name="slideshow">Slideshow</string>
|
||||||
|
<string name="interval">Interval (seconds):</string>
|
||||||
|
<string name="include_photos">Include photos and GIFs</string>
|
||||||
|
<string name="include_videos">Include videos</string>
|
||||||
|
<string name="random_order">Random order</string>
|
||||||
|
<string name="use_fade">Use fade animations</string>
|
||||||
|
<string name="move_backwards">Move backwards</string>
|
||||||
|
<string name="slideshow_ended">The slideshow ended</string>
|
||||||
|
<string name="no_media_for_slideshow">No media for the slideshow have been found</string>
|
||||||
|
|
||||||
<!-- Settings -->
|
<!-- Settings -->
|
||||||
<string name="show_hidden_media">显示所有</string>
|
<string name="show_hidden_media">显示所有</string>
|
||||||
<string name="autoplay_videos">自动播放</string>
|
<string name="autoplay_videos">自动播放</string>
|
||||||
|
@ -101,6 +112,8 @@
|
||||||
<string name="screen_rotation_aspect_ratio">根据长宽比</string>
|
<string name="screen_rotation_aspect_ratio">根据长宽比</string>
|
||||||
<string name="dark_background_at_fullscreen">全屏时黑色背景</string>
|
<string name="dark_background_at_fullscreen">全屏时黑色背景</string>
|
||||||
<string name="scroll_thumbnails_horizontally">水平滚动缩略图</string>
|
<string name="scroll_thumbnails_horizontally">水平滚动缩略图</string>
|
||||||
|
<string name="hide_system_ui_at_fullscreen">Automatically hide system UI at fullscreen media</string>
|
||||||
|
<string name="replace_share_with_rotate">Replace Share with Rotate at fullscreen menu</string>
|
||||||
|
|
||||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||||
<!-- Short description has to have less than 80 chars -->
|
<!-- Short description has to have less than 80 chars -->
|
||||||
|
|
|
@ -1,50 +1,51 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="app_name">簡易藝廊</string>
|
<string name="app_name">簡易相簿</string>
|
||||||
<string name="app_launcher_name">藝廊</string>
|
<string name="app_launcher_name">簡易相簿</string>
|
||||||
<string name="edit">編輯</string>
|
<string name="edit">編輯</string>
|
||||||
<string name="open_camera">開啟相機</string>
|
<string name="open_camera">開啟相機</string>
|
||||||
<string name="open_with">以其他應用軟體開啟</string>
|
<string name="open_with">以其他應用程式開啟</string>
|
||||||
<string name="no_app_found">沒有可用的應用軟體</string>
|
<string name="no_app_found">找不到應用程式</string>
|
||||||
<string name="hidden">(隱藏)</string>
|
<string name="hidden">(隱藏)</string>
|
||||||
<string name="pin_folder">鎖定資料夾</string>
|
<string name="pin_folder">釘選資料夾</string>
|
||||||
<string name="unpin_folder">解除鎖定資料夾</string>
|
<string name="unpin_folder">取消釘選資料夾</string>
|
||||||
<string name="show_all">顯示所有資料夾的內容</string>
|
<string name="show_all">資料夾內容全部顯示</string>
|
||||||
<string name="all_folders">所有資料夾</string>
|
<string name="all_folders">全部資料夾</string>
|
||||||
<string name="folder_view">切換到資料夾檢視</string>
|
<string name="folder_view">切換成資料夾檢視</string>
|
||||||
<string name="other_folder">其他資料夾</string>
|
<string name="other_folder">其他資料夾</string>
|
||||||
<string name="show_on_map">Show on map</string>
|
<string name="show_on_map">在地圖上顯示</string>
|
||||||
<string name="unknown_location">Unknown location</string>
|
<string name="unknown_location">未知的位置</string>
|
||||||
<string name="no_map_application">No application with maps has been found</string>
|
<string name="no_map_application">找不到地圖程式</string>
|
||||||
<string name="no_camera_app_found">No Camera app has been found</string>
|
<string name="no_camera_app_found">找不到相機程式</string>
|
||||||
<string name="increase_column_count">Increase column count</string>
|
<string name="increase_column_count">增加欄數</string>
|
||||||
<string name="reduce_column_count">Reduce column count</string>
|
<string name="reduce_column_count">減少欄數</string>
|
||||||
<string name="temporarily_show_hidden">Temporarily show hidden</string>
|
<string name="change_cover_image">更換封面圖片</string>
|
||||||
<string name="change_cover_image">Change cover image</string>
|
<string name="select_photo">選擇相片</string>
|
||||||
<string name="select_photo">Select photo</string>
|
<string name="use_default">使用預設</string>
|
||||||
<string name="use_default">Use default</string>
|
<string name="set_as">設為</string>
|
||||||
<string name="set_as">Set as</string>
|
<string name="volume">音量</string>
|
||||||
|
<string name="brightness">亮度</string>
|
||||||
|
|
||||||
<!-- Hide / Exclude -->
|
<!-- Hide / Exclude -->
|
||||||
<string name="hide_folder_description">This function hides the folder by adding a \'.nomedia\' file into it, it will hide all subfolders too. You can see them by toggling the \'Show hidden folders\' option in Settings. Continue?</string>
|
<string name="hide_folder_description">這功能藉由添加一個\'.nomedia\'檔案,來隱藏資料夾和所有子資料夾。您可以透過設定中的「顯示隱藏的資料夾」選項來查看。\n是否繼續?</string>
|
||||||
<string name="exclude">Exclude</string>
|
<string name="exclude">排除</string>
|
||||||
<string name="excluded_folders">Excluded folders</string>
|
<string name="excluded_folders">排除資料夾</string>
|
||||||
<string name="manage_excluded_folders">Manage excluded folders</string>
|
<string name="manage_excluded_folders">管理排除資料夾</string>
|
||||||
<string name="exclude_folder_description">This will exclude the selection together with its subfolders from Simple Gallery only. You can manage excluded folders in Settings.</string>
|
<string name="exclude_folder_description">此資料夾與子資料夾將只會都從簡易相簿中排除。您可以在設定中進行管理。</string>
|
||||||
<string name="exclude_folder_parent">Exclude a parent instead?</string>
|
<string name="exclude_folder_parent">是否排除上層資料夾?</string>
|
||||||
<string name="excluded_activity_placeholder">Excluding folders will make them together with their subfolders hidden just in Simple Gallery, they will still be visible in other applications.\\n\\nIf you want to hide them from other apps too, use the Hide function.</string>
|
<string name="excluded_activity_placeholder">「排除資料夾」只會將選擇的資料夾與子資料夾一起從簡易相簿中隱藏,他們仍會出現在其他應用程式中。\n\n如果您要在其他應用程式中也隱藏,請使用「隱藏」功能。</string>
|
||||||
<string name="remove_all">Remove all</string>
|
<string name="remove_all">移除全部</string>
|
||||||
<string name="remove_all_description">Remove all folders from the list of excluded? This will not delete the folders.</string>
|
<string name="remove_all_description">是否將排除列表中的所有資料夾都移除?這不會刪除資料夾。</string>
|
||||||
|
|
||||||
<!-- Include folders -->
|
<!-- Include folders -->
|
||||||
<string name="include_folders">Included folders</string>
|
<string name="include_folders">包含資料夾</string>
|
||||||
<string name="manage_included_folders">Manage included folders</string>
|
<string name="manage_included_folders">管理包含資料夾</string>
|
||||||
<string name="add_folder">Add folder</string>
|
<string name="add_folder">增加資料夾</string>
|
||||||
<string name="included_activity_placeholder">If you have some folders which contain media, but were not recognized by the app, you can add them manually here.</string>
|
<string name="included_activity_placeholder">如果有些資料夾含有媒體檔案,卻沒被辨識到,您可以在此手動加入。</string>
|
||||||
|
|
||||||
<!-- Resizing -->
|
<!-- Resizing -->
|
||||||
<string name="resize">縮放</string>
|
<string name="resize">縮放</string>
|
||||||
<string name="resize_and_save">縮放選區並儲存</string>
|
<string name="resize_and_save">縮放所選區域並儲存</string>
|
||||||
<string name="width">寬度</string>
|
<string name="width">寬度</string>
|
||||||
<string name="height">高度</string>
|
<string name="height">高度</string>
|
||||||
<string name="keep_aspect_ratio">保持長寬比</string>
|
<string name="keep_aspect_ratio">保持長寬比</string>
|
||||||
|
@ -55,64 +56,76 @@
|
||||||
<string name="save">儲存</string>
|
<string name="save">儲存</string>
|
||||||
<string name="rotate">旋轉</string>
|
<string name="rotate">旋轉</string>
|
||||||
<string name="path">路徑</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="image_editing_failed">圖片編輯失敗</string>
|
||||||
<string name="edit_image_with">編輯用:</string>
|
<string name="edit_image_with">編輯圖片:</string>
|
||||||
<string name="no_editor_found">沒有可用的圖檔編輯器</string>
|
<string name="no_editor_found">找不到圖片編輯器</string>
|
||||||
<string name="unknown_file_location">未知檔案路徑</string>
|
<string name="unknown_file_location">未知的檔案位置</string>
|
||||||
<string name="error_saving_file">不能覆蓋源檔案</string>
|
<string name="error_saving_file">無法誤蓋原始檔案</string>
|
||||||
<string name="rotate_left">Rotate left</string>
|
<string name="rotate_left">向左轉</string>
|
||||||
<string name="rotate_right">Rotate right</string>
|
<string name="rotate_right">向右轉</string>
|
||||||
<string name="rotate_one_eighty">Rotate by 180º</string>
|
<string name="rotate_one_eighty">旋轉180º</string>
|
||||||
<string name="flip">Flip</string>
|
<string name="flip">翻轉</string>
|
||||||
<string name="flip_horizontally">Flip horizontally</string>
|
<string name="flip_horizontally">水平翻轉</string>
|
||||||
<string name="flip_vertically">Flip vertically</string>
|
<string name="flip_vertically">垂直翻轉</string>
|
||||||
<string name="out_of_memory_error">Out of memory error</string>
|
<string name="edit_with">用其他程式編輯</string>
|
||||||
<string name="edit_with">Edit with</string>
|
|
||||||
|
|
||||||
<!-- Set wallpaper -->
|
<!-- Set wallpaper -->
|
||||||
<string name="simple_wallpaper">簡易桌布</string>
|
<string name="simple_wallpaper">簡易桌布</string>
|
||||||
<string name="set_as_wallpaper">設定為桌布</string>
|
<string name="set_as_wallpaper">設為桌布</string>
|
||||||
<string name="set_as_wallpaper_failed">桌布設定失敗</string>
|
<string name="set_as_wallpaper_failed">設為桌布失敗</string>
|
||||||
<string name="set_as_wallpaper_with">用其他應用軟體設定桌布……</string>
|
<string name="set_as_wallpaper_with">用其他程式設為桌布:</string>
|
||||||
<string name="no_capable_app_found">沒有可用的應用軟體</string>
|
<string name="no_capable_app_found">找不到可用的應用程式</string>
|
||||||
<string name="setting_wallpaper">正在應用軟體桌布…</string>
|
<string name="setting_wallpaper">桌布設定中…</string>
|
||||||
<string name="wallpaper_set_successfully">成功應用軟體桌布</string>
|
<string name="wallpaper_set_successfully">成功設為桌布</string>
|
||||||
<string name="portrait_aspect_ratio">Portrait aspect ratio</string>
|
<string name="portrait_aspect_ratio">直向長寬比</string>
|
||||||
<string name="landscape_aspect_ratio">Landscape aspect ratio</string>
|
<string name="landscape_aspect_ratio">橫向長寬比</string>
|
||||||
|
|
||||||
|
<!-- Slideshow -->
|
||||||
|
<string name="slideshow">投影片</string>
|
||||||
|
<string name="interval">間隔 (秒):</string>
|
||||||
|
<string name="include_photos">包含照片和GIF</string>
|
||||||
|
<string name="include_videos">包含影片</string>
|
||||||
|
<string name="random_order">隨機順序</string>
|
||||||
|
<string name="use_fade">使用淡入淡出動畫</string>
|
||||||
|
<string name="move_backwards">反向播放</string>
|
||||||
|
<string name="slideshow_ended">投影片結束</string>
|
||||||
|
<string name="no_media_for_slideshow">找不到投影片的媒體檔案</string>
|
||||||
|
|
||||||
<!-- Settings -->
|
<!-- Settings -->
|
||||||
<string name="show_hidden_media">秀出隱藏資料夾</string>
|
<string name="show_hidden_media">顯示隱藏的媒體檔案</string>
|
||||||
<string name="autoplay_videos">自動播放影片</string>
|
<string name="autoplay_videos">自動播放影片</string>
|
||||||
<string name="toggle_filename">顯示檔案名稱</string>
|
<string name="toggle_filename">顯示檔案名稱</string>
|
||||||
<string name="show_media">秀出多媒體檔案</string>
|
<string name="show_media">顯示媒體檔案</string>
|
||||||
<string name="images">僅圖片</string>
|
<string name="images">只有圖片</string>
|
||||||
<string name="videos">僅影片</string>
|
<string name="videos">只有影片</string>
|
||||||
<string name="gifs">GIFs only</string>
|
<string name="gifs">只有GIF</string>
|
||||||
<string name="images_videos_gifs">Images, videos, GIFs</string>
|
<string name="images_videos_gifs">圖片、影片、GIF</string>
|
||||||
<string name="images_and_videos">圖片和影片</string>
|
<string name="images_and_videos">圖片和影片</string>
|
||||||
<string name="loop_videos">迴圈播放影片</string>
|
<string name="loop_videos">影片循環播放</string>
|
||||||
<string name="animate_gifs">Animate GIFs at thumbnails</string>
|
<string name="animate_gifs">縮圖顯示GIF動畫</string>
|
||||||
<string name="max_brightness">Max brightness when viewing media</string>
|
<string name="max_brightness">瀏覽時最大亮度</string>
|
||||||
<string name="crop_thumbnails">Crop thumbnails into squares</string>
|
<string name="crop_thumbnails">縮圖裁剪成正方形</string>
|
||||||
<string name="screen_rotation_by">Rotate fullscreen media by</string>
|
<string name="screen_rotation_by">全螢幕時旋轉方向</string>
|
||||||
<string name="screen_rotation_system_setting">System setting</string>
|
<string name="screen_rotation_system_setting">系統設定方向</string>
|
||||||
<string name="screen_rotation_device_rotation">Device rotation</string>
|
<string name="screen_rotation_device_rotation">裝置實際方向</string>
|
||||||
<string name="screen_rotation_aspect_ratio">Aspect ratio</string>
|
<string name="screen_rotation_aspect_ratio">圖片長寬比</string>
|
||||||
<string name="dark_background_at_fullscreen">Dark background at fullscreen media</string>
|
<string name="dark_background_at_fullscreen">全螢幕時黑背景</string>
|
||||||
<string name="scroll_thumbnails_horizontally">Scroll thumbnails horizontally</string>
|
<string name="scroll_thumbnails_horizontally">橫向滑動縮圖</string>
|
||||||
|
<string name="hide_system_ui_at_fullscreen">全螢幕時自動隱藏系統介面</string>
|
||||||
|
<string name="replace_share_with_rotate">將全螢幕選單的分享取代為旋轉</string>
|
||||||
|
|
||||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||||
<!-- Short description has to have less than 80 chars -->
|
<!-- Short description has to have less than 80 chars -->
|
||||||
<string name="app_short_description">一個沒有廣告,用來觀看照片及影片的藝廊。</string>
|
<string name="app_short_description">一個用來瀏覽相片和影片,且沒有廣告的相簿。</string>
|
||||||
<string name="app_long_description">
|
<string name="app_long_description">
|
||||||
一個觀看照片跟影片的簡單實用工具。項目可以根據日期、大小、名稱來進行遞增及遞減排序,照片可以縮放。媒體檔案們根據螢幕的大小呈列在多個方格中,您可以使用捏放手勢來調整一列中的方格數量。媒體檔案可以被重新命名、分享、刪除、複製以及移動。照片亦可被裁切、旋轉或是直接在應用軟體中設定為桌布。
|
一個適合用來瀏覽相片和影片的簡單工具。可以根據日期、大小、名稱來遞增或遞減排序項目,相片能被縮放。媒體檔案會依畫面大小呈現在數個欄位內,你可以使用縮放手勢來改變欄數。媒體檔案可以重新命名、分享、刪除、複製、移動;圖片還能縮放、旋轉、翻轉,或者直接設為桌布。
|
||||||
|
|
||||||
藝廊亦提供讓第三方軟體能夠用來預覽圖片/影片、添加附件於電子郵件客戶端軟體中等功能。非常適合日常使用。
|
這相簿也支援第三方應用,像是預覽圖片/影片、添加電子信箱附件...等功能,日常使用上相當適合。
|
||||||
|
|
||||||
應用軟體不包含廣告與非必要的權限。它是完全開放原始碼的,並內建自訂顔色之使用者介面主題。
|
優點包含沒廣告,也沒非必要的權限,而且完全開放原始碼,並提供自訂顏色。
|
||||||
|
|
||||||
這個應用軟體只是一系列應用軟體中的一小部份。您可以在 http://www.simplemobiletools.com 找到剩下的軟體。
|
這只是一個大系列應用程式的其中一項程式,你可以在這發現更多 http://www.simplemobiletools.com
|
||||||
</string>
|
</string>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
<resources>
|
<resources>
|
||||||
<color name="actionbar_menu_icon">#454545</color>
|
<color name="actionbar_menu_icon">#454545</color>
|
||||||
<color name="crop_image_view_background">#BB000000</color>
|
<color name="crop_image_view_background">#BB000000</color>
|
||||||
|
<color name="circle_black_background">#66000000</color>
|
||||||
|
|
||||||
<!-- Default colors -->
|
<!-- Default colors -->
|
||||||
<color name="default_text_color">@color/default_dark_theme_text_color</color>
|
<color name="default_text_color">@color/default_dark_theme_text_color</color>
|
||||||
|
|
|
@ -2,11 +2,10 @@
|
||||||
<resources>
|
<resources>
|
||||||
<dimen name="dir_tmb_size">150dp</dimen>
|
<dimen name="dir_tmb_size">150dp</dimen>
|
||||||
<dimen name="medium_tmb_size">100dp</dimen>
|
<dimen name="medium_tmb_size">100dp</dimen>
|
||||||
<dimen name="pin_size">20dp</dimen>
|
<dimen name="sd_card_icon_size">20dp</dimen>
|
||||||
<dimen name="play_outline_size">40dp</dimen>
|
<dimen name="selection_check_size">26dp</dimen>
|
||||||
<dimen name="play_outline_size_big">150dp</dimen>
|
<dimen name="play_outline_size_big">150dp</dimen>
|
||||||
<dimen name="timer_padding">24dp</dimen>
|
<dimen name="timer_padding">24dp</dimen>
|
||||||
<dimen name="tmb_shadow_height">50dp</dimen>
|
<dimen name="tmb_shadow_height">50dp</dimen>
|
||||||
|
<dimen name="video_side_slider_width">150dp</dimen>
|
||||||
<dimen name="dragselect_hotspot_height">56dp</dimen>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -2,6 +2,16 @@
|
||||||
<resources>
|
<resources>
|
||||||
|
|
||||||
<!-- Release notes -->
|
<!-- Release notes -->
|
||||||
|
<string name="release_123">Allow changing the screen brightness and volume at videos by vertically dragging the screen sides</string>
|
||||||
|
<string name="release_122">Added slideshow at the fullscreen view</string>
|
||||||
|
<string name="release_119">Added pattern/pin protection for showing hidden items</string>
|
||||||
|
<string name="release_118">Added a toggle for replacing Share with Rotate at fullscreen media</string>
|
||||||
|
<string name="release_115">
|
||||||
|
Added an indicator of folders located on SD cards
|
||||||
|
Improved the way of rotating jpg images on the internal storage by modifying the exif tags + added autosave
|
||||||
|
</string>
|
||||||
|
<string name="release_114">Added an option for automatically hiding the system UI at entering fullscreen mode</string>
|
||||||
|
<string name="release_112">Added an option for enabling horizontal scrolling</string>
|
||||||
<string name="release_108">Allow setting custom folder covers</string>
|
<string name="release_108">Allow setting custom folder covers</string>
|
||||||
<string name="release_98">
|
<string name="release_98">
|
||||||
Allow selecting multiple items by finger dragging\n
|
Allow selecting multiple items by finger dragging\n
|
||||||
|
|
|
@ -19,11 +19,12 @@
|
||||||
<string name="no_camera_app_found">No Camera app has been found</string>
|
<string name="no_camera_app_found">No Camera app has been found</string>
|
||||||
<string name="increase_column_count">Increase column count</string>
|
<string name="increase_column_count">Increase column count</string>
|
||||||
<string name="reduce_column_count">Reduce column count</string>
|
<string name="reduce_column_count">Reduce column count</string>
|
||||||
<string name="temporarily_show_hidden">Temporarily show hidden</string>
|
|
||||||
<string name="change_cover_image">Change cover image</string>
|
<string name="change_cover_image">Change cover image</string>
|
||||||
<string name="select_photo">Select photo</string>
|
<string name="select_photo">Select photo</string>
|
||||||
<string name="use_default">Use default</string>
|
<string name="use_default">Use default</string>
|
||||||
<string name="set_as">Set as</string>
|
<string name="set_as">Set as</string>
|
||||||
|
<string name="volume">Volume</string>
|
||||||
|
<string name="brightness">Brightness</string>
|
||||||
|
|
||||||
<!-- Hide / Exclude -->
|
<!-- Hide / Exclude -->
|
||||||
<string name="hide_folder_description">This function hides the folder by adding a \'.nomedia\' file into it, it will hide all subfolders too. You can see them by toggling the \'Show hidden folders\' option in Settings. Continue?</string>
|
<string name="hide_folder_description">This function hides the folder by adding a \'.nomedia\' file into it, it will hide all subfolders too. You can see them by toggling the \'Show hidden folders\' option in Settings. Continue?</string>
|
||||||
|
@ -67,7 +68,6 @@
|
||||||
<string name="flip">Flip</string>
|
<string name="flip">Flip</string>
|
||||||
<string name="flip_horizontally">Flip horizontally</string>
|
<string name="flip_horizontally">Flip horizontally</string>
|
||||||
<string name="flip_vertically">Flip vertically</string>
|
<string name="flip_vertically">Flip vertically</string>
|
||||||
<string name="out_of_memory_error">Out of memory error</string>
|
|
||||||
<string name="edit_with">Edit with</string>
|
<string name="edit_with">Edit with</string>
|
||||||
|
|
||||||
<!-- Set wallpaper -->
|
<!-- Set wallpaper -->
|
||||||
|
@ -81,6 +81,17 @@
|
||||||
<string name="portrait_aspect_ratio">Portrait aspect ratio</string>
|
<string name="portrait_aspect_ratio">Portrait aspect ratio</string>
|
||||||
<string name="landscape_aspect_ratio">Landscape aspect ratio</string>
|
<string name="landscape_aspect_ratio">Landscape aspect ratio</string>
|
||||||
|
|
||||||
|
<!-- Slideshow -->
|
||||||
|
<string name="slideshow">Slideshow</string>
|
||||||
|
<string name="interval">Interval (seconds):</string>
|
||||||
|
<string name="include_photos">Include photos and GIFs</string>
|
||||||
|
<string name="include_videos">Include videos</string>
|
||||||
|
<string name="random_order">Random order</string>
|
||||||
|
<string name="use_fade">Use fade animations</string>
|
||||||
|
<string name="move_backwards">Move backwards</string>
|
||||||
|
<string name="slideshow_ended">The slideshow ended</string>
|
||||||
|
<string name="no_media_for_slideshow">No media for the slideshow have been found</string>
|
||||||
|
|
||||||
<!-- Settings -->
|
<!-- Settings -->
|
||||||
<string name="show_hidden_media">Show hidden media</string>
|
<string name="show_hidden_media">Show hidden media</string>
|
||||||
<string name="autoplay_videos">Play videos automatically</string>
|
<string name="autoplay_videos">Play videos automatically</string>
|
||||||
|
@ -101,6 +112,8 @@
|
||||||
<string name="screen_rotation_aspect_ratio">Aspect ratio</string>
|
<string name="screen_rotation_aspect_ratio">Aspect ratio</string>
|
||||||
<string name="dark_background_at_fullscreen">Dark background at fullscreen media</string>
|
<string name="dark_background_at_fullscreen">Dark background at fullscreen media</string>
|
||||||
<string name="scroll_thumbnails_horizontally">Scroll thumbnails horizontally</string>
|
<string name="scroll_thumbnails_horizontally">Scroll thumbnails horizontally</string>
|
||||||
|
<string name="hide_system_ui_at_fullscreen">Automatically hide system UI at fullscreen media</string>
|
||||||
|
<string name="replace_share_with_rotate">Replace Share with Rotate at fullscreen menu</string>
|
||||||
|
|
||||||
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
<!-- Strings displayed only on Google Playstore. Optional, but good to have -->
|
||||||
<!-- Short description has to have less than 80 chars -->
|
<!-- Short description has to have less than 80 chars -->
|
||||||
|
|
|
@ -15,4 +15,5 @@
|
||||||
<style name="MyFullScreenActionBar" parent="Widget.AppCompat.Light.ActionBar">
|
<style name="MyFullScreenActionBar" parent="Widget.AppCompat.Light.ActionBar">
|
||||||
<item name="titleTextStyle">@style/AppTheme.ActionBar.TitleTextStyle</item>
|
<item name="titleTextStyle">@style/AppTheme.ActionBar.TitleTextStyle</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|