Made some changes
This commit is contained in:
BIN
app/src/main/assets/logo.png
Normal file
BIN
app/src/main/assets/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 24 KiB |
@@ -54,7 +54,7 @@ class AudioGalleryActivity : BaseGalleryActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
override fun openPreview(file: File) {
|
||||
override fun openPreview() {
|
||||
// Implement audio preview
|
||||
}
|
||||
}
|
||||
@@ -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) {
|
||||
|
||||
@@ -54,7 +54,7 @@ class DocumentsActivity : BaseGalleryActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
override fun openPreview(file: File) {
|
||||
override fun openPreview() {
|
||||
// Implement document preview
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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>
|
||||
Reference in New Issue
Block a user