17
17
package com.example.background
18
18
19
19
import android.Manifest
20
- import android.app.Activity
21
- import android.content.Intent
22
20
import android.content.pm.PackageManager
23
21
import android.os.Build
24
22
import android.os.Bundle
@@ -28,13 +26,15 @@ import android.text.Spanned
28
26
import android.text.method.LinkMovementMethod
29
27
import android.util.Log
30
28
import android.view.View
29
+ import androidx.activity.result.PickVisualMediaRequest
30
+ import androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia
31
+ import androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.ImageOnly
31
32
import androidx.annotation.VisibleForTesting
32
33
import androidx.appcompat.app.AppCompatActivity
33
34
import androidx.core.app.ActivityCompat
34
35
import androidx.core.content.ContextCompat
35
36
import com.example.background.databinding.ActivitySelectBinding
36
37
import com.google.android.material.snackbar.Snackbar
37
- import java.util.ArrayList
38
38
39
39
/* *
40
40
* Helps select an image for the [FilterActivity] and handles permission requests.
@@ -46,6 +46,13 @@ class SelectImageActivity : AppCompatActivity() {
46
46
private var permissionRequestCount = 0
47
47
private var hasPermissions = false
48
48
49
+ private val pickPictureCallback = registerForActivityResult(PickVisualMedia ()) { uri ->
50
+ if (uri == null )
51
+ Log .e(TAG , " Invalid input image Uri." )
52
+ else
53
+ startActivity(FilterActivity .newIntent(this , uri))
54
+ }
55
+
49
56
override fun onCreate (savedInstanceState : Bundle ? ) {
50
57
super .onCreate(savedInstanceState)
51
58
val binding = ActivitySelectBinding .inflate(layoutInflater).apply {
@@ -69,11 +76,7 @@ class SelectImageActivity : AppCompatActivity() {
69
76
requestPermissionsIfNecessary()
70
77
71
78
binding.selectImage.setOnClickListener {
72
- val chooseIntent = Intent (
73
- Intent .ACTION_PICK ,
74
- MediaStore .Images .Media .EXTERNAL_CONTENT_URI
75
- )
76
- startActivityForResult(chooseIntent, REQUEST_CODE_IMAGE )
79
+ pickPictureCallback.launch(PickVisualMediaRequest (ImageOnly ))
77
80
}
78
81
79
82
binding.selectStockImage.setOnClickListener {
@@ -90,18 +93,6 @@ class SelectImageActivity : AppCompatActivity() {
90
93
outState.putInt(KEY_PERMISSIONS_REQUEST_COUNT , permissionRequestCount)
91
94
}
92
95
93
- override fun onActivityResult (requestCode : Int , resultCode : Int , data : Intent ? ) {
94
- super .onActivityResult(requestCode, resultCode, data)
95
- if (resultCode == Activity .RESULT_OK && data != null ) {
96
- when (requestCode) {
97
- REQUEST_CODE_IMAGE -> handleImageRequestResult(data)
98
- else -> Log .d(TAG , " Unknown request code." )
99
- }
100
- } else {
101
- Log .e(TAG , String .format(" Unexpected Result code \" %s\" or missing data." , resultCode))
102
- }
103
- }
104
-
105
96
override fun onRequestPermissionsResult (
106
97
requestCode : Int ,
107
98
permissions : Array <String >,
@@ -139,17 +130,6 @@ class SelectImageActivity : AppCompatActivity() {
139
130
}
140
131
}
141
132
142
- private fun handleImageRequestResult (data : Intent ) {
143
- // Get the imageUri the user picked, from the Intent.ACTION_PICK result.
144
- val imageUri = data.clipData!! .getItemAt(0 ).uri
145
-
146
- if (imageUri == null ) {
147
- Log .e(TAG , " Invalid input image Uri." )
148
- return
149
- }
150
- startActivity(FilterActivity .newIntent(this , imageUri))
151
- }
152
-
153
133
private fun checkAllPermissions (): Boolean {
154
134
var hasPermissions = true
155
135
for (permission in sPermissions) {
@@ -166,7 +146,6 @@ class SelectImageActivity : AppCompatActivity() {
166
146
private const val KEY_PERMISSIONS_REQUEST_COUNT = " KEY_PERMISSIONS_REQUEST_COUNT"
167
147
168
148
private const val MAX_NUMBER_REQUEST_PERMISSIONS = 2
169
- private const val REQUEST_CODE_IMAGE = 100
170
149
private const val REQUEST_CODE_PERMISSIONS = 101
171
150
172
151
// A list of permissions the application needs.
0 commit comments