From 88dcc844c8af94d00fd7e525cf179111d72a80cd Mon Sep 17 00:00:00 2001 From: Binondi Date: Mon, 2 Jun 2025 12:44:48 +0530 Subject: [PATCH] Changes For Folder Feature --- app/build.gradle.kts | 6 +- app/src/main/AndroidManifest.xml | 3 + .../calculator/activities/HiddenActivity.kt | 18 +- .../calculator/activities/PreviewActivity.kt | 4 + .../calculator/activities/SettingsActivity.kt | 20 + .../org/calculator/adapters/FileAdapter.kt | 227 ++++++++- .../adapters/ImagePreviewAdapter.kt | 26 +- app/src/main/res/drawable/backspace.xml | 4 +- app/src/main/res/drawable/gradient_bg.xml | 5 + app/src/main/res/drawable/ic_audio.xml | 15 +- app/src/main/res/drawable/music.xml | 9 - app/src/main/res/drawable/next.xml | 2 +- app/src/main/res/drawable/pause.xml | 4 +- app/src/main/res/drawable/previous.xml | 2 +- app/src/main/res/layout/activity_hidden.xml | 12 +- app/src/main/res/layout/activity_main.xml | 475 +++++++++--------- app/src/main/res/layout/activity_preview.xml | 15 +- app/src/main/res/layout/activity_settings.xml | 10 + app/src/main/res/layout/item_folder.xml | 2 +- app/src/main/res/layout/list_item_file.xml | 35 +- app/src/main/res/layout/list_item_folder.xml | 15 - app/src/main/res/layout/viewpager_items.xml | 11 +- app/src/main/res/values-night/colors.xml | 4 +- app/src/main/res/values-night/themes.xml | 5 + app/src/main/res/values/strings.xml | 34 +- app/src/main/res/values/themes.xml | 5 + 26 files changed, 641 insertions(+), 327 deletions(-) create mode 100644 app/src/main/java/devs/org/calculator/activities/SettingsActivity.kt create mode 100644 app/src/main/res/drawable/gradient_bg.xml delete mode 100644 app/src/main/res/drawable/music.xml create mode 100644 app/src/main/res/layout/activity_settings.xml delete mode 100644 app/src/main/res/layout/list_item_folder.xml 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