diff --git a/app/src/main/java/com/chwl/app/home/fragment/ContactsListFragment.kt b/app/src/main/java/com/chwl/app/home/fragment/ContactsListFragment.kt index 32ba507cb..3f83a6b10 100644 --- a/app/src/main/java/com/chwl/app/home/fragment/ContactsListFragment.kt +++ b/app/src/main/java/com/chwl/app/home/fragment/ContactsListFragment.kt @@ -26,6 +26,7 @@ import com.chwl.app.support.FragmentVisibleStateHelper import com.chwl.app.ui.im.friend.FriendListFragment import com.chwl.app.ui.im.recent.RecentListFragment import com.chwl.app.ui.relation.FansListFragment +import com.chwl.app.ui.user.adapter.ContactsIndicatorAdapter import com.chwl.app.ui.user.adapter.UserInfoIndicatorAdapter import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator import com.chwl.core.Constants @@ -85,7 +86,7 @@ class ContactsListFragment : BaseViewBindingFragment tagList.add(getString(R.string.layout_fragment_contact_list_04)) val commonNavigator = CommonNavigator(context) commonNavigator.setTitleWrapContent(false) - val magicIndicatorAdapter = UserInfoIndicatorAdapter(context, tagList) + val magicIndicatorAdapter = ContactsIndicatorAdapter(context, tagList) magicIndicatorAdapter.setOnItemSelectListener { position: Int, view: TextView? -> binding.viewPager.currentItem = position } diff --git a/app/src/main/java/com/chwl/app/ui/user/activity/UserInfoActivity.java b/app/src/main/java/com/chwl/app/ui/user/activity/UserInfoActivity.java index 420630b53..eb6a40d62 100644 --- a/app/src/main/java/com/chwl/app/ui/user/activity/UserInfoActivity.java +++ b/app/src/main/java/com/chwl/app/ui/user/activity/UserInfoActivity.java @@ -7,21 +7,28 @@ import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; import android.content.Intent; -import android.os.CountDownTimer; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; +import androidx.core.content.ContextCompat; import androidx.core.widget.NestedScrollView; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; -import androidx.viewpager.widget.ViewPager; import androidx.viewpager2.widget.ViewPager2; import com.chwl.app.avroom.adapter.CommonVPAdapter; +import com.chwl.app.ui.user.adapter.UserInfoTopAlbumAdapter; +import com.chwl.app.ui.user.fragment.UserInfoDataFragment; +import com.chwl.app.utils.AppBarStateChangeListener; +import com.chwl.core.decoration.headwear.bean.HeadWearInfo; +import com.chwl.core.noble.NobleUtil; +import com.example.lib_utils.UiUtils; +import com.google.android.material.appbar.AppBarLayout; import com.netease.nim.uikit.StatusBarUtil; +import com.netease.nim.uikit.common.util.sys.TimeUtil; import com.netease.nim.uikit.impl.cache.NimUserInfoCache; import com.netease.nimlib.sdk.RequestCallbackWrapper; import com.netease.nimlib.sdk.uinfo.model.NimUserInfo; @@ -32,7 +39,6 @@ import com.opensource.svgaplayer.SVGAVideoEntity; import com.chwl.app.R; import com.chwl.app.UIHelper; import com.chwl.app.audio.helper.AudioPlayerHelper; -import com.chwl.app.audio.helper.OnPlayListener; import com.chwl.app.avroom.ButtonItemFactory; import com.chwl.app.avroom.activity.AVRoomActivity; import com.chwl.app.base.BaseBindingActivity; @@ -41,12 +47,8 @@ import com.chwl.app.common.widget.dialog.DialogManager; import com.chwl.app.databinding.ActivityUserInfoBinding; import com.chwl.app.ui.im.avtivity.NimFriendModel; import com.chwl.app.ui.im.avtivity.NimP2PMessageActivity; -import com.chwl.app.ui.user.adapter.SelfPhotoAdapter; import com.chwl.app.ui.user.adapter.UserInfoIndicatorAdapter; -import com.chwl.app.ui.user.adapter.UserInfoPhotoAdapter; import com.chwl.app.ui.user.adapter.UserPhotoAdapter; -import com.chwl.app.ui.user.fragment.UserInfoGiftWallFragment; -import com.chwl.app.ui.user.fragment.UserInfoInfoFragment; import com.chwl.app.ui.user.viewmodel.UserInfoViewModel; import com.chwl.app.ui.utils.ImageLoadUtils; import com.chwl.app.ui.utils.ImageLoadUtilsV2; @@ -56,13 +58,9 @@ import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavi import com.chwl.app.ui.widget.rollviewpager.adapter.StaticPagerAdapterWrapper; import com.chwl.app.utils.RegexUtil; import com.chwl.core.XConstants; -import com.chwl.core.Constants; import com.chwl.core.auth.AuthModel; -import com.chwl.core.bean.RoomQueueInfo; import com.chwl.core.im.friend.IMFriendModel; import com.chwl.core.level.UserLevelVo; -import com.chwl.core.manager.AudioEngineManager; -import com.chwl.core.manager.AvRoomDataManager; import com.chwl.core.praise.PraiseModel; import com.chwl.core.praise.event.IsLikedEvent; import com.chwl.core.praise.event.PraiseEvent; @@ -72,12 +70,10 @@ 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.user.event.LoginUserInfoUpdateEvent; -import com.chwl.core.utils.LogUtils; import com.chwl.core.utils.CoreLogger; import com.chwl.library.annatation.ActLayoutRes; -import com.chwl.library.utils.ListUtils; -import com.chwl.library.utils.SingleToastUtil; -import com.chwl.library.utils.SizeUtils; +import com.zhpan.bannerview.BannerViewPager; +import com.zhpan.bannerview.constants.IndicatorGravity; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -107,24 +103,20 @@ public class UserInfoActivity extends BaseBindingActivity fragmentList = new ArrayList<>(2); - fragmentList.add(new UserInfoInfoFragment()); - fragmentList.add(new UserInfoGiftWallFragment()); - final List tagList = new ArrayList<>(2); + List fragmentList = new ArrayList<>(1); + fragmentList.add(new UserInfoDataFragment()); +// fragmentList.add(new UserInfoGiftWallFragment()); + final List tagList = new ArrayList<>(1); tagList.add(getString(R.string.me_data)); - tagList.add(getString(R.string.me_gift_wall)); +// tagList.add(getString(R.string.me_gift_wall)); CommonNavigator commonNavigator = new CommonNavigator(context); commonNavigator.setTitleWrapContent(false); UserInfoIndicatorAdapter magicIndicatorAdapter = new UserInfoIndicatorAdapter(context, tagList); @@ -236,9 +218,8 @@ public class UserInfoActivity extends BaseBindingActivity { initPhoto(dataBean.getPrivatePhoto()); setWhereVisible(); @@ -287,6 +268,18 @@ public class UserInfoActivity extends BaseBindingActivity { + mBinding.llId.setOnClickListener(view -> { copyName(); - return true; }); } } @@ -369,36 +378,34 @@ public class UserInfoActivity extends BaseBindingActivity { + showUserPhoto(position); + }) + .setRTLMode(isRTL) + .setIndicatorHeight(width) + .setIndicatorGravity(isRTL ? IndicatorGravity.START : IndicatorGravity.END) + .setIndicatorSliderWidth(width, width * 2) + .setIndicatorSliderGap(context.getResources().getDimensionPixelOffset(R.dimen.dp_6)) + .setIndicatorMargin(isRTL ? marginEnd : 0, 0, isRTL ? 0 : marginEnd, context.getResources().getDimensionPixelOffset(R.dimen.dp_71)) + .setAdapter(adapter).create(); + } + /** * 相册 */ private void initPhoto(List list) { - if (ListUtils.isListEmpty(list)) { - return; + if (list == null) { + mBinding.bannerView.refreshData(new ArrayList()); + } else { + mBinding.bannerView.refreshData(list); } - if (bannerAdapter == null) { -// mBinding.rollView.setHintViewDelegate(new RollPagerView.HintViewDelegate() { -// @SuppressLint("SetTextI18n") -// @Override -// public void setCurrentPosition(int position, HintView hintView) { -// if (mBinding.rollView.getAdapter() != null) { -// mBinding.tvRollHint.setText((position + 1) + "/" + mBinding.rollView.getAdapter().getCount()); -// } -// } -// -// @Override -// public void initView(int length, int gravity, HintView hintView) { -// -// } -// }); - bannerAdapter = identityState == OWN ? new SelfPhotoAdapter(list, this) - : new UserInfoPhotoAdapter(list, this); - mBinding.rollView.setAdapter(bannerAdapter); - //设置透明度 - mBinding.rollView.setAnimationDurtion(500); - } - bannerAdapter.setData(list); - bannerAdapter.notifyDataSetChanged(); } private void setUserLevel(UserLevelVo userLevelVo) { @@ -424,24 +431,45 @@ public class UserInfoActivity extends BaseBindingActivity { - LogUtils.d("verticalOffset=" + verticalOffset); - if (flag == 0 && Math.abs(verticalOffset) > SizeUtils.dp2px(context, 200)) { - //展开 - flag = 1; - mBinding.ivUserBack.setImageResource(R.drawable.icon_user_back_black); - mBinding.tbUserInfo.setBackgroundColor(getResources().getColor(R.color.white)); - setTitleVisible(true); - setEditButton(identityState, true); - } else if (flag == 1 && Math.abs(verticalOffset) <= 200) { - //合起来 - flag = 0; - mBinding.ivUserBack.setImageResource(R.drawable.icon_user_back); - mBinding.tbUserInfo.setBackgroundColor(getResources().getColor(R.color.transparent)); - setTitleVisible(false); - setEditButton(identityState, false); + mBinding.appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() { + @Override + protected float getBias() { + return 0.6f; + } + + @Override + public void onStateChanged(AppBarLayout appBarLayout, State state) { + if (state == State.COLLAPSED) { + mBinding.ivUserBack.setImageResource(R.drawable.icon_user_back_black); + mBinding.tbUserInfo.setBackgroundColor(getResources().getColor(R.color.white)); + setTitleVisible(true); + setEditButton(identityState, true); + }else{ + mBinding.ivUserBack.setImageResource(R.drawable.icon_user_back); + mBinding.tbUserInfo.setBackgroundColor(getResources().getColor(R.color.transparent)); + setTitleVisible(false); + setEditButton(identityState, false); + } } }); +// mBinding.appBarLayout.addOnOffsetChangedListener((appBarLayout, verticalOffset) -> { +// LogUtils.d("verticalOffset=" + verticalOffset); +// if (flag == 0 && Math.abs(verticalOffset) > SizeUtils.dp2px(context, 200)) { +// //展开 +// flag = 1; +// mBinding.ivUserBack.setImageResource(R.drawable.icon_user_back_black); +// mBinding.tbUserInfo.setBackgroundColor(getResources().getColor(R.color.white)); +// setTitleVisible(true); +// setEditButton(identityState, true); +// } else if (flag == 1 && Math.abs(verticalOffset) <= 200) { +// //合起来 +// flag = 0; +// mBinding.ivUserBack.setImageResource(R.drawable.icon_user_back); +// mBinding.tbUserInfo.setBackgroundColor(getResources().getColor(R.color.transparent)); +// setTitleVisible(false); +// setEditButton(identityState, false); +// } +// }); } private void setEditButton(int identityState, boolean isExpanded) { @@ -480,9 +508,15 @@ public class UserInfoActivity extends BaseBindingActivity userPhotos = new ArrayList<>(); List realmList = userInfo.getPrivatePhoto(); + if (realmList == null) { + return; + } for (UserPhoto photo : realmList) { UserPhoto newPhoto = new UserPhoto(); newPhoto.setPid(photo.getPid()); @@ -629,138 +663,9 @@ public class UserInfoActivity extends BaseBindingActivity { -// // 点击跳转到声音签名页面 -// UIHelper.showSoundAct( -// this, -// UserInfoModifyActivity.Method.AUDIO, -// ResUtil.getString(R.string.ui_user_userinfomodifyactivity_07), -// audioCard); -// }); - } - - private void showSoundCard(UserInfo.SoundBean audioCard) { - mBinding.llAudio.setVisibility(View.VISIBLE); -// mBinding.llAudioTip.setVisibility(View.GONE); - mBinding.tvAudio.setText(audioCard.getSecond() + "s"); - mBinding.livUser.stopAnimation(); - mBinding.llAudio.setOnClickListener(v -> toggleAudio(audioCard)); - } - - private void toggleAudio(UserInfo.SoundBean audioCard) { - String url = ""; - if (audioCard.getAudioUrl().contains("http")) { - url = audioCard.getAudioUrl(); - } - if (TextUtils.isEmpty(url)) return; - if (!audioPlaying) { - playAudio(url, audioCard.getSecond()); - } else { - stopAudio(audioCard.getSecond()); - } - } - - private CountDownTimer timer = null; - - private void playAudio(String url, int second) { - if (audioPlaying) return; - audioPlaying = true; - playSvgaBg(mBinding.livUser, "svga/user_sound_play.svga"); - mBinding.ivAudioControl.setImageResource(R.drawable.user_info_ic_audio_pause); - startCountDown(second); - if (AvRoomDataManager.get().mCurrentRoomInfo != null) { - AudioEngineManager.get().setRemoteMute(true);//設置靜音 - AudioEngineManager.get().setMute(true);//不能説話 - AudioEngineManager.get().setRole(Constants.CLIENT_ROLE_AUDIENCE); - } - AudioPlayerHelper.get().playInThread(url, new OnPlayListener() { - - @Override - public void onError(String error) { - SingleToastUtil.showToast(getString(R.string.me_error_playing)); - stopAudio(second); - } - - @Override - public void onPrepared() { - - } - - @Override - public void onPlaying(long currDuration) { - } - - @Override - public void onCompletion() { - stopAudio(second); - } - - }); - } - - private void startCountDown(int time) { - timer = new CountDownTimer((time + 1) * 1000L, 1000L) { - @Override - public void onTick(long millisUntilFinished) { - String time = String.valueOf(millisUntilFinished / 1000); - mBinding.tvAudio.setText(time + "s"); - } - - @Override - public void onFinish() { - } - }; - timer.start(); - } - - private void stopCountDown(int second) { - if (timer != null) { - mBinding.tvAudio.setText(second+"s"); - timer.cancel(); - } - } - - private void stopAudio(int second) { - stopCountDown(second); - if (!audioPlaying) return; - audioPlaying = false; - mBinding.livUser.stopAnimation(); - mBinding.ivAudioControl.setImageResource(R.drawable.user_info_ic_audio_play); - AudioPlayerHelper.get().endPlay(); - if (AvRoomDataManager.get().mCurrentRoomInfo != null) { - AudioEngineManager.get().setRemoteMute(isRemoteMute);//非靜音 - AudioEngineManager.get().setMute(isMute);//能説話 - AudioEngineManager.get().setRole(isMute ? Constants.CLIENT_ROLE_AUDIENCE : Constants.CLIENT_ROLE_BROADCASTER); - } - } - @Override protected void onPause() { super.onPause(); - if (audioPlaying) { - stopAudio(userInfo.getAudioCard().getSecond()); - } } @Override diff --git a/app/src/main/java/com/chwl/app/ui/user/adapter/ContactsIndicatorAdapter.java b/app/src/main/java/com/chwl/app/ui/user/adapter/ContactsIndicatorAdapter.java new file mode 100644 index 000000000..1818d12e4 --- /dev/null +++ b/app/src/main/java/com/chwl/app/ui/user/adapter/ContactsIndicatorAdapter.java @@ -0,0 +1,100 @@ +package com.chwl.app.ui.user.adapter; + +import android.content.Context; +import android.view.Gravity; +import android.view.ViewGroup; +import android.widget.FrameLayout; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.chwl.app.R; +import com.chwl.app.ui.widget.XRecyclerView.ScaleTransitionPagerTitleView; +import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil; +import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.abs.CommonNavigatorAdapter; +import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.abs.IPagerIndicator; +import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.abs.IPagerTitleView; + +import java.util.List; + +public class ContactsIndicatorAdapter extends CommonNavigatorAdapter { + private final List mTitleList; + + private int textSize = 16; + private float minScale = 1f; + private boolean showIndicator = true; + private OnItemSelectListener mOnItemSelectListener; + + public ContactsIndicatorAdapter(Context context, List charSequences) { + this.mTitleList = charSequences; + } + + @Override + public int getCount() { + return mTitleList == null ? 0 : mTitleList.size(); + } + + @Override + public IPagerTitleView getTitleView(Context context, final int i) { + ScaleTransitionPagerTitleView scaleTransitionPagerTitleView = new ScaleTransitionPagerTitleView(context, true); + scaleTransitionPagerTitleView.setNormalColor(ContextCompat.getColor(context, R.color.color_84868A)); + scaleTransitionPagerTitleView.setSelectedColor(ContextCompat.getColor(context, R.color.color_1E1E1F)); + scaleTransitionPagerTitleView.setMinScale(minScale); + scaleTransitionPagerTitleView.setTextSize(textSize); + int padding = UIUtil.dip2px(context, 16); + scaleTransitionPagerTitleView.setPadding(padding, 0, padding, 0); + scaleTransitionPagerTitleView.setText(mTitleList.get(i)); + scaleTransitionPagerTitleView.setOnClickListener(view -> { + if (mOnItemSelectListener != null) { + mOnItemSelectListener.onItemSelect(i, scaleTransitionPagerTitleView); + } + }); + return scaleTransitionPagerTitleView; + } + + @Override + public IPagerIndicator getIndicator(Context context) { + if (!showIndicator) return null; + DrawableIndicator indicator = new DrawableIndicator(context); + indicator.setMode(DrawableIndicator.MODE_EXACTLY); + indicator.setDrawableWidth(UIUtil.dip2px(context, 24)); + indicator.setDrawableHeight(UIUtil.dip2px(context, 8)); + indicator.setIndicatorDrawable(context.getResources().getDrawable(R.drawable.base_ic_indicator)); + FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); + lp.gravity = Gravity.END; + indicator.setLayoutParams(lp); + return indicator; + } + + public int getTextSize() { + return textSize; + } + + public void setTextSize(int textSize) { + this.textSize = textSize; + } + + public float getMinScale() { + return minScale; + } + + public void setMinScale(float minScale) { + this.minScale = minScale; + } + + public boolean isShowIndicator() { + return showIndicator; + } + + public void setShowIndicator(boolean showIndicator) { + this.showIndicator = showIndicator; + } + + public void setOnItemSelectListener(OnItemSelectListener onItemSelectListener) { + mOnItemSelectListener = onItemSelectListener; + } + + public interface OnItemSelectListener { + void onItemSelect(int position, TextView view); + } +} diff --git a/app/src/main/java/com/chwl/app/ui/user/adapter/SelfPhotoAdapter.kt b/app/src/main/java/com/chwl/app/ui/user/adapter/SelfPhotoAdapter.kt deleted file mode 100644 index 0fec7945e..000000000 --- a/app/src/main/java/com/chwl/app/ui/user/adapter/SelfPhotoAdapter.kt +++ /dev/null @@ -1,48 +0,0 @@ -package com.chwl.app.ui.user.adapter - -import android.content.Context -import android.view.Gravity -import android.view.View -import android.view.ViewGroup -import android.widget.FrameLayout -import android.widget.ImageView -import com.chwl.app.R -import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil -import com.chwl.app.ui.widget.rollviewpager.adapter.StaticPagerAdapterWrapper -import com.chwl.core.user.bean.UserDetailInfo - -class SelfPhotoAdapter( - photoBeans: List, - context: Context -) : StaticPagerAdapterWrapper(photoBeans, context) { - private val origin by lazy { - UserInfoPhotoAdapter(photoBeans, context) - } - - override fun getView(container: ViewGroup?, position: Int): View { - val originView = origin.getView(container, position) - val flContainer = FrameLayout(context) - flContainer.layoutParams = FrameLayout.LayoutParams( - FrameLayout.LayoutParams.MATCH_PARENT, - FrameLayout.LayoutParams.WRAP_CONTENT - ) - flContainer.addView(originView) - //overlay - val statusView = ImageView(context) - statusView.setImageResource(R.drawable.ic_album_auditing) - statusView.scaleType = ImageView.ScaleType.CENTER_INSIDE - val statusViewLayoutParams = - FrameLayout.LayoutParams(UIUtil.dip2px(context, 86.0), UIUtil.dip2px(context, 51.0)) - statusViewLayoutParams.gravity = Gravity.RIGHT - flContainer.addView(statusView, statusViewLayoutParams) - - val isVisit = (dataList.getOrNull(position)?.isReview == true) - statusView.visibility = if (isVisit) View.VISIBLE else View.GONE - return flContainer - } - - override fun setData(dataList: MutableList?) { - super.setData(dataList) - origin.setData(dataList) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/ui/user/adapter/UserInfoAlbumAdapter.kt b/app/src/main/java/com/chwl/app/ui/user/adapter/UserInfoAlbumAdapter.kt new file mode 100644 index 000000000..99576ff0e --- /dev/null +++ b/app/src/main/java/com/chwl/app/ui/user/adapter/UserInfoAlbumAdapter.kt @@ -0,0 +1,17 @@ +package com.chwl.app.ui.user.adapter + +import android.widget.ImageView +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.BaseViewHolder +import com.chwl.app.R +import com.chwl.app.ui.utils.load +import com.chwl.core.user.bean.UserDetailInfo +import com.chwl.core.user.bean.UserPhoto + +class UserInfoAlbumAdapter : + BaseQuickAdapter(R.layout.user_info_item_album) { + override fun convert(helper: BaseViewHolder, item: UserDetailInfo.DataBean.PrivatePhotoBean) { + val imageView = helper.getView(R.id.iv_image) + imageView.load(item.photoUrl) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/ui/user/adapter/UserInfoGiftAdapter.kt b/app/src/main/java/com/chwl/app/ui/user/adapter/UserInfoGiftAdapter.kt new file mode 100644 index 000000000..eb3371ca1 --- /dev/null +++ b/app/src/main/java/com/chwl/app/ui/user/adapter/UserInfoGiftAdapter.kt @@ -0,0 +1,36 @@ +package com.chwl.app.ui.user.adapter + +import android.view.ViewGroup +import android.widget.ImageView +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.BaseViewHolder +import com.chwl.app.R +import com.chwl.app.ui.utils.load +import com.chwl.core.bean.UserInfoItem +import com.chwl.core.user.bean.GiftWallInfo + +class UserInfoGiftAdapter(private val itemBgRes: Int = R.drawable.user_info_bg_gift) : + BaseQuickAdapter(R.layout.user_info_item_gift) { + override fun onCreateDefViewHolder(parent: ViewGroup?, viewType: Int): BaseViewHolder { + return super.onCreateDefViewHolder(parent, viewType).apply { + getView(R.id.iv_bg).setImageResource(itemBgRes) + } + } + + override fun convert(helper: BaseViewHolder, item: GiftWallInfo) { + helper.setText(R.id.tv_name, item.giftName) + helper.setText(R.id.tv_count, "x${item.reciveCount}") + val iconView = helper.getView(R.id.iv_icon) + iconView.load(item.picUrl) + val rankView = helper.itemView.findViewById(R.id.iv_rank) + if (helper.bindingAdapterPosition == 0) { + rankView.setImageResource(R.drawable.ic_gift_one) + } else if (helper.bindingAdapterPosition == 1) { + rankView.setImageResource(R.drawable.ic_gift_two) + } else if (helper.bindingAdapterPosition == 2) { + rankView.setImageResource(R.drawable.ic_gift_three) + } else { + rankView.setImageDrawable(null) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/ui/user/adapter/UserInfoIndicatorAdapter.java b/app/src/main/java/com/chwl/app/ui/user/adapter/UserInfoIndicatorAdapter.java index f9fd0b46c..76f0a429d 100644 --- a/app/src/main/java/com/chwl/app/ui/user/adapter/UserInfoIndicatorAdapter.java +++ b/app/src/main/java/com/chwl/app/ui/user/adapter/UserInfoIndicatorAdapter.java @@ -14,14 +14,15 @@ import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil; import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.abs.CommonNavigatorAdapter; import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.abs.IPagerIndicator; import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.abs.IPagerTitleView; +import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.indicators.LinePagerIndicator; import java.util.List; public class UserInfoIndicatorAdapter extends CommonNavigatorAdapter { private final List mTitleList; - private int textSize = 16; - private float minScale = 1f; + private int textSize = 20; + private float minScale = 0.9f; private boolean showIndicator = true; private OnItemSelectListener mOnItemSelectListener; @@ -37,11 +38,11 @@ public class UserInfoIndicatorAdapter extends CommonNavigatorAdapter { @Override public IPagerTitleView getTitleView(Context context, final int i) { ScaleTransitionPagerTitleView scaleTransitionPagerTitleView = new ScaleTransitionPagerTitleView(context, true); - scaleTransitionPagerTitleView.setNormalColor(ContextCompat.getColor(context, R.color.color_84868A)); - scaleTransitionPagerTitleView.setSelectedColor(ContextCompat.getColor(context, R.color.color_1E1E1F)); + scaleTransitionPagerTitleView.setNormalColor(ContextCompat.getColor(context, R.color.color_7F191919)); + scaleTransitionPagerTitleView.setSelectedColor(ContextCompat.getColor(context, R.color.color_191919)); scaleTransitionPagerTitleView.setMinScale(minScale); scaleTransitionPagerTitleView.setTextSize(textSize); - int padding = UIUtil.dip2px(context, 16); + int padding = UIUtil.dip2px(context, 12); scaleTransitionPagerTitleView.setPadding(padding, 0, padding, 0); scaleTransitionPagerTitleView.setText(mTitleList.get(i)); scaleTransitionPagerTitleView.setOnClickListener(view -> { @@ -54,14 +55,14 @@ public class UserInfoIndicatorAdapter extends CommonNavigatorAdapter { @Override public IPagerIndicator getIndicator(Context context) { - if (!showIndicator) return null; - DrawableIndicator indicator = new DrawableIndicator(context); - indicator.setMode(DrawableIndicator.MODE_EXACTLY); - indicator.setDrawableWidth(UIUtil.dip2px(context, 24)); - indicator.setDrawableHeight(UIUtil.dip2px(context, 8)); - indicator.setIndicatorDrawable(context.getResources().getDrawable(R.drawable.base_ic_indicator)); - FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); - lp.gravity = Gravity.END; + LinePagerIndicator indicator = new LinePagerIndicator(context); + indicator.setMode(LinePagerIndicator.MODE_EXACTLY); + indicator.setLineHeight(UIUtil.dip2px(context, 3)); + indicator.setRoundRadius(UIUtil.dip2px(context, 1.5)); + indicator.setLineWidth(UIUtil.dip2px(context, 17)); + indicator.setColors(context.getResources().getColor(R.color.color_26CC9C)); + FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); +// lp.bottomMargin = mBottomMargin; indicator.setLayoutParams(lp); return indicator; } diff --git a/app/src/main/java/com/chwl/app/ui/user/adapter/UserInfoPhotoAdapter.java b/app/src/main/java/com/chwl/app/ui/user/adapter/UserInfoPhotoAdapter.java deleted file mode 100644 index 85238e43f..000000000 --- a/app/src/main/java/com/chwl/app/ui/user/adapter/UserInfoPhotoAdapter.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.chwl.app.ui.user.adapter; - -import android.content.Context; -import android.content.Intent; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; - -import com.chwl.app.R; -import com.chwl.app.ui.user.activity.ShowPhotoActivity; -import com.chwl.app.ui.utils.ImageLoadUtils; -import com.chwl.app.ui.widget.rollviewpager.adapter.StaticPagerAdapterWrapper; -import com.chwl.core.user.bean.UserDetailInfo; -import com.chwl.core.user.bean.UserPhoto; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author Administrator - * @date 2017/8/7 - */ - -public class UserInfoPhotoAdapter extends StaticPagerAdapterWrapper { - private LayoutInflater mInflater; - - public UserInfoPhotoAdapter(List photoBeans, Context context) { - super(photoBeans, context); - mInflater = LayoutInflater.from(context); - } - - - @Override - public View getView(ViewGroup container, int position) { - UserDetailInfo.DataBean.PrivatePhotoBean photoInfo = dataList.get(position); - ImageView imgBanner = (ImageView) mInflater.inflate(R.layout.banner_userinfo_photo_item, container, false); - if (photoInfo == null) return imgBanner; - ImageLoadUtils.loadImage(context, photoInfo.getPhotoUrl(), imgBanner); - imgBanner.setOnClickListener(v -> { - showUserPhoto(position); - }); - return imgBanner; - } - - private void showUserPhoto(int position) { - //创建一个集合拿来做用户所有照片信息 - ArrayList userPhotos = new ArrayList<>(); - for (int i = 0; i < dataList.size(); i++) { - UserPhoto newPhoto = new UserPhoto(); - newPhoto.setPhotoUrl(dataList.get(i).getPhotoUrl()); - userPhotos.add(newPhoto); - } - Intent intent = new Intent(context, ShowPhotoActivity.class); - intent.putExtra("position", position); - intent.putExtra("photoList", userPhotos); - context.startActivity(intent); - } -} diff --git a/app/src/main/java/com/chwl/app/ui/user/adapter/UserInfoTopAlbumAdapter.kt b/app/src/main/java/com/chwl/app/ui/user/adapter/UserInfoTopAlbumAdapter.kt new file mode 100644 index 000000000..b4c1ade92 --- /dev/null +++ b/app/src/main/java/com/chwl/app/ui/user/adapter/UserInfoTopAlbumAdapter.kt @@ -0,0 +1,27 @@ +package com.chwl.app.ui.user.adapter + +import android.view.View +import androidx.core.view.isVisible +import com.chwl.app.R +import com.chwl.app.ui.utils.ImageLoadUtilsV2 +import com.chwl.core.user.bean.UserDetailInfo +import com.zhpan.bannerview.BaseBannerAdapter +import com.zhpan.bannerview.BaseViewHolder + +class UserInfoTopAlbumAdapter(private val reviewStateEnabled: Boolean) : + BaseBannerAdapter() { + override fun getLayoutId(viewType: Int): Int { + return R.layout.user_info_item_top_album + } + + override fun bindData( + helper: BaseViewHolder, + item: UserDetailInfo.DataBean.PrivatePhotoBean?, + position: Int, + pageSize: Int + ) { + ImageLoadUtilsV2.loadImage(helper.findViewById(R.id.iv_image), item?.photoUrl) + val reviewView = helper.findViewById(R.id.iv_review) + reviewView.isVisible = reviewStateEnabled && item?.isReview == true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/ui/user/fragment/UserInfoDataFragment.kt b/app/src/main/java/com/chwl/app/ui/user/fragment/UserInfoDataFragment.kt new file mode 100644 index 000000000..6278f0a9c --- /dev/null +++ b/app/src/main/java/com/chwl/app/ui/user/fragment/UserInfoDataFragment.kt @@ -0,0 +1,149 @@ +package com.chwl.app.ui.user.fragment + +import android.content.Intent +import android.view.View +import androidx.core.view.isVisible +import androidx.fragment.app.activityViewModels +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chwl.app.R +import com.chwl.app.base.BaseViewBindingFragment +import com.chwl.app.databinding.UserInfoDataFragmentBinding +import com.chwl.app.support.FragmentVisibleStateHelper +import com.chwl.app.ui.user.activity.ShowPhotoActivity +import com.chwl.app.ui.user.activity.UserInfoModifyActivity +import com.chwl.app.ui.user.activity.UserModifyPhotosActivity +import com.chwl.app.ui.user.adapter.UserInfoAlbumAdapter +import com.chwl.app.ui.user.adapter.UserInfoGiftAdapter +import com.chwl.app.ui.user.viewmodel.UserInfoViewModel +import com.chwl.app.ui.widget.recyclerview.decoration.GridSpacingItemNewDecoration +import com.chwl.core.user.bean.UserPhoto +import com.example.lib_utils.UiUtils + +class UserInfoDataFragment : BaseViewBindingFragment() { + + private val albumAdapter = UserInfoAlbumAdapter() + + private val giftAdapter = UserInfoGiftAdapter() + + private val luckyGiftAdapter = UserInfoGiftAdapter(R.drawable.user_info_bg_lucku_gift) + + private val viewModel: UserInfoViewModel by activityViewModels() + + override fun init() { + initAlbum() + initGift() + initLuckyGift() + FragmentVisibleStateHelper(this).apply { + this.start { + onVisibleChanged(it, isFirstVisible) + } + } + } + + private fun initAlbum() { + binding.ivAlbumMore.isVisible = viewModel.isMe + binding.recyclerViewAlbum.adapter = albumAdapter + binding.layoutAlbum.setOnClickListener { + if (viewModel.isMe) { + UserModifyPhotosActivity.startForResult( + requireActivity(), + viewModel.userId, + UserInfoModifyActivity.Method.PHOTO + ) + } + } + albumAdapter.setOnItemClickListener { adapter, view, position -> + val list = albumAdapter.data.map { + UserPhoto().apply { + this.photoUrl = it.photoUrl + } + } + showPhotoPreview(ArrayList(list), position) + } + viewModel.userInfoDetailData.observe(this) { + binding.tvAlbumCount.text = "(${it.privatePhoto?.size ?: 0})" + binding.tvAlbumStatus.isVisible = it.privatePhoto.isNullOrEmpty() + albumAdapter.setNewData(it.privatePhoto) + } + } + + private fun initGift() { + var isMiniMode = true + binding.ivGiftMore.setOnClickListener { + isMiniMode = !isMiniMode + val list = viewModel.giftListLiveData.value ?: emptyList() + loadListData(giftAdapter, 4, isMiniMode, list, binding.ivGiftMore) + binding.ivGiftMore.animate().rotationBy(180f).start() + } + binding.recyclerViewGift.addItemDecoration( + GridSpacingItemNewDecoration( + UiUtils.dip2px(10f), + UiUtils.dip2px(2f), + true + ) + ) + binding.recyclerViewGift.adapter = giftAdapter + viewModel.giftListLiveData.observe(this) { + loadListData(giftAdapter, 4, isMiniMode, it, binding.ivGiftMore) + binding.tvGiftStatus.isVisible = it.isNullOrEmpty() + } + viewModel.requestGiftList() + } + + private fun initLuckyGift() { + var isMiniMode = true + binding.ivLuckyGiftMore.setOnClickListener { + isMiniMode = !isMiniMode + val list = viewModel.luckyGiftListLiveData.value ?: emptyList() + loadListData(luckyGiftAdapter, 4, isMiniMode, list, binding.ivLuckyGiftMore) + binding.ivLuckyGiftMore.animate().rotationBy(180f).start() + } + binding.recyclerViewLuckyGift.addItemDecoration( + GridSpacingItemNewDecoration( + UiUtils.dip2px(10f), + UiUtils.dip2px(2f), + false + ) + ) + binding.recyclerViewLuckyGift.adapter = luckyGiftAdapter + viewModel.luckyGiftListLiveData.observe(this) { + loadListData(luckyGiftAdapter, 4, isMiniMode, it, binding.ivLuckyGiftMore) + binding.tvLuckyGiftStatus.isVisible = it.isNullOrEmpty() + } + viewModel.requestLuckyGiftList() + } + + private fun loadListData( + adapter: BaseQuickAdapter, + miniCount: Int, + miniOrFull: Boolean, + list: List, + moreView: View + ) { + val finalList = if (miniOrFull) { + list.take(miniCount) + } else { + list + } + adapter.setNewData(finalList) + moreView.isVisible = list.size > miniCount + } + + private fun showPhotoPreview(list: ArrayList, position: Int) { + val intent = Intent(context, ShowPhotoActivity::class.java) + intent.putExtra("position", position) + intent.putExtra("photoList", list) + context?.startActivity(intent) + } + + private fun onVisibleChanged(isVisible: Boolean, isFirstVisible: Boolean) { + if (isVisible && !isFirstVisible) { + if (viewModel.giftListLiveData.value.isNullOrEmpty()) { + viewModel.requestGiftList() + } + if (viewModel.luckyGiftListLiveData.value.isNullOrEmpty()) { + viewModel.requestLuckyGiftList() + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/ui/user/viewmodel/UserInfoViewModel.kt b/app/src/main/java/com/chwl/app/ui/user/viewmodel/UserInfoViewModel.kt index dc1c1f519..527a8c363 100644 --- a/app/src/main/java/com/chwl/app/ui/user/viewmodel/UserInfoViewModel.kt +++ b/app/src/main/java/com/chwl/app/ui/user/viewmodel/UserInfoViewModel.kt @@ -4,12 +4,15 @@ import android.annotation.SuppressLint import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel +import com.chwl.app.base.BaseViewModel import com.chwl.app.module_hall.HallDataManager +import com.chwl.core.auth.AuthModel import com.chwl.core.module_hall.hall.HallModel import com.chwl.core.module_hall.hall.bean.ClanAndHallInfo import com.chwl.core.module_hall.hall.bean.UserClanInfo import com.chwl.core.user.UserInfoUiMgr import com.chwl.core.user.UserModel +import com.chwl.core.user.bean.GiftWallInfo import com.chwl.core.user.bean.UserDetailInfo import com.chwl.core.user.bean.UserInfo import com.chwl.core.utils.net.BeanObserver @@ -17,13 +20,13 @@ import com.chwl.core.utils.extension.toast import io.reactivex.disposables.CompositeDisposable import io.reactivex.disposables.Disposable -class UserInfoViewModel : ViewModel() { - val userId: Long by lazy { - UserInfoUiMgr.get().uid - } +class UserInfoViewModel : BaseViewModel() { + var userId: Long = 0 var mRoomUid: Long = 0 + val isMe get() = userId == AuthModel.get().currentUid + private val _userInfoData = MutableLiveData() val userInfoData: LiveData = _userInfoData @@ -32,9 +35,8 @@ class UserInfoViewModel : ViewModel() { val userClanData = MutableLiveData() - private val disposable: CompositeDisposable by lazy { - CompositeDisposable() - } + val giftListLiveData = MutableLiveData>() + val luckyGiftListLiveData = MutableLiveData>() fun getUserInfo() { UserModel.get().getUserInfoFromServer(userId) @@ -46,21 +48,30 @@ class UserInfoViewModel : ViewModel() { override fun onSuccess(info: UserInfo) { _userInfoData.value = info } - override fun onSubscribe(d: Disposable) { disposable.add(d) } + + override fun onSubscribe(d: Disposable) { + addDisposable(d) + } }) } fun getUserInfoDetail() { UserModel.get().getUserInfoDetail(userId) .subscribe(object : BeanObserver() { - override fun onErrorMsg(error: String) { error.toast() } + override fun onErrorMsg(error: String) { + error.toast() + } + override fun onSuccess(info: UserDetailInfo) { info.let { mRoomUid = it.data.roomUid _userInfoDetailData.value = it.data } } - override fun onSubscribe(d: Disposable) { disposable.add(d) } + + override fun onSubscribe(d: Disposable) { + addDisposable(d) + } }) } @@ -75,11 +86,18 @@ class UserInfoViewModel : ViewModel() { th.message?.toast() } ) - disposable.add(subscribe) + addDisposable(subscribe) } - override fun onCleared() { - super.onCleared() - disposable.dispose() + fun requestGiftList() { + addDisposable(UserModel.get().requestUserGiftWall(userId, 1, 2).subscribe { it -> + giftListLiveData.postValue(it) + }) + } + + fun requestLuckyGiftList() { + addDisposable(UserModel.get().requestUserGiftWall(userId, 2, 2).subscribe { it -> + luckyGiftListLiveData.postValue(it) + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/utils/AppBarStateChangeListener.java b/app/src/main/java/com/chwl/app/utils/AppBarStateChangeListener.java index 0dbe8ea62..a6819bcc5 100644 --- a/app/src/main/java/com/chwl/app/utils/AppBarStateChangeListener.java +++ b/app/src/main/java/com/chwl/app/utils/AppBarStateChangeListener.java @@ -19,7 +19,7 @@ public abstract class AppBarStateChangeListener implements AppBarLayout.OnOffset onStateChanged(appBarLayout, State.EXPANDED); } mCurrentState = State.EXPANDED; - } else if (Math.abs(verticalOffset) >= appBarLayout.getTotalScrollRange()) { + } else if (Math.abs(verticalOffset) >= appBarLayout.getTotalScrollRange() * getBias()) { if (mCurrentState != State.COLLAPSED) { onStateChanged(appBarLayout, State.COLLAPSED); } @@ -32,5 +32,9 @@ public abstract class AppBarStateChangeListener implements AppBarLayout.OnOffset } } + protected float getBias() { + return 1f; + } + public abstract void onStateChanged(AppBarLayout appBarLayout, State state); } diff --git a/app/src/main/res/drawable-xxhdpi/user_info_bg_gift.webp b/app/src/main/res/drawable-xxhdpi/user_info_bg_gift.webp new file mode 100644 index 000000000..425b99d95 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/user_info_bg_gift.webp differ diff --git a/app/src/main/res/drawable-xxhdpi/user_info_bg_good_id.9.png b/app/src/main/res/drawable-xxhdpi/user_info_bg_good_id.9.png new file mode 100644 index 000000000..6927d67f8 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/user_info_bg_good_id.9.png differ diff --git a/app/src/main/res/drawable-xxhdpi/user_info_bg_lucku_gift.webp b/app/src/main/res/drawable-xxhdpi/user_info_bg_lucku_gift.webp new file mode 100644 index 000000000..6fbba3bc0 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/user_info_bg_lucku_gift.webp differ diff --git a/app/src/main/res/drawable-xxhdpi/user_info_ic_arrow_down.webp b/app/src/main/res/drawable-xxhdpi/user_info_ic_arrow_down.webp new file mode 100644 index 000000000..081a0b23f Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/user_info_ic_arrow_down.webp differ diff --git a/app/src/main/res/drawable-xxhdpi/user_info_ic_arrow_right.webp b/app/src/main/res/drawable-xxhdpi/user_info_ic_arrow_right.webp new file mode 100644 index 000000000..6c6d1574a Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/user_info_ic_arrow_right.webp differ diff --git a/app/src/main/res/drawable-xxhdpi/user_info_ic_copy.webp b/app/src/main/res/drawable-xxhdpi/user_info_ic_copy.webp new file mode 100644 index 000000000..7aebcc065 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/user_info_ic_copy.webp differ diff --git a/app/src/main/res/drawable-xxhdpi/user_info_ic_id.webp b/app/src/main/res/drawable-xxhdpi/user_info_ic_id.webp new file mode 100644 index 000000000..d5d97dd5d Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/user_info_ic_id.webp differ diff --git a/app/src/main/res/drawable/shape_white_top_8dp.xml b/app/src/main/res/drawable/shape_white_top_8dp.xml new file mode 100644 index 000000000..2f66129d7 --- /dev/null +++ b/app/src/main/res/drawable/shape_white_top_8dp.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/user_info_bg_fans_follow.xml b/app/src/main/res/drawable/user_info_bg_fans_follow.xml new file mode 100644 index 000000000..629d77d2a --- /dev/null +++ b/app/src/main/res/drawable/user_info_bg_fans_follow.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/user_info_bg_live.xml b/app/src/main/res/drawable/user_info_bg_live.xml index 25ce5e586..55f6c659a 100644 --- a/app/src/main/res/drawable/user_info_bg_live.xml +++ b/app/src/main/res/drawable/user_info_bg_live.xml @@ -1,7 +1,13 @@ - + - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_user_info.xml b/app/src/main/res/layout/activity_user_info.xml index 9792ecd1e..58c239314 100644 --- a/app/src/main/res/layout/activity_user_info.xml +++ b/app/src/main/res/layout/activity_user_info.xml @@ -2,6 +2,7 @@ + - + android:clipToPadding="false"> - + tools:background="@drawable/default_banner" /> - - - - - - - - - - + app:layout_constraintTop_toTopOf="@id/banner_view" /> + app:layout_constraintTop_toTopOf="@id/iv_user_head" /> - + app:layout_constraintTop_toTopOf="@id/banner_view" + app:shapeAppearance="@style/shape_circle" + app:strokeColor="@color/white" + app:strokeWidth="@dimen/dp_1" /> + + + + + + + android:textColor="#F7F7F7" + android:textSize="@dimen/dp_12" /> - - - - + + + android:paddingTop="@dimen/dp_2" + android:textColor="@color/color_CC191919" + android:textSize="@dimen/dp_11" + tools:text="7958626" /> - - - - - - - - - - + android:id="@+id/iv_id_copy" + android:layout_width="@dimen/dp_13" + android:layout_height="@dimen/dp_13" + android:layout_marginStart="@dimen/dp_3" + android:src="@drawable/user_info_ic_copy" /> - + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/ll_id"> + + + + + + + + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/layout_region"> + + + + + + + + + + + + + + + + + + + @@ -393,28 +476,22 @@ - - - - + android:layout_width="match_parent" + android:layout_height="@dimen/dp_38" + android:paddingStart="@dimen/dp_3" + tools:background="#22000000" /> + app:layout_behavior="@string/appbar_scrolling_view_behavior" + tools:background="#33000000" /> diff --git a/app/src/main/res/layout/banner_userinfo_photo_item.xml b/app/src/main/res/layout/banner_userinfo_photo_item.xml deleted file mode 100644 index d01f04756..000000000 --- a/app/src/main/res/layout/banner_userinfo_photo_item.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - diff --git a/app/src/main/res/layout/user_info_data_fragment.xml b/app/src/main/res/layout/user_info_data_fragment.xml new file mode 100644 index 000000000..60d869254 --- /dev/null +++ b/app/src/main/res/layout/user_info_data_fragment.xml @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/user_info_item_album.xml b/app/src/main/res/layout/user_info_item_album.xml new file mode 100644 index 000000000..57a91cfa9 --- /dev/null +++ b/app/src/main/res/layout/user_info_item_album.xml @@ -0,0 +1,21 @@ + + + + + + + diff --git a/app/src/main/res/layout/user_info_item_gift.xml b/app/src/main/res/layout/user_info_item_gift.xml new file mode 100644 index 000000000..7005998f7 --- /dev/null +++ b/app/src/main/res/layout/user_info_item_gift.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/user_info_item_top_album.xml b/app/src/main/res/layout/user_info_item_top_album.xml new file mode 100644 index 000000000..578d49138 --- /dev/null +++ b/app/src/main/res/layout/user_info_item_top_album.xml @@ -0,0 +1,23 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 75464b1f5..3fcce7ab7 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -5301,4 +5301,7 @@ تهانينا على أن تصبح (%s)! تم ارتداء هذا المستوى من الزي تلقائيًا. هل تريد الاحتفاظ بالزي الأصلي ام لا ؟ اهلا بك في غرفتي مؤخرًا + + 塹無照片 + 塹無禮物 \ No newline at end of file diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index b55597eb0..cc2f66c7c 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -5243,4 +5243,6 @@ 恭喜你成為「%s」!當前已自動佩戴該等級裝扮,是否保留原有裝扮? 歡迎來到我的房間 最近 + 塹無照片 + 塹無禮物 \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 1fe2655dc..ca58c59cd 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -737,4 +737,9 @@ #73B8FF #FF396F #FF4B81 + #26CC9C + #191919 + #7F191919 + #CC191919 + #FEFFBF diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5b869cd71..dcd411938 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -5282,6 +5282,9 @@ You cannot join again within 24 hours after leaving Congratulations on becoming (%s)! This level of uniform was worn automatically. Do you want to wear the original dress or not? Welcome to my room Recent + + 塹無照片 + 塹無禮物 diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 588b5aabf..4142be193 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -623,4 +623,9 @@ rounded @dimen/dp_8 + + diff --git a/core/src/main/java/com/chwl/core/decoration/headwear/bean/HeadWearInfo.java b/core/src/main/java/com/chwl/core/decoration/headwear/bean/HeadWearInfo.java index f4d576037..fd2b186a4 100644 --- a/core/src/main/java/com/chwl/core/decoration/headwear/bean/HeadWearInfo.java +++ b/core/src/main/java/com/chwl/core/decoration/headwear/bean/HeadWearInfo.java @@ -113,4 +113,14 @@ public class HeadWearInfo extends BaseDecoration implements Serializable { public boolean isRenew() { return status == HeadWearInfo.STATUS_IN_USED; } + + public String getFirstUrl() { + if (effect != null && effect.length() > 0) { + return effect; + } + if (pic != null && pic.length() > 0) { + return pic; + } + return null; + } }