From 6949f2b2ff6a37cd26b6216559475d9ea145abfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E7=8E=89=E4=B9=85?= <1484288157@qq.com> Date: Thu, 12 Nov 2020 11:37:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=89=E7=8E=AF=E5=8A=A9=E6=89=8BV4.5.0-?= =?UTF-8?q?=E3=80=90APP=E5=90=88=E8=A7=84=E3=80=91=E6=B8=B8=E6=88=8F?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E9=A1=B5-=E6=B8=B8=E6=88=8F=E5=AE=89?= =?UTF-8?q?=E8=A3=85=E6=9D=83=E9=99=90=E6=8F=90=E7=A4=BA=20https://gitlab.?= =?UTF-8?q?ghzs.com/pm/halo-app-issues/-/issues/1070?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../desc/GameDetailInfoItemAdapter.kt | 15 ++- .../dialog/GamePermissionAdapter.kt | 51 +++++++++ .../dialog/GamePermissionDialogFragment.kt | 63 +++++++++++ .../gamedetail/entity/DetailEntity.kt | 9 +- .../drawable/bg_circle_permission_detail.xml | 8 ++ .../res/layout/game_permission_dialog.xml | 102 ++++++++++++++++++ .../main/res/layout/game_permission_item.xml | 36 +++++++ 7 files changed, 282 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/com/gh/gamecenter/gamedetail/dialog/GamePermissionAdapter.kt create mode 100644 app/src/main/java/com/gh/gamecenter/gamedetail/dialog/GamePermissionDialogFragment.kt create mode 100644 app/src/main/res/drawable/bg_circle_permission_detail.xml create mode 100644 app/src/main/res/layout/game_permission_dialog.xml create mode 100644 app/src/main/res/layout/game_permission_item.xml diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameDetailInfoItemAdapter.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameDetailInfoItemAdapter.kt index bd9f255719..7f7eefd774 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameDetailInfoItemAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/desc/GameDetailInfoItemAdapter.kt @@ -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() { +class GameDetailInfoItemAdapter(val context: Context, val gameInfo: GameInfo, private val mViewModel: DescViewModel, val gameName: String) : RecyclerView.Adapter() { var datas = ArrayList() 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) { "求更新" -> { diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/dialog/GamePermissionAdapter.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/dialog/GamePermissionAdapter.kt new file mode 100644 index 0000000000..a38a20e027 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/dialog/GamePermissionAdapter.kt @@ -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) : BaseRecyclerAdapter(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(binding.root) +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/dialog/GamePermissionDialogFragment.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/dialog/GamePermissionDialogFragment.kt new file mode 100644 index 0000000000..80d213f63a --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/dialog/GamePermissionDialogFragment.kt @@ -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) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/entity/DetailEntity.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/entity/DetailEntity.kt index b9fb16433f..f10dafade9 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/entity/DetailEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/entity/DetailEntity.kt @@ -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? = 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 = arrayListOf() ) \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_circle_permission_detail.xml b/app/src/main/res/drawable/bg_circle_permission_detail.xml new file mode 100644 index 0000000000..283a432384 --- /dev/null +++ b/app/src/main/res/drawable/bg_circle_permission_detail.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/game_permission_dialog.xml b/app/src/main/res/layout/game_permission_dialog.xml new file mode 100644 index 0000000000..5c27bf7dad --- /dev/null +++ b/app/src/main/res/layout/game_permission_dialog.xml @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/game_permission_item.xml b/app/src/main/res/layout/game_permission_item.xml new file mode 100644 index 0000000000..6f657d4cd4 --- /dev/null +++ b/app/src/main/res/layout/game_permission_item.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + \ No newline at end of file