ソースを参照

feat: UserPhotoSelectActivity替换图片逻辑

XiaodongLin 1 年間 前
コミット
68a51affda
20 ファイル変更69 行追加31 行削除
  1. 4 0
      app/src/main/java/com/adealink/weparty/imageselect/ImageSelectActivity.kt
  2. 7 3
      app/src/main/java/com/adealink/weparty/imageselect/SelectImageContract.kt
  3. 7 5
      app/src/main/java/com/adealink/weparty/imageselect/SelectImageLifecycleObserver.kt
  4. 2 1
      module/account/src/main/java/com/adealink/weparty/account/register/GenderSelectFragment.kt
  5. 2 1
      module/couple/src/main/java/com/adealink/weparty/couple/activity/LoveHouseActivity.kt
  6. 2 1
      module/couple/src/main/java/com/adealink/weparty/couple/fragment/LoveHouseThemePanelFragment.kt
  7. 2 1
      module/family/src/main/java/com/adealink/weparty/family/create/FamilyCreateActivity.kt
  8. 2 1
      module/family/src/main/java/com/adealink/weparty/family/create/FamilyEditActivity.kt
  9. 2 1
      module/message/src/main/java/com/adealink/weparty/message/conversation/extension/gallery/GalleryBoardComp.kt
  10. 2 1
      module/moment/src/main/java/com/adealink/weparty/moment/usermoment/pub/MomentPublishActivity.kt
  11. 2 1
      module/party/src/main/java/com/adealink/weparty/party/eidt/PartyBannerPreviewActivity.kt
  12. 2 1
      module/party/src/main/java/com/adealink/weparty/party/eidt/SelectPartyCoverActivity.kt
  13. 2 1
      module/profile/src/main/java/com/adealink/weparty/profile/edit/viewcomp/EditAvatarViewComponent.kt
  14. 19 7
      module/profile/src/main/java/com/adealink/weparty/profile/photoselect/UserPhotoSelectActivity.kt
  15. 2 1
      module/room/src/main/java/com/adealink/weparty/room/attr/info/RoomSettingFragment.kt
  16. 2 1
      module/room/src/main/java/com/adealink/weparty/room/chat/view/ChatInputDialog.kt
  17. 2 1
      module/room/src/main/java/com/adealink/weparty/room/create/RoomCreateActivity.kt
  18. 2 1
      module/setting/src/main/java/com/adealink/weparty/setting/feedback/FeedbackActivity.kt
  19. 2 1
      module/superadmin/src/main/java/com/adealink/weparty/superadmin/userpenalty/UserPenaltyActivity.kt
  20. 2 1
      module/userprotect/src/main/java/com/adealink/weparty/userprotect/report/UploadReportEvidenceActivity.kt

+ 4 - 0
app/src/main/java/com/adealink/weparty/imageselect/ImageSelectActivity.kt

@@ -16,6 +16,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
 import com.adealink.frame.aab.util.getCompatColor
 import com.adealink.frame.aab.util.getCompatString
+import com.adealink.frame.base.fastLazy
 import com.adealink.frame.ext.safeSetSpan
 import com.adealink.frame.log.Log
 import com.adealink.frame.mvvm.view.viewBinding
@@ -72,6 +73,7 @@ class ImageSelectActivity : BaseActivity(), OnOperateListener {
         const val SHOW_MES_TIP = "show_mes_tip"
         const val MESSAGE_GIF_MAX_SIZE_KB = 5 * 1024 //GIF 图片上传最大size
         const val COVER_EXPIRE_TIME = "cover_expire_time"
+        const val KEY_FROM_POSITION = "from_position"
     }
 
     private val binding by viewBinding(ActivityImageSelectBinding::inflate)
@@ -94,6 +96,7 @@ class ImageSelectActivity : BaseActivity(), OnOperateListener {
     private var gifOpt: Boolean? = null
     private var showMesTip: MesTipData? = null
     private var coverExpireTime: Long = 0L
+    private val fromPosition by fastLazy { intent.getIntExtra(KEY_FROM_POSITION, -1) }
 
     private val checkedMedias = ArrayList<LocalMedia>()
 
@@ -359,6 +362,7 @@ class ImageSelectActivity : BaseActivity(), OnOperateListener {
         intent.putExtra(SELECT_IMAGE_PATH, filePath)
         intent.putExtra(SELECT_IMAGE_URI, fileUri)
         intent.putExtra(SELECT_IMAGES, fileUri)
+        intent.putExtra(KEY_FROM_POSITION, fromPosition)
         setResult(resultCode, intent)
         finish()
     }

+ 7 - 3
app/src/main/java/com/adealink/weparty/imageselect/SelectImageContract.kt

@@ -7,7 +7,6 @@ import androidx.activity.result.contract.ActivityResultContract
 import com.adealink.weparty.imageselect.clip.ClipParamData
 import com.adealink.weparty.imageselect.clip.MesTipData
 import com.adealink.weparty.imageselect.model.LocalMedia
-import com.adealink.weparty.imageselect.model.MediaInfo
 import com.adealink.weparty.imageselect.model.MediaType
 
 data class SelectImageRequest(
@@ -18,6 +17,7 @@ data class SelectImageRequest(
     val gifOpt: Boolean? = false,//是否需要选择GIF图片
     val mesTip: MesTipData? = null,//显示gif图片的文字信息,
     val coverExpireTime: Long? = null,
+    val fromPosition: Int? = null //列表点击来源的位置
 ) {
     companion object {
         const val SOURCE_EDIT_PROFILE_COVER = "3" //用户资料页封面
@@ -31,7 +31,8 @@ data class SelectImageResult(
     val uri: String?,
     val mediaType: MediaType,
     val mediaInfos: List<LocalMedia>? = null,
-    val clipParamData: ClipParamData? = null
+    val clipParamData: ClipParamData? = null,
+    val fromPosition: Int? = null //列表点击来源的位置
 )
 
 class SelectImageContract : ActivityResultContract<SelectImageRequest, SelectImageResult>() {
@@ -46,6 +47,7 @@ class SelectImageContract : ActivityResultContract<SelectImageRequest, SelectIma
             putExtra(ImageSelectActivity.KEY_GIF_OPTION, input.gifOpt)
             putExtra(ImageSelectActivity.SHOW_MES_TIP, input.mesTip)
             putExtra(ImageSelectActivity.COVER_EXPIRE_TIME, input.coverExpireTime)
+            putExtra(ImageSelectActivity.KEY_FROM_POSITION, input.fromPosition)
         }
     }
 
@@ -61,13 +63,15 @@ class SelectImageContract : ActivityResultContract<SelectImageRequest, SelectIma
             intent?.getStringExtra(ImageSelectActivity.SELECT_IMAGE_URI)
         val mediaInfos =
             intent?.getParcelableArrayListExtra<LocalMedia>(ImageSelectActivity.SELECT_IMAGES)
+        val fromPosition = intent?.getIntExtra(ImageSelectActivity.KEY_FROM_POSITION, -1)
         return SelectImageResult(
             source,
             resultCode,
             if (resultCode == Activity.RESULT_OK) selectedImagePath else null,
             if (resultCode == Activity.RESULT_OK) selectedImageUri else null,
             mediaType,
-            mediaInfos
+            mediaInfos,
+            fromPosition = fromPosition
         )
     }
 

+ 7 - 5
app/src/main/java/com/adealink/weparty/imageselect/SelectImageLifecycleObserver.kt

@@ -54,12 +54,12 @@ abstract class SelectImageLifecycleObserver(
             mediaType = it.mediaType
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
                 if (mediaType != MediaType.IMAGE) {
-                    onResult(source, resultCode, filePath, uri, mediaType, it.mediaInfos)
+                    onResult(source, resultCode, filePath, uri, mediaType, it.mediaInfos,it.fromPosition)
                     return@register
                 }
 
                 if (filePath.isNullOrEmpty() || clipParamData == null) {
-                    onResult(source, resultCode, filePath, uri, mediaType, it.mediaInfos)
+                    onResult(source, resultCode, filePath, uri, mediaType, it.mediaInfos,it.fromPosition)
                     return@register
                 }
 
@@ -67,7 +67,7 @@ abstract class SelectImageLifecycleObserver(
                 val outputFilePath = outputFile.absolutePath
                 clipImageObserver.launch(filePath, outputFilePath, clipParamData)
             } else {
-                onResult(source, resultCode, filePath, uri, mediaType, it.mediaInfos)
+                onResult(source, resultCode, filePath, uri, mediaType, it.mediaInfos,it.fromPosition)
             }
         }
     }
@@ -79,7 +79,8 @@ abstract class SelectImageLifecycleObserver(
         gifOpt: Boolean? = false,
         mesTip: MesTipData? = null,
         maxNum: Int = 1,
-        coverExpireTime: Long = 0L
+        coverExpireTime: Long = 0L,
+        fromPosition: Int? = null
     ) {
         launcher.launch(SelectImageRequest(maxNum, source, clipParamData, mediaType, gifOpt, mesTip, coverExpireTime))
     }
@@ -90,7 +91,8 @@ abstract class SelectImageLifecycleObserver(
         path: String?,
         uri: String?,
         mediaType: MediaType = MediaType.IMAGE,
-        mediaInfos: List<LocalMedia>? = null
+        mediaInfos: List<LocalMedia>? = null,
+        fromPosition: Int? = null
     )
 
     override fun onDestroy(owner: LifecycleOwner) {

+ 2 - 1
module/account/src/main/java/com/adealink/weparty/account/register/GenderSelectFragment.kt

@@ -63,7 +63,8 @@ class GenderSelectFragment : BaseFragment(R.layout.fragment_gender_select) {
                 path: String?,
                 uri: String?,
                 mediaType: MediaType,
-                mediaInfos: List<LocalMedia>?
+                mediaInfos: List<LocalMedia>?,
+                fromPosition: Int?
             ) {
                 if (path.isNullOrEmpty() || uri.isNullOrEmpty()) {
                     return

+ 2 - 1
module/couple/src/main/java/com/adealink/weparty/couple/activity/LoveHouseActivity.kt

@@ -92,7 +92,8 @@ class LoveHouseActivity : BaseKeyboardActivity(), ILoveHouseListener {
                 path: String?,
                 uri: String?,
                 mediaType: MediaType,
-                mediaInfos: List<LocalMedia>?
+                mediaInfos: List<LocalMedia>?,
+                fromPosition: Int?
             ) {
                 if (source == SOURCE_EDIT_LOVE_HOUSE_BG_COVER) {//小窝背景
                     onImageSelectResult(path, uri)

+ 2 - 1
module/couple/src/main/java/com/adealink/weparty/couple/fragment/LoveHouseThemePanelFragment.kt

@@ -64,7 +64,8 @@ class LoveHouseThemePanelFragment : BottomDialogFragment(R.layout.fragment_love_
                 path: String?,
                 uri: String?,
                 mediaType: MediaType,
-                mediaInfos: List<LocalMedia>?
+                mediaInfos: List<LocalMedia>?,
+                fromPosition: Int?
             ) {
                 if (source == SOURCE_EDIT_LOVE_HOUSE_BG_COVER) {//小窝背景
                     onImageSelectResult(path, uri)

+ 2 - 1
module/family/src/main/java/com/adealink/weparty/family/create/FamilyCreateActivity.kt

@@ -54,7 +54,8 @@ class FamilyCreateActivity : BaseActivity() {
                 path: String?,
                 uri: String?,
                 mediaType: MediaType,
-                mediaInfos: List<LocalMedia>?
+                mediaInfos: List<LocalMedia>?,
+                fromPosition: Int?
             ) {
                 if (mediaType == MediaType.IMAGE) {
                     onImageSelectResult(path, uri)

+ 2 - 1
module/family/src/main/java/com/adealink/weparty/family/create/FamilyEditActivity.kt

@@ -54,7 +54,8 @@ class FamilyEditActivity : BaseActivity() {
                 path: String?,
                 uri: String?,
                 mediaType: MediaType,
-                mediaInfos: List<LocalMedia>?
+                mediaInfos: List<LocalMedia>?,
+                fromPosition: Int?
             ) {
                 if (mediaType == MediaType.IMAGE) {
                     onImageSelectResult(path, uri)

+ 2 - 1
module/message/src/main/java/com/adealink/weparty/message/conversation/extension/gallery/GalleryBoardComp.kt

@@ -50,7 +50,8 @@ class GalleryBoardComp(
                 path: String?,
                 uri: String?,
                 mediaType: MediaType,
-                mediaInfos: List<LocalMedia>?
+                mediaInfos: List<LocalMedia>?,
+                fromPosition: Int?
             ) {
                 handleImageSelectResult(mediaInfos)
             }

+ 2 - 1
module/moment/src/main/java/com/adealink/weparty/moment/usermoment/pub/MomentPublishActivity.kt

@@ -66,7 +66,8 @@ class MomentPublishActivity : BaseActivity(), MomentPubPhotoItemViewBinder.OnPho
                 path: String?,
                 uri: String?,
                 mediaType: MediaType,
-                mediaInfos: List<LocalMedia>?
+                mediaInfos: List<LocalMedia>?,
+                fromPosition: Int?
             ) {
                 if (mediaInfos != null) {
                     onImageSelectResult(mediaInfos)

+ 2 - 1
module/party/src/main/java/com/adealink/weparty/party/eidt/PartyBannerPreviewActivity.kt

@@ -31,7 +31,8 @@ class PartyBannerPreviewActivity : BaseActivity() {
                 path: String?,
                 uri: String?,
                 mediaType: MediaType,
-                mediaInfos: List<LocalMedia>?
+                mediaInfos: List<LocalMedia>?,
+                fromPosition: Int?
             ) {
                 onImageSelectResult(source, path, uri)
             }

+ 2 - 1
module/party/src/main/java/com/adealink/weparty/party/eidt/SelectPartyCoverActivity.kt

@@ -75,7 +75,8 @@ class SelectPartyCoverActivity : BaseActivity(), ICoverClickListener {
                 path: String?,
                 uri: String?,
                 mediaType: MediaType,
-                mediaInfos: List<LocalMedia>?
+                mediaInfos: List<LocalMedia>?,
+                fromPosition: Int?
             ) {
                 onImageSelectResult(source, path, uri)
             }

+ 2 - 1
module/profile/src/main/java/com/adealink/weparty/profile/edit/viewcomp/EditAvatarViewComponent.kt

@@ -36,7 +36,8 @@ class EditAvatarViewComponent(
                 path: String?,
                 uri: String?,
                 mediaType: MediaType,
-                mediaInfos: List<LocalMedia>?
+                mediaInfos: List<LocalMedia>?,
+                fromPosition: Int?
             ) {
                 onImageSelectResult(source, path, uri)
             }

+ 19 - 7
module/profile/src/main/java/com/adealink/weparty/profile/photoselect/UserPhotoSelectActivity.kt

@@ -81,15 +81,20 @@ class UserPhotoSelectActivity : BaseActivity(),
                 path: String?,
                 uri: String?,
                 mediaType: MediaType,
-                mediaInfos: List<LocalMedia>?
+                mediaInfos: List<LocalMedia>?,
+                fromPosition: Int?
             ) {
-                onImageSelectResult(source, mediaInfos)
+                onImageSelectResult(source, mediaInfos, fromPosition)
             }
 
         }
     }
 
-    private fun onImageSelectResult(source: String, mediaInfos: List<LocalMedia>?) {
+    private fun onImageSelectResult(
+        source: String,
+        mediaInfos: List<LocalMedia>?,
+        fromPosition: Int?
+    ) {
         if (mediaInfos.isNullOrEmpty()) {
             return
         }
@@ -111,7 +116,14 @@ class UserPhotoSelectActivity : BaseActivity(),
             return
         }
         if (source == SOURCE_REPLACE_PHOTO_IMAGE) {
-            //todo:替换指定图片
+            if (fromPosition != null && fromPosition >= 0) {
+                photoDataList.removeAt(fromPosition)
+                photoDataList.add(
+                    fromPosition,
+                    ProfileEditPhotoItemData(null, mediaInfos[0].uri, mediaInfos[0].path)
+                )
+                photoListAdapter.notifyItemChanged(fromPosition)
+            }
         }
 
     }
@@ -225,10 +237,10 @@ class UserPhotoSelectActivity : BaseActivity(),
         )
     }
 
-    private fun replaceImage() {
+    private fun replaceImage(position: Int) {
         //todo:替换指定图片,把index进行透传
         selectImageObserver.launch(
-            SOURCE_REPLACE_PHOTO_IMAGE, gifOpt = gifEnable, maxNum = 1
+            SOURCE_REPLACE_PHOTO_IMAGE, gifOpt = gifEnable, maxNum = 1, fromPosition = position
         )
 
     }
@@ -255,7 +267,7 @@ class UserPhotoSelectActivity : BaseActivity(),
             override fun onActionClick(viewId: Int) {
                 when (viewId) {
                     R.id.key_user_photo_select_replace_item -> {
-                        replaceImage()
+                        replaceImage(position)
                     }
 
                     R.id.key_user_photo_select_delete_item -> {

+ 2 - 1
module/room/src/main/java/com/adealink/weparty/room/attr/info/RoomSettingFragment.kt

@@ -96,7 +96,8 @@ class RoomSettingFragment : BaseFragment(R.layout.fragment_room_setting) {
                 path: String?,
                 uri: String?,
                 mediaType: MediaType,
-                mediaInfos: List<LocalMedia>?
+                mediaInfos: List<LocalMedia>?,
+                fromPosition: Int?
             ) {
                 onImageSelectResult(path, uri)
             }

+ 2 - 1
module/room/src/main/java/com/adealink/weparty/room/chat/view/ChatInputDialog.kt

@@ -113,7 +113,8 @@ class ChatInputDialog : KeyboardBottomDialogFragment(R.layout.dialog_chat_messag
                 path: String?,
                 uri: String?,
                 mediaType: MediaType,
-                mediaInfos: List<LocalMedia>?
+                mediaInfos: List<LocalMedia>?,
+                fromPosition: Int?
             ) {
                 onImageSelectResult(path, uri)
             }

+ 2 - 1
module/room/src/main/java/com/adealink/weparty/room/create/RoomCreateActivity.kt

@@ -42,7 +42,8 @@ class RoomCreateActivity : BaseActivity() {
                 path: String?,
                 uri: String?,
                 mediaType: MediaType,
-                mediaInfos: List<LocalMedia>?
+                mediaInfos: List<LocalMedia>?,
+                fromPosition: Int?
             ) {
                 onImageSelectResult(path, uri)
             }

+ 2 - 1
module/setting/src/main/java/com/adealink/weparty/setting/feedback/FeedbackActivity.kt

@@ -59,7 +59,8 @@ class FeedbackActivity : BaseActivity(), FeedbackPhotoItemViewBinder.FeedBackPho
                 path: String?,
                 uri: String?,
                 mediaType: MediaType,
-                mediaInfos: List<LocalMedia>?
+                mediaInfos: List<LocalMedia>?,
+                fromPosition: Int?
             ) {
                 onImageSelectResult(source, path, uri)
             }

+ 2 - 1
module/superadmin/src/main/java/com/adealink/weparty/superadmin/userpenalty/UserPenaltyActivity.kt

@@ -99,7 +99,8 @@ class UserPenaltyActivity : BaseActivity(), SelectedPunishmentReasonListener {
                 path: String?,
                 uri: String?,
                 mediaType: MediaType,
-                mediaInfos: List<LocalMedia>?
+                mediaInfos: List<LocalMedia>?,
+                fromPosition: Int?
             ) {
                 if (path.isNullOrEmpty() || uri.isNullOrEmpty()) {
                     return

+ 2 - 1
module/userprotect/src/main/java/com/adealink/weparty/userprotect/report/UploadReportEvidenceActivity.kt

@@ -69,7 +69,8 @@ class UploadReportEvidenceActivity : BaseActivity() {
                 path: String?,
                 uri: String?,
                 mediaType: MediaType,
-                mediaInfos: List<LocalMedia>?
+                mediaInfos: List<LocalMedia>?,
+                fromPosition: Int?
             ) {
                 if (path.isNullOrEmpty() || uri.isNullOrEmpty()) {
                     return