From 5b781b890c78f776762a61484aea14129b16b9d3 Mon Sep 17 00:00:00 2001 From: wzq Date: Mon, 16 Oct 2023 20:04:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=BF=E9=97=B4=E7=9B=B8=E5=86=8C=20?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E7=85=A7=E7=89=87UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 2 +- .../avroom/fragment/RoomAlbumFragment.kt | 51 ------ .../avroom/fragment/RoomAlbumViewModel.kt | 6 - .../erban/avroom/model/RoomAlbumViewModel.kt | 9 - .../erban/avroom/room_album/PhotoItem.kt | 14 ++ .../RoomAlbumActivity.kt | 47 +----- .../avroom/room_album/RoomAlbumFragment.kt | 74 ++++++++ .../avroom/room_album/RoomAlbumViewModel.kt | 26 +++ .../UploadRoomAlbumDialogFragment.kt | 159 ++++++++++++++++++ .../res/color/color_selector_radio_button.xml | 8 + .../drawable-xhdpi/ic_delete_room_album.webp | Bin 0 -> 290 bytes .../ic_dialog_room_album_upload_gallery_.png | Bin 0 -> 3982 bytes app/src/main/res/drawable/bg_f5f6fa_6.xml | 7 + .../drawable/bg_room_album_add_picture.xml | 14 ++ .../drawable/selector_room_album_upload.xml | 18 ++ .../res/layout/dialog_room_album_upload.xml | 155 +++++++++++++++++ app/src/main/res/layout/item_add_picture.xml | 38 +++++ .../layout/item_dialog_room_album_upload.xml | 6 + app/src/main/res/layout/item_room_album.xml | 2 +- app/src/main/res/values/strings.xml | 4 + 20 files changed, 531 insertions(+), 109 deletions(-) delete mode 100644 app/src/main/java/com/yizhuan/erban/avroom/fragment/RoomAlbumFragment.kt delete mode 100644 app/src/main/java/com/yizhuan/erban/avroom/fragment/RoomAlbumViewModel.kt delete mode 100644 app/src/main/java/com/yizhuan/erban/avroom/model/RoomAlbumViewModel.kt create mode 100644 app/src/main/java/com/yizhuan/erban/avroom/room_album/PhotoItem.kt rename app/src/main/java/com/yizhuan/erban/avroom/{activity => room_album}/RoomAlbumActivity.kt (69%) create mode 100644 app/src/main/java/com/yizhuan/erban/avroom/room_album/RoomAlbumFragment.kt create mode 100644 app/src/main/java/com/yizhuan/erban/avroom/room_album/RoomAlbumViewModel.kt create mode 100644 app/src/main/java/com/yizhuan/erban/avroom/room_album/UploadRoomAlbumDialogFragment.kt create mode 100644 app/src/main/res/color/color_selector_radio_button.xml create mode 100644 app/src/main/res/drawable-xhdpi/ic_delete_room_album.webp create mode 100644 app/src/main/res/drawable-xhdpi/ic_dialog_room_album_upload_gallery_.png create mode 100644 app/src/main/res/drawable/bg_f5f6fa_6.xml create mode 100644 app/src/main/res/drawable/bg_room_album_add_picture.xml create mode 100644 app/src/main/res/drawable/selector_room_album_upload.xml create mode 100644 app/src/main/res/layout/dialog_room_album_upload.xml create mode 100644 app/src/main/res/layout/item_add_picture.xml create mode 100644 app/src/main/res/layout/item_dialog_room_album_upload.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 08f6d0fee..38f00dc6e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1086,7 +1086,7 @@ - + diff --git a/app/src/main/java/com/yizhuan/erban/avroom/fragment/RoomAlbumFragment.kt b/app/src/main/java/com/yizhuan/erban/avroom/fragment/RoomAlbumFragment.kt deleted file mode 100644 index cf9b7b45f..000000000 --- a/app/src/main/java/com/yizhuan/erban/avroom/fragment/RoomAlbumFragment.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.yizhuan.erban.avroom.fragment - -import androidx.fragment.app.viewModels -import androidx.recyclerview.widget.GridLayoutManager -import com.chad.library.adapter.base.BaseQuickAdapter -import com.chad.library.adapter.base.BaseViewHolder -import com.yizhuan.erban.R -import com.yizhuan.erban.base.BaseViewBindingFragment -import com.yizhuan.erban.databinding.FragmentRoomAlbumBinding -import com.yizhuan.erban.ui.widget.recyclerview.decoration.GridSpacingItemNewDecoration - -class RoomAlbumFragment : BaseViewBindingFragment() { - - private val viewModel: RoomAlbumViewModel by viewModels() - - override fun init() { - binding.recyclerView.layoutManager = GridLayoutManager(context, 2) - val offset = resources.getDimensionPixelOffset(R.dimen.dp_15) - binding.recyclerView.addItemDecoration( - GridSpacingItemNewDecoration( - offset, - offset, - true - ) - ) - binding.recyclerView.adapter = - object : BaseQuickAdapter(R.layout.item_room_album) { - override fun convert(helper: BaseViewHolder, item: Int?) { - //ImageLoadUtils.loadImageWithBlur( - // context, - // "https://image.hfighting.com/FsElQzIALqAixbAT56riNMotkAZR?imageslim", - // helper.getView(R.id.iv_pic), - // 25, 4 - //) - - } - }.apply { - val list = mutableListOf() - for (i in 0 until 20) { - list.add(0) - } - setNewData(list) - } - - } - - companion object { - fun newInstance() = RoomAlbumFragment() - } - -} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/avroom/fragment/RoomAlbumViewModel.kt b/app/src/main/java/com/yizhuan/erban/avroom/fragment/RoomAlbumViewModel.kt deleted file mode 100644 index 6993d1952..000000000 --- a/app/src/main/java/com/yizhuan/erban/avroom/fragment/RoomAlbumViewModel.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.yizhuan.erban.avroom.fragment - -import com.yizhuan.erban.base.BaseViewModel - -class RoomAlbumViewModel : BaseViewModel() { -} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/avroom/model/RoomAlbumViewModel.kt b/app/src/main/java/com/yizhuan/erban/avroom/model/RoomAlbumViewModel.kt deleted file mode 100644 index 0f4bc6809..000000000 --- a/app/src/main/java/com/yizhuan/erban/avroom/model/RoomAlbumViewModel.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.yizhuan.erban.avroom.model - -import com.yizhuan.erban.base.BaseViewModel - -class RoomAlbumViewModel :BaseViewModel(){ - init { - - } -} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/avroom/room_album/PhotoItem.kt b/app/src/main/java/com/yizhuan/erban/avroom/room_album/PhotoItem.kt new file mode 100644 index 000000000..f3c9afd52 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/avroom/room_album/PhotoItem.kt @@ -0,0 +1,14 @@ +package com.yizhuan.erban.avroom.room_album + +import com.chad.library.adapter.base.entity.MultiItemEntity + +data class PhotoItem(val path: String, val type: Int) : MultiItemEntity { + override fun getItemType(): Int { + return type + } + + companion object { + const val TYPE_PHOTO = 0 + const val TYPE_ADD = 1 + } +} diff --git a/app/src/main/java/com/yizhuan/erban/avroom/activity/RoomAlbumActivity.kt b/app/src/main/java/com/yizhuan/erban/avroom/room_album/RoomAlbumActivity.kt similarity index 69% rename from app/src/main/java/com/yizhuan/erban/avroom/activity/RoomAlbumActivity.kt rename to app/src/main/java/com/yizhuan/erban/avroom/room_album/RoomAlbumActivity.kt index dd6dfd865..2aea1cc81 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/activity/RoomAlbumActivity.kt +++ b/app/src/main/java/com/yizhuan/erban/avroom/room_album/RoomAlbumActivity.kt @@ -1,4 +1,4 @@ -package com.yizhuan.erban.avroom.activity +package com.yizhuan.erban.avroom.room_album import android.annotation.SuppressLint import android.content.Context @@ -11,8 +11,6 @@ import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment import androidx.viewpager2.adapter.FragmentStateAdapter import com.yizhuan.erban.R -import com.yizhuan.erban.avroom.fragment.RoomAlbumFragment -import com.yizhuan.erban.avroom.model.RoomAlbumViewModel import com.yizhuan.erban.base.BaseViewBindingActivity import com.yizhuan.erban.databinding.ActivityRoomAlbumBinding import com.yizhuan.erban.ui.widget.magicindicator.ViewPagerHelper @@ -30,12 +28,10 @@ class RoomAlbumActivity : BaseViewBindingActivity() { override fun init() { initTitleBar(getString(R.string.room_album)) - mTitleBar.setBackgroundResource(R.color.color_F5F6FA) + mTitleBar.setBackgroundResource(R.color.white) val titles = listOf("我的照片", "普通照片", "解鎖照片") - //binding.tvUpload.setImageResource(R.drawable.bg_activity_room_album_upload) - binding.indicator.navigator = CommonNavigator(this).apply { isAdjustMode = true @@ -99,41 +95,10 @@ class RoomAlbumActivity : BaseViewBindingActivity() { } } - //binding.vp.adapter = object : - // BaseQuickAdapter(R.layout.common_recyclerview, titles) { - // override fun convert(helper: BaseViewHolder, item: String) { - // val recyclerView = helper.getView(R.id.recycler_view) - // recyclerView.layoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT - // recyclerView.layoutManager = GridLayoutManager(this@RoomAlbumActivity, 2) - // val offset = resources.getDimensionPixelOffset(R.dimen.dp_15) - // recyclerView.addItemDecoration( - // GridSpacingItemNewDecoration( - // offset, - // offset, - // true - // ) - // ) - // recyclerView.adapter = - // object : BaseQuickAdapter(R.layout.item_room_album) { - // override fun convert(helper: BaseViewHolder, item: Int?) { - // ImageLoadUtils.loadImageWithBlur( - // context, - // "https://image.hfighting.com/FsElQzIALqAixbAT56riNMotkAZR?imageslim", - // helper.getView(R.id.iv_pic), - // 25, 4 - // ) - // - // } - // }.apply { - // val list = mutableListOf() - // for (i in 0 until 20) { - // list.add(0) - // } - // setNewData(list) - // } - // } - //} - } + binding.tvUpload.setOnClickListener { + UploadRoomAlbumDialogFragment().show(supportFragmentManager, UploadRoomAlbumDialogFragment::class.java.simpleName) + } + } companion object { @JvmStatic diff --git a/app/src/main/java/com/yizhuan/erban/avroom/room_album/RoomAlbumFragment.kt b/app/src/main/java/com/yizhuan/erban/avroom/room_album/RoomAlbumFragment.kt new file mode 100644 index 000000000..7865f294f --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/avroom/room_album/RoomAlbumFragment.kt @@ -0,0 +1,74 @@ +package com.yizhuan.erban.avroom.room_album + +import android.view.ViewGroup +import androidx.fragment.app.activityViewModels +import androidx.recyclerview.widget.GridLayoutManager +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.BaseViewHolder +import com.yizhuan.erban.R +import com.yizhuan.erban.base.BaseViewBindingFragment +import com.yizhuan.erban.databinding.FragmentRoomAlbumBinding +import com.yizhuan.erban.ui.utils.ImageLoadUtils +import com.yizhuan.erban.ui.widget.ButtonItem +import com.yizhuan.erban.ui.widget.recyclerview.decoration.GridSpacingItemNewDecoration + +class RoomAlbumFragment : BaseViewBindingFragment() { + + private val viewModel by activityViewModels() + + override fun init() { + binding.recyclerView.layoutManager = GridLayoutManager(context, 2) + val offset = resources.getDimensionPixelOffset(R.dimen.dp_15) + binding.recyclerView.addItemDecoration( + GridSpacingItemNewDecoration( + offset, + offset, + true + ) + ) + binding.recyclerView.adapter = + object : BaseQuickAdapter(R.layout.item_room_album) { + override fun convert(helper: BaseViewHolder, item: String) { + ImageLoadUtils.loadImageWithBlur( + context, + item, + helper.getView(R.id.iv_pic), + 25, 4 + ) + } + + override fun onCreateDefViewHolder( + parent: ViewGroup?, + viewType: Int + ): BaseViewHolder { + val holder = super.onCreateDefViewHolder(parent, viewType) + holder.addOnClickListener(R.id.v_action) + return holder + } + + }.apply { + + viewModel.myPhotosLiveData.observe(this@RoomAlbumFragment) { + setNewData(it) + } + + setOnItemChildClickListener { _, view, position -> + if (view.id == R.id.v_action) { + val buttonItems = listOf( + ButtonItem("發送到公屏", {}), + ButtonItem("刪除照片", {}), + ButtonItem("查看大圖", {}) + ) + dialogManager.showCommonPopupDialog(buttonItems) + + } + } + } + + } + + companion object { + fun newInstance() = RoomAlbumFragment() + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/avroom/room_album/RoomAlbumViewModel.kt b/app/src/main/java/com/yizhuan/erban/avroom/room_album/RoomAlbumViewModel.kt new file mode 100644 index 000000000..f5685b73c --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/avroom/room_album/RoomAlbumViewModel.kt @@ -0,0 +1,26 @@ +package com.yizhuan.erban.avroom.room_album + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import com.yizhuan.erban.base.BaseViewModel + +class RoomAlbumViewModel : BaseViewModel() { + + private val _myPhotosLiveData = MutableLiveData>() + val myPhotosLiveData: LiveData> = _myPhotosLiveData + + init { + loadMyPhotos() + } + + fun loadMyPhotos() { + safeLaunch { + val list = mutableListOf() + for (i in 0 until 20) { + list.add("https://image.hfighting.com/FsElQzIALqAixbAT56riNMotkAZR") + } + + _myPhotosLiveData.value = list + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/avroom/room_album/UploadRoomAlbumDialogFragment.kt b/app/src/main/java/com/yizhuan/erban/avroom/room_album/UploadRoomAlbumDialogFragment.kt new file mode 100644 index 000000000..7a22adac8 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/avroom/room_album/UploadRoomAlbumDialogFragment.kt @@ -0,0 +1,159 @@ +package com.yizhuan.erban.avroom.room_album + +import android.Manifest +import android.app.Activity +import android.app.Dialog +import android.content.Intent +import android.os.Build +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import androidx.recyclerview.widget.GridLayoutManager +import com.chad.library.adapter.base.BaseMultiItemQuickAdapter +import com.chad.library.adapter.base.BaseViewHolder +import com.google.android.material.bottomsheet.BottomSheetDialogFragment +import com.yizhuan.erban.R +import com.yizhuan.erban.databinding.DialogRoomAlbumUploadBinding +import com.yizhuan.erban.ui.utils.ImageLoadUtilsV2 +import com.yizhuan.erban.ui.widget.recyclerview.decoration.GridSpacingItemNewDecoration +import com.yizhuan.xchat_android_library.common.photo.PhotoProvider +import com.yizhuan.xchat_android_library.common.photo.PhotoProvider.photoProvider +import com.yizhuan.xchat_android_library.easypermisssion.EasyPermissions + +class UploadRoomAlbumDialogFragment : BottomSheetDialogFragment() { + + private var _binding: DialogRoomAlbumUploadBinding? = null + private val binding get() = _binding!! + + private lateinit var photoAdapter: BaseMultiItemQuickAdapter + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setStyle(STYLE_NO_TITLE, R.style.ErbanBottomSheetDialog) + } + + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + val dialog = super.onCreateDialog(savedInstanceState) + dialog.window?.attributes?.apply { + width = WindowManager.LayoutParams.MATCH_PARENT + height = WindowManager.LayoutParams.MATCH_PARENT + } + + return dialog + } + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + _binding = DialogRoomAlbumUploadBinding.inflate(layoutInflater, container, false) + + binding.rvPhoto.layoutManager = GridLayoutManager(context, 3) + binding.rvPhoto.addItemDecoration(GridSpacingItemNewDecoration(resources.getDimensionPixelOffset(R.dimen.dp_18), true)) + + photoAdapter = + object : BaseMultiItemQuickAdapter( + mutableListOf( + PhotoItem( + "", + PhotoItem.TYPE_ADD + ) + ) + ) { + init { + addItemType(PhotoItem.TYPE_PHOTO, R.layout.item_publish_image) + addItemType(PhotoItem.TYPE_ADD, R.layout.item_add_picture) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder { + val holder = super.onCreateViewHolder(parent, viewType) + if (viewType == PhotoItem.TYPE_PHOTO) { + holder.setGone(R.id.iv_gif_tag, false) + holder.setImageResource(R.id.iv_delete, R.drawable.ic_delete_room_album) + holder.addOnClickListener(R.id.iv_delete) + } + return holder + } + + override fun convert(helper: BaseViewHolder, item: PhotoItem) { + if (item.type == PhotoItem.TYPE_ADD) { + return + } + + ImageLoadUtilsV2.loadImage(helper.getView(R.id.iv_photo), item.path, false, 8) + } + }.apply { + setOnItemChildClickListener { _, view, position -> + if (view.id == R.id.iv_delete) { + remove(position) + } + } + setOnItemClickListener { _, view, position -> + if (position == data.size - 1) { + checkStoragePermission() + } + } + } + + binding.rvPhoto.adapter = photoAdapter + + binding.rgType.setOnCheckedChangeListener { group, checkedId -> + } + return binding.root + } + + 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 + ) + } + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + if (resultCode != Activity.RESULT_OK) { + return + } + if (requestCode == 200) { + PhotoProvider.getResultPathListAsync(data) { + val list = photoAdapter.data + val removeLast = list.removeLast() + it?.forEach { item -> + list.add(PhotoItem(item, PhotoItem.TYPE_PHOTO)) + } + if (list.size < 6) { + list.add(removeLast) + } + photoAdapter.notifyDataSetChanged() + } + } + } + + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + +} \ No newline at end of file diff --git a/app/src/main/res/color/color_selector_radio_button.xml b/app/src/main/res/color/color_selector_radio_button.xml new file mode 100644 index 000000000..a7599c814 --- /dev/null +++ b/app/src/main/res/color/color_selector_radio_button.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-xhdpi/ic_delete_room_album.webp b/app/src/main/res/drawable-xhdpi/ic_delete_room_album.webp new file mode 100644 index 0000000000000000000000000000000000000000..953a54ad37af27c0783284d66395623999bd49da GIT binary patch literal 290 zcmV+-0p0#mNk&E*0RRA3MM6+kP&iBt0RR9m8^8t-ub`-HBPp-p4|HaiKo1%U+BS0X zlRwZ!pzSGW+sMfsf2uzKbf{?~$uWOor=#(8taAWb{dgp_E6}v zjv6pvsM=c&L%P!2;sY(KI((w54FMk++K)Jd`vyi4WMe!BBC;`dk&Az73P*BDr%gmo zj-@0p*CzJzFj9mr-G~mlbi-LFT*$9hcZ<<(gNDJ$NG|GL7hN&w#;Yq8#z_XArmL%Y o*Q<-d>~wU!G8wE3U>yfnHc!pQ+)Pc);?xXJ&HfK-W@@b&0N#Fq*8l(j literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_dialog_room_album_upload_gallery_.png b/app/src/main/res/drawable-xhdpi/ic_dialog_room_album_upload_gallery_.png new file mode 100644 index 0000000000000000000000000000000000000000..1f7184be12813fe1b71e47d5c5b300bdbd7cdb6f GIT binary patch literal 3982 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 + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_room_album_add_picture.xml b/app/src/main/res/drawable/bg_room_album_add_picture.xml new file mode 100644 index 000000000..fdd548b9b --- /dev/null +++ b/app/src/main/res/drawable/bg_room_album_add_picture.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_room_album_upload.xml b/app/src/main/res/drawable/selector_room_album_upload.xml new file mode 100644 index 000000000..8a6e6f483 --- /dev/null +++ b/app/src/main/res/drawable/selector_room_album_upload.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_room_album_upload.xml b/app/src/main/res/layout/dialog_room_album_upload.xml new file mode 100644 index 000000000..1b649dc59 --- /dev/null +++ b/app/src/main/res/layout/dialog_room_album_upload.xml @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_add_picture.xml b/app/src/main/res/layout/item_add_picture.xml new file mode 100644 index 000000000..d01dd3819 --- /dev/null +++ b/app/src/main/res/layout/item_add_picture.xml @@ -0,0 +1,38 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_dialog_room_album_upload.xml b/app/src/main/res/layout/item_dialog_room_album_upload.xml new file mode 100644 index 000000000..77d9ef65f --- /dev/null +++ b/app/src/main/res/layout/item_dialog_room_album_upload.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_room_album.xml b/app/src/main/res/layout/item_room_album.xml index 3bcc552e3..c7242dff7 100644 --- a/app/src/main/res/layout/item_room_album.xml +++ b/app/src/main/res/layout/item_room_album.xml @@ -33,7 +33,7 @@ app:layout_constraintTop_toTopOf="@id/iv_pic" /> 分解傳說精靈將隨機獲得400-500個碎片 上傳照片 房間相冊 + 照片類型 + 普通照片 + 解鎖照片 + 解鎖禮物 \ No newline at end of file