光环助手V4.5.0-【APP合规】游戏详情页-游戏安装权限提示 https://gitlab.ghzs.com/pm/halo-app-issues/-/issues/1070

This commit is contained in:
张玉久
2020-11-12 11:37:36 +08:00
parent fee4e4635c
commit 6949f2b2ff
7 changed files with 282 additions and 2 deletions

View File

@ -4,17 +4,21 @@ import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import androidx.databinding.DataBindingUtil
import androidx.recyclerview.widget.RecyclerView
import com.gh.common.util.*
import com.gh.gamecenter.R
import com.gh.gamecenter.databinding.ItemGameInfoBinding
import com.gh.gamecenter.entity.TrackableEntity
import com.gh.gamecenter.gamedetail.dialog.GamePermissionDialogFragment
import com.gh.gamecenter.gamedetail.entity.GameInfo
import com.gh.gamecenter.gamedetail.entity.GameInfoItemData
import com.gh.gamecenter.gamedetail.entity.Permission
import com.halo.assistant.HaloApp
class GameDetailInfoItemAdapter(val context: Context, gameInfo: GameInfo, private val mViewModel: DescViewModel, val gameName: String) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
class GameDetailInfoItemAdapter(val context: Context, val gameInfo: GameInfo, private val mViewModel: DescViewModel, val gameName: String) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
var datas = ArrayList<GameInfoItemData>()
init {
@ -34,6 +38,9 @@ class GameDetailInfoItemAdapter(val context: Context, gameInfo: GameInfo, privat
if (gameInfo.manufacturer.isNotEmpty()) {
datas.add(GameInfoItemData(title = "厂商", info = gameInfo.manufacturer))
}
if (gameInfo.permission != null) {
datas.add(GameInfoItemData(title = "权限", info = "查看详情"))
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
@ -52,6 +59,12 @@ class GameDetailInfoItemAdapter(val context: Context, gameInfo: GameInfo, privat
holder.binding.actionTv.visibility = View.VISIBLE
holder.binding.actionTv.text = gameInfoItemData.actionStr
}
if (gameInfoItemData.title == "权限") {
holder.binding.infoTv.setTextColor(ContextCompat.getColor(context, R.color.theme_font))
holder.binding.infoTv.setOnClickListener {
GamePermissionDialogFragment.show(context as AppCompatActivity, mViewModel.game, gameInfo)
}
}
holder.binding.actionTv.setOnClickListener {
when (gameInfoItemData.actionStr) {
"求更新" -> {

View File

@ -0,0 +1,51 @@
package com.gh.gamecenter.gamedetail.dialog
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.LinearLayout
import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
import com.gh.base.BaseRecyclerViewHolder
import com.gh.common.util.dip2px
import com.gh.gamecenter.R
import com.gh.gamecenter.databinding.GamePermissionItemBinding
import com.gh.gamecenter.gamedetail.entity.Permission
import com.lightgame.adapter.BaseRecyclerAdapter
class GamePermissionAdapter(context: Context, val permissions: List<Permission>) : BaseRecyclerAdapter<RecyclerView.ViewHolder>(context) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return GamePermissionViewHolder(GamePermissionItemBinding.bind(LayoutInflater.from(mContext).inflate(R.layout.game_permission_item, parent, false)))
}
override fun getItemCount(): Int = permissions.size
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if (holder is GamePermissionViewHolder) {
val permission = permissions[position]
holder.binding.permissionNameTV.text = permission.name
holder.binding.permissionDetailLl.removeAllViews()
permission.details.forEach {
holder.binding.permissionDetailLl.addView(createDetailView(it))
}
}
}
private fun createDetailView(detail: String): View {
return TextView(mContext).apply {
val params = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)
params.topMargin = 12f.dip2px()
layoutParams = params
textSize = 13f
setTextColor(ContextCompat.getColor(mContext, R.color.text_999999))
setCompoundDrawablesWithIntrinsicBounds(ContextCompat.getDrawable(mContext, R.drawable.bg_circle_permission_detail), null, null, null)
compoundDrawablePadding = 5f.dip2px()
text = detail
}
}
class GamePermissionViewHolder(val binding: GamePermissionItemBinding) : BaseRecyclerViewHolder<Any>(binding.root)
}

View File

@ -0,0 +1,63 @@
package com.gh.gamecenter.gamedetail.dialog
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AppCompatActivity
import androidx.core.os.bundleOf
import androidx.recyclerview.widget.LinearLayoutManager
import com.gh.base.fragment.BaseDialogFragment
import com.gh.common.util.dip2px
import com.gh.common.view.VerticalItemDecoration
import com.gh.gamecenter.R
import com.gh.gamecenter.databinding.GamePermissionDialogBinding
import com.gh.gamecenter.entity.GameEntity
import com.gh.gamecenter.gamedetail.entity.GameInfo
import com.gh.gamecenter.gamedetail.entity.Permission
class GamePermissionDialogFragment : BaseDialogFragment() {
lateinit var binding: GamePermissionDialogBinding
var game: GameEntity? = null
var gameInfo: GameInfo? = null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
binding = GamePermissionDialogBinding.bind(inflater.inflate(R.layout.game_permission_dialog, container, false))
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
game?.let {
binding.gameIconView.displayGameIcon(it)
binding.gameNameTv.text = it.name
binding.gameVersionTv.text = "版本号:${gameInfo?.version}"
}
gameInfo?.permission?.let {
binding.permissionsRv.layoutManager = LinearLayoutManager(requireContext())
binding.permissionsRv.adapter = GamePermissionAdapter(requireContext(), it)
}
}
override fun onStart() {
super.onStart()
val width = requireContext().resources.displayMetrics.widthPixels - 40F.dip2px()
val height = ViewGroup.LayoutParams.WRAP_CONTENT
dialog?.window?.setLayout(width, height)
dialog?.setCanceledOnTouchOutside(true)
}
companion object {
fun show(activity: AppCompatActivity, game: GameEntity?, gameInfo: GameInfo) {
var permissionDialogFragment = activity.supportFragmentManager.findFragmentByTag(GamePermissionDialogFragment::class.java.simpleName) as? GamePermissionDialogFragment
if (permissionDialogFragment == null) {
permissionDialogFragment = GamePermissionDialogFragment()
}
permissionDialogFragment.game = game
permissionDialogFragment.gameInfo = gameInfo
permissionDialogFragment.show(activity.supportFragmentManager, GamePermissionDialogFragment::class.java.simpleName)
}
}
}

View File

@ -128,7 +128,8 @@ data class GameInfo(
var updateTime: Long = 0,
var size: String = "",
var contact: Contact? = null,
var manufacturer: String = ""
var manufacturer: String = "",
var permission: List<Permission>? = null
)
@Keep
@ -147,4 +148,10 @@ data class UpdateContent(
var historyApkStatus: String = "",
@SerializedName("update_des")
val updateDes: String = ""
)
@Keep
data class Permission(
var name: String = "",
var details: List<String> = arrayListOf()
)