diff --git a/app/src/main/java/com/gh/gamecenter/WebActivity.java b/app/src/main/java/com/gh/gamecenter/WebActivity.java index 1f09cb40c7..b5474bad06 100644 --- a/app/src/main/java/com/gh/gamecenter/WebActivity.java +++ b/app/src/main/java/com/gh/gamecenter/WebActivity.java @@ -99,7 +99,7 @@ public class WebActivity extends NormalActivity { return getTargetIntent(context, WebActivity.class, WebFragment.class, bundle); } - public static Intent getBadgeCenterIntent(Context context){ + public static Intent getBadgeCenterIntent(Context context, String userId){ Bundle bundle = new Bundle(); bundle.putString(EntranceUtils.KEY_URL, "https://www.baidu.com"); diff --git a/app/src/main/java/com/gh/gamecenter/entity/BadgeEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/BadgeEntity.kt new file mode 100644 index 0000000000..40752d836f --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/entity/BadgeEntity.kt @@ -0,0 +1,13 @@ +package com.gh.gamecenter.entity + +import com.google.gson.annotations.SerializedName + +data class BadgeEntity( + @SerializedName(value = "_id") + var id: String = "", + var expire: Int = 0, + var icon: String = "", + var name: String = "", //获取时间 + var time: Int = 0, //有效期,0代表无限期 + val wear: Boolean = false //是否佩戴 +) \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeFragment.kt b/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeFragment.kt index 37a8d9fa42..1e968d4040 100644 --- a/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeFragment.kt @@ -4,15 +4,18 @@ import android.app.Dialog import android.graphics.Color import android.os.Bundle import android.view.View +import android.widget.LinearLayout import androidx.core.content.ContextCompat import androidx.databinding.DataBindingUtil import androidx.recyclerview.widget.LinearLayoutManager +import com.facebook.drawee.view.SimpleDraweeView import com.gh.base.adapter.FragmentAdapter import com.gh.common.constant.Constants import com.gh.common.util.* import com.gh.common.view.HorizontalItemDecoration import com.gh.gamecenter.* import com.gh.gamecenter.databinding.FragmentHomeBinding +import com.gh.gamecenter.entity.BadgeEntity import com.gh.gamecenter.entity.GameEntity import com.gh.gamecenter.entity.MessageUnreadEntity import com.gh.gamecenter.entity.PersonalEntity @@ -64,6 +67,7 @@ class UserHomeFragment : NormalFragment() { mMessageUnreadViewModel = viewModelProvider() mUserHomeViewModel.getUserInfo() + mUserHomeViewModel.getBadges() mUserHomeViewModel.getUserPlayedGame() mUserHomeViewModel.userInfo.observeNonNull(this) { @@ -82,6 +86,27 @@ class UserHomeFragment : NormalFragment() { trackMtaEvent(it.name) } + mUserHomeViewModel.badges.observeNonNull(this) { + if (mUserHomeViewModel.userId == UserManager.getInstance().userId) { + mUserHomeViewModel.availableBadges() + } else { + mHomeBinding?.userBadgeTips?.visibility = View.VISIBLE + updateUserBadge(it) + } + } + mUserHomeViewModel.availableBadgeCount.observeNonNull(this) { + mHomeBinding?.viewBadgeMessageTip?.visibleIf(it > 0) + if (mUserHomeViewModel.badges.value?.isEmpty() == true && it > 0) { + mHomeBinding?.userBadgeList?.visibility = View.GONE + mHomeBinding?.userBadgeTips?.visibility = View.VISIBLE + mHomeBinding?.userBadgeTips?.text = "有${it}枚徽章可领取" + } else if (mUserHomeViewModel.badges.value?.isEmpty() == false) { + mHomeBinding?.userBadgeList?.visibility = View.VISIBLE + mHomeBinding?.userBadgeTips?.visibility = View.GONE + updateUserBadge(mUserHomeViewModel.badges.value!!) + } + } + mUserHomeViewModel.networkError.observeNonNull(this) { container.visibility = View.GONE reuse_no_connection.visibility = View.VISIBLE @@ -259,9 +284,21 @@ class UserHomeFragment : NormalFragment() { userBadge.setOnClickListener { MtaHelper.onEvent("个人主页详情", "个人主页详情", if (mUserHomeViewModel.userId == UserManager.getInstance().userId) "我的徽章" else "TA的徽章") - startActivity(WebActivity.getBadgeCenterIntent(requireContext())) + startActivity(WebActivity.getBadgeCenterIntent(requireContext(), mUserHomeViewModel.userId)) } } } + private fun updateUserBadge(badges: List) { + mHomeBinding?.userBadgeList?.removeAllViews() + for (badge in badges.take(6)) { + val badgeView = SimpleDraweeView(context) + val params = LinearLayout.LayoutParams(24F.dip2px(), 24F.dip2px()) + params.setMargins(2F.dip2px(), 0, 2F.dip2px(), 0) + badgeView.layoutParams = params + ImageUtils.display(badgeView, badge.icon) + mHomeBinding?.userBadgeList?.addView(badgeView) + } + } + } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeViewModel.kt b/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeViewModel.kt index 55abfe48bf..6b1df3c70a 100644 --- a/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeViewModel.kt @@ -7,6 +7,7 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import com.gh.gamecenter.R +import com.gh.gamecenter.entity.BadgeEntity import com.gh.gamecenter.entity.GameEntity import com.gh.gamecenter.entity.PersonalEntity import com.gh.gamecenter.eventbus.EBUserFollow @@ -26,6 +27,8 @@ class UserHomeViewModel(application: Application, val userId: String) : AndroidV var userInfo = MutableLiveData() var networkError = MutableLiveData() var playedGames = MutableLiveData>() + var badges = MutableLiveData>() + var availableBadgeCount = MutableLiveData() fun getUserInfo() { RetrofitManager.getInstance(getApplication()) @@ -100,6 +103,32 @@ class UserHomeViewModel(application: Application, val userId: String) : AndroidV }) } + fun getBadges() { + RetrofitManager.getInstance(getApplication()) + .api.getBadges(userId) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(object : Response>() { + override fun onResponse(response: List?) { + super.onResponse(response) + badges.postValue(response) + } + }) + } + + fun availableBadges() { + RetrofitManager.getInstance(getApplication()) + .api.availableBadges(userId) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(object : Response>() { + override fun onResponse(response: List?) { + super.onResponse(response) + availableBadgeCount.postValue(response?.count() ?: 0) + } + }) + } + class Factory(private val mApplication: Application, private val mUserId: String) : ViewModelProvider.NewInstanceFactory() { override fun create(modelClass: Class): T { diff --git a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java index 866d8568d6..f0a104536a 100644 --- a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java +++ b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java @@ -3,6 +3,7 @@ package com.gh.gamecenter.retrofit.service; import com.gh.gamecenter.entity.AliasEntity; import com.gh.gamecenter.entity.AmwayCommentEntity; import com.gh.gamecenter.entity.AppEntity; +import com.gh.gamecenter.entity.BadgeEntity; import com.gh.gamecenter.entity.CategoryEntity; import com.gh.gamecenter.entity.CommentEntity; import com.gh.gamecenter.entity.CommentnumEntity; @@ -1239,6 +1240,18 @@ public interface ApiService { @GET("users/{user_id}") Observable getPersonalData(@Path("user_id") String userId, @Query("channel") String channel, @Query("timestamp") long timestamp); + /** + * 用户徽章列表 + */ + @GET("users/{user_id}/badges?page=1&page_size=20") + Observable> getBadges(@Path("user_id") String userId); + + /** + * 用户可领取徽章列表(全部数据) + */ + @GET("users/{user_id}/available_badges") + Observable> availableBadges(@Path("user_id") String userId); + /** * 用户主页显示的提问过的问题,回答的答案,点赞过的答案和关注过的问题 */ diff --git a/app/src/main/res/drawable-xhdpi/ic_badge.png b/app/src/main/res/drawable-xhdpi/ic_badge.png new file mode 100644 index 0000000000..0676f6861d Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_badge.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_user_home_badge_arrow.png b/app/src/main/res/drawable-xhdpi/ic_user_home_badge_arrow.png new file mode 100644 index 0000000000..3b5f4bcda0 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_user_home_badge_arrow.png differ diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index b755606ff1..3165f15be5 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -60,7 +60,7 @@ android:layout_width="54dp" android:layout_height="52dp" android:layout_marginLeft="20dp" - android:layout_marginTop="15dp" + android:layout_marginTop="16dp" android:layout_marginBottom="15dp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toBottomOf="@id/top_divider"> @@ -85,11 +85,13 @@ - - - - - - - - + app:layout_constraintTop_toBottomOf="@id/user_auth_des"> + android:orientation="horizontal"> + android:textColor="@color/text_1383EB" + android:textSize="16sp" + android:textStyle="bold" + tools:text="50" /> - - + android:orientation="horizontal"> + android:textColor="@color/text_1383EB" + android:textSize="16sp" + android:textStyle="bold" + tools:text="50" /> + android:textColor="@color/text_999999" + android:textSize="12sp" /> + android:visibility="gone" /> - - - + + android:orientation="horizontal"> + android:textColor="@color/text_1383EB" + android:textSize="16sp" + android:textStyle="bold" + tools:text="50" /> + + + + + + + + + + + + + + + + + app:layout_constraintTop_toBottomOf="@id/user_badge" />