diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1f8d06b..7b4f982 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -5,6 +5,8 @@
+
- viewModel.deleteImage(image)
+// viewModel.deleteImage(image)
+
+ val pendingIntent = MediaStore.createDeleteRequest(contentResolver, arrayListOf(image.contentUri))
+ val intentSenderRequest = IntentSenderRequest.Builder(pendingIntent.intentSender).build()
+ startIntentSenderForResult(pendingIntent.intentSender, 42, null, 0, 0, 0, null)
}
.setNegativeButton(R.string.delete_dialog_negative) { dialog: DialogInterface, _: Int ->
dialog.dismiss()
@@ -224,6 +246,28 @@ class HistoryActivity : AppCompatActivity(){
return true
}
+ @OptIn(DelicateCoroutinesApi::class)
+ private fun deleteAllImages() {
+ MaterialAlertDialogBuilder(this)
+ .setTitle(R.string.delete_dialog_title)
+ .setMessage(getString(R.string.delete_all_dialog_message))
+ .setPositiveButton(R.string.delete_dialog_positive) { _: DialogInterface, _: Int ->
+// viewModel.deleteImage(image)
+ GlobalScope.launch {
+ val list = withContext(Dispatchers.IO){
+ getUriList()
+ }
+ val pendingIntent = MediaStore.createDeleteRequest(contentResolver, list)
+ startIntentSenderForResult(pendingIntent.intentSender, 42, null, 0, 0, 0, null)
+ }
+// val intentSenderRequest = IntentSenderRequest.Builder(pendingIntent.intentSender).build()
+ }
+ .setNegativeButton(R.string.delete_dialog_negative) { dialog: DialogInterface, _: Int ->
+ dialog.dismiss()
+ }
+ .show()
+ }
+
/**
* A [ListAdapter] for [MediaStoreImage]s.
*/
@@ -251,10 +295,10 @@ class HistoryActivity : AppCompatActivity(){
val mediaStoreImage = getItem(position)
holder.rootView.tag = mediaStoreImage
- val labelView: ImageView = holder.rootView.findViewById(R.id.image_label_horizontal)
-
if (mediaStoreImage.width > mediaStoreImage.height){
- labelView.visibility = View.VISIBLE
+ holder.labelView.visibility = View.VISIBLE
+ }else{
+ holder.labelView.visibility = View.INVISIBLE
}
Glide.with(holder.imageView)
@@ -276,6 +320,13 @@ class HistoryActivity : AppCompatActivity(){
}
startActivity(intent)
}
+
+ private suspend fun getUriList(): ArrayList {
+ val uriList = ArrayList()
+ val images = viewModel.queryImages()
+ for (image in images) uriList.add(image.contentUri)
+ return uriList
+ }
}
/**
@@ -285,6 +336,7 @@ private class ImageViewHolder(view: View, onClick: (MediaStoreImage) -> Unit, on
RecyclerView.ViewHolder(view) {
val rootView = view
val imageView: ImageView = view.findViewById(R.id.image)
+ val labelView: ImageView = view.findViewById(R.id.image_label_horizontal)
init {
diff --git a/app/src/main/java/com/maary/shareas/HistoryActivityViewModel.kt b/app/src/main/java/com/maary/shareas/HistoryActivityViewModel.kt
index 589aca1..fa5d917 100644
--- a/app/src/main/java/com/maary/shareas/HistoryActivityViewModel.kt
+++ b/app/src/main/java/com/maary/shareas/HistoryActivityViewModel.kt
@@ -1,6 +1,7 @@
package com.maary.shareas
import android.annotation.SuppressLint
+import android.app.Activity
import android.app.Application
import android.app.RecoverableSecurityException
import android.content.*
@@ -21,6 +22,7 @@ import kotlinx.coroutines.withContext
import java.text.SimpleDateFormat
import java.util.*
import java.util.concurrent.TimeUnit
+import kotlin.collections.ArrayList
class HistoryActivityViewModel(application: Application) : AndroidViewModel(application) {
private val _images = MutableLiveData>()
@@ -51,6 +53,17 @@ class HistoryActivityViewModel(application: Application) : AndroidViewModel(appl
}
}
+ fun getUriList(): ArrayList {
+ val uriList = ArrayList()
+ viewModelScope.launch {
+ val images = queryImages()
+
+ for (image in images) uriList.add(image.contentUri)
+
+ }
+ return uriList
+ }
+
fun deleteImage(image: MediaStoreImage) {
viewModelScope.launch {
performDeleteImage(image)
@@ -64,7 +77,7 @@ class HistoryActivityViewModel(application: Application) : AndroidViewModel(appl
}
}
- private suspend fun queryImages(): List {
+ suspend fun queryImages(): List {
val images = mutableListOf()
/**
@@ -235,7 +248,9 @@ class HistoryActivityViewModel(application: Application) : AndroidViewModel(appl
id
)
- val image = MediaStoreImage(id, displayName, dateModified, contentUri, width, height)
+ val image = MediaStoreImage(id, displayName, dateModified, contentUri, width = width, height = height)
+
+ Log.v("WLAP", width.toString() + " " + height.toString())
images += image
// For debugging, we'll output the image objects we create to logcat.
@@ -271,11 +286,15 @@ class HistoryActivityViewModel(application: Application) : AndroidViewModel(appl
* activity can use to prompt the user to grant permission to the item
* so it can be either updated or deleted.
*/
- getApplication().contentResolver.delete(
- image.contentUri,
- "${MediaStore.Images.Media._ID} = ?",
- arrayOf(image.id.toString())
- )
+
+ val pendingIntent = MediaStore.createDeleteRequest(getApplication().contentResolver, arrayListOf(image.contentUri))
+// getApplication().startIntentSenderForResult(pendingIntent.intentSender, null, 0, 0, 0)
+
+// getApplication().contentResolver.delete(
+// image.contentUri,
+// "${MediaStore.Images.Media._ID} = ?",
+// arrayOf(image.id.toString())
+// )
} catch (securityException: SecurityException) {
val recoverableSecurityException =
securityException as? RecoverableSecurityException
diff --git a/app/src/main/java/com/maary/shareas/MainActivity.java b/app/src/main/java/com/maary/shareas/MainActivity.java
index f377da3..5f9f63a 100644
--- a/app/src/main/java/com/maary/shareas/MainActivity.java
+++ b/app/src/main/java/com/maary/shareas/MainActivity.java
@@ -16,10 +16,12 @@
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
+import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.provider.MediaStore;
+import android.provider.Settings;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
@@ -36,6 +38,7 @@
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.view.menu.ActionMenuItemView;
@@ -426,6 +429,7 @@ private AlertDialog createSliderDialog(int title){
}
//询问是否需要保存壁纸历史记录
+ @RequiresApi(api = Build.VERSION_CODES.S)
private AlertDialog saveHistoryDialog(){
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this);
builder.setMessage(R.string.dialog_wallpaper_history)
@@ -441,6 +445,11 @@ private AlertDialog saveHistoryDialog(){
getApplicationContext(), Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
requestPermissionLauncher.launch(Manifest.permission.READ_EXTERNAL_STORAGE);
}
+ if (ContextCompat.checkSelfPermission(
+ getApplicationContext(), Manifest.permission.MANAGE_MEDIA) != PackageManager.PERMISSION_GRANTED){
+ Intent intent = new Intent(Settings.ACTION_REQUEST_MANAGE_MEDIA);
+ startActivity(intent);
+ }
}
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
diff --git a/app/src/main/res/layout/activity_history.xml b/app/src/main/res/layout/activity_history.xml
index 1d3ccf8..66d2231 100644
--- a/app/src/main/res/layout/activity_history.xml
+++ b/app/src/main/res/layout/activity_history.xml
@@ -10,40 +10,40 @@
tools:context=".MainActivity">
+ android:fitsSystemWindows="true"
+ android:stateListAnimator="@null"
+ app:liftOnScroll="true">
+ app:layout_constraintTop_toTopOf="parent" />
-
+ app:icon="@drawable/ic_action_close"
+ app:layout_constraintLeft_toLeftOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
@@ -53,9 +53,9 @@
android:id="@+id/gallery"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:paddingTop="?attr/actionBarSize"
android:clipChildren="false"
- android:clipToPadding="false"/>
+ android:clipToPadding="false"
+ android:paddingTop="?attr/actionBarSize" />
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 0776c94..6d3f877 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -29,7 +29,8 @@
device_height
device_width
tunnel_preferences
- Used Wallpaper
+ Used Wallpapers
Delete All
Delete all used wallpapers listed here.
+ Delete all used wallpapers?