diff --git a/app/src/main/assets/logo.png b/app/src/main/assets/logo.png new file mode 100644 index 0000000..1a162e8 Binary files /dev/null and b/app/src/main/assets/logo.png differ diff --git a/app/src/main/java/devs/org/calculator/activities/AudioGalleryActivity.kt b/app/src/main/java/devs/org/calculator/activities/AudioGalleryActivity.kt index c1e54c7..0af1f16 100644 --- a/app/src/main/java/devs/org/calculator/activities/AudioGalleryActivity.kt +++ b/app/src/main/java/devs/org/calculator/activities/AudioGalleryActivity.kt @@ -54,7 +54,7 @@ class AudioGalleryActivity : BaseGalleryActivity() { } } - override fun openPreview(file: File) { + override fun openPreview() { // Implement audio preview } } \ No newline at end of file diff --git a/app/src/main/java/devs/org/calculator/activities/BaseGalleryActivity.kt b/app/src/main/java/devs/org/calculator/activities/BaseGalleryActivity.kt index 1e533b9..5ad2f47 100644 --- a/app/src/main/java/devs/org/calculator/activities/BaseGalleryActivity.kt +++ b/app/src/main/java/devs/org/calculator/activities/BaseGalleryActivity.kt @@ -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) { diff --git a/app/src/main/java/devs/org/calculator/activities/DocumentsActivity.kt b/app/src/main/java/devs/org/calculator/activities/DocumentsActivity.kt index 18378cd..149d78c 100644 --- a/app/src/main/java/devs/org/calculator/activities/DocumentsActivity.kt +++ b/app/src/main/java/devs/org/calculator/activities/DocumentsActivity.kt @@ -54,7 +54,7 @@ class DocumentsActivity : BaseGalleryActivity() { } } - override fun openPreview(file: File) { + override fun openPreview() { // Implement document preview } } \ No newline at end of file diff --git a/app/src/main/java/devs/org/calculator/activities/ImageGalleryActivity.kt b/app/src/main/java/devs/org/calculator/activities/ImageGalleryActivity.kt index 60ad82a..6786395 100644 --- a/app/src/main/java/devs/org/calculator/activities/ImageGalleryActivity.kt +++ b/app/src/main/java/devs/org/calculator/activities/ImageGalleryActivity.kt @@ -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 - 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) } 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 e690e58..fd81d72 100644 --- a/app/src/main/java/devs/org/calculator/activities/PreviewActivity.kt +++ b/app/src/main/java/devs/org/calculator/activities/PreviewActivity.kt @@ -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 @@ -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 { diff --git a/app/src/main/java/devs/org/calculator/activities/VideoGalleryActivity.kt b/app/src/main/java/devs/org/calculator/activities/VideoGalleryActivity.kt index ed72f2b..6de8b31 100644 --- a/app/src/main/java/devs/org/calculator/activities/VideoGalleryActivity.kt +++ b/app/src/main/java/devs/org/calculator/activities/VideoGalleryActivity.kt @@ -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) } 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 9017324..62559dd 100644 --- a/app/src/main/java/devs/org/calculator/adapters/ImagePreviewAdapter.kt +++ b/app/src/main/java/devs/org/calculator/adapters/ImagePreviewAdapter.kt @@ -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 -) : PagerAdapter() { +) : RecyclerView.Adapter() { - 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 -} \ No newline at end of file + inner class ImageViewHolder(val binding: ItemFileBinding) : RecyclerView.ViewHolder(binding.root) +} \ 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 b3b88ad..4d16007 100644 --- a/app/src/main/res/layout/activity_preview.xml +++ b/app/src/main/res/layout/activity_preview.xml @@ -1,5 +1,6 @@ - @@ -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" /> - + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/toolbar" /> - \ No newline at end of file + + + + + + + + + \ No newline at end of file