diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 7450a63..693cbc5 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -11,16 +11,14 @@ android {
applicationId = "devs.org.calculator"
minSdk = 26
targetSdk = 34
- versionCode = 3
- versionName = "1.2"
+ versionCode = 4
+ versionName = "1.3"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
- isMinifyEnabled = true
- isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 60d62f1..3e65b6e 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -32,6 +32,9 @@
android:supportsRtl="true"
android:theme="@style/Theme.Calculator"
tools:targetApi="31">
+
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 7cdc89f..3ed441a 100644
--- a/app/src/main/java/devs/org/calculator/activities/HiddenActivity.kt
+++ b/app/src/main/java/devs/org/calculator/activities/HiddenActivity.kt
@@ -89,7 +89,6 @@ class HiddenActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- enableEdgeToEdge()
binding = ActivityHiddenBinding.inflate(layoutInflater)
setContentView(binding.root)
//initialized animations for fabs
@@ -116,6 +115,10 @@ class HiddenActivity : AppCompatActivity() {
}
}
+ binding.settings.setOnClickListener {
+ startActivity(Intent(this, SettingsActivity::class.java))
+ }
+
binding.addImage.setOnClickListener { openFilePicker("image/*") }
binding.addVideo.setOnClickListener { openFilePicker("video/*") }
binding.addAudio.setOnClickListener { openFilePicker("audio/*") }
@@ -302,7 +305,6 @@ class HiddenActivity : AppCompatActivity() {
binding.recyclerView.layoutManager = GridLayoutManager(this, 3)
val fileAdapter = FileAdapter(this, this, folder).apply {
- // Set up the callback for file operations
fileOperationCallback = object : FileAdapter.FileOperationCallback {
override fun onFileDeleted(file: File) {
// Refresh the file list
@@ -318,6 +320,18 @@ class HiddenActivity : AppCompatActivity() {
// Refresh the file list
refreshCurrentFolder()
}
+
+ override fun onSelectionModeChanged(
+ isSelectionMode: Boolean,
+ selectedCount: Int
+ ) {
+
+ }
+
+ override fun onSelectionCountChanged(selectedCount: Int) {
+
+
+ }
}
submitList(files)
diff --git a/app/src/main/java/devs/org/calculator/activities/PreviewActivity.kt b/app/src/main/java/devs/org/calculator/activities/PreviewActivity.kt
index 3c01b85..7dd8ca8 100644
--- a/app/src/main/java/devs/org/calculator/activities/PreviewActivity.kt
+++ b/app/src/main/java/devs/org/calculator/activities/PreviewActivity.kt
@@ -49,6 +49,10 @@ class PreviewActivity : AppCompatActivity() {
}
})
+ binding.back.setOnClickListener {
+ finish()
+ }
+
}
private fun setupFileType() {
diff --git a/app/src/main/java/devs/org/calculator/activities/SettingsActivity.kt b/app/src/main/java/devs/org/calculator/activities/SettingsActivity.kt
new file mode 100644
index 0000000..c36a4a3
--- /dev/null
+++ b/app/src/main/java/devs/org/calculator/activities/SettingsActivity.kt
@@ -0,0 +1,20 @@
+package devs.org.calculator.activities
+
+import android.os.Bundle
+import androidx.activity.enableEdgeToEdge
+import androidx.appcompat.app.AppCompatActivity
+import devs.org.calculator.R
+import devs.org.calculator.databinding.ActivitySettingsBinding
+
+class SettingsActivity : AppCompatActivity() {
+
+ private lateinit var binding: ActivitySettingsBinding
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ enableEdgeToEdge()
+ binding = ActivitySettingsBinding.inflate(layoutInflater)
+ setContentView(binding.root)
+
+ }
+}
\ No newline at end of file
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 7161ebf..7743f28 100644
--- a/app/src/main/java/devs/org/calculator/adapters/FileAdapter.kt
+++ b/app/src/main/java/devs/org/calculator/adapters/FileAdapter.kt
@@ -31,11 +31,13 @@ class FileAdapter(
private val selectedItems = mutableSetOf()
private var isSelectionMode = false
- // Callback interface for handling file operations
+ // Callback interface for handling file operations and selection changes
interface FileOperationCallback {
fun onFileDeleted(file: File)
fun onFileRenamed(oldFile: File, newFile: File)
fun onRefreshNeeded()
+ fun onSelectionModeChanged(isSelectionMode: Boolean, selectedCount: Int)
+ fun onSelectionCountChanged(selectedCount: Int)
}
var fileOperationCallback: FileOperationCallback? = null
@@ -44,6 +46,8 @@ class FileAdapter(
val imageView: ImageView = view.findViewById(R.id.fileIconImageView)
val fileNameTextView: TextView = view.findViewById(R.id.fileNameTextView)
val playIcon: ImageView = view.findViewById(R.id.videoPlay)
+ val selectionOverlay: View? = view.findViewById(R.id.selectedLayer) // Optional overlay for selection
+ val checkIcon: ImageView? = view.findViewById(R.id.selected) // Optional check icon
fun bind(file: File) {
val fileType = FileManager(context, lifecycleOwner).getFileType(file)
@@ -51,7 +55,8 @@ class FileAdapter(
setupClickListeners(file, fileType)
// Handle selection state
- itemView.isSelected = selectedItems.contains(adapterPosition)
+ val isSelected = selectedItems.contains(adapterPosition)
+ updateSelectionUI(isSelected)
}
fun bind(file: File, payloads: List) {
@@ -70,10 +75,28 @@ class FileAdapter(
"SIZE_CHANGED", "MODIFIED_DATE_CHANGED" -> {
// Could update file info if displayed
}
+ "SELECTION_CHANGED" -> {
+ val isSelected = selectedItems.contains(adapterPosition)
+ updateSelectionUI(isSelected)
+ }
}
}
}
+ private fun updateSelectionUI(isSelected: Boolean) {
+ // Update visual selection state
+ itemView.isSelected = isSelected
+
+ // If you have a selection overlay, show/hide it
+ selectionOverlay?.visibility = if (isSelected) View.VISIBLE else View.GONE
+
+ // If you have a check icon, show/hide it
+ checkIcon?.visibility = if (isSelected) View.VISIBLE else View.GONE
+
+ // You can also change the background or add other visual indicators
+ itemView.alpha = if (isSelectionMode && !isSelected) 0.7f else 1.0f
+ }
+
private fun setupFileDisplay(file: File, fileType: FileManager.FileType) {
when (fileType) {
FileManager.FileType.IMAGE -> {
@@ -141,7 +164,8 @@ class FileAdapter(
showFileOptionsDialog(file)
true
} else {
- false
+ toggleSelection(adapterPosition)
+ true
}
}
}
@@ -217,6 +241,7 @@ class FileAdapter(
private fun showFileOptionsDialog(file: File) {
val options = arrayOf(
context.getString(R.string.un_hide),
+ context.getString(R.string.select_multiple),
context.getString(R.string.rename),
context.getString(R.string.delete),
context.getString(R.string.share)
@@ -227,9 +252,10 @@ class FileAdapter(
.setItems(options) { dialog, which ->
when (which) {
0 -> unHideFile(file)
- 1 -> renameFile(file)
- 2 -> deleteFile(file)
- 3 -> shareFile(file)
+ 1 -> enableSelectMultipleFiles()
+ 2 -> renameFile(file)
+ 3 -> deleteFile(file)
+ 4 -> shareFile(file)
}
dialog.dismiss()
}
@@ -237,15 +263,21 @@ class FileAdapter(
.show()
}
+ private fun enableSelectMultipleFiles() {
+ // Enable multiple selection mode and select current item
+ enterSelectionMode()
+ selectedItems.add(adapterPosition)
+ notifyItemChanged(adapterPosition, listOf("SELECTION_CHANGED"))
+ fileOperationCallback?.onSelectionCountChanged(selectedItems.size)
+ }
+
private fun unHideFile(file: File) {
FileManager(context, lifecycleOwner).unHideFile(
file = file,
onSuccess = {
fileOperationCallback?.onFileDeleted(file)
-
},
onError = { errorMessage ->
-
Toast.makeText(context, "Failed to unhide: $errorMessage", Toast.LENGTH_SHORT).show()
}
)
@@ -315,11 +347,14 @@ class FileAdapter(
selectedItems.add(position)
}
+ // Exit selection mode if no items are selected
if (selectedItems.isEmpty()) {
- isSelectionMode = false
+ exitSelectionMode()
+ } else {
+ fileOperationCallback?.onSelectionCountChanged(selectedItems.size)
}
- notifyItemChanged(position)
+ notifyItemChanged(position, listOf("SELECTION_CHANGED"))
}
}
@@ -344,15 +379,179 @@ class FileAdapter(
}
// Public methods for external control
- fun clearSelection() {
- selectedItems.clear()
- isSelectionMode = false
- notifyDataSetChanged()
+
+ /**
+ * Enter selection mode
+ */
+ fun enterSelectionMode() {
+ if (!isSelectionMode) {
+ isSelectionMode = true
+ fileOperationCallback?.onSelectionModeChanged(true, selectedItems.size)
+ notifyDataSetChanged() // Refresh all items to show selection UI
+ }
}
+ /**
+ * Exit selection mode and clear all selections
+ */
+ fun exitSelectionMode() {
+ if (isSelectionMode) {
+ isSelectionMode = false
+ selectedItems.clear()
+ fileOperationCallback?.onSelectionModeChanged(false, 0)
+ notifyDataSetChanged() // Refresh all items to hide selection UI
+ }
+ }
+
+ /**
+ * Clear selection without exiting selection mode
+ */
+ fun clearSelection() {
+ if (selectedItems.isNotEmpty()) {
+ val previouslySelected = selectedItems.toSet()
+ selectedItems.clear()
+ fileOperationCallback?.onSelectionCountChanged(0)
+
+ // Only update previously selected items
+ previouslySelected.forEach { position ->
+ notifyItemChanged(position, listOf("SELECTION_CHANGED"))
+ }
+ }
+ }
+
+ /**
+ * Select all items
+ */
+ fun selectAll() {
+ if (!isSelectionMode) {
+ enterSelectionMode()
+ }
+
+ val previouslySelected = selectedItems.toSet()
+ selectedItems.clear()
+
+ // Add all positions to selection
+ for (i in 0 until itemCount) {
+ selectedItems.add(i)
+ }
+
+ fileOperationCallback?.onSelectionCountChanged(selectedItems.size)
+
+ // Update UI for changed items
+ val allPositions = (0 until itemCount).toSet()
+ val changedPositions = allPositions - previouslySelected + previouslySelected - allPositions
+ changedPositions.forEach { position ->
+ notifyItemChanged(position, listOf("SELECTION_CHANGED"))
+ }
+ }
+
+ /**
+ * Get selected files
+ */
fun getSelectedItems(): List {
return selectedItems.mapNotNull { position ->
if (position < itemCount) getItem(position) else null
}
}
+
+ /**
+ * Get selected file count
+ */
+ fun getSelectedCount(): Int = selectedItems.size
+
+ /**
+ * Check if in selection mode
+ */
+ fun isInSelectionMode(): Boolean = isSelectionMode
+
+ /**
+ * Delete selected files
+ */
+ fun deleteSelectedFiles() {
+ val selectedFiles = getSelectedItems()
+ var deletedCount = 0
+ var failedCount = 0
+
+ selectedFiles.forEach { file ->
+ if (file.delete()) {
+ deletedCount++
+ fileOperationCallback?.onFileDeleted(file)
+ } else {
+ failedCount++
+ }
+ }
+
+ exitSelectionMode()
+
+ // Show result message
+ when {
+ deletedCount > 0 && failedCount == 0 -> {
+ Toast.makeText(context, "Deleted $deletedCount file(s)", Toast.LENGTH_SHORT).show()
+ }
+ deletedCount > 0 && failedCount > 0 -> {
+ Toast.makeText(context, "Deleted $deletedCount file(s), failed to delete $failedCount", Toast.LENGTH_LONG).show()
+ }
+ failedCount > 0 -> {
+ Toast.makeText(context, "Failed to delete $failedCount file(s)", Toast.LENGTH_SHORT).show()
+ }
+ }
+ }
+
+ /**
+ * Share selected files
+ */
+ fun shareSelectedFiles() {
+ val selectedFiles = getSelectedItems()
+ if (selectedFiles.isEmpty()) return
+
+ if (selectedFiles.size == 1) {
+ // Share single file
+ val file = selectedFiles.first()
+ val uri = FileProvider.getUriForFile(
+ context,
+ "${context.packageName}.fileprovider",
+ file
+ )
+ val shareIntent = Intent(Intent.ACTION_SEND).apply {
+ type = context.contentResolver.getType(uri) ?: "*/*"
+ putExtra(Intent.EXTRA_STREAM, uri)
+ addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
+ }
+ context.startActivity(
+ Intent.createChooser(shareIntent, context.getString(R.string.share_file))
+ )
+ } else {
+ // Share multiple files
+ val uris = selectedFiles.map { file ->
+ FileProvider.getUriForFile(
+ context,
+ "${context.packageName}.fileprovider",
+ file
+ )
+ }
+ val shareIntent = Intent(Intent.ACTION_SEND_MULTIPLE).apply {
+ type = "*/*"
+ putParcelableArrayListExtra(Intent.EXTRA_STREAM, ArrayList(uris))
+ addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
+ }
+ context.startActivity(
+ Intent.createChooser(shareIntent, "Share ${selectedFiles.size} files")
+ )
+ }
+
+ exitSelectionMode()
+ }
+
+ /**
+ * Handle back press - exit selection mode if active
+ * @return true if selection mode was active and has been exited, false otherwise
+ */
+ fun onBackPressed(): Boolean {
+ return if (isSelectionMode) {
+ exitSelectionMode()
+ true
+ } else {
+ false
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/devs/org/calculator/adapters/ImagePreviewAdapter.kt b/app/src/main/java/devs/org/calculator/adapters/ImagePreviewAdapter.kt
index 35312e5..d138701 100644
--- a/app/src/main/java/devs/org/calculator/adapters/ImagePreviewAdapter.kt
+++ b/app/src/main/java/devs/org/calculator/adapters/ImagePreviewAdapter.kt
@@ -129,13 +129,15 @@ class ImagePreviewAdapter(
mediaPlayer = MediaPlayer().apply {
setDataSource(file.absolutePath)
setOnPreparedListener { mp ->
- binding.audioSeekBar.max = mp.duration
+ binding.audioSeekBar.valueTo = mp.duration.toFloat()
+
isMediaPlayerPrepared = true
}
setOnCompletionListener {
// isPlaying = false
binding.playPause.setImageResource(R.drawable.play)
- binding.audioSeekBar.progress = 0
+ binding.audioSeekBar.value = 0f
+
seekHandler.removeCallbacks(seekRunnable!!)
}
prepareAsync()
@@ -143,27 +145,23 @@ class ImagePreviewAdapter(
}
private fun setupSeekBar() {
- binding.audioSeekBar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
- override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
- if (fromUser) {
- mediaPlayer?.seekTo(progress)
- }
+ binding.audioSeekBar.addOnChangeListener { slider, value, fromUser ->
+ if (fromUser && mediaPlayer != null && isMediaPlayerPrepared) {
+ mediaPlayer?.seekTo(value.toInt())
}
-
- override fun onStartTrackingTouch(seekBar: SeekBar?) {}
- override fun onStopTrackingTouch(seekBar: SeekBar?) {}
- })
+ }
seekRunnable = Runnable {
mediaPlayer?.let { mp ->
if (mp.isPlaying) {
- binding.audioSeekBar.progress = mp.currentPosition
+ binding.audioSeekBar.value = mp.currentPosition.toFloat()
seekHandler.postDelayed(seekRunnable!!, 100)
}
}
}
}
+
private fun setupPlaybackControls() {
binding.playPause.setOnClickListener {
if (isPlaying) {
@@ -177,7 +175,7 @@ class ImagePreviewAdapter(
mediaPlayer?.let { mp ->
val newPosition = mp.currentPosition - 10000
mp.seekTo(maxOf(0, newPosition))
- binding.audioSeekBar.progress = mp.currentPosition
+ binding.audioSeekBar.value = mp.currentPosition.toFloat()
}
}
@@ -185,7 +183,7 @@ class ImagePreviewAdapter(
mediaPlayer?.let { mp ->
val newPosition = mp.currentPosition + 10000
mp.seekTo(minOf(mp.duration, newPosition))
- binding.audioSeekBar.progress = mp.currentPosition
+ binding.audioSeekBar.value = mp.currentPosition.toFloat()
}
}
}
diff --git a/app/src/main/res/drawable/backspace.xml b/app/src/main/res/drawable/backspace.xml
index 7145fa9..6c3b6f0 100644
--- a/app/src/main/res/drawable/backspace.xml
+++ b/app/src/main/res/drawable/backspace.xml
@@ -2,12 +2,12 @@
diff --git a/app/src/main/res/drawable/gradient_bg.xml b/app/src/main/res/drawable/gradient_bg.xml
new file mode 100644
index 0000000..d20ff7b
--- /dev/null
+++ b/app/src/main/res/drawable/gradient_bg.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_audio.xml b/app/src/main/res/drawable/ic_audio.xml
index fecd069..fedf0ba 100644
--- a/app/src/main/res/drawable/ic_audio.xml
+++ b/app/src/main/res/drawable/ic_audio.xml
@@ -1,10 +1,5 @@
-
-
-
-
\ No newline at end of file
+
+
+
+
+
diff --git a/app/src/main/res/drawable/music.xml b/app/src/main/res/drawable/music.xml
deleted file mode 100644
index c2032f3..0000000
--- a/app/src/main/res/drawable/music.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/next.xml b/app/src/main/res/drawable/next.xml
index 9083cd8..5fd0022 100644
--- a/app/src/main/res/drawable/next.xml
+++ b/app/src/main/res/drawable/next.xml
@@ -5,6 +5,6 @@
android:viewportHeight="24">
diff --git a/app/src/main/res/drawable/pause.xml b/app/src/main/res/drawable/pause.xml
index e208617..9d3cb8d 100644
--- a/app/src/main/res/drawable/pause.xml
+++ b/app/src/main/res/drawable/pause.xml
@@ -5,8 +5,8 @@
android:viewportHeight="24">
+ android:fillColor="?attr/colorPrimary"/>
+ android:fillColor="?attr/colorPrimary"/>
diff --git a/app/src/main/res/drawable/previous.xml b/app/src/main/res/drawable/previous.xml
index 170179b..b4b1668 100644
--- a/app/src/main/res/drawable/previous.xml
+++ b/app/src/main/res/drawable/previous.xml
@@ -5,6 +5,6 @@
android:viewportHeight="24">
diff --git a/app/src/main/res/layout/activity_hidden.xml b/app/src/main/res/layout/activity_hidden.xml
index dfcc86b..1937a21 100644
--- a/app/src/main/res/layout/activity_hidden.xml
+++ b/app/src/main/res/layout/activity_hidden.xml
@@ -15,24 +15,26 @@
android:orientation="horizontal"
android:padding="8dp"
android:id="@+id/toolBar"
- android:layout_marginTop="25dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
-
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index ce127a7..5c3d1a2 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -7,7 +7,6 @@
android:layout_height="match_parent"
tools:context=".activities.MainActivity">
-
-
-
-
+ app:layout_constraintTop_toBottomOf="@id/displayContainer">
-
-
+ android:layout_weight="1"
+ android:orientation="horizontal">
-
+
+
+
+
+
+
+
+
+
+
+ android:layout_weight="1"
+ android:orientation="horizontal">
-
+
+
+
+
+
+
+
+
+
+
+ android:layout_weight="1"
+ android:orientation="horizontal">
-
+
+
+
+
+
+
+
+
+
+
+ android:layout_weight="1"
+ android:orientation="horizontal">
-
-
+
+
+
+
+
+
+
+
+
+
+ android:layout_weight="1"
+ android:orientation="horizontal">
-
+
-
+
-
+
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_preview.xml b/app/src/main/res/layout/activity_preview.xml
index caa6eb3..424fc03 100644
--- a/app/src/main/res/layout/activity_preview.xml
+++ b/app/src/main/res/layout/activity_preview.xml
@@ -15,6 +15,14 @@
android:paddingLeft="15dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" >
+
diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml
new file mode 100644
index 0000000..87d76b3
--- /dev/null
+++ b/app/src/main/res/layout/activity_settings.xml
@@ -0,0 +1,10 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_folder.xml b/app/src/main/res/layout/item_folder.xml
index e37c514..b298013 100644
--- a/app/src/main/res/layout/item_folder.xml
+++ b/app/src/main/res/layout/item_folder.xml
@@ -20,7 +20,7 @@
android:id="@+id/selectedLayer"
android:layout_width="match_parent"
android:layout_height="0dp"
- android:alpha="0.2"
+ android:alpha="0.3"
android:background="?attr/colorControlNormal"
android:orientation="horizontal"
android:visibility="gone"
diff --git a/app/src/main/res/layout/list_item_file.xml b/app/src/main/res/layout/list_item_file.xml
index aee1cfe..bba5461 100644
--- a/app/src/main/res/layout/list_item_file.xml
+++ b/app/src/main/res/layout/list_item_file.xml
@@ -3,8 +3,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
- android:orientation="vertical"
- android:padding="8dp">
+ android:orientation="vertical">
+
+
+
+ android:textAppearance="@style/TextAppearance.AppCompat.Small" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/list_item_folder.xml b/app/src/main/res/layout/list_item_folder.xml
deleted file mode 100644
index ab177b0..0000000
--- a/app/src/main/res/layout/list_item_folder.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/viewpager_items.xml b/app/src/main/res/layout/viewpager_items.xml
index 2e2fc38..4c34c7e 100644
--- a/app/src/main/res/layout/viewpager_items.xml
+++ b/app/src/main/res/layout/viewpager_items.xml
@@ -41,8 +41,9 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
- android:layout_margin="20dp"
- style="@style/Widget.Material3.CardView.Outlined">
+ app:cardCornerRadius="15dp"
+ app:cardElevation="10dp"
+ android:layout_margin="20dp">
-
- #FF000000
- #FFFFFFFF
+ #FF000000
+ #FFFFFFFF
#00B43B
diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml
index 8dc956e..219b5c5 100644
--- a/app/src/main/res/values-night/themes.xml
+++ b/app/src/main/res/values-night/themes.xml
@@ -18,4 +18,9 @@
- false
- false
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 4b0013e..54a708a 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -10,8 +10,13 @@
Rename File
Share File
Add Document
+ Failed to hide Audios
+ Failed to hide Documents
No files selected
- Files hidden successfully
+ Files hidden successfully
+ Failed to hide/unhide photo
+ Images hidden successfully
+ Failed to hide images
Failed to hide files
Storage permissions granted
Storage permissions denied
@@ -43,22 +48,47 @@
Answer cannot be empty!
Password successfully reset.
Invalid answer!
+ Videos hidden successfully
+ Failed to hide videos
IMAGE
VIDEO
AUDIO
Delete
Create
+ Delete Folder
Rename
+ Cannot Delete Folder
DOCUMENT
No audio player found!
No suitable app found to open this document!
- Enter 123456
+ Unknown File
+ DETAILS
+ Audios hidden successfully
+ No Items Available, Add one by clicking on the
Now Enter \'=\' button
+ Enter 123456
+ Create Folder
+ Enter folder name
+ Folder already exists
+ Folder Options
+ Rename Folder
+ Enter new folder name
+ Failed to create folder
+ Are you sure you want to delete this folder?
+ Yes
+ Error loading files
Delete Folder
Are you sure you want to delete selected Folders?
+ Items deleted successfully
Folder deleted successfully
Some items could not be deleted
Hidden Space
There was a problem in the Folder
+ Hiding Files
File Will Now Show In Gallery
+ File unhidden but failed to remove from hidden folder
+ Failed to unhidden file
+ Failed to create URI for file
+ Error unhiding file: %1$s
+ Select Multiple
\ No newline at end of file
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index aead0f3..6a72d8f 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -20,4 +20,9 @@
+
+
\ No newline at end of file