Compare commits
5 Commits
v1.4.2
...
92dcfbd0ae
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
92dcfbd0ae | ||
|
|
db2326f3e7 | ||
|
|
5efeb6876b | ||
|
|
82982aa221 | ||
|
|
6f151554f0 |
@@ -5,7 +5,7 @@
|
|||||||
# 📂 Calculator Hide File App for Android 📂
|
# 📂 Calculator Hide File App for Android 📂
|
||||||
|
|
||||||
<a href="https://github.com/Binondi/Calculator-Hide-Files/releases/latest">
|
<a href="https://github.com/Binondi/Calculator-Hide-Files/releases/latest">
|
||||||
<img alt="Latest release" src="https://img.shields.io/badge/Releases-v1.4.0-blue?logo=github&style=for-the-badge">
|
<img alt="Latest release" src="https://img.shields.io/badge/Releases-v1.4.2-blue?logo=github&style=for-the-badge">
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<a href="https://github.com/Binondi/Calculator-Hide-Files/releases/latest">
|
<a href="https://github.com/Binondi/Calculator-Hide-Files/releases/latest">
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
<h4>Download</h4>
|
<h4>Download</h4>
|
||||||
|
|
||||||
<a>[<img src="https://github.com/machiav3lli/oandbackupx/blob/034b226cea5c1b30eb4f6a6f313e4dadcbb0ece4/badge_github.png" alt="Get it on GitHub" height="80">](https://github.com/binondi/Calculator-Hide-Files/releases) </a><a href="https://apt.izzysoft.de/fdroid/index/apk/devs.org.calculator"><img src="https://gitlab.com/IzzyOnDroid/repo/-/raw/master/assets/IzzyOnDroid.png" height="80"></a>
|
<a>[<img src="https://github.com/machiav3lli/oandbackupx/blob/034b226cea5c1b30eb4f6a6f313e4dadcbb0ece4/badge_github.png" alt="Get it on GitHub" height="80">](https://github.com/binondi/Calculator-Hide-Files/releases) </a><a href="https://apt.izzysoft.de/fdroid/index/apk/devs.org.calculator"><img src="https://gitlab.com/IzzyOnDroid/repo/-/raw/master/assets/IzzyOnDroid.png" height="80"></a> <a href="https://www.androidfreeware.net/download-apk-devs-org-calculator.html"><img src="https://www.androidfreeware.net/images/androidfreeware-badge.png" height="80"></a>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -70,6 +70,7 @@ dependencies {
|
|||||||
implementation(libs.androidx.activity)
|
implementation(libs.androidx.activity)
|
||||||
implementation(libs.androidx.constraintlayout)
|
implementation(libs.androidx.constraintlayout)
|
||||||
implementation(libs.androidx.gridlayout)
|
implementation(libs.androidx.gridlayout)
|
||||||
|
implementation(libs.androidx.lifecycle.process)
|
||||||
testImplementation(libs.junit)
|
testImplementation(libs.junit)
|
||||||
androidTestImplementation(libs.androidx.junit)
|
androidTestImplementation(libs.androidx.junit)
|
||||||
androidTestImplementation(libs.androidx.espresso.core)
|
androidTestImplementation(libs.androidx.espresso.core)
|
||||||
|
|||||||
@@ -118,6 +118,13 @@ class HiddenActivity : AppCompatActivity() {
|
|||||||
binding.folderOrientation.setIconResource(R.drawable.ic_list)
|
binding.folderOrientation.setIconResource(R.drawable.ic_list)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
binding.random.setOnClickListener {
|
||||||
|
val folders = folderManager.getFoldersInDirectory(hiddenDir)
|
||||||
|
val randomIndex = (Math.random() * folders.size).toInt()
|
||||||
|
val folder = folders[randomIndex]
|
||||||
|
startActivity(Intent(this,ViewFolderActivity::class.java).putExtra("folder",folder.toString()))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun showGridUI() {
|
private fun showGridUI() {
|
||||||
@@ -399,6 +406,7 @@ class HiddenActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun showFolderViewIcons() {
|
private fun showFolderViewIcons() {
|
||||||
|
binding.random.visibility = View.VISIBLE
|
||||||
binding.folderOrientation.visibility = View.VISIBLE
|
binding.folderOrientation.visibility = View.VISIBLE
|
||||||
binding.settings.visibility = View.VISIBLE
|
binding.settings.visibility = View.VISIBLE
|
||||||
binding.delete.visibility = View.GONE
|
binding.delete.visibility = View.GONE
|
||||||
@@ -412,6 +420,7 @@ class HiddenActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
private fun showFolderSelectionIcons() {
|
private fun showFolderSelectionIcons() {
|
||||||
|
binding.random.visibility = View.GONE
|
||||||
binding.folderOrientation.visibility = View.GONE
|
binding.folderOrientation.visibility = View.GONE
|
||||||
binding.settings.visibility = View.GONE
|
binding.settings.visibility = View.GONE
|
||||||
binding.delete.visibility = View.VISIBLE
|
binding.delete.visibility = View.VISIBLE
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import android.net.Uri
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
|
import android.view.View
|
||||||
import android.view.WindowManager
|
import android.view.WindowManager
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.activity.enableEdgeToEdge
|
import androidx.activity.enableEdgeToEdge
|
||||||
@@ -21,6 +22,7 @@ import devs.org.calculator.utils.DialogUtil
|
|||||||
import devs.org.calculator.utils.FileManager
|
import devs.org.calculator.utils.FileManager
|
||||||
import devs.org.calculator.utils.PrefsUtil
|
import devs.org.calculator.utils.PrefsUtil
|
||||||
import devs.org.calculator.utils.SecurityUtils
|
import devs.org.calculator.utils.SecurityUtils
|
||||||
|
import kotlinx.coroutines.Runnable
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
@@ -40,6 +42,22 @@ class PreviewActivity : AppCompatActivity() {
|
|||||||
private val hiddenFileRepository: HiddenFileRepository by lazy {
|
private val hiddenFileRepository: HiddenFileRepository by lazy {
|
||||||
HiddenFileRepository(AppDatabase.getDatabase(this).hiddenFileDao())
|
HiddenFileRepository(AppDatabase.getDatabase(this).hiddenFileDao())
|
||||||
}
|
}
|
||||||
|
private var slideshowRunning = false
|
||||||
|
private val slideshowDelay = 2000L
|
||||||
|
|
||||||
|
private val slideshowRunner = object : Runnable {
|
||||||
|
override fun run() {
|
||||||
|
if (slideshowRunning) {
|
||||||
|
if (currentPosition + 1 >= files.size) {
|
||||||
|
currentPosition = 0
|
||||||
|
} else {
|
||||||
|
currentPosition += 1
|
||||||
|
}
|
||||||
|
binding.viewPager.setCurrentItem(currentPosition, true)
|
||||||
|
mainHandler.postDelayed(this, slideshowDelay)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
@@ -134,6 +152,11 @@ class PreviewActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
adapter = ImagePreviewAdapter(this, this)
|
adapter = ImagePreviewAdapter(this, this)
|
||||||
adapter.images = files
|
adapter.images = files
|
||||||
|
adapter.onSlideshowShouldStop = {
|
||||||
|
if (slideshowRunning) {
|
||||||
|
stopSlideshow()
|
||||||
|
}
|
||||||
|
}
|
||||||
binding.viewPager.adapter = adapter
|
binding.viewPager.adapter = adapter
|
||||||
if (currentPosition < files.size) {
|
if (currentPosition < files.size) {
|
||||||
binding.viewPager.setCurrentItem(currentPosition, false)
|
binding.viewPager.setCurrentItem(currentPosition, false)
|
||||||
@@ -179,6 +202,34 @@ class PreviewActivity : AppCompatActivity() {
|
|||||||
currentPosition = position
|
currentPosition = position
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
if (filetype != FileManager.FileType.IMAGE) {
|
||||||
|
binding.startSlideshow.visibility = View.GONE
|
||||||
|
}
|
||||||
|
binding.startSlideshow.setOnClickListener {
|
||||||
|
startSlideshow()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun startSlideshow() {
|
||||||
|
if (!slideshowRunning) {
|
||||||
|
slideshowRunning = true
|
||||||
|
toggleToolbars()
|
||||||
|
mainHandler.postDelayed(slideshowRunner, slideshowDelay)
|
||||||
|
adapter.setImageZoomable(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun stopSlideshow() {
|
||||||
|
slideshowRunning = false
|
||||||
|
toggleToolbars()
|
||||||
|
mainHandler.removeCallbacks(slideshowRunner)
|
||||||
|
adapter.setImageZoomable(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun toggleToolbars() {
|
||||||
|
val visibility = if (slideshowRunning) View.GONE else View.VISIBLE
|
||||||
|
binding.toolbar.visibility = visibility
|
||||||
|
binding.footer.visibility = visibility
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun handleDeleteFile() {
|
private fun handleDeleteFile() {
|
||||||
|
|||||||
@@ -0,0 +1,43 @@
|
|||||||
|
package devs.org.calculator.activities
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
|
import android.os.Bundle
|
||||||
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import androidx.lifecycle.DefaultLifecycleObserver
|
||||||
|
import androidx.lifecycle.LifecycleOwner
|
||||||
|
import androidx.lifecycle.ProcessLifecycleOwner
|
||||||
|
|
||||||
|
abstract class SecureBaseActivity : AppCompatActivity() {
|
||||||
|
|
||||||
|
class AppLifecycleObserver : DefaultLifecycleObserver {
|
||||||
|
companion object {
|
||||||
|
var wasInBackground = false
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onStart(owner: LifecycleOwner) {
|
||||||
|
wasInBackground = true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onStop(owner: LifecycleOwner) {
|
||||||
|
wasInBackground = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
ProcessLifecycleOwner.get().lifecycle.addObserver(AppLifecycleObserver())
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onResume() {
|
||||||
|
super.onResume()
|
||||||
|
|
||||||
|
if (AppLifecycleObserver.wasInBackground) {
|
||||||
|
AppLifecycleObserver.wasInBackground = false
|
||||||
|
val intent = Intent(this, MainActivity::class.java)
|
||||||
|
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
|
||||||
|
startActivity(intent)
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -327,6 +327,10 @@ class ViewFolderActivity : AppCompatActivity() {
|
|||||||
binding.swipeLayout.visibility = View.VISIBLE
|
binding.swipeLayout.visibility = View.VISIBLE
|
||||||
binding.noItems.visibility = View.GONE
|
binding.noItems.visibility = View.GONE
|
||||||
|
|
||||||
|
binding.selectAllButton.setOnClickListener {
|
||||||
|
fileAdapter?.toggleSelectAll()
|
||||||
|
}
|
||||||
|
|
||||||
binding.menuButton.setOnClickListener {
|
binding.menuButton.setOnClickListener {
|
||||||
fileAdapter?.let { adapter ->
|
fileAdapter?.let { adapter ->
|
||||||
showFileOptionsMenu(adapter.getSelectedItems())
|
showFileOptionsMenu(adapter.getSelectedItems())
|
||||||
@@ -762,6 +766,7 @@ class ViewFolderActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
private fun showFileViewIcons() {
|
private fun showFileViewIcons() {
|
||||||
binding.menuButton.visibility = View.GONE
|
binding.menuButton.visibility = View.GONE
|
||||||
|
binding.selectAllButton.visibility = View.GONE
|
||||||
binding.fabExpend.visibility = View.VISIBLE
|
binding.fabExpend.visibility = View.VISIBLE
|
||||||
binding.addImage.visibility = View.INVISIBLE
|
binding.addImage.visibility = View.INVISIBLE
|
||||||
binding.addVideo.visibility = View.INVISIBLE
|
binding.addVideo.visibility = View.INVISIBLE
|
||||||
@@ -773,6 +778,7 @@ class ViewFolderActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
private fun showFileSelectionIcons() {
|
private fun showFileSelectionIcons() {
|
||||||
binding.menuButton.visibility = View.VISIBLE
|
binding.menuButton.visibility = View.VISIBLE
|
||||||
|
binding.selectAllButton.visibility = View.VISIBLE
|
||||||
binding.fabExpend.visibility = View.GONE
|
binding.fabExpend.visibility = View.GONE
|
||||||
binding.addImage.visibility = View.INVISIBLE
|
binding.addImage.visibility = View.INVISIBLE
|
||||||
binding.addVideo.visibility = View.INVISIBLE
|
binding.addVideo.visibility = View.INVISIBLE
|
||||||
|
|||||||
@@ -495,6 +495,31 @@ class FileAdapter(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun toggleSelectAll() {
|
||||||
|
if (!isSelectionMode) {
|
||||||
|
isSelectionMode = true
|
||||||
|
notifySelectionModeChange()
|
||||||
|
}
|
||||||
|
val filesInFolder = FolderManager().getFilesInFolder(currentFolder)
|
||||||
|
if (selectedItems.size == filesInFolder.size) {
|
||||||
|
selectedItems.clear()
|
||||||
|
onSelectionCountChanged(0)
|
||||||
|
notifyDataSetChanged()
|
||||||
|
// for (i in 0 until filesInFolder.size) {
|
||||||
|
// notifyItemChanged(i)
|
||||||
|
// notifyChan
|
||||||
|
// }
|
||||||
|
} else {
|
||||||
|
for (i in 0 until filesInFolder.size) {
|
||||||
|
if (!selectedItems.contains(i)) {
|
||||||
|
selectedItems.add(i)
|
||||||
|
notifyItemChanged(i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
onSelectionCountChanged(filesInFolder.size)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressLint("NotifyDataSetChanged")
|
@SuppressLint("NotifyDataSetChanged")
|
||||||
fun exitSelectionMode() {
|
fun exitSelectionMode() {
|
||||||
if (isSelectionMode) {
|
if (isSelectionMode) {
|
||||||
|
|||||||
@@ -36,11 +36,14 @@ class ImagePreviewAdapter(
|
|||||||
private val hiddenFileRepository: HiddenFileRepository by lazy {
|
private val hiddenFileRepository: HiddenFileRepository by lazy {
|
||||||
HiddenFileRepository(AppDatabase.getDatabase(context).hiddenFileDao())
|
HiddenFileRepository(AppDatabase.getDatabase(context).hiddenFileDao())
|
||||||
}
|
}
|
||||||
|
private var canZoomOnImages: Boolean = true
|
||||||
|
|
||||||
var images: List<File>
|
var images: List<File>
|
||||||
get() = differ.currentList
|
get() = differ.currentList
|
||||||
set(value) = differ.submitList(value)
|
set(value) = differ.submitList(value)
|
||||||
|
|
||||||
|
var onSlideshowShouldStop: () -> Unit = {}
|
||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ImageViewHolder {
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ImageViewHolder {
|
||||||
val binding = ViewpagerItemsBinding.inflate(LayoutInflater.from(context), parent, false)
|
val binding = ViewpagerItemsBinding.inflate(LayoutInflater.from(context), parent, false)
|
||||||
return ImageViewHolder(binding)
|
return ImageViewHolder(binding)
|
||||||
@@ -56,6 +59,11 @@ class ImagePreviewAdapter(
|
|||||||
|
|
||||||
override fun getItemCount(): Int = images.size
|
override fun getItemCount(): Int = images.size
|
||||||
|
|
||||||
|
fun setImageZoomable(zoomable: Boolean) {
|
||||||
|
currentViewHolder?.setImageViewCanZoom(zoomable)
|
||||||
|
canZoomOnImages = zoomable
|
||||||
|
}
|
||||||
|
|
||||||
private fun stopAndResetCurrentAudio() {
|
private fun stopAndResetCurrentAudio() {
|
||||||
currentViewHolder?.stopAndResetAudio()
|
currentViewHolder?.stopAndResetAudio()
|
||||||
currentPlayingPosition = -1
|
currentPlayingPosition = -1
|
||||||
@@ -153,6 +161,11 @@ class ImagePreviewAdapter(
|
|||||||
binding.imageView.visibility = View.VISIBLE
|
binding.imageView.visibility = View.VISIBLE
|
||||||
binding.videoView.visibility = View.GONE
|
binding.videoView.visibility = View.GONE
|
||||||
binding.audioBg.visibility = View.GONE
|
binding.audioBg.visibility = View.GONE
|
||||||
|
binding.imageView.isZoomable = canZoomOnImages
|
||||||
|
binding.imageView.doubleTapToZoom = canZoomOnImages
|
||||||
|
binding.imageView.setOnClickListener {
|
||||||
|
onSlideshowShouldStop()
|
||||||
|
}
|
||||||
Glide.with(context)
|
Glide.with(context)
|
||||||
.load(uri)
|
.load(uri)
|
||||||
.error(R.drawable.encrypted)
|
.error(R.drawable.encrypted)
|
||||||
@@ -181,6 +194,11 @@ class ImagePreviewAdapter(
|
|||||||
binding.imageView.visibility = View.VISIBLE
|
binding.imageView.visibility = View.VISIBLE
|
||||||
binding.audioBg.visibility = View.GONE
|
binding.audioBg.visibility = View.GONE
|
||||||
binding.videoView.visibility = View.GONE
|
binding.videoView.visibility = View.GONE
|
||||||
|
binding.imageView.isZoomable = canZoomOnImages
|
||||||
|
binding.imageView.doubleTapToZoom = canZoomOnImages
|
||||||
|
binding.imageView.setOnClickListener {
|
||||||
|
onSlideshowShouldStop()
|
||||||
|
}
|
||||||
Glide.with(context)
|
Glide.with(context)
|
||||||
.load(uri)
|
.load(uri)
|
||||||
.error(R.drawable.encrypted)
|
.error(R.drawable.encrypted)
|
||||||
@@ -193,6 +211,11 @@ class ImagePreviewAdapter(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun setImageViewCanZoom(zoomEnabled: Boolean) {
|
||||||
|
binding.imageView.doubleTapToZoom = zoomEnabled
|
||||||
|
binding.imageView.isZoomable = zoomEnabled
|
||||||
|
}
|
||||||
|
|
||||||
fun getFileFromUri(context: Context, uri: Uri): File? {
|
fun getFileFromUri(context: Context, uri: Uri): File? {
|
||||||
return try {
|
return try {
|
||||||
val inputStream = context.contentResolver.openInputStream(uri)
|
val inputStream = context.contentResolver.openInputStream(uri)
|
||||||
|
|||||||
@@ -123,7 +123,7 @@ class FileManager(private val context: Context, private val lifecycleOwner: Life
|
|||||||
val contentResolver = context.contentResolver
|
val contentResolver = context.contentResolver
|
||||||
|
|
||||||
// Get the target directory
|
// Get the target directory
|
||||||
val targetDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
|
val targetDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES + "/Restore")
|
||||||
targetDir.mkdirs()
|
targetDir.mkdirs()
|
||||||
|
|
||||||
// Create target file
|
// Create target file
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ class FolderManager {
|
|||||||
directory.listFiles()?.filter { it.isDirectory && it.name != ".nomedia" } ?: emptyList()
|
directory.listFiles()?.filter { it.isDirectory && it.name != ".nomedia" } ?: emptyList()
|
||||||
} else {
|
} else {
|
||||||
emptyList()
|
emptyList()
|
||||||
}
|
}.sortedBy { it.name.lowercase() }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getFilesInFolder(folder: File): List<File> {
|
fun getFilesInFolder(folder: File): List<File> {
|
||||||
|
|||||||
5
app/src/main/res/drawable/ic_dice.xml
Normal file
5
app/src/main/res/drawable/ic_dice.xml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#FFFFFF" android:viewportHeight="960" android:viewportWidth="960" android:width="24dp">
|
||||||
|
|
||||||
|
<path android:fillColor="@android:color/white" android:pathData="M340,680Q365,680 382.5,662.5Q400,645 400,620Q400,595 382.5,577.5Q365,560 340,560Q315,560 297.5,577.5Q280,595 280,620Q280,645 297.5,662.5Q315,680 340,680ZM340,400Q365,400 382.5,382.5Q400,365 400,340Q400,315 382.5,297.5Q365,280 340,280Q315,280 297.5,297.5Q280,315 280,340Q280,365 297.5,382.5Q315,400 340,400ZM620,680Q645,680 662.5,662.5Q680,645 680,620Q680,595 662.5,577.5Q645,560 620,560Q595,560 577.5,577.5Q560,595 560,620Q560,645 577.5,662.5Q595,680 620,680ZM620,400Q645,400 662.5,382.5Q680,365 680,340Q680,315 662.5,297.5Q645,280 620,280Q595,280 577.5,297.5Q560,315 560,340Q560,365 577.5,382.5Q595,400 620,400ZM200,840Q167,840 143.5,816.5Q120,793 120,760L120,200Q120,167 143.5,143.5Q167,120 200,120L760,120Q793,120 816.5,143.5Q840,167 840,200L840,760Q840,793 816.5,816.5Q793,840 760,840L200,840ZM200,760L760,760Q760,760 760,760Q760,760 760,760L760,200Q760,200 760,200Q760,200 760,200L200,200Q200,200 200,200Q200,200 200,200L200,760Q200,760 200,760Q200,760 200,760ZM200,200L200,200Q200,200 200,200Q200,200 200,200L200,760Q200,760 200,760Q200,760 200,760L200,760Q200,760 200,760Q200,760 200,760L200,200Q200,200 200,200Q200,200 200,200Z"/>
|
||||||
|
|
||||||
|
</vector>
|
||||||
5
app/src/main/res/drawable/ic_select_all.xml
Normal file
5
app/src/main/res/drawable/ic_select_all.xml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#FFFFFF" android:viewportHeight="960" android:viewportWidth="960" android:width="24dp">
|
||||||
|
|
||||||
|
<path android:fillColor="@android:color/white" android:pathData="M268,720L42,494L99,438L269,608L269,608L325,664L268,720ZM494,720L268,494L324,437L494,607L862,239L918,296L494,720ZM494,494L437,438L635,240L692,296L494,494Z"/>
|
||||||
|
|
||||||
|
</vector>
|
||||||
9
app/src/main/res/drawable/ic_slideshow.xml
Normal file
9
app/src/main/res/drawable/ic_slideshow.xml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportHeight="24"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:width="24dp">
|
||||||
|
<path
|
||||||
|
android:fillColor="@color/svgTintColor"
|
||||||
|
android:pathData="M10,8v8l5,-4 -5,-4zM19,3L5,3c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2L21,5c0,-1.1 -0.9,-2 -2,-2zM19,19L5,19L5,5h14v14z"/>
|
||||||
|
</vector>
|
||||||
@@ -60,6 +60,12 @@
|
|||||||
app:icon="@drawable/ic_more"
|
app:icon="@drawable/ic_more"
|
||||||
style="@style/Widget.Material3.Button.IconButton"/>
|
style="@style/Widget.Material3.Button.IconButton"/>
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:icon="@drawable/ic_dice"
|
||||||
|
style="@style/Widget.Material3.Button.IconButton"
|
||||||
|
android:id="@+id/random" />
|
||||||
<com.google.android.material.button.MaterialButton
|
<com.google.android.material.button.MaterialButton
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:paddingLeft="15dp"
|
android:paddingLeft="15dp"
|
||||||
|
android:paddingRight="15dp"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent" >
|
app:layout_constraintTop_toTopOf="parent" >
|
||||||
<androidx.appcompat.widget.AppCompatImageButton
|
<androidx.appcompat.widget.AppCompatImageButton
|
||||||
@@ -26,11 +27,20 @@
|
|||||||
android:id="@+id/back"/>
|
android:id="@+id/back"/>
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/title"
|
android:id="@+id/title"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="0dp"
|
||||||
android:textSize="22sp"
|
android:textSize="22sp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:textStyle="bold"
|
android:textStyle="bold"
|
||||||
android:text="@string/preview_file"/>
|
android:text="@string/preview_file"
|
||||||
|
android:layout_weight="1"/>
|
||||||
|
<androidx.appcompat.widget.AppCompatImageButton
|
||||||
|
android:layout_width="40dp"
|
||||||
|
android:layout_height="40dp"
|
||||||
|
android:src="@drawable/ic_slideshow"
|
||||||
|
android:scaleType="fitCenter"
|
||||||
|
android:background="#00000000"
|
||||||
|
android:padding="8dp"
|
||||||
|
android:id="@+id/start_slideshow"/>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<androidx.viewpager2.widget.ViewPager2
|
<androidx.viewpager2.widget.ViewPager2
|
||||||
@@ -44,6 +54,7 @@
|
|||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
android:id="@+id/footer"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:gravity="center_horizontal"
|
android:gravity="center_horizontal"
|
||||||
|
|||||||
@@ -39,6 +39,13 @@
|
|||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:id="@+id/folderName"/>
|
android:id="@+id/folderName"/>
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/selectAllButton"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:icon="@drawable/ic_select_all"
|
||||||
|
android:visibility="gone"
|
||||||
|
style="@style/Widget.Material3.Button.IconButton"/>
|
||||||
|
|
||||||
<com.google.android.material.button.MaterialButton
|
<com.google.android.material.button.MaterialButton
|
||||||
android:id="@+id/menuButton"
|
android:id="@+id/menuButton"
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ roomRuntime = "2.7.1"
|
|||||||
swiperefreshlayout = "1.2.0-beta01"
|
swiperefreshlayout = "1.2.0-beta01"
|
||||||
viewpager = "1.1.0"
|
viewpager = "1.1.0"
|
||||||
zoomage = "1.3.1"
|
zoomage = "1.3.1"
|
||||||
|
lifecycleProcess = "2.9.2"
|
||||||
|
|
||||||
[libraries]
|
[libraries]
|
||||||
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
|
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
|
||||||
@@ -43,6 +44,7 @@ material-color-utilities = { module = "com.google.android.material:material-colo
|
|||||||
androidx-gridlayout = { group = "androidx.gridlayout", name = "gridlayout", version.ref = "gridlayout" }
|
androidx-gridlayout = { group = "androidx.gridlayout", name = "gridlayout", version.ref = "gridlayout" }
|
||||||
photoview = { module = "com.github.chrisbanes:PhotoView", version.ref = "photoview" }
|
photoview = { module = "com.github.chrisbanes:PhotoView", version.ref = "photoview" }
|
||||||
zoomage = { module = "com.jsibbold:zoomage", version.ref = "zoomage" }
|
zoomage = { module = "com.jsibbold:zoomage", version.ref = "zoomage" }
|
||||||
|
androidx-lifecycle-process = { group = "androidx.lifecycle", name = "lifecycle-process", version.ref = "lifecycleProcess" }
|
||||||
|
|
||||||
[plugins]
|
[plugins]
|
||||||
android-application = { id = "com.android.application", version.ref = "agp" }
|
android-application = { id = "com.android.application", version.ref = "agp" }
|
||||||
|
|||||||
Reference in New Issue
Block a user