diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a6d884e5f..d77568b1a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -51,9 +51,9 @@
tools:node="remove" />
-
+
-
+
diff --git a/app/src/main/java/com/chwl/app/avroom/room_album/UploadRoomAlbumDialogFragment.kt b/app/src/main/java/com/chwl/app/avroom/room_album/UploadRoomAlbumDialogFragment.kt
index c5f6748cb..9aa342615 100644
--- a/app/src/main/java/com/chwl/app/avroom/room_album/UploadRoomAlbumDialogFragment.kt
+++ b/app/src/main/java/com/chwl/app/avroom/room_album/UploadRoomAlbumDialogFragment.kt
@@ -3,6 +3,7 @@ package com.chwl.app.avroom.room_album
import android.Manifest
import android.annotation.SuppressLint
import android.app.Activity
+import android.app.AlertDialog
import android.app.Dialog
import android.content.Intent
import android.os.Build
@@ -11,6 +12,9 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.WindowManager
+import androidx.activity.result.ActivityResultLauncher
+import androidx.activity.result.PickVisualMediaRequest
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.content.ContextCompat
import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.GridLayoutManager
@@ -25,12 +29,17 @@ import com.chwl.app.ui.utils.ImageLoadUtilsV2
import com.chwl.app.ui.widget.recyclerview.decoration.GridSpacingItemNewDecoration
import com.chwl.core.Constants
import com.chwl.core.gift.bean.GiftInfo
+import com.chwl.core.utils.DialogUtil
+import com.chwl.core.utils.MyUriUtils
import com.chwl.library.common.photo.PhotoProvider
import com.chwl.library.common.photo.PhotoProvider.photoProvider
import com.chwl.library.common.util.PhotoCompressUtil.compress
import com.chwl.library.common.util.PhotoCompressUtil.getCompressCachePath
import com.chwl.library.common.util.PhotosCompressCallback
+import com.chwl.library.common.util.SPUtils
+import com.chwl.library.constants.ConstantsLib
import com.chwl.library.easypermisssion.EasyPermissions
+import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialogHelper
import kotlinx.coroutines.Job
class UploadRoomAlbumDialogFragment : BottomSheetDialogFragment() {
@@ -45,7 +54,7 @@ class UploadRoomAlbumDialogFragment : BottomSheetDialogFragment() {
private var unlockedGift: GiftInfo? = null
private var compressJob: Job? = null
-
+ var pickMedia : ActivityResultLauncher?=null
val dialogManager by lazy {
DialogManager(context)
}
@@ -55,6 +64,17 @@ class UploadRoomAlbumDialogFragment : BottomSheetDialogFragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setStyle(STYLE_NO_TITLE, R.style.ErbanBottomSheetDialog)
+ if (ActivityResultContracts.PickVisualMedia.isPhotoPickerAvailable(requireContext())) {
+ pickMedia = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
+ uri?.let {
+ val file = MyUriUtils.copyFile(requireContext(),uri)
+ if (file != null) {
+ compressPhotos(mutableListOf(file.path))
+ }
+ }
+ }
+ }
+
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
@@ -194,7 +214,7 @@ class UploadRoomAlbumDialogFragment : BottomSheetDialogFragment() {
return@setOnClickListener
}
- dialogManager.showProgressDialog(context)
+// dialogManager.showProgressDialog(context)
viewModel.upload(
list,
type,
@@ -204,7 +224,7 @@ class UploadRoomAlbumDialogFragment : BottomSheetDialogFragment() {
viewModel.uploadLiveData.observe(this) {
it?.getContentIfNotHandled()?.let { success ->
- dialogManager.hideProgressDialog()
+// dialogManager.hideProgressDialog()
if (success) {
dismiss()
@@ -219,28 +239,37 @@ class UploadRoomAlbumDialogFragment : BottomSheetDialogFragment() {
}
private fun checkStoragePermission() {
- if (!EasyPermissions.hasPermissions(
- requireContext(),
- if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES
- else Manifest.permission.READ_EXTERNAL_STORAGE
- )
- ) {
- EasyPermissions.requestPermissions(
- this,
- getString(R.string.permission_storage_rationale),
- 100,
- if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES
- else Manifest.permission.READ_EXTERNAL_STORAGE
- )
- } else {
- photoProvider(
- this,
- 7 - photoAdapter.data.size,
- true,
- 200,
- true
- )
+
+ if (Build.VERSION.SDK_INT >= 33){
+ DialogUtil.getDialog(requireActivity(),object : EasyAlertDialogHelper.OnDialogActionListener {
+ override fun doCancelAction() {
+
+ }
+ override fun doOkAction() {
+ SPUtils.putBoolean(ConstantsLib.Key.Permissions_Img,true)
+ pickMedia?.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
+ }
+ })
+ }else{
+ if (!EasyPermissions.hasPermissions(requireContext(),Manifest.permission.READ_EXTERNAL_STORAGE)) {
+ EasyPermissions.requestPermissions(
+ this,
+ getString(R.string.permission_storage_rationale),
+ 100,
+ Manifest.permission.READ_EXTERNAL_STORAGE
+ )
+ } else {
+ photoProvider(
+ this,
+ 7 - photoAdapter.data.size,
+ true,
+ 200,
+ true
+ )
+ }
}
+
+
}
@Deprecated("Deprecated in Java")
diff --git a/app/src/main/java/com/chwl/app/common/dialog/PhotoDialog.kt b/app/src/main/java/com/chwl/app/common/dialog/PhotoDialog.kt
deleted file mode 100644
index 4148147cb..000000000
--- a/app/src/main/java/com/chwl/app/common/dialog/PhotoDialog.kt
+++ /dev/null
@@ -1,279 +0,0 @@
-package com.chwl.app.common.dialog
-
-import android.Manifest
-import android.content.Intent
-import android.net.Uri
-import android.os.Build
-import android.os.Bundle
-import android.provider.Settings
-import android.text.TextUtils
-import android.view.Gravity
-import android.view.Window
-import android.view.WindowManager
-import com.hjq.toast.ToastUtils
-import com.chwl.app.R
-import com.chwl.app.application.App
-import com.chwl.app.databinding.PhotoDialogBinding
-import com.chwl.app.ui.widget.dialog.CommonTipDialog
-import com.chwl.library.common.base.BaseDialogFragment
-import com.chwl.library.common.photo.PhotoProvider
-import com.chwl.library.common.util.PhotoCompressCallback
-import com.chwl.library.common.util.PhotoCompressUtil
-import com.chwl.library.common.util.PhotosCompressCallback
-import com.chwl.library.easypermisssion.EasyPermissions
-import kotlinx.coroutines.Job
-
-/**
- * 该对话框的功能提供拍摄和选择图片
- */
-class PhotoDialog : BaseDialogFragment(), EasyPermissions.PermissionCallbacks {
- private var mOnResultCallBack: OnResultCallBack? = null
- private var mJob: Job? = null
-
- companion object {
- private const val PERMISSION_CODE_CAMERA = 100
- private const val REQUEST_CODE_CAMERA = 101
- private const val PERMISSION_CODE_STORAGE_1 = 200
- private const val REQUEST_CODE_STORAGE_1 = 201
- private const val PERMISSION_CODE_STORAGE_2 = 202
- private const val REQUEST_CODE_STORAGE_2 = 203
- private const val REQUEST_CODE_OPEN_PHOTO_PROVIDER = 103
- private const val REQUEST_CODE_OPEN_CAMERA_PROVIDER = 104
- }
-
- override fun initBefore(savedInstanceState: Bundle?) {
- super.initBefore(savedInstanceState)
- dialog?.requestWindowFeature(Window.FEATURE_NO_TITLE)
- }
-
- override fun setListener() {
- binding?.tvTakePhoto?.setOnClickListener {
- checkCameraPermission()
- }
- binding?.tvChoicePicture?.setOnClickListener {
- checkStoragePermission1()
- }
- }
-
- private fun initDialog() {
- dialog?.window?.also {
- it.decorView.setPadding(0, 0, 0, 0)
- it.attributes = it.attributes.apply {
- gravity = Gravity.BOTTOM
- width = WindowManager.LayoutParams.MATCH_PARENT
- }
- it.setBackgroundDrawableResource(R.drawable.photo_dialog_bg)
- }
- }
-
- override fun onStart() {
- super.onStart()
- initDialog()
- }
-
- private fun checkStoragePermission1() {
- if (!EasyPermissions.hasPermissions(
- App.gContext, if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
- )
- ) {
- EasyPermissions.requestPermissions(
- this,
- getString(R.string.permission_storage_rationale),
- PERMISSION_CODE_STORAGE_1,
- if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
- )
- } else {
- PhotoProvider.photoProvider(this, resultCode = REQUEST_CODE_OPEN_PHOTO_PROVIDER)
- }
- }
-
- private fun checkCameraPermission() {
- if (!EasyPermissions.hasPermissions(
- App.gContext,
- Manifest.permission.CAMERA
- )
- ) {
- EasyPermissions.requestPermissions(
- this,
- getString(R.string.permission_camera_rationale),
- PERMISSION_CODE_CAMERA,
- Manifest.permission.CAMERA
- )
- } else {
- checkStoragePermission2()
- }
- }
-
- private fun checkStoragePermission2() {
- if (!EasyPermissions.hasPermissions(
- App.gContext, if (Build.VERSION.SDK_INT >= 33)
- Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
- )
- ) {
- EasyPermissions.requestPermissions(
- this,
- getString(R.string.permission_storage_rationale),
- PERMISSION_CODE_STORAGE_2,
- if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
- )
- } else {
- PhotoProvider.photoCamera(this, REQUEST_CODE_OPEN_CAMERA_PROVIDER)
- }
- }
-
- override fun onRequestPermissionsResult(
- requestCode: Int,
- permissions: Array,
- grantResults: IntArray
- ) {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults)
- EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
- }
-
- override fun onPermissionsGranted(requestCode: Int, perms: MutableList) {
- if (requestCode == PERMISSION_CODE_CAMERA) {
- checkCameraPermission()
- } else if (requestCode == PERMISSION_CODE_STORAGE_1) {
- checkStoragePermission1()
- } else if (requestCode == PERMISSION_CODE_STORAGE_2) {
- checkStoragePermission2()
- }
- }
-
- override fun onPermissionsDenied(requestCode: Int, perms: MutableList) {
- if (requestCode == PERMISSION_CODE_STORAGE_1 || requestCode == PERMISSION_CODE_STORAGE_2 || requestCode == PERMISSION_CODE_CAMERA) {
- val requestTip: String =
- if (requestCode == PERMISSION_CODE_STORAGE_1 || requestCode == PERMISSION_CODE_STORAGE_2) {
- getString(R.string.permission_storage_denied)
- } else {
- getString(R.string.permission_camera_denied)
- }
- val mPrivacyDialog = CommonTipDialog(context)
- mPrivacyDialog.setTipMsg(requestTip)
- mPrivacyDialog.setOkText(getString(R.string.room_perform_go_update))
- mPrivacyDialog.setOnActionListener(
- object : CommonTipDialog.OnActionListener {
- override fun onOk() {
- //同意跳到应用详情页面
- val packageUri =
- Uri.parse("package:${activity?.packageName}")
- val intent = Intent(
- Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
- packageUri
- )
- if (requestCode == PERMISSION_CODE_STORAGE_1) {
- startActivityForResult(
- intent, REQUEST_CODE_STORAGE_1
- )
- } else if (requestCode == PERMISSION_CODE_STORAGE_2) {
- startActivityForResult(
- intent,
- REQUEST_CODE_STORAGE_2
- )
- } else {
- startActivityForResult(
- intent, REQUEST_CODE_CAMERA
- )
- }
- }
-
- override fun onCancel() {
- super.onCancel()
- //取消跳到应用详情页面
- if (requestCode == PERMISSION_CODE_STORAGE_1 || requestCode == PERMISSION_CODE_STORAGE_2) {
- ToastUtils.show(getString(R.string.permission_storage_refused))
- } else {
- ToastUtils.show(getString(R.string.permission_camera_refused))
- }
- }
- }
- )
- mPrivacyDialog.show()
- }
- }
-
- override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
- super.onActivityResult(requestCode, resultCode, data)
- if (requestCode == REQUEST_CODE_STORAGE_1) {
- checkStoragePermission1()
- } else if (requestCode == REQUEST_CODE_STORAGE_2) {
- checkStoragePermission2()
- } else if (requestCode == REQUEST_CODE_CAMERA) {
- checkCameraPermission()
- } else
- if (resultCode == RESULT_OK) {
- when (requestCode) {
- REQUEST_CODE_OPEN_CAMERA_PROVIDER -> {
- if (mOnResultCallBack == null || data == null) return
- PhotoProvider.getResultPathListAsync(data) { paths ->
- val list = paths?.mapNotNull { it.path }?.toMutableList() ?: ArrayList()
- val path = list[0]
- if (!TextUtils.isEmpty(path)) {
- mJob?.cancel()
- mJob = PhotoCompressUtil.compress(
- App.gContext,
- path,
- PhotoCompressUtil.getCompressCachePath(),
- object : PhotoCompressCallback {
- override fun onSuccess(compressedImg: String) {
- mOnResultCallBack?.takePhotoCallBack(compressedImg)
- }
-
- override fun onFail(e: Throwable) {
- mOnResultCallBack?.takePhotoCallBack(path)
- }
- })
-
- } else {
- mOnResultCallBack?.takePhotoCallBack(path)
- }
- }
- }
- REQUEST_CODE_OPEN_PHOTO_PROVIDER -> {
- if (mOnResultCallBack == null || data == null) return
- PhotoProvider.getResultPathListAsync(data) { list ->
- val paths = list?.mapNotNull { it.path }?.toMutableList() ?: ArrayList()
- if (paths.isEmpty()) {
- mOnResultCallBack?.choicePhotoCallBack(paths)
- } else {
- mJob?.cancel()
- mJob = PhotoCompressUtil.compress(
- App.gContext,
- paths,
- PhotoCompressUtil.getCompressCachePath(),
- object : PhotosCompressCallback {
- override fun onSuccess(compressedImgList: ArrayList) {
- mOnResultCallBack?.choicePhotoCallBack(compressedImgList)
- }
-
- override fun onFail(e: Throwable) {
- mOnResultCallBack?.choicePhotoCallBack(paths)
- }
-
- })
- }
- }
- }
- }
- dismissAllowingStateLoss()
- }
- }
-
- fun setOnResultCallBack(onResultCallBack: OnResultCallBack) {
- mOnResultCallBack = onResultCallBack
- }
-
- override fun onWillDestroy() {
- mJob?.cancel()
- super.onWillDestroy()
- }
-
- interface OnResultCallBack {
-
- fun takePhotoCallBack(path: String?)
-
- fun choicePhotoCallBack(paths: List?)
-
- }
-
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/chwl/app/common/util/AppLifeCycleHelper.java b/app/src/main/java/com/chwl/app/common/util/AppLifeCycleHelper.java
index 8b3f80571..185269555 100644
--- a/app/src/main/java/com/chwl/app/common/util/AppLifeCycleHelper.java
+++ b/app/src/main/java/com/chwl/app/common/util/AppLifeCycleHelper.java
@@ -6,10 +6,13 @@ import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import com.chwl.app.BuildConfig;
import com.chwl.app.application.App;
import com.chwl.core.auth.AuthModel;
+import com.chwl.core.utils.LogUtils;
import com.chwl.library.common.util.CoreUtils;
+import com.netease.nim.uikit.common.util.log.LogUtil;
/**
* Activity生命周期工具类
@@ -27,6 +30,9 @@ public class AppLifeCycleHelper implements Application.ActivityLifecycleCallback
@Override
public void onActivityStarted(@NonNull Activity activity) {
+ if (BuildConfig.DEBUG) {
+ LogUtils.d("当前Activity : "+ activity.getClass().getSimpleName());
+ }
if (++AppLifeCycleHelper.sActivityReferences == 1 && !AppLifeCycleHelper.sIsActivityChangingConfigurations) {
AppLifeCycleHelper.onForeground();
diff --git a/app/src/main/java/com/chwl/app/ui/feedback/FeedbackActivity.kt b/app/src/main/java/com/chwl/app/ui/feedback/FeedbackActivity.kt
index e6927dea1..1902975fb 100644
--- a/app/src/main/java/com/chwl/app/ui/feedback/FeedbackActivity.kt
+++ b/app/src/main/java/com/chwl/app/ui/feedback/FeedbackActivity.kt
@@ -4,7 +4,11 @@ import android.Manifest
import android.annotation.SuppressLint
import android.content.Intent
import android.os.Build
+import android.os.Bundle
import android.widget.ImageView.ScaleType
+import androidx.activity.result.ActivityResultLauncher
+import androidx.activity.result.PickVisualMediaRequest
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.viewModels
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
@@ -16,10 +20,14 @@ import com.chwl.app.ui.utils.load
import com.chwl.app.ui.widget.dialog.CommonTipDialog
import com.chwl.core.file.FileModel
import com.chwl.core.home.bean.FeedbackTypeBean
+import com.chwl.core.utils.DialogUtil
+import com.chwl.core.utils.MyUriUtils
import com.chwl.library.common.photo.PhotoProvider
import com.chwl.library.common.photo.PhotoProvider.photoProvider
import com.chwl.library.common.util.PhotoCompressUtil
import com.chwl.library.common.util.PhotosCompressCallback
+import com.chwl.library.common.util.SPUtils
+import com.chwl.library.constants.ConstantsLib
import com.chwl.library.easypermisssion.EasyPermissions
import com.chwl.library.easyphoto.utils.settings.SettingsUtils
import com.chwl.library.utils.ResUtil
@@ -35,6 +43,7 @@ import com.google.android.flexbox.FlexboxLayoutManager
import com.google.android.flexbox.JustifyContent
import com.hjq.toast.ToastUtils
import com.netease.nim.uikit.StatusBarUtil
+import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialogHelper
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
@@ -52,6 +61,21 @@ class FeedbackActivity : BaseViewBindingActivity(),
private var imagePath: String? = null
private var imageUrl: String? = null
+ var pickMedia : ActivityResultLauncher?=null
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ if (ActivityResultContracts.PickVisualMedia.isPhotoPickerAvailable(this)) {
+ pickMedia = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
+ uri?.let {
+ val file = MyUriUtils.copyFile(this,uri)
+ if (file != null) {
+ compressPhotos(mutableListOf(file.path))
+ }
+ }
+ }
+ }
+ }
override fun init() {
initWhiteTitleBar(ResUtil.getString(R.string.feedback_title))
initView()
@@ -262,26 +286,37 @@ class FeedbackActivity : BaseViewBindingActivity(),
}
private fun checkStoragePermission() {
- if (!EasyPermissions.hasPermissions(
- this,
- if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
- )
- ) {
- EasyPermissions.requestPermissions(
- this,
- getString(R.string.permission_storage_rationale),
- PERMISSION_CODE_STORAGE,
- if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
- )
- } else {
- photoProvider(
- this,
- 1,
- true,
- REQUEST_CODE_OPEN_PHOTO_PROVIDER,
- true,
- true
- )
+
+ if (Build.VERSION.SDK_INT >= 33){
+ DialogUtil.getDialog(this,object : EasyAlertDialogHelper.OnDialogActionListener {
+ override fun doCancelAction() {
+ }
+
+ override fun doOkAction() {
+ SPUtils.putBoolean(ConstantsLib.Key.Permissions_Img,true)
+ pickMedia?.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
+ }
+ })
+ }else{
+ if (!EasyPermissions.hasPermissions(
+ this,Manifest.permission.READ_EXTERNAL_STORAGE
+ )
+ ) {
+ EasyPermissions.requestPermissions(
+ this,
+ getString(R.string.permission_storage_rationale),
+ PERMISSION_CODE_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE
+ )
+ } else {
+ photoProvider(
+ this,
+ 1,
+ true,
+ REQUEST_CODE_OPEN_PHOTO_PROVIDER,
+ true,
+ true
+ )
+ }
}
}
diff --git a/app/src/main/java/com/chwl/app/ui/setting/bean/PermissionEntity.kt b/app/src/main/java/com/chwl/app/ui/setting/bean/PermissionEntity.kt
index b88ed0e45..18bda4a73 100644
--- a/app/src/main/java/com/chwl/app/ui/setting/bean/PermissionEntity.kt
+++ b/app/src/main/java/com/chwl/app/ui/setting/bean/PermissionEntity.kt
@@ -37,10 +37,12 @@ enum class PermissionEntity(
STORAGE(
ResUtil.getString(R.string.setting_bean_permissionentity_011), ResUtil.getString(R.string.setting_bean_permissionentity_012), R.drawable.icon_permission_storage,
arrayOf(
- if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
+ Manifest.permission.READ_EXTERNAL_STORAGE
)
);
+
+
companion object {
fun fetchPermission(name: String): PermissionEntity? {
if (CoreTextUtils.isEmptyText(name)) return null
diff --git a/app/src/main/java/com/chwl/app/ui/user/activity/UserInfoModifyActivity.kt b/app/src/main/java/com/chwl/app/ui/user/activity/UserInfoModifyActivity.kt
index 69d480788..745683960 100644
--- a/app/src/main/java/com/chwl/app/ui/user/activity/UserInfoModifyActivity.kt
+++ b/app/src/main/java/com/chwl/app/ui/user/activity/UserInfoModifyActivity.kt
@@ -11,6 +11,9 @@ import android.provider.Settings
import android.text.TextUtils
import android.view.View
import android.widget.ImageView
+import androidx.activity.result.ActivityResultLauncher
+import androidx.activity.result.PickVisualMediaRequest
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.LinearLayoutManager
import com.fourmob.datetimepicker.date.DatePickerDialog
@@ -42,13 +45,18 @@ import com.chwl.core.user.bean.UserDetailInfo
import com.chwl.core.user.bean.UserInfo
import com.chwl.core.user.bean.UserPhoto
import com.chwl.core.utils.CoreLogger
+import com.chwl.core.utils.DialogUtil
+import com.chwl.core.utils.LogUtils
import com.chwl.library.common.file.FileHelper
import com.chwl.library.common.photo.PhotoProvider
import com.chwl.library.common.util.PhotoCompressCallback
import com.chwl.library.common.util.PhotoCompressUtil
+import com.chwl.library.common.util.SPUtils
+import com.chwl.library.constants.ConstantsLib
import com.chwl.library.easypermisssion.EasyPermissions
import com.chwl.library.utils.ResUtil
import com.chwl.library.utils.TimeUtils
+import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialogHelper
import io.reactivex.Completable
import io.reactivex.SingleObserver
import io.reactivex.disposables.Disposable
@@ -95,10 +103,18 @@ class UserInfoModifyActivity : BaseViewBindingActivity?=null
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
UserModel.get().getUserInfo(userId).subscribe(userInfoUpdateObserver)
PhotoCompressUtil.clearCompressCache()
+
+ if (ActivityResultContracts.PickVisualMedia.isPhotoPickerAvailable(this)) {
+ pickMedia = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
+ crop(uri, 1, mUri)
+ }
+ }
}
override fun click(position: Int, userPhoto: UserPhoto, isOwner: Boolean) {
@@ -426,24 +442,30 @@ class UserInfoModifyActivity : BaseViewBindingActivity= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
- )
- ) {
- EasyPermissions.requestPermissions(
- this,
- getString(R.string.permission_storage_rationale),
- PERMISSION_CODE_STORAGE,
- if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
- )
- } else {
- mUri = Uri.parse("file://${FileHelper.getRootCacheDir()?.path}/${getNowTime()}.jpg")
- PhotoProvider.photoProvider(
- this,
- resultCode = REQUEST_CODE_OPEN_PHOTO_PROVIDER
- )
+
+ if (Build.VERSION.SDK_INT >= 33){
+ DialogUtil.getDialog(this,object : EasyAlertDialogHelper.OnDialogActionListener {
+ override fun doCancelAction() {
+ }
+
+ override fun doOkAction() {
+ SPUtils.putBoolean(ConstantsLib.Key.Permissions_Img,true)
+ mUri = Uri.parse("file://${FileHelper.getRootCacheDir()?.path}/${getNowTime()}.jpg")
+ pickMedia?.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
+ }
+ })
+
+
+ }else{
+ if (!EasyPermissions.hasPermissions(this,Manifest.permission.READ_EXTERNAL_STORAGE)) {
+ EasyPermissions.requestPermissions(this, getString(R.string.permission_storage_rationale), PERMISSION_CODE_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE
+ )
+ } else {
+ mUri = Uri.parse("file://${FileHelper.getRootCacheDir()?.path}/${getNowTime()}.jpg")
+ PhotoProvider.photoProvider(this, resultCode = REQUEST_CODE_OPEN_PHOTO_PROVIDER)
+ }
}
+
}
private fun getNowTime(): String {
@@ -556,14 +578,16 @@ class UserInfoModifyActivity : BaseViewBindingActivity 0) {
- //不能上传图片的最小文件大小
- CoreLogger.debug(TAG, "sourceSize: $sourceSize")
- if (sourceSize < MIN_HEAD_PHOTO_SIZE) {
- toast(R.string.text_bitmap_too_small)
- return
- }
- }
+
+// if (sourceSize > 0) {
+// //不能上传图片的最小文件大小
+// CoreLogger.debug(TAG, "sourceSize: $sourceSize")
+// if (sourceSize < MIN_HEAD_PHOTO_SIZE) {
+// toast(R.string.text_bitmap_too_small)
+// return
+// }
+// }
+
val options = UCrop.Options().apply {
setCompressionQuality(100)
setShowCropGrid(false)
diff --git a/app/src/main/java/com/chwl/app/ui/user/activity/UserModifyPhotosActivity.kt b/app/src/main/java/com/chwl/app/ui/user/activity/UserModifyPhotosActivity.kt
index e99f6a9b1..6578dc423 100644
--- a/app/src/main/java/com/chwl/app/ui/user/activity/UserModifyPhotosActivity.kt
+++ b/app/src/main/java/com/chwl/app/ui/user/activity/UserModifyPhotosActivity.kt
@@ -11,6 +11,9 @@ import android.os.Bundle
import android.provider.Settings
import android.view.View
import android.widget.GridView
+import androidx.activity.result.ActivityResultLauncher
+import androidx.activity.result.PickVisualMediaRequest
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.content.ContextCompat
import com.hjq.toast.ToastUtils
import com.jph.takephoto.app.TakePhotoActivity
@@ -30,13 +33,17 @@ import com.chwl.core.user.UserModel
import com.chwl.core.user.bean.UserInfo
import com.chwl.core.user.bean.UserPhoto
import com.chwl.core.utils.CoreLogger
+import com.chwl.core.utils.DialogUtil
import com.chwl.core.utils.net.BeanObserver
import com.chwl.library.common.file.FileHelper
import com.chwl.library.common.photo.PhotoProvider
import com.chwl.library.common.util.PhotoCompressCallback
import com.chwl.library.common.util.PhotoCompressUtil
+import com.chwl.library.common.util.SPUtils
+import com.chwl.library.constants.ConstantsLib
import com.chwl.library.easypermisssion.EasyPermissions
import com.chwl.library.utils.ResUtil
+import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialogHelper
import kotlinx.coroutines.Job
import java.io.FileNotFoundException
import java.text.SimpleDateFormat
@@ -57,6 +64,8 @@ class UserModifyPhotosActivity : TakePhotoActivity(), PhotoItemClickListener,
private var mUri: Uri? = null
private var mJob: Job? = null
+ var pickMedia : ActivityResultLauncher?=null
+
companion object {
const val FLAG_CHANGE = "isChanged"
private const val TAG = "UserModifyPhotosActivit"
@@ -95,6 +104,14 @@ class UserModifyPhotosActivity : TakePhotoActivity(), PhotoItemClickListener,
if (userInfo != null) {
updateView()
}
+ if (ActivityResultContracts.PickVisualMedia.isPhotoPickerAvailable(this)) {
+ pickMedia = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
+ uri?.let {
+ crop(it, 0, mUri)
+ }
+
+ }
+ }
}
private fun initView() {
@@ -219,24 +236,38 @@ class UserModifyPhotosActivity : TakePhotoActivity(), PhotoItemClickListener,
}
private fun checkStoragePermission() {
- if (!EasyPermissions.hasPermissions(
- this,
- if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
- )
- ) {
- EasyPermissions.requestPermissions(
- this,
- getString(R.string.permission_storage_rationale),
- PERMISSION_CODE_STORAGE,
- if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
- )
- } else {
- mUri = Uri.parse("file://${FileHelper.getRootCacheDir()?.path}/${getNowTime()}.jpg")
- PhotoProvider.photoProvider(
- this,
- resultCode = REQUEST_CODE_OPEN_PHOTO_PROVIDER
- )
+
+ if (Build.VERSION.SDK_INT >= 33){
+ DialogUtil.getDialog(this,object : EasyAlertDialogHelper.OnDialogActionListener {
+ override fun doCancelAction() {
+ }
+
+ override fun doOkAction() {
+ SPUtils.putBoolean(ConstantsLib.Key.Permissions_Img,true)
+ mUri = Uri.parse("file://${FileHelper.getRootCacheDir()?.path}/${getNowTime()}.jpg")
+ pickMedia?.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
+ }
+ })
+ }else{
+ if (!EasyPermissions.hasPermissions(
+ this, Manifest.permission.READ_EXTERNAL_STORAGE
+ )
+ ) {
+ EasyPermissions.requestPermissions(
+ this,
+ getString(R.string.permission_storage_rationale),
+ PERMISSION_CODE_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE
+ )
+ } else {
+ mUri = Uri.parse("file://${FileHelper.getRootCacheDir()?.path}/${getNowTime()}.jpg")
+ PhotoProvider.photoProvider(
+ this,
+ resultCode = REQUEST_CODE_OPEN_PHOTO_PROVIDER
+ )
+ }
}
+
+
}
private fun getNowTime(): String {
@@ -309,14 +340,14 @@ class UserModifyPhotosActivity : TakePhotoActivity(), PhotoItemClickListener,
toast(R.string.text_bitmap_too_large)
return
}
- if (sourceSize > 0) {
- //不能上传图片的最小文件大小
- CoreLogger.debug(TAG, "sourceSize: $sourceSize")
- if (sourceSize < MIN_HEAD_PHOTO_SIZE) {
- toast(R.string.text_bitmap_too_small)
- return
- }
- }
+// if (sourceSize > 0) {
+// //不能上传图片的最小文件大小
+// CoreLogger.debug(TAG, "sourceSize: $sourceSize")
+// if (sourceSize < MIN_HEAD_PHOTO_SIZE) {
+// toast(R.string.text_bitmap_too_small)
+// return
+// }
+// }
val options = UCrop.Options().apply {
setCompressionQuality(100)
setShowCropGrid(false)
diff --git a/app/src/main/java/com/chwl/app/ui/widget/GiftDialog.java b/app/src/main/java/com/chwl/app/ui/widget/GiftDialog.java
index 0bc0ddc8d..9e02866e7 100644
--- a/app/src/main/java/com/chwl/app/ui/widget/GiftDialog.java
+++ b/app/src/main/java/com/chwl/app/ui/widget/GiftDialog.java
@@ -2,6 +2,7 @@ package com.chwl.app.ui.widget;
import static com.chwl.app.ui.widget.magicindicator.GiftIndicator.TYPE_COUNTRY;
import static com.chwl.app.ui.widget.magicindicator.GiftIndicator.TYPE_CP;
+import static com.chwl.app.ui.widget.magicindicator.GiftIndicator.TYPE_CUSTOM;
import static com.chwl.app.ui.widget.magicindicator.GiftIndicator.TYPE_LUCKY;
import static com.chwl.app.ui.widget.magicindicator.GiftIndicator.TYPE_NOBLE;
import static com.chwl.app.ui.widget.magicindicator.GiftIndicator.TYPE_NORMAL;
@@ -632,6 +633,8 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
return TYPE_SUPER_LUCKY_24;
case GiftType.GIFT_TYPE_CP:
return TYPE_CP;
+ case GiftType.GIFT_TYPE_CUSTOM:
+ return TYPE_CUSTOM;
}
return TYPE_NORMAL;
}
@@ -729,6 +732,8 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
currentGiftInfoList = getCountryGiftInfos();
}else if (position == TYPE_CP) {
currentGiftInfoList = getCpGiftInfos();
+ }else if (position == TYPE_CUSTOM) {
+ currentGiftInfoList = getCustomGiftInfos();
}
// 有贵族礼物才显示贵族礼物的tab
if (ListUtils.isListEmpty(nobleGiftInfos)) {
@@ -1240,6 +1245,12 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
GiftType.GIFT_TYPE_CP);
}
+ private List getCustomGiftInfos() {
+ return GiftModel.get().getGiftInfosByType(
+ String.valueOf(AvRoomDataManager.get().getRoomUid()),
+ GiftType.GIFT_TYPE_CUSTOM);
+ }
+
private List getNobleGiftInfos() {
return GiftModel.get().getGiftInfoList(GiftType.GIFT_TYPE_VIP);
}
diff --git a/app/src/main/java/com/chwl/app/ui/widget/magicindicator/GiftIndicator.java b/app/src/main/java/com/chwl/app/ui/widget/magicindicator/GiftIndicator.java
index 3a249db70..1d23ec9e7 100644
--- a/app/src/main/java/com/chwl/app/ui/widget/magicindicator/GiftIndicator.java
+++ b/app/src/main/java/com/chwl/app/ui/widget/magicindicator/GiftIndicator.java
@@ -84,6 +84,10 @@ public class GiftIndicator extends LinearLayout {
* cp礼物
*/
public static final int TYPE_CP = 10;
+ /**
+ * 定制礼物
+ */
+ public static final int TYPE_CUSTOM = 11;
private List tabList = new ArrayList<>();
diff --git a/app/src/main/res/xml/network_security_config.xml b/app/src/main/res/xml/network_security_config.xml
index a1c7218fe..613ff624e 100644
--- a/app/src/main/res/xml/network_security_config.xml
+++ b/app/src/main/res/xml/network_security_config.xml
@@ -1,7 +1,7 @@
-
+
@@ -10,6 +10,7 @@
fengkongcloud.com
+ beta.api.molistar.xyz
\ No newline at end of file
diff --git a/app/src/module_community/java/com/chwl/app/community/publish/view/PublishActivity.java b/app/src/module_community/java/com/chwl/app/community/publish/view/PublishActivity.java
index d1d2c2b53..b5cca72ee 100644
--- a/app/src/module_community/java/com/chwl/app/community/publish/view/PublishActivity.java
+++ b/app/src/module_community/java/com/chwl/app/community/publish/view/PublishActivity.java
@@ -1,9 +1,12 @@
package com.chwl.app.community.publish.view;
+import static androidx.core.content.ContentProviderCompat.requireContext;
+
import android.Manifest;
import android.content.Context;
import android.content.Intent;
+import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.text.Editable;
@@ -18,17 +21,27 @@ import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
+import androidx.activity.result.ActivityResultCallback;
+import androidx.activity.result.ActivityResultLauncher;
+import androidx.activity.result.PickVisualMediaRequest;
+import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
+import androidx.core.app.ActivityOptionsCompat;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.chwl.app.photo.BigPhotoActivity;
import com.chwl.app.photo.PagerOption;
import com.chwl.core.utils.CoreTextUtils;
+import com.chwl.core.utils.DialogUtil;
+import com.chwl.core.utils.MyUriUtils;
+import com.chwl.library.common.util.SPUtils;
+import com.chwl.library.constants.ConstantsLib;
import com.example.matisse.Matisse;
import com.google.android.flexbox.FlexboxLayout;
import com.hjq.toast.ToastUtils;
import com.netease.nim.uikit.StatusBarUtil;
+import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialogHelper;
import com.netease.nim.uikit.common.util.log.LogUtil;
import com.trello.rxlifecycle3.android.ActivityEvent;
import com.chwl.app.R;
@@ -60,6 +73,7 @@ import com.chwl.library.utils.ResUtil;
import com.chwl.library.utils.SingleToastUtil;
import com.example.matisse.internal.entity.CustomItem;
+import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
@@ -111,6 +125,9 @@ public class PublishActivity extends BaseMvpActivity pickMedia;
+
public static void start(DialogManager manager, long worldId) {
if (beforeStart(manager)) {
return;
@@ -177,6 +194,66 @@ public class PublishActivity extends BaseMvpActivity() {
+ @Override
+ public void onActivityResult(Uri uri) {
+ if (uri != null && uri.getPath() != null){
+
+ File file = MyUriUtils.INSTANCE.copyFile(PublishActivity.this, uri);
+ if (file != null) {
+ LogUtil.e("选择 file = "+file.getName());
+ LogUtil.e("选择 file = "+file.getPath());
+
+ if (mJob != null) {
+ mJob.cancel(null);
+ }
+ ArrayList pathList = new ArrayList<>();
+ pathList.add(file.getPath());
+
+ mJob = PhotoCompressUtil.compress(PublishActivity.this, pathList,
+ PhotoCompressUtil.getCompressCachePath("publish")
+ , new PhotosCompressCallback() {
+ @Override
+ public void onSuccess(@NonNull ArrayList compressedImgList) {
+ List pathResult = new ArrayList<>();
+ for (int i = 0; i < compressedImgList.size(); i++) {
+ if (i < pathList.size()) {
+ List fileInfo = MyUriUtils.INSTANCE.getFileInfo(file);
+ if (fileInfo != null) {
+ pathResult.add(new CustomItem(compressedImgList.get(i), CustomItem.IMAGE_NORMAL, fileInfo.get(2), Integer.parseInt(fileInfo.get(0)), Integer.parseInt(fileInfo.get(1))));
+ }
+ }
+ }
+ if (pathResult.size() == 0) {
+ return;
+ }
+ LogUtil.print(pathResult);
+
+ uploadList.addAll(pathResult);
+ updateImagesData();
+
+ isOriginalImage = false;
+ LogUtil.print("isOriginalImage:" + isOriginalImage);
+ SharedPreferenceUtils.put(KEY_SP_ORIGINAL_IMAGE, isOriginalImage);
+ }
+
+ @Override
+ public void onFail(@NonNull Throwable e) {
+ toast(getString(R.string.picker_image_error));
+ }
+ }, 200, false, Constants.UPLOAD_IMAGE_MAX_SIZE, Constants.UPLOAD_IMAGE_MAX_FILE_LENGTH);
+
+ }
+
+
+
+ }
+ }
+ });
+ }
+
}
private void findView() {
@@ -622,26 +699,36 @@ public class PublishActivity extends BaseMvpActivity= 33 ? Manifest.permission.READ_MEDIA_IMAGES : Manifest.permission.READ_EXTERNAL_STORAGE
- )
- ) {
- EasyPermissions.requestPermissions(
- this,
- getString(R.string.permission_storage_rationale),
- PERMISSION_CODE_STORAGE,
- Build.VERSION.SDK_INT >= 33 ? Manifest.permission.READ_MEDIA_IMAGES : Manifest.permission.READ_EXTERNAL_STORAGE
- );
- } else {
- PhotoProvider.photoProvider(
- this,
- maxSelect - uploadList.size(),
- true,
- REQUEST_CODE_OPEN_PHOTO_PROVIDER,
- true,
- true
- );
+
+ if (Build.VERSION.SDK_INT >= 33){
+ if (pickMedia != null){
+ DialogUtil.INSTANCE.getDialog(this,new EasyAlertDialogHelper.OnDialogActionListener() {
+ @Override
+ public void doCancelAction() {}
+ @Override
+ public void doOkAction() {
+ SPUtils.putBoolean(ConstantsLib.Key.Permissions_Img,true);
+ pickMedia.launch(new PickVisualMediaRequest.Builder().setMediaType(ActivityResultContracts.PickVisualMedia.ImageOnly.INSTANCE).build());
+ }
+ });
+ }
+ }else{
+ if (!EasyPermissions.hasPermissions(this, Manifest.permission.READ_EXTERNAL_STORAGE)) {
+ EasyPermissions.requestPermissions(
+ this,
+ getString(R.string.permission_storage_rationale),
+ PERMISSION_CODE_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE
+ );
+ } else {
+ PhotoProvider.photoProvider(
+ this,
+ maxSelect - uploadList.size(),
+ true,
+ REQUEST_CODE_OPEN_PHOTO_PROVIDER,
+ true,
+ true
+ );
+ }
}
}
diff --git a/app/src/module_treasure_box/java/com/chwl/app/treasure_box/widget/dialog/TreasureBoxDialog.kt b/app/src/module_treasure_box/java/com/chwl/app/treasure_box/widget/dialog/TreasureBoxDialog.kt
index 32e46830e..4a959e170 100644
--- a/app/src/module_treasure_box/java/com/chwl/app/treasure_box/widget/dialog/TreasureBoxDialog.kt
+++ b/app/src/module_treasure_box/java/com/chwl/app/treasure_box/widget/dialog/TreasureBoxDialog.kt
@@ -3,11 +3,6 @@ package com.chwl.app.treasure_box.widget.dialog
import com.chwl.app.base.BaseDialogFragment
import com.chwl.app.databinding.DialogTreasureBoxBinding
import com.chwl.app.ui.pay.ChargeActivity
-import com.chwl.app.ui.webview.CommonWebViewActivity
-import com.chwl.core.Constants
-import com.chwl.core.UriProvider
-import com.chwl.library.common.util.DeviceUtil.getDeviceId
-import com.chwl.library.utils.AppMetaDataUtil
/**
* author: wushaocheng
diff --git a/core/build.gradle b/core/build.gradle
index 5e901ed91..5820b3be7 100644
--- a/core/build.gradle
+++ b/core/build.gradle
@@ -47,7 +47,7 @@ android {
'src/model_treasure_box/java',
'src/model_sud_wrapper/java'
]
- jniLibs.srcDirs = ['libs', 'umeng-app-libs/jniLibs']
+// jniLibs.srcDirs = ['libs', 'umeng-app-libs/jniLibs']
}
}
diff --git a/core/src/main/java/com/chwl/core/gift/GiftModel.java b/core/src/main/java/com/chwl/core/gift/GiftModel.java
index 0e9e0b461..ace1a6758 100644
--- a/core/src/main/java/com/chwl/core/gift/GiftModel.java
+++ b/core/src/main/java/com/chwl/core/gift/GiftModel.java
@@ -260,6 +260,9 @@ public class GiftModel extends BaseModel implements IGiftModel {
case GiftType.GIFT_TYPE_CP:
giftInfos = allGiftListInfo.getCpGift();
break;
+ case GiftType.GIFT_TYPE_CUSTOM:
+ giftInfos = allGiftListInfo.getCustomGift();
+ break;
}
return giftInfos == null ? new ArrayList<>() : giftInfos;
}
diff --git a/core/src/main/java/com/chwl/core/gift/bean/GiftListInfo.java b/core/src/main/java/com/chwl/core/gift/bean/GiftListInfo.java
index 576276e66..0693cb500 100644
--- a/core/src/main/java/com/chwl/core/gift/bean/GiftListInfo.java
+++ b/core/src/main/java/com/chwl/core/gift/bean/GiftListInfo.java
@@ -22,5 +22,6 @@ public class GiftListInfo implements Serializable {
private List drawGift;
private List singlePopularGift;
private List cpGift;
+ private List customGift;
private String giftVersion;
}
diff --git a/core/src/main/java/com/chwl/core/gift/bean/GiftType.java b/core/src/main/java/com/chwl/core/gift/bean/GiftType.java
index 648813f78..1dc4b5b38 100644
--- a/core/src/main/java/com/chwl/core/gift/bean/GiftType.java
+++ b/core/src/main/java/com/chwl/core/gift/bean/GiftType.java
@@ -56,4 +56,9 @@ public class GiftType {
* cp礼物 - 支持连击
*/
public static final int GIFT_TYPE_CP = 19;
+
+ /**
+ * 定制礼物 - 支持连击
+ */
+ public static final int GIFT_TYPE_CUSTOM = 20;
}
diff --git a/core/src/main/java/com/chwl/core/gift/bean/TagsInfo.java b/core/src/main/java/com/chwl/core/gift/bean/TagsInfo.java
index c00cae01d..0000bd672 100644
--- a/core/src/main/java/com/chwl/core/gift/bean/TagsInfo.java
+++ b/core/src/main/java/com/chwl/core/gift/bean/TagsInfo.java
@@ -35,6 +35,8 @@ public class TagsInfo implements Serializable {
return GiftType.GIFT_TYPE_SINGLE_ROOM;
} else if ("cpGift".equals(key)) {
return GiftType.GIFT_TYPE_CP;
+ }else if ("customGift".equals(key)) {
+ return GiftType.GIFT_TYPE_CUSTOM;
}
return 0;
}
diff --git a/core/src/main/java/com/chwl/core/utils/DialogUtil.kt b/core/src/main/java/com/chwl/core/utils/DialogUtil.kt
new file mode 100644
index 000000000..6db8f93ca
--- /dev/null
+++ b/core/src/main/java/com/chwl/core/utils/DialogUtil.kt
@@ -0,0 +1,32 @@
+package com.chwl.core.utils
+
+import android.app.Activity
+import com.chwl.core.R
+import com.chwl.library.common.util.SPUtils
+import com.chwl.library.constants.ConstantsLib
+import com.chwl.library.utils.ResUtil
+import com.example.lib_utils.AppUtils
+import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialogHelper
+
+object DialogUtil {
+
+ fun getDialog(activity: Activity, listener:EasyAlertDialogHelper.OnDialogActionListener){
+ if (!SPUtils.getBoolean(ConstantsLib.Key.Permissions_Img, false)) {
+ val dialog = EasyAlertDialogHelper.createOkCancelDiolag(
+ activity,
+ null,
+ ResUtil.getString(
+ R.string.dialot_permission_tips,
+ ResUtil.getString(R.string.app_name)
+ ),
+ ResUtil.getString(R.string.Allow),
+ ResUtil.getString(R.string.No),
+ true,
+ listener
+ )
+ dialog.show()
+ } else {
+ listener.doOkAction()
+ }
+ }
+}
\ No newline at end of file
diff --git a/core/src/main/java/com/chwl/core/utils/MyUriUtils.kt b/core/src/main/java/com/chwl/core/utils/MyUriUtils.kt
new file mode 100644
index 000000000..67a0e5dd0
--- /dev/null
+++ b/core/src/main/java/com/chwl/core/utils/MyUriUtils.kt
@@ -0,0 +1,74 @@
+package com.chwl.core.utils
+
+import android.content.Context
+import android.database.Cursor
+import android.graphics.BitmapFactory
+import android.net.Uri
+import android.provider.MediaStore
+import androidx.activity.result.ActivityResultCallback
+import java.io.File
+import java.io.FileOutputStream
+
+object MyUriUtils {
+
+ fun getName(context: Context, uri: Uri) : String?{
+ var fileName:String?=null
+ val projection = arrayOf(MediaStore.MediaColumns.DISPLAY_NAME)
+ val cursor : Cursor ? = context.contentResolver.query(
+ uri,
+ projection,
+ null,
+ null,
+ null
+ )
+ try {
+ cursor?.use {
+ if (it.moveToFirst()) {
+ fileName = it.getString(it.getColumnIndexOrThrow(MediaStore.MediaColumns.DISPLAY_NAME))
+ }
+ }
+ } catch (e: Exception) {
+ }
+ return fileName
+ }
+
+ fun copyFile(context: Context, uri: Uri) : File?{
+ val fileName = getName(context, uri)?:"defName.jpg"
+
+ val outPutDir = context.getExternalFilesDir(null)?:return null
+
+ val outPutFile = File(outPutDir,fileName)
+
+ if (!outPutDir.exists()) {
+ outPutDir.mkdirs()
+ }
+
+ context.contentResolver.openInputStream(uri)?.use { inS->
+ FileOutputStream(outPutFile).use{ outS->
+ inS.copyTo(outS)
+ }
+ return outPutFile
+ } ?: return null
+
+ }
+
+ fun getFileInfo(file: File) : MutableList?{
+ var width = 0
+ var height = 0
+ var minType = "image/jpeg"
+ var data : MutableList ?= null
+
+ BitmapFactory.Options().apply {
+ inJustDecodeBounds = true
+ BitmapFactory.decodeFile(file.absolutePath,this)
+ width = outWidth
+ height = outHeight
+ minType = outMimeType
+ }.let {
+ data =mutableListOf(width.toString(),height.toString(),minType)
+ }
+ return data
+ }
+
+
+}
\ No newline at end of file
diff --git a/core/src/main/res/values-ar/strings.xml b/core/src/main/res/values-ar/strings.xml
index c75c88dbf..9830ddd55 100644
--- a/core/src/main/res/values-ar/strings.xml
+++ b/core/src/main/res/values-ar/strings.xml
@@ -684,4 +684,8 @@
رفض الطرف الآخر طلب الـ PK
(%s)فشلت العملية
+ " السماح لـ %s بالوصول إلى الصور على جهازك؟ ا"
+ السماح
+ لا
+ مخصص
diff --git a/core/src/main/res/values-zh-rTW/strings.xml b/core/src/main/res/values-zh-rTW/strings.xml
index e13da3260..9995c5eb2 100644
--- a/core/src/main/res/values-zh-rTW/strings.xml
+++ b/core/src/main/res/values-zh-rTW/strings.xml
@@ -672,4 +672,8 @@
對方拒絕你的PK請求
操作失敗 (%s)
+ 允許 %s 存取裝置上的相片?
+ 允許
+ 不允許
+ 定制
diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml
index bd6215bbf..d7d6125b3 100644
--- a/core/src/main/res/values/strings.xml
+++ b/core/src/main/res/values/strings.xml
@@ -666,5 +666,12 @@
The opponent rejected your PK request
operation failed (%s)
+
+ Allow %s to access photos on your device?
+ Allow
+ No
+
+ Custom
+
diff --git a/library/build.gradle b/library/build.gradle
index 70be71d36..eb3e7410f 100644
--- a/library/build.gradle
+++ b/library/build.gradle
@@ -105,7 +105,7 @@ dependencies {
api 'io.github.razerdp:BasePopup:3.2.1'
- api 'com.umeng.sdk:utdid:1.1.5.3'
+// api 'com.umeng.sdk:utdid:1.1.5.3'
// api 'com.facebook.android:facebook-android-sdk:16.2.0'
// api 'com.facebook.android:facebook-login:16.2.0'
diff --git a/library/src/main/AndroidManifest.xml b/library/src/main/AndroidManifest.xml
index 561130d6e..6cd757ab4 100644
--- a/library/src/main/AndroidManifest.xml
+++ b/library/src/main/AndroidManifest.xml
@@ -3,9 +3,9 @@
xmlns:android="http://schemas.android.com/apk/res/android">
-
+
-
+
MMKV.delegate(
+ key: String? = null,
+ defaultValue: T,
+ crossinline getter: MMKV.(String?, T) -> T?,
+ crossinline setter: MMKV.(String, T) -> Boolean
+): ReadWriteProperty =
+ object : ReadWriteProperty {
+ override fun getValue(thisRef: Any, property: KProperty<*>): T =
+ getter(key ?: property.name, defaultValue) ?: defaultValue
+
+ override fun setValue(thisRef: Any, property: KProperty<*>, value: T) {
+ setter(key ?: property.name, value)
+ }
+ }
+
+fun MMKV.boolean(
+ key: String? = null,
+ defaultValue: Boolean = false
+): ReadWriteProperty =
+ delegate(key, defaultValue, MMKV::decodeBool, MMKV::encode)
+
+fun MMKV.int(key: String? = null, defaultValue: Int = 0): ReadWriteProperty =
+ delegate(key, defaultValue, MMKV::decodeInt, MMKV::encode)
+
+fun MMKV.long(key: String? = null, defaultValue: Long = 0L): ReadWriteProperty =
+ delegate(key, defaultValue, MMKV::decodeLong, MMKV::encode)
+
+fun MMKV.float(key: String? = null, defaultValue: Float = 0.0F): ReadWriteProperty =
+ delegate(key, defaultValue, MMKV::decodeFloat, MMKV::encode)
+
+fun MMKV.double(key: String? = null, defaultValue: Double = 0.0): ReadWriteProperty =
+ delegate(key, defaultValue, MMKV::decodeDouble, MMKV::encode)
+
+fun MMKV.notNullString(key: String? = null): ReadWriteProperty =
+ string(key, "")
+
+fun MMKV.string(key: String? = null, defaultValue: String): ReadWriteProperty =
+ delegate(key, defaultValue, MMKV::decodeString, MMKV::encode)
+
+fun MMKV.byteArray(
+ key: String? = null,
+ defaultValue: ByteArray
+): ReadWriteProperty =
+ delegate(key, defaultValue, MMKV::decodeBytes, MMKV::encode)
+
+fun MMKV.stringSet(
+ key: String? = null,
+ defaultValue: Set
+): ReadWriteProperty> =
+ delegate(key, defaultValue, MMKV::decodeStringSet, MMKV::encode)
+
+private inline fun MMKV.nullableDelegate(
+ key: String? = null,
+ crossinline getter: MMKV.(String?, T?) -> T?,
+ crossinline setter: MMKV.(String, T?) -> Boolean
+): ReadWriteProperty =
+ object : ReadWriteProperty {
+ override fun getValue(thisRef: Any, property: KProperty<*>): T? =
+ getter(key ?: property.name, null)
+
+ override fun setValue(thisRef: Any, property: KProperty<*>, value: T?) {
+ setter(key ?: property.name, value)
+ }
+ }
+
+fun MMKV.byteArray(
+ key: String? = null,
+): ReadWriteProperty =
+ nullableDelegate(key, MMKV::decodeBytes, MMKV::encode)
+
+fun MMKV.string(
+ key: String? = null,
+): ReadWriteProperty =
+ nullableDelegate(key, MMKV::decodeString, MMKV::encode)
+
+fun MMKV.stringSet(
+ key: String? = null,
+): ReadWriteProperty?> =
+ nullableDelegate(key, MMKV::decodeStringSet, MMKV::encode)
+
+inline fun MMKV.parcelable(
+ key: String? = null,
+ defaultValue: T
+): ReadWriteProperty =
+ object : ReadWriteProperty {
+ override fun getValue(thisRef: Any, property: KProperty<*>): T =
+ decodeParcelable(key ?: property.name, T::class.java, defaultValue)?:defaultValue
+
+ override fun setValue(thisRef: Any, property: KProperty<*>, value: T) {
+ encode(key ?: property.name, value)
+ }
+ }
+
+inline fun MMKV.parcelable(
+ key: String? = null,
+): ReadWriteProperty =
+ object : ReadWriteProperty {
+ override fun getValue(thisRef: Any, property: KProperty<*>): T? =
+ decodeParcelable(key ?: property.name, T::class.java)
+
+ override fun setValue(thisRef: Any, property: KProperty<*>, value: T?) {
+ encode(key ?: property.name, value)
+ }
+ }
\ No newline at end of file
diff --git a/library/src/module_easyphoto/java/com/chwl/library/easyphoto/models/album/AlbumModel.java b/library/src/module_easyphoto/java/com/chwl/library/easyphoto/models/album/AlbumModel.java
index 55b5350a9..cf7a1c29f 100644
--- a/library/src/module_easyphoto/java/com/chwl/library/easyphoto/models/album/AlbumModel.java
+++ b/library/src/module_easyphoto/java/com/chwl/library/easyphoto/models/album/AlbumModel.java
@@ -60,8 +60,7 @@ public class AlbumModel {
public void query(Context context, final CallBack callBack) {
final Context appCxt = context.getApplicationContext();
- if (PermissionChecker.checkSelfPermission(context,
- Build.VERSION.SDK_INT >= 33 ? Manifest.permission.READ_MEDIA_IMAGES : Manifest.permission.READ_EXTERNAL_STORAGE) != PermissionChecker.PERMISSION_GRANTED) {
+ if (PermissionChecker.checkSelfPermission(context,Manifest.permission.READ_EXTERNAL_STORAGE) != PermissionChecker.PERMISSION_GRANTED) {
if (null != callBack) callBack.onAlbumWorkedCallBack();
return;
}
diff --git a/library/src/module_easyphoto/java/com/chwl/library/easyphoto/models/album/entity/Photo.java b/library/src/module_easyphoto/java/com/chwl/library/easyphoto/models/album/entity/Photo.java
index 3b17cd240..d218ad7a9 100644
--- a/library/src/module_easyphoto/java/com/chwl/library/easyphoto/models/album/entity/Photo.java
+++ b/library/src/module_easyphoto/java/com/chwl/library/easyphoto/models/album/entity/Photo.java
@@ -40,6 +40,10 @@ public class Photo implements Parcelable {
this.selectedOriginal = false;
}
+ public Photo(String path) {
+ this.path = path;
+ }
+
@Override
public boolean equals(Object o) {
try {
diff --git a/library/src/module_easyphoto/java/com/chwl/library/easyphoto/ui/EasyPhotosActivity.java b/library/src/module_easyphoto/java/com/chwl/library/easyphoto/ui/EasyPhotosActivity.java
index 7a289c312..979c7040c 100644
--- a/library/src/module_easyphoto/java/com/chwl/library/easyphoto/ui/EasyPhotosActivity.java
+++ b/library/src/module_easyphoto/java/com/chwl/library/easyphoto/ui/EasyPhotosActivity.java
@@ -209,10 +209,9 @@ public class EasyPhotosActivity extends AppCompatActivity implements AlbumItemsA
protected String[] getNeedPermissions() {
if (Setting.isShowCamera) {
- return new String[]{Manifest.permission.CAMERA,
- Build.VERSION.SDK_INT >= 33 ? Manifest.permission.READ_MEDIA_IMAGES : Manifest.permission.READ_EXTERNAL_STORAGE};
+ return new String[]{Manifest.permission.CAMERA,Manifest.permission.READ_EXTERNAL_STORAGE};
} else {
- return new String[]{Build.VERSION.SDK_INT >= 33 ? Manifest.permission.READ_MEDIA_IMAGES : Manifest.permission.READ_EXTERNAL_STORAGE};
+ return new String[]{Manifest.permission.READ_EXTERNAL_STORAGE};
}
}
diff --git a/library/src/module_easyphoto/java/com/chwl/library/easyphoto/ui/PuzzleActivity.java b/library/src/module_easyphoto/java/com/chwl/library/easyphoto/ui/PuzzleActivity.java
index 479f3879e..78873b419 100644
--- a/library/src/module_easyphoto/java/com/chwl/library/easyphoto/ui/PuzzleActivity.java
+++ b/library/src/module_easyphoto/java/com/chwl/library/easyphoto/ui/PuzzleActivity.java
@@ -581,8 +581,7 @@ public class PuzzleActivity extends AppCompatActivity implements View.OnClickLis
}
protected String[] getNeedPermissions() {
- return new String[]{Manifest.permission.CAMERA,
- Build.VERSION.SDK_INT >= 33 ? Manifest.permission.READ_MEDIA_IMAGES : Manifest.permission.READ_EXTERNAL_STORAGE};
+ return new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE};
}
@Override
diff --git a/library/src/module_easyphoto/res/layout/activity_puzzle_easy_photos.xml b/library/src/module_easyphoto/res/layout/activity_puzzle_easy_photos.xml
index 372a9f0b5..916e4ef23 100644
--- a/library/src/module_easyphoto/res/layout/activity_puzzle_easy_photos.xml
+++ b/library/src/module_easyphoto/res/layout/activity_puzzle_easy_photos.xml
@@ -2,6 +2,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ xmlns:tools="http://schemas.android.com/tools"
android:background="@color/easy_photos_bg_primary"
android:fitsSystemWindows="true">
@@ -39,7 +40,8 @@
android:paddingTop="8dp"
android:layout_below="@+id/degree_seek_bar"
android:orientation="horizontal"
- android:visibility="gone">
+ android:visibility="gone"
+ tools:visibility="visible">
+
+
+
+
+
+
\ No newline at end of file
diff --git a/nim_uikit/res/values-ar/strings.xml b/nim_uikit/res/values-ar/strings.xml
index 580101d77..bd6a6201a 100644
--- a/nim_uikit/res/values-ar/strings.xml
+++ b/nim_uikit/res/values-ar/strings.xml
@@ -444,4 +444,9 @@
[رسالة مخصصة]
الملف فارغ أو لا يوجد!
+
+ " السماح لـ %s بالوصول إلى الصور على جهازك؟ ا"
+ السماح
+ لا
+
diff --git a/nim_uikit/res/values-zh-rTW/strings.xml b/nim_uikit/res/values-zh-rTW/strings.xml
index 0395320c5..6a8656fd7 100644
--- a/nim_uikit/res/values-zh-rTW/strings.xml
+++ b/nim_uikit/res/values-zh-rTW/strings.xml
@@ -431,4 +431,10 @@
[自定義消息]
為空或者該文件不存在!
+
+ 允許 %s 存取裝置上的相片?
+ 允許
+ 不允許
+
+
diff --git a/nim_uikit/res/values/strings.xml b/nim_uikit/res/values/strings.xml
index 1bd79c214..5e027d3f4 100644
--- a/nim_uikit/res/values/strings.xml
+++ b/nim_uikit/res/values/strings.xml
@@ -432,4 +432,10 @@
[Custom Message]
is empty or the file does not exist!
+Allow %s to access photos on your device?
+Allow
+No
+
+
+
\ No newline at end of file
diff --git a/nim_uikit/res/values/styles-activity.xml b/nim_uikit/res/values/styles-activity.xml
index 396c3e356..7039f8e66 100644
--- a/nim_uikit/res/values/styles-activity.xml
+++ b/nim_uikit/res/values/styles-activity.xml
@@ -49,4 +49,24 @@
- false
- true
+
+
\ No newline at end of file
diff --git a/nim_uikit/src/com/netease/nim/uikit/business/session/actions/PickImageActionNew.kt b/nim_uikit/src/com/netease/nim/uikit/business/session/actions/PickImageActionNew.kt
index 0939653bf..07aecf3e4 100644
--- a/nim_uikit/src/com/netease/nim/uikit/business/session/actions/PickImageActionNew.kt
+++ b/nim_uikit/src/com/netease/nim/uikit/business/session/actions/PickImageActionNew.kt
@@ -1,9 +1,9 @@
package com.netease.nim.uikit.business.session.actions
import android.content.Intent
+import android.os.Build
import android.text.TextUtils
-import com.netease.nim.uikit.R
-import com.netease.nim.uikit.business.session.helper.SendImageHelper
+import androidx.activity.result.contract.ActivityResultContracts
import com.chwl.library.common.application.BaseApp
import com.chwl.library.common.base.BaseDialogFragment
import com.chwl.library.common.photo.PhotoProvider
@@ -11,8 +11,12 @@ import com.chwl.library.common.util.PhotoCompressUtil
import com.chwl.library.common.util.PhotosCompressCallback
import com.chwl.library.utils.ResUtil
import com.chwl.library.utils.SingleToastUtil
+import com.netease.nim.uikit.R
+import com.netease.nim.uikit.business.session.helper.SendImageHelper
+import com.netease.nim.uikit.common.activity.NimPhotoPickActivity
import java.io.File
+
/**
* Created by zhoujianghua on 2015/7/31.
*/
@@ -33,11 +37,15 @@ abstract class PickImageActionNew protected constructor(
}
private fun checkStoragePermission() {
- PhotoProvider.photoProvider(
- activity,
- maxSelect = 9,
- resultCode = makeRequestCode(REQUEST_CODE_OPEN_PHOTO_PROVIDER)
- )
+ if (Build.VERSION.SDK_INT >= 33) {
+ activity.startActivityForResult(Intent(activity,NimPhotoPickActivity::class.java),makeRequestCode(REQUEST_CODE_OPEN_PHOTO_PROVIDER))
+ } else {
+ PhotoProvider.photoProvider(
+ activity,
+ maxSelect = 9,
+ resultCode = makeRequestCode(REQUEST_CODE_OPEN_PHOTO_PROVIDER)
+ )
+ }
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
@@ -79,6 +87,8 @@ abstract class PickImageActionNew protected constructor(
}
}
+
+
/**
* 发送图片
*/
diff --git a/nim_uikit/src/com/netease/nim/uikit/common/activity/NimPhotoPickActivity.kt b/nim_uikit/src/com/netease/nim/uikit/common/activity/NimPhotoPickActivity.kt
new file mode 100644
index 000000000..9aa019f15
--- /dev/null
+++ b/nim_uikit/src/com/netease/nim/uikit/common/activity/NimPhotoPickActivity.kt
@@ -0,0 +1,144 @@
+package com.netease.nim.uikit.common.activity
+
+import android.content.Context
+import android.content.Intent
+import android.database.Cursor
+import android.net.Uri
+import android.os.Bundle
+import android.provider.MediaStore
+import android.view.Window
+import android.view.WindowManager
+import androidx.activity.result.ActivityResultLauncher
+import androidx.activity.result.PickVisualMediaRequest
+import androidx.activity.result.contract.ActivityResultContracts
+import androidx.appcompat.app.AppCompatActivity
+import com.chwl.library.common.util.SPUtils
+import com.chwl.library.constants.ConstantsLib
+import com.chwl.library.easyphoto.EasyPhotos
+import com.chwl.library.easyphoto.models.album.entity.Photo
+import com.chwl.library.easyphoto.setting.Setting
+import com.chwl.library.utils.ResUtil
+import com.example.lib_utils.AppUtils
+import com.netease.nim.uikit.R
+import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialog
+import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialogHelper
+import java.io.File
+import java.io.FileOutputStream
+
+class NimPhotoPickActivity : AppCompatActivity() {
+
+
+ var pickMedia : ActivityResultLauncher?=null
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.nim_photo_pick_activity)
+
+// requestWindowFeature(Window.FEATURE_NO_TITLE)
+// window.setFlags(
+// WindowManager.LayoutParams.FLAG_FULLSCREEN,
+// WindowManager.LayoutParams.FLAG_FULLSCREEN
+// )
+
+ if (ActivityResultContracts.PickVisualMedia.isPhotoPickerAvailable(this)) {
+ pickMedia = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
+ if (uri != null) {
+ val file = copyFile(this@NimPhotoPickActivity, uri)
+ if (file != null) {
+ val resultList = ArrayList()
+ val data = Intent()
+ resultList.add(Photo(file.path))
+ data.putParcelableArrayListExtra(EasyPhotos.RESULT_PHOTOS, resultList)
+ setResult(RESULT_OK, data)
+ finish()
+ }
+ } else {
+ finish()
+ }
+ }
+ }
+ }
+
+ var isFirst = true
+ var dialog : EasyAlertDialog ?=null
+ override fun onResume() {
+ super.onResume()
+
+ if (!isFirst) {
+ finish()
+ return
+ }
+
+ if (!SPUtils.getBoolean(ConstantsLib.Key.Permissions_Img,false)){
+ dialog = EasyAlertDialogHelper.createOkCancelDiolag(
+ this,
+ null,
+ ResUtil.getString(
+ R.string.dialot_permission_tips_nim,
+ ResUtil.getString(R.string.app_name)
+ ),
+ ResUtil.getString(R.string.Allow_nim),
+ ResUtil.getString(R.string.No_nim),
+ false,
+ object : EasyAlertDialogHelper.OnDialogActionListener {
+ override fun doCancelAction() {
+ finish()
+ }
+
+ override fun doOkAction() {
+ SPUtils.putBoolean(ConstantsLib.Key.Permissions_Img,true)
+ pickMedia?.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
+ }
+ })
+ if (dialog?.isShowing == false) {
+ dialog?.show()
+ }
+ }else{
+ pickMedia?.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
+ }
+ isFirst = false
+
+ }
+
+ private fun getName(context: Context, uri: Uri) : String?{
+ var fileName:String?=null
+ val projection = arrayOf(MediaStore.MediaColumns.DISPLAY_NAME)
+ val cursor : Cursor? = context.contentResolver.query(
+ uri,
+ projection,
+ null,
+ null,
+ null
+ )
+ try {
+ cursor?.use {
+ if (it.moveToFirst()) {
+ fileName = it.getString(it.getColumnIndexOrThrow(MediaStore.MediaColumns.DISPLAY_NAME))
+ }
+ }
+ } catch (e: Exception) {
+ }
+ return fileName
+ }
+
+ private fun copyFile(context: Context, uri: Uri) : File?{
+ val fileName = getName(context, uri)?:"defName.jpg"
+
+ val outPutDir = context.getExternalFilesDir(null)?:return null
+
+ val outPutFile = File(outPutDir,fileName)
+
+ if (!outPutDir.exists()) {
+ outPutDir.mkdirs()
+ }
+
+ context.contentResolver.openInputStream(uri)?.use { inS->
+ FileOutputStream(outPutFile).use{ outS->
+ inS.copyTo(outS)
+ }
+ return outPutFile
+ } ?: return null
+
+ }
+
+}
\ No newline at end of file