Kick pickVisualMediaLauncher out of GalleryListScene scope
This commit is contained in:
1 parent
185d47fcdf
commit
ae3caf84b5
4 files changed
+32
-36
No files matched your search
@@ -20,7 +20,6 @@ import android.annotation.SuppressLint
|
||||
import android.content.DialogInterface
|
||||
import android.content.Intent
|
||||
import android.content.res.Resources
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.text.InputType
|
||||
import android.text.Spannable
|
||||
@@ -35,9 +34,6 @@ import android.view.ViewGroup
|
||||
import android.view.ViewPropertyAnimator
|
||||
import android.widget.TextView
|
||||
import androidx.activity.OnBackPressedCallback
|
||||
import androidx.activity.result.PickVisualMediaRequest
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.ImageOnly
|
||||
import androidx.annotation.IntDef
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.view.GravityCompat
|
||||
@@ -117,12 +113,7 @@ import java.time.ZoneId
|
||||
import java.time.ZoneOffset
|
||||
import com.hippo.ehviewer.download.DownloadManager as downloadManager
|
||||
|
||||
class GalleryListScene :
|
||||
SearchBarScene(),
|
||||
OnDragHandlerListener,
|
||||
SearchLayout.Helper,
|
||||
OnClickFabListener,
|
||||
OnExpandListener {
|
||||
class GalleryListScene : SearchBarScene(), OnDragHandlerListener, SearchLayout.Helper, OnClickFabListener, OnExpandListener {
|
||||
private val mCallback = object : OnBackPressedCallback(false) {
|
||||
override fun handleOnBackPressed() {
|
||||
when (mState) {
|
||||
@@ -135,9 +126,6 @@ class GalleryListScene :
|
||||
private lateinit var mUrlBuilder: ListUrlBuilder
|
||||
private var _binding: SceneGalleryListBinding? = null
|
||||
private val binding get() = _binding!!
|
||||
private val selectImageLauncher = registerForActivityResult<PickVisualMediaRequest, Uri>(
|
||||
ActivityResultContracts.PickVisualMedia(),
|
||||
) { result: Uri? -> binding.searchLayout.setImageUri(result) }
|
||||
private var mSearchFab: View? = null
|
||||
private val mSearchFabAnimatorListener: Animator.AnimatorListener =
|
||||
object : SimpleAnimatorListener() {
|
||||
@@ -1056,12 +1044,6 @@ class GalleryListScene :
|
||||
showSearchBar()
|
||||
}
|
||||
|
||||
override fun onSelectImage() {
|
||||
val builder = PickVisualMediaRequest.Builder()
|
||||
builder.setMediaType(ImageOnly)
|
||||
selectImageLauncher.launch(builder.build())
|
||||
}
|
||||
|
||||
private fun onGetGalleryListSuccess(result: GalleryListParser.Result, taskId: Int) {
|
||||
if (Settings.preloadThumbAggressively) {
|
||||
lifecycleScope.launchIO {
|
||||
|
||||
@@ -123,9 +123,6 @@ public final class ImageSearchLayout extends LinearLayout implements View.OnClic
|
||||
try {
|
||||
var src = ImageDecoder.createSource(context.getContentResolver(), imageUri);
|
||||
Bitmap bitmap = ImageDecoder.decodeBitmap(src, Image.getImageSearchDecoderSampleListener());
|
||||
if (null == bitmap) {
|
||||
return;
|
||||
}
|
||||
File temp = AppConfig.createTempFile();
|
||||
if (null == temp) {
|
||||
return;
|
||||
|
||||
@@ -21,7 +21,6 @@ package com.hippo.ehviewer.widget
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import android.net.Uri
|
||||
import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
@@ -31,9 +30,12 @@ import android.widget.CompoundButton
|
||||
import android.widget.FrameLayout
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.ImageOnly
|
||||
import androidx.annotation.IntDef
|
||||
import androidx.core.content.edit
|
||||
import androidx.core.view.forEach
|
||||
import androidx.lifecycle.findViewTreeLifecycleOwner
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.preference.PreferenceManager
|
||||
import androidx.recyclerview.widget.DefaultItemAnimator
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
@@ -49,9 +51,11 @@ import com.hippo.ehviewer.R
|
||||
import com.hippo.ehviewer.client.EhUtils
|
||||
import com.hippo.ehviewer.client.data.ListUrlBuilder
|
||||
import com.hippo.ehviewer.client.exception.EhException
|
||||
import com.hippo.util.pickVisualMedia
|
||||
import com.hippo.widget.RadioGridGroup
|
||||
import com.hippo.yorozuya.NumberUtils
|
||||
import com.hippo.yorozuya.ViewUtils
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@SuppressLint("InflateParams")
|
||||
class SearchLayout @JvmOverloads constructor(
|
||||
@@ -60,7 +64,6 @@ class SearchLayout @JvmOverloads constructor(
|
||||
) : EasyRecyclerView(context, attrs),
|
||||
CompoundButton.OnCheckedChangeListener,
|
||||
View.OnClickListener,
|
||||
ImageSearchLayout.Helper,
|
||||
OnTabSelectedListener {
|
||||
|
||||
@SearchMode
|
||||
@@ -145,7 +148,12 @@ class SearchLayout @JvmOverloads constructor(
|
||||
mTableAdvanceSearch = mAdvanceView.findViewById(R.id.search_advance_search_table)
|
||||
// Create image view
|
||||
mImageView = mInflater.inflate(R.layout.search_image, null) as ImageSearchLayout
|
||||
mImageView.setHelper(this)
|
||||
mImageView.setHelper {
|
||||
findViewTreeLifecycleOwner()!!.lifecycleScope.launch {
|
||||
val uri = pickVisualMedia(ImageOnly)
|
||||
mImageView.setImageUri(uri)
|
||||
}
|
||||
}
|
||||
// Create action view
|
||||
mActionView = mInflater.inflate(R.layout.search_action, null)
|
||||
mActionView.layoutParams = LayoutParams(
|
||||
@@ -164,10 +172,6 @@ class SearchLayout @JvmOverloads constructor(
|
||||
(layoutManager as LinearLayoutManager).scrollToPositionWithOffset(0, 0)
|
||||
}
|
||||
|
||||
fun setImageUri(imageUri: Uri?) {
|
||||
mImageView.setImageUri(imageUri)
|
||||
}
|
||||
|
||||
fun setNormalSearchMode(id: Int) {
|
||||
mNormalSearchMode.check(id)
|
||||
}
|
||||
@@ -180,12 +184,6 @@ class SearchLayout @JvmOverloads constructor(
|
||||
}
|
||||
}
|
||||
|
||||
override fun onSelectImage() {
|
||||
if (mHelper != null) {
|
||||
mHelper!!.onSelectImage()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCheckedChanged(buttonView: CompoundButton, isChecked: Boolean) {
|
||||
if (buttonView === mEnableAdvanceSwitch) {
|
||||
post {
|
||||
@@ -285,7 +283,6 @@ class SearchLayout @JvmOverloads constructor(
|
||||
private annotation class SearchMode
|
||||
interface Helper {
|
||||
fun onChangeSearchMode()
|
||||
fun onSelectImage()
|
||||
}
|
||||
|
||||
internal class SearchLayoutManager(context: Context?) : LinearLayoutManager(context!!) {
|
||||
|
||||
+20
@@ -2,23 +2,34 @@ package com.hippo.util
|
||||
|
||||
import android.content.Context
|
||||
import android.content.pm.PackageManager
|
||||
import android.net.Uri
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.activity.result.PickVisualMediaRequest
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType
|
||||
import androidx.core.content.ContextCompat
|
||||
import kotlinx.coroutines.suspendCancellableCoroutine
|
||||
import kotlin.coroutines.resume
|
||||
|
||||
private lateinit var requestPermissionLauncher: ActivityResultLauncher<String>
|
||||
private lateinit var pickVisualMediaLauncher: ActivityResultLauncher<PickVisualMediaRequest>
|
||||
private lateinit var callback: (Boolean) -> Unit
|
||||
private lateinit var callback2: (Uri?) -> Unit
|
||||
|
||||
fun ComponentActivity.initPermission() {
|
||||
requestPermissionLauncher = registerForActivityResult(ActivityResultContracts.RequestPermission(), ::permissionCallback)
|
||||
pickVisualMediaLauncher = registerForActivityResult(ActivityResultContracts.PickVisualMedia(), ::pickVisualMediaCallback)
|
||||
}
|
||||
|
||||
private fun permissionCallback(v: Boolean) {
|
||||
callback(v)
|
||||
}
|
||||
|
||||
private fun pickVisualMediaCallback(v: Uri?) {
|
||||
callback2(v)
|
||||
}
|
||||
|
||||
suspend fun Context.requestPermission(key: String): Boolean {
|
||||
if (ContextCompat.checkSelfPermission(this, key) == PackageManager.PERMISSION_GRANTED) return true
|
||||
return suspendCancellableCoroutine { cont ->
|
||||
@@ -28,3 +39,12 @@ suspend fun Context.requestPermission(key: String): Boolean {
|
||||
requestPermissionLauncher.launch(key)
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun pickVisualMedia(type: VisualMediaType): Uri? {
|
||||
return suspendCancellableCoroutine { cont ->
|
||||
callback2 = {
|
||||
cont.resume(it)
|
||||
}
|
||||
pickVisualMediaLauncher.launch(PickVisualMediaRequest.Builder().setMediaType(type).build())
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user