From 548aea8d136619004c048f71252a6c873dcb4aca Mon Sep 17 00:00:00 2001 From: kehaoyuan Date: Wed, 17 Jun 2020 17:39:05 +0800 Subject: [PATCH] =?UTF-8?q?=20=E5=85=89=E7=8E=AF=E5=8A=A9=E6=89=8BV4.0.2-?= =?UTF-8?q?=E9=A6=96=E9=A1=B5=E6=8F=92=E4=BB=B6=E5=8C=96=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E5=8C=BA=E5=9F=9F=E4=BC=98=E5=8C=96(=E9=99=A44.4=E5=A4=96,?= =?UTF-8?q?=E5=85=B6=E5=AE=83=E5=AE=8C=E6=88=90)=20https://gitlab.ghzs.com?= =?UTF-8?q?/pm/halo-app-issues/-/issues/898?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gh/common/util/DialogUtils.java | 41 +++++++-- .../com/gh/common/util/HomePluggableHelper.kt | 47 +++++++++++ .../main/java/com/gh/common/util/SpUtils.kt | 16 +++- .../java/com/gh/gamecenter/MainActivity.java | 8 +- .../entity/HomePluggableFilterEntity.kt | 14 ++++ .../com/gh/gamecenter/home/HomeViewModel.kt | 10 +-- .../LegacyHomeFragmentAdapterAssistant.kt | 58 ++++++++----- .../com/gh/gamecenter/room/AppDatabase.java | 7 +- .../room/dao/HomePluggableFilterDao.kt | 21 +++++ .../fragment/game/GamePluggableViewHolder.kt | 28 +++++++ .../fragment/game/GamePluginAdapter.java | 73 +++++++++++----- .../layout/dialog_pluggable_never_remind.xml | 83 +++++++++++++++++++ .../main/res/layout/game_pluggable_item.xml | 30 +++++++ 13 files changed, 378 insertions(+), 58 deletions(-) create mode 100644 app/src/main/java/com/gh/common/util/HomePluggableHelper.kt create mode 100644 app/src/main/java/com/gh/gamecenter/entity/HomePluggableFilterEntity.kt create mode 100644 app/src/main/java/com/gh/gamecenter/room/dao/HomePluggableFilterDao.kt create mode 100644 app/src/main/java/com/halo/assistant/fragment/game/GamePluggableViewHolder.kt create mode 100644 app/src/main/res/layout/dialog_pluggable_never_remind.xml create mode 100644 app/src/main/res/layout/game_pluggable_item.xml diff --git a/app/src/main/java/com/gh/common/util/DialogUtils.java b/app/src/main/java/com/gh/common/util/DialogUtils.java index 800adab138..f089e34dda 100644 --- a/app/src/main/java/com/gh/common/util/DialogUtils.java +++ b/app/src/main/java/com/gh/common/util/DialogUtils.java @@ -8,7 +8,6 @@ import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; -import android.os.Build; import android.os.CountDownTimer; import android.preference.PreferenceManager; import android.text.Html; @@ -30,6 +29,12 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; +import androidx.core.content.ContextCompat; +import androidx.databinding.DataBindingUtil; +import androidx.recyclerview.widget.RecyclerView; + import com.facebook.drawee.generic.GenericDraweeHierarchy; import com.gh.common.AppExecutor; import com.gh.common.constant.Config; @@ -59,13 +64,6 @@ import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; -import androidx.annotation.NonNull; -import androidx.annotation.RequiresApi; -import androidx.appcompat.app.AlertDialog; -import androidx.core.content.ContextCompat; -import androidx.databinding.DataBindingUtil; -import androidx.recyclerview.widget.RecyclerView; - public class DialogUtils { public static Dialog showWaitDialog(Context context, String msg) { @@ -1343,6 +1341,33 @@ public class DialogUtils { dialog.show(); } + public static void showPluggableNeverRemindDialog(Context context, String nameAndPlatform, @NonNull ConfirmListener listener) { + context = checkDialogContext(context); + + final Dialog dialog = new Dialog(context, R.style.GhAlertDialog); + + View contentView = LayoutInflater.from(context).inflate(R.layout.dialog_pluggable_never_remind, null); + + View cancelBtn = contentView.findViewById(R.id.cancel); + View confirmBtn = contentView.findViewById(R.id.confirm); + TextView contentTv = contentView.findViewById(R.id.content); + + contentTv.setText(("助手首页将不再提示《" + nameAndPlatform + "》的所有插件化消息,确定吗?")); + + cancelBtn.setOnClickListener(v -> { + dialog.dismiss(); + }); + + confirmBtn.setOnClickListener(v -> { + listener.onConfirm(); + dialog.dismiss(); + }); + + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setContentView(contentView); + dialog.show(); + } + /** * @param context may be is application context * @return activity context diff --git a/app/src/main/java/com/gh/common/util/HomePluggableHelper.kt b/app/src/main/java/com/gh/common/util/HomePluggableHelper.kt new file mode 100644 index 0000000000..fdb24f135f --- /dev/null +++ b/app/src/main/java/com/gh/common/util/HomePluggableHelper.kt @@ -0,0 +1,47 @@ +package com.gh.common.util + +import com.gh.gamecenter.entity.GameEntity +import com.gh.gamecenter.entity.HomePluggableFilterEntity +import com.gh.gamecenter.room.AppDatabase +import com.halo.assistant.HaloApp + +object HomePluggableHelper { + + private val mHomePluggableFilterDao = AppDatabase.getInstance(HaloApp.getInstance().application).homePluggableFilterDao() + + @JvmStatic + fun setHomePluggableFilterData(gameEntity: GameEntity, isNever: Boolean) { + val apkList = gameEntity.getApk() + if (apkList.isNotEmpty()) { + val apk = apkList.first() + val tag = if (isNever) "never" else apk.version ?: "" + mHomePluggableFilterDao.addData(HomePluggableFilterEntity(pkgName = apk.packageName, tag = tag, active = isNever)) + } + } + + @JvmStatic + fun showHomePluggable(gameEntity: GameEntity): Boolean { + val apkList = gameEntity.getApk() + if (apkList.isNotEmpty()) { + val apk = apkList.first() + val filterData = mHomePluggableFilterDao.getDataByPkgName(apk.packageName) + if (filterData?.active == true) { + val filterTag = filterData.tag + return filterTag != "never" && apk.version != filterTag + } + } + return true + } + + @JvmStatic + fun activationFilterData() { + val filterList = mHomePluggableFilterDao.getDataByActive(false) + + if (filterList != null) { + for (entity in filterList) { + entity.active = true + } + mHomePluggableFilterDao.addData(filterList) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/common/util/SpUtils.kt b/app/src/main/java/com/gh/common/util/SpUtils.kt index da8d44b12e..dc9ce9ecc2 100644 --- a/app/src/main/java/com/gh/common/util/SpUtils.kt +++ b/app/src/main/java/com/gh/common/util/SpUtils.kt @@ -2,6 +2,7 @@ package com.gh.common.util import android.content.Context import android.content.SharedPreferences +import com.google.gson.reflect.TypeToken import com.halo.assistant.HaloApp object SPUtils { @@ -90,7 +91,20 @@ object SPUtils { @JvmStatic fun getStringSet(key: String): Set { - return sp.getStringSet(key, HashSet())?: HashSet() + return sp.getStringSet(key, HashSet()) ?: HashSet() + } + + @JvmStatic + fun setMap(key: String, map: Map) { + val mapJson = GsonUtils.toJson(map) + setString(key, mapJson) + } + + @JvmStatic + fun getMap(key: String): MutableMap { + val mapJson = getString(key) + val type = object : TypeToken>() {}.type + return GsonUtils.gson.fromJson(mapJson, type) ?: mutableMapOf() } @JvmStatic diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index b20f487ae8..a872cc24d9 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -23,6 +23,9 @@ import android.view.View; import android.view.Window; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.lifecycle.ViewModelProviders; + import com.gh.base.AppUncaughtHandler; import com.gh.base.BaseActivity; import com.gh.base.fragment.BaseFragment_ViewPager; @@ -45,6 +48,7 @@ import com.gh.common.util.DialogUtils; import com.gh.common.util.DirectUtils; import com.gh.common.util.DisplayUtils; import com.gh.common.util.EntranceUtils; +import com.gh.common.util.HomePluggableHelper; import com.gh.common.util.LogUtils; import com.gh.common.util.LunchType; import com.gh.common.util.MtaHelper; @@ -116,8 +120,6 @@ import java.util.TimerTask; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; -import androidx.annotation.NonNull; -import androidx.lifecycle.ViewModelProviders; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.schedulers.Schedulers; import okhttp3.MediaType; @@ -258,6 +260,8 @@ public class MainActivity extends BaseActivity { PlatformUtils.getInstance(getApplicationContext()); // 友盟记录启动 PushAgent.getInstance(this).onAppStart(); + + HomePluggableHelper.activationFilterData(); }); diff --git a/app/src/main/java/com/gh/gamecenter/entity/HomePluggableFilterEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/HomePluggableFilterEntity.kt new file mode 100644 index 0000000000..2128083d67 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/entity/HomePluggableFilterEntity.kt @@ -0,0 +1,14 @@ +package com.gh.gamecenter.entity + +import androidx.annotation.Keep +import androidx.room.Entity +import androidx.room.PrimaryKey + +@Keep +@Entity +data class HomePluggableFilterEntity( + @PrimaryKey + val pkgName: String, + val tag: String, // gameVersion or never + var active: Boolean // 是否可用 +) \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/home/HomeViewModel.kt b/app/src/main/java/com/gh/gamecenter/home/HomeViewModel.kt index c08510a93c..6af09b9b93 100644 --- a/app/src/main/java/com/gh/gamecenter/home/HomeViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/home/HomeViewModel.kt @@ -7,10 +7,7 @@ import androidx.collection.ArrayMap import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.MediatorLiveData import androidx.lifecycle.MutableLiveData -import com.gh.common.util.ApkActiveUtils -import com.gh.common.util.GameSubstituteRepositoryHelper -import com.gh.common.util.GameUtils -import com.gh.common.util.RandomUtils +import com.gh.common.util.* import com.gh.download.DownloadManager import com.gh.gamecenter.baselist.LoadStatus import com.gh.gamecenter.entity.* @@ -80,7 +77,10 @@ class HomeViewModel(application: Application) : AndroidViewModel(application) { val list = ArrayList() for (update in updateList) { if (update.isPluggable && update.indexPlugin == "open" && update.isShowPlugin(PluginLocation.only_index)) { - list.add(update.transformGameEntity()) + val game = update.transformGameEntity() + if (HomePluggableHelper.showHomePluggable(game)) { + list.add(game) + } } } for (game in list) { diff --git a/app/src/main/java/com/gh/gamecenter/home/LegacyHomeFragmentAdapterAssistant.kt b/app/src/main/java/com/gh/gamecenter/home/LegacyHomeFragmentAdapterAssistant.kt index b644ef621c..a603f4cd79 100644 --- a/app/src/main/java/com/gh/gamecenter/home/LegacyHomeFragmentAdapterAssistant.kt +++ b/app/src/main/java/com/gh/gamecenter/home/LegacyHomeFragmentAdapterAssistant.kt @@ -32,7 +32,6 @@ import com.gh.gamecenter.game.vertical.GameVerticalSlideViewHolder import com.gh.gamecenter.subject.SubjectActivity import com.halo.assistant.fragment.game.GamePluginAdapter import com.halo.assistant.fragment.game.GamePluginViewHolder -import com.lightgame.utils.Utils import java.util.* // 产品没定义的数据统计会用[首页]作为默认值,不管了 bite me @@ -42,15 +41,10 @@ class LegacyHomeFragmentAdapterAssistant(private var mContext: Context, private var mBasicExposureSource: ExposureSource, private var mMakeItemBackgroundTransparent: Boolean = false, private var mOuterType: OuterType = OuterType.NEW_HOME) { - /** - * 插件化显示状态 - * 0: 收起 - * 1: 展开 - * 2: 收起状态显示两个且底部显示展开按钮 - * 3: 展开且底部显示收起按钮 - * -1: 初始化状态 - */ - private var mPluginDisplayStatus = -1 + + private var mPluginDisplayStatus = PluginDisplayStatus.DEFAULT + + private var mIsManualChangedDisplayStatus = false fun getLegacyItemType(itemData: LegacyHomeItemData): Int { @@ -481,15 +475,15 @@ class LegacyHomeFragmentAdapterAssistant(private var mContext: Context, val pluginList = item.pluginList var adapter = holder.mPluginRv.adapter - if (mPluginDisplayStatus == -1) { + if (mPluginDisplayStatus == PluginDisplayStatus.DEFAULT) { if (MainActivity.isNewFirstLaunch) { if (pluginList!!.size > 2) { - mPluginDisplayStatus = 2 + mPluginDisplayStatus = PluginDisplayStatus.OPEN_TWO_AND_BUTTON } else { - mPluginDisplayStatus = 1 + mPluginDisplayStatus = PluginDisplayStatus.OPEN } } else { - mPluginDisplayStatus = 0 + mPluginDisplayStatus = PluginDisplayStatus.CLOSE } } @@ -503,7 +497,9 @@ class LegacyHomeFragmentAdapterAssistant(private var mContext: Context, item.exposureEventList = exposureList if (adapter == null) { - adapter = GamePluginAdapter(mContext, pluginList) + adapter = GamePluginAdapter(mContext, pluginList, GamePluginAdapter.IUpdateDisplayType { + if (!mIsManualChangedDisplayStatus) mPluginDisplayStatus = it + }) adapter.openList(mPluginDisplayStatus) (holder.mPluginRv.itemAnimator as DefaultItemAnimator).supportsChangeAnimations = false holder.mPluginRv.layoutManager = LinearLayoutManager(mContext) @@ -513,10 +509,10 @@ class LegacyHomeFragmentAdapterAssistant(private var mContext: Context, adapter.checkResetData(pluginList) } - if ((mPluginDisplayStatus == 2 || mPluginDisplayStatus == 3)) { + if ((mPluginDisplayStatus == PluginDisplayStatus.OPEN_AND_BUTTON || mPluginDisplayStatus == PluginDisplayStatus.OPEN_TWO_AND_BUTTON)) { holder.mExtendContainer.visibility = View.VISIBLE holder.mHeadOpen.visibility = View.GONE - if (mPluginDisplayStatus == 2) { + if (mPluginDisplayStatus == PluginDisplayStatus.OPEN_TWO_AND_BUTTON) { holder.mPluginExtend.text = "展开" holder.mPluginExtend.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.home_plugin_open, 0) } else { @@ -526,7 +522,7 @@ class LegacyHomeFragmentAdapterAssistant(private var mContext: Context, } else { holder.mExtendContainer.visibility = View.GONE holder.mHeadOpen.visibility = View.VISIBLE - if (mPluginDisplayStatus == 0) { + if (mPluginDisplayStatus == PluginDisplayStatus.CLOSE) { holder.mHeadOpen.setImageResource(R.drawable.home_plugin_open) } else { holder.mHeadOpen.setImageResource(R.drawable.home_plugin_close) @@ -536,14 +532,15 @@ class LegacyHomeFragmentAdapterAssistant(private var mContext: Context, holder.mHeadTitle.text = String.format(Locale.getDefault(), "你有%d个游戏可以升级插件版", pluginList.size) val expandClick: (View) -> Unit = { if (it.id != R.id.plugin_head || holder.mExtendContainer.visibility == View.GONE) { - if (mPluginDisplayStatus == 0 || mPluginDisplayStatus == 2) { - if (mPluginDisplayStatus == 0) mPluginDisplayStatus = 1 - if (mPluginDisplayStatus == 2) mPluginDisplayStatus = 3 + if (mPluginDisplayStatus == PluginDisplayStatus.CLOSE || mPluginDisplayStatus == PluginDisplayStatus.OPEN_TWO_AND_BUTTON) { + if (mPluginDisplayStatus == PluginDisplayStatus.CLOSE) mPluginDisplayStatus = PluginDisplayStatus.OPEN + if (mPluginDisplayStatus == PluginDisplayStatus.OPEN_TWO_AND_BUTTON) mPluginDisplayStatus = PluginDisplayStatus.OPEN_AND_BUTTON MtaHelper.onEvent("首页_点击", "插件化区域", "收起") } else { - mPluginDisplayStatus = 0 + mPluginDisplayStatus = PluginDisplayStatus.CLOSE MtaHelper.onEvent("首页_点击", "插件化区域", "展开") } + mIsManualChangedDisplayStatus = true mAdapter.notifyItemChanged(holder.adapterPosition) } } @@ -557,4 +554,21 @@ class LegacyHomeFragmentAdapterAssistant(private var mContext: Context, AMWAY("安利墙") } +} + +enum class PluginDisplayStatus { + // 收起 + CLOSE, + + // 展开 + OPEN, + + // 展开且底部显示收起按钮 + OPEN_AND_BUTTON, + + // 收起状态显示两个且底部显示展开按钮 + OPEN_TWO_AND_BUTTON, + + // 初始化状态 + DEFAULT } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/room/AppDatabase.java b/app/src/main/java/com/gh/gamecenter/room/AppDatabase.java index 400472af1d..8b4a63d5cd 100644 --- a/app/src/main/java/com/gh/gamecenter/room/AppDatabase.java +++ b/app/src/main/java/com/gh/gamecenter/room/AppDatabase.java @@ -10,12 +10,14 @@ import androidx.room.migration.Migration; import androidx.sqlite.db.SupportSQLiteDatabase; import com.gh.gamecenter.entity.CommentDraft; +import com.gh.gamecenter.entity.HomePluggableFilterEntity; import com.gh.gamecenter.entity.LoginTokenEntity; import com.gh.gamecenter.entity.SignEntity; import com.gh.gamecenter.entity.UserInfoEntity; import com.gh.gamecenter.qa.entity.AnswerEntity; import com.gh.gamecenter.room.dao.AnswerDao; import com.gh.gamecenter.room.dao.CommentDraftDao; +import com.gh.gamecenter.room.dao.HomePluggableFilterDao; import com.gh.gamecenter.room.dao.SignDao; import com.gh.gamecenter.room.dao.UploadDao; import com.gh.gamecenter.user.LoginTokenDao; @@ -30,7 +32,8 @@ import com.gh.gamecenter.video.upload.UploadEntity; SignEntity.class, AnswerEntity.class, UploadEntity.class, - CommentDraft.class}, version = 14, exportSchema = false) + CommentDraft.class, + HomePluggableFilterEntity.class}, version = 15, exportSchema = false) public abstract class AppDatabase extends RoomDatabase { public abstract AnswerDao answerDao(); @@ -45,6 +48,8 @@ public abstract class AppDatabase extends RoomDatabase { public abstract CommentDraftDao commentDraftDao(); + public abstract HomePluggableFilterDao homePluggableFilterDao(); + private static AppDatabase sInstance; private static final String DATABASE_NAME = "gh-db"; diff --git a/app/src/main/java/com/gh/gamecenter/room/dao/HomePluggableFilterDao.kt b/app/src/main/java/com/gh/gamecenter/room/dao/HomePluggableFilterDao.kt new file mode 100644 index 0000000000..919a05fcc4 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/room/dao/HomePluggableFilterDao.kt @@ -0,0 +1,21 @@ +package com.gh.gamecenter.room.dao + +import androidx.room.* +import com.gh.gamecenter.entity.HomePluggableFilterEntity + +@Dao +interface HomePluggableFilterDao { + + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun addData(entity: HomePluggableFilterEntity) + + @Update(onConflict = OnConflictStrategy.REPLACE) + fun addData(list: List) + + @Query("select * from HomePluggableFilterEntity where active = :active") + fun getDataByActive(active: Boolean): List? + + @Query("select * from HomePluggableFilterEntity where pkgName = :pkgName") + fun getDataByPkgName(pkgName: String?): HomePluggableFilterEntity? + +} \ No newline at end of file diff --git a/app/src/main/java/com/halo/assistant/fragment/game/GamePluggableViewHolder.kt b/app/src/main/java/com/halo/assistant/fragment/game/GamePluggableViewHolder.kt new file mode 100644 index 0000000000..d798576133 --- /dev/null +++ b/app/src/main/java/com/halo/assistant/fragment/game/GamePluggableViewHolder.kt @@ -0,0 +1,28 @@ +package com.halo.assistant.fragment.game + +import android.view.View +import com.gh.base.BaseRecyclerViewHolder +import com.gh.common.view.DrawableView +import com.gh.gamecenter.databinding.GamePluggableItemBinding +import com.gh.gamecenter.entity.GameEntity + +class GamePluggableViewHolder(val binding: GamePluggableItemBinding) : BaseRecyclerViewHolder(binding.root) { + fun initServerType(gameEntity: GameEntity) { + val serverLabel = gameEntity.serverLabel + when { + gameEntity.test != null -> { + binding.gameItemIncluded.gameKaifuType.visibility = View.GONE + binding.gameItemIncluded.gameKaifuType.text = "" + } + serverLabel != null -> { + binding.gameItemIncluded.gameKaifuType.visibility = View.VISIBLE + binding.gameItemIncluded.gameKaifuType.text = serverLabel.value + binding.gameItemIncluded.gameKaifuType.background = DrawableView.getServerDrawable(serverLabel.color) + } + else -> binding.gameItemIncluded.gameKaifuType.visibility = View.GONE + } + + // 由于RecyclerView的复用机制 需要每次测量gameName的宽 + binding.gameItemIncluded.gameName.requestLayout() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/halo/assistant/fragment/game/GamePluginAdapter.java b/app/src/main/java/com/halo/assistant/fragment/game/GamePluginAdapter.java index 5d73c07210..bf513779fc 100644 --- a/app/src/main/java/com/halo/assistant/fragment/game/GamePluginAdapter.java +++ b/app/src/main/java/com/halo/assistant/fragment/game/GamePluginAdapter.java @@ -1,25 +1,32 @@ package com.halo.assistant.fragment.game; import android.content.Context; +import android.view.Gravity; import android.view.View; import android.view.ViewGroup; +import android.widget.LinearLayout; import androidx.recyclerview.widget.RecyclerView; import com.gh.common.util.DataCollectionUtils; +import com.gh.common.util.DialogUtils; import com.gh.common.util.DisplayUtils; import com.gh.common.util.DownloadItemUtils; +import com.gh.common.util.HomePluggableHelper; import com.gh.common.util.MtaHelper; +import com.gh.common.util.PlatformUtils; import com.gh.common.util.StringUtils; import com.gh.gamecenter.GameDetailActivity; import com.gh.gamecenter.R; import com.gh.gamecenter.adapter.viewholder.GameViewHolder; -import com.gh.gamecenter.databinding.GameItemBinding; +import com.gh.gamecenter.databinding.GamePluggableItemBinding; import com.gh.gamecenter.entity.GameEntity; import com.gh.gamecenter.entity.PluginLocation; -import com.gh.gamecenter.game.GameItemViewHolder; +import com.gh.gamecenter.home.PluginDisplayStatus; +import com.gh.gamecenter.packagehelper.PackageRepository; import com.lightgame.adapter.BaseRecyclerAdapter; import com.lightgame.download.DownloadEntity; +import com.lightgame.utils.Utils; import java.util.List; @@ -33,27 +40,30 @@ import java.util.List; public class GamePluginAdapter extends BaseRecyclerAdapter { private List mPluginList; - private int mPluginDisplayStatus = 0; + private PluginDisplayStatus mPluginDisplayStatus = PluginDisplayStatus.CLOSE; - public GamePluginAdapter(Context context, List pluginList) { + private IUpdateDisplayType mUpdateDisplayType; + + public GamePluginAdapter(Context context, List pluginList, IUpdateDisplayType updateDisplayType) { super(context); mPluginList = pluginList; + mUpdateDisplayType = updateDisplayType; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View view = mLayoutInflater.inflate(R.layout.game_item, parent, false); - return new GameItemViewHolder(GameItemBinding.bind(view)); + View view = mLayoutInflater.inflate(R.layout.game_pluggable_item, parent, false); + return new GamePluggableViewHolder(GamePluggableItemBinding.bind(view)); } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { - if (holder instanceof GameItemViewHolder) { - initGameNormalViewHolder((GameItemViewHolder) holder, position); + if (holder instanceof GamePluggableViewHolder) { + initGameNormalViewHolder((GamePluggableViewHolder) holder, position); } } - private void initGameNormalViewHolder(GameItemViewHolder holder, int position) { + private void initGameNormalViewHolder(GamePluggableViewHolder holder, int position) { int paddingTop = DisplayUtils.dip2px(8F); int paddingBottom = DisplayUtils.dip2px(8F); if (position == 0) { @@ -63,15 +73,15 @@ public class GamePluginAdapter extends BaseRecyclerAdapter { paddingBottom = DisplayUtils.dip2px(8F); } - holder.itemView.setPadding( + holder.getBinding().gameItemIncluded.getRoot().setPadding( DisplayUtils.dip2px(16F), paddingTop, DisplayUtils.dip2px(20F), paddingBottom); final GameEntity gameEntity = mPluginList.get(position); holder.initServerType(gameEntity); - GameItemBinding binding = holder.getBinding(); - binding.setGame(gameEntity); - binding.setIsShowPlatform(true); + GamePluggableItemBinding binding = holder.getBinding(); + binding.gameItemIncluded.setGame(gameEntity); + binding.gameItemIncluded.setIsShowPlatform(true); binding.executePendingBindings(); holder.itemView.setOnClickListener(v -> { MtaHelper.onEvent("首页_新", "点击", "插件化" + (position + 1) + "_" + gameEntity.getName()); @@ -81,19 +91,41 @@ public class GamePluginAdapter extends BaseRecyclerAdapter { StringUtils.buildString("(游戏-专题:插件化-列表[", String.valueOf(1), "])"), gameEntity.getExposureEvent()); }); - DownloadItemUtils.setOnClickListener(mContext, binding.downloadBtn, gameEntity, 1, + DownloadItemUtils.setOnClickListener(mContext, binding.gameItemIncluded.downloadBtn, gameEntity, 1, GamePluginAdapter.this, StringUtils.buildString("(游戏-专题:", "插件化", "-列表[", String.valueOf(1), "])"), StringUtils.buildString("游戏-专题-", "插件化", ":", gameEntity.getName()), gameEntity.getExposureEvent(), - () -> MtaHelper.onEvent("首页_新", "点击", "插件化" + (position + 1) + "_" + gameEntity.getName() + "_" + binding.downloadBtn.getText().toString())); - DownloadItemUtils.updateItem(mContext, gameEntity, new GameViewHolder(binding), !gameEntity.isPluggable(), PluginLocation.only_index, false, null); + () -> MtaHelper.onEvent("首页_新", "点击", "插件化" + (position + 1) + "_" + gameEntity.getName() + "_" + binding.gameItemIncluded.downloadBtn.getText().toString())); + DownloadItemUtils.updateItem(mContext, gameEntity, new GameViewHolder(holder.getBinding().gameItemIncluded), !gameEntity.isPluggable(), PluginLocation.only_index, false, null); + + holder.getBinding().neverRemind.setOnClickListener(v -> DialogUtils.showPluggableNeverRemindDialog(mContext, + String.format("%s - %s", + gameEntity.getName(), + PlatformUtils.getInstance(mContext).getPlatformName(gameEntity.getApk().get(0).getPlatform())), + () -> { + Utils.toast(mContext, "不再提醒设置成功"); + + HomePluggableHelper.setHomePluggableFilterData(gameEntity, true); + + PackageRepository.INSTANCE.getGameUpdateLiveData().postValue(PackageRepository.INSTANCE.getGameUpdate()); + + mUpdateDisplayType.update(PluginDisplayStatus.DEFAULT); + })); + + ViewGroup.LayoutParams layoutParams = holder.getBinding().gameItemIncluded.downloadBtn.getLayoutParams(); + if (layoutParams instanceof LinearLayout.LayoutParams) { + ((LinearLayout.LayoutParams) layoutParams).gravity = Gravity.TOP; + ((LinearLayout.LayoutParams) layoutParams).topMargin = DisplayUtils.dip2px(4); + } + + HomePluggableHelper.setHomePluggableFilterData(gameEntity, false); } @Override public int getItemCount() { - if (mPluginDisplayStatus == 1 || mPluginDisplayStatus == 3) { + if (mPluginDisplayStatus == PluginDisplayStatus.OPEN || mPluginDisplayStatus == PluginDisplayStatus.OPEN_AND_BUTTON) { return mPluginList.size(); - } else if (mPluginDisplayStatus == 2) { + } else if (mPluginDisplayStatus == PluginDisplayStatus.OPEN_TWO_AND_BUTTON) { return mPluginList.size() > 2 ? 2 : mPluginList.size(); } else { return 0; @@ -116,7 +148,7 @@ public class GamePluginAdapter extends BaseRecyclerAdapter { } } - public void openList(int pluginDisplayStatus) { + public void openList(PluginDisplayStatus pluginDisplayStatus) { if (mPluginDisplayStatus != pluginDisplayStatus) { mPluginDisplayStatus = pluginDisplayStatus; notifyDataSetChanged(); @@ -125,4 +157,7 @@ public class GamePluginAdapter extends BaseRecyclerAdapter { } } + public interface IUpdateDisplayType { + void update(PluginDisplayStatus status); + } } diff --git a/app/src/main/res/layout/dialog_pluggable_never_remind.xml b/app/src/main/res/layout/dialog_pluggable_never_remind.xml new file mode 100644 index 0000000000..bd2385910e --- /dev/null +++ b/app/src/main/res/layout/dialog_pluggable_never_remind.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/game_pluggable_item.xml b/app/src/main/res/layout/game_pluggable_item.xml new file mode 100644 index 0000000000..c67f891259 --- /dev/null +++ b/app/src/main/res/layout/game_pluggable_item.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file