67
CHANGELOG.md
|
@ -1,6 +1,73 @@
|
|||
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)*
|
||||
----------------------------
|
||||
|
||||
|
|
|
@ -10,8 +10,8 @@ android {
|
|||
applicationId "com.simplemobiletools.gallery"
|
||||
minSdkVersion 16
|
||||
targetSdkVersion 23
|
||||
versionCode 111
|
||||
versionName "2.11.1"
|
||||
versionCode 124
|
||||
versionName "2.13.1"
|
||||
}
|
||||
|
||||
signingConfigs {
|
||||
|
@ -29,25 +29,30 @@ android {
|
|||
sourceSets {
|
||||
main.java.srcDirs += 'src/main/kotlin'
|
||||
}
|
||||
|
||||
lintOptions {
|
||||
checkReleaseBuilds false
|
||||
abortOnError false
|
||||
}
|
||||
}
|
||||
|
||||
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.theartofdev.edmodo:android-image-cropper:2.4.0'
|
||||
compile 'com.bignerdranch.android:recyclerview-multiselect:0.2'
|
||||
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 "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
||||
|
||||
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5'
|
||||
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
|
||||
testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
|
||||
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.1'
|
||||
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1'
|
||||
testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1'
|
||||
}
|
||||
|
||||
buildscript {
|
||||
ext.kotlin_version = '1.1.2-5'
|
||||
ext.kotlin_version = '1.1.4-2'
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
|
2
app/proguard-rules.pro
vendored
|
@ -2,4 +2,4 @@
|
|||
-dontwarn com.simplemobiletools.**
|
||||
|
||||
-renamesourcefileattribute SourceFile
|
||||
-keepattributes SourceFile, LineNumberTable
|
||||
-keepattributes SourceFile,LineNumberTable
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
android:allowBackup="true"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_launcher_name"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/AppTheme">
|
||||
|
||||
|
|
|
@ -4,11 +4,14 @@ import android.app.Application
|
|||
import com.squareup.leakcanary.LeakCanary
|
||||
|
||||
class App : Application() {
|
||||
val USE_LEAK_CANARY = false
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
if (LeakCanary.isInAnalyzerProcess(this)) {
|
||||
return
|
||||
if (USE_LEAK_CANARY) {
|
||||
if (LeakCanary.isInAnalyzerProcess(this)) {
|
||||
return
|
||||
}
|
||||
LeakCanary.install(this)
|
||||
}
|
||||
LeakCanary.install(this)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@ import android.widget.FrameLayout
|
|||
import com.google.gson.Gson
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.models.Release
|
||||
import com.simplemobiletools.commons.views.MyScalableRecyclerView
|
||||
import com.simplemobiletools.gallery.BuildConfig
|
||||
import com.simplemobiletools.gallery.R
|
||||
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.helpers.*
|
||||
import com.simplemobiletools.gallery.models.Directory
|
||||
import com.simplemobiletools.gallery.views.MyScalableRecyclerView
|
||||
import kotlinx.android.synthetic.main.activity_main.*
|
||||
import java.io.*
|
||||
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.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
|
||||
}
|
||||
|
||||
|
@ -96,7 +97,8 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
|
|||
R.id.sort -> showSortingDialog()
|
||||
R.id.open_camera -> launchCamera()
|
||||
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.reduce_column_count -> reduceColumnCount()
|
||||
R.id.settings -> launchSettings()
|
||||
|
@ -109,16 +111,19 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
|
|||
override fun onResume() {
|
||||
super.onResume()
|
||||
if (mStoredAnimateGifs != config.animateGifs) {
|
||||
directories_grid.adapter.notifyDataSetChanged()
|
||||
directories_grid.adapter?.notifyDataSetChanged()
|
||||
}
|
||||
|
||||
if (mStoredCropThumbnails != config.cropThumbnails) {
|
||||
directories_grid.adapter.notifyDataSetChanged()
|
||||
directories_grid.adapter?.notifyDataSetChanged()
|
||||
}
|
||||
|
||||
if (mStoredScrollHorizontally != config.scrollHorizontally) {
|
||||
(directories_grid.adapter as DirectoryAdapter).scrollVertically = !config.scrollHorizontally
|
||||
directories_grid.adapter.notifyDataSetChanged()
|
||||
directories_grid.adapter?.let {
|
||||
(it as DirectoryAdapter).scrollVertically = !config.scrollHorizontally
|
||||
it.notifyDataSetChanged()
|
||||
}
|
||||
setupScrollDirection()
|
||||
}
|
||||
|
||||
tryloadGallery()
|
||||
|
@ -134,7 +139,7 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
|
|||
mStoredAnimateGifs = config.animateGifs
|
||||
mStoredCropThumbnails = config.cropThumbnails
|
||||
mStoredScrollHorizontally = config.scrollHorizontally
|
||||
MyScalableRecyclerView.mListener = null
|
||||
directories_grid.listener = null
|
||||
mLastMediaHandler.removeCallbacksAndMessages(null)
|
||||
}
|
||||
|
||||
|
@ -205,15 +210,27 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
|
|||
finish()
|
||||
}
|
||||
|
||||
private fun temporarilyShowHidden() {
|
||||
config.temporarilyShowHidden = true
|
||||
private fun tryToggleTemporarilyShowHidden() {
|
||||
if (config.temporarilyShowHidden) {
|
||||
toggleTemporarilyShowHidden(false)
|
||||
} else {
|
||||
handleHiddenFolderPasswordProtection {
|
||||
toggleTemporarilyShowHidden(true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun toggleTemporarilyShowHidden(show: Boolean) {
|
||||
config.temporarilyShowHidden = show
|
||||
getDirectories()
|
||||
invalidateOptionsMenu()
|
||||
}
|
||||
|
||||
private fun checkIfColorChanged() {
|
||||
if (directories_grid.adapter != null && getRecyclerAdapter().foregroundColor != config.primaryColor) {
|
||||
getRecyclerAdapter().updatePrimaryColor(config.primaryColor)
|
||||
directories_fastscroller.updateHandleColor()
|
||||
if (directories_grid.adapter != null && getRecyclerAdapter().primaryColor != config.primaryColor) {
|
||||
getRecyclerAdapter().primaryColor = config.primaryColor
|
||||
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_grid.isDragSelectionEnabled = true
|
||||
directories_grid.isZoomingEnabled = true
|
||||
layoutManager.spanCount = config.dirColumnCnt
|
||||
MyScalableRecyclerView.mListener = object : MyScalableRecyclerView.MyScalableRecyclerViewListener {
|
||||
directories_grid.listener = object : MyScalableRecyclerView.MyScalableRecyclerViewListener {
|
||||
override fun zoomIn() {
|
||||
if (layoutManager.spanCount > 1) {
|
||||
reduceColumnCount()
|
||||
|
@ -268,13 +287,13 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
|
|||
private fun increaseColumnCount() {
|
||||
config.dirColumnCnt = ++(directories_grid.layoutManager as GridLayoutManager).spanCount
|
||||
invalidateOptionsMenu()
|
||||
directories_grid.adapter.notifyDataSetChanged()
|
||||
directories_grid.adapter?.notifyDataSetChanged()
|
||||
}
|
||||
|
||||
private fun reduceColumnCount() {
|
||||
config.dirColumnCnt = --(directories_grid.layoutManager as GridLayoutManager).spanCount
|
||||
invalidateOptionsMenu()
|
||||
directories_grid.adapter.notifyDataSetChanged()
|
||||
directories_grid.adapter?.notifyDataSetChanged()
|
||||
}
|
||||
|
||||
private fun isPickImageIntent(intent: Intent) = isPickIntent(intent) && (hasImageContentData(intent) || isImageType(intent))
|
||||
|
@ -373,7 +392,9 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
|
|||
|
||||
mDirs = dirs
|
||||
|
||||
setupAdapter()
|
||||
runOnUiThread {
|
||||
setupAdapter()
|
||||
}
|
||||
storeDirectories()
|
||||
}
|
||||
|
||||
|
@ -385,17 +406,29 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
|
|||
}
|
||||
|
||||
private fun setupAdapter() {
|
||||
val adapter = DirectoryAdapter(this, mDirs, this) {
|
||||
itemClicked(it.path)
|
||||
}
|
||||
|
||||
val currAdapter = directories_grid.adapter
|
||||
if (currAdapter != null) {
|
||||
(currAdapter as DirectoryAdapter).updateDirs(mDirs)
|
||||
if (currAdapter == null) {
|
||||
directories_grid.adapter = DirectoryAdapter(this, mDirs, this, isPickIntent(intent) || isGetAnyContentIntent(intent)) {
|
||||
itemClicked(it.path)
|
||||
}
|
||||
} 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() {
|
||||
|
@ -454,6 +487,13 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
|
|||
add(Release(97, R.string.release_97))
|
||||
add(Release(98, R.string.release_98))
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,18 +9,19 @@ import android.os.Build
|
|||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import android.support.v7.widget.GridLayoutManager
|
||||
import android.util.Log
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.view.ViewGroup
|
||||
import android.widget.FrameLayout
|
||||
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.transition.Transition
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.reflect.TypeToken
|
||||
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.views.MyScalableRecyclerView
|
||||
import com.simplemobiletools.gallery.R
|
||||
import com.simplemobiletools.gallery.adapters.MediaAdapter
|
||||
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.helpers.*
|
||||
import com.simplemobiletools.gallery.models.Medium
|
||||
import com.simplemobiletools.gallery.views.MyScalableRecyclerView
|
||||
import kotlinx.android.synthetic.main.activity_media.*
|
||||
import java.io.File
|
||||
import java.io.IOException
|
||||
|
@ -79,16 +79,19 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
|||
override fun onResume() {
|
||||
super.onResume()
|
||||
if (mShowAll && mStoredAnimateGifs != config.animateGifs) {
|
||||
media_grid.adapter.notifyDataSetChanged()
|
||||
media_grid.adapter?.notifyDataSetChanged()
|
||||
}
|
||||
|
||||
if (mStoredCropThumbnails != config.cropThumbnails) {
|
||||
media_grid.adapter.notifyDataSetChanged()
|
||||
media_grid.adapter?.notifyDataSetChanged()
|
||||
}
|
||||
|
||||
if (mStoredScrollHorizontally != config.scrollHorizontally) {
|
||||
(media_grid.adapter as MediaAdapter).scrollVertically = !config.scrollHorizontally
|
||||
media_grid.adapter.notifyDataSetChanged()
|
||||
media_grid.adapter?.let {
|
||||
(it as MediaAdapter).scrollVertically = !config.scrollHorizontally
|
||||
it.notifyDataSetChanged()
|
||||
}
|
||||
setupScrollDirection()
|
||||
}
|
||||
|
||||
tryloadGallery()
|
||||
|
@ -102,7 +105,7 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
|||
mStoredAnimateGifs = config.animateGifs
|
||||
mStoredCropThumbnails = config.cropThumbnails
|
||||
mStoredScrollHorizontally = config.scrollHorizontally
|
||||
MyScalableRecyclerView.mListener = null
|
||||
media_grid.listener = null
|
||||
mLastMediaHandler.removeCallbacksAndMessages(null)
|
||||
}
|
||||
|
||||
|
@ -126,9 +129,10 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
|||
}
|
||||
|
||||
private fun checkIfColorChanged() {
|
||||
if (media_grid.adapter != null && getRecyclerAdapter().foregroundColor != config.primaryColor) {
|
||||
getRecyclerAdapter().updatePrimaryColor(config.primaryColor)
|
||||
media_fastscroller.updateHandleColor()
|
||||
if (media_grid.adapter != null && getRecyclerAdapter().primaryColor != config.primaryColor) {
|
||||
getRecyclerAdapter().primaryColor = config.primaryColor
|
||||
media_horizontal_fastscroller.updateHandleColor()
|
||||
media_vertical_fastscroller.updateHandleColor()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -136,17 +140,29 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
|||
if (isDirEmpty())
|
||||
return
|
||||
|
||||
val adapter = MediaAdapter(this, mMedia, this) {
|
||||
itemClicked(it.path)
|
||||
}
|
||||
|
||||
val currAdapter = media_grid.adapter
|
||||
if (currAdapter != null) {
|
||||
(currAdapter as MediaAdapter).updateMedia(mMedia)
|
||||
if (currAdapter == null) {
|
||||
media_grid.adapter = MediaAdapter(this, mMedia, this, mIsGetAnyIntent) {
|
||||
itemClicked(it.path)
|
||||
}
|
||||
} 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() {
|
||||
|
@ -181,7 +197,8 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
|||
findItem(R.id.open_camera).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.reduce_column_count).isVisible = config.mediaColumnCnt > 1
|
||||
|
@ -199,7 +216,8 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
|||
R.id.hide_folder -> tryHideFolder()
|
||||
R.id.unhide_folder -> unhideFolder()
|
||||
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.reduce_column_count -> reduceColumnCount()
|
||||
R.id.settings -> launchSettings()
|
||||
|
@ -298,9 +316,20 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
|||
false
|
||||
}
|
||||
|
||||
private fun temporarilyShowHidden() {
|
||||
config.temporarilyShowHidden = true
|
||||
private fun tryToggleTemporarilyShowHidden() {
|
||||
if (config.temporarilyShowHidden) {
|
||||
toggleTemporarilyShowHidden(false)
|
||||
} else {
|
||||
handleHiddenFolderPasswordProtection {
|
||||
toggleTemporarilyShowHidden(true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun toggleTemporarilyShowHidden(show: Boolean) {
|
||||
config.temporarilyShowHidden = show
|
||||
getMedia()
|
||||
invalidateOptionsMenu()
|
||||
}
|
||||
|
||||
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_grid.isDragSelectionEnabled = true
|
||||
media_grid.isZoomingEnabled = true
|
||||
layoutManager.spanCount = config.mediaColumnCnt
|
||||
MyScalableRecyclerView.mListener = object : MyScalableRecyclerView.MyScalableRecyclerViewListener {
|
||||
media_grid.listener = object : MyScalableRecyclerView.MyScalableRecyclerViewListener {
|
||||
override fun zoomIn() {
|
||||
if (layoutManager.spanCount > 1) {
|
||||
reduceColumnCount()
|
||||
|
@ -344,13 +375,13 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
|||
private fun increaseColumnCount() {
|
||||
config.mediaColumnCnt = ++(media_grid.layoutManager as GridLayoutManager).spanCount
|
||||
invalidateOptionsMenu()
|
||||
media_grid.adapter.notifyDataSetChanged()
|
||||
media_grid.adapter?.notifyDataSetChanged()
|
||||
}
|
||||
|
||||
private fun reduceColumnCount() {
|
||||
config.mediaColumnCnt = --(media_grid.layoutManager as GridLayoutManager).spanCount
|
||||
invalidateOptionsMenu()
|
||||
media_grid.adapter.notifyDataSetChanged()
|
||||
media_grid.adapter?.notifyDataSetChanged()
|
||||
}
|
||||
|
||||
private fun isSetWallpaperIntent() = intent.getBooleanExtra(SET_WALLPAPER_INTENT, false)
|
||||
|
@ -372,18 +403,22 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
|||
val wantedWidth = wallpaperDesiredMinimumWidth
|
||||
val wantedHeight = wallpaperDesiredMinimumHeight
|
||||
val ratio = wantedWidth.toFloat() / wantedHeight
|
||||
Glide.with(this)
|
||||
.load(File(path))
|
||||
.asBitmap()
|
||||
|
||||
val options = RequestOptions()
|
||||
.override((wantedWidth * ratio).toInt(), wantedHeight)
|
||||
.fitCenter()
|
||||
|
||||
Glide.with(this)
|
||||
.asBitmap()
|
||||
.load(File(path))
|
||||
.apply(options)
|
||||
.into(object : SimpleTarget<Bitmap>() {
|
||||
override fun onResourceReady(bitmap: Bitmap?, glideAnimation: GlideAnimation<in Bitmap>?) {
|
||||
override fun onResourceReady(resource: Bitmap?, transition: Transition<in Bitmap>?) {
|
||||
try {
|
||||
WallpaperManager.getInstance(applicationContext).setBitmap(bitmap)
|
||||
WallpaperManager.getInstance(applicationContext).setBitmap(resource)
|
||||
setResult(Activity.RESULT_OK)
|
||||
} catch (e: IOException) {
|
||||
Log.e(TAG, "item click $e")
|
||||
} catch (ignored: IOException) {
|
||||
|
||||
}
|
||||
|
||||
finish()
|
||||
|
@ -424,7 +459,9 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
|||
|
||||
mLastDrawnHashCode = media.hashCode()
|
||||
mMedia = media
|
||||
setupAdapter()
|
||||
runOnUiThread {
|
||||
setupAdapter()
|
||||
}
|
||||
storeFolder()
|
||||
}
|
||||
|
||||
|
|
|
@ -31,9 +31,9 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
|
|||
private val STORAGE_PERMISSION = 1
|
||||
private var mMedium: Medium? = null
|
||||
private var mIsFullScreen = false
|
||||
private var mFragment: ViewPagerFragment? = null
|
||||
|
||||
lateinit var mUri: Uri
|
||||
lateinit var mFragment: ViewPagerFragment
|
||||
|
||||
companion object {
|
||||
var mIsVideo = false
|
||||
|
@ -76,8 +76,8 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
|
|||
|
||||
if (savedInstanceState == null) {
|
||||
mFragment = if (mIsVideo) VideoFragment() else PhotoFragment()
|
||||
mFragment.listener = this
|
||||
mFragment.arguments = bundle
|
||||
mFragment!!.listener = this
|
||||
mFragment!!.arguments = bundle
|
||||
supportFragmentManager.beginTransaction().replace(R.id.fragment_holder, mFragment).commit()
|
||||
}
|
||||
|
||||
|
@ -98,6 +98,11 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
|
|||
} finally {
|
||||
cursor?.close()
|
||||
}
|
||||
|
||||
window.decorView.setOnSystemUiVisibilityChangeListener { visibility ->
|
||||
val isFullscreen = visibility and View.SYSTEM_UI_FLAG_FULLSCREEN != 0
|
||||
mFragment?.fullscreenToggled(isFullscreen)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
|
@ -158,12 +163,5 @@ open class PhotoVideoActivity : SimpleActivity(), ViewPagerFragment.FragmentList
|
|||
}
|
||||
}
|
||||
|
||||
override fun systemUiVisibilityChanged(visibility: Int) {
|
||||
if (visibility and View.SYSTEM_UI_FLAG_FULLSCREEN == 0) {
|
||||
mIsFullScreen = false
|
||||
showSystemUI()
|
||||
} else {
|
||||
mIsFullScreen = true
|
||||
}
|
||||
}
|
||||
override fun videoEnded() = false
|
||||
}
|
||||
|
|
|
@ -4,7 +4,10 @@ import android.content.Intent
|
|||
import android.content.res.Resources
|
||||
import android.os.Bundle
|
||||
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.helpers.SHOW_ALL_TABS
|
||||
import com.simplemobiletools.commons.models.RadioItem
|
||||
import com.simplemobiletools.gallery.R
|
||||
import com.simplemobiletools.gallery.extensions.config
|
||||
|
@ -35,7 +38,10 @@ class SettingsActivity : SimpleActivity() {
|
|||
setupDarkBackground()
|
||||
setupScrollHorizontally()
|
||||
setupScreenRotation()
|
||||
setupReplaceShare()
|
||||
setupPasswordProtection()
|
||||
setupShowMedia()
|
||||
setupHideSystemUI()
|
||||
updateTextColors(settings_holder)
|
||||
}
|
||||
|
||||
|
@ -60,11 +66,21 @@ class SettingsActivity : SimpleActivity() {
|
|||
private fun setupShowHiddenFolders() {
|
||||
settings_show_hidden_folders.isChecked = config.showHiddenMedia
|
||||
settings_show_hidden_folders_holder.setOnClickListener {
|
||||
settings_show_hidden_folders.toggle()
|
||||
config.showHiddenMedia = settings_show_hidden_folders.isChecked
|
||||
if (config.showHiddenMedia) {
|
||||
toggleHiddenFolders()
|
||||
} else {
|
||||
handleHiddenFolderPasswordProtection {
|
||||
toggleHiddenFolders()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun toggleHiddenFolders() {
|
||||
settings_show_hidden_folders.toggle()
|
||||
config.showHiddenMedia = settings_show_hidden_folders.isChecked
|
||||
}
|
||||
|
||||
private fun setupAutoplayVideos() {
|
||||
settings_autoplay_videos.isChecked = config.autoplayVideos
|
||||
settings_autoplay_videos_holder.setOnClickListener {
|
||||
|
@ -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() {
|
||||
settings_screen_rotation.text = getScreenRotationText()
|
||||
settings_screen_rotation_holder.setOnClickListener {
|
||||
|
|
|
@ -15,13 +15,11 @@ import android.media.ExifInterface
|
|||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import android.provider.MediaStore
|
||||
import android.support.v4.view.ViewPager
|
||||
import android.util.DisplayMetrics
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.view.OrientationEventListener
|
||||
import android.view.View
|
||||
import android.view.*
|
||||
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
|
||||
import com.simplemobiletools.commons.dialogs.PropertiesDialog
|
||||
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.asynctasks.GetMediaAsynctask
|
||||
import com.simplemobiletools.gallery.dialogs.SaveAsDialog
|
||||
import com.simplemobiletools.gallery.dialogs.SlideshowDialog
|
||||
import com.simplemobiletools.gallery.extensions.*
|
||||
import com.simplemobiletools.gallery.fragments.PhotoFragment
|
||||
import com.simplemobiletools.gallery.fragments.VideoFragment
|
||||
import com.simplemobiletools.gallery.fragments.ViewPagerFragment
|
||||
import com.simplemobiletools.gallery.helpers.*
|
||||
import com.simplemobiletools.gallery.models.Medium
|
||||
|
@ -49,10 +49,17 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
private var mIsFullScreen = false
|
||||
private var mPos = -1
|
||||
private var mShowAll = false
|
||||
private var mIsSlideshowActive = false
|
||||
private var mRotationDegrees = 0f
|
||||
private var mLastHandledOrientation = 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 {
|
||||
var screenWidth = 0
|
||||
var screenHeight = 0
|
||||
|
@ -91,8 +98,10 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
return
|
||||
}
|
||||
|
||||
if (intent.extras?.containsKey(IS_VIEW_INTENT) == true) {
|
||||
config.temporarilyShowHidden = true
|
||||
if (intent.extras?.containsKey(IS_VIEW_INTENT) == true && File(mPath).isHidden) {
|
||||
if (!config.isPasswordProtectionOn) {
|
||||
config.temporarilyShowHidden = true
|
||||
}
|
||||
}
|
||||
|
||||
showSystemUI()
|
||||
|
@ -100,9 +109,17 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
mDirectory = File(mPath).parent
|
||||
title = mPath.getFilenameFromPath()
|
||||
|
||||
if (mMedia.isNotEmpty()) {
|
||||
gotMedia(mMedia)
|
||||
}
|
||||
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()) {
|
||||
gotMedia(mMedia)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
reloadViewPager()
|
||||
scanPath(mPath) {}
|
||||
|
@ -110,6 +127,17 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
|
||||
if (config.darkBackground)
|
||||
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() {
|
||||
|
@ -163,32 +191,29 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
} else if (config.screenRotation == ROTATE_BY_SYSTEM_SETTING) {
|
||||
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
|
||||
}
|
||||
|
||||
invalidateOptionsMenu()
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
super.onPause()
|
||||
mOrientationEventListener.disable()
|
||||
stopSlideshow()
|
||||
}
|
||||
|
||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||
menuInflater.inflate(R.menu.menu_viewpager, menu)
|
||||
if (getCurrentMedium() == null)
|
||||
return true
|
||||
val currentMedium = getCurrentMedium() ?: return true
|
||||
|
||||
menu.apply {
|
||||
findItem(R.id.menu_set_as).isVisible = getCurrentMedium()!!.isImage() == true
|
||||
findItem(R.id.menu_edit).isVisible = getCurrentMedium()!!.isImage() == true
|
||||
findItem(R.id.menu_rotate).isVisible = getCurrentMedium()!!.isImage() == true
|
||||
findItem(R.id.menu_share_1).isVisible = !config.replaceShare
|
||||
findItem(R.id.menu_share_2).isVisible = config.replaceShare
|
||||
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_hide).isVisible = !getCurrentMedium()!!.name.startsWith('.')
|
||||
findItem(R.id.menu_unhide).isVisible = getCurrentMedium()!!.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)
|
||||
}
|
||||
findItem(R.id.menu_hide).isVisible = !currentMedium.name.startsWith('.')
|
||||
findItem(R.id.menu_unhide).isVisible = currentMedium.name.startsWith('.')
|
||||
}
|
||||
|
||||
return true
|
||||
|
@ -200,39 +225,125 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
|
||||
when (item.itemId) {
|
||||
R.id.menu_set_as -> trySetAs(getCurrentFile())
|
||||
R.id.slideshow -> initSlideshow()
|
||||
R.id.menu_copy_to -> copyMoveTo(true)
|
||||
R.id.menu_move_to -> copyMoveTo(false)
|
||||
R.id.menu_open_with -> openWith(getCurrentFile())
|
||||
R.id.menu_hide -> toggleFileVisibility(true)
|
||||
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_rename -> renameFile()
|
||||
R.id.menu_edit -> openFileEditor(getCurrentFile())
|
||||
R.id.menu_properties -> showProperties()
|
||||
R.id.menu_save_as -> saveImageAs()
|
||||
R.id.show_on_map -> showOnMap()
|
||||
R.id.rotate_right -> rotateImage(90f)
|
||||
R.id.rotate_left -> rotateImage(-90f)
|
||||
R.id.rotate_one_eighty -> rotateImage(180f)
|
||||
R.id.menu_rotate -> rotateImage()
|
||||
R.id.menu_save_as -> saveImageAs()
|
||||
R.id.settings -> launchSettings()
|
||||
else -> return super.onOptionsItemSelected(item)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
private fun updatePagerItems() {
|
||||
val pagerAdapter = MyPagerAdapter(this, supportFragmentManager, mMedia)
|
||||
private fun updatePagerItems(media: MutableList<Medium>) {
|
||||
val pagerAdapter = MyPagerAdapter(this, supportFragmentManager, media)
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1 || !isDestroyed) {
|
||||
view_pager.apply {
|
||||
adapter = pagerAdapter
|
||||
adapter!!.notifyDataSetChanged()
|
||||
currentItem = mPos
|
||||
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) {
|
||||
val files = ArrayList<File>(1).apply { add(getCurrentFile()) }
|
||||
tryCopyMoveFilesTo(files, isCopyOperation) {
|
||||
|
@ -250,12 +361,48 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
getCurrentMedium()!!.apply {
|
||||
name = newFileName
|
||||
path = it.absolutePath
|
||||
mMedia[mPos] = this
|
||||
getCurrentMedia()[mPos] = this
|
||||
}
|
||||
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() {
|
||||
val currPath = getCurrentPath()
|
||||
SaveAsDialog(this, currPath) {
|
||||
|
@ -296,19 +443,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
out.close()
|
||||
}
|
||||
|
||||
private fun rotateImage(degrees: Float) {
|
||||
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 getCurrentFragment() = (view_pager.adapter as MyPagerAdapter).getCurrentFragment(view_pager.currentItem)
|
||||
|
||||
private fun showProperties() {
|
||||
if (getCurrentMedium() != null)
|
||||
|
@ -388,7 +523,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
|
||||
private fun askConfirmDelete() {
|
||||
ConfirmationDialog(this) {
|
||||
deleteFileBg(File(mMedia[mPos].path)) {
|
||||
deleteFileBg(File(getCurrentMedia()[mPos].path)) {
|
||||
reloadViewPager()
|
||||
}
|
||||
}
|
||||
|
@ -405,7 +540,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
|
||||
private fun renameFile() {
|
||||
RenameItemDialog(this, getCurrentPath()) {
|
||||
mMedia[mPos].path = it
|
||||
getCurrentMedia()[mPos].path = it
|
||||
updateActionbarTitle()
|
||||
}
|
||||
}
|
||||
|
@ -442,21 +577,21 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
mPrevHashcode = media.hashCode()
|
||||
mMedia = media
|
||||
if (mPos == -1) {
|
||||
mPos = getProperPosition()
|
||||
mPos = getPositionInList(media)
|
||||
} else {
|
||||
mPos = Math.min(mPos, mMedia.size - 1)
|
||||
}
|
||||
|
||||
updateActionbarTitle()
|
||||
updatePagerItems()
|
||||
updatePagerItems(mMedia.toMutableList())
|
||||
invalidateOptionsMenu()
|
||||
checkOrientation()
|
||||
}
|
||||
|
||||
private fun getProperPosition(): Int {
|
||||
private fun getPositionInList(items: MutableList<Medium>): Int {
|
||||
mPos = 0
|
||||
var i = 0
|
||||
for (medium in mMedia) {
|
||||
for (medium in items) {
|
||||
if (medium.path == mPath) {
|
||||
return i
|
||||
}
|
||||
|
@ -487,37 +622,41 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
|
||||
override fun fragmentClicked() {
|
||||
mIsFullScreen = !mIsFullScreen
|
||||
checkSystemUI()
|
||||
}
|
||||
|
||||
override fun videoEnded(): Boolean {
|
||||
if (mIsSlideshowActive)
|
||||
swipeToNextMedium()
|
||||
return mIsSlideshowActive
|
||||
}
|
||||
|
||||
private fun checkSystemUI() {
|
||||
if (mIsFullScreen) {
|
||||
hideSystemUI()
|
||||
} else {
|
||||
stopSlideshow()
|
||||
showSystemUI()
|
||||
}
|
||||
}
|
||||
|
||||
override fun systemUiVisibilityChanged(visibility: Int) {
|
||||
if (visibility and View.SYSTEM_UI_FLAG_FULLSCREEN == 0) {
|
||||
mIsFullScreen = false
|
||||
showSystemUI()
|
||||
} else {
|
||||
mIsFullScreen = true
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateActionbarTitle() {
|
||||
runOnUiThread {
|
||||
if (mPos < mMedia.size) {
|
||||
title = mMedia[mPos].path.getFilenameFromPath()
|
||||
if (mPos < getCurrentMedia().size) {
|
||||
title = getCurrentMedia()[mPos].path.getFilenameFromPath()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun getCurrentMedium(): Medium? {
|
||||
return if (mMedia.isEmpty() || mPos == -1)
|
||||
return if (getCurrentMedia().isEmpty() || mPos == -1)
|
||||
null
|
||||
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 getCurrentFile() = File(getCurrentPath())
|
||||
|
@ -534,6 +673,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
|
|||
updateActionbarTitle()
|
||||
mRotationDegrees = 0f
|
||||
supportInvalidateOptionsMenu()
|
||||
scheduleSwipe()
|
||||
}
|
||||
|
||||
override fun onPageScrollStateChanged(state: Int) {
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
package com.simplemobiletools.gallery.adapters
|
||||
|
||||
import android.os.Build
|
||||
import android.graphics.PorterDuff
|
||||
import android.support.v7.view.ActionMode
|
||||
import android.support.v7.widget.RecyclerView
|
||||
import android.util.SparseArray
|
||||
import android.view.*
|
||||
import android.widget.FrameLayout
|
||||
import com.bignerdranch.android.multiselector.ModalMultiSelectorCallback
|
||||
import com.bignerdranch.android.multiselector.MultiSelector
|
||||
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.PropertiesDialog
|
||||
import com.simplemobiletools.commons.dialogs.RenameItemDialog
|
||||
import com.simplemobiletools.commons.extensions.isAStorageRootFolder
|
||||
import com.simplemobiletools.commons.extensions.isImageVideoGif
|
||||
import com.simplemobiletools.commons.extensions.needsStupidWritePermissions
|
||||
import com.simplemobiletools.commons.extensions.toast
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.gallery.R
|
||||
import com.simplemobiletools.gallery.activities.SimpleActivity
|
||||
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.Directory
|
||||
import kotlinx.android.synthetic.main.directory_item.view.*
|
||||
import kotlinx.android.synthetic.main.directory_tmb.view.*
|
||||
import java.io.File
|
||||
import java.util.*
|
||||
|
||||
class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList<Directory>, val listener: DirOperationsListener?, val itemClick: (Directory) -> Unit) :
|
||||
RecyclerView.Adapter<DirectoryAdapter.ViewHolder>() {
|
||||
class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList<Directory>, val listener: DirOperationsListener?, val isPickIntent: Boolean,
|
||||
val itemClick: (Directory) -> Unit) : RecyclerView.Adapter<DirectoryAdapter.ViewHolder>() {
|
||||
|
||||
val multiSelector = MultiSelector()
|
||||
val config = activity.config
|
||||
|
@ -39,50 +34,30 @@ class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList<Direc
|
|||
var actMode: ActionMode? = null
|
||||
var itemViews = SparseArray<View>()
|
||||
val selectedPositions = HashSet<Int>()
|
||||
var foregroundColor = 0
|
||||
var primaryColor = config.primaryColor
|
||||
var pinnedFolders = config.pinnedFolders
|
||||
var scrollVertically = !config.scrollHorizontally
|
||||
|
||||
fun toggleItemSelection(select: Boolean, pos: Int) {
|
||||
if (itemViews[pos] != null)
|
||||
getProperView(itemViews[pos]!!).isSelected = select
|
||||
|
||||
if (select)
|
||||
if (select) {
|
||||
itemViews[pos]?.dir_check?.background?.setColorFilter(primaryColor, PorterDuff.Mode.SRC_IN)
|
||||
selectedPositions.add(pos)
|
||||
else
|
||||
} else
|
||||
selectedPositions.remove(pos)
|
||||
|
||||
itemViews[pos]?.dir_check?.beVisibleIf(select)
|
||||
|
||||
if (selectedPositions.isEmpty()) {
|
||||
actMode?.finish()
|
||||
return
|
||||
}
|
||||
|
||||
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) {
|
||||
actMode?.title = "$cnt / ${dirs.size}"
|
||||
}
|
||||
|
||||
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()
|
||||
actMode?.invalidate()
|
||||
}
|
||||
|
||||
val adapterListener = object : MyAdapterListener {
|
||||
|
@ -90,17 +65,9 @@ class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList<Direc
|
|||
toggleItemSelection(select, position)
|
||||
}
|
||||
|
||||
override fun setupItemForeground(itemView: View) {
|
||||
setupItemViewForeground(itemView)
|
||||
}
|
||||
|
||||
override fun getSelectedPositions(): HashSet<Int> = selectedPositions
|
||||
}
|
||||
|
||||
init {
|
||||
foregroundColor = config.primaryColor
|
||||
}
|
||||
|
||||
val multiSelectorMode = object : ModalMultiSelectorCallback(multiSelector) {
|
||||
override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {
|
||||
when (item.itemId) {
|
||||
|
@ -142,8 +109,7 @@ class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList<Direc
|
|||
override fun onDestroyActionMode(actionMode: ActionMode?) {
|
||||
super.onDestroyActionMode(actionMode)
|
||||
selectedPositions.forEach {
|
||||
if (itemViews[it] != null)
|
||||
getProperView(itemViews[it]!!).isSelected = false
|
||||
itemViews[it]?.dir_check?.beGone()
|
||||
}
|
||||
selectedPositions.clear()
|
||||
actMode = null
|
||||
|
@ -279,7 +245,6 @@ class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList<Direc
|
|||
notifyItemChanged(i)
|
||||
}
|
||||
updateTitle(cnt)
|
||||
actMode?.invalidate()
|
||||
}
|
||||
|
||||
private fun askConfirmDelete() {
|
||||
|
@ -305,11 +270,13 @@ class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList<Direc
|
|||
|
||||
activity.handleSAFDialog(File(needPermissionForPath)) {
|
||||
selectedPositions.sortedDescending().forEach {
|
||||
val directory = dirs[it]
|
||||
folders.add(File(directory.path))
|
||||
removeFolders.add(directory)
|
||||
notifyItemRemoved(it)
|
||||
itemViews.put(it, null)
|
||||
if (dirs.size > it) {
|
||||
val directory = dirs[it]
|
||||
folders.add(File(directory.path))
|
||||
removeFolders.add(directory)
|
||||
notifyItemRemoved(it)
|
||||
itemViews.put(it, null)
|
||||
}
|
||||
}
|
||||
|
||||
dirs.removeAll(removeFolders)
|
||||
|
@ -362,7 +329,7 @@ class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList<Direc
|
|||
|
||||
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
|
||||
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) {
|
||||
|
@ -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,
|
||||
val multiSelector: MultiSelector, val listener: DirOperationsListener?, val itemClick: (Directory) -> (Unit)) :
|
||||
class ViewHolder(val view: View, val adapterListener: MyAdapterListener, val activity: SimpleActivity, val multiSelectorCallback: ModalMultiSelectorCallback,
|
||||
val multiSelector: MultiSelector, val listener: DirOperationsListener?, val isPickIntent: Boolean, val itemClick: (Directory) -> (Unit)) :
|
||||
SwappingHolder(view, MultiSelector()) {
|
||||
fun bindView(directory: Directory, isPinned: Boolean, scrollVertically: Boolean): View {
|
||||
itemView.apply {
|
||||
dir_name.text = directory.name
|
||||
photo_cnt.text = directory.mediaCnt.toString()
|
||||
dir_pin.visibility = if (isPinned) View.VISIBLE else View.GONE
|
||||
activity.loadImage(directory.tmb, dir_thumbnail, scrollVertically)
|
||||
dir_pin.beVisibleIf(isPinned)
|
||||
dir_sd_card.beVisibleIf(activity.isPathOnSD(directory.path))
|
||||
|
||||
setOnClickListener { viewClicked(directory) }
|
||||
setOnLongClickListener { viewLongClicked(); true }
|
||||
setOnLongClickListener { if (isPickIntent) viewClicked(directory) else viewLongClicked(); true }
|
||||
|
||||
|
||||
adapter.setupItemForeground(this)
|
||||
}
|
||||
return itemView
|
||||
}
|
||||
|
||||
fun viewClicked(directory: Directory) {
|
||||
if (multiSelector.isSelectable) {
|
||||
val isSelected = adapter.getSelectedPositions().contains(layoutPosition)
|
||||
adapter.toggleItemSelectionAdapter(!isSelected, layoutPosition)
|
||||
val isSelected = adapterListener.getSelectedPositions().contains(layoutPosition)
|
||||
adapterListener.toggleItemSelectionAdapter(!isSelected, layoutPosition)
|
||||
} else {
|
||||
itemClick(directory)
|
||||
}
|
||||
|
@ -454,7 +422,7 @@ class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList<Direc
|
|||
if (listener != null) {
|
||||
if (!multiSelector.isSelectable) {
|
||||
activity.startSupportActionMode(multiSelectorCallback)
|
||||
adapter.toggleItemSelectionAdapter(true, layoutPosition)
|
||||
adapterListener.toggleItemSelectionAdapter(true, layoutPosition)
|
||||
}
|
||||
|
||||
listener.itemLongClicked(layoutPosition)
|
||||
|
@ -462,15 +430,14 @@ class DirectoryAdapter(val activity: SimpleActivity, var dirs: MutableList<Direc
|
|||
}
|
||||
|
||||
fun stopLoad() {
|
||||
Glide.clear(view.dir_thumbnail)
|
||||
if (!activity.isDestroyed)
|
||||
Glide.with(activity).clear(view.dir_thumbnail)
|
||||
}
|
||||
}
|
||||
|
||||
interface MyAdapterListener {
|
||||
fun toggleItemSelectionAdapter(select: Boolean, position: Int)
|
||||
|
||||
fun setupItemForeground(itemView: View)
|
||||
|
||||
fun getSelectedPositions(): HashSet<Int>
|
||||
}
|
||||
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
package com.simplemobiletools.gallery.adapters
|
||||
|
||||
import android.os.Build
|
||||
import android.graphics.PorterDuff
|
||||
import android.support.v7.view.ActionMode
|
||||
import android.support.v7.widget.RecyclerView
|
||||
import android.util.SparseArray
|
||||
import android.view.*
|
||||
import android.widget.FrameLayout
|
||||
import com.bignerdranch.android.multiselector.ModalMultiSelectorCallback
|
||||
import com.bignerdranch.android.multiselector.MultiSelector
|
||||
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.PropertiesDialog
|
||||
import com.simplemobiletools.commons.dialogs.RenameItemDialog
|
||||
import com.simplemobiletools.commons.extensions.beGone
|
||||
import com.simplemobiletools.commons.extensions.beVisibleIf
|
||||
import com.simplemobiletools.gallery.R
|
||||
import com.simplemobiletools.gallery.activities.SimpleActivity
|
||||
import com.simplemobiletools.gallery.extensions.*
|
||||
import com.simplemobiletools.gallery.models.Medium
|
||||
import kotlinx.android.synthetic.main.photo_video_item.view.*
|
||||
import kotlinx.android.synthetic.main.photo_video_tmb.view.*
|
||||
import java.io.File
|
||||
import java.util.*
|
||||
|
||||
class MediaAdapter(val activity: SimpleActivity, var media: MutableList<Medium>, val listener: MediaOperationsListener?, val itemClick: (Medium) -> Unit) :
|
||||
RecyclerView.Adapter<MediaAdapter.ViewHolder>() {
|
||||
class MediaAdapter(val activity: SimpleActivity, var media: MutableList<Medium>, val listener: MediaOperationsListener?, val isPickIntent: Boolean,
|
||||
val itemClick: (Medium) -> Unit) : RecyclerView.Adapter<MediaAdapter.ViewHolder>() {
|
||||
|
||||
val multiSelector = MultiSelector()
|
||||
val config = activity.config
|
||||
|
@ -32,50 +31,30 @@ class MediaAdapter(val activity: SimpleActivity, var media: MutableList<Medium>,
|
|||
var actMode: ActionMode? = null
|
||||
var itemViews = SparseArray<View>()
|
||||
val selectedPositions = HashSet<Int>()
|
||||
var foregroundColor = 0
|
||||
var primaryColor = config.primaryColor
|
||||
var displayFilenames = config.displayFileNames
|
||||
var scrollVertically = !config.scrollHorizontally
|
||||
|
||||
fun toggleItemSelection(select: Boolean, pos: Int) {
|
||||
if (itemViews[pos] != null)
|
||||
getProperView(itemViews[pos]!!).isSelected = select
|
||||
|
||||
if (select)
|
||||
if (select) {
|
||||
itemViews[pos]?.medium_check?.background?.setColorFilter(primaryColor, PorterDuff.Mode.SRC_IN)
|
||||
selectedPositions.add(pos)
|
||||
else
|
||||
} else
|
||||
selectedPositions.remove(pos)
|
||||
|
||||
itemViews[pos]?.medium_check?.beVisibleIf(select)
|
||||
|
||||
if (selectedPositions.isEmpty()) {
|
||||
actMode?.finish()
|
||||
return
|
||||
}
|
||||
|
||||
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) {
|
||||
actMode?.title = "$cnt / ${media.size}"
|
||||
}
|
||||
|
||||
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()
|
||||
actMode?.invalidate()
|
||||
}
|
||||
|
||||
val adapterListener = object : MyAdapterListener {
|
||||
|
@ -83,17 +62,9 @@ class MediaAdapter(val activity: SimpleActivity, var media: MutableList<Medium>,
|
|||
toggleItemSelection(select, position)
|
||||
}
|
||||
|
||||
override fun setupItemForeground(itemView: View) {
|
||||
setupItemViewForeground(itemView)
|
||||
}
|
||||
|
||||
override fun getSelectedPositions(): HashSet<Int> = selectedPositions
|
||||
}
|
||||
|
||||
init {
|
||||
foregroundColor = config.primaryColor
|
||||
}
|
||||
|
||||
val multiSelectorMode = object : ModalMultiSelectorCallback(multiSelector) {
|
||||
override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {
|
||||
when (item.itemId) {
|
||||
|
@ -131,8 +102,7 @@ class MediaAdapter(val activity: SimpleActivity, var media: MutableList<Medium>,
|
|||
override fun onDestroyActionMode(actionMode: ActionMode?) {
|
||||
super.onDestroyActionMode(actionMode)
|
||||
selectedPositions.forEach {
|
||||
if (itemViews[it] != null)
|
||||
getProperView(itemViews[it]!!).isSelected = false
|
||||
itemViews[it]?.medium_check?.beGone()
|
||||
}
|
||||
selectedPositions.clear()
|
||||
actMode = null
|
||||
|
@ -218,7 +188,6 @@ class MediaAdapter(val activity: SimpleActivity, var media: MutableList<Medium>,
|
|||
notifyItemChanged(i)
|
||||
}
|
||||
updateTitle(cnt)
|
||||
actMode?.invalidate()
|
||||
}
|
||||
|
||||
private fun askConfirmDelete() {
|
||||
|
@ -237,6 +206,11 @@ class MediaAdapter(val activity: SimpleActivity, var media: MutableList<Medium>,
|
|||
val files = ArrayList<File>(selectedPositions.size)
|
||||
val removeMedia = ArrayList<Medium>(selectedPositions.size)
|
||||
|
||||
if (media.size <= selectedPositions.first()) {
|
||||
actMode?.finish()
|
||||
return
|
||||
}
|
||||
|
||||
activity.handleSAFDialog(File(media[selectedPositions.first()].path)) {
|
||||
selectedPositions.sortedDescending().forEach {
|
||||
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 {
|
||||
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) {
|
||||
|
@ -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,
|
||||
val multiSelector: MultiSelector, val listener: MediaOperationsListener?, val itemClick: (Medium) -> (Unit)) : SwappingHolder(view, MultiSelector()) {
|
||||
class ViewHolder(val view: View, val adapterListener: MyAdapterListener, val activity: SimpleActivity, val multiSelectorCallback: ModalMultiSelectorCallback,
|
||||
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 {
|
||||
itemView.apply {
|
||||
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)
|
||||
|
||||
setOnClickListener { viewClicked(medium) }
|
||||
setOnLongClickListener { viewLongClicked(); true }
|
||||
|
||||
adapter.setupItemForeground(this)
|
||||
setOnLongClickListener { if (isPickIntent) viewClicked(medium) else viewLongClicked(); true }
|
||||
}
|
||||
return itemView
|
||||
}
|
||||
|
||||
fun viewClicked(medium: Medium) {
|
||||
if (multiSelector.isSelectable) {
|
||||
val isSelected = adapter.getSelectedPositions().contains(layoutPosition)
|
||||
adapter.toggleItemSelectionAdapter(!isSelected, layoutPosition)
|
||||
val isSelected = adapterListener.getSelectedPositions().contains(layoutPosition)
|
||||
adapterListener.toggleItemSelectionAdapter(!isSelected, layoutPosition)
|
||||
} else {
|
||||
itemClick(medium)
|
||||
}
|
||||
|
@ -366,7 +339,7 @@ class MediaAdapter(val activity: SimpleActivity, var media: MutableList<Medium>,
|
|||
if (listener != null) {
|
||||
if (!multiSelector.isSelectable) {
|
||||
activity.startSupportActionMode(multiSelectorCallback)
|
||||
adapter.toggleItemSelectionAdapter(true, layoutPosition)
|
||||
adapterListener.toggleItemSelectionAdapter(true, layoutPosition)
|
||||
}
|
||||
|
||||
listener.itemLongClicked(layoutPosition)
|
||||
|
@ -374,15 +347,14 @@ class MediaAdapter(val activity: SimpleActivity, var media: MutableList<Medium>,
|
|||
}
|
||||
|
||||
fun stopLoad() {
|
||||
Glide.clear(view.medium_thumbnail)
|
||||
if (!activity.isDestroyed)
|
||||
Glide.with(activity).clear(view.medium_thumbnail)
|
||||
}
|
||||
}
|
||||
|
||||
interface MyAdapterListener {
|
||||
fun toggleItemSelectionAdapter(select: Boolean, position: Int)
|
||||
|
||||
fun setupItemForeground(itemView: View)
|
||||
|
||||
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.FragmentStatePagerAdapter
|
||||
import android.support.v4.view.PagerAdapter
|
||||
import android.util.SparseArray
|
||||
import android.view.ViewGroup
|
||||
import com.simplemobiletools.gallery.activities.ViewPagerActivity
|
||||
import com.simplemobiletools.gallery.fragments.PhotoFragment
|
||||
|
@ -15,7 +14,7 @@ import com.simplemobiletools.gallery.helpers.MEDIUM
|
|||
import com.simplemobiletools.gallery.models.Medium
|
||||
|
||||
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 getItem(position: Int): Fragment {
|
||||
|
@ -43,10 +42,16 @@ class MyPagerAdapter(val activity: ViewPagerActivity, fm: FragmentManager, val m
|
|||
return fragment
|
||||
}
|
||||
|
||||
override fun destroyItem(container: ViewGroup?, position: Int, `object`: Any?) {
|
||||
override fun destroyItem(container: ViewGroup?, position: Int, any: Any?) {
|
||||
mFragments.remove(position)
|
||||
super.destroyItem(container, position, `object`)
|
||||
super.destroyItem(container, position, any)
|
||||
}
|
||||
|
||||
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 excludedPaths = config.excludedFolders
|
||||
val includedPaths = config.includedFolders
|
||||
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
|
||||
dirs.sort()
|
||||
return movePinnedToFront(dirs)
|
||||
|
@ -43,8 +46,8 @@ class GetDirectoriesAsynctask(val context: Context, val isPickVideo: Boolean, va
|
|||
cancel(true)
|
||||
|
||||
val parentDir = File(path).parent ?: continue
|
||||
if (directories.containsKey(parentDir)) {
|
||||
val directory = directories[parentDir]!!
|
||||
if (directories.containsKey(parentDir.toLowerCase())) {
|
||||
val directory = directories[parentDir.toLowerCase()]!!
|
||||
val newImageCnt = directory.mediaCnt + 1
|
||||
directory.mediaCnt = newImageCnt
|
||||
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)
|
||||
directories.put(parentDir, directory)
|
||||
directories.put(parentDir.toLowerCase(), directory)
|
||||
}
|
||||
}
|
||||
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)
|
||||
return if (isThisOrParentExcluded(path, excludedPaths))
|
||||
return if (isThisOrParentExcluded(path, excludedPaths, includedPaths)) {
|
||||
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("/.")
|
||||
if (!containsNoMediaOrDot) {
|
||||
containsNoMediaOrDot = checkParentHasNoMedia(file.parentFile)
|
||||
|
@ -105,7 +108,8 @@ class GetDirectoriesAsynctask(val context: Context, val isPickVideo: Boolean, va
|
|||
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> {
|
||||
val foundFolders = ArrayList<Directory>()
|
||||
|
|
|
@ -10,14 +10,13 @@ import com.simplemobiletools.commons.helpers.*
|
|||
import com.simplemobiletools.gallery.R
|
||||
import com.simplemobiletools.gallery.activities.SimpleActivity
|
||||
import com.simplemobiletools.gallery.extensions.config
|
||||
import com.simplemobiletools.gallery.helpers.Config
|
||||
import kotlinx.android.synthetic.main.dialog_change_sorting.view.*
|
||||
|
||||
class ChangeSortingDialog(val activity: SimpleActivity, val isDirectorySorting: Boolean, showFolderCheckbox: Boolean,
|
||||
val path: String = "", val callback: () -> Unit) :
|
||||
DialogInterface.OnClickListener {
|
||||
private var currSorting = 0
|
||||
private var config: Config = activity.config
|
||||
private var config = activity.config
|
||||
private var view: View
|
||||
|
||||
init {
|
||||
|
@ -85,6 +84,6 @@ class ChangeSortingDialog(val activity: SimpleActivity, val isDirectorySorting:
|
|||
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.*
|
||||
|
||||
class ExcludeFolderDialog(val activity: SimpleActivity, val selectedPaths: List<String>, val callback: () -> Unit) {
|
||||
var dialog: AlertDialog? = null
|
||||
val alternativePaths = getAlternativePathsList()
|
||||
var radioGroup: RadioGroup? = null
|
||||
|
||||
|
@ -46,7 +45,7 @@ class ExcludeFolderDialog(val activity: SimpleActivity, val selectedPaths: List<
|
|||
private fun dialogConfirmed() {
|
||||
val path = if (alternativePaths.isEmpty()) selectedPaths[0] else alternativePaths[radioGroup!!.checkedRadioButtonId]
|
||||
activity.config.addExcludedFolder(path)
|
||||
callback.invoke()
|
||||
callback()
|
||||
}
|
||||
|
||||
private fun getAlternativePathsList(): List<String> {
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
package com.simplemobiletools.gallery.dialogs
|
||||
|
||||
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.View
|
||||
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.toast
|
||||
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) {
|
||||
var dialog: AlertDialog
|
||||
var directoriesGrid: RecyclerView
|
||||
var shownDirectories: ArrayList<Directory> = ArrayList()
|
||||
var view: View = LayoutInflater.from(activity).inflate(R.layout.dialog_directory_picker, null)
|
||||
|
||||
init {
|
||||
val view = LayoutInflater.from(activity).inflate(R.layout.dialog_directory_picker, null)
|
||||
directoriesGrid = view.directories_grid
|
||||
(view.directories_grid.layoutManager as GridLayoutManager).apply {
|
||||
orientation = if (activity.config.scrollHorizontally) GridLayoutManager.HORIZONTAL else GridLayoutManager.VERTICAL
|
||||
spanCount = activity.config.dirColumnCnt
|
||||
}
|
||||
|
||||
dialog = AlertDialog.Builder(activity)
|
||||
.setPositiveButton(R.string.ok, null)
|
||||
|
@ -45,7 +50,7 @@ class PickDirectoryDialog(val activity: SimpleActivity, val sourcePath: String,
|
|||
fun showOtherFolder() {
|
||||
val showHidden = activity.config.shouldShowHidden
|
||||
FilePickerDialog(activity, sourcePath, false, showHidden, true) {
|
||||
callback.invoke(it)
|
||||
callback(it)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -54,15 +59,31 @@ class PickDirectoryDialog(val activity: SimpleActivity, val sourcePath: String,
|
|||
return
|
||||
|
||||
shownDirectories = directories
|
||||
val adapter = DirectoryAdapter(activity, directories, null) {
|
||||
val adapter = DirectoryAdapter(activity, directories, null, true) {
|
||||
if (it.path.trimEnd('/') == sourcePath) {
|
||||
activity.toast(R.string.source_and_destination_same)
|
||||
return@DirectoryAdapter
|
||||
} else {
|
||||
callback.invoke(it.path)
|
||||
callback(it.path)
|
||||
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
|
||||
|
||||
shownMedia = media
|
||||
val adapter = MediaAdapter(activity, media, null) {
|
||||
val adapter = MediaAdapter(activity, media, null, true) {
|
||||
callback(it.path)
|
||||
dialog.dismiss()
|
||||
}
|
||||
|
|
|
@ -84,7 +84,7 @@ class ResizeDialog(val activity: SimpleActivity, val size: Point, val callback:
|
|||
}
|
||||
|
||||
val newSize = Point(getViewValue(widthView), getViewValue(heightView))
|
||||
callback.invoke(newSize)
|
||||
callback(newSize)
|
||||
dismiss()
|
||||
})
|
||||
}
|
||||
|
|
|
@ -66,11 +66,11 @@ class SaveAsDialog(val activity: SimpleActivity, val path: String, val callback:
|
|||
if (newFile.exists()) {
|
||||
val title = String.format(activity.getString(R.string.file_already_exists_overwrite), newFile.name)
|
||||
ConfirmationDialog(activity, title) {
|
||||
callback.invoke(newFile.absolutePath)
|
||||
callback(newFile.absolutePath)
|
||||
dismiss()
|
||||
}
|
||||
} else {
|
||||
callback.invoke(newFile.absolutePath)
|
||||
callback(newFile.absolutePath)
|
||||
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.load.DecodeFormat
|
||||
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.reflect.TypeToken
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
|
@ -194,7 +195,7 @@ fun Activity.launchCamera() {
|
|||
|
||||
fun SimpleActivity.launchAbout() {
|
||||
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() {
|
||||
|
@ -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) {
|
||||
target.isVerticalScrolling = verticalScroll
|
||||
if (path.isImageFast() || path.isVideoFast()) {
|
||||
|
@ -282,49 +281,55 @@ fun Activity.loadImage(path: String, target: MySquareImageView, verticalScroll:
|
|||
}
|
||||
|
||||
fun Activity.loadPng(path: String, target: MySquareImageView) {
|
||||
val builder = Glide.with(applicationContext)
|
||||
.load(path)
|
||||
.asBitmap()
|
||||
.signature(getFileSignature(path))
|
||||
.diskCacheStrategy(DiskCacheStrategy.RESULT)
|
||||
val options = RequestOptions()
|
||||
.signature(path.getFileSignature())
|
||||
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
||||
.format(DecodeFormat.PREFER_ARGB_8888)
|
||||
|
||||
if (config.cropThumbnails) builder.centerCrop() else builder.fitCenter()
|
||||
builder.into(target)
|
||||
val builder = Glide.with(applicationContext)
|
||||
.asBitmap()
|
||||
.load(path)
|
||||
|
||||
if (config.cropThumbnails) options.centerCrop() else options.fitCenter()
|
||||
builder.apply(options).into(target)
|
||||
}
|
||||
|
||||
fun Activity.loadJpg(path: String, target: MySquareImageView) {
|
||||
val options = RequestOptions()
|
||||
.signature(path.getFileSignature())
|
||||
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
||||
|
||||
val builder = Glide.with(applicationContext)
|
||||
.load(path)
|
||||
.signature(getFileSignature(path))
|
||||
.diskCacheStrategy(DiskCacheStrategy.RESULT)
|
||||
.crossFade()
|
||||
|
||||
if (config.cropThumbnails) builder.centerCrop() else builder.fitCenter()
|
||||
builder.into(target)
|
||||
if (config.cropThumbnails) options.centerCrop() else options.fitCenter()
|
||||
builder.apply(options).transition(DrawableTransitionOptions.withCrossFade()).into(target)
|
||||
}
|
||||
|
||||
fun Activity.loadAnimatedGif(path: String, target: MySquareImageView) {
|
||||
val builder = Glide.with(applicationContext)
|
||||
.load(path)
|
||||
.asGif()
|
||||
.signature(getFileSignature(path))
|
||||
val options = RequestOptions()
|
||||
.signature(path.getFileSignature())
|
||||
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
||||
.crossFade()
|
||||
|
||||
if (config.cropThumbnails) builder.centerCrop() else builder.fitCenter()
|
||||
builder.into(target)
|
||||
val builder = Glide.with(applicationContext)
|
||||
.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) {
|
||||
val builder = Glide.with(applicationContext)
|
||||
.load(path)
|
||||
.asBitmap()
|
||||
.signature(getFileSignature(path))
|
||||
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
|
||||
val options = RequestOptions()
|
||||
.signature(path.getFileSignature())
|
||||
.diskCacheStrategy(DiskCacheStrategy.DATA)
|
||||
|
||||
if (config.cropThumbnails) builder.centerCrop() else builder.fitCenter()
|
||||
builder.into(target)
|
||||
val builder = Glide.with(applicationContext)
|
||||
.asBitmap()
|
||||
.load(path)
|
||||
|
||||
if (config.cropThumbnails) options.centerCrop() else options.fitCenter()
|
||||
builder.apply(options).into(target)
|
||||
}
|
||||
|
||||
fun Activity.getCachedDirectories(): ArrayList<Directory> {
|
||||
|
|
|
@ -4,6 +4,7 @@ import android.content.Context
|
|||
import android.content.Intent
|
||||
import android.content.res.Configuration
|
||||
import android.database.Cursor
|
||||
import android.media.AudioManager
|
||||
import android.net.Uri
|
||||
import android.provider.MediaStore
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
|
@ -21,6 +22,7 @@ import java.io.File
|
|||
import java.util.*
|
||||
|
||||
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? {
|
||||
var cursor: Cursor? = null
|
||||
|
@ -73,6 +75,7 @@ private fun parseCursor(context: Context, cur: Cursor, isPickImage: Boolean, isP
|
|||
val config = context.config
|
||||
val showMedia = config.showMedia
|
||||
val showHidden = config.shouldShowHidden
|
||||
val includedFolders = config.includedFolders
|
||||
val excludedFolders = config.excludedFolders
|
||||
val noMediaFolders = context.getNoMediaFolders()
|
||||
|
||||
|
@ -111,14 +114,19 @@ private fun parseCursor(context: Context, cur: Cursor, isPickImage: Boolean, isP
|
|||
|
||||
var isExcluded = false
|
||||
excludedFolders.forEach {
|
||||
if (path.startsWith(it)) {
|
||||
if (path.startsWith("$it/")) {
|
||||
isExcluded = true
|
||||
includedFolders.forEach {
|
||||
if (path.startsWith("$it/")) {
|
||||
isExcluded = false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!isExcluded && !showHidden) {
|
||||
noMediaFolders.forEach {
|
||||
if (path.startsWith(it)) {
|
||||
if (path.startsWith("$it/")) {
|
||||
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) {
|
||||
val size = file.length()
|
||||
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.drawable.ColorDrawable
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.Priority
|
||||
import com.bumptech.glide.load.DataSource
|
||||
import com.bumptech.glide.load.DecodeFormat
|
||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||
import com.bumptech.glide.load.engine.GlideException
|
||||
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions
|
||||
import com.bumptech.glide.request.RequestListener
|
||||
import com.bumptech.glide.request.RequestOptions
|
||||
import com.bumptech.glide.request.target.Target
|
||||
import com.davemorrissey.labs.subscaleview.ImageSource
|
||||
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
|
||||
|
@ -33,7 +38,6 @@ import com.simplemobiletools.gallery.helpers.MEDIUM
|
|||
import com.simplemobiletools.gallery.models.Medium
|
||||
import it.sephiroth.android.library.exif2.ExifInterface
|
||||
import kotlinx.android.synthetic.main.pager_photo_item.view.*
|
||||
import uk.co.senab.photoview.PhotoViewAttacher
|
||||
import java.io.File
|
||||
import java.io.FileOutputStream
|
||||
import java.io.IOException
|
||||
|
@ -43,7 +47,6 @@ class PhotoFragment : ViewPagerFragment() {
|
|||
lateinit var view: ViewGroup
|
||||
private var isFragmentVisible = false
|
||||
private var wasInit = false
|
||||
private var RATIO_THRESHOLD = 0.1
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
|
||||
view = inflater.inflate(R.layout.pager_photo_item, container, false) as ViewGroup
|
||||
|
@ -89,21 +92,16 @@ class PhotoFragment : ViewPagerFragment() {
|
|||
view.photo_view.apply {
|
||||
maximumScale = 8f
|
||||
mediumScale = 3f
|
||||
setOnPhotoTapListener(object : PhotoViewAttacher.OnPhotoTapListener {
|
||||
override fun onPhotoTap(view: View?, x: Float, y: Float) {
|
||||
photoClicked()
|
||||
}
|
||||
setOnOutsidePhotoTapListener {
|
||||
photoClicked()
|
||||
}
|
||||
|
||||
override fun onOutsidePhotoTap() {
|
||||
photoClicked()
|
||||
}
|
||||
})
|
||||
setOnPhotoTapListener { view, x, y ->
|
||||
photoClicked()
|
||||
}
|
||||
}
|
||||
loadImage()
|
||||
|
||||
activity.window.decorView.setOnSystemUiVisibilityChangeListener { visibility ->
|
||||
listener?.systemUiVisibilityChanged(visibility)
|
||||
}
|
||||
wasInit = true
|
||||
|
||||
return view
|
||||
|
@ -147,12 +145,15 @@ class PhotoFragment : ViewPagerFragment() {
|
|||
|
||||
private fun loadImage() {
|
||||
if (medium.isGif()) {
|
||||
Glide.with(this)
|
||||
.load(medium.path)
|
||||
.asGif()
|
||||
.crossFade()
|
||||
val options = RequestOptions()
|
||||
.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)
|
||||
} else {
|
||||
loadBitmap()
|
||||
|
@ -164,31 +165,37 @@ class PhotoFragment : ViewPagerFragment() {
|
|||
val targetWidth = if (ViewPagerActivity.screenWidth == 0) Target.SIZE_ORIGINAL else ViewPagerActivity.screenWidth
|
||||
val targetHeight = if (ViewPagerActivity.screenHeight == 0) Target.SIZE_ORIGINAL else ViewPagerActivity.screenHeight
|
||||
|
||||
Glide.with(this)
|
||||
.load(medium.path)
|
||||
.asBitmap()
|
||||
.signature(activity.getFileSignature(medium.path))
|
||||
.format(if (medium.isPng()) DecodeFormat.PREFER_ARGB_8888 else DecodeFormat.PREFER_RGB_565)
|
||||
val options = RequestOptions()
|
||||
.signature(medium.path.getFileSignature())
|
||||
.format(DecodeFormat.PREFER_ARGB_8888)
|
||||
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
||||
.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
|
||||
}
|
||||
|
||||
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)
|
||||
addZoomableView()
|
||||
return false
|
||||
}
|
||||
}).into(view.photo_view)
|
||||
} else {
|
||||
Glide.with(this)
|
||||
.load(medium.path)
|
||||
.asBitmap()
|
||||
.transform(GlideRotateTransformation(context, degrees))
|
||||
.thumbnail(0.2f)
|
||||
val options = RequestOptions()
|
||||
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
||||
.transform(GlideRotateTransformation(context, degrees))
|
||||
|
||||
Glide.with(this)
|
||||
.asBitmap()
|
||||
.load(medium.path)
|
||||
.thumbnail(0.2f)
|
||||
.apply(options)
|
||||
.into(view.photo_view)
|
||||
}
|
||||
}
|
||||
|
@ -249,9 +256,9 @@ class PhotoFragment : ViewPagerFragment() {
|
|||
}
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
super.onDestroyView()
|
||||
Glide.clear(view.photo_view)
|
||||
fun refreshBitmap() {
|
||||
view.subsampling_view.beGone()
|
||||
loadBitmap()
|
||||
}
|
||||
|
||||
fun rotateImageViewBy(degrees: Float) {
|
||||
|
@ -259,7 +266,14 @@ class PhotoFragment : ViewPagerFragment() {
|
|||
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)
|
||||
loadImage()
|
||||
}
|
||||
|
@ -267,4 +281,8 @@ class PhotoFragment : ViewPagerFragment() {
|
|||
private fun photoClicked() {
|
||||
listener?.fragmentClicked()
|
||||
}
|
||||
|
||||
override fun fullscreenToggled(isFullscreen: Boolean) {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ import android.net.Uri
|
|||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import android.provider.Settings
|
||||
import android.util.DisplayMetrics
|
||||
import android.util.Log
|
||||
import android.view.*
|
||||
|
@ -17,6 +18,8 @@ import com.simplemobiletools.commons.extensions.getFormattedDuration
|
|||
import com.simplemobiletools.commons.extensions.toast
|
||||
import com.simplemobiletools.commons.extensions.updateTextColors
|
||||
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.getNavBarHeight
|
||||
import com.simplemobiletools.gallery.extensions.hasNavBar
|
||||
|
@ -26,6 +29,8 @@ import kotlinx.android.synthetic.main.pager_video_item.view.*
|
|||
import java.io.IOException
|
||||
|
||||
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 mSurfaceView: SurfaceView? = null
|
||||
|
@ -39,9 +44,21 @@ class VideoFragment : ViewPagerFragment(), SurfaceHolder.Callback, SeekBar.OnSee
|
|||
private var mIsDragged = false
|
||||
private var mIsFullscreen = false
|
||||
private var mIsFragmentVisible = false
|
||||
private var mPlayOnPrepare = false
|
||||
private var mCurrTime = 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 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
|
||||
|
||||
activity.window.decorView.setOnSystemUiVisibilityChangeListener { visibility ->
|
||||
val fullscreen = visibility and View.SYSTEM_UI_FLAG_FULLSCREEN != 0
|
||||
mIsFullscreen = fullscreen
|
||||
checkFullscreen()
|
||||
listener?.systemUiVisibilityChanged(visibility)
|
||||
}
|
||||
checkFullscreen()
|
||||
|
||||
return mView
|
||||
}
|
||||
|
@ -87,6 +98,15 @@ class VideoFragment : ViewPagerFragment(), SurfaceHolder.Callback, SeekBar.OnSee
|
|||
mSurfaceHolder!!.addCallback(this)
|
||||
mSurfaceView!!.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()
|
||||
}
|
||||
|
@ -95,8 +115,9 @@ class VideoFragment : ViewPagerFragment(), SurfaceHolder.Callback, SeekBar.OnSee
|
|||
super.setMenuVisibility(menuVisible)
|
||||
mIsFragmentVisible = menuVisible
|
||||
if (menuVisible) {
|
||||
if (mSurfaceView != null)
|
||||
if (mSurfaceView != null && mSurfaceHolder!!.surface.isValid) {
|
||||
initMediaPlayer()
|
||||
}
|
||||
|
||||
if (context?.config?.autoplayVideos == true) {
|
||||
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)
|
||||
setVideoSize()
|
||||
initTimeHolder()
|
||||
}
|
||||
|
||||
private fun toggleFullscreen() {
|
||||
mIsFullscreen = !mIsFullscreen
|
||||
checkFullscreen()
|
||||
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() {
|
||||
mTimeHolder = mView.video_time_holder
|
||||
val res = resources
|
||||
|
@ -201,9 +339,13 @@ class VideoFragment : ViewPagerFragment(), SurfaceHolder.Callback, SeekBar.OnSee
|
|||
}
|
||||
}
|
||||
|
||||
private fun playVideo() {
|
||||
mIsPlaying = true
|
||||
mMediaPlayer?.start()
|
||||
fun playVideo() {
|
||||
if (mMediaPlayer != null) {
|
||||
mIsPlaying = true
|
||||
mMediaPlayer?.start()
|
||||
} else {
|
||||
mPlayOnPrepare = true
|
||||
}
|
||||
mView.video_play_outline.setImageDrawable(null)
|
||||
activity.window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
||||
}
|
||||
|
@ -278,12 +420,12 @@ class VideoFragment : ViewPagerFragment(), SurfaceHolder.Callback, SeekBar.OnSee
|
|||
setupTimeHolder()
|
||||
setProgress(mCurrTime)
|
||||
|
||||
if (mIsFragmentVisible && context.config.autoplayVideos)
|
||||
if (mIsFragmentVisible && (context.config.autoplayVideos || mPlayOnPrepare))
|
||||
playVideo()
|
||||
}
|
||||
|
||||
private fun videoCompleted() {
|
||||
if (context.config.loopVideos) {
|
||||
if (listener?.videoEnded() == false && context.config.loopVideos) {
|
||||
playVideo()
|
||||
} else {
|
||||
mSeekBar!!.progress = mSeekBar!!.max
|
||||
|
@ -366,9 +508,14 @@ class VideoFragment : ViewPagerFragment(), SurfaceHolder.Callback, SeekBar.OnSee
|
|||
if (!mIsPlaying) {
|
||||
togglePlayPause()
|
||||
} else {
|
||||
mMediaPlayer!!.start()
|
||||
mMediaPlayer?.start()
|
||||
}
|
||||
|
||||
mIsDragged = false
|
||||
}
|
||||
|
||||
override fun fullscreenToggled(isFullscreen: Boolean) {
|
||||
mIsFullscreen = isFullscreen
|
||||
checkFullscreen()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,9 +5,11 @@ import android.support.v4.app.Fragment
|
|||
abstract class ViewPagerFragment : Fragment() {
|
||||
var listener: FragmentListener? = null
|
||||
|
||||
abstract fun fullscreenToggled(isFullscreen: Boolean)
|
||||
|
||||
interface FragmentListener {
|
||||
fun fragmentClicked()
|
||||
|
||||
fun systemUiVisibilityChanged(visibility: Int)
|
||||
fun videoEnded(): Boolean
|
||||
}
|
||||
}
|
||||
|
|
|
@ -224,4 +224,36 @@ class Config(context: Context) : BaseConfig(context) {
|
|||
var scrollHorizontally: Boolean
|
||||
get() = prefs.getBoolean(SCROLL_HORIZONTALLY, false)
|
||||
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 ALBUM_COVERS = "album_covers"
|
||||
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"
|
||||
|
||||
|
|
|
@ -5,9 +5,9 @@ import android.graphics.Bitmap
|
|||
import android.graphics.Matrix
|
||||
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool
|
||||
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation
|
||||
import java.security.MessageDigest
|
||||
|
||||
class GlideRotateTransformation(context: Context, val rotateRotationAngle: Float) : BitmapTransformation(context) {
|
||||
|
||||
override fun transform(pool: BitmapPool, bitmap: Bitmap, outWidth: Int, outHeight: Int): Bitmap {
|
||||
if (rotateRotationAngle % 360 == 0f)
|
||||
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)
|
||||
}
|
||||
|
||||
override fun getId() = "GlideRotateTransformation $rotateRotationAngle"
|
||||
override fun updateDiskCacheKey(messageDigest: MessageDigest?) {
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,9 +1,6 @@
|
|||
package com.simplemobiletools.gallery.models
|
||||
|
||||
import com.simplemobiletools.commons.helpers.SORT_BY_DATE_MODIFIED
|
||||
import com.simplemobiletools.commons.helpers.SORT_BY_NAME
|
||||
import com.simplemobiletools.commons.helpers.SORT_BY_SIZE
|
||||
import com.simplemobiletools.commons.helpers.SORT_DESCENDING
|
||||
import com.simplemobiletools.commons.helpers.*
|
||||
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,
|
||||
|
@ -20,7 +17,7 @@ data class Directory(val path: String, val tmb: String, val name: String, var me
|
|||
override fun compareTo(other: Directory): Int {
|
||||
var result: Int
|
||||
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) {
|
||||
result = if (size == other.size)
|
||||
0
|
||||
|
|
|
@ -3,10 +3,7 @@ package com.simplemobiletools.gallery.models
|
|||
import com.simplemobiletools.commons.extensions.getMimeType
|
||||
import com.simplemobiletools.commons.extensions.isGif
|
||||
import com.simplemobiletools.commons.extensions.isPng
|
||||
import com.simplemobiletools.commons.helpers.SORT_BY_DATE_MODIFIED
|
||||
import com.simplemobiletools.commons.helpers.SORT_BY_NAME
|
||||
import com.simplemobiletools.commons.helpers.SORT_BY_SIZE
|
||||
import com.simplemobiletools.commons.helpers.SORT_DESCENDING
|
||||
import com.simplemobiletools.commons.helpers.*
|
||||
import java.io.File
|
||||
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 isJpg() = path.endsWith(".jpg", true) || path.endsWith(".jpeg", true)
|
||||
|
||||
fun isImage() = !isGif() && !video
|
||||
|
||||
fun getMimeType() = File(path).getMimeType()
|
||||
|
||||
override fun compareTo(other: Medium): Int {
|
||||
var res: Int
|
||||
var result: Int
|
||||
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) {
|
||||
res = if (size == other.size)
|
||||
result = if (size == other.size)
|
||||
0
|
||||
else if (size > other.size)
|
||||
1
|
||||
else
|
||||
-1
|
||||
} else if (sorting and SORT_BY_DATE_MODIFIED != 0) {
|
||||
res = if (modified == other.modified)
|
||||
result = if (modified == other.modified)
|
||||
0
|
||||
else if (modified > other.modified)
|
||||
1
|
||||
else
|
||||
-1
|
||||
} else {
|
||||
res = if (taken == other.taken)
|
||||
result = if (taken == other.taken)
|
||||
0
|
||||
else if (taken > other.taken)
|
||||
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) {
|
||||
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_height="wrap_content">
|
||||
|
||||
<com.simplemobiletools.gallery.views.MyScalableRecyclerView
|
||||
<com.simplemobiletools.commons.views.MyScalableRecyclerView
|
||||
android:id="@+id/directories_grid"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
@ -20,13 +20,41 @@
|
|||
app:spanCount="@integer/directory_columns_vertical_scroll"/>
|
||||
|
||||
<com.simplemobiletools.commons.views.FastScroller
|
||||
android:id="@+id/directories_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"/>
|
||||
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>
|
||||
</android.support.v4.widget.SwipeRefreshLayout>
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.simplemobiletools.gallery.views.MyScalableRecyclerView
|
||||
<com.simplemobiletools.commons.views.MyScalableRecyclerView
|
||||
android:id="@+id/media_grid"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
@ -20,13 +20,41 @@
|
|||
app:spanCount="@integer/media_columns_vertical_scroll"/>
|
||||
|
||||
<com.simplemobiletools.commons.views.FastScroller
|
||||
android:id="@+id/media_fastscroller"
|
||||
android:id="@+id/media_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"/>
|
||||
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>
|
||||
</android.support.v4.widget.SwipeRefreshLayout>
|
||||
|
|
|
@ -214,8 +214,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/medium_margin"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:padding="@dimen/activity_margin"
|
||||
android:visibility="gone">
|
||||
android:padding="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MySwitchCompat
|
||||
android:id="@+id/settings_scroll_horizontally"
|
||||
|
@ -229,6 +228,66 @@
|
|||
|
||||
</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
|
||||
android:id="@+id/settings_screen_rotation_holder"
|
||||
android:layout_width="match_parent"
|
||||
|
|
|
@ -1,10 +1,55 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<android.support.v7.widget.RecyclerView
|
||||
<RelativeLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/directories_grid"
|
||||
android:id="@+id/directories_grid_holder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="@dimen/activity_margin"
|
||||
app:layoutManager="android.support.v7.widget.GridLayoutManager"
|
||||
app:spanCount="@integer/directory_columns_vertical_scroll"/>
|
||||
android:paddingTop="@dimen/activity_margin">
|
||||
|
||||
<com.simplemobiletools.commons.views.MyScalableRecyclerView
|
||||
android:id="@+id/directories_grid"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:scrollbars="none"
|
||||
app:layoutManager="android.support.v7.widget.GridLayoutManager"
|
||||
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: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
|
||||
android:id="@+id/dir_pin"
|
||||
android:layout_width="@dimen/pin_size"
|
||||
android:layout_height="@dimen/pin_size"
|
||||
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:background="@drawable/circle_black_background"
|
||||
android:padding="@dimen/small_margin"
|
||||
android:src="@drawable/ic_pin"/>
|
||||
|
||||
<ImageView
|
||||
|
@ -29,7 +46,9 @@
|
|||
android:id="@+id/dir_bottom_holder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignLeft="@+id/dir_thumbnail"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_alignRight="@+id/dir_thumbnail"
|
||||
android:gravity="bottom"
|
||||
android:orientation="vertical"
|
||||
android:paddingBottom="@dimen/small_margin"
|
||||
|
@ -55,4 +74,19 @@
|
|||
android:textSize="@dimen/normal_text_size"/>
|
||||
|
||||
</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>
|
||||
|
|
|
@ -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_height="match_parent">
|
||||
|
||||
<uk.co.senab.photoview.PhotoView
|
||||
<com.github.chrisbanes.photoview.PhotoView
|
||||
android:id="@+id/photo_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
|
|
|
@ -12,6 +12,18 @@
|
|||
android:layout_centerInParent="true"
|
||||
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
|
||||
android:id="@+id/video_play_outline"
|
||||
android:layout_width="@dimen/play_outline_size_big"
|
||||
|
@ -21,6 +33,23 @@
|
|||
android:padding="@dimen/activity_margin"
|
||||
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
|
||||
android:id="@+id/video_time_holder"
|
||||
android:layout_width="wrap_content"
|
||||
|
|
|
@ -6,16 +6,31 @@
|
|||
android:layout_height="wrap_content"
|
||||
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
|
||||
android:id="@+id/play_outline"
|
||||
android:layout_width="@dimen/play_outline_size"
|
||||
android:layout_height="@dimen/play_outline_size"
|
||||
android:id="@+id/medium_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/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:visibility="gone"/>
|
||||
|
||||
|
@ -23,11 +38,12 @@
|
|||
android:id="@+id/photo_name"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignLeft="@+id/medium_thumbnail"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_alignRight="@+id/medium_thumbnail"
|
||||
android:background="@drawable/gradient_background"
|
||||
android:gravity="bottom"
|
||||
android:maxLines="3"
|
||||
android:minHeight="@dimen/play_outline_size"
|
||||
android:paddingBottom="@dimen/small_margin"
|
||||
android:paddingLeft="@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"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<item
|
||||
android:id="@+id/cab_properties"
|
||||
android:icon="@drawable/ic_info"
|
||||
android:title="@string/properties"
|
||||
android:id="@+id/cab_delete"
|
||||
android:icon="@drawable/ic_delete"
|
||||
android:title="@string/delete"
|
||||
app:showAsAction="ifRoom"/>
|
||||
<item
|
||||
android:id="@+id/cab_pin"
|
||||
|
@ -16,6 +16,11 @@
|
|||
android:icon="@drawable/ic_unpin"
|
||||
android:title="@string/unpin_folder"
|
||||
app:showAsAction="ifRoom"/>
|
||||
<item
|
||||
android:id="@+id/cab_properties"
|
||||
android:icon="@drawable/ic_info"
|
||||
android:title="@string/properties"
|
||||
app:showAsAction="ifRoom"/>
|
||||
<item
|
||||
android:id="@+id/cab_rename"
|
||||
android:icon="@drawable/ic_rename"
|
||||
|
@ -61,9 +66,4 @@
|
|||
android:title="@string/use_default"/>
|
||||
</menu>
|
||||
</item>
|
||||
<item
|
||||
android:id="@+id/cab_delete"
|
||||
android:icon="@drawable/ic_delete"
|
||||
android:title="@string/delete"
|
||||
app:showAsAction="ifRoom"/>
|
||||
</menu>
|
||||
|
|
|
@ -19,6 +19,10 @@
|
|||
android:id="@+id/temporarily_show_hidden"
|
||||
android:title="@string/temporarily_show_hidden"
|
||||
app:showAsAction="never"/>
|
||||
<item
|
||||
android:id="@+id/stop_showing_hidden"
|
||||
android:title="@string/stop_showing_hidden"
|
||||
app:showAsAction="never"/>
|
||||
<item
|
||||
android:id="@+id/increase_column_count"
|
||||
android:title="@string/increase_column_count"
|
||||
|
|
|
@ -5,4 +5,8 @@
|
|||
android:id="@+id/temporarily_show_hidden"
|
||||
android:title="@string/temporarily_show_hidden"
|
||||
app:showAsAction="never"/>
|
||||
<item
|
||||
android:id="@+id/stop_showing_hidden"
|
||||
android:title="@string/stop_showing_hidden"
|
||||
app:showAsAction="never"/>
|
||||
</menu>
|
||||
|
|
|
@ -36,6 +36,10 @@
|
|||
android:id="@+id/temporarily_show_hidden"
|
||||
android:title="@string/temporarily_show_hidden"
|
||||
app:showAsAction="never"/>
|
||||
<item
|
||||
android:id="@+id/stop_showing_hidden"
|
||||
android:title="@string/stop_showing_hidden"
|
||||
app:showAsAction="never"/>
|
||||
<item
|
||||
android:id="@+id/increase_column_count"
|
||||
android:title="@string/increase_column_count"
|
||||
|
|
|
@ -1,23 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
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
|
||||
android:id="@+id/menu_save_as"
|
||||
android:icon="@drawable/ic_check"
|
||||
|
@ -30,10 +13,25 @@
|
|||
android:title="@string/delete"
|
||||
app:showAsAction="ifRoom"/>
|
||||
<item
|
||||
android:id="@+id/menu_share"
|
||||
android:id="@+id/menu_share_1"
|
||||
android:icon="@drawable/ic_share"
|
||||
android:title="@string/share"
|
||||
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
|
||||
android:id="@+id/menu_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="increase_column_count">Zvýš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="select_photo">Select photo</string>
|
||||
<string name="use_default">Use default</string>
|
||||
<string name="set_as">Nastavit jako</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Brightness</string>
|
||||
|
||||
<!-- 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>
|
||||
|
@ -67,7 +68,6 @@
|
|||
<string name="flip">Překlopit</string>
|
||||
<string name="flip_horizontally">Překlopit vodorovně</string>
|
||||
<string name="flip_vertically">Překlopit svisle</string>
|
||||
<string name="out_of_memory_error">Zařízení nemá dostatek paměti</string>
|
||||
<string name="edit_with">Edit with</string>
|
||||
|
||||
<!-- Set wallpaper -->
|
||||
|
@ -81,6 +81,17 @@
|
|||
<string name="portrait_aspect_ratio">Portrait 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 -->
|
||||
<string name="show_hidden_media">Zobrazit skryté média</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="dark_background_at_fullscreen">Dark background at fullscreen media</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 -->
|
||||
<!-- 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="increase_column_count">Kacheln verkleinern</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">Change cover image</string>
|
||||
<string name="select_photo">Bild auswählen</string>
|
||||
<string name="use_default">Standard verwenden</string>
|
||||
<string name="change_cover_image">Cover-Bild ändern</string>
|
||||
<string name="select_photo">Auswählen</string>
|
||||
<string name="use_default">Standard</string>
|
||||
<string name="set_as">Festlegen als</string>
|
||||
<string name="volume">Lautstärke</string>
|
||||
<string name="brightness">Helligkeit</string>
|
||||
|
||||
<!-- 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>
|
||||
|
@ -57,7 +58,7 @@
|
|||
<string name="path">Pfad</string>
|
||||
<string name="invalid_image_path">Ungültiger Dateipfad</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="unknown_file_location">Unbekannter Dateiort</string>
|
||||
<string name="error_saving_file">Konnte Quelldatei nicht überschreiben</string>
|
||||
|
@ -67,20 +68,30 @@
|
|||
<string name="flip">Spiegeln</string>
|
||||
<string name="flip_horizontally">Horizontal spiegeln</string>
|
||||
<string name="flip_vertically">Vertikal spiegeln</string>
|
||||
<string name="out_of_memory_error">Fehler: Zuwenig Speicher</string>
|
||||
<string name="edit_with">Edit with</string>
|
||||
<string name="edit_with">Bearbeiten mit</string>
|
||||
|
||||
<!-- Set wallpaper -->
|
||||
<string name="simple_wallpaper">Schlichter Hintergrund</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_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="setting_wallpaper">Hintergrund festlegen…</string>
|
||||
<string name="wallpaper_set_successfully">Hintergrundbild erfolgreich festgelegt</string>
|
||||
<string name="portrait_aspect_ratio">Hochformat</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 -->
|
||||
<string name="show_hidden_media">Versteckte Ordner zeigen</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_and_videos">Bilder und Videos</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="crop_thumbnails">Kacheln quadratisch zuschneiden</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="dark_background_at_fullscreen">Schwarzer Hintergrund im Vollbild</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 -->
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<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="open_camera">Abrir cámara</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="increase_column_count">Aumentar 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">Change cover image</string>
|
||||
<string name="select_photo">Select photo</string>
|
||||
<string name="use_default">Use default</string>
|
||||
<string name="set_as">Set as</string>
|
||||
<string name="change_cover_image">Cambiar imagen de portada</string>
|
||||
<string name="select_photo">Seleccionar imagen</string>
|
||||
<string name="use_default">Uso por defecto</string>
|
||||
<string name="set_as">Establecer como</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Brightness</string>
|
||||
|
||||
<!-- 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>
|
||||
|
@ -32,7 +33,7 @@
|
|||
<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_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_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_horizontally">Horizontalmente</string>
|
||||
<string name="flip_vertically">Verticalmente</string>
|
||||
<string name="out_of_memory_error">Error: sin memoria</string>
|
||||
<string name="edit_with">Edit with</string>
|
||||
<string name="edit_with">Editar con</string>
|
||||
|
||||
<!-- Set wallpaper -->
|
||||
<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="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 -->
|
||||
<string name="show_hidden_media">Mostrar carpetas ocultas</string>
|
||||
<string name="autoplay_videos">Reproducir vídeos automáticamente</string>
|
||||
|
@ -88,8 +99,8 @@
|
|||
<string name="show_media">Mostrar multimedia</string>
|
||||
<string name="images">Solo imágenes</string>
|
||||
<string name="videos">Solo vídeos</string>
|
||||
<string name="gifs">GIFs only</string>
|
||||
<string name="images_videos_gifs">Images, videos, GIFs</string>
|
||||
<string name="gifs">solo 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="loop_videos">Reproducción continua de vídeos</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_aspect_ratio">Relación de aspecto</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 -->
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<string name="app_name">Simple Galerie</string>
|
||||
<string name="app_launcher_name">Galerie</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="no_app_found">Aucune application valide trouvée</string>
|
||||
<string name="hidden">(caché)</string>
|
||||
|
@ -16,14 +16,15 @@
|
|||
<string name="show_on_map">Afficher sur la carte</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_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="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="select_photo">Select photo</string>
|
||||
<string name="select_photo">Sélectionner une photo</string>
|
||||
<string name="use_default">Use default</string>
|
||||
<string name="set_as">Set as</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Luminosité</string>
|
||||
|
||||
<!-- 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>
|
||||
|
@ -66,9 +67,8 @@
|
|||
<string name="rotate_one_eighty">Pivoter à 180º</string>
|
||||
<string name="flip">Retourner</string>
|
||||
<string name="flip_horizontally">Retourner horizontalement</string>
|
||||
<string name="flip_vertically">Retourner verticallement</string>
|
||||
<string name="out_of_memory_error">Erreur excès de mémoire</string>
|
||||
<string name="edit_with">Edit with</string>
|
||||
<string name="flip_vertically">Retourner verticalement</string>
|
||||
<string name="edit_with">Éditer avec</string>
|
||||
|
||||
<!-- Set wallpaper -->
|
||||
<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_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="setting_wallpaper">Paramètre de fond d\'écran…</string>
|
||||
<string name="wallpaper_set_successfully">Fond d\'écran défini avec succès.</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="portrait_aspect_ratio">Ratio aspect Portrait</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 -->
|
||||
<string name="show_hidden_media">Afficher les dossiers cachés</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="images">Seulement les images</string>
|
||||
<string name="videos">Vidéos uniquement</string>
|
||||
<string name="gifs">GIFs only</string>
|
||||
<string name="images_videos_gifs">Images, videos, GIFs</string>
|
||||
<string name="gifs">GIFs seulement</string>
|
||||
<string name="images_videos_gifs">Images, vidéos, GIFs</string>
|
||||
<string name="images_and_videos">Images et 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="max_brightness">Luminosité maximale lors de l\'affichage de media</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_device_rotation">Rotation de l\'appareil</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="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 -->
|
||||
<!-- 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_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>
|
||||
<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>
|
||||
|
||||
<!--
|
||||
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="increase_column_count">Increase 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="select_photo">Select photo</string>
|
||||
<string name="use_default">Use default</string>
|
||||
<string name="set_as">Set as</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Brightness</string>
|
||||
|
||||
<!-- 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>
|
||||
|
@ -67,7 +68,6 @@
|
|||
<string name="flip">Flip</string>
|
||||
<string name="flip_horizontally">Flip horizontally</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>
|
||||
|
||||
<!-- Set wallpaper -->
|
||||
|
@ -81,6 +81,17 @@
|
|||
<string name="portrait_aspect_ratio">Portrait 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 -->
|
||||
<string name="show_hidden_media">Show hidden media</string>
|
||||
<string name="autoplay_videos">Play videos automatically</string>
|
||||
|
@ -101,6 +112,8 @@
|
|||
<string name="screen_rotation_aspect_ratio">Aspect ratio</string>
|
||||
<string name="dark_background_at_fullscreen">Dark background at fullscreen media</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 -->
|
||||
<!-- 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="increase_column_count">Aumenta 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">Change cover image</string>
|
||||
<string name="select_photo">Select photo</string>
|
||||
<string name="use_default">Use default</string>
|
||||
<string name="set_as">Set as</string>
|
||||
<string name="change_cover_image">Cambia immagine copertina</string>
|
||||
<string name="select_photo">Seleziona foto</string>
|
||||
<string name="use_default">Usa predefinita</string>
|
||||
<string name="set_as">Imposta come</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Luminosità</string>
|
||||
|
||||
<!-- 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>
|
||||
|
@ -67,8 +68,7 @@
|
|||
<string name="flip">Capovolgi</string>
|
||||
<string name="flip_horizontally">Capovolgi orizzontalmente</string>
|
||||
<string name="flip_vertically">Capovolgi verticalmente</string>
|
||||
<string name="out_of_memory_error">Errore memoria esaurita</string>
|
||||
<string name="edit_with">Edit with</string>
|
||||
<string name="edit_with">Modifica con</string>
|
||||
|
||||
<!-- Set wallpaper -->
|
||||
<string name="simple_wallpaper">Sfondo semplice</string>
|
||||
|
@ -81,6 +81,17 @@
|
|||
<string name="portrait_aspect_ratio">Proporzioni ritratto</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 -->
|
||||
<string name="show_hidden_media">Mostra cartelle nascoste</string>
|
||||
<string name="autoplay_videos">Riproduci video automaticamente</string>
|
||||
|
@ -88,8 +99,8 @@
|
|||
<string name="show_media">Mostra tipo di media</string>
|
||||
<string name="images">Solo immagini</string>
|
||||
<string name="videos">Solo video</string>
|
||||
<string name="gifs">GIFs only</string>
|
||||
<string name="images_videos_gifs">Images, videos, GIFs</string>
|
||||
<string name="gifs">Solo GIF</string>
|
||||
<string name="images_videos_gifs">Immagini, video, GIF</string>
|
||||
<string name="images_and_videos">Immagini e video</string>
|
||||
<string name="loop_videos">Ripeti i video</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_aspect_ratio">Proporzioni</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 -->
|
||||
<!-- 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="increase_column_count">Increase 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="select_photo">Select photo</string>
|
||||
<string name="use_default">Use default</string>
|
||||
<string name="set_as">Set as</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Brightness</string>
|
||||
|
||||
<!-- 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>
|
||||
|
@ -67,7 +68,6 @@
|
|||
<string name="flip">Flip</string>
|
||||
<string name="flip_horizontally">Flip horizontally</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>
|
||||
|
||||
<!-- Set wallpaper -->
|
||||
|
@ -81,6 +81,17 @@
|
|||
<string name="portrait_aspect_ratio">Portrait 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 -->
|
||||
<string name="show_hidden_media">非表示フォルダーを表示</string>
|
||||
<string name="autoplay_videos">自動的にビデオを再生</string>
|
||||
|
@ -101,6 +112,8 @@
|
|||
<string name="screen_rotation_aspect_ratio">Aspect ratio</string>
|
||||
<string name="dark_background_at_fullscreen">Dark background at fullscreen media</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 -->
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<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="open_camera">Aparat</string>
|
||||
<string name="open_camera">Uruchom aplikację aparatu</string>
|
||||
<string name="open_with">Otwórz w</string>
|
||||
<string name="no_app_found">Nie znaleziono danych aplikacji</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="show_all">Pokaż wszystko</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="increase_column_count">Zwiększ 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">Change cover image</string>
|
||||
<string name="select_photo">Select photo</string>
|
||||
<string name="use_default">Use default</string>
|
||||
<string name="set_as">Set as</string>
|
||||
<string name="change_cover_image">Zmień okładkę</string>
|
||||
<string name="select_photo">Wybierz obraz</string>
|
||||
<string name="use_default">Użyj domyślnej</string>
|
||||
<string name="set_as">Ustaw jako</string>
|
||||
<string name="volume">Głośność</string>
|
||||
<string name="brightness">Jasność</string>
|
||||
|
||||
<!-- 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="excluded_folders">Wyklucz foldery</string>
|
||||
<string name="excluded_folders">Wykluczone foldery</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_parent">Wykluczyć folder nadżę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="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 nadrzędny?</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_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 -->
|
||||
<string name="include_folders">Included folders</string>
|
||||
<string name="manage_included_folders">Manage included folders</string>
|
||||
<string name="add_folder">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="include_folders">Dołączone foldery</string>
|
||||
<string name="manage_included_folders">Zarządzaj dołączonymi folderami</string>
|
||||
<string name="add_folder">Dodaj folder</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 -->
|
||||
<string name="resize">Zmień rozmiar</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="keep_aspect_ratio">Zachowaj proporcje</string>
|
||||
<string name="invalid_values">Wpisz poprawną rozdzielczość</string>
|
||||
|
||||
<!-- Editor -->
|
||||
<string name="editor">Edycja</string>
|
||||
<string name="save">zapisz</string>
|
||||
<string name="save">Zapisz</string>
|
||||
<string name="rotate">Obróć</string>
|
||||
<string name="path">Ś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="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="error_saving_file">Nie udało się zastąpić pliku</string>
|
||||
<string name="rotate_left">Obróć w lewo</string>
|
||||
<string name="rotate_right">Obróć w prawo</string>
|
||||
<string name="rotate_one_eighty">Obróć o 180o</string>
|
||||
<string name="flip">Flip</string>
|
||||
<string name="flip_horizontally">Flip poziomo</string>
|
||||
<string name="flip_vertically">Flip pionowo</string>
|
||||
<string name="out_of_memory_error">Błąd pamięci</string>
|
||||
<string name="edit_with">Edit with</string>
|
||||
<string name="rotate_one_eighty">Obróć o 180 stopni</string>
|
||||
<string name="flip">Przewróć</string>
|
||||
<string name="flip_horizontally">Przewróć w poziomie</string>
|
||||
<string name="flip_vertically">Przewróć w pionie</string>
|
||||
<string name="edit_with">Edytuj w:</string>
|
||||
|
||||
<!-- Set wallpaper -->
|
||||
<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_with">Ustaw jako tapetę w:</string>
|
||||
<string name="no_capable_app_found">Brak odpowiednich ustawień</string>
|
||||
<string name="setting_wallpaper">Ustawianie tapety…</string>
|
||||
<string name="wallpaper_set_successfully">Tapeta ustawiona</string>
|
||||
<string name="portrait_aspect_ratio">Portrait aspect ratio</string>
|
||||
<string name="landscape_aspect_ratio">Landscape aspect ratio</string>
|
||||
<string name="setting_wallpaper">Ustawiam tapetę…</string>
|
||||
<string name="wallpaper_set_successfully">Tapeta została ustawiona</string>
|
||||
<string name="portrait_aspect_ratio">Proporcje ekranu w trybie pionowym</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 -->
|
||||
<string name="show_hidden_media">Pokaż ukryte foldery</string>
|
||||
<string name="autoplay_videos">Odtwarzaj pliki wideo automatycznie</string>
|
||||
<string name="toggle_filename">Włącz widoczność nazwy pliku</string>
|
||||
<string name="show_media">Wybierz co pokazywać</string>
|
||||
<string name="images">Tylko Zdjęcia</string>
|
||||
<string name="videos">Tylko Filmy</string>
|
||||
<string name="gifs">GIFs only</string>
|
||||
<string name="images_videos_gifs">Images, videos, GIFs</string>
|
||||
<string name="images_and_videos">Obrazy i wideo</string>
|
||||
<string name="loop_videos">Pętla wideo</string>
|
||||
<string name="animate_gifs">Animowanie GIFy z miniaturkami</string>
|
||||
<string name="max_brightness">Max brightness when viewing media</string>
|
||||
<string name="crop_thumbnails">Crop thumbnails into squares</string>
|
||||
<string name="screen_rotation_by">Rotate fullscreen media by</string>
|
||||
<string name="screen_rotation_system_setting">System setting</string>
|
||||
<string name="screen_rotation_device_rotation">Device rotation</string>
|
||||
<string name="screen_rotation_aspect_ratio">Aspect ratio</string>
|
||||
<string name="dark_background_at_fullscreen">Dark background at fullscreen media</string>
|
||||
<string name="scroll_thumbnails_horizontally">Scroll thumbnails horizontally</string>
|
||||
<string name="show_hidden_media">Pokazuj ukryte foldery</string>
|
||||
<string name="autoplay_videos">Odtwarzaj filmy automatycznie</string>
|
||||
<string name="toggle_filename">Pokazuj / ukrywaj nazwy plików</string>
|
||||
<string name="show_media">Pokazywane typy multimediów</string>
|
||||
<string name="images">Tylko obrazy</string>
|
||||
<string name="videos">Tylko filmy</string>
|
||||
<string name="gifs">Tylko GIFy</string>
|
||||
<string name="images_videos_gifs">Obrazy, filmy i GIFy</string>
|
||||
<string name="images_and_videos">Obrazy i filmy</string>
|
||||
<string name="loop_videos">Zapętlaj odtwarzanie filmów</string>
|
||||
<string name="animate_gifs">Animowane miniatury GIFów</string>
|
||||
<string name="max_brightness">Maksymalna jasność podczas wyświetlania multimediów</string>
|
||||
<string name="crop_thumbnails">Przycinaj miniatury do kwadratów</string>
|
||||
<string name="screen_rotation_by">Obracaj pełnoekranowe multimedia według</string>
|
||||
<string name="screen_rotation_system_setting">Ustawień systemowych</string>
|
||||
<string name="screen_rotation_device_rotation">Orientacji urządzenia</string>
|
||||
<string name="screen_rotation_aspect_ratio">Proporcji</string>
|
||||
<string name="dark_background_at_fullscreen">Czarne tło przy podglądzie pełnoekranowym</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 -->
|
||||
<!-- 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">
|
||||
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.
|
||||
|
||||
Nie zawiera żadnych reklam ani niepotrzebnych uprawnień. Jest w pełni opensource.
|
||||
|
||||
Ta aplikacja jest tylko jedą z większego szeregu naszych aplikacji. Można znaleźć resztę z nich w http://www.simplemobiletools.com
|
||||
Aplikacja nie zawiera żadnych reklam ani niepotrzebnych uprawnień. Jest też w pełni otawrtoźrodłowa.
|
||||
|
||||
Niniejsza aplikacja jest tylko częścią naszego zestawu prostych aplikacji. Znajdziecie je na stronie http://www.simplemobiletools.com.
|
||||
</string>
|
||||
|
||||
<!--
|
||||
Haven't found some strings? There's more at
|
||||
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
|
||||
Polish translation : Dariusz Dróżdż - www.onlan.pl
|
||||
-->
|
||||
</resources>
|
||||
|
|
|
@ -6,7 +6,8 @@
|
|||
<string name="open_camera">Abrir câmera</string>
|
||||
<string name="open_with">Abrir com</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="unpin_folder">Desfixar pasta</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="increase_column_count">Aumentar 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="select_photo">Selecionar foto</string>
|
||||
<string name="use_default">Usar padrão</string>
|
||||
<string name="set_as">Set as</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Brightness</string>
|
||||
|
||||
<!-- 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>
|
||||
|
@ -67,7 +69,6 @@
|
|||
<string name="flip">Inverter</string>
|
||||
<string name="flip_horizontally">Horizontalmente</string>
|
||||
<string name="flip_vertically">Verticalmente</string>
|
||||
<string name="out_of_memory_error">Memória insuficiente</string>
|
||||
<string name="edit_with">Edit with</string>
|
||||
|
||||
<!-- Set wallpaper -->
|
||||
|
@ -78,8 +79,19 @@
|
|||
<string name="no_capable_app_found">Aplicativo não encontrado</string>
|
||||
<string name="setting_wallpaper">Definindo como papel de parede;</string>
|
||||
<string name="wallpaper_set_successfully">Papel de parede com sucesso</string>
|
||||
<string name="portrait_aspect_ratio">Retrato</string>
|
||||
<string name="landscape_aspect_ratio">Paisagem</string>
|
||||
<string name="portrait_aspect_ratio">Retrato</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 -->
|
||||
<string name="show_hidden_media">Mostrar pastas ocultas</string>
|
||||
|
@ -93,7 +105,7 @@
|
|||
<string name="images_and_videos">Imagens e vídeos</string>
|
||||
<string name="loop_videos">Reproduzir vídeos em ciclo</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="screen_rotation_by">Critério para rotação de tela</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="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="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 -->
|
||||
<!-- 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="increase_column_count">Aumentar 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="select_photo">Selecionar foto</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 -->
|
||||
<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_horizontally">Horizontalmente</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">Editar com</string>
|
||||
|
||||
<!-- Set wallpaper -->
|
||||
<string name="simple_wallpaper">Simple Wallpaper</string>
|
||||
|
@ -81,6 +81,17 @@
|
|||
<string name="portrait_aspect_ratio">Proporção na vertical</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 -->
|
||||
<string name="show_hidden_media">Mostrar pastas ocultas</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="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="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 -->
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
|
|
|
@ -19,11 +19,12 @@
|
|||
<string name="no_camera_app_found">Не найдено приложения камеры</string>
|
||||
<string name="increase_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="select_photo">Select photo</string>
|
||||
<string name="use_default">Use default</string>
|
||||
<string name="set_as">Set as</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Brightness</string>
|
||||
|
||||
<!-- Hide / Exclude -->
|
||||
<string name="hide_folder_description">Эта опция скрывает папку, добавляя в неё файл \'.nomedia\'; будут скрыты все подпапки. Можно показывать их, переключая \'Показать скрытые папки\' в настройках. Продолжить?</string>
|
||||
|
@ -67,7 +68,6 @@
|
|||
<string name="flip">Отразить</string>
|
||||
<string name="flip_horizontally">По горизонтали</string>
|
||||
<string name="flip_vertically">По вертикали</string>
|
||||
<string name="out_of_memory_error">Память переполнена</string>
|
||||
<string name="edit_with">Edit with</string>
|
||||
|
||||
<!-- Set wallpaper -->
|
||||
|
@ -81,6 +81,17 @@
|
|||
<string name="portrait_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 -->
|
||||
<string name="show_hidden_media">Показать скрытые папки</string>
|
||||
<string name="autoplay_videos">Воспроизводить видео автоматически</string>
|
||||
|
@ -101,6 +112,8 @@
|
|||
<string name="screen_rotation_aspect_ratio">Соотношение сторон</string>
|
||||
<string name="dark_background_at_fullscreen">Dark background at fullscreen media</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 -->
|
||||
<!-- 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="increase_column_count">Zvýš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="select_photo">Zvoliť foto</string>
|
||||
<string name="use_default">Použiť predvolený</string>
|
||||
<string name="set_as">Nastaviť ako</string>
|
||||
<string name="volume">Hlasitosť</string>
|
||||
<string name="brightness">Jas</string>
|
||||
|
||||
<!-- 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>
|
||||
|
@ -67,7 +68,6 @@
|
|||
<string name="flip">Preklopiť</string>
|
||||
<string name="flip_horizontally">Preklopiť vodorovne</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>
|
||||
|
||||
<!-- Set wallpaper -->
|
||||
|
@ -81,6 +81,17 @@
|
|||
<string name="portrait_aspect_ratio">Orientácia nastojato</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 -->
|
||||
<string name="show_hidden_media">Zobraziť skryté médiá</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="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="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 -->
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<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="open_camera">Starta kameran</string>
|
||||
<string name="open_with">Öppna med</string>
|
||||
|
@ -13,34 +13,35 @@
|
|||
<string name="all_folders">Alla mappar</string>
|
||||
<string name="folder_view">Byt till mappvy</string>
|
||||
<string name="other_folder">Andra mappar</string>
|
||||
<string name="show_on_map">Show on map</string>
|
||||
<string name="unknown_location">Unknown location</string>
|
||||
<string name="no_map_application">No application with maps 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="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="select_photo">Select photo</string>
|
||||
<string name="use_default">Use default</string>
|
||||
<string name="set_as">Set as</string>
|
||||
<string name="show_on_map">Visa på karta</string>
|
||||
<string name="unknown_location">Okänd plats</string>
|
||||
<string name="no_map_application">Ingen app med kartor hittades</string>
|
||||
<string name="no_camera_app_found">Ingen Kamera-app hittades</string>
|
||||
<string name="increase_column_count">Öka antalet kolumner</string>
|
||||
<string name="reduce_column_count">Minska antalet kolumner</string>
|
||||
<string name="change_cover_image">Byt omslagsbild</string>
|
||||
<string name="select_photo">Välj foto</string>
|
||||
<string name="use_default">Använd standard</string>
|
||||
<string name="set_as">Ange som</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Brightness</string>
|
||||
|
||||
<!-- 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="exclude">Exclude</string>
|
||||
<string name="excluded_folders">Excluded folders</string>
|
||||
<string name="manage_excluded_folders">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_parent">Exclude a parent instead?</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="remove_all">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="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">Uteslut</string>
|
||||
<string name="excluded_folders">Uteslutna mappar</string>
|
||||
<string name="manage_excluded_folders">Hantera uteslutna mappar</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">Vill du utesluta en överordnad mapp istället?</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">Ta bort alla</string>
|
||||
<string name="remove_all_description">Vill du ta bort alla mappar från uteslutningslistan? Detta raderar inte mapparna.</string>
|
||||
|
||||
<!-- Include folders -->
|
||||
<string name="include_folders">Included folders</string>
|
||||
<string name="manage_included_folders">Manage included folders</string>
|
||||
<string name="add_folder">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="include_folders">Inkluderade mappar</string>
|
||||
<string name="manage_included_folders">Hantera inkluderade mappar</string>
|
||||
<string name="add_folder">Lägg till mapp</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 -->
|
||||
<string name="resize">Ändra storlek</string>
|
||||
|
@ -56,19 +57,18 @@
|
|||
<string name="rotate">Rotera</string>
|
||||
<string name="path">Sö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="no_editor_found">Hittade ingen bildredigerare</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="rotate_left">Rotate left</string>
|
||||
<string name="rotate_right">Rotate right</string>
|
||||
<string name="rotate_one_eighty">Rotate by 180º</string>
|
||||
<string name="flip">Flip</string>
|
||||
<string name="flip_horizontally">Flip horizontally</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="rotate_left">Rotera åt vänster</string>
|
||||
<string name="rotate_right">Rotera åt höger</string>
|
||||
<string name="rotate_one_eighty">Rotera 180º</string>
|
||||
<string name="flip">Vänd</string>
|
||||
<string name="flip_horizontally">Vänd horisontellt</string>
|
||||
<string name="flip_vertically">Vänd vertikalt</string>
|
||||
<string name="edit_with">Redigera med</string>
|
||||
|
||||
<!-- Set wallpaper -->
|
||||
<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="setting_wallpaper">Inställningar för bakgrundsbild…</string>
|
||||
<string name="wallpaper_set_successfully">Bakgrundsbilden är ändrad</string>
|
||||
<string name="portrait_aspect_ratio">Portrait aspect ratio</string>
|
||||
<string name="landscape_aspect_ratio">Landscape aspect ratio</string>
|
||||
<string name="portrait_aspect_ratio">Stående bildförhållande</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 -->
|
||||
<string name="show_hidden_media">Visa dolda mappar</string>
|
||||
|
@ -88,19 +99,21 @@
|
|||
<string name="show_media">Visa media</string>
|
||||
<string name="images">Endast bilder</string>
|
||||
<string name="videos">Endast videos</string>
|
||||
<string name="gifs">GIFs only</string>
|
||||
<string name="images_videos_gifs">Images, videos, GIFs</string>
|
||||
<string name="gifs">Bara GIF-bilder</string>
|
||||
<string name="images_videos_gifs">Bilder, videor, GIF-bilder</string>
|
||||
<string name="images_and_videos">Bilder och videos</string>
|
||||
<string name="loop_videos">Återspela videos</string>
|
||||
<string name="animate_gifs">Animate GIFs at thumbnails</string>
|
||||
<string name="max_brightness">Max brightness when viewing media</string>
|
||||
<string name="crop_thumbnails">Crop thumbnails into squares</string>
|
||||
<string name="screen_rotation_by">Rotate fullscreen media by</string>
|
||||
<string name="screen_rotation_system_setting">System setting</string>
|
||||
<string name="screen_rotation_device_rotation">Device rotation</string>
|
||||
<string name="screen_rotation_aspect_ratio">Aspect ratio</string>
|
||||
<string name="dark_background_at_fullscreen">Dark background at fullscreen media</string>
|
||||
<string name="scroll_thumbnails_horizontally">Scroll thumbnails horizontally</string>
|
||||
<string name="animate_gifs">Animera GIF-bilders miniatyrer</string>
|
||||
<string name="max_brightness">Maximal ljusstyrka när media visas</string>
|
||||
<string name="crop_thumbnails">Beskär miniatyrer till kvadrater</string>
|
||||
<string name="screen_rotation_by">Rotera media i helskärmsläge</string>
|
||||
<string name="screen_rotation_system_setting">Systeminställning</string>
|
||||
<string name="screen_rotation_device_rotation">Enhetens rotation</string>
|
||||
<string name="screen_rotation_aspect_ratio">Bildförhållande</string>
|
||||
<string name="dark_background_at_fullscreen">Mörk bakgrund när media visas i helskärmsläge</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 -->
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<dimen name="dir_tmb_size">150dp</dimen>
|
||||
<dimen name="medium_tmb_size">120dp</dimen>
|
||||
<dimen name="pin_size">30dp</dimen>
|
||||
<dimen name="play_outline_size">60dp</dimen>
|
||||
<dimen name="sd_card_icon_size">30dp</dimen>
|
||||
<dimen name="selection_check_size">38dp</dimen>
|
||||
<dimen name="play_outline_size_big">230dp</dimen>
|
||||
<dimen name="timer_padding">32dp</dimen>
|
||||
<dimen name="tmb_shadow_height">60dp</dimen>
|
||||
<dimen name="video_side_slider_width">250dp</dimen>
|
||||
</resources>
|
||||
|
|
|
@ -19,11 +19,12 @@
|
|||
<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="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="select_photo">Select photo</string>
|
||||
<string name="use_default">Use default</string>
|
||||
<string name="set_as">Set as</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Brightness</string>
|
||||
|
||||
<!-- 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>
|
||||
|
@ -67,7 +68,6 @@
|
|||
<string name="flip">Çevir</string>
|
||||
<string name="flip_horizontally">Yatay</string>
|
||||
<string name="flip_vertically">Dikey</string>
|
||||
<string name="out_of_memory_error">Yetersiz bellek hatası</string>
|
||||
<string name="edit_with">Edit with</string>
|
||||
|
||||
<!-- Set wallpaper -->
|
||||
|
@ -81,6 +81,17 @@
|
|||
<string name="portrait_aspect_ratio">Portrait 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 -->
|
||||
<string name="show_hidden_media">Gizli klasörleri göster</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="dark_background_at_fullscreen">Dark background at fullscreen media</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 -->
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
|
|
|
@ -3,4 +3,5 @@
|
|||
<style name="FullScreenTheme" parent="FullScreenTheme.Base">
|
||||
<item name="android:windowTranslucentNavigation">true</item>
|
||||
</style>
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -19,11 +19,12 @@
|
|||
<string name="no_camera_app_found">未找到相机应用</string>
|
||||
<string name="increase_column_count">增加一栏</string>
|
||||
<string name="reduce_column_count">减少一栏</string>
|
||||
<string name="temporarily_show_hidden">显示/隐藏缓存内容</string>
|
||||
<string name="change_cover_image">更改封面图片</string>
|
||||
<string name="select_photo">选择图片</string>
|
||||
<string name="use_default">使用默认</string>
|
||||
<string name="set_as">设置为</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Brightness</string>
|
||||
|
||||
<!-- Hide / Exclude -->
|
||||
<string name="hide_folder_description">通过添加文件 \'.nomedia\' 到目录,可以防止目录及其子目录下的所有媒体被扫描。您可以通过设置中的 \'显示隐藏目录\' 选项改变设置,是否继续?</string>
|
||||
|
@ -67,7 +68,6 @@
|
|||
<string name="flip">翻转</string>
|
||||
<string name="flip_horizontally">水平翻转</string>
|
||||
<string name="flip_vertically">垂直翻转</string>
|
||||
<string name="out_of_memory_error">内存不足</string>
|
||||
<string name="edit_with">编辑方式</string>
|
||||
|
||||
<!-- Set wallpaper -->
|
||||
|
@ -81,6 +81,17 @@
|
|||
<string name="portrait_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 -->
|
||||
<string name="show_hidden_media">显示所有</string>
|
||||
<string name="autoplay_videos">自动播放</string>
|
||||
|
@ -101,6 +112,8 @@
|
|||
<string name="screen_rotation_aspect_ratio">根据长宽比</string>
|
||||
<string name="dark_background_at_fullscreen">全屏时黑色背景</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 -->
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
|
|
|
@ -1,50 +1,51 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">簡易藝廊</string>
|
||||
<string name="app_launcher_name">藝廊</string>
|
||||
<string name="app_name">簡易相簿</string>
|
||||
<string name="app_launcher_name">簡易相簿</string>
|
||||
<string name="edit">編輯</string>
|
||||
<string name="open_camera">開啟相機</string>
|
||||
<string name="open_with">以其他應用軟體開啟</string>
|
||||
<string name="no_app_found">沒有可用的應用軟體</string>
|
||||
<string name="hidden">(隱藏)</string>
|
||||
<string name="pin_folder">鎖定資料夾</string>
|
||||
<string name="unpin_folder">解除鎖定資料夾</string>
|
||||
<string name="show_all">顯示所有資料夾的內容</string>
|
||||
<string name="all_folders">所有資料夾</string>
|
||||
<string name="folder_view">切換到資料夾檢視</string>
|
||||
<string name="open_with">以其他應用程式開啟</string>
|
||||
<string name="no_app_found">找不到應用程式</string>
|
||||
<string name="hidden">(隱藏)</string>
|
||||
<string name="pin_folder">釘選資料夾</string>
|
||||
<string name="unpin_folder">取消釘選資料夾</string>
|
||||
<string name="show_all">資料夾內容全部顯示</string>
|
||||
<string name="all_folders">全部資料夾</string>
|
||||
<string name="folder_view">切換成資料夾檢視</string>
|
||||
<string name="other_folder">其他資料夾</string>
|
||||
<string name="show_on_map">Show on map</string>
|
||||
<string name="unknown_location">Unknown location</string>
|
||||
<string name="no_map_application">No application with maps 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="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="select_photo">Select photo</string>
|
||||
<string name="use_default">Use default</string>
|
||||
<string name="set_as">Set as</string>
|
||||
<string name="show_on_map">在地圖上顯示</string>
|
||||
<string name="unknown_location">未知的位置</string>
|
||||
<string name="no_map_application">找不到地圖程式</string>
|
||||
<string name="no_camera_app_found">找不到相機程式</string>
|
||||
<string name="increase_column_count">增加欄數</string>
|
||||
<string name="reduce_column_count">減少欄數</string>
|
||||
<string name="change_cover_image">更換封面圖片</string>
|
||||
<string name="select_photo">選擇相片</string>
|
||||
<string name="use_default">使用預設</string>
|
||||
<string name="set_as">設為</string>
|
||||
<string name="volume">音量</string>
|
||||
<string name="brightness">亮度</string>
|
||||
|
||||
<!-- 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="exclude">Exclude</string>
|
||||
<string name="excluded_folders">Excluded folders</string>
|
||||
<string name="manage_excluded_folders">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_parent">Exclude a parent instead?</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="remove_all">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="hide_folder_description">這功能藉由添加一個\'.nomedia\'檔案,來隱藏資料夾和所有子資料夾。您可以透過設定中的「顯示隱藏的資料夾」選項來查看。\n是否繼續?</string>
|
||||
<string name="exclude">排除</string>
|
||||
<string name="excluded_folders">排除資料夾</string>
|
||||
<string name="manage_excluded_folders">管理排除資料夾</string>
|
||||
<string name="exclude_folder_description">此資料夾與子資料夾將只會都從簡易相簿中排除。您可以在設定中進行管理。</string>
|
||||
<string name="exclude_folder_parent">是否排除上層資料夾?</string>
|
||||
<string name="excluded_activity_placeholder">「排除資料夾」只會將選擇的資料夾與子資料夾一起從簡易相簿中隱藏,他們仍會出現在其他應用程式中。\n\n如果您要在其他應用程式中也隱藏,請使用「隱藏」功能。</string>
|
||||
<string name="remove_all">移除全部</string>
|
||||
<string name="remove_all_description">是否將排除列表中的所有資料夾都移除?這不會刪除資料夾。</string>
|
||||
|
||||
<!-- Include folders -->
|
||||
<string name="include_folders">Included folders</string>
|
||||
<string name="manage_included_folders">Manage included folders</string>
|
||||
<string name="add_folder">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="include_folders">包含資料夾</string>
|
||||
<string name="manage_included_folders">管理包含資料夾</string>
|
||||
<string name="add_folder">增加資料夾</string>
|
||||
<string name="included_activity_placeholder">如果有些資料夾含有媒體檔案,卻沒被辨識到,您可以在此手動加入。</string>
|
||||
|
||||
<!-- Resizing -->
|
||||
<string name="resize">縮放</string>
|
||||
<string name="resize_and_save">縮放選區並儲存</string>
|
||||
<string name="resize_and_save">縮放所選區域並儲存</string>
|
||||
<string name="width">寬度</string>
|
||||
<string name="height">高度</string>
|
||||
<string name="keep_aspect_ratio">保持長寬比</string>
|
||||
|
@ -55,64 +56,76 @@
|
|||
<string name="save">儲存</string>
|
||||
<string name="rotate">旋轉</string>
|
||||
<string name="path">路徑</string>
|
||||
<string name="invalid_image_path">圖檔路徑錯誤</string>
|
||||
<string name="image_editing_failed">圖檔編輯失敗</string>
|
||||
<string name="edit_image_with">編輯用:</string>
|
||||
<string name="no_editor_found">沒有可用的圖檔編輯器</string>
|
||||
<string name="unknown_file_location">未知檔案路徑</string>
|
||||
<string name="error_saving_file">不能覆蓋源檔案</string>
|
||||
<string name="rotate_left">Rotate left</string>
|
||||
<string name="rotate_right">Rotate right</string>
|
||||
<string name="rotate_one_eighty">Rotate by 180º</string>
|
||||
<string name="flip">Flip</string>
|
||||
<string name="flip_horizontally">Flip horizontally</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="invalid_image_path">無效的圖片路徑</string>
|
||||
<string name="image_editing_failed">圖片編輯失敗</string>
|
||||
<string name="edit_image_with">編輯圖片:</string>
|
||||
<string name="no_editor_found">找不到圖片編輯器</string>
|
||||
<string name="unknown_file_location">未知的檔案位置</string>
|
||||
<string name="error_saving_file">無法誤蓋原始檔案</string>
|
||||
<string name="rotate_left">向左轉</string>
|
||||
<string name="rotate_right">向右轉</string>
|
||||
<string name="rotate_one_eighty">旋轉180º</string>
|
||||
<string name="flip">翻轉</string>
|
||||
<string name="flip_horizontally">水平翻轉</string>
|
||||
<string name="flip_vertically">垂直翻轉</string>
|
||||
<string name="edit_with">用其他程式編輯</string>
|
||||
|
||||
<!-- Set wallpaper -->
|
||||
<string name="simple_wallpaper">簡易桌布</string>
|
||||
<string name="set_as_wallpaper">設定為桌布</string>
|
||||
<string name="set_as_wallpaper_failed">桌布設定失敗</string>
|
||||
<string name="set_as_wallpaper_with">用其他應用軟體設定桌布……</string>
|
||||
<string name="no_capable_app_found">沒有可用的應用軟體</string>
|
||||
<string name="setting_wallpaper">正在應用軟體桌布…</string>
|
||||
<string name="wallpaper_set_successfully">成功應用軟體桌布</string>
|
||||
<string name="portrait_aspect_ratio">Portrait aspect ratio</string>
|
||||
<string name="landscape_aspect_ratio">Landscape aspect ratio</string>
|
||||
<string name="set_as_wallpaper">設為桌布</string>
|
||||
<string name="set_as_wallpaper_failed">設為桌布失敗</string>
|
||||
<string name="set_as_wallpaper_with">用其他程式設為桌布:</string>
|
||||
<string name="no_capable_app_found">找不到可用的應用程式</string>
|
||||
<string name="setting_wallpaper">桌布設定中…</string>
|
||||
<string name="wallpaper_set_successfully">成功設為桌布</string>
|
||||
<string name="portrait_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 -->
|
||||
<string name="show_hidden_media">秀出隱藏資料夾</string>
|
||||
<string name="show_hidden_media">顯示隱藏的媒體檔案</string>
|
||||
<string name="autoplay_videos">自動播放影片</string>
|
||||
<string name="toggle_filename">顯示檔案名稱</string>
|
||||
<string name="show_media">秀出多媒體檔案</string>
|
||||
<string name="images">僅圖片</string>
|
||||
<string name="videos">僅影片</string>
|
||||
<string name="gifs">GIFs only</string>
|
||||
<string name="images_videos_gifs">Images, videos, GIFs</string>
|
||||
<string name="show_media">顯示媒體檔案</string>
|
||||
<string name="images">只有圖片</string>
|
||||
<string name="videos">只有影片</string>
|
||||
<string name="gifs">只有GIF</string>
|
||||
<string name="images_videos_gifs">圖片、影片、GIF</string>
|
||||
<string name="images_and_videos">圖片和影片</string>
|
||||
<string name="loop_videos">迴圈播放影片</string>
|
||||
<string name="animate_gifs">Animate GIFs at thumbnails</string>
|
||||
<string name="max_brightness">Max brightness when viewing media</string>
|
||||
<string name="crop_thumbnails">Crop thumbnails into squares</string>
|
||||
<string name="screen_rotation_by">Rotate fullscreen media by</string>
|
||||
<string name="screen_rotation_system_setting">System setting</string>
|
||||
<string name="screen_rotation_device_rotation">Device rotation</string>
|
||||
<string name="screen_rotation_aspect_ratio">Aspect ratio</string>
|
||||
<string name="dark_background_at_fullscreen">Dark background at fullscreen media</string>
|
||||
<string name="scroll_thumbnails_horizontally">Scroll thumbnails horizontally</string>
|
||||
<string name="loop_videos">影片循環播放</string>
|
||||
<string name="animate_gifs">縮圖顯示GIF動畫</string>
|
||||
<string name="max_brightness">瀏覽時最大亮度</string>
|
||||
<string name="crop_thumbnails">縮圖裁剪成正方形</string>
|
||||
<string name="screen_rotation_by">全螢幕時旋轉方向</string>
|
||||
<string name="screen_rotation_system_setting">系統設定方向</string>
|
||||
<string name="screen_rotation_device_rotation">裝置實際方向</string>
|
||||
<string name="screen_rotation_aspect_ratio">圖片長寬比</string>
|
||||
<string name="dark_background_at_fullscreen">全螢幕時黑背景</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 -->
|
||||
<!-- 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">
|
||||
一個觀看照片跟影片的簡單實用工具。項目可以根據日期、大小、名稱來進行遞增及遞減排序,照片可以縮放。媒體檔案們根據螢幕的大小呈列在多個方格中,您可以使用捏放手勢來調整一列中的方格數量。媒體檔案可以被重新命名、分享、刪除、複製以及移動。照片亦可被裁切、旋轉或是直接在應用軟體中設定為桌布。
|
||||
|
||||
藝廊亦提供讓第三方軟體能夠用來預覽圖片/影片、添加附件於電子郵件客戶端軟體中等功能。非常適合日常使用。
|
||||
|
||||
應用軟體不包含廣告與非必要的權限。它是完全開放原始碼的,並內建自訂顔色之使用者介面主題。
|
||||
|
||||
這個應用軟體只是一系列應用軟體中的一小部份。您可以在 http://www.simplemobiletools.com 找到剩下的軟體。
|
||||
一個適合用來瀏覽相片和影片的簡單工具。可以根據日期、大小、名稱來遞增或遞減排序項目,相片能被縮放。媒體檔案會依畫面大小呈現在數個欄位內,你可以使用縮放手勢來改變欄數。媒體檔案可以重新命名、分享、刪除、複製、移動;圖片還能縮放、旋轉、翻轉,或者直接設為桌布。
|
||||
|
||||
這相簿也支援第三方應用,像是預覽圖片/影片、添加電子信箱附件...等功能,日常使用上相當適合。
|
||||
|
||||
優點包含沒廣告,也沒非必要的權限,而且完全開放原始碼,並提供自訂顏色。
|
||||
|
||||
這只是一個大系列應用程式的其中一項程式,你可以在這發現更多 http://www.simplemobiletools.com
|
||||
</string>
|
||||
|
||||
<!--
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
<resources>
|
||||
<color name="actionbar_menu_icon">#454545</color>
|
||||
<color name="crop_image_view_background">#BB000000</color>
|
||||
<color name="circle_black_background">#66000000</color>
|
||||
|
||||
<!-- Default colors -->
|
||||
<color name="default_text_color">@color/default_dark_theme_text_color</color>
|
||||
|
|
|
@ -2,11 +2,10 @@
|
|||
<resources>
|
||||
<dimen name="dir_tmb_size">150dp</dimen>
|
||||
<dimen name="medium_tmb_size">100dp</dimen>
|
||||
<dimen name="pin_size">20dp</dimen>
|
||||
<dimen name="play_outline_size">40dp</dimen>
|
||||
<dimen name="sd_card_icon_size">20dp</dimen>
|
||||
<dimen name="selection_check_size">26dp</dimen>
|
||||
<dimen name="play_outline_size_big">150dp</dimen>
|
||||
<dimen name="timer_padding">24dp</dimen>
|
||||
<dimen name="tmb_shadow_height">50dp</dimen>
|
||||
|
||||
<dimen name="dragselect_hotspot_height">56dp</dimen>
|
||||
<dimen name="video_side_slider_width">150dp</dimen>
|
||||
</resources>
|
||||
|
|
|
@ -2,6 +2,16 @@
|
|||
<resources>
|
||||
|
||||
<!-- 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_98">
|
||||
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="increase_column_count">Increase 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="select_photo">Select photo</string>
|
||||
<string name="use_default">Use default</string>
|
||||
<string name="set_as">Set as</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="brightness">Brightness</string>
|
||||
|
||||
<!-- 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>
|
||||
|
@ -67,7 +68,6 @@
|
|||
<string name="flip">Flip</string>
|
||||
<string name="flip_horizontally">Flip horizontally</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>
|
||||
|
||||
<!-- Set wallpaper -->
|
||||
|
@ -81,6 +81,17 @@
|
|||
<string name="portrait_aspect_ratio">Portrait 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 -->
|
||||
<string name="show_hidden_media">Show hidden media</string>
|
||||
<string name="autoplay_videos">Play videos automatically</string>
|
||||
|
@ -101,6 +112,8 @@
|
|||
<string name="screen_rotation_aspect_ratio">Aspect ratio</string>
|
||||
<string name="dark_background_at_fullscreen">Dark background at fullscreen media</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 -->
|
||||
<!-- Short description has to have less than 80 chars -->
|
||||
|
|
|
@ -15,4 +15,5 @@
|
|||
<style name="MyFullScreenActionBar" parent="Widget.AppCompat.Light.ActionBar">
|
||||
<item name="titleTextStyle">@style/AppTheme.ActionBar.TitleTextStyle</item>
|
||||
</style>
|
||||
|
||||
</resources>
|
||||
|
|