import android.content.Context
import android.content.Intent
import android.net.Uri
import androidx.activity.result.contract.ActivityResultContract
import com.energysh.router.bean.FileRequest
class FileContractReqUri : ActivityResultContract<FileRequest, Uri?>() {
override fun createIntent(context: Context, input: FileRequest): Intent {
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
// 设置 MIME 类型为 PDF 和 TXT
type = "*/*" // 表示所有文件类型
// flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
val mimeTypes = arrayOf("application/pdf", "text/plain") // 仅显示 PDF 和 TXT
putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes) // 限制 MIME 类型
addCategory(Intent.CATEGORY_OPENABLE) // 确保只能打开可打开的文件(如文件管理器)
}
return intent
}
override fun parseResult(resultCode: Int, intent: Intent?): Uri? {
return intent?.data
}
}
class FileReqUriLauncher(private val caller: ActivityResultCaller) :
BaseActivityResultLauncher<FileRequest, Uri?>(caller, FileContractReqUri()) {
override fun launch(input: FileRequest, callback: ActivityResultCallback<Uri?>) {
when (caller) {
is AppCompatActivity -> {
PermissionUtil.requestPermission(isOld = false, caller,
PermissionBean.writeStoragePermissionBean(),
granted = {
super.launch(input, callback)
},
refused = {
})
}
is Fragment ->{
PermissionUtil.requestPermission(isOld = false, caller,
PermissionBean.writeStoragePermissionBean(),
granted = {
super.launch(input, callback)
},
refused = {
})
}
}
}
}
data class FileRequest(
var clickPos: Int = 0,
) : Serializable, Parcelable {
constructor(parcel: Parcel) : this(
parcel.readInt(),
)
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeInt(clickPos)
}
override fun describeContents(): Int {
return 0
}
companion object CREATOR : Parcelable.Creator<FileRequest> {
override fun createFromParcel(parcel: Parcel): FileRequest {
return FileRequest(parcel)
}
override fun newArray(size: Int): Array<FileRequest?> {
return arrayOfNulls(size)
}
}
}