From 404c605a1e4d1f8f2ae3f91e1eb4162c9bbbbef5 Mon Sep 17 00:00:00 2001 From: kehaoyuan Date: Tue, 22 Aug 2017 10:51:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=BC=80=E6=9C=8D=E8=A1=A8?= =?UTF-8?q?=EF=BC=88=E4=B8=BB=E8=A6=81=E6=98=AF=E5=8D=95=E4=B8=AA=E6=B8=B8?= =?UTF-8?q?=E6=88=8F=E5=BC=80=E6=9C=8D=E7=82=B9=E4=B8=8B=E8=BD=BD=E6=98=AF?= =?UTF-8?q?=E9=9D=9E=E5=B8=B8=E5=8D=A1=EF=BC=8C=E4=BF=AE=E5=A4=8D=E5=90=8E?= =?UTF-8?q?=E8=BF=98=E6=98=AF=E6=9C=89=E7=82=B9=E5=8D=A1=EF=BC=89=EF=BC=8C?= =?UTF-8?q?=E6=8A=8A=E9=A6=96=E9=A1=B5=E6=8E=A7=E5=88=B6=E5=8F=B0=E7=9A=84?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E6=8F=90=E7=A4=BA=E7=BA=A2=E7=82=B9=E7=A7=BB?= =?UTF-8?q?=E5=88=B0=E6=88=91=E7=9A=84=E5=85=89=E7=8E=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gh/gamecenter/KaiFuActivity.java | 2 + .../java/com/gh/gamecenter/MainActivity.java | 2 +- .../gh/gamecenter/fragment/MainFragment.java | 51 ----------------- .../gh/gamecenter/kaifu/KaiFuFragment.java | 56 +++++++++++++++---- .../gh/gamecenter/kaifu/KaiFuVpAdapter.java | 12 ++-- .../gh/gamecenter/kaifu/KaiFuVpFragment.java | 54 +++++++++++++++++- .../gamecenter/personal/PersonalFragment.java | 48 ++++++++++++++++ gradle.properties | 4 +- libraries/LGLibrary | 2 +- 9 files changed, 157 insertions(+), 74 deletions(-) diff --git a/app/src/main/java/com/gh/gamecenter/KaiFuActivity.java b/app/src/main/java/com/gh/gamecenter/KaiFuActivity.java index 2d73ac47bb..3492cf544b 100644 --- a/app/src/main/java/com/gh/gamecenter/KaiFuActivity.java +++ b/app/src/main/java/com/gh/gamecenter/KaiFuActivity.java @@ -85,6 +85,7 @@ public class KaiFuActivity extends BaseActivity { private void resetFragment() { mResetTv.setVisibility(View.GONE); + mKaiFuFragment.onPause(); FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.remove(mGameKaiFuFragment); fragmentTransaction.show(mKaiFuFragment); @@ -99,6 +100,7 @@ public class KaiFuActivity extends BaseActivity { FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.hide(mKaiFuFragment); + mKaiFuFragment.onPause(); Bundle args = new Bundle(); args.putString("gameId", reset.getGameId()); diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index a93a4d2f00..d598ea27be 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -728,7 +728,7 @@ public class MainActivity extends BaseActivity { } private void checkDevice() { -// String deviceId = TokenUtils.getDeviceId(this); // TODO +// String deviceId = TokenUtils.getDeviceId(this); // TODO 还要不要这个判断? if (true) { String content = DeviceUtils.getUserDevice(MainActivity.this).toString(); RequestBody body = RequestBody.create(MediaType.parse("application/json"), content); diff --git a/app/src/main/java/com/gh/gamecenter/fragment/MainFragment.java b/app/src/main/java/com/gh/gamecenter/fragment/MainFragment.java index c95147971d..9966f062a0 100644 --- a/app/src/main/java/com/gh/gamecenter/fragment/MainFragment.java +++ b/app/src/main/java/com/gh/gamecenter/fragment/MainFragment.java @@ -13,11 +13,8 @@ import com.gh.base.fragment.BaseFragment_ViewPager_Checkable; import com.gh.common.util.LoginUtils; import com.gh.gamecenter.MainActivity; import com.gh.gamecenter.R; -import com.gh.gamecenter.db.KeFuMarkReadDao; import com.gh.gamecenter.db.MessageMarkReadDao; import com.gh.gamecenter.db.info.MessageMarkReadInfo; -import com.gh.gamecenter.entity.MessageUnreadEntity; -import com.gh.gamecenter.eventbus.EBReuse; import com.gh.gamecenter.eventbus.EBSkip; import com.gh.gamecenter.eventbus.EBUISwitch; import com.gh.gamecenter.message.MessageFragment; @@ -94,7 +91,6 @@ public class MainFragment extends BaseFragment_ViewPager_Checkable { super.onCreate(savedInstanceState); checkMarkRead(getContext()); // 检查是否有记录已读消息 - checkMessageUnread(getContext()); // 检查是否有未读消息 } @Override @@ -144,15 +140,6 @@ public class MainFragment extends BaseFragment_ViewPager_Checkable { } } - @Subscribe(threadMode = ThreadMode.MAIN) - public void onEventMainThread(EBReuse reuse) { - if (MessageFragment.MESSAGE_READ_OVER.equals(reuse.getType())) { - if (mMessageHint != null) { - mMessageHint.setVisibility(View.GONE); - } - } - } - private void getSearchHints() { RetrofitManager.getApi().getSearchHints() .subscribeOn(Schedulers.io()) @@ -173,44 +160,6 @@ public class MainFragment extends BaseFragment_ViewPager_Checkable { }); } - private void checkMessageUnread(final Context context) { - if (context == null) return; - - RetrofitManager.getMessage() - .getMessageUnread(LoginUtils.getToken(context)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Response() { - @Override - public void onResponse(MessageUnreadEntity response) { - super.onResponse(response); - if (response != null && response.getKefuList() != null && response.getKefuList().size() > 0) { - KeFuMarkReadDao dao = new KeFuMarkReadDao(context); - for (int i = 0; i < response.getKefuList().size(); i++) { - if (dao.isMarkRead(response.getKefuList().get(i))) { - response.getKefuList().remove(i); - i--; - } - } - - if (response.getKefuList() != null && response.getKefuList().size() > 0) { - mMessageHint.setVisibility(View.VISIBLE); - } - - } - - if (response != null && response.getComment() > 0) { - mMessageHint.setVisibility(View.VISIBLE); - } - } - - @Override - public void onFailure(HttpException e) { - - } - }); - } - private void checkMarkRead(Context context) { MessageMarkReadDao readDao = new MessageMarkReadDao(context); List readInfos = readDao.getAll(); diff --git a/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuFragment.java b/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuFragment.java index 1553a4440a..5514b213d7 100644 --- a/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuFragment.java +++ b/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuFragment.java @@ -8,6 +8,7 @@ import android.view.View; import android.widget.CheckedTextView; import android.widget.LinearLayout; +import com.gh.base.AppController; import com.gh.base.adapter.FragmentAdapter; import com.gh.base.fragment.BaseFragment; import com.gh.gamecenter.R; @@ -35,6 +36,8 @@ public class KaiFuFragment extends BaseFragment { @BindView(R.id.kaifu_content_vp) ViewPager mKaifuContentVp; + private List mFragments; + @Override protected int getLayoutId() { @@ -45,15 +48,15 @@ public class KaiFuFragment extends BaseFragment { public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - List fragments = new ArrayList<>(); + mFragments = new ArrayList<>(); for (int i = 0; i < 3; i++) { KaiFuVpFragment kaiFuVpFragment = new KaiFuVpFragment(); if (getArguments() != null) { kaiFuVpFragment.setArguments(getArguments()); } - fragments.add(kaiFuVpFragment); + mFragments.add(kaiFuVpFragment); } - FragmentAdapter fragmentAdapter = new FragmentAdapter(getChildFragmentManager(), fragments); + FragmentAdapter fragmentAdapter = new FragmentAdapter(getChildFragmentManager(), mFragments); setTabbarPosition(0); mKaifuContentVp.setAdapter(fragmentAdapter); @@ -69,28 +72,59 @@ public class KaiFuFragment extends BaseFragment { } @Override - public void onPageScrollStateChanged(int state) { - + public void onPageScrollStateChanged(final int state) { + setPageScrollState(state); } }); } + @Override + public void onPause() { + super.onPause(); + for (Fragment fragment : mFragments) { + fragment.onPause(); + } + } + + @Override + public void onResume() { + super.onResume(); + for (Fragment fragment : mFragments) { + fragment.onResume(); + } + } + @OnClick({R.id.kaifu_tabbar_today, R.id.kaifu_tabbar_tomorrow, R.id.kaifu_tabbar_future}) public void onViewClicked(View view) { + int index = 0; switch (view.getId()) { case R.id.kaifu_tabbar_today: - setTabbarPosition(0); - mKaifuContentVp.setCurrentItem(0); + index = 0; break; case R.id.kaifu_tabbar_tomorrow: - setTabbarPosition(1); - mKaifuContentVp.setCurrentItem(1); + index = 1; break; case R.id.kaifu_tabbar_future: - setTabbarPosition(2); - mKaifuContentVp.setCurrentItem(2); + index = 2; break; } + + setTabbarPosition(index); + mKaifuContentVp.setCurrentItem(index); + setPageScrollState(1); + } + + private void setPageScrollState(final int state) { + AppController.MAIN_EXECUTOR.execute(new Runnable() { + @Override + public void run() { + for (Fragment fragment : mFragments) { + if (fragment.getUserVisibleHint() && fragment instanceof KaiFuVpFragment) { + ((KaiFuVpFragment) fragment).vpScrollState(state); + } + } + } + }); } private void setTabbarPosition(int index) { diff --git a/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpAdapter.java b/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpAdapter.java index 738127d87a..a638812b93 100644 --- a/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpAdapter.java @@ -73,7 +73,6 @@ public class KaiFuVpAdapter extends BaseRecyclerAdapter { mOnCallBackListener = onCallBackListener; mLocationMap = new ArrayMap<>(); mEntityList = new ArrayList<>(); - addList(0); } public void addList(int offset) { @@ -91,9 +90,6 @@ public class KaiFuVpAdapter extends BaseRecyclerAdapter { if (mEntityList.size() == 0) { // TODO 获取开服表当前整点时间位置 } - - if (response.size() < 20) mIsRemove = true; - GameManager manager = new GameManager(mContext); for (int i = 0; i < response.size(); i++) { // 初始化游戏状态 @@ -143,6 +139,11 @@ public class KaiFuVpAdapter extends BaseRecyclerAdapter { mEntityList.addAll(response); notifyItemRangeInserted(mEntityList.size() - response.size(), response.size()); + if (response.size() < 20) { + mIsRemove = true; + notifyItemChanged(getItemCount() - 1); + } + initLocationMap(); if (mEntityList.size() == 0) { @@ -154,15 +155,16 @@ public class KaiFuVpAdapter extends BaseRecyclerAdapter { mIsLoaded = true; } + @Override public void onFailure(HttpException e) { super.onFailure(e); - mIsLoaded = true; if (mEntityList.size() == 0) { mOnCallBackListener.loadError(); } else { mIsNetworkError = true; + notifyItemChanged(getItemCount() - 1); } } }); diff --git a/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpFragment.java b/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpFragment.java index 726e432bf7..c377910919 100644 --- a/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpFragment.java +++ b/app/src/main/java/com/gh/gamecenter/kaifu/KaiFuVpFragment.java @@ -2,6 +2,7 @@ package com.gh.gamecenter.kaifu; import android.os.Bundle; import android.support.annotation.Nullable; +import android.support.v4.view.ViewPager; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; @@ -22,6 +23,7 @@ import com.gh.gamecenter.entity.KaiFuServerEntity; import com.gh.gamecenter.eventbus.EBDownloadStatus; import com.lightgame.download.DataWatcher; import com.lightgame.download.DownloadEntity; +import com.lightgame.utils.Utils; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; @@ -30,6 +32,8 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import java.util.Locale; +import java.util.Timer; +import java.util.TimerTask; import butterknife.BindView; import butterknife.OnClick; @@ -60,11 +64,14 @@ public class KaiFuVpFragment extends BaseFragment { private String mGameId; + private boolean mIsRefershDownload; + private DataWatcher dataWatcher = new DataWatcher() { @Override public void onDataChanged(DownloadEntity downloadEntity) { ArrayList locationList = mAdapter.getLocationMap().get(downloadEntity.getPackageName()); - if (locationList != null) { + if (locationList != null && mIsRefershDownload) { + Utils.log("===============mGameId::" + mGameId); GameEntity gameEntity; for (int location : locationList) { gameEntity = mAdapter.getDataList().get(location); @@ -111,6 +118,12 @@ public class KaiFuVpFragment extends BaseFragment { && newState == RecyclerView.SCROLL_STATE_IDLE && !mAdapter.isRemove() && mAdapter.isLoaded()) { mAdapter.addList(mAdapter.getDataListCount()); } + + if (newState == RecyclerView.SCROLL_STATE_IDLE) { + mIsRefershDownload = true; + } else { + mIsRefershDownload = false; + } } @Override @@ -153,11 +166,46 @@ public class KaiFuVpFragment extends BaseFragment { } + @Override + public void setUserVisibleHint(boolean isVisibleToUser) { + super.setUserVisibleHint(isVisibleToUser); + if (getUserVisibleHint()) { + mIsRefershDownload = true; + if (mLoading == null) { + Timer timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + setUserVisibleHint(true); + } + }, 500); + } else if (mLoading.getVisibility() == View.VISIBLE) { + mAdapter.addList(0); + } + } else { + mIsRefershDownload = false; + } + } + + public void vpScrollState(int status) { + if (status == ViewPager.SCROLL_STATE_IDLE) { + if (getUserVisibleHint()) { + mIsRefershDownload = true; + } + } else if (status == ViewPager.SCROLL_STATE_DRAGGING) { + if (getUserVisibleHint()) { + mIsRefershDownload = false; + } + } + } + @Override public void onResume() { super.onResume(); - mAdapter.notifyDataSetChanged(); - DownloadManager.getInstance(getContext()).addObserver(dataWatcher); + if (mAdapter != null) { + mAdapter.notifyDataSetChanged(); + DownloadManager.getInstance(getContext()).addObserver(dataWatcher); + } } @Override diff --git a/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java b/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java index 74e7dcfb9d..d295c05ea8 100644 --- a/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java +++ b/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java @@ -1,5 +1,6 @@ package com.gh.gamecenter.personal; +import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; @@ -29,10 +30,13 @@ import com.gh.gamecenter.ShareGhActivity; import com.gh.gamecenter.SuggestSelectActivity; import com.gh.gamecenter.SuggestionActivity; import com.gh.gamecenter.UserInfoActivity; +import com.gh.gamecenter.db.KeFuMarkReadDao; import com.gh.gamecenter.entity.AppEntity; +import com.gh.gamecenter.entity.MessageUnreadEntity; import com.gh.gamecenter.entity.UserInfoEntity; import com.gh.gamecenter.eventbus.EBNetworkState; import com.gh.gamecenter.eventbus.EBReuse; +import com.gh.gamecenter.message.MessageFragment; import com.gh.gamecenter.retrofit.Response; import com.gh.gamecenter.retrofit.RetrofitManager; import com.lightgame.config.CommonDebug; @@ -45,6 +49,7 @@ import org.json.JSONObject; import butterknife.BindView; import butterknife.OnClick; +import retrofit2.HttpException; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; @@ -153,9 +158,14 @@ public class PersonalFragment extends BaseFragment implements GetLoginDataUtils. if (reuse.getType().equals(LOGIN_TAG)) { // 登入 mUserInfoEntity = LoginUtils.getUserInfo(getContext()); changeLoginState(true); + checkMessageUnread(getContext()); // 检查是否有未读消息 } else if (reuse.getType().equals(LOGOUT_TAG)) { // 登出 changeLoginState(false); mUserInfoEntity = null; + } else if (MessageFragment.MESSAGE_READ_OVER.equals(reuse.getType())) { // 消息阅读完成 + if (mLoginMessgeHint != null) { + mLoginMessgeHint.setVisibility(View.GONE); + } } } @@ -227,6 +237,44 @@ public class PersonalFragment extends BaseFragment implements GetLoginDataUtils. } } + private void checkMessageUnread(final Context context) { + if (context == null) return; + + RetrofitManager.getMessage() + .getMessageUnread(LoginUtils.getToken(context)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Response() { + @Override + public void onResponse(MessageUnreadEntity response) { + super.onResponse(response); + if (response != null && response.getKefuList() != null && response.getKefuList().size() > 0) { + KeFuMarkReadDao dao = new KeFuMarkReadDao(context); + for (int i = 0; i < response.getKefuList().size(); i++) { + if (dao.isMarkRead(response.getKefuList().get(i))) { + response.getKefuList().remove(i); + i--; + } + } + + if (response.getKefuList() != null && response.getKefuList().size() > 0) { + mLoginMessgeHint.setVisibility(View.VISIBLE); + } + + } + + if (response != null && response.getComment() > 0) { + mLoginMessgeHint.setVisibility(View.VISIBLE); + } + } + + @Override + public void onFailure(HttpException e) { + + } + }); + } + private void changeLoginState(boolean isLogin) { if (isLogin) { if (mUserInfoEntity != null) { diff --git a/gradle.properties b/gradle.properties index c9c792bc56..2cc2ff7655 100644 --- a/gradle.properties +++ b/gradle.properties @@ -43,9 +43,9 @@ UMENG_MESSAGE_SECRET=8bcce6bed547ee624f5c2cc64d39a9e9 DEV_API_HOST=http\://dev.api.ghzs666.com/v3d0/ DEV_DATA_HOST=http\://data.ghzs666.com/ DEV_LIBAO_HOST=http\://dev.libao.ghzs666.com/v1d2/ -DEV_MESSAGE_HOST=http\://dev.message.ghzs666.com/v1d1/ +DEV_MESSAGE_HOST=http\://dev.message.ghzs666.com/v1d2/ DEV_USER_HOST=http\://dev.user.ghzs666.com/v1d2/ -DEV_COMMENT_HOST=http\://dev.comment.ghzs666.com/v1d2/ +DEV_COMMENT_HOST=http\://dev.comment.ghzs666.com/v1d3/ DEV_USERSEA_HOST=http\://dev.usersea.ghzs666.com/v1d0/ API_HOST=http\://api.ghzs666.com/v2d6/ diff --git a/libraries/LGLibrary b/libraries/LGLibrary index edb6cfeccc..570837f0a5 160000 --- a/libraries/LGLibrary +++ b/libraries/LGLibrary @@ -1 +1 @@ -Subproject commit edb6cfeccc2c939b1453936a123f085567bd9fc1 +Subproject commit 570837f0a508c6bcd33ce8c0dce57f905684672d