diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6196cfb9ec..0785cba25d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -160,9 +160,6 @@ - @@ -217,6 +214,9 @@ android:name = "com.gh.gamecenter.UserInfoEditActivity" android:screenOrientation = "portrait" android:windowSoftInputMode = "stateHidden" /> + diff --git a/app/src/main/assets/LocList.txt b/app/src/main/assets/LocList.txt index dbab2e436d..72aa0abc1c 100644 --- a/app/src/main/assets/LocList.txt +++ b/app/src/main/assets/LocList.txt @@ -1,15 +1,11 @@ [ - - { - "name": "国内" - }, + {"name":"国内"}, { "name": "安徽", "City": [ "安庆", "蚌埠", "亳州", - "巢湖", "池州", "滁州", "阜阳", @@ -40,22 +36,22 @@ { "name": "北京", "City": [ - "昌平", - "朝阳", - "大兴", - "东城", - "房山", - "丰台", - "海淀", - "怀柔", - "门头沟", - "密云", - "平台", - "石景山", - "顺义", - "通州", - "西城", - "延庆" + "昌平区", + "朝阳区", + "大兴区", + "东城区", + "房山区", + "丰台区", + "海淀区", + "怀柔区", + "门头沟区", + "密云县", + "平谷区", + "石景山区", + "顺义区", + "通州区", + "西城区", + "延庆县" ] }, { @@ -76,9 +72,8 @@ "江北", "江津", "九龙坡", - "开县", + "开州", "梁平", - "两江新区", "南岸", "南川", "彭水", @@ -87,10 +82,8 @@ "荣昌", "沙坪坝", "石柱", - "双桥", - "潼南", "铜梁", - "万盛", + "潼南", "万州", "巫山", "巫溪", @@ -151,13 +144,13 @@ "茂名", "梅州", "清远", - "韶关", "汕头", "汕尾", + "韶关", "深圳", "阳江", - "湛江", "云浮", + "湛江", "肇庆", "中山", "珠海" @@ -215,8 +208,8 @@ "三沙", "三亚", "屯昌", - "文昌", "万宁", + "文昌", "五指山" ] }, @@ -226,12 +219,14 @@ "保定", "沧州", "承德", + "定州", "邯郸", "衡水", "廊坊", "秦皇岛", "石家庄", "唐山", + "辛集", "邢台", "张家口" ] @@ -255,8 +250,8 @@ "信阳", "许昌", "郑州", - "驻马店", - "周口" + "周口", + "驻马店" ] }, { @@ -270,8 +265,8 @@ "鸡西", "佳木斯", "牡丹江", - "齐齐哈尔", "七台河", + "齐齐哈尔", "双鸭山", "绥化", "伊春" @@ -280,8 +275,8 @@ { "name": "湖北", "City": [ - "恩施", "鄂州", + "恩施", "黄冈", "黄石", "荆门", @@ -292,10 +287,10 @@ "随州", "天门", "武汉", - "孝感", - "咸宁", "仙桃", - "襄阳", + "咸宁", + "襄樊", + "孝感", "宜昌" ] }, @@ -340,8 +335,8 @@ "连云港", "南京", "南通", - "宿迁", "苏州", + "宿迁", "泰州", "无锡", "徐州", @@ -398,8 +393,8 @@ "通辽", "乌海", "乌兰察布", - "兴宁", - "锡林郭勒" + "锡林郭勒", + "兴宁" ] }, { @@ -429,19 +424,19 @@ "name": "山东", "City": [ "滨州", - "东营", "德州", + "东营", "菏泽", "济南", "济宁", "莱芜", - "临沂", "聊城", + "临沂", "青岛", "日照", "泰安", - "潍坊", "威海", + "潍坊", "烟台", "枣庄", "淄博" @@ -490,14 +485,12 @@ "嘉定", "金山", "静安", - "卢湾", "闵行", "浦东新区", "普陀", "青浦", "松江", "徐汇", - "闸北", "杨浦" ] }, @@ -509,9 +502,9 @@ "成都", "达州", "德阳", + "甘孜", "广安", "广元", - "甘孜", "乐山", "凉山", "泸州", @@ -520,11 +513,11 @@ "南充", "内江", "攀枝花", - "雅安", "遂宁", + "雅安", "宜宾", - "自贡", - "资阳" + "资阳", + "自贡" ] }, { @@ -546,8 +539,8 @@ "台东县", "台南市", "台中市", - "新竹市", "新北市", + "新竹市", "新竹县", "宜兰县", "云林县", @@ -561,12 +554,12 @@ "北辰", "滨海新区", "东丽", + "和平", "河北", "河东", - "和平", "河西", "红桥", - "蓟县", + "蓟州", "津南", "静海", "南开", @@ -606,8 +599,8 @@ "湾仔区", "西贡区", "油尖旺区", - "中西区", - "元朗区" + "元朗区", + "中西区" ] }, { @@ -626,11 +619,12 @@ "克孜勒苏", "石河子", "塔城", - "吐鲁番", + "铁门关", "图木舒克", + "吐鲁番", + "乌鲁木齐", "五家渠", - "伊犁", - "乌鲁木齐" + "伊犁" ] }, { @@ -655,7 +649,7 @@ ] }, { - "name": "浙江", + "name": "浙江", "City": [ "杭州", "湖州", @@ -670,18 +664,11 @@ "舟山" ] }, + { "name": "国外" }, - { - "name": "安道尔" - }, - { - "name": "奥地利" - }, - { - "name": "澳大利亚" - }, + { "name": "阿尔巴尼亚" }, @@ -689,26 +676,17 @@ "name": "阿尔及利亚" }, { - "name": "爱尔兰" - }, - { - "name": "爱沙尼亚" - }, - { - "name": "安哥拉" + "name": "阿富汗" }, { "name": "阿根廷" }, { - "name": "埃及" + "name": "阿拉伯联合酋长国" }, { "name": "阿鲁巴" }, - { - "name": "阿拉伯联合酋长国" - }, { "name": "阿曼" }, @@ -716,98 +694,158 @@ "name": "阿塞拜疆" }, { - "name": "埃塞尔比亚" + "name": "埃及" }, { - "name": "安提瓜岛和巴布达" + "name": "埃塞俄比亚" }, { - "name": "巴巴多斯岛" + "name": "爱尔兰" + }, + { + "name": "爱沙尼亚" + }, + { + "name": "安道尔" + }, + { + "name": "安哥拉" + }, + { + "name": "安圭拉" + }, + { + "name": "安提瓜和巴布达" + }, + { + "name": "澳大利亚" + }, + { + "name": "奥地利" + }, + { + "name": "巴巴多斯" }, { "name": "巴布亚新几内亚" }, - { - "name": "博茨瓦纳" - }, - { - "name": "冰岛" - }, - { - "name": "不丹" - }, - { - "name": "波多黎各" - }, - { - "name": "波黑" - }, { "name": "巴哈马" }, - { - "name": "保加利亚" - }, { "name": "巴基斯坦" }, + { + "name": "巴勒斯坦" + }, { "name": "巴林" }, - { - "name": "波兰" - }, - { - "name": "布隆迪" - }, - { - "name": "比利时" - }, - { - "name": "玻利维亚" - }, - { - "name": "白俄罗斯" - }, - { - "name": "百慕大" - }, - { - "name": "北马里亚纳群岛" - }, - { - "name": "贝宁" - }, { "name": "巴拿马" }, { "name": "巴西" }, + { + "name": "白俄罗斯" + }, + { + "name": "百慕大" + }, + { + "name": "保加利亚" + }, + { + "name": "北马里亚纳群岛" + }, + { + "name": "贝宁" + }, + { + "name": "比利时" + }, + { + "name": "冰岛" + }, + { + "name": "波多黎各" + }, + { + "name": "波黑" + }, + { + "name": "波兰" + }, + { + "name": "玻利维亚" + }, + { + "name": "博茨瓦纳" + }, + { + "name": "伯利兹" + }, + { + "name": "不丹" + }, + { + "name": "布基纳法索" + }, + { + "name": "布隆迪" + }, { "name": "朝鲜" }, { - "name": "德国" + "name": "赤道几内亚" }, { "name": "丹麦" }, + { + "name": "德国" + }, + { + "name": "东帝汶" + }, + { + "name": "多哥" + }, { "name": "多米尼加共和国" }, { - "name": "厄瓜多尔" + "name": "多米尼克" }, { "name": "俄罗斯" }, + { + "name": "厄瓜多尔" + }, { "name": "厄立特里亚" }, { "name": "法国" }, + { + "name": "法罗群岛" + }, + { + "name": "法属圭亚那" + }, + { + "name": "法属波利尼西亚" + }, + { + "name": "梵蒂冈" + }, + { + "name": "菲律宾" + }, { "name": "斐济" }, @@ -815,19 +853,16 @@ "name": "芬兰" }, { - "name": "菲律宾" + "name": "佛得角" }, { - "name": "古巴" + "name": "福克兰群岛" }, { "name": "冈比亚" }, { - "name": "关岛" - }, - { - "name": "格恩西岛" + "name": "刚果共和国" }, { "name": "刚果民主共和国" @@ -835,6 +870,12 @@ { "name": "哥伦比亚" }, + { + "name": "哥斯达黎加" + }, + { + "name": "格恩西岛" + }, { "name": "格陵兰" }, @@ -842,14 +883,26 @@ "name": "格林纳达" }, { - "name": "哥斯达黎加" + "name": "格鲁吉亚" + }, + { + "name": "古巴" + }, + { + "name": "瓜德罗普" + }, + { + "name": "关岛" + }, + { + "name": "圭亚那" + }, + { + "name": "哈萨克斯坦" }, { "name": "海地" }, - { - "name": "洪都拉斯" - }, { "name": "韩国" }, @@ -857,10 +910,16 @@ "name": "荷兰" }, { - "name": "黑山共和国" + "name": "荷属安的列斯" }, { - "name": "哈萨克斯坦" + "name": "黑山" + }, + { + "name": "洪都拉斯" + }, + { + "name": "基里巴斯" }, { "name": "吉布提" @@ -869,10 +928,10 @@ "name": "吉尔吉斯斯坦" }, { - "name": "捷克共和国" + "name": "几内亚" }, { - "name": "基里巴斯" + "name": "几内亚比绍" }, { "name": "加纳" @@ -880,35 +939,68 @@ { "name": "加拿大" }, + { + "name": "加蓬" + }, { "name": "柬埔寨" }, { - "name": "克罗地亚" + "name": "捷克" + }, + { + "name": "津巴布韦" }, { "name": "喀麦隆" }, + { + "name": "卡塔尔" + }, { "name": "开曼群岛" }, { - "name": "肯尼亚" + "name": "科摩罗" + }, + { + "name": "科特迪瓦" }, { "name": "科威特" }, { - "name": "利比里亚" + "name": "克罗地亚" + }, + { + "name": "肯尼亚" + }, + { + "name": "库克群岛" + }, + { + "name": "拉脱维亚" + }, + { + "name": "莱索托" + }, + { + "name": "老挝" }, { "name": "黎巴嫩" }, + { + "name": "利比里亚" + }, { "name": "利比亚" }, { - "name": "罗马尼亚" + "name": "立陶宛" + }, + { + "name": "列支敦士登" }, { "name": "留尼旺岛" @@ -916,26 +1008,11 @@ { "name": "卢森堡" }, - { - "name": "莱索托" - }, - { - "name": "拉脱维亚" - }, { "name": "卢旺达" }, { - "name": "老挝" - }, - { - "name": "列支敦士登" - }, - { - "name": "立陶宛" - }, - { - "name": "缅甸" + "name": "罗马尼亚" }, { "name": "马达加斯加" @@ -944,28 +1021,7 @@ "name": "马尔代夫" }, { - "name": "摩尔多瓦" - }, - { - "name": "美国" - }, - { - "name": "蒙古" - }, - { - "name": "孟加拉" - }, - { - "name": "秘鲁" - }, - { - "name": "摩洛哥" - }, - { - "name": "毛里求斯" - }, - { - "name": "毛里塔尼亚" + "name": "马耳他" }, { "name": "马拉维" @@ -974,35 +1030,95 @@ "name": "马来西亚" }, { - "name": "摩纳哥" + "name": "马里" }, { "name": "马其顿" }, { - "name": "莫桑比克" + "name": "马绍尔群岛" }, { - "name": "马绍尔群岛" + "name": "马提尼克岛" + }, + { + "name": "马约特岛" + }, + { + "name": "毛里求斯" + }, + { + "name": "毛里塔尼亚" + }, + { + "name": "美国" + }, + { + "name": "美属萨摩亚" + }, + { + "name": "美属维尔京群岛" + }, + { + "name": "蒙古" + }, + { + "name": "蒙特塞拉特" + }, + { + "name": "孟加拉国" + }, + { + "name": "密克罗尼西亚联邦" + }, + { + "name": "秘鲁" + }, + { + "name": "缅甸" + }, + { + "name": "摩尔多瓦" + }, + { + "name": "摩洛哥" + }, + { + "name": "摩纳哥" + }, + { + "name": "莫桑比克" }, { "name": "墨西哥" }, { - "name": "尼泊尔" + "name": "纳米比亚" }, { "name": "南非" }, + { + "name": "南极洲" + }, + { + "name": "瑙鲁" + }, { "name": "尼加拉瓜" }, { - "name": "纳米比亚" + "name": "尼泊尔" }, { "name": "尼日利亚" }, + { + "name": "纽埃" + }, + { + "name": "诺福克岛" + }, { "name": "挪威" }, @@ -1010,10 +1126,10 @@ "name": "帕劳群岛" }, { - "name": "葡萄牙" + "name": "皮特凯恩" }, { - "name": "卡塔尔" + "name": "葡萄牙" }, { "name": "乔治亚" @@ -1028,104 +1144,152 @@ "name": "瑞士" }, { - "name": "苏丹" - }, - { - "name": "塞尔维亚" - }, - { - "name": "圣基茨和尼维斯" - }, - { - "name": "斯洛伐克" - }, - { - "name": "塞拉利昂" - }, - { - "name": "斯里兰卡" - }, - { - "name": "所罗门群岛" - }, - { - "name": "苏里南" - }, - { - "name": "斯洛文尼亚" - }, - { - "name": "圣马力诺" + "name": "萨尔瓦多" }, { "name": "萨摩亚" }, + { + "name": "塞尔维亚" + }, + { + "name": "塞拉利昂" + }, { "name": "塞内加尔" }, + { + "name": "塞浦路斯" + }, { "name": "塞舌尔" }, { "name": "沙特阿拉伯" }, + { + "name": "圣诞岛" + }, + { + "name": "圣多美和普林西比" + }, + { + "name": "圣赫勒拿" + }, + { + "name": "圣基茨和尼维斯" + }, + { + "name": "圣卢西亚" + }, + { + "name": "圣马力诺" + }, + { + "name": "圣皮埃尔和密克隆" + }, + { + "name": "圣文森特和格林纳丁斯" + }, + { + "name": "斯里兰卡" + }, + { + "name": "斯洛伐克" + }, + { + "name": "斯洛文尼亚" + }, { "name": "斯威士兰" }, { - "name": "土耳其" + "name": "苏丹" }, { - "name": "泰国" + "name": "苏里南" }, { - "name": "汤加" + "name": "所罗门群岛" + }, + { + "name": "索马里" }, { "name": "塔吉克斯坦" }, { - "name": "特立尼达和多巴哥" + "name": "泰国" }, { "name": "坦桑尼亚" }, + { + "name": "汤加" + }, + { + "name": "特克斯和凯科斯群岛" + }, + { + "name": "特立尼达和多巴哥" + }, + { + "name": "突尼斯" + }, + { + "name": "图瓦卢" + }, + { + "name": "土耳其" + }, + { + "name": "土库曼斯坦" + }, + { + "name": "托克劳" + }, + { + "name": "瓦利斯和富图纳" + }, + { + "name": "瓦努阿图" + }, { "name": "危地马拉" }, + { + "name": "委内瑞拉" + }, + { + "name": "文莱" + }, { "name": "乌干达" }, { "name": "乌克兰" }, - { - "name": "文莱" - }, { "name": "乌拉圭" }, - { - "name": "瓦努阿图" - }, - { - "name": "委内瑞拉" - }, { "name": "乌兹别克斯坦" }, { "name": "西班牙" }, + { + "name": "西撒哈拉" + }, + { + "name": "希腊" + }, { "name": "新加坡" }, { "name": "新喀里多尼亚" }, - { - "name": "希腊" - }, { "name": "新西兰" }, @@ -1133,28 +1297,7 @@ "name": "匈牙利" }, { - "name": "印度" - }, - { - "name": "约旦" - }, - { - "name": "意大利" - }, - { - "name": "印度尼西亚" - }, - { - "name": "英国" - }, - { - "name": "伊朗" - }, - { - "name": "伊拉克" - }, - { - "name": "也门" + "name": "叙利亚" }, { "name": "牙买加" @@ -1163,24 +1306,60 @@ "name": "亚美尼亚" }, { - "name": "越南" + "name": "也门" + }, + { + "name": "伊拉克" + }, + { + "name": "伊朗" }, { "name": "以色列" }, { - "name": "直布罗陀" + "name": "意大利" + }, + { + "name": "印度" + }, + { + "name": "印度尼西亚" + }, + { + "name": "英国" + }, + { + "name": "英国属地曼岛" + }, + { + "name": "英属维尔京群岛" + }, + { + "name": "英属印度洋领地" + }, + { + "name": "约旦" + }, + { + "name": "越南" }, { "name": "赞比亚" }, { - "name": "中非共和国" + "name": "泽西岛" + }, + { + "name": "乍得" + }, + { + "name": "直布罗陀" }, { "name": "智利" }, { - "name": "泽西岛" + "name": "中非共和国" } ] \ No newline at end of file diff --git a/app/src/main/java/com/gh/base/fragment/BaseFragment.java b/app/src/main/java/com/gh/base/fragment/BaseFragment.java index 6f5366e269..ece1663629 100644 --- a/app/src/main/java/com/gh/base/fragment/BaseFragment.java +++ b/app/src/main/java/com/gh/base/fragment/BaseFragment.java @@ -116,7 +116,7 @@ public abstract class BaseFragment extends Fragment implements OnRequestCallB @Override public void onResume() { super.onResume(); - isEverPause = false; + isEverPause = false; // TODO 导致根据isEverPause判断的方法无法执行 } @Override diff --git a/app/src/main/java/com/gh/gamecenter/GameDetailActivity.java b/app/src/main/java/com/gh/gamecenter/GameDetailActivity.java index b3c9a9d82c..d7691cf4a7 100644 --- a/app/src/main/java/com/gh/gamecenter/GameDetailActivity.java +++ b/app/src/main/java/com/gh/gamecenter/GameDetailActivity.java @@ -236,13 +236,13 @@ public class GameDetailActivity extends BaseActivity { mKaifuHint.setVisibility(View.VISIBLE); } mTanBarFuLiTv.setTextColor(Color.WHITE); - mTanBarFuLiTv.setBackgroundResource(R.drawable.gamedetail_tag_select_bg); + mTanBarFuLiTv.setBackgroundResource(R.drawable.tabbar_left_bg); mTanBarXinXiTv.setTextColor(Color.BLACK); mTanBarXinXiTv.setBackgroundDrawable(new ColorDrawable(0)); } else { mKaifuHint.setVisibility(View.GONE); mTanBarXinXiTv.setTextColor(Color.WHITE); - mTanBarXinXiTv.setBackgroundResource(R.drawable.gamedetail_tag_unselect_bg); + mTanBarXinXiTv.setBackgroundResource(R.drawable.tabbar_right_bg); mTanBarFuLiTv.setTextColor(Color.BLACK); mTanBarFuLiTv.setBackgroundDrawable(new ColorDrawable(0)); } diff --git a/app/src/main/java/com/gh/gamecenter/KaiFuActivity.java b/app/src/main/java/com/gh/gamecenter/KaiFuActivity.java index 1880dbe633..2d73ac47bb 100644 --- a/app/src/main/java/com/gh/gamecenter/KaiFuActivity.java +++ b/app/src/main/java/com/gh/gamecenter/KaiFuActivity.java @@ -1,111 +1,43 @@ package com.gh.gamecenter; -import android.animation.Animator; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.widget.DefaultItemAnimator; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.text.TextUtils; -import android.view.KeyEvent; +import android.support.v4.app.FragmentTransaction; +import android.support.v4.content.ContextCompat; +import android.view.Gravity; import android.view.View; -import android.widget.LinearLayout; -import android.widget.PopupWindow; import android.widget.RelativeLayout; import android.widget.TextView; -import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; import com.gh.base.BaseActivity; -import com.gh.base.OnRequestCallBackListener; -import com.gh.common.util.DownloadItemUtils; +import com.gh.common.util.DisplayUtils; import com.gh.common.util.EntranceUtils; -import com.gh.common.view.VerticalItemDecoration; -import com.gh.download.DownloadManager; -import com.gh.gamecenter.adapter.KaiFuAdapter; -import com.gh.gamecenter.adapter.KaiFuDialogAdapter; -import com.gh.gamecenter.entity.ApkEntity; -import com.gh.gamecenter.entity.GameEntity; -import com.gh.gamecenter.eventbus.EBDownloadStatus; -import com.gh.gamecenter.eventbus.EBNetworkState; -import com.gh.gamecenter.eventbus.EBPackage; -import com.jakewharton.rxbinding.view.RxView; -import com.lightgame.download.DataWatcher; -import com.lightgame.download.DownloadEntity; +import com.gh.gamecenter.eventbus.EBKaiFuReset; +import com.gh.gamecenter.kaifu.KaiFuFragment; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; -import java.util.ArrayList; -import java.util.concurrent.TimeUnit; - import butterknife.BindView; -import rx.functions.Action1; /** - * Created by khy on 2017/3/16. - * 首页-开服表 + * Created by khy on 18/08/17. */ -public class KaiFuActivity extends BaseActivity implements OnRequestCallBackListener, - KaiFuDialogAdapter.OnKaiFuDialogCallBackListener, KaiFuAdapter.OnScrollToKaiFuIndexListener, - SwipeRefreshLayout.OnRefreshListener { - @BindView(R.id.kaifu_rv) - RecyclerView mRecyclerView; - @BindView(R.id.kaifu_pb) - ProgressBarCircularIndeterminate mPbLoading; - @BindView(R.id.kaifu_refresh) - SwipeRefreshLayout mRefreshLayout; - @BindView(R.id.kaifu_game_name) - TextView mGameName; - @BindView(R.id.popup_bg) - View mPopupBg; - @BindView(R.id.kaifu_select_game_rl) - RelativeLayout mSelectGameRl; - @BindView(R.id.reuse_no_connection) - LinearLayout mNoConnection; - @BindView(R.id.reuse_none_data) - LinearLayout mNoData; - private PopupWindow mPopupWindow; +public class KaiFuActivity extends BaseActivity { - private KaiFuAdapter mAdapter; + @BindView(R.id.reuse_actionbar) + RelativeLayout mReuseActionbar; - private LinearLayoutManager layoutManager; + private TextView mResetTv; - private boolean isEverpause = false; - private boolean move = false; - private boolean smoothMove = false; + private KaiFuFragment mKaiFuFragment; + private KaiFuFragment mGameKaiFuFragment; - private String kaifuType; - Runnable runnable = new Runnable() { - @Override - public void run() { - mAdapter = new KaiFuAdapter(KaiFuActivity.this, KaiFuActivity.this, KaiFuActivity.this, kaifuType); - mRecyclerView.setAdapter(mAdapter); - } - }; - private int mDialogGamePosition; // 顶部弹窗过滤位置 - private int kaifuOffset = 0; - private int mInitMovePosition; // 首次进入移动的位置 - private int mMovePosition; // 移动位置 - private DataWatcher dataWatcher = new DataWatcher() { - @Override - public void onDataChanged(DownloadEntity downloadEntity) { - ArrayList locationList = mAdapter.getLocationMap().get(downloadEntity.getPackageName()); - if (locationList != null) { - GameEntity gameEntity; - for (int location : locationList) { - gameEntity = mAdapter.getSubjectList().get(location - getGameEntityIndex()); - if (gameEntity != null) { - DownloadItemUtils.processDate(KaiFuActivity.this, gameEntity, downloadEntity, - mAdapter, location); - } - } - } - } - }; + public static final String SINGLE_GAME_KAIFU = "SINGLE_GAME_KAIFU"; + public static final String ALL_GAME_KAIFU = "ALL_GAME_KAIFU"; @NonNull public static Intent getIntent(Context context, String entrance) { @@ -114,373 +46,71 @@ public class KaiFuActivity extends BaseActivity implements OnRequestCallBackList return intent; } + @Override protected int getLayoutId() { - return R.layout.activity_kaifu; + return R.layout.activity_kaifu2; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - initTitle(getString(R.string.title_kaifu)); + initTitle("开服表"); - kaifuType = "全部"; - - mRefreshLayout.setColorSchemeResources(R.color.theme); - mRefreshLayout.setOnRefreshListener(this); - mRefreshLayout.setEnabled(false); - - mAdapter = new KaiFuAdapter(this, this, this, kaifuType); - layoutManager = new LinearLayoutManager(this); - ((DefaultItemAnimator) mRecyclerView.getItemAnimator()).setSupportsChangeAnimations(false); - mRecyclerView.addItemDecoration(new VerticalItemDecoration(this, 8, false)); - mRecyclerView.setLayoutManager(layoutManager); - mRecyclerView.setAdapter(mAdapter); - - mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { - - @Override - public void onScrollStateChanged(RecyclerView recyclerView, int newState) { - super.onScrollStateChanged(recyclerView, newState); - if (smoothMove && newState == RecyclerView.SCROLL_STATE_IDLE) { - smoothMove = false; - int n = mMovePosition - layoutManager.findFirstVisibleItemPosition(); - if (0 <= n && n < mRecyclerView.getChildCount()) { - View view = layoutManager.findViewByPosition(n); - if (view != null) { - int top = view.getTop(); - mRecyclerView.smoothScrollBy(0, top); - } - } - } - - //上拉加载 - if (mAdapter.isLoadedBottom() && newState == RecyclerView.SCROLL_STATE_IDLE - && mAdapter.getItemCount() == layoutManager.findLastVisibleItemPosition() + 1) { - mAdapter.initListBottom(kaifuOffset + mAdapter.loadCountBottom()); - } - //下拉加载 - if (kaifuOffset > 0 && mAdapter.isLoadedTop() && newState == RecyclerView.SCROLL_STATE_IDLE - && layoutManager.findFirstVisibleItemPosition() == 0) { - int countTop = mAdapter.loadCountTop(); -// if (countTop % 20 == 0) { // 不是20的倍数 证明加载完毕 - int offset = kaifuOffset - countTop; - int limit = 20; - if (offset < 0) { - limit = limit + offset; - offset = 0; - } - if (limit == 0) return; - - mAdapter.initListTop(offset, limit); -// } - } - } - - @Override - public void onScrolled(RecyclerView recyclerView, int dx, int dy) { - super.onScrolled(recyclerView, dx, dy); - if (move) { - move = false; - int n = mMovePosition - layoutManager.findFirstVisibleItemPosition(); - if (0 <= n && n < mRecyclerView.getChildCount()) { - int top = mRecyclerView.getChildAt(n).getTop(); - mRecyclerView.scrollBy(0, top); - } - } - } - }); + mResetTv = new TextView(this); + mResetTv.setText("重置"); + mResetTv.setTextColor(ContextCompat.getColor(this, R.color.title)); + mResetTv.setGravity(Gravity.CENTER); + mResetTv.setVisibility(View.GONE); + mResetTv.setBackgroundResource(R.drawable.border_black_bg); + RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams( + DisplayUtils.dip2px(this, 48), DisplayUtils.dip2px(this, 28)); + params.addRule(RelativeLayout.CENTER_VERTICAL); + params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); + params.setMargins(0, 0, DisplayUtils.dip2px(this, 8), 0); + mReuseActionbar.addView(mResetTv, params); - // 防抖处理 - RxView.clicks(mSelectGameRl) - .throttleFirst(1, TimeUnit.SECONDS) - .subscribe(new Action1() { - @Override - public void call(Void aVoid) { - initSelectGameDialog(); - } - }); - - mNoConnection.setOnClickListener(new View.OnClickListener() { + FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); + mKaiFuFragment = new KaiFuFragment(); + fragmentTransaction.add(R.id.layout_fragment_content, mKaiFuFragment); + fragmentTransaction.commit(); + mResetTv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - mAdapter.initKaiFuOffset(); - mNoConnection.setVisibility(View.GONE); - mPbLoading.setVisibility(View.VISIBLE); - } - }); - - } - - private void initSelectGameDialog() { - isShowPopupBg(true); - - View contentView = View.inflate(this, R.layout.dialog_kaifu_select_game, null); - RecyclerView selectGameRv = (RecyclerView) contentView.findViewById(R.id.dialog_kaifu_select_game_rv); - final TextView selectGameTitle = (TextView) contentView.findViewById(R.id.dialog_kaifu_title); - - final LinearLayoutManager layout = new LinearLayoutManager(this); - selectGameRv.setLayoutManager(layout); - selectGameRv.setAdapter(new KaiFuDialogAdapter(this, this, mDialogGamePosition)); - - - mPopupWindow = new PopupWindow(contentView, LinearLayout.LayoutParams.MATCH_PARENT - , LinearLayout.LayoutParams.MATCH_PARENT, true); - mPopupWindow.setAnimationStyle(R.style.scale_popwindow_anim_style); - mPopupWindow.showAtLocation(mSelectGameRl, 0, 0, 0); - - selectGameRv.addOnScrollListener(new RecyclerView.OnScrollListener() { - @Override - public void onScrolled(RecyclerView recyclerView, int dx, int dy) { - super.onScrolled(recyclerView, dx, dy); - - if (layout.findFirstVisibleItemPosition() >= 5) { - selectGameTitle.setVisibility(View.VISIBLE); - } else { - selectGameTitle.setVisibility(View.GONE); - } - - } - }); - - selectGameRv.setOnKeyListener(new View.OnKeyListener() { - @Override - public boolean onKey(View v, int keyCode, KeyEvent event) { - if (keyCode == KeyEvent.KEYCODE_BACK - && event.getRepeatCount() == 0 - && mPopupWindow != null - && mPopupWindow.isShowing()) { - isShowPopupBg(false); - } - return false; - } - }); - - contentView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - isShowPopupBg(false); + resetFragment(); } }); } - private void moveToPosition(int n, boolean isSmooth) { - int firstItem = layoutManager.findFirstVisibleItemPosition(); - int lastItem = layoutManager.findLastVisibleItemPosition(); - if (n <= firstItem) { - if (isSmooth) { - mRecyclerView.smoothScrollToPosition(n); - } else { - mRecyclerView.scrollToPosition(n); - } - } else if (n <= lastItem) { - int top = layoutManager.findViewByPosition(n).getTop(); - if (isSmooth) { - mRecyclerView.smoothScrollBy(0, top); - } else { - mRecyclerView.scrollBy(0, top); - } - } else { - if (isSmooth) { - mRecyclerView.smoothScrollToPosition(n); - smoothMove = true; - } else { - mRecyclerView.scrollToPosition(n); - move = true; - } - } - + private void resetFragment() { + mResetTv.setVisibility(View.GONE); + FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); + fragmentTransaction.remove(mGameKaiFuFragment); + fragmentTransaction.show(mKaiFuFragment); + fragmentTransaction.commit(); } - public void isShowPopupBg(boolean isShow) { - if (isShow) { - mPopupBg.setVisibility(View.VISIBLE); - mPopupBg.animate() - .alpha(1f) - .setDuration(300) - .setListener(null); - } else { - mPopupWindow.dismiss(); - mPopupBg.animate() - .alpha(0f) - .setDuration(300) - .setListener(new Animator.AnimatorListener() { - @Override - public void onAnimationStart(Animator animation) { - - } - - @Override - public void onAnimationEnd(Animator animation) { - mPopupBg.setVisibility(View.GONE); - } - - @Override - public void onAnimationCancel(Animator animation) { - - } - - @Override - public void onAnimationRepeat(Animator animation) { - - } - - }); - } - - } - - @Override - public void onPause() { - super.onPause(); - isEverpause = true; - DownloadManager.getInstance(getApplicationContext()).removeObserver(dataWatcher); - } - - @Override - public void onResume() { - super.onResume(); - if (isEverpause) { - for (GameEntity entity : mAdapter.getSubjectList()) { - entity.setEntryMap(DownloadManager.getInstance(this).getEntryMap(entity.getName())); - } - } - isEverpause = false; - DownloadManager.getInstance(getApplicationContext()).addObserver(dataWatcher); - } - - @Override - public void loadDone() { - mNoData.setVisibility(View.GONE); - if (mPbLoading != null && mPbLoading.getVisibility() == View.VISIBLE) { - mPbLoading.setVisibility(View.GONE); - } - - if (mRefreshLayout.isRefreshing()) { - mRefreshLayout.setRefreshing(false); - } - } - - @Override - public void loadDone(Object obj) { - kaifuOffset = (int) obj; - } - - @Override - public void loadError() { - if (mPbLoading != null && mPbLoading.getVisibility() == View.VISIBLE) { - mPbLoading.setVisibility(View.GONE); - } - toast("加载失败,请检查网络状态"); - mPbLoading.setVisibility(View.GONE); - mNoData.setVisibility(View.GONE); - mNoConnection.setVisibility(View.VISIBLE); - } - - @Override - public void loadEmpty() { - mNoData.setVisibility(View.VISIBLE); - mNoConnection.setVisibility(View.GONE); - } - - @Override - public void selectPosition(int position, String tag, String gameName) { - mDialogGamePosition = position; - if (!TextUtils.isEmpty(gameName)) { - mGameName.setText(gameName); - } else { - mGameName.setText(tag); - } - isShowPopupBg(false); - - kaifuOffset = 0; - kaifuType = tag; - - mRecyclerView.setVisibility(View.VISIBLE); - mPbLoading.setVisibility(View.VISIBLE); - mNoConnection.setVisibility(View.GONE); - mNoData.setVisibility(View.GONE); - - mAdapter = new KaiFuAdapter(this, this, this, kaifuType); - mRecyclerView.setAdapter(mAdapter); - - } - - // 下载被删除事件 - @Subscribe(threadMode = ThreadMode.MAIN) - public void onEventMainThread(EBDownloadStatus status) { - if ("delete".equals(status.getStatus())) { - DownloadManager.getInstance(this).removePlatform(status.getName(), status.getPlatform()); - - ArrayList locationList = mAdapter.getLocationMap().get(status.getPackageName()); - if (locationList != null) { - GameEntity gameEntity; - for (int location : locationList) { - - gameEntity = mAdapter.getSubjectList().get(location - getGameEntityIndex()); - if (gameEntity != null && gameEntity.getEntryMap() != null) { - gameEntity.getEntryMap().remove(status.getPlatform()); - } - mAdapter.notifyItemChanged(location); - } - } - } - } - - private int getGameEntityIndex() { - if (kaifuOffset != 0) { - return 1; - } - return 0; - } @Subscribe(threadMode = ThreadMode.MAIN) - public void onEventMainThread(EBPackage busFour) { - ArrayList locationList = mAdapter.getLocationMap().get(busFour.getPackageName()); - if (locationList != null) { - GameEntity gameEntity; - for (int location : locationList) { - if ("安装".equals(busFour.getType())) { - gameEntity = mAdapter.getSubjectList().get(location - getGameEntityIndex()); - for (ApkEntity apkEntity : gameEntity.getApk()) { - if (apkEntity.getPackageName().equals(busFour.getPackageName())) { - if (gameEntity.getEntryMap() != null) { - gameEntity.getEntryMap().remove(apkEntity.getPlatform()); - } - mAdapter.notifyItemChanged(location + getGameEntityIndex()); - break; - } - } - } else if ("卸载".equals(busFour.getType())) { - mAdapter.notifyItemChanged(location + getGameEntityIndex()); - } - } + public void onEventMainThread(EBKaiFuReset reset) { + if (SINGLE_GAME_KAIFU.equals(reset.getControl())) { + mResetTv.setVisibility(View.VISIBLE); + + FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); + fragmentTransaction.hide(mKaiFuFragment); + + Bundle args = new Bundle(); + args.putString("gameId", reset.getGameId()); + + mGameKaiFuFragment = new KaiFuFragment(); + mGameKaiFuFragment.setArguments(args); + + fragmentTransaction.add(R.id.layout_fragment_content, mGameKaiFuFragment, KaiFuFragment.class.getSimpleName()); + fragmentTransaction.commit(); + } else if (ALL_GAME_KAIFU.equals(reset.getControl())) { + resetFragment(); } } - //连接上网络事件 - @Subscribe(threadMode = ThreadMode.MAIN) - public void onEventMainThread(EBNetworkState busNetworkState) { - if (busNetworkState.isNetworkConnected()) { - if (mNoConnection.getVisibility() == View.VISIBLE) { - mRecyclerView.setVisibility(View.VISIBLE); - mPbLoading.setVisibility(View.VISIBLE); - mNoConnection.setVisibility(View.GONE); - mAdapter = new KaiFuAdapter(this, this, this, kaifuType); - mRecyclerView.setAdapter(mAdapter); - } - } - } - - @Override - public void onScroll(int scrollPosition) { - mInitMovePosition = scrollPosition + getGameEntityIndex() + 1; - moveToPosition(mInitMovePosition, false); - } - - @Override - public void onRefresh() { - mRecyclerView.postDelayed(runnable, 1000); - } } diff --git a/app/src/main/java/com/gh/gamecenter/adapter/KaiFuAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/KaiFuAdapter.java deleted file mode 100644 index 67b92af434..0000000000 --- a/app/src/main/java/com/gh/gamecenter/adapter/KaiFuAdapter.java +++ /dev/null @@ -1,596 +0,0 @@ -package com.gh.gamecenter.adapter; - -import android.support.v4.util.ArrayMap; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.RecyclerView.ViewHolder; -import android.text.TextUtils; -import android.view.View; -import android.view.ViewGroup; -import android.widget.LinearLayout; -import android.widget.Toast; - -import com.gh.base.OnRequestCallBackListener; -import com.gh.common.constant.ItemViewType; -import com.gh.common.util.ApkActiveUtils; -import com.gh.common.util.DataCollectionUtils; -import com.gh.common.util.DataUtils; -import com.gh.common.util.DisplayUtils; -import com.gh.common.util.DownloadItemUtils; -import com.gh.common.util.ImageUtils; -import com.gh.common.util.KaiFuUtils; -import com.gh.common.util.StringUtils; -import com.gh.download.DownloadManager; -import com.gh.gamecenter.GameDetailActivity; -import com.gh.gamecenter.KaiFuActivity; -import com.gh.gamecenter.R; -import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; -import com.gh.gamecenter.adapter.viewholder.GameTestViewHolder; -import com.gh.gamecenter.adapter.viewholder.ReuseViewHolder; -import com.gh.gamecenter.entity.ApkEntity; -import com.gh.gamecenter.entity.GameEntity; -import com.gh.gamecenter.entity.KaiFuServerEntity; -import com.gh.gamecenter.manager.GameManager; -import com.gh.gamecenter.retrofit.JSONObjectResponse; -import com.gh.gamecenter.retrofit.Response; -import com.gh.gamecenter.retrofit.RetrofitManager; -import com.lightgame.adapter.BaseRecyclerAdapter; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import retrofit2.HttpException; -import rx.android.schedulers.AndroidSchedulers; -import rx.schedulers.Schedulers; - -/** - * Created by khy on 2017/3/16. - */ -public class KaiFuAdapter extends BaseRecyclerAdapter { - - private OnRequestCallBackListener mOnRequestCallBackListener; - private OnScrollToKaiFuIndexListener mOnScrollToKaiFuIndexListener; - - private List mSubjectList; - - private ArrayMap> mLocationMap; - - private String mKaifuType; - - private int mKaifuIndex = 0; // 开服零界点 - private int mInitOffset; - private int mLoadCountTop; // 记录加载数量 上 - private int mLoadCountBottom;// 记录加载数量 下 - - private long mTopLastTime; - private long mBottomLastTime; - - private boolean mIsRemoveBottom; - private boolean mIsRemoveTop; - private boolean mIsNetworkError; - private boolean mIsLoadedBottom; - private boolean mIsLoadedTop; - - public KaiFuAdapter(KaiFuActivity context, OnRequestCallBackListener callBackListener, - OnScrollToKaiFuIndexListener scrollToKaiFuIndexListener, String kaifuType) { - super(context); - mOnRequestCallBackListener = callBackListener; - mKaifuType = kaifuType; - mOnScrollToKaiFuIndexListener = scrollToKaiFuIndexListener; - - mLocationMap = new ArrayMap<>(); - - mSubjectList = new ArrayList<>(); - mIsLoadedTop = false; - mIsLoadedBottom = false; - mIsNetworkError = false; - - mKaifuIndex = 0; - mLoadCountBottom = 0; - mLoadCountTop = 0; - - if ("全部".equals(kaifuType)) { - this.mKaifuType = "all"; - } - - initKaiFuOffset(); - } - - public void initKaiFuOffset() { - RetrofitManager.getApi() - .getKaiFuOffset(mKaifuType) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new JSONObjectResponse() { - @Override - public void onResponse(JSONObject response) { - super.onResponse(response); - JSONObject jsonObject = response; - int offset = 0; - try { - offset = jsonObject.getInt("offset"); - } catch (JSONException e) { - e.printStackTrace(); - } - mInitOffset = offset; - mOnRequestCallBackListener.loadDone(offset); - initListBottom(offset); - } - - @Override - public void onFailure(HttpException e) { - super.onFailure(e); - mOnRequestCallBackListener.loadError(); - } - }); - - } - - public void initListTop(final int offset, int limit) { - - mIsLoadedTop = false; - RetrofitManager.getApi().getKaiFuData(mKaifuType, offset, limit) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Response>() { - @Override - public void onResponse(List response) { - - GameManager manager = new GameManager(mContext); - if (response.size() != 0) { - for (int i = 0; i < response.size(); i++) { - GameEntity entity = response.get(i); -// if (i < response.size() - 1) { -// GameEntity lastEntity = response.get(i + 1); -// -// KaiFuServerEntity curServerEntity = entity.getServerEntity(); -// KaiFuServerEntity lastServerEntity = lastEntity.getServerEntity(); -// -// if (i == 0 && curServerEntity != null && mTopLastTime > 0) { -// KaiFuUtils.setKaiFuTimeHint(curServerEntity.getTime() * 1000, mTopLastTime, entity, true); -// } -// if (curServerEntity == null || lastServerEntity == null) return; -// -// long curTime = curServerEntity.getTime() * 1000; -// long lastTime = lastServerEntity.getTime() * 1000; -// KaiFuUtils.setKaiFuTimeHint(curTime, lastTime, entity, true); -// } else { // response.size == 1 -// KaiFuServerEntity curServerEntity = entity.getServerEntity(); -// if (i == 0 && curServerEntity != null && mTopLastTime > 0) { -// KaiFuUtils.setKaiFuTimeHint(curServerEntity.getTime() * 1000, mTopLastTime, entity, true); -// } -// } - - - // 黄壮华 初始化游戏状态 修改2015/8/15 - entity.setEntryMap(DownloadManager.getInstance(mContext).getEntryMap(entity.getName())); - manager.addOrUpdate(entity.getApk(), entity.getId(), entity.getName()); - - ApkActiveUtils.filterHideApk(entity); - } - mTopLastTime = response.get(0).getServerEntity().getTime() * 1000; - - mSubjectList.addAll(0, response); - notifyItemRangeInserted(0, response.size()); - - if (response.size() < 20 || offset == 0) { - mIsRemoveTop = true; - notifyItemChanged(getItemCount() - 1); - } - - mLoadCountTop = mLoadCountTop + response.size(); - } else { - mIsRemoveTop = true; - notifyDataSetChanged(); - } - - initLocationMap(); - mIsLoadedTop = true; - } - - @Override - public void onFailure(HttpException e) { - if (offset == mInitOffset) { - if (mOnRequestCallBackListener != null) { - mOnRequestCallBackListener.loadError(); - } - } else { - Toast.makeText(mContext, "加载失败,请检查网络状态", Toast.LENGTH_SHORT).show(); - - mIsNetworkError = true; - notifyDataSetChanged(); - } - } - }); - } - - public void initListBottom(final int offset) { - - mIsLoadedBottom = false; - RetrofitManager.getApi().getKaiFuData(mKaifuType, offset, 20) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Response>() { - @Override - public void onResponse(List response) { - - GameManager manager = new GameManager(mContext); - if (response.size() != 0) { - - if (offset == mInitOffset) { - Calendar calendar = Calendar.getInstance(); - calendar.set(Calendar.HOUR_OF_DAY, 0); - calendar.set(Calendar.SECOND, 0); - calendar.set(Calendar.MINUTE, 0); - calendar.set(Calendar.MILLISECOND, 0); - long curTime = calendar.getTimeInMillis() / 1000; - - for (int i = 0; i < response.size(); i++) { - long time = response.get(i).getServerEntity().getTime(); - long l = time - curTime; - if (l > 0) { - mKaifuIndex = i; - break; - } - - if (mKaifuIndex == 0 && i == response.size() - 1) { - mKaifuIndex = i + 1; - } - } - } - - for (int i = 0; i < response.size(); i++) { - GameEntity entity = response.get(i); - if (i < response.size() - 1) { - GameEntity lastEntity = response.get(i + 1); - KaiFuServerEntity curServerEntity = entity.getServerEntity(); - KaiFuServerEntity lastServerEntity = lastEntity.getServerEntity(); - - if (i == 0 && curServerEntity != null && mBottomLastTime > 0) { - KaiFuUtils.setKaiFuTimeHint(curServerEntity.getTime() * 1000, mBottomLastTime, entity, true); - entity.setShowTop(true); - } - if (curServerEntity == null || lastServerEntity == null) return; - - long curTime = curServerEntity.getTime() * 1000; - long lastTime = lastServerEntity.getTime() * 1000; - - - if (offset == mInitOffset) { -// if (mKaifuIndex >= i + 1) { -//// KaiFuUtils.setKaiFuTimeHint(curTime, lastTime, entity, true); -// } else if (mKaifuIndex <= i - 1) { - KaiFuUtils.setKaiFuTimeHint(curTime, lastTime, lastEntity, false); - lastEntity.setShowTop(true); -// } else { -//// KaiFuUtils.setKaiFuTimeHint(curTime, lastTime, lastEntity, false); -//// KaiFuUtils.setKaiFuTimeHint(curTime, lastTime, entity, true); -//// entity.setShowTop(true); -// } - - } else { - KaiFuUtils.setKaiFuTimeHint(curTime, lastTime, lastEntity, false); - lastEntity.setShowTop(true); - } - } else { - KaiFuServerEntity curServerEntity = entity.getServerEntity(); - if (i == 0 && curServerEntity != null && mBottomLastTime > 0) { - KaiFuUtils.setKaiFuTimeHint(curServerEntity.getTime() * 1000, mBottomLastTime, entity, true); - entity.setShowTop(true); - } - } - - // 黄壮华 初始化游戏状态 修改2015/8/15 - entity.setEntryMap(DownloadManager.getInstance(mContext).getEntryMap(entity.getName())); - manager.addOrUpdate(entity.getApk(), entity.getId(), entity.getName()); - ApkActiveUtils.filterHideApk(entity); - } - - mBottomLastTime = response.get(response.size() - 1).getServerEntity().getTime() * 1000; - mTopLastTime = response.get(0).getServerEntity().getTime() * 1000; - - mSubjectList.addAll(response); - notifyItemRangeInserted(getItemCount() - 1 - response.size(), response.size()); - - if (offset == mInitOffset) { - mIsLoadedTop = true; //首次加载 手动设置下拉加载完成 - mLoadCountTop = response.size();//首次加载 下拉加载减去初始加载值 获取正确偏移量 - - mSubjectList.add(mKaifuIndex, new GameEntity()); // 添加一个空的实体当做 零界点ITEM - - int locationTop = mKaifuIndex - 1; - if (locationTop > 0) { - GameEntity gameEntity = mSubjectList.get(locationTop); - gameEntity.setShowTop(false); - if (gameEntity.getKaifuTimeHint() == null) { - gameEntity.setKaifuTimeHint(gameEntity.getServerEntity().getTime() * 1000); - } - } - - int locationBottom = mKaifuIndex + 1; - if (locationBottom < mSubjectList.size()) { - GameEntity gameEntity = mSubjectList.get(locationBottom); - if (gameEntity.getKaifuTimeHint() == null) { - gameEntity.setKaifuTimeHint(gameEntity.getServerEntity().getTime() * 1000); - gameEntity.setShowTop(true); - } - } - - } - - if (response.size() < 20) { - mIsRemoveBottom = true; - notifyItemChanged(getItemCount() - 1); - } - - mLoadCountBottom = mLoadCountBottom + response.size(); - } else { - mIsRemoveBottom = true; - notifyDataSetChanged(); - } - - initLocationMap(); - - if (mOnRequestCallBackListener != null) { - if (mSubjectList.size() == 0) { - mOnRequestCallBackListener.loadEmpty(); - } else { - mOnRequestCallBackListener.loadDone(); - } - } - - mIsLoadedBottom = true; - - if (offset == mInitOffset) { //定位到开服零界点 - mOnScrollToKaiFuIndexListener.onScroll(mKaifuIndex - 1); - } - } - - @Override - public void onFailure(HttpException e) { - if (offset == mInitOffset) { - if (mOnRequestCallBackListener != null) { - mOnRequestCallBackListener.loadError(); - } - } else { - Toast.makeText(mContext, "加载失败,请检查网络状态", Toast.LENGTH_SHORT).show(); - - mIsNetworkError = true; - notifyDataSetChanged(); - } - } - }); - } - - private void initLocationMap() { - - ArrayList list; - GameEntity gameEntity; - for (int i = 0, size = mSubjectList.size(); i < size; i++) { - - int index = 0; - if (mInitOffset != 0) { - index++; - } - - gameEntity = mSubjectList.get(i); - if (gameEntity.getApk() != null && gameEntity.getApk().size() != 0) { - for (ApkEntity apkEntity : gameEntity.getApk()) { - list = mLocationMap.get(apkEntity.getPackageName()); - if (list == null) { - list = new ArrayList<>(); - mLocationMap.put(apkEntity.getPackageName(), list); - } - list.add(i + index); - } - } - - } - } - - @Override - public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { - View view; - switch (viewType) { - case ItemViewType.LOADING: - view = mLayoutInflater.inflate(R.layout.refresh_footerview, viewGroup, false); - return new FooterViewHolder(view); - case ItemViewType.GAME_TEST: - view = mLayoutInflater.inflate(R.layout.game_test_item, viewGroup, false); - return new GameTestViewHolder(view); - case 100: - view = new View(mContext); - view.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, DisplayUtils.dip2px(mContext, 4))); - return new ReuseViewHolder(view); - default: - return null; - } - } - - @Override - public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { - int index = 0; - if (mInitOffset != 0) { - index++; - } - - if (viewHolder instanceof GameTestViewHolder) { - initGameTestViewHolder((GameTestViewHolder) viewHolder, position - index); - } else if (viewHolder instanceof FooterViewHolder) { - initFooterViewHolder((FooterViewHolder) viewHolder, position); - } - } - - @Override - public int getItemViewType(int position) { - - int index = 0; - if (mInitOffset != 0) { - index++; - } - - if (position == getItemCount() - 1 || (position == 0 && mInitOffset != 0)) { - return ItemViewType.LOADING; - } - if (TextUtils.isEmpty(mSubjectList.get(position - index).getId())) { - return 100; - } else { - return ItemViewType.GAME_TEST; - } - } - - @Override - public int getItemCount() { - if (mSubjectList.size() < 1) { - return 0; - } - if (mInitOffset != 0) { - return mSubjectList.size() + 2; - } - return mSubjectList.size() + 1; - } - - private void initGameTestViewHolder(final GameTestViewHolder holder, int position) { - - holder.gameOrder.setVisibility(View.GONE); - - final GameEntity gameEntity = mSubjectList.get(position); - - KaiFuUtils.setKaiFuTimeHint(holder.kaifuTop, holder.kaifuBottom, mSubjectList, position); - - if (gameEntity.getKaifuTimeHint() != null) { - if (gameEntity.isShowTop()) { - holder.kaifuTop.setVisibility(View.VISIBLE); - holder.kaifuBottom.setVisibility(View.GONE); - KaiFuUtils.initKaiFuTimeHintView(holder.kaifuTop, gameEntity.getKaifuTimeHint()); - } else { - holder.kaifuBottom.setVisibility(View.VISIBLE); - holder.kaifuTop.setVisibility(View.GONE); - KaiFuUtils.initKaiFuTimeHintView(holder.kaifuBottom, gameEntity.getKaifuTimeHint()); - } - } else { - holder.kaifuBottom.setVisibility(View.GONE); - holder.kaifuTop.setVisibility(View.GONE); - } - - ImageUtils.Companion.display(holder.gameThumb, gameEntity.getIcon()); - holder.gameName.setText(gameEntity.getName()); - if (gameEntity.getApk() == null || gameEntity.getApk().isEmpty()) { - holder.gameDes.setText(gameEntity.getBrief()); - } else { - holder.gameDes.setText(String.format("%s %s", gameEntity.getApk().get(0).getSize(), gameEntity.getBrief())); - } - - KaiFuUtils.setKaiFuTime(holder.gameTestType, gameEntity.getServerEntity().getTime()); - String type = gameEntity.getServerEntity().getType(); - if ("不删档内测".equals(type) || "删档内测".equals(type)) { - KaiFuUtils.setKaiFuType(holder.gameTestTime, gameEntity.getServerEntity().getType()); - } else if ("公测".equals(type)) { - String note = gameEntity.getServerEntity().getNote(); - if (TextUtils.isEmpty(note)) { - KaiFuUtils.setKaiFuType(holder.gameTestTime, gameEntity.getServerEntity().getType()); - } else { - KaiFuUtils.setKaiFuType(holder.gameTestTime, gameEntity.getServerEntity().getType() + ":" + note); - } - } else { - KaiFuUtils.setKaiFuType(holder.gameTestTime, gameEntity.getServerEntity().getNote()); - } - - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Map kv = new HashMap<>(); - kv.put("名字", gameEntity.getName()); - kv.put("位置", String.valueOf(holder.getPosition() + 1)); - DataUtils.onEvent(mContext, "点击", "开服表", kv); - - DataCollectionUtils.uploadClick(mContext, "列表", "开服表", gameEntity.getName()); - - GameDetailActivity.startGameDetailActivity(mContext, gameEntity, StringUtils.buildString("主页-游戏", "+(" - , "开服表", "[", String.valueOf(holder.getPosition()), "])")); - } - }); - - DownloadItemUtils.setOnClickListener(mContext, - holder.gameDownloadBtn, gameEntity, position, - KaiFuAdapter.this, StringUtils.buildString("主页游戏", "+(", "开服表", "[", String.valueOf(holder.getPosition()), "])") - , "开服表 :" + gameEntity.getName()); - - DownloadItemUtils.updateItem(mContext, gameEntity, holder, true); - } - - private void initFooterViewHolder(FooterViewHolder viewHolder, final int position) { - viewHolder.initItemPadding(); - if (mIsNetworkError) { - viewHolder.loading.setVisibility(View.GONE); - viewHolder.hint.setText("加载失败,点击重试"); - viewHolder.itemView.setClickable(true); - viewHolder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - mIsNetworkError = false; - notifyDataSetChanged(); - if (position == getItemCount() - 1) { - initListBottom(mKaifuIndex + mLoadCountBottom); - } else { - int offset = mKaifuIndex - mLoadCountTop; - int limit = 20; - if (offset < 0) { - limit = limit + offset; - offset = 0; - } - initListTop(offset, limit); - } - } - }); - } else if ((mIsRemoveBottom && position == getItemCount() - 1) - || (mIsRemoveTop && position == 0)) { - viewHolder.loading.setVisibility(View.GONE); - viewHolder.hint.setText("加载完毕"); - viewHolder.itemView.setClickable(false); - viewHolder.lineLeft.setVisibility(View.VISIBLE); - viewHolder.lineRight.setVisibility(View.VISIBLE); - } else { - viewHolder.loading.setVisibility(View.VISIBLE); - viewHolder.hint.setText(R.string.loading); - viewHolder.itemView.setClickable(false); - } - } - - public List getSubjectList() { - return mSubjectList; - } - - public ArrayMap> getLocationMap() { - return mLocationMap; - } - - public boolean isLoadedBottom() { - return mIsLoadedBottom; - } - - public boolean isLoadedTop() { - return mIsLoadedTop; - } - - public int loadCountTop() { - return mLoadCountTop; - } - - public int loadCountBottom() { - return mLoadCountBottom; - } - - public int getLoadCountTop() { - return mLoadCountTop; - } - - public interface OnScrollToKaiFuIndexListener { - void onScroll(int scrollPosition); - } -} diff --git a/app/src/main/java/com/gh/gamecenter/eventbus/EBKaiFuReset.java b/app/src/main/java/com/gh/gamecenter/eventbus/EBKaiFuReset.java new file mode 100644 index 0000000000..0358febdbf --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/eventbus/EBKaiFuReset.java @@ -0,0 +1,32 @@ +package com.gh.gamecenter.eventbus; + +/** + * Created by khy on 20/08/17. + */ + +public class EBKaiFuReset { + + private String control; + private String gameId; + + public EBKaiFuReset(String control, String gameId) { + this.control = control; + this.gameId = gameId; + } + + public String getControl() { + return control; + } + + public void setControl(String control) { + this.control = control; + } + + public String getGameId() { + return gameId; + } + + public void setGameId(String gameId) { + this.gameId = gameId; + } +} diff --git a/app/src/main/java/com/gh/gamecenter/fragment/GameFragment.java b/app/src/main/java/com/gh/gamecenter/fragment/GameFragment.java index c6b568c5ec..06acde7b55 100644 --- a/app/src/main/java/com/gh/gamecenter/fragment/GameFragment.java +++ b/app/src/main/java/com/gh/gamecenter/fragment/GameFragment.java @@ -239,11 +239,6 @@ public class GameFragment extends BaseFragment implements SwipeRefreshLayout.OnR final ApkEntity normalApkEntity = apkEntities.get(0); if (normalApkEntity.getPackageName().equals(busFour.getPackageName())) { -// if ("卸载".equals(busFour.getType()) -// && DownloadManager.getInstance(getContext()).getDownloadEntityByUrl( -// normalApkEntity.getUrl()) != null) { -// adapter.notifyItemChanged(1); // TODO 有任务正在下载中,就算删除依然保留插件化??但是刷新好像也没什么用 @苏哥 -// } else { // 安装完成 插件化区域消失 list.remove(i); if (list.isEmpty()) { diff --git a/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuFragment.java b/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuFragment.java new file mode 100644 index 0000000000..1553a4440a --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuFragment.java @@ -0,0 +1,115 @@ +package com.gh.gamecenter.kaifu; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.support.v4.view.ViewPager; +import android.view.View; +import android.widget.CheckedTextView; +import android.widget.LinearLayout; + +import com.gh.base.adapter.FragmentAdapter; +import com.gh.base.fragment.BaseFragment; +import com.gh.gamecenter.R; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * Created by khy on 20/08/17. + */ + +public class KaiFuFragment extends BaseFragment { + + @BindView(R.id.kaifu_tabbar_today) + CheckedTextView mKaifuTabbarToday; + @BindView(R.id.kaifu_tabbar_tomorrow) + CheckedTextView mKaifuTabbarTomorrow; + @BindView(R.id.kaifu_tabbar_future) + CheckedTextView mKaifuTabbarFuture; + @BindView(R.id.kaifu_tabbar) + LinearLayout mKaifuTabbar; + @BindView(R.id.kaifu_content_vp) + ViewPager mKaifuContentVp; + + + @Override + protected int getLayoutId() { + return R.layout.fragment_kaifu; + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + List fragments = new ArrayList<>(); + for (int i = 0; i < 3; i++) { + KaiFuVpFragment kaiFuVpFragment = new KaiFuVpFragment(); + if (getArguments() != null) { + kaiFuVpFragment.setArguments(getArguments()); + } + fragments.add(kaiFuVpFragment); + } + FragmentAdapter fragmentAdapter = new FragmentAdapter(getChildFragmentManager(), fragments); + + setTabbarPosition(0); + mKaifuContentVp.setAdapter(fragmentAdapter); + mKaifuContentVp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + + } + + @Override + public void onPageSelected(int position) { + setTabbarPosition(position); + } + + @Override + public void onPageScrollStateChanged(int state) { + + } + }); + } + + @OnClick({R.id.kaifu_tabbar_today, R.id.kaifu_tabbar_tomorrow, R.id.kaifu_tabbar_future}) + public void onViewClicked(View view) { + switch (view.getId()) { + case R.id.kaifu_tabbar_today: + setTabbarPosition(0); + mKaifuContentVp.setCurrentItem(0); + break; + case R.id.kaifu_tabbar_tomorrow: + setTabbarPosition(1); + mKaifuContentVp.setCurrentItem(1); + break; + case R.id.kaifu_tabbar_future: + setTabbarPosition(2); + mKaifuContentVp.setCurrentItem(2); + break; + } + } + + private void setTabbarPosition(int index) { + switch (index) { + case 0: + mKaifuTabbarToday.setChecked(true); + mKaifuTabbarFuture.setChecked(false); + mKaifuTabbarTomorrow.setChecked(false); + break; + case 1: + mKaifuTabbarToday.setChecked(false); + mKaifuTabbarFuture.setChecked(false); + mKaifuTabbarTomorrow.setChecked(true); + break; + case 2: + mKaifuTabbarToday.setChecked(false); + mKaifuTabbarFuture.setChecked(true); + mKaifuTabbarTomorrow.setChecked(false); + break; + } + } +} diff --git a/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuTimeViewHolder.java b/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuTimeViewHolder.java new file mode 100644 index 0000000000..55f6c11a2b --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuTimeViewHolder.java @@ -0,0 +1,23 @@ +package com.gh.gamecenter.kaifu; + +import android.view.View; +import android.widget.TextView; + +import com.gh.base.BaseRecyclerViewHolder; +import com.gh.gamecenter.R; + +import butterknife.BindView; + +/** + * Created by khy on 18/08/17. + */ + +public class KaiFuTimeViewHolder extends BaseRecyclerViewHolder { + + @BindView(R.id.kaifu_item_time_tv) + TextView time; + + public KaiFuTimeViewHolder(View itemView) { + super(itemView); + } +} diff --git a/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpAdapter.java b/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpAdapter.java new file mode 100644 index 0000000000..738127d87a --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpAdapter.java @@ -0,0 +1,384 @@ +package com.gh.gamecenter.kaifu; + +import android.app.Dialog; +import android.content.Context; +import android.graphics.Color; +import android.support.v4.content.ContextCompat; +import android.support.v4.util.ArrayMap; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.gh.base.OnRequestCallBackListener; +import com.gh.common.util.ApkActiveUtils; +import com.gh.common.util.DisplayUtils; +import com.gh.common.util.DownloadItemUtils; +import com.gh.common.util.KaiFuUtils; +import com.gh.common.util.StringUtils; +import com.gh.download.DownloadManager; +import com.gh.gamecenter.GameDetailActivity; +import com.gh.gamecenter.R; +import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; +import com.gh.gamecenter.adapter.viewholder.GameTestViewHolder; +import com.gh.gamecenter.entity.ApkEntity; +import com.gh.gamecenter.entity.GameEntity; +import com.gh.gamecenter.entity.KaiFuServerEntity; +import com.gh.gamecenter.eventbus.EBKaiFuReset; +import com.gh.gamecenter.manager.GameManager; +import com.gh.gamecenter.retrofit.Response; +import com.gh.gamecenter.retrofit.RetrofitManager; +import com.lightgame.adapter.BaseRecyclerAdapter; + +import org.greenrobot.eventbus.EventBus; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import retrofit2.HttpException; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +import static com.gh.gamecenter.KaiFuActivity.ALL_GAME_KAIFU; +import static com.gh.gamecenter.KaiFuActivity.SINGLE_GAME_KAIFU; + + +/** + * Created by khy on 18/08/17. + */ + +public class KaiFuVpAdapter extends BaseRecyclerAdapter { + + private OnRequestCallBackListener mOnCallBackListener; + + private List mEntityList; + private ArrayMap> mLocationMap; + + private int mDataCount; + private String mGameId; + + private boolean mIsRemove; + private boolean mIsNetworkError; + private boolean mIsLoaded; + + public KaiFuVpAdapter(Context context, OnRequestCallBackListener onCallBackListener, String gameId) { + super(context); + + mGameId = gameId; + mOnCallBackListener = onCallBackListener; + mLocationMap = new ArrayMap<>(); + mEntityList = new ArrayList<>(); + addList(0); + } + + public void addList(int offset) { + mIsLoaded = false; + RetrofitManager.getApi() + .getKaiFuData(mGameId, offset, 20) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Response>(){ + @Override + public void onResponse(List response) { + super.onResponse(response); + mDataCount += response.size(); + + if (mEntityList.size() == 0) { // TODO 获取开服表当前整点时间位置 + + } + + if (response.size() < 20) mIsRemove = true; + + GameManager manager = new GameManager(mContext); + for (int i = 0; i < response.size(); i++) { + // 初始化游戏状态 + response.get(i).setEntryMap(DownloadManager.getInstance(mContext).getEntryMap(response.get(i).getName())); + manager.addOrUpdate(response.get(i).getApk(), response.get(i).getId(), response.get(i).getName()); + ApkActiveUtils.filterHideApk(response.get(i)); // 过滤隐藏apk + // 设置时间断点 + if (i == 0) { + if (mEntityList.size() == 0) { + GameEntity kaiFuTimeEntity = new GameEntity(); + kaiFuTimeEntity.setKaifuTimeHint(response.get(i).getServerEntity().getTime()); + response.add(i, kaiFuTimeEntity); + i++; + continue; + } else { + GameEntity gameEntity = mEntityList.get(mEntityList.size() - 1); + long time = gameEntity.getServerEntity().getTime(); + long nextTime = response.get(i).getServerEntity().getTime(); + if (time != nextTime) { + GameEntity kaiFuTimeEntity = new GameEntity(); + kaiFuTimeEntity.setKaifuTimeHint(nextTime); + response.add(i, kaiFuTimeEntity); + i++; + continue; + } + } + } + + if (i < response.size() - 1) { + KaiFuServerEntity serverEntity = response.get(i).getServerEntity(); + KaiFuServerEntity nextServerEntity = response.get(i + 1).getServerEntity(); + if (serverEntity == null || nextServerEntity == null) continue; + + long time = serverEntity.getTime(); + long nextTime = nextServerEntity.getTime(); + + if (time != nextTime) { + GameEntity kaiFuTimeEntity = new GameEntity(); + kaiFuTimeEntity.setKaifuTimeHint(nextTime); + response.add(i + 1,kaiFuTimeEntity); + i++; + } + } + + } + + mEntityList.addAll(response); + notifyItemRangeInserted(mEntityList.size() - response.size(), response.size()); + + initLocationMap(); + + if (mEntityList.size() == 0) { + mOnCallBackListener.loadEmpty(); + } else { + mOnCallBackListener.loadDone(); + } + + mIsLoaded = true; + } + + @Override + public void onFailure(HttpException e) { + super.onFailure(e); + + mIsLoaded = true; + if (mEntityList.size() == 0) { + mOnCallBackListener.loadError(); + } else { + mIsNetworkError = true; + } + } + }); + } + + private void initLocationMap() { + ArrayList list; + GameEntity gameEntity; + for (int i = 0, size = mEntityList.size(); i < size; i++) { + gameEntity = mEntityList.get(i); + if (gameEntity.getApk() != null && gameEntity.getApk().size() != 0) { + for (ApkEntity apkEntity : gameEntity.getApk()) { + list = mLocationMap.get(apkEntity.getPackageName()); + if (list == null) { + list = new ArrayList<>(); + mLocationMap.put(apkEntity.getPackageName(), list); + } + list.add(i); + } + } + } + } + + + @Override + public int getItemViewType(int position) { + + if (mEntityList.size() == position) { + return 0; + } + + GameEntity gameEntity = mEntityList.get(position); + if (gameEntity.getKaifuTimeHint() != null && gameEntity.getKaifuTimeHint() != 0) { + return 1; + } + return 2; + } + + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + if (viewType == 0) { + return new FooterViewHolder(mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false)); + } else if (viewType == 1) { + 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)); + } + } + + @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)); + } else if (holder instanceof FooterViewHolder) { + FooterViewHolder viewHolder = (FooterViewHolder) holder; + initFooterViewHolder(viewHolder); + } + } + + + + @Override + public int getItemCount() { + if (mEntityList.size() == 0) { + return 0; + } + return mEntityList.size() + 1; + } + + private void initGameTestViewHolder(final GameEntity gameEntity, GameTestViewHolder viewHolder) { + viewHolder.gameName.setText(gameEntity.getName()); + viewHolder.gameThumb.setImageURI(gameEntity.getIcon()); + + String type = gameEntity.getServerEntity().getType(); + if ("不删档内测".equals(type) || "删档内测".equals(type)) { + KaiFuUtils.setKaiFuType(viewHolder.gameTestTime, gameEntity.getServerEntity().getType()); + } else if ("公测".equals(type)) { + String note = gameEntity.getServerEntity().getNote(); + if (TextUtils.isEmpty(note)) { + KaiFuUtils.setKaiFuType(viewHolder.gameTestTime, gameEntity.getServerEntity().getType()); + } else { + KaiFuUtils.setKaiFuType(viewHolder.gameTestTime, gameEntity.getServerEntity().getType() + ":" + note); + } + } else { + KaiFuUtils.setKaiFuType(viewHolder.gameTestTime, gameEntity.getServerEntity().getNote()); + } + + if (gameEntity.getApk() == null || gameEntity.getApk().isEmpty()) { + viewHolder.gameDes.setText(gameEntity.getBrief()); + } else { + viewHolder.gameDes.setText(String.format("%s %s", gameEntity.getApk().get(0).getSize(), gameEntity.getBrief())); + } + + KaiFuUtils.setKaiFuTime(viewHolder.gameTestType, gameEntity.getServerEntity().getTime()); + + DownloadItemUtils.setOnClickListener(mContext, + viewHolder.gameDownloadBtn, gameEntity, viewHolder.getAdapterPosition(), KaiFuVpAdapter.this, + StringUtils.buildString("首页-推荐入口", "+(", "开服表", "[", String.valueOf(viewHolder.getAdapterPosition() + 1), "])"), + StringUtils.buildString("开服表", ":", gameEntity.getName())); + + DownloadItemUtils.updateItem(mContext, gameEntity, viewHolder, true); + + viewHolder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + showSkiptDialog(gameEntity); + } + }); + } + + private void showSkiptDialog(final GameEntity gameEntity) { + + final Dialog dialog = new Dialog(mContext); + + LinearLayout container = new LinearLayout(mContext); + container.setOrientation(LinearLayout.VERTICAL); + container.setBackgroundColor(Color.WHITE); + container.setPadding(0, DisplayUtils.dip2px(mContext, 12), 0, DisplayUtils.dip2px(mContext, 12)); + + final List dialogType = new ArrayList<>(); + + if (TextUtils.isEmpty(mGameId)) { + dialogType.add("只看这个游戏"); + } else { + dialogType.add("返回所有游戏"); + } + dialogType.add("进入游戏详情"); + + for (String s : dialogType) { + final TextView skipTv = new TextView(mContext); + skipTv.setText(s); + skipTv.setTextSize(17); + skipTv.setTextColor(ContextCompat.getColor(mContext, R.color.title)); + skipTv.setBackgroundResource(R.drawable.textview_white_style); + int widthPixels = mContext.getResources().getDisplayMetrics().widthPixels; + skipTv.setLayoutParams(new LinearLayout.LayoutParams((widthPixels * 9) / 10, + LinearLayout.LayoutParams.WRAP_CONTENT)); + skipTv.setPadding(DisplayUtils.dip2px(mContext, 20), DisplayUtils.dip2px(mContext, 12), + 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(SINGLE_GAME_KAIFU, gameEntity.getId())); + break; + case "进入游戏详情": + GameDetailActivity.startGameDetailActivity(mContext, gameEntity, ""); + break; + case "返回所有游戏": + EventBus.getDefault().post(new EBKaiFuReset(ALL_GAME_KAIFU, gameEntity.getId())); + break; + } + } + }); + } + + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setContentView(container); + dialog.show(); + + } + + private void initFooterViewHolder(FooterViewHolder viewHolder) { + if (mIsNetworkError) { + viewHolder.loading.setVisibility(View.GONE); + viewHolder.hint.setText("加载失败,点击重试"); + viewHolder.itemView.setClickable(true); + viewHolder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + mIsNetworkError = false; + notifyItemChanged(getItemCount() - 1); + addList(mDataCount); + } + }); + } else if (mIsRemove) { + viewHolder.loading.setVisibility(View.GONE); + viewHolder.hint.setText("加载完毕"); + viewHolder.itemView.setClickable(false); + viewHolder.lineLeft.setVisibility(View.VISIBLE); + viewHolder.lineRight.setVisibility(View.VISIBLE); + } else { + viewHolder.loading.setVisibility(View.VISIBLE); + viewHolder.hint.setText(R.string.loading); + viewHolder.itemView.setClickable(false); + } + } + + public boolean isLoaded() { + return mIsLoaded; + } + + public boolean isRemove() { + return mIsRemove; + } + + public int getDataListCount() { + return mDataCount; + } + + public List getDataList() { + return mEntityList; + } + + public ArrayMap> getLocationMap() { + return mLocationMap; + } +} diff --git a/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpFragment.java b/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpFragment.java new file mode 100644 index 0000000000..726e432bf7 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpFragment.java @@ -0,0 +1,224 @@ +package com.gh.gamecenter.kaifu; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v7.widget.DefaultItemAnimator; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; +import com.gh.base.fragment.BaseFragment; +import com.gh.common.util.DisplayUtils; +import com.gh.common.util.DownloadItemUtils; +import com.gh.download.DownloadManager; +import com.gh.gamecenter.R; +import com.gh.gamecenter.entity.GameEntity; +import com.gh.gamecenter.entity.KaiFuServerEntity; +import com.gh.gamecenter.eventbus.EBDownloadStatus; +import com.lightgame.download.DataWatcher; +import com.lightgame.download.DownloadEntity; + +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * Created by khy on 18/08/17. + */ + +public class KaiFuVpFragment extends BaseFragment { + + @BindView(R.id.kaifu_rv) + RecyclerView mRecyclerView; + @BindView(R.id.kaifu_item_time_tv) + TextView mKaifuItemTimeTv; + @BindView(R.id.kaifu_item_time) + LinearLayout mKaiFuTimeLl; + @BindView(R.id.kaifu_pb_loading) + ProgressBarCircularIndeterminate mLoading; + @BindView(R.id.reuse_no_connection) + LinearLayout mNoConn; + @BindView(R.id.reuse_none_data) + LinearLayout mNoneData; + + private KaiFuVpAdapter mAdapter; + private LinearLayoutManager mLayoutManager; + + private RelativeLayout.LayoutParams mLlparams; + + private String mGameId; + + private DataWatcher dataWatcher = new DataWatcher() { + @Override + public void onDataChanged(DownloadEntity downloadEntity) { + ArrayList locationList = mAdapter.getLocationMap().get(downloadEntity.getPackageName()); + if (locationList != null) { + GameEntity gameEntity; + for (int location : locationList) { + gameEntity = mAdapter.getDataList().get(location); + if (gameEntity != null) { + DownloadItemUtils.processDate(getContext(), gameEntity, downloadEntity, + mAdapter, location); + } + } + } + } + }; + + @Override + protected int getLayoutId() { + return R.layout.fragment_kaifu_vp; + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + Bundle arguments = getArguments(); + if (arguments != null) { + mGameId = arguments.getString("gameId", ""); + } else { + mGameId = ""; + } + + + mLlparams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + DisplayUtils.dip2px(getContext(), 40)); + + ((DefaultItemAnimator) mRecyclerView.getItemAnimator()).setSupportsChangeAnimations(false); + mLayoutManager = new LinearLayoutManager(getContext()); + mRecyclerView.setLayoutManager(mLayoutManager); + mAdapter = new KaiFuVpAdapter(getContext(), this, mGameId); + mRecyclerView.setAdapter(mAdapter); + + mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrollStateChanged(RecyclerView recyclerView, int newState) { + super.onScrollStateChanged(recyclerView, newState); + if (mLayoutManager.findLastVisibleItemPosition() == mAdapter.getItemCount() - 1 + && newState == RecyclerView.SCROLL_STATE_IDLE && !mAdapter.isRemove() && mAdapter.isLoaded()) { + mAdapter.addList(mAdapter.getDataListCount()); + } + } + + @Override + public void onScrolled(RecyclerView recyclerView, int dx, int dy) { + super.onScrolled(recyclerView, dx, dy); + int position = mLayoutManager.findFirstVisibleItemPosition(); + List dataList = mAdapter.getDataList(); + GameEntity gameEntity = dataList.get(position + 1); + Long kaifuTimeHint = gameEntity.getKaifuTimeHint(); + + // 悬挂的文案 + 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) { + KaiFuServerEntity serverEntity = timeGameEntity.getServerEntity(); + if (serverEntity != null) { + mKaifuItemTimeTv.setText(dateFm.format(serverEntity.getTime() * 1000)); + } + } else { + mKaifuItemTimeTv.setText(dateFm.format(timeHint * 1000)); + } + + // 悬挂界面移动 + if (kaifuTimeHint != null && kaifuTimeHint != 0) { + int buttom = mLayoutManager.findViewByPosition(position).getBottom(); + if (buttom <= mKaiFuTimeLl.getHeight()) { + mLlparams.topMargin = buttom - mKaiFuTimeLl.getHeight(); + mKaiFuTimeLl.setLayoutParams(mLlparams); + } else { + mLlparams.topMargin = 0; + mKaiFuTimeLl.setLayoutParams(mLlparams); + } + } else { + mLlparams.topMargin = 0; + mKaiFuTimeLl.setLayoutParams(mLlparams); + } + } + }); + + } + + @Override + public void onResume() { + super.onResume(); + mAdapter.notifyDataSetChanged(); + DownloadManager.getInstance(getContext()).addObserver(dataWatcher); + } + + @Override + public void onPause() { + super.onPause(); + DownloadManager.getInstance(getContext()).removeObserver(dataWatcher); + } + + @OnClick(R.id.reuse_no_connection) + public void onClick() { + mLoading.setVisibility(View.VISIBLE); + mNoConn.setVisibility(View.GONE); + mNoneData.setVisibility(View.GONE); + mAdapter = new KaiFuVpAdapter(getContext(), this, mGameId); + mRecyclerView.setAdapter(mAdapter); + } + + // 下载被删除事件 + @Subscribe(threadMode = ThreadMode.MAIN) + public void onEventMainThread(EBDownloadStatus status) { + if ("delete".equals(status.getStatus())) { + DownloadManager.getInstance(getContext()).removePlatform(status.getName(), status.getPlatform()); + + ArrayList locationList = mAdapter.getLocationMap().get(status.getPackageName()); + if (locationList != null) { + GameEntity gameEntity; + for (int location : locationList) { + gameEntity = mAdapter.getDataList().get(location); + if (gameEntity != null && gameEntity.getEntryMap() != null) { + gameEntity.getEntryMap().remove(status.getPlatform()); + } + mAdapter.notifyItemChanged(location); + } + } + } + } + + @Override + public void loadDone() { + super.loadDone(); + mKaiFuTimeLl.setVisibility(View.VISIBLE); + mNoConn.setVisibility(View.GONE); + mNoneData.setVisibility(View.GONE); + mLoading.setVisibility(View.GONE); + } + + @Override + public void loadError() { + super.loadError(); + toast("加载失败,请检查网络状态"); + mNoConn.setVisibility(View.VISIBLE); + mNoneData.setVisibility(View.GONE); + mLoading.setVisibility(View.GONE); + } + + @Override + public void loadEmpty() { + super.loadEmpty(); + mNoConn.setVisibility(View.GONE); + mNoneData.setVisibility(View.VISIBLE); + mLoading.setVisibility(View.GONE); + } + +} diff --git a/app/src/main/java/com/gh/gamecenter/subject/SubjectTileFragment.java b/app/src/main/java/com/gh/gamecenter/subject/SubjectTileFragment.java index 00a68df0d0..f18abc5eb5 100644 --- a/app/src/main/java/com/gh/gamecenter/subject/SubjectTileFragment.java +++ b/app/src/main/java/com/gh/gamecenter/subject/SubjectTileFragment.java @@ -189,7 +189,7 @@ public class SubjectTileFragment extends BaseFragment implements SubjectTypeAdap switch (view.getId()) { case R.id.subject_tabbar_hot_tv: mTabbarHotTv.setTextColor(Color.WHITE); - mTabbarHotTv.setBackgroundResource(R.drawable.gamedetail_tag_select_bg); + mTabbarHotTv.setBackgroundResource(R.drawable.tabbar_left_bg); mTabbarNewTv.setTextColor(Color.BLACK); mTabbarNewTv.setBackgroundDrawable(new ColorDrawable(0)); mListOrder = ""; @@ -199,7 +199,7 @@ public class SubjectTileFragment extends BaseFragment implements SubjectTypeAdap mTabbarHotTv.setTextColor(Color.BLACK); mTabbarHotTv.setBackgroundDrawable(new ColorDrawable(0)); mTabbarNewTv.setTextColor(Color.WHITE); - mTabbarNewTv.setBackgroundResource(R.drawable.gamedetail_tag_unselect_bg); + mTabbarNewTv.setBackgroundResource(R.drawable.tabbar_right_bg); mListOrder = "latest"; loadData(); break; diff --git a/app/src/main/res/color/tabbar_textcolor_selector.xml b/app/src/main/res/color/tabbar_textcolor_selector.xml new file mode 100644 index 0000000000..db76aa5c0d --- /dev/null +++ b/app/src/main/res/color/tabbar_textcolor_selector.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-xhdpi/kaifu_time_icon.png b/app/src/main/res/drawable-xhdpi/kaifu_time_icon.png new file mode 100644 index 0000000000..0cf26d96a4 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/kaifu_time_icon.png differ diff --git a/app/src/main/res/drawable-xhdpi/tabbar_right_selector.xml b/app/src/main/res/drawable-xhdpi/tabbar_right_selector.xml new file mode 100644 index 0000000000..fe14da9d5f --- /dev/null +++ b/app/src/main/res/drawable-xhdpi/tabbar_right_selector.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/tabbar_center_bg.xml b/app/src/main/res/drawable/tabbar_center_bg.xml new file mode 100644 index 0000000000..bf6acba0f9 --- /dev/null +++ b/app/src/main/res/drawable/tabbar_center_bg.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/tabbar_center_selector.xml b/app/src/main/res/drawable/tabbar_center_selector.xml new file mode 100644 index 0000000000..42d1e86c7c --- /dev/null +++ b/app/src/main/res/drawable/tabbar_center_selector.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/gamedetail_tag_select_bg.xml b/app/src/main/res/drawable/tabbar_left_bg.xml similarity index 100% rename from app/src/main/res/drawable/gamedetail_tag_select_bg.xml rename to app/src/main/res/drawable/tabbar_left_bg.xml diff --git a/app/src/main/res/drawable/tabbar_left_selector.xml b/app/src/main/res/drawable/tabbar_left_selector.xml new file mode 100644 index 0000000000..5d1fa4a05c --- /dev/null +++ b/app/src/main/res/drawable/tabbar_left_selector.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/gamedetail_tag_unselect_bg.xml b/app/src/main/res/drawable/tabbar_right_bg.xml similarity index 100% rename from app/src/main/res/drawable/gamedetail_tag_unselect_bg.xml rename to app/src/main/res/drawable/tabbar_right_bg.xml diff --git a/app/src/main/res/layout/activity_kaifu2.xml b/app/src/main/res/layout/activity_kaifu2.xml new file mode 100644 index 0000000000..58aa60dd14 --- /dev/null +++ b/app/src/main/res/layout/activity_kaifu2.xml @@ -0,0 +1,14 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_kaifu.xml b/app/src/main/res/layout/fragment_kaifu.xml new file mode 100644 index 0000000000..830e7e8d7d --- /dev/null +++ b/app/src/main/res/layout/fragment_kaifu.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_kaifu_vp.xml b/app/src/main/res/layout/fragment_kaifu_vp.xml new file mode 100644 index 0000000000..44a0761e27 --- /dev/null +++ b/app/src/main/res/layout/fragment_kaifu_vp.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/gamedetail_body.xml b/app/src/main/res/layout/gamedetail_body.xml index 5cbbd1104b..bfd81106ec 100644 --- a/app/src/main/res/layout/gamedetail_body.xml +++ b/app/src/main/res/layout/gamedetail_body.xml @@ -82,7 +82,7 @@ android:id = "@+id/gamedetail_tabbar_fuli_tv" android:layout_width = "90dp" android:layout_height = "25dp" - android:background = "@drawable/gamedetail_tag_select_bg" + android:background = "@drawable/tabbar_left_bg" android:gravity = "center" android:text = "@string/game_detail_dongtai" android:textColor = "@android:color/white" diff --git a/app/src/main/res/layout/kaifu_item_time.xml b/app/src/main/res/layout/kaifu_item_time.xml new file mode 100644 index 0000000000..c5f47e8a30 --- /dev/null +++ b/app/src/main/res/layout/kaifu_item_time.xml @@ -0,0 +1,24 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/subject_tiled_body.xml b/app/src/main/res/layout/subject_tiled_body.xml index b1e22ce1ff..21006b58be 100644 --- a/app/src/main/res/layout/subject_tiled_body.xml +++ b/app/src/main/res/layout/subject_tiled_body.xml @@ -31,7 +31,7 @@ android:id = "@+id/subject_tabbar_hot_tv" android:layout_width = "123dp" android:layout_height = "29dp" - android:background = "@drawable/gamedetail_tag_select_bg" + android:background = "@drawable/tabbar_left_bg" android:gravity = "center" android:text = "最热" android:textColor = "@android:color/white"