From a91cee40babd8630717cde6f9869c0701503023b Mon Sep 17 00:00:00 2001 From: chenjuntao Date: Fri, 28 Sep 2018 10:13:42 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E5=BC=80=E6=9C=8D=E8=A1=A8=E4=BC=98=E5=8C=96=E9=9C=80=E6=B1=82?= =?UTF-8?q?=20https://gitlab.ghzhushou.com/pm/halo-app-issues/issues/348?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gh/gamecenter/SplashScreenActivity.java | 1 + .../com/gh/gamecenter/entity/GameEntity.kt | 7 + .../gh/gamecenter/kaifu/KaiFuVpAdapter.java | 147 ++++++++++-------- .../gh/gamecenter/kaifu/KaiFuVpFragment.java | 28 ++-- .../kaifu/KaiFuWrapperFragment.java | 8 +- 5 files changed, 115 insertions(+), 76 deletions(-) diff --git a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java index 5f7716b21a..9685db26f9 100644 --- a/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SplashScreenActivity.java @@ -172,6 +172,7 @@ public class SplashScreenActivity extends BaseActivity { GidHelper.getInstance().registerDevice(new GidCallback() { @Override public void onSuccess(String s) { + Utils.log("Gid", s); Utils.toast(SplashScreenActivity.this, "光环ID -> " + s); } diff --git a/app/src/main/java/com/gh/gamecenter/entity/GameEntity.kt b/app/src/main/java/com/gh/gamecenter/entity/GameEntity.kt index ffe2a15d55..ce70e24902 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/GameEntity.kt +++ b/app/src/main/java/com/gh/gamecenter/entity/GameEntity.kt @@ -89,6 +89,12 @@ class GameEntity : Parcelable { @SerializedName("download_complete_type") var downloadCompleteType: String? = "" + // 用于开服表标记是否为置顶项目 + @SerializedName("is_fixed_top") + var fixedTop: Boolean? = false + + var fixedTopHint: Boolean? = false + fun getTag(): ArrayList { if (tag == null) tag = ArrayList() if (!Config.isShowPlugin(id)) return ArrayList() @@ -171,6 +177,7 @@ class GameEntity : Parcelable { gameEntity.platform = platform gameEntity.downloadType = downloadType gameEntity.downloadCompleteType = downloadCompleteType + gameEntity.fixedTop = fixedTop return gameEntity } diff --git a/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpAdapter.java b/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpAdapter.java index ac63a86688..85f46f7b27 100644 --- a/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpAdapter.java @@ -49,7 +49,6 @@ import retrofit2.HttpException; /** * Created by khy on 18/08/17. */ - public class KaiFuVpAdapter extends BaseRecyclerAdapter { private OnRequestCallBackListener mOnCallBackListener; @@ -67,6 +66,10 @@ public class KaiFuVpAdapter extends BaseRecyclerAdapter { private boolean mIsNetworkError; private boolean mIsLoaded; + private static final int VIEW_TYPE_TOP = 0; + private static final int VIEW_TYPE_ITEM = 1; + private static final int VIEW_TYPE_FOOTER = 2; + public KaiFuVpAdapter(Context context, OnRequestCallBackListener onCallBackListener, String gameId, String day, String entrance) { super(context); @@ -89,8 +92,6 @@ public class KaiFuVpAdapter extends BaseRecyclerAdapter { .subscribe(new Response>() { @Override public void onResponse(List response) { - super.onResponse(response); - GameManager manager = new GameManager(mContext); for (int i = 0; i < response.size(); i++) { // 初始化游戏状态 @@ -98,6 +99,29 @@ public class KaiFuVpAdapter extends BaseRecyclerAdapter { entity.setEntryMap(DownloadManager.getInstance(mContext).getEntryMap(entity.getName())); manager.addOrUpdate(entity); ApkActiveUtils.filterHideApk(entity); // 过滤隐藏apk + + // 设置置顶部分 + if (i == 0) { + // 列表顶部,若有设置置顶应用就增加置顶头部 + if (mEntityList.size() == 0 && entity.getFixedTop()) { + GameEntity fixedTopItem = new GameEntity(); + fixedTopItem.setFixedTopHint(true); + fixedTopItem.setFixedTop(true); + response.add(i, fixedTopItem); + i++; + } + } + + // 归零置顶游戏的开服时间避免找当前开服游戏时找到 + if (entity.getFixedTop()) { + if (entity.getServerEntity() == null) { + KaiFuCalendarEntity emptyCalendarEntity = new KaiFuCalendarEntity(); + emptyCalendarEntity.setTime(0); + entity.setServerEntity(emptyCalendarEntity); + } + entity.getServerEntity().setTime(0); + } + // 设置时间断点 if (i == 0) { if (mEntityList.size() == 0) { // 列表page == 0 && position=0 默认添加时间断点 @@ -137,7 +161,6 @@ public class KaiFuVpAdapter extends BaseRecyclerAdapter { i++; } } - } mEntityList.addAll(response); @@ -197,23 +220,22 @@ public class KaiFuVpAdapter extends BaseRecyclerAdapter { @Override public int getItemViewType(int position) { - if (mEntityList.size() == position) { - return 0; + return VIEW_TYPE_FOOTER; } GameEntity gameEntity = mEntityList.get(position); - if (gameEntity.getKaifuTimeHint() != null && gameEntity.getKaifuTimeHint() != 0) { - return 1; + if ((gameEntity.getKaifuTimeHint() != null && gameEntity.getKaifuTimeHint() != 0) || gameEntity.getFixedTopHint()) { + return VIEW_TYPE_TOP; } - return 2; + return VIEW_TYPE_ITEM; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - if (viewType == 0) { + if (viewType == VIEW_TYPE_FOOTER) { return new FooterViewHolder(mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false)); - } else if (viewType == 1) { + } else if (viewType == VIEW_TYPE_TOP) { return new KaiFuTimeViewHolder(mLayoutInflater.inflate(R.layout.kaifu_item_time, parent, false)); } else { return new GameTestViewHolder(mLayoutInflater.inflate(R.layout.game_test_item, parent, false)); @@ -222,22 +244,24 @@ public class KaiFuVpAdapter extends BaseRecyclerAdapter { @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { - if (holder instanceof GameTestViewHolder) { GameEntity gameEntity = mEntityList.get(position); GameTestViewHolder viewHolder = (GameTestViewHolder) holder; initGameTestViewHolder(gameEntity, viewHolder); } else if (holder instanceof KaiFuTimeViewHolder) { GameEntity gameEntity = mEntityList.get(position); - SimpleDateFormat dateFm = new SimpleDateFormat("yyyy-MM-dd (EEEE) HH:mm", Locale.CHINA); - ((KaiFuTimeViewHolder) holder).time.setText(dateFm.format(gameEntity.getKaifuTimeHint() * 1000)); + if (gameEntity.getFixedTopHint()) { + ((KaiFuTimeViewHolder) holder).time.setText("热门开服"); + } else { + SimpleDateFormat dateFm = new SimpleDateFormat("yyyy-MM-dd (EEEE) HH:mm", Locale.CHINA); + ((KaiFuTimeViewHolder) holder).time.setText(dateFm.format(gameEntity.getKaifuTimeHint() * 1000)); + } } else if (holder instanceof FooterViewHolder) { FooterViewHolder viewHolder = (FooterViewHolder) holder; initFooterViewHolder(viewHolder); } } - @Override public int getItemCount() { if (mEntityList.size() == 0) { @@ -250,7 +274,7 @@ public class KaiFuVpAdapter extends BaseRecyclerAdapter { viewHolder.gameName.setText(gameEntity.getName()); ImageUtils.display(viewHolder.gameThumb, gameEntity.getIcon()); - if (TextUtils.isEmpty(gameEntity.getServerEntity().getRemark())) { + if (gameEntity.getServerEntity() == null || TextUtils.isEmpty(gameEntity.getServerEntity().getRemark())) { viewHolder.gameTestTime.setVisibility(View.GONE); } else { viewHolder.gameTestTime.setVisibility(View.VISIBLE); @@ -258,25 +282,31 @@ public class KaiFuVpAdapter extends BaseRecyclerAdapter { viewHolder.gameTestTime.setBackgroundColor(ContextCompat.getColor(mContext, R.color.tag_orange)); } - - String type = gameEntity.getServerEntity().getType(); - if (TextUtils.isEmpty(type)) { - viewHolder.gameTestType.setVisibility(View.GONE); - } else if (("不删档内测".equals(type) || "删档内测".equals(type) || "公测".equals(type)) - && TextUtils.isEmpty(gameEntity.getServerEntity().getNote())) { - if (!TextUtils.isEmpty(gameEntity.getServerEntity().getNote())) { - viewHolder.gameTestType.setVisibility(View.VISIBLE); - if ("公测".equals(type)) { - KaiFuUtils.setKaiFuType(viewHolder.gameTestType, gameEntity.getServerEntity().getType() + ":" + gameEntity.getServerEntity().getNote()); + if (gameEntity.getFixedTop()) { + String tag = "today".equals(mDay) ? "今日开服" : "明日开服"; + viewHolder.gameTestType.setVisibility(View.VISIBLE); + viewHolder.gameTestType.setText(tag); + viewHolder.gameTestType.setBackgroundColor(ContextCompat.getColor(viewHolder.gameTestType.getContext(), R.color.tag_yellow)); + } else { + String type = gameEntity.getServerEntity().getType(); + if (TextUtils.isEmpty(type)) { + viewHolder.gameTestType.setVisibility(View.GONE); + } else if (("不删档内测".equals(type) || "删档内测".equals(type) || "公测".equals(type)) + && TextUtils.isEmpty(gameEntity.getServerEntity().getNote())) { + if (!TextUtils.isEmpty(gameEntity.getServerEntity().getNote())) { + viewHolder.gameTestType.setVisibility(View.VISIBLE); + if ("公测".equals(type)) { + KaiFuUtils.setKaiFuType(viewHolder.gameTestType, gameEntity.getServerEntity().getType() + ":" + gameEntity.getServerEntity().getNote()); + } else { + KaiFuUtils.setKaiFuType(viewHolder.gameTestType, gameEntity.getServerEntity().getNote()); + } } else { - KaiFuUtils.setKaiFuType(viewHolder.gameTestType, gameEntity.getServerEntity().getNote()); + viewHolder.gameTestType.setVisibility(View.GONE); } } else { - viewHolder.gameTestType.setVisibility(View.GONE); + KaiFuUtils.setKaiFuType(viewHolder.gameTestType, gameEntity.getServerEntity().getNote()); + viewHolder.gameTestType.setVisibility(View.VISIBLE); } - } else { - KaiFuUtils.setKaiFuType(viewHolder.gameTestType, gameEntity.getServerEntity().getNote()); - viewHolder.gameTestType.setVisibility(View.VISIBLE); } if (gameEntity.getApk() == null || gameEntity.getApk().isEmpty()) { @@ -292,12 +322,13 @@ public class KaiFuVpAdapter extends BaseRecyclerAdapter { DownloadItemUtils.updateItem(mContext, gameEntity, viewHolder, true); - viewHolder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - showSkipDialog(gameEntity, viewHolder.getAdapterPosition() + 1); - } - }); + if (gameEntity.getFixedTop()) { + viewHolder.itemView.setOnClickListener(v -> + GameDetailActivity.startGameDetailActivity(mContext, gameEntity, + StringUtils.buildString(entrance, "+(开服表[", String.valueOf(viewHolder.getAdapterPosition() + 1), "])"))); + } else { + viewHolder.itemView.setOnClickListener(v -> showSkipDialog(gameEntity, viewHolder.getAdapterPosition() + 1)); + } } private void showSkipDialog(final GameEntity gameEntity, final int position) { @@ -331,22 +362,19 @@ public class KaiFuVpAdapter extends BaseRecyclerAdapter { 0, DisplayUtils.dip2px(mContext, 12)); container.addView(skipTv); - skipTv.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - dialog.cancel(); - switch (skipTv.getText().toString()) { - case "只看这个游戏": - EventBus.getDefault().post(new EBKaiFuReset(KaiFuWrapperFragment.SINGLE_GAME_KAIFU, gameEntity.getId())); - break; - case "进入游戏详情": - GameDetailActivity.startGameDetailActivity(mContext, gameEntity, - StringUtils.buildString(entrance, "+(开服表[", String.valueOf(position), "])")); - break; - case "返回所有游戏": - EventBus.getDefault().post(new EBKaiFuReset(KaiFuWrapperFragment.ALL_GAME_KAIFU, gameEntity.getId())); - break; - } + skipTv.setOnClickListener(v -> { + dialog.cancel(); + switch (skipTv.getText().toString()) { + case "只看这个游戏": + EventBus.getDefault().post(new EBKaiFuReset(KaiFuWrapperFragment.SINGLE_GAME_KAIFU, gameEntity.getId())); + break; + case "进入游戏详情": + GameDetailActivity.startGameDetailActivity(mContext, gameEntity, + StringUtils.buildString(entrance, "+(开服表[", String.valueOf(position), "])")); + break; + case "返回所有游戏": + EventBus.getDefault().post(new EBKaiFuReset(KaiFuWrapperFragment.ALL_GAME_KAIFU, gameEntity.getId())); + break; } }); } @@ -359,14 +387,11 @@ public class KaiFuVpAdapter extends BaseRecyclerAdapter { private void initFooterViewHolder(FooterViewHolder viewHolder) { viewHolder.initFooterViewHolder(!mIsLoaded, mIsNetworkError, mIsRemove, R.string.ask_loadover_hint); - viewHolder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (mIsNetworkError) { - mIsNetworkError = false; - notifyItemChanged(getItemCount() - 1); - addList(); - } + viewHolder.itemView.setOnClickListener(v -> { + if (mIsNetworkError) { + mIsNetworkError = false; + notifyItemChanged(getItemCount() - 1); + addList(); } }); } diff --git a/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpFragment.java b/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpFragment.java index ac9897e5a9..1af34612e1 100644 --- a/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpFragment.java +++ b/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpFragment.java @@ -44,7 +44,6 @@ import butterknife.OnClick; /** * Created by khy on 18/08/17. */ - public class KaiFuVpFragment extends BaseFragment { @BindView(R.id.kaifu_rv) @@ -105,7 +104,6 @@ public class KaiFuVpFragment extends BaseFragment { mGameId = ""; } - mLlparams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, DisplayUtils.dip2px(getContext(), 40)); @@ -141,17 +139,23 @@ public class KaiFuVpFragment extends BaseFragment { // 悬挂的文案 GameEntity timeGameEntity = dataList.get(position); - Long timeHint = timeGameEntity.getKaifuTimeHint(); - SimpleDateFormat dateFm = new SimpleDateFormat("yyyy-MM-dd (EEEE) HH:mm", Locale.CHINA); - if (timeHint == null || timeHint == 0) { - KaiFuCalendarEntity serverEntity = timeGameEntity.getServerEntity(); - if (serverEntity != null) { - mKaifuItemTimeTv.setText(dateFm.format(serverEntity.getTime() * 1000)); - mKaifuItemTimeTv.setTag(serverEntity.getTime()); - } + boolean fixedTopHint = timeGameEntity.getFixedTop(); + + if (fixedTopHint) { + mKaifuItemTimeTv.setText("热门开服"); } else { - mKaifuItemTimeTv.setText(dateFm.format(timeHint * 1000)); - mKaifuItemTimeTv.setTag(timeHint); + Long timeHint = timeGameEntity.getKaifuTimeHint(); + SimpleDateFormat dateFm = new SimpleDateFormat("yyyy-MM-dd (EEEE) HH:mm", Locale.CHINA); + if (timeHint == null || timeHint == 0) { + KaiFuCalendarEntity serverEntity = timeGameEntity.getServerEntity(); + if (serverEntity != null) { + mKaifuItemTimeTv.setText(dateFm.format(serverEntity.getTime() * 1000)); + mKaifuItemTimeTv.setTag(serverEntity.getTime()); + } + } else { + mKaifuItemTimeTv.setText(dateFm.format(timeHint * 1000)); + mKaifuItemTimeTv.setTag(timeHint); + } } // 悬挂界面移动 diff --git a/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuWrapperFragment.java b/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuWrapperFragment.java index 0443a88e71..f4b6568662 100644 --- a/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuWrapperFragment.java +++ b/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuWrapperFragment.java @@ -60,7 +60,6 @@ public class KaiFuWrapperFragment extends NormalFragment { private Map mKaiFuHintMap = new HashMap<>(); @Override - protected int getLayoutId() { return R.layout.fragment_kaifu_wrapper; } @@ -89,12 +88,15 @@ public class KaiFuWrapperFragment extends NormalFragment { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); - FragmentTransaction fragmentTransaction = getChildFragmentManager().beginTransaction(); - mKaiFuFragment = new KaiFuFragment(); + Bundle args = new Bundle(); SimpleDateFormat format = new SimpleDateFormat("HH", Locale.CHINA); args.putInt(KEY_INDEX_PAGE, Integer.valueOf(format.format(new Date(System.currentTimeMillis()))) >= 18 ? 1 : -1); + + mKaiFuFragment = new KaiFuFragment(); mKaiFuFragment.setArguments(args); + + FragmentTransaction fragmentTransaction = getChildFragmentManager().beginTransaction(); fragmentTransaction.add(R.id.layout_fragment_content, mKaiFuFragment); fragmentTransaction.commit(); From e6b6e00bf22fc4d4dce1a09da58a8a104168fe85 Mon Sep 17 00:00:00 2001 From: chenjuntao Date: Fri, 28 Sep 2018 16:22:42 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=8E=A5=E4=B8=8A=E4=BA=86=E5=90=8E?= =?UTF-8?q?=E5=8F=B0=E7=9A=84=E5=94=AF=E4=B8=80=20ID=20=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libraries/gid/build.gradle | 2 +- libraries/gid/gid.aar | Bin 13480 -> 0 bytes libraries/gid/gid_1.0_beta.aar | Bin 0 -> 13619 bytes 3 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 libraries/gid/gid.aar create mode 100644 libraries/gid/gid_1.0_beta.aar diff --git a/libraries/gid/build.gradle b/libraries/gid/build.gradle index 5c6d9ec871..a78a9e6e0b 100644 --- a/libraries/gid/build.gradle +++ b/libraries/gid/build.gradle @@ -1,2 +1,2 @@ configurations.maybeCreate("default") -artifacts.add("default", file('gid.aar')) \ No newline at end of file +artifacts.add("default", file('gid_1.0_beta.aar')) \ No newline at end of file diff --git a/libraries/gid/gid.aar b/libraries/gid/gid.aar deleted file mode 100644 index a8183b904333928b67e0c9335996299d4d26a958..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13480 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 diff --git a/libraries/gid/gid_1.0_beta.aar b/libraries/gid/gid_1.0_beta.aar new file mode 100644 index 0000000000000000000000000000000000000000..67e821894f4df61950965c8584f3c14f9a1fc057 GIT binary patch literal 13619 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