From c7b6d44874d2bce0e64f483b2eac077735bbfe91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E7=8E=89=E4=B9=85?= <1484288157@qq.com> Date: Wed, 20 Nov 2019 11:51:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E6=8E=A5=E4=B8=AA=E4=BA=BA=E4=B8=BB?= =?UTF-8?q?=E9=A1=B5=E5=BE=BD=E7=AB=A0=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gh/gamecenter/WebActivity.java | 2 +- .../com/gh/gamecenter/entity/BadgeEntity.kt | 13 ++ .../personalhome/UserHomeFragment.kt | 39 +++- .../personalhome/UserHomeViewModel.kt | 29 +++ .../retrofit/service/ApiService.java | 13 ++ app/src/main/res/drawable-xhdpi/ic_badge.png | Bin 0 -> 1204 bytes .../ic_user_home_badge_arrow.png | Bin 0 -> 423 bytes app/src/main/res/layout/fragment_home.xml | 212 +++++++++--------- 8 files changed, 205 insertions(+), 103 deletions(-) create mode 100644 app/src/main/java/com/gh/gamecenter/entity/BadgeEntity.kt create mode 100644 app/src/main/res/drawable-xhdpi/ic_badge.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_user_home_badge_arrow.png 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 0000000000000000000000000000000000000000..0676f6861d0056e0119105c5a013e19ace2d24dd GIT binary patch literal 1204 zcmV;l1WWsgP)Px(Zb?KzR9Fe+S6gVDRS^DWH=9kWZNz#Zw)NIDT?uHg3W~Hw>Wg^6UI;3_q)nR( zLLY>Jg0`X-#3#`-*;)uKng^v1f|QCNRgfUGQmko`O)RxBv1l!trlh&-j^A1LZ2$ew z`8UDW9$041%r}>R&Ya5v*ZYug0qVN-Boq&Z<#sND^hk%a+qt3j-MT`7A5^g-D7QR= zOvYl^INUBLtjyAwWr|dBzQ}tR25C$6=%YbZ4%ibFJdYDp$13n=(8lsk0+PV%5M(XD zN3)9eth_F*t3}ab=RV2`d_34Hzxs4e0wX(QkicFa*vj~|>(_MaGx>RrUk_ARokImz zr4sKt@`Augz{um3*h4a1z&M0`@C&Q7q3#o1#(r7J`6UN*P0%>_&zgOF34@KkD}D zK5AYoXmbpBoWH)9;EPO~Tnt*Ns;o`pepcos{$8YRmC@7rl*DmQ7$3BaOkiDFYbLY& zQeZp|Y#Zv7llL9eyRvh5mS5e-#xotCWC_Prkclgf4tC(jCypaNF^JtmkZ7SQ|z*E!J2V%YC_WIc^zfmRTz+M@^vm9*nVyrB`zTt44RoZ(&*$_@k3VP6~hMyx8x85)>2m!lAFNeY}Qmzp63OpN80f~R0Z56pw+F*v74C{4;$+= zA0QOm=qO+63vSL3KF6D*f*V_J0{zW0%>=g4LCMq07%Y1H_p)yJU)Qk-lIfJQ$t3@v z2>KTtv;bt{zk_c9URXyKvh`NL8vVRY##W}Vfl2ITMZAA3EY?tBW=IaRdmBf0%C|vX z6i=JQ4W5FPbCchLj4Qq%WV7` SbN)&I0000Px$VM#s_Iv;HHD4OQ-(9M-UF21>JlAA3)q3d<3ThHw70F zoNl>Uscm0HaBb`NcQg>BmtXQrFc9+hmrqlg+|6eHoFdK}hGE_`%^A(hvg|#IqMnN} zjn7SkG*;L3Mc?;tlu>`i11z{0(>M!aNBe34VCO)ed{7ollH?KKXDE~f(=`17b{Yz0 zKN_{Os;c%-Un8HWKD_RiJkKvtcB+pntwCBS1nLBaK%GHfR0R5U8NFu?==~ zsN!(*+!jT#QfzU-{1xj?F_N@39t2tvVFwvnZLV~;2!7- Ra*6-|002ovPDHLkV1i08zAXR% literal 0 HcmV?d00001 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" />