Made some changes

This commit is contained in:
Binondi
2024-12-14 11:23:17 +05:30
parent bbe86b8b5a
commit 0baf04d3bb
9 changed files with 65 additions and 105 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@@ -54,7 +54,7 @@ class AudioGalleryActivity : BaseGalleryActivity() {
} }
} }
override fun openPreview(file: File) { override fun openPreview() {
// Implement audio preview // Implement audio preview
} }
} }

View File

@@ -62,7 +62,7 @@ abstract class BaseGalleryActivity : AppCompatActivity() {
adapter.submitList(files) adapter.submitList(files)
} }
abstract fun openPreview(file: File) abstract fun openPreview()
private fun checkPermissions() { private fun checkPermissions() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {

View File

@@ -54,7 +54,7 @@ class DocumentsActivity : BaseGalleryActivity() {
} }
} }
override fun openPreview(file: File) { override fun openPreview() {
// Implement document preview // Implement document preview
} }
} }

View File

@@ -1,7 +1,6 @@
package devs.org.calculator.activities package devs.org.calculator.activities
import android.app.RecoverableSecurityException import android.app.RecoverableSecurityException
import android.content.Context
import android.content.Intent import android.content.Intent
import android.net.Uri import android.net.Uri
import android.os.Build import android.os.Build
@@ -14,10 +13,8 @@ import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.IntentSenderRequest import androidx.activity.result.IntentSenderRequest
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.documentfile.provider.DocumentFile import androidx.documentfile.provider.DocumentFile
import androidx.lifecycle.lifecycleScope
import devs.org.calculator.utils.FileManager import devs.org.calculator.utils.FileManager
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import java.io.File import java.io.File
@@ -28,62 +25,6 @@ class ImageGalleryActivity : BaseGalleryActivity() {
private var selectedImageUri: Uri? = null private var selectedImageUri: Uri? = null
private lateinit var pickImageLauncher: ActivityResultLauncher<Intent> private lateinit var pickImageLauncher: ActivityResultLauncher<Intent>
private suspend fun deletePhotoFromExternalStorage(photoUri: Uri) {
withContext(Dispatchers.IO) {
try {
// First try to delete using DocumentFile
val documentFile = DocumentFile.fromSingleUri(this@ImageGalleryActivity, photoUri)
if (documentFile?.exists() == true && documentFile.canWrite()) {
val deleted = documentFile.delete()
withContext(Dispatchers.Main) {
if (deleted) {
Toast.makeText(this@ImageGalleryActivity, "File deleted successfully", Toast.LENGTH_SHORT).show()
selectedImageUri = null
} else {
Toast.makeText(this@ImageGalleryActivity, "Failed to delete file", Toast.LENGTH_SHORT).show()
}
}
return@withContext
}
// If DocumentFile approach fails, try content resolver
try {
contentResolver.delete(photoUri, null, null)
withContext(Dispatchers.Main) {
Toast.makeText(this@ImageGalleryActivity, "File deleted successfully", Toast.LENGTH_SHORT).show()
}
} catch (e: SecurityException) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
val intentSender = when {
Build.VERSION.SDK_INT >= Build.VERSION_CODES.R -> {
MediaStore.createDeleteRequest(contentResolver, listOf(photoUri)).intentSender
}
else -> {
val recoverableSecurityException = e as? RecoverableSecurityException
recoverableSecurityException?.userAction?.actionIntent?.intentSender
}
}
intentSender?.let { sender ->
withContext(Dispatchers.Main) {
intentSenderLauncher.launch(
IntentSenderRequest.Builder(sender).build()
)
}
}
}
}
} catch (e: Exception) {
withContext(Dispatchers.Main) {
Toast.makeText(
this@ImageGalleryActivity,
"Error deleting file: ${e.message}",
Toast.LENGTH_LONG
).show()
}
}
}
}
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setupIntentSenderLauncher() setupIntentSenderLauncher()
@@ -156,10 +97,9 @@ class ImageGalleryActivity : BaseGalleryActivity() {
} }
} }
override fun openPreview(file: File) { override fun openPreview() {
val intent = Intent(this, PreviewActivity::class.java).apply { val intent = Intent(this, PreviewActivity::class.java).apply {
putExtra(PreviewActivity.EXTRA_FILE_PATH, file.absolutePath) putExtra("type", fileType)
putExtra(PreviewActivity.EXTRA_FILE_TYPE, fileType.name)
} }
startActivity(intent) startActivity(intent)
} }

View File

@@ -1,22 +1,14 @@
package devs.org.calculator.activities package devs.org.calculator.activities
import ImagePreviewAdapter
import android.os.Bundle import android.os.Bundle
import android.view.View
import android.widget.MediaController
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import com.bumptech.glide.Glide import devs.org.calculator.adapters.ImagePreviewAdapter
import devs.org.calculator.databinding.ActivityPreviewBinding import devs.org.calculator.databinding.ActivityPreviewBinding
import devs.org.calculator.utils.FileManager
import java.io.File import java.io.File
class PreviewActivity : AppCompatActivity() { class PreviewActivity : AppCompatActivity() {
companion object {
const val EXTRA_FILE_PATH = "file_path"
const val EXTRA_FILE_TYPE = "file_type"
}
private lateinit var binding: ActivityPreviewBinding private lateinit var binding: ActivityPreviewBinding
private var currentPosition: Int = 0 private var currentPosition: Int = 0
private lateinit var files: List<File> private lateinit var files: List<File>
@@ -41,7 +33,6 @@ class PreviewActivity : AppCompatActivity() {
private fun setupImagePreview() { private fun setupImagePreview() {
val adapter = ImagePreviewAdapter(this, files) val adapter = ImagePreviewAdapter(this, files)
binding.viewPager.adapter = adapter binding.viewPager.adapter = adapter
binding.viewPager.currentItem = currentPosition
} }
override fun onSupportNavigateUp(): Boolean { override fun onSupportNavigateUp(): Boolean {

View File

@@ -55,10 +55,9 @@ class VideoGalleryActivity : BaseGalleryActivity() {
} }
} }
override fun openPreview(file: File) { override fun openPreview() {
val intent = Intent(this, PreviewActivity::class.java).apply { val intent = Intent(this, PreviewActivity::class.java).apply {
putExtra(PreviewActivity.EXTRA_FILE_PATH, file.absolutePath) putExtra("type", fileType)
putExtra(PreviewActivity.EXTRA_FILE_TYPE, fileType.name)
} }
startActivity(intent) startActivity(intent)
} }

View File

@@ -1,36 +1,33 @@
package devs.org.calculator.adapters
import android.content.Context import android.content.Context
import android.view.View import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.viewpager.widget.PagerAdapter import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.github.chrisbanes.photoview.PhotoView import devs.org.calculator.databinding.ItemFileBinding
import java.io.File import java.io.File
class ImagePreviewAdapter( class ImagePreviewAdapter(
private val context: Context, private val context: Context,
private val images: List<File> private val images: List<File>
) : PagerAdapter() { ) : RecyclerView.Adapter<ImagePreviewAdapter.ImageViewHolder>() {
override fun instantiateItem(container: ViewGroup, position: Int): Any { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ImageViewHolder {
val photoView = PhotoView(context) val binding = ItemFileBinding.inflate(
photoView.layoutParams = ViewGroup.LayoutParams( LayoutInflater.from(context), parent, false
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
) )
return ImageViewHolder(binding)
}
override fun onBindViewHolder(holder: ImageViewHolder, position: Int) {
val imageUrl = images[position]
Glide.with(context) Glide.with(context)
.load(images[position]) .load(imageUrl)
.into(photoView) .into(holder.binding.imageView)
container.addView(photoView)
return photoView
} }
override fun destroyItem(container: ViewGroup, position: Int, obj: Any) { override fun getItemCount(): Int = images.size
container.removeView(obj as View)
}
override fun getCount(): Int = images.size inner class ImageViewHolder(val binding: ItemFileBinding) : RecyclerView.ViewHolder(binding.root)
}
override fun isViewFromObject(view: View, obj: Any): Boolean = view === obj
}

View File

@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical"> android:orientation="vertical">
@@ -8,12 +9,44 @@
android:id="@+id/toolbar" android:id="@+id/toolbar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize" android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary" /> android:background="?attr/colorPrimary"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.viewpager.widget.ViewPager <androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager" android:id="@+id/viewPager"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:layout_weight="1" /> app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar" />
</LinearLayout> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="horizontal"
android:padding="8dp"
app:layout_constraintBottom_toBottomOf="@+id/viewPager"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<com.google.android.material.button.MaterialButton
android:id="@+id/unhide"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="6dp"
android:text="Unhide" />
<com.google.android.material.button.MaterialButton
android:id="@+id/delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="6dp"
android:text="Delete" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>