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
}
}

View File

@@ -62,7 +62,7 @@ abstract class BaseGalleryActivity : AppCompatActivity() {
adapter.submitList(files)
}
abstract fun openPreview(file: File)
abstract fun openPreview()
private fun checkPermissions() {
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
}
}

View File

@@ -1,7 +1,6 @@
package devs.org.calculator.activities
import android.app.RecoverableSecurityException
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Build
@@ -14,10 +13,8 @@ import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.IntentSenderRequest
import androidx.activity.result.contract.ActivityResultContracts
import androidx.documentfile.provider.DocumentFile
import androidx.lifecycle.lifecycleScope
import devs.org.calculator.utils.FileManager
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import java.io.File
@@ -28,62 +25,6 @@ class ImageGalleryActivity : BaseGalleryActivity() {
private var selectedImageUri: Uri? = null
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?) {
super.onCreate(savedInstanceState)
setupIntentSenderLauncher()
@@ -156,10 +97,9 @@ class ImageGalleryActivity : BaseGalleryActivity() {
}
}
override fun openPreview(file: File) {
override fun openPreview() {
val intent = Intent(this, PreviewActivity::class.java).apply {
putExtra(PreviewActivity.EXTRA_FILE_PATH, file.absolutePath)
putExtra(PreviewActivity.EXTRA_FILE_TYPE, fileType.name)
putExtra("type", fileType)
}
startActivity(intent)
}

View File

@@ -1,22 +1,14 @@
package devs.org.calculator.activities
import ImagePreviewAdapter
import android.os.Bundle
import android.view.View
import android.widget.MediaController
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.utils.FileManager
import java.io.File
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 var currentPosition: Int = 0
private lateinit var files: List<File>
@@ -41,7 +33,6 @@ class PreviewActivity : AppCompatActivity() {
private fun setupImagePreview() {
val adapter = ImagePreviewAdapter(this, files)
binding.viewPager.adapter = adapter
binding.viewPager.currentItem = currentPosition
}
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 {
putExtra(PreviewActivity.EXTRA_FILE_PATH, file.absolutePath)
putExtra(PreviewActivity.EXTRA_FILE_TYPE, fileType.name)
putExtra("type", fileType)
}
startActivity(intent)
}

View File

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

View File

@@ -1,5 +1,6 @@
<?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_height="match_parent"
android:orientation="vertical">
@@ -8,12 +9,44 @@
android:id="@+id/toolbar"
android:layout_width="match_parent"
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:layout_width="match_parent"
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>