From 6f012dc45929968e85eba77ab681d9b46bf63564 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E7=8E=89=E4=B9=85?= <1484288157@qq.com> Date: Fri, 8 Nov 2019 18:21:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=87=E8=AE=B0=E5=B7=B2=E7=8E=A9=E8=BF=87?= =?UTF-8?q?=E5=BC=B9=E7=AA=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gh/common/constant/Constants.java | 12 +- .../com/gh/common/view/EllipsizeTextView.kt | 26 ++++ .../java/com/gh/gamecenter/WebActivity.java | 7 ++ .../com/gh/gamecenter/amway/AmwayFragment.kt | 6 +- .../gamedetail/GameDetailFragment.kt | 50 ++------ .../gamedetail/rating/RatingAdapter.kt | 1 + .../rating/edit/RatingEditActivity.kt | 1 + .../gamecenter/mygame/MyPlayedGameFragment.kt | 16 ++- .../gamecenter/personalhome/HomeFragment.kt | 20 ++- .../personalhome/InstalledGameAdapter.kt | 30 +++++ .../personalhome/InstalledGameDialog.kt | 60 +++++++++ .../personalhome/home/UserHistoryAdapter.kt | 16 ++- .../retrofit/service/ApiService.java | 14 ++- .../main/res/layout/dialog_installed_game.xml | 119 ++++++++++++++++++ app/src/main/res/layout/fragment_home.xml | 45 ++++++- .../main/res/layout/personal_home_rating.xml | 4 +- app/src/main/res/values/strings.xml | 1 + 17 files changed, 363 insertions(+), 65 deletions(-) create mode 100644 app/src/main/java/com/gh/common/view/EllipsizeTextView.kt create mode 100644 app/src/main/java/com/gh/gamecenter/personalhome/InstalledGameAdapter.kt create mode 100644 app/src/main/java/com/gh/gamecenter/personalhome/InstalledGameDialog.kt create mode 100644 app/src/main/res/layout/dialog_installed_game.xml diff --git a/app/src/main/java/com/gh/common/constant/Constants.java b/app/src/main/java/com/gh/common/constant/Constants.java index cbb22524cc..fa96f6ba32 100644 --- a/app/src/main/java/com/gh/common/constant/Constants.java +++ b/app/src/main/java/com/gh/common/constant/Constants.java @@ -16,11 +16,11 @@ public class Constants { public static final String USER_INFO_KEY = "userInfoKey"; public static final String DEVICE_KEY = "deviceKey"; - + public static final String HAS_REQUESTED_NOTIFICATION_PERMISSIONS = "has_requested_notification_permissions"; public static final String SHOULD_SHOW_VIDEO_MOBILE_WARNING = "should_show_video_mobile_warning"; - + public static final String GAME_DETAIL_COME_IN = "game_detail_come_in"; // 从游戏详情进入 public static final String XPOSED_INSTALLER_PACKAGE_NAME = "de.robv.android.xposed.installer"; @@ -28,8 +28,10 @@ public class Constants { // 最近显示的弹窗信息 public static final String SP_LAST_OPENING_ID = "last_opening_dialog_id"; public static final String SP_LAST_OPENING_TIME = "last_opening_dialog_time"; - + public static final String SP_SHOWED_NOTIFICATION_HINT = "show_notification_hint"; + //标记安装的游戏为已玩过弹窗,最多取消1次 + public static final String SP_MARK_INSTALLED_GAME = "mark_installed_game"; //手机号码匹配规则 public static final String REGEX_MOBILE = "^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$"; @@ -38,7 +40,7 @@ public class Constants { //输入规则 public static final String INPUT_RULE = "0123456789abcdefghijklnmopqrstuvwxyzABCDEFGHIJKLNMOPQRSTUVWXYZ_"; - + // 微信绑定地址地址 public static final String WECHAT_BIND_ADDRESS_DEV = "https://resource.ghzs.com/page/wechat_dev/index.html#/"; public static final String WECHAT_BIND_ADDRESS = "https://resource.ghzs.com/page/wechat_pro/index.html#/"; @@ -62,6 +64,6 @@ public class Constants { public static final String[] REPORT_LIST = new String[]{"垃圾广告营销", "恶意攻击谩骂", "淫秽色情信息", "违法有害信息", "其它"}; public static final String ENTRANCE_UNKNOWN = "(unknown)"; - + public static final String DEFAULT_TEXT_WRAPPER = "###"; } diff --git a/app/src/main/java/com/gh/common/view/EllipsizeTextView.kt b/app/src/main/java/com/gh/common/view/EllipsizeTextView.kt new file mode 100644 index 0000000000..8c4fb8f908 --- /dev/null +++ b/app/src/main/java/com/gh/common/view/EllipsizeTextView.kt @@ -0,0 +1,26 @@ +package com.gh.common.view + +import android.content.Context +import android.util.AttributeSet +import androidx.appcompat.widget.AppCompatTextView + +/** + * TextView using Spannable - ellipsize doesn't work + * https://stackoverflow.com/questions/14691511/textview-using-spannable-ellipsize-doesnt-work + */ +class EllipsizeTextView : AppCompatTextView { + constructor(context: Context) : super(context) + + constructor(context: Context, attrs: AttributeSet) : super(context, attrs) + + constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) + + override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) { + super.onLayout(changed, left, top, right, bottom) + if (lineCount > maxLines) { + val lastLineEnd = layout.getLineEnd(maxLines - 1) + val charSequence = text.subSequence(0, lastLineEnd) + text = charSequence + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/WebActivity.java b/app/src/main/java/com/gh/gamecenter/WebActivity.java index 5039dbc255..1f09cb40c7 100644 --- a/app/src/main/java/com/gh/gamecenter/WebActivity.java +++ b/app/src/main/java/com/gh/gamecenter/WebActivity.java @@ -99,6 +99,13 @@ public class WebActivity extends NormalActivity { return getTargetIntent(context, WebActivity.class, WebFragment.class, bundle); } + public static Intent getBadgeCenterIntent(Context context){ + Bundle bundle = new Bundle(); + bundle.putString(EntranceUtils.KEY_URL, "https://www.baidu.com"); + + return getTargetIntent(context, WebActivity.class, WebFragment.class, bundle); + } + @NonNull public static Intent getIntentByNews(Context context, ConcernEntity concernEntity, String entrance) { Bundle bundle = new Bundle(); diff --git a/app/src/main/java/com/gh/gamecenter/amway/AmwayFragment.kt b/app/src/main/java/com/gh/gamecenter/amway/AmwayFragment.kt index 9e6301b03d..ed470427e5 100644 --- a/app/src/main/java/com/gh/gamecenter/amway/AmwayFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/amway/AmwayFragment.kt @@ -7,10 +7,7 @@ import androidx.core.content.ContextCompat import androidx.core.view.ViewCompat import androidx.recyclerview.widget.RecyclerView import com.ethanhua.skeleton.Skeleton -import com.gh.common.util.ClickUtils -import com.gh.common.util.DisplayUtils -import com.gh.common.util.ifLogin -import com.gh.common.util.viewModelProvider +import com.gh.common.util.* import com.gh.common.view.VerticalItemDecoration import com.gh.gamecenter.R import com.gh.gamecenter.baselist.ListAdapter @@ -63,6 +60,7 @@ class AmwayFragment : ListFragment() { }) fab.setOnClickListener { + MtaHelper.onEvent("发表评论", "进入", "上墙") ifLogin("安利墙") { // TODO Go to amway search } diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt index f624e13f3f..80df385219 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt @@ -281,7 +281,7 @@ class GameDetailFragment : NormalFragment() { if (mViewModel.displayTopVideo) { // 每次设置 title 都会触发 requestLayout,最后造成 OOM,这里过滤下,相同文字的时候不处理 if (absVerticalOffset > total * 4 / 5) { - if (mToolbar.title != mGameEntity?.name) { + if (mToolbar.title.isNullOrEmpty()) { mToolbar.title = mGameEntity?.name ?: "" updateToolbarStyle(isToolbarWhite = true) } @@ -293,11 +293,11 @@ class GameDetailFragment : NormalFragment() { } } else { if (absVerticalOffset > total * 0.5) { - if (mToolbar.title != mGameEntity?.name) { + if (mToolbar.title.isNullOrEmpty()) { mToolbar.title = mGameEntity?.name ?: "" } } else { - if (mToolbar.title != "") { + if (!mToolbar.title.isNullOrEmpty()) { mToolbar.title = "" } } @@ -536,20 +536,6 @@ class GameDetailFragment : NormalFragment() { ViewCompat.setElevation(layout, DisplayUtils.dip2px(2.0f).toFloat()) - /*val dialog = Dialog(requireActivity()) - dialog.setContentView(layout) - - val window = dialog.window - if (window != null) { - window.setGravity(Gravity.RIGHT or Gravity.TOP) - window.setBackgroundDrawable(ColorDrawable(0)) - window.setDimAmount(0.2f) - val lp = window.attributes - lp.x = DisplayUtils.dip2px(requireContext(), 12f) - lp.y = DisplayUtils.dip2px(requireContext(), 45f) - window.attributes = lp - } - dialog.show()*/ val popupWindow = PopupWindow( layout, LinearLayout.LayoutParams.WRAP_CONTENT, @@ -705,23 +691,13 @@ class GameDetailFragment : NormalFragment() { } private fun updateToolbarStyle(isToolbarWhite: Boolean) { - if (isToolbarWhite) { - mToolbar.setTitleTextColor(ContextCompat.getColor(requireContext(), R.color.black)) - mToolbar.setNavigationIcon(R.drawable.ic_bar_back) - mToolbar.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.white)) - DisplayUtils.setStatusBarColor(requireActivity(), R.color.white, true) - updateConcernMenuIcon(mGameDetailEntity?.me?.isGameConcerned ?: false) - mMoreMenuItem?.setIcon(R.drawable.ic_menu_gamedetail_more) - mDownloadMenuIcon?.setImageResource(R.drawable.ic_menu_gamedetail_download) - } else { - mToolbar.setTitleTextColor(ContextCompat.getColor(requireContext(), R.color.white)) - mToolbar.setNavigationIcon(R.drawable.ic_back_gamedetail_white) - mToolbar.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.transparent)) - DisplayUtils.setStatusBarColor(requireActivity(), R.color.transparent, false) - updateConcernMenuIcon(mGameDetailEntity?.me?.isGameConcerned ?: false) - mMoreMenuItem?.setIcon(R.drawable.ic_menu_gamedetail_more_light) - mDownloadMenuIcon?.setImageResource(R.drawable.ic_menu_gamedetail_download_light) - } + mToolbar.setTitleTextColor(ContextCompat.getColor(requireContext(), if (isToolbarWhite) R.color.black else R.color.white)) + mToolbar.setNavigationIcon(if (isToolbarWhite) R.drawable.ic_bar_back else R.drawable.ic_back_gamedetail_white) + mToolbar.setBackgroundColor(ContextCompat.getColor(requireContext(), if (isToolbarWhite) R.color.white else R.color.transparent)) + DisplayUtils.setStatusBarColor(requireActivity(), if (isToolbarWhite) R.color.white else R.color.transparent, true) + updateConcernMenuIcon(mGameDetailEntity?.me?.isGameConcerned ?: false) + mMoreMenuItem?.setIcon(if (isToolbarWhite) R.drawable.ic_menu_gamedetail_more else R.drawable.ic_menu_gamedetail_more_light) + mDownloadMenuIcon?.setImageResource(if (isToolbarWhite) R.drawable.ic_menu_gamedetail_download else R.drawable.ic_menu_gamedetail_download_light) } private fun share() { @@ -860,12 +836,6 @@ class GameDetailFragment : NormalFragment() { private fun updateConcernMenuIcon(isConcerned: Boolean) { if (isConcerned) { mConcernMenuItem?.setIcon(R.drawable.ic_game_detail_followed_light) - /*if (TextUtils.isEmpty(mToolbar.title) && mViewModel.displayTopVideo) { - // 有文字,显示黑色图标 - mConcernMenuItem?.setIcon(R.drawable.ic_game_detail_followed_light) - } else { - mConcernMenuItem?.setIcon(R.drawable.ic_menu_gamedetail_collected) - }*/ } else { if (TextUtils.isEmpty(mToolbar.title) && mViewModel.displayTopVideo) { // 有文字,显示黑色图标 diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingAdapter.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingAdapter.kt index ea475bd023..49ed18ce12 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingAdapter.kt @@ -97,6 +97,7 @@ class RatingAdapter(context: Context, } ratingEditBtn.setOnClickListener { MtaHelper.onEvent("游戏详情_新", "评论Tab_点击我来评论", mListViewModel.game.name) + MtaHelper.onEvent("发表评论", "进入", "游戏详情${mListViewModel.game.name}") skipRatingEdit(0.0F, "游戏详情-评论-[我来评论]") } if (ratingData?.serviceComment != null) { diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/edit/RatingEditActivity.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/edit/RatingEditActivity.kt index 66fc954824..3b278ea38e 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/edit/RatingEditActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/edit/RatingEditActivity.kt @@ -255,6 +255,7 @@ class RatingEditActivity : ToolBarActivity() { mViewModel.postGameComment(this, mGame.id, mComment?.id ?: "", body) { mPostDialog?.dismiss() if (it) { + MtaHelper.onEvent("发表评论", "提交", mGame.name) setResult(Activity.RESULT_OK) toast("提交成功") GdtHelper.logAction(ActionType.RATE, diff --git a/app/src/main/java/com/gh/gamecenter/mygame/MyPlayedGameFragment.kt b/app/src/main/java/com/gh/gamecenter/mygame/MyPlayedGameFragment.kt index d818a3c571..e8cbece136 100644 --- a/app/src/main/java/com/gh/gamecenter/mygame/MyPlayedGameFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/mygame/MyPlayedGameFragment.kt @@ -1,12 +1,26 @@ package com.gh.gamecenter.mygame +import com.gh.common.constant.Constants +import com.gh.common.util.SPUtils import com.gh.gamecenter.baselist.ListAdapter import com.gh.gamecenter.entity.GameEntity +import com.gh.gamecenter.manager.PackagesManager +import com.gh.gamecenter.personalhome.InstalledGameDialog class MyPlayedGameFragment : PlayedGameFragment() { override fun provideListAdapter(): ListAdapter { - return mAdapter ?: MyPlayedGameAdapter(requireContext(), mViewModel).apply { mAdapter = this } + return mAdapter + ?: MyPlayedGameAdapter(requireContext(), mViewModel).apply { mAdapter = this } } + override fun onChanged(ts: MutableList?) { + super.onChanged(ts) + val installedList = PackagesManager.getInstalledList() + val count = SPUtils.getInt(Constants.SP_MARK_INSTALLED_GAME, 0) + if (count < 2 && ts.isNullOrEmpty() && installedList.isNotEmpty()) { + val mDialog = InstalledGameDialog(requireContext(), installedList) + mDialog.show() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/HomeFragment.kt b/app/src/main/java/com/gh/gamecenter/personalhome/HomeFragment.kt index 9fb6473933..c41b47a74c 100644 --- a/app/src/main/java/com/gh/gamecenter/personalhome/HomeFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/personalhome/HomeFragment.kt @@ -1,5 +1,6 @@ package com.gh.gamecenter.personalhome +import android.app.Dialog import android.graphics.Color import android.os.Bundle import android.view.View @@ -7,16 +8,15 @@ import androidx.core.content.ContextCompat import androidx.databinding.DataBindingUtil import androidx.recyclerview.widget.LinearLayoutManager 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.NewsDetailActivity -import com.gh.gamecenter.R -import com.gh.gamecenter.UserInfoActivity -import com.gh.gamecenter.ViewImageActivity +import com.gh.gamecenter.* import com.gh.gamecenter.databinding.FragmentHomeBinding import com.gh.gamecenter.entity.GameEntity import com.gh.gamecenter.entity.MessageUnreadEntity import com.gh.gamecenter.entity.PersonalEntity +import com.gh.gamecenter.manager.PackagesManager import com.gh.gamecenter.manager.UserManager import com.gh.gamecenter.message.MessageUnreadViewModel import com.gh.gamecenter.normal.NormalFragment @@ -42,6 +42,7 @@ class HomeFragment : NormalFragment() { private lateinit var mHomeViewModel: HomeViewModel private lateinit var mUserViewModel: UserViewModel private lateinit var mMessageUnreadViewModel: MessageUnreadViewModel + private lateinit var mDialog: Dialog override fun getInflatedLayout(): View { mHomeBinding = DataBindingUtil.inflate(requireActivity().layoutInflater, R.layout.fragment_home, null, false) @@ -93,6 +94,13 @@ class HomeFragment : NormalFragment() { mHomeViewModel.playedGames.observeNonNull(this) { showPlayedGames(it) + val installedList = PackagesManager.getInstalledList() + val count = SPUtils.getInt(Constants.SP_MARK_INSTALLED_GAME, 0) + if (count < 2 && it.isEmpty() && installedList.isNotEmpty()) { + mDialog = InstalledGameDialog(requireContext(), installedList) + mDialog.show() + } + } mMessageUnreadViewModel.liveData.observeNonNull(this) { @@ -248,6 +256,10 @@ class HomeFragment : NormalFragment() { } } } + + userBadge.setOnClickListener { + startActivity(WebActivity.getBadgeCenterIntent(requireContext())) + } } } diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/InstalledGameAdapter.kt b/app/src/main/java/com/gh/gamecenter/personalhome/InstalledGameAdapter.kt new file mode 100644 index 0000000000..267d788b0b --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/personalhome/InstalledGameAdapter.kt @@ -0,0 +1,30 @@ +package com.gh.gamecenter.personalhome + +import android.content.Context +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.gh.common.util.ImageUtils +import com.gh.gamecenter.R +import com.gh.gamecenter.entity.GameInstall +import com.lightgame.adapter.BaseRecyclerAdapter +import kotlinx.android.synthetic.main.dialog_select_game_item.view.* + +class InstalledGameAdapter(mContext: Context, val games: ArrayList) : BaseRecyclerAdapter(mContext) { + + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { + val view = View.inflate(mContext, R.layout.dialog_select_game_item, null) + return object : RecyclerView.ViewHolder(view) {} + } + + override fun getItemCount(): Int = games.size + + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + val gameInstall = games[position] + holder.itemView.apply { + ImageUtils.display(game_icon, gameInstall.icon) + game_name.text = gameInstall.name + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/InstalledGameDialog.kt b/app/src/main/java/com/gh/gamecenter/personalhome/InstalledGameDialog.kt new file mode 100644 index 0000000000..9e190f0bf5 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/personalhome/InstalledGameDialog.kt @@ -0,0 +1,60 @@ +package com.gh.gamecenter.personalhome + +import android.annotation.SuppressLint +import android.app.Dialog +import android.content.Context +import android.os.Bundle +import android.view.View +import androidx.recyclerview.widget.GridLayoutManager +import com.gh.common.constant.Constants +import com.gh.common.util.GsonUtils +import com.gh.common.util.SPUtils +import com.gh.gamecenter.R +import com.gh.gamecenter.entity.GameInstall +import com.gh.gamecenter.manager.UserManager +import com.gh.gamecenter.retrofit.BiResponse +import com.gh.gamecenter.retrofit.RetrofitManager +import io.reactivex.schedulers.Schedulers +import kotlinx.android.synthetic.main.dialog_installed_game.view.* +import okhttp3.MediaType +import okhttp3.RequestBody +import okhttp3.ResponseBody + +class InstalledGameDialog(val mContext: Context, val games: ArrayList) : Dialog(mContext, R.style.DialogWindowTransparent) { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setCanceledOnTouchOutside(false) + setCancelable(false) + val view = View.inflate(mContext, R.layout.dialog_installed_game, null) + setContentView(view) + view.dialog_installed_game_rv.apply { + layoutManager = GridLayoutManager(context, 4) + adapter = InstalledGameAdapter(mContext, games) + } + view.dialog_cancel.setOnClickListener { + var count = SPUtils.getInt(Constants.SP_MARK_INSTALLED_GAME, 0) + SPUtils.setInt(Constants.SP_MARK_INSTALLED_GAME, ++count) + dismiss() + } + view.dialog_ok.setOnClickListener { + SPUtils.setInt(Constants.SP_MARK_INSTALLED_GAME, 2) + postPlayedGames() + } + } + + @SuppressLint("CheckResult") + private fun postPlayedGames() { + val gameIds = games.map { it.id }.toList() + val requestBody = RequestBody.create(MediaType.parse("application/json"), GsonUtils.toJson(gameIds)) + RetrofitManager.getInstance(mContext).api + .postPlayedGames(UserManager.getInstance().userId, requestBody) + .subscribeOn(Schedulers.io()) + .observeOn(Schedulers.io()) + .subscribe(object : BiResponse() { + override fun onSuccess(data: ResponseBody) { + dismiss() + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/home/UserHistoryAdapter.kt b/app/src/main/java/com/gh/gamecenter/personalhome/home/UserHistoryAdapter.kt index 9483cf5376..8accc9bc6b 100644 --- a/app/src/main/java/com/gh/gamecenter/personalhome/home/UserHistoryAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/personalhome/home/UserHistoryAdapter.kt @@ -6,10 +6,7 @@ import android.view.ViewGroup import androidx.constraintlayout.widget.ConstraintSet import androidx.recyclerview.widget.RecyclerView import com.gh.common.constant.ItemViewType -import com.gh.common.util.DisplayUtils -import com.gh.common.util.NewsUtils -import com.gh.common.util.fromHtml -import com.gh.common.util.setTextWithHighlightedTextWrappedInsideWrapper +import com.gh.common.util.* import com.gh.gamecenter.GameDetailActivity import com.gh.gamecenter.R import com.gh.gamecenter.adapter.viewholder.FooterViewHolder @@ -19,10 +16,12 @@ import com.gh.gamecenter.databinding.PersonalHomeItemBinding import com.gh.gamecenter.databinding.PersonalHomeRatingBinding import com.gh.gamecenter.entity.PersonalHistoryEntity import com.gh.gamecenter.gamedetail.rating.RatingReplyActivity +import com.gh.gamecenter.gamedetail.rating.edit.RatingEditActivity import com.gh.gamecenter.personalhome.PersonalItemViewHolder import com.gh.gamecenter.qa.answer.detail.AnswerDetailActivity import com.gh.gamecenter.qa.article.detail.ArticleDetailActivity import com.gh.gamecenter.qa.questions.detail.QuestionsDetailActivity +import java.util.regex.Pattern class UserHistoryAdapter(context: Context, private val mListViewModel: UserHistoryViewModel, @@ -112,7 +111,14 @@ class UserHistoryAdapter(context: Context, private fun bindRatingItem(holder: PersonalHomeRatingViewHolder) { val historyEntity = mEntityList[holder.adapterPosition] holder.binding.entity = historyEntity - holder.binding.content.setTextWithHighlightedTextWrappedInsideWrapper(text = historyEntity.comment.content, copyClickedText = true) + val m = Pattern.compile(RatingEditActivity.labelRegex).matcher(historyEntity.comment.content) + if (m.find()) { + val contents = TextHelper.getCommentLabelSpannableStringBuilder(historyEntity.comment.content) + holder.binding.content.setTextWithHighlightedTextWrappedInsideWrapper(text = contents, copyClickedText = true) + }else{ + holder.binding.content.setTextWithHighlightedTextWrappedInsideWrapper(text = historyEntity.comment.content, copyClickedText = true) + } + holder.binding.userCommand.text = (mContext.getString( R.string.personal_home_rating_command, NewsUtils.getFormattedTime(historyEntity.time), 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 6166561ada..6dbb0f015b 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 @@ -2025,6 +2025,12 @@ public interface ApiService { @POST("users/{user_id}/played_games/{game_id}") Single postPlayedGame(@Path("user_id") String userId, @Path("game_id") String gameId); + /** + * 批量新增玩过的游戏 + */ + @POST("users/{user_id}/played_games:batch_create") + Single postPlayedGames(@Path("user_id") String userId, @Body RequestBody body); + /** * 清除用户成功安装应用记录(用于玩过的游戏) */ @@ -2042,13 +2048,13 @@ public interface ApiService { */ @GET("games/servers/filter_tag") Single> getServerFilterTag(); - + /** * 获取安利墙评论列表 */ @GET("anliwall/comments") Single> getAmwayCommentList(@Query("page") int page, @Query("page_size") int pageSize); - + /** * 获取安利墙列表 */ @@ -2060,8 +2066,8 @@ public interface ApiService { */ @POST("./wechat:bind") Single postBindWechat(@Body RequestBody body); - - + + /** * 获取通知权限引导数据 */ diff --git a/app/src/main/res/layout/dialog_installed_game.xml b/app/src/main/res/layout/dialog_installed_game.xml new file mode 100644 index 0000000000..0c536ec7da --- /dev/null +++ b/app/src/main/res/layout/dialog_installed_game.xml @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 8c4c800915..b755606ff1 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -137,13 +137,56 @@ android:textSize="15sp" app:layout_constraintTop_toBottomOf="@id/user_icon_container" /> + + + + + + + + + app:layout_constraintTop_toBottomOf="@id/user_badge"> - 还不错 完美,太棒了 + 将以下游戏标记为玩过的游戏