diff --git a/app/src/main/java/com/gh/common/util/DownloadHelper.kt b/app/src/main/java/com/gh/common/util/DownloadHelper.kt index 30612f07a8..e51c45f7c0 100644 --- a/app/src/main/java/com/gh/common/util/DownloadHelper.kt +++ b/app/src/main/java/com/gh/common/util/DownloadHelper.kt @@ -43,6 +43,7 @@ object DownloadHelper { override fun onFailure(e: HttpException?) { e?.printStackTrace() + block.invoke() } }) } diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index ae1ad26dd6..3185182e26 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -16,6 +16,7 @@ import android.os.SystemClock; import android.preference.PreferenceManager; import android.provider.Settings; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.text.Html; import android.text.Spanned; import android.text.TextUtils; @@ -513,7 +514,7 @@ public class MainActivity extends BaseActivity { for (String id : concernIdList) { sequences.add(RetrofitManager.getInstance(this).getApi().getGameDigest(id)); } - Observable.merge(sequences) + Observable.mergeDelayError(sequences) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Response() { @@ -535,6 +536,11 @@ public class MainActivity extends BaseActivity { } } + @Override + public void onFailure(@Nullable HttpException e) { + update(); + } + @Override public void onComplete() { update(); @@ -615,7 +621,7 @@ public class MainActivity extends BaseActivity { for (InstallInfo info : mInstallManager.getAllInstall()) { sequences.add(RetrofitManager.getInstance(this).getApi().getGameDigest(info.getId())); } - Observable.merge(sequences) + Observable.mergeDelayError(sequences) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Response() { @@ -624,6 +630,11 @@ public class MainActivity extends BaseActivity { list.add(response); } + @Override + public void onFailure(@Nullable HttpException e) { + processPluginData(list); + } + @Override public void onComplete() { processPluginData(list); diff --git a/app/src/main/java/com/gh/gamecenter/SkipActivity.java b/app/src/main/java/com/gh/gamecenter/SkipActivity.java index 3046bc568b..d85d41703d 100644 --- a/app/src/main/java/com/gh/gamecenter/SkipActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SkipActivity.java @@ -75,7 +75,7 @@ public class SkipActivity extends BaseActivity { DirectUtils.directToFeedback(this, content, ENTRANCE_BROWSER); break; case HOST_DOWNLOAD: - DirectUtils.directToDownloadManagerAndStartDownload(this, id, uri.getQueryParameter(KEY_PACKAGENAME), ENTRANCE_BROWSER); + DirectUtils.directToDownloadManagerAndStartUpdate(this, id, uri.getQueryParameter(KEY_PACKAGENAME), ENTRANCE_BROWSER); break; case HOST_ANSWER: DirectUtils.directToAnswerDetail(this, id, ENTRANCE_BROWSER, "浏览器"); diff --git a/app/src/main/java/com/gh/gamecenter/adapter/InstallFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/InstallFragmentAdapter.java index 0f6d9461aa..e46d1f6e7b 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/InstallFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/InstallFragmentAdapter.java @@ -6,6 +6,7 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.graphics.drawable.Drawable; import android.preference.PreferenceManager; +import android.support.annotation.Nullable; import android.support.v4.util.ArrayMap; import android.support.v7.widget.RecyclerView.ViewHolder; import android.view.View; @@ -53,6 +54,7 @@ import java.util.Map; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.schedulers.Schedulers; +import retrofit2.HttpException; /** * Created by LGT on 2016/8/12. @@ -249,7 +251,7 @@ public class InstallFragmentAdapter extends BaseRecyclerAdapter { } @Override - public void onError(Throwable e) { + public void onFailure(@Nullable HttpException e) { processingData(result); } diff --git a/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragment.java b/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragment.java index b31eb6e2e5..664c41ba7a 100644 --- a/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragment.java +++ b/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragment.java @@ -38,7 +38,11 @@ public class GameUpdateFragment extends BaseFragment { @BindView(R.id.gameupdate_ll_loading) LinearLayout mGameUpdateLoading; @BindView(R.id.reuse_nodata_skip) - LinearLayout mGameUpdateNodataSkip; + LinearLayout mGameUpdateNoDataSkip; + @BindView(R.id.reuse_nodata_skip_tv_hint) + TextView mNoDataHintTv; + @BindView(R.id.reuse_nodata_skip_tv_btn) + TextView mNoDataHintBtn; private GameUpdateFragmentAdapter mAdapter; @@ -56,34 +60,23 @@ public class GameUpdateFragment extends BaseFragment { boolean isUpdate = intent.getBooleanExtra(EntranceUtils.KEY_AUTO_UPDATE, false); String entrance = intent.getStringExtra(EntranceUtils.KEY_ENTRANCE); - mGameUpdateLoading = (LinearLayout) view.findViewById(R.id.gameupdate_ll_loading); - - mGameUpdateNodataSkip = (LinearLayout) view.findViewById(R.id.reuse_nodata_skip); - mGameUpdateNodataSkip.setVisibility(View.GONE); - TextView reuse_nodata_skip_tv_hint = (TextView) view.findViewById(R.id.reuse_nodata_skip_tv_hint); - reuse_nodata_skip_tv_hint.setText("暂无更新"); - final TextView reuse_nodata_skip_tv_btn = (TextView) view.findViewById(R.id.reuse_nodata_skip_tv_btn); - reuse_nodata_skip_tv_btn.setText("去首页看看"); - reuse_nodata_skip_tv_btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Intent intent = new Intent(getActivity(), MainActivity.class); - intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); - getActivity().startActivity(intent); - reuse_nodata_skip_tv_btn.postDelayed(new Runnable() { - @Override - public void run() { - EventBus.getDefault().post(new EBSkip(MainActivity.EB_SKIP_GAMEFRAGMENT, 0)); - } - }, 300); - } + mGameUpdateNoDataSkip.setVisibility(View.GONE); + mNoDataHintTv.setText("暂无更新"); + mNoDataHintBtn.setText("去首页看看"); + mNoDataHintBtn.setOnClickListener(v -> { + Intent intent1 = new Intent(getActivity(), MainActivity.class); + intent1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + getActivity().startActivity(intent1); + mNoDataHintBtn.postDelayed(() -> { + EventBus.getDefault().post(new EBSkip(MainActivity.EB_SKIP_GAMEFRAGMENT, 0)); + }, 300); }); mGameUpdateRv.setHasFixedSize(true); mGameUpdateRv.setLayoutManager(new LinearLayoutManager(getActivity())); mAdapter = new GameUpdateFragmentAdapter(getActivity(), mGameUpdateLoading, - mGameUpdateNodataSkip, packageName, isUpdate, entrance); + mGameUpdateNoDataSkip, packageName, isUpdate, entrance); mGameUpdateRv.setAdapter(mAdapter); } @@ -114,7 +107,7 @@ public class GameUpdateFragment extends BaseFragment { } else if ("卸载".equals(busFour.getType())) { mAdapter.removeUpdate(busFour.getPackageName()); if (mAdapter.getUpdateList().isEmpty()) { - mGameUpdateNodataSkip.setVisibility(View.VISIBLE); + mGameUpdateNoDataSkip.setVisibility(View.VISIBLE); } } EventBus.getDefault().post(new EBDownloadChanged("update", View.VISIBLE, -1)); diff --git a/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragmentAdapter.java index e58b7e05d7..f59777a01b 100644 --- a/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragmentAdapter.java @@ -2,6 +2,7 @@ package com.gh.gamecenter.download; import android.app.Activity; import android.graphics.Color; +import android.support.annotation.Nullable; import android.support.v4.content.ContextCompat; import android.support.v4.util.ArrayMap; import android.support.v7.widget.RecyclerView; @@ -156,7 +157,7 @@ class GameUpdateFragmentAdapter extends BaseRecyclerAdapter { sequences.add(RetrofitManager.getInstance(mContext).getApi().getGameUpdateById((String) gh_id)); } } - Observable.merge(sequences) + Observable.mergeDelayError(sequences) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Response() { @@ -165,6 +166,11 @@ class GameUpdateFragmentAdapter extends BaseRecyclerAdapter { processingData(); } + @Override + public void onFailure(@Nullable HttpException e) { + processingData(); + } + @Override public void onNext(GameEntity response) { List update = PackageUtils.isCanUpdate(mContext, response); @@ -180,9 +186,7 @@ class GameUpdateFragmentAdapter extends BaseRecyclerAdapter { public void init() { updateList.clear(); - for (GameUpdateEntity updateEntity : PackageManager.INSTANCE.getUpdateList()) { - updateList.add(updateEntity); - } + updateList.addAll(PackageManager.INSTANCE.getUpdateList()); sortUpdateList(updateList); initLocationMap(); @@ -245,7 +249,7 @@ class GameUpdateFragmentAdapter extends BaseRecyclerAdapter { } sortUpdateList(updateList); - notifyItemRangeInserted(0, 1 + updateList.size()); + notifyDataSetChanged(); EventBus.getDefault().post(new EBDownloadChanged("update", View.VISIBLE, updateList.size())); initLocationMap(); diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/XinXiAdapter.java b/app/src/main/java/com/gh/gamecenter/gamedetail/XinXiAdapter.java index bf2f367621..19ce70a1fd 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/XinXiAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/XinXiAdapter.java @@ -1,6 +1,7 @@ package com.gh.gamecenter.gamedetail; import android.content.Context; +import android.support.annotation.Nullable; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; @@ -217,30 +218,18 @@ public class XinXiAdapter extends BaseRecyclerAdapter { for (String id : ids) { sequences.add(RetrofitManager.getInstance(mContext).getApi().getGameDigest(id)); } - Observable.merge(sequences) + Observable.mergeDelayError(sequences) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Response() { @Override public void onComplete() { - if (result.size() != 0) { - GameManager manager = new GameManager(mContext); - for (GameEntity entity : result) { - entity.setEntryMap(DownloadManager.getInstance(mContext).getEntryMap(entity.getName())); - manager.addOrUpdate(entity); - } + initGameData(result); + } - mGameList.addAll(result); - - if (mGameList.size() < 3) { - getRemenkapai(3 - mGameList.size()); - } else { - initPosition(); - notifyDataSetChanged(); - } - } else { - getRemenkapai(3); - } + @Override + public void onFailure(@Nullable HttpException e) { + initGameData(result); } @Override @@ -251,6 +240,28 @@ public class XinXiAdapter extends BaseRecyclerAdapter { }); } + + private void initGameData(List result) { + if (result.size() != 0) { + GameManager manager = new GameManager(mContext); + for (GameEntity entity : result) { + entity.setEntryMap(DownloadManager.getInstance(mContext).getEntryMap(entity.getName())); + manager.addOrUpdate(entity); + } + + mGameList.addAll(result); + + if (mGameList.size() < 3) { + getRemenkapai(3 - mGameList.size()); + } else { + initPosition(); + notifyDataSetChanged(); + } + } else { + getRemenkapai(3); + } + } + @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view; diff --git a/app/src/main/java/com/gh/gamecenter/info/ConcernFragment.java b/app/src/main/java/com/gh/gamecenter/info/ConcernFragment.java index 8c91e3449c..7b919589cd 100644 --- a/app/src/main/java/com/gh/gamecenter/info/ConcernFragment.java +++ b/app/src/main/java/com/gh/gamecenter/info/ConcernFragment.java @@ -73,6 +73,7 @@ import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.functions.Consumer; import io.reactivex.functions.Function; import io.reactivex.schedulers.Schedulers; +import retrofit2.HttpException; import static com.gh.gamecenter.personal.PersonalFragment.LOGIN_TAG; @@ -260,10 +261,16 @@ public class ConcernFragment extends NormalFragment implements SwipeRefreshLayou sequences.add(RetrofitManager.getInstance(getContext()).getApi().getGameDigest(installedList.get(i).getId())); } } - Observable.merge(sequences) + Observable.mergeDelayError(sequences) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Response() { + + @Override + public void onFailure(@Nullable HttpException e) { + initRecommendConcern(installedList, gameList); + } + @Override public void onComplete() { initRecommendConcern(installedList, gameList); diff --git a/app/src/main/java/com/gh/gamecenter/personal/installed/InstallGameViewModel.kt b/app/src/main/java/com/gh/gamecenter/personal/installed/InstallGameViewModel.kt index d580981e07..4d595e9b77 100644 --- a/app/src/main/java/com/gh/gamecenter/personal/installed/InstallGameViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/personal/installed/InstallGameViewModel.kt @@ -19,6 +19,7 @@ import com.halo.assistant.HaloApp import io.reactivex.Observable import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers +import retrofit2.HttpException import java.util.* import kotlin.collections.ArrayList @@ -124,36 +125,11 @@ class InstallGameViewModel(application: Application) : AndroidViewModel(applicat .observeOn(AndroidSchedulers.mainThread()) .subscribe(object : Response() { override fun onComplete() { - // 过滤未安装的apkEntity - if (result.size != 0) { - for (i in 0 until sortList.size) { - val id = sortList[i].id - for (entity in result) { - if (entity.id == id && entity.getApk().size > 1) { - for (apkEntity in entity.getApk()) { - if (sortList[i].packageName == apkEntity.packageName) { - val list = ArrayList() - list.add(apkEntity) - entity.setApk(list) - break - } - } - break - } - } - } - // 更新数据库内容 - val manager = GameManager(getApplication()) - for (entity in result) { - entity.setEntryMap(DownloadManager.getInstance(getApplication()).getEntryMap(entity.name)) - manager.addOrUpdate(entity) - } + initGameData(result, sortList) + } - mCacheGameData = result - gameEntity.postValue(result) - } else { - gameEntity.postValue(null) - } + override fun onFailure(e: HttpException?) { + initGameData(result, sortList) } override fun onNext(response: GameEntity) { @@ -162,4 +138,37 @@ class InstallGameViewModel(application: Application) : AndroidViewModel(applicat } }) } + + private fun initGameData(result: ArrayList, sortList: ArrayList) { + // 过滤未安装的apkEntity + if (result.size != 0) { + for (i in 0 until sortList.size) { + val id = sortList[i].id + for (entity in result) { + if (entity.id == id && entity.getApk().size > 1) { + for (apkEntity in entity.getApk()) { + if (sortList[i].packageName == apkEntity.packageName) { + val list = ArrayList() + list.add(apkEntity) + entity.setApk(list) + break + } + } + break + } + } + } + // 更新数据库内容 + val manager = GameManager(getApplication()) + for (entity in result) { + entity.setEntryMap(DownloadManager.getInstance(getApplication()).getEntryMap(entity.name)) + manager.addOrUpdate(entity) + } + + mCacheGameData = result + gameEntity.postValue(result) + } else { + gameEntity.postValue(null) + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/qa/column/AskColumnAdapter.kt b/app/src/main/java/com/gh/gamecenter/qa/column/AskColumnAdapter.kt index d9f99c9599..cffa7dfa9e 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/column/AskColumnAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/column/AskColumnAdapter.kt @@ -36,7 +36,7 @@ class AskColumnAdapter(context: Context) : BaseRecyclerAdapter { } @Override - public void onError(Throwable e) { + public void onFailure(@Nullable HttpException e) { initRecommendGame(); } diff --git a/app/src/main/res/layout/ask_questions_hot_item.xml b/app/src/main/res/layout/ask_questions_hot_item.xml index 4222196738..df1f441933 100644 --- a/app/src/main/res/layout/ask_questions_hot_item.xml +++ b/app/src/main/res/layout/ask_questions_hot_item.xml @@ -35,8 +35,8 @@ diff --git a/app/src/main/res/layout/personal_home_item.xml b/app/src/main/res/layout/personal_home_item.xml index 5f808e1a01..6a162ff70a 100644 --- a/app/src/main/res/layout/personal_home_item.xml +++ b/app/src/main/res/layout/personal_home_item.xml @@ -45,8 +45,8 @@ android:id = "@+id/user_auth_icon" imageUrl = "@{personalEntity.auth.icon}" visibleGone = "@{personalEntity.auth == null? false: true}" - android:layout_width = "6.7dp" - android:layout_height = "6.7dp" + android:layout_width = "12dp" + android:layout_height = "12dp" android:layout_alignParentBottom = "true" android:layout_alignParentRight = "true" />