From 92dcfbd0aec310575c38d363b82e9847f1279cbe Mon Sep 17 00:00:00 2001 From: Owen Date: Thu, 21 Aug 2025 10:41:41 -0400 Subject: [PATCH] sorting + slideshow --- app/build.gradle.kts | 1 + .../calculator/activities/HiddenActivity.kt | 9 ++++ .../activities/SecureBaseActivity.kt | 43 +++++++++++++++++++ .../activities/ViewFolderActivity.kt | 6 +++ .../org/calculator/adapters/FileAdapter.kt | 25 +++++++++++ .../org/calculator/utils/FolderManager.kt | 2 +- app/src/main/res/drawable/ic_dice.xml | 5 +++ app/src/main/res/drawable/ic_select_all.xml | 5 +++ app/src/main/res/layout/activity_hidden.xml | 6 +++ .../main/res/layout/activity_view_folder.xml | 7 +++ gradle/libs.versions.toml | 2 + 11 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/devs/org/calculator/activities/SecureBaseActivity.kt create mode 100644 app/src/main/res/drawable/ic_dice.xml create mode 100644 app/src/main/res/drawable/ic_select_all.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 97b604d..caef029 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -70,6 +70,7 @@ dependencies { implementation(libs.androidx.activity) implementation(libs.androidx.constraintlayout) implementation(libs.androidx.gridlayout) + implementation(libs.androidx.lifecycle.process) testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) diff --git a/app/src/main/java/devs/org/calculator/activities/HiddenActivity.kt b/app/src/main/java/devs/org/calculator/activities/HiddenActivity.kt index fa9affb..1c5aeb3 100644 --- a/app/src/main/java/devs/org/calculator/activities/HiddenActivity.kt +++ b/app/src/main/java/devs/org/calculator/activities/HiddenActivity.kt @@ -118,6 +118,13 @@ class HiddenActivity : AppCompatActivity() { 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() { @@ -399,6 +406,7 @@ class HiddenActivity : AppCompatActivity() { } private fun showFolderViewIcons() { + binding.random.visibility = View.VISIBLE binding.folderOrientation.visibility = View.VISIBLE binding.settings.visibility = View.VISIBLE binding.delete.visibility = View.GONE @@ -412,6 +420,7 @@ class HiddenActivity : AppCompatActivity() { } } private fun showFolderSelectionIcons() { + binding.random.visibility = View.GONE binding.folderOrientation.visibility = View.GONE binding.settings.visibility = View.GONE binding.delete.visibility = View.VISIBLE diff --git a/app/src/main/java/devs/org/calculator/activities/SecureBaseActivity.kt b/app/src/main/java/devs/org/calculator/activities/SecureBaseActivity.kt new file mode 100644 index 0000000..f846f6e --- /dev/null +++ b/app/src/main/java/devs/org/calculator/activities/SecureBaseActivity.kt @@ -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() + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/devs/org/calculator/activities/ViewFolderActivity.kt b/app/src/main/java/devs/org/calculator/activities/ViewFolderActivity.kt index 1e96d17..fa92537 100644 --- a/app/src/main/java/devs/org/calculator/activities/ViewFolderActivity.kt +++ b/app/src/main/java/devs/org/calculator/activities/ViewFolderActivity.kt @@ -327,6 +327,10 @@ class ViewFolderActivity : AppCompatActivity() { binding.swipeLayout.visibility = View.VISIBLE binding.noItems.visibility = View.GONE + binding.selectAllButton.setOnClickListener { + fileAdapter?.toggleSelectAll() + } + binding.menuButton.setOnClickListener { fileAdapter?.let { adapter -> showFileOptionsMenu(adapter.getSelectedItems()) @@ -762,6 +766,7 @@ class ViewFolderActivity : AppCompatActivity() { private fun showFileViewIcons() { binding.menuButton.visibility = View.GONE + binding.selectAllButton.visibility = View.GONE binding.fabExpend.visibility = View.VISIBLE binding.addImage.visibility = View.INVISIBLE binding.addVideo.visibility = View.INVISIBLE @@ -773,6 +778,7 @@ class ViewFolderActivity : AppCompatActivity() { private fun showFileSelectionIcons() { binding.menuButton.visibility = View.VISIBLE + binding.selectAllButton.visibility = View.VISIBLE binding.fabExpend.visibility = View.GONE binding.addImage.visibility = View.INVISIBLE binding.addVideo.visibility = View.INVISIBLE diff --git a/app/src/main/java/devs/org/calculator/adapters/FileAdapter.kt b/app/src/main/java/devs/org/calculator/adapters/FileAdapter.kt index fde614c..ad87bc3 100644 --- a/app/src/main/java/devs/org/calculator/adapters/FileAdapter.kt +++ b/app/src/main/java/devs/org/calculator/adapters/FileAdapter.kt @@ -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") fun exitSelectionMode() { if (isSelectionMode) { diff --git a/app/src/main/java/devs/org/calculator/utils/FolderManager.kt b/app/src/main/java/devs/org/calculator/utils/FolderManager.kt index fd98590..91c3469 100644 --- a/app/src/main/java/devs/org/calculator/utils/FolderManager.kt +++ b/app/src/main/java/devs/org/calculator/utils/FolderManager.kt @@ -39,7 +39,7 @@ class FolderManager { directory.listFiles()?.filter { it.isDirectory && it.name != ".nomedia" } ?: emptyList() } else { emptyList() - }.sortedBy { it.name } + }.sortedBy { it.name.lowercase() } } fun getFilesInFolder(folder: File): List { diff --git a/app/src/main/res/drawable/ic_dice.xml b/app/src/main/res/drawable/ic_dice.xml new file mode 100644 index 0000000..e5db166 --- /dev/null +++ b/app/src/main/res/drawable/ic_dice.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_select_all.xml b/app/src/main/res/drawable/ic_select_all.xml new file mode 100644 index 0000000..1709708 --- /dev/null +++ b/app/src/main/res/drawable/ic_select_all.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/layout/activity_hidden.xml b/app/src/main/res/layout/activity_hidden.xml index 3be996b..3129593 100644 --- a/app/src/main/res/layout/activity_hidden.xml +++ b/app/src/main/res/layout/activity_hidden.xml @@ -60,6 +60,12 @@ app:icon="@drawable/ic_more" style="@style/Widget.Material3.Button.IconButton"/> + +