package com.gh.gamecenter.message; import android.content.Context; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.util.DisplayMetrics; import android.view.View; import android.widget.CheckedTextView; import android.widget.LinearLayout; import android.widget.TextView; import com.gh.base.fragment.BaseFragment_ViewPager_Checkable; import com.gh.common.util.DisplayUtils; import com.gh.common.util.RandomUtils; import com.gh.gamecenter.R; import com.gh.gamecenter.entity.MessageUnreadEntity; import com.gh.gamecenter.eventbus.EBReuse; import com.gh.gamecenter.eventbus.EBUISwitch; import com.gh.gamecenter.retrofit.Response; import com.gh.gamecenter.retrofit.RetrofitManager; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import java.util.List; import butterknife.BindView; import okhttp3.ResponseBody; import retrofit2.HttpException; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; /** * Created by khy on 2017/4/5. * 首页-消息 */ public class MessageCenterFragment extends BaseFragment_ViewPager_Checkable { @BindView(R.id.message_comment_hint) TextView mMessageCommentHint; @BindView(R.id.message_kefu_hint) View mMessageKefuHint; @BindView(R.id.message_slide_line) View mMessageSlideLine; @BindView(R.id.message_comment_tv) CheckedTextView mMessageCommentTv; @BindView(R.id.message_kefu_tv) CheckedTextView mMessageKefuTv; private LinearLayout.LayoutParams mLayoutParams; public static final int INDEX_COMMENT = 0; public static final int INDEX_KEFU = 1; public static final String MESSAGE_READ_OVER = "messageReadOver"; public static final String EB_MESSAGEFRAGMENT_TAG = "MessageFragment"; public static final String EB_KEFUMARKREADCOUNT = "kefuMarkReadCount"; public static final String EB_COMMENTMARKREAD = "commentMarkRead"; private int mWidth; private int mKeFuUnreadCount; public static MessageCenterFragment newInstance() { final Bundle args = new Bundle(1); args.putInt(ARGS_INDEX, INDEX_COMMENT); final MessageCenterFragment fragment = new MessageCenterFragment(); fragment.setArguments(args); return fragment; } @Override protected int getLayoutId() { return R.layout.fragment_message; } @Override protected int getCheckableGroupId() { return R.id.lightgame_tab_container; } @Override protected int getViewPagerId() { return R.id.lightgame_tab_viewpager; } @Override protected boolean getSmoothScroll() { return true; } @Override protected void initFragmentList(List fragments) { fragments.add(new CommentFragment()); fragments.add(new KeFuFragment()); } @Override protected void initView(View view) { super.initView(view); DisplayMetrics outMetrics = new DisplayMetrics(); getActivity().getWindowManager().getDefaultDisplay().getMetrics(outMetrics); mWidth = outMetrics.widthPixels / 2; mLayoutParams = new LinearLayout.LayoutParams((int) (mWidth * 0.6), DisplayUtils.dip2px(getContext(), 2)); mLayoutParams.leftMargin = RandomUtils.getInt(mWidth * (mCheckedIndex + 0.2f)); mMessageSlideLine.setLayoutParams(mLayoutParams); initMessageUnread(getContext()); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setNavigationTitle(getString(R.string.title_message_center)); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); view.postDelayed(new Runnable() { @Override public void run() { EventBus.getDefault().post(new EBUISwitch(EB_MESSAGEFRAGMENT_TAG, mCheckedIndex)); } }, 100); } private void initMessageUnread(final Context context) { RetrofitManager.getInstance(context).getApi() .getMessageUnread() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Response() { @Override public void onResponse(MessageUnreadEntity response) { super.onResponse(response); if (response.getComment() > 0) { mMessageCommentHint.setVisibility(View.VISIBLE); mMessageCommentHint.setText(String.valueOf(response.getComment())); } if (response.getKefuList() != null && response.getKefuList().size() > 0) { mKeFuUnreadCount = response.getKefuList().size(); if (mKeFuUnreadCount != 0) { mMessageKefuHint.setVisibility(View.VISIBLE); } } } @Override public void onFailure(HttpException e) { } }); } // 隐藏未读提示 @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMainThread(EBUISwitch reuse) { if (EB_KEFUMARKREADCOUNT.equals(reuse.getFrom()) && reuse.getPosition() == mKeFuUnreadCount) { mMessageKefuHint.setVisibility(View.GONE); if (mMessageKefuHint.getVisibility() == View.GONE && mMessageCommentHint.getVisibility() == View.GONE) { EventBus.getDefault().post(new EBReuse(MESSAGE_READ_OVER)); } } else if (EB_COMMENTMARKREAD.equals(reuse.getFrom()) && mMessageCommentHint.getVisibility() == View.VISIBLE) { mMessageCommentHint.setVisibility(View.GONE); postMarkCommentRead(getContext()); if (mMessageKefuHint.getVisibility() == View.GONE && mMessageCommentHint.getVisibility() == View.GONE) { EventBus.getDefault().post(new EBReuse(MESSAGE_READ_OVER)); } } } private void postMarkCommentRead(final Context context) { RetrofitManager.getInstance(context).getApi() .postMarkCommentRead() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Response() { @Override public void onResponse(ResponseBody response) { super.onResponse(response); } @Override public void onFailure(HttpException e) { super.onFailure(e); } }); } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { super.onPageScrolled(position, positionOffset, positionOffsetPixels); if (positionOffset != 0) { mLayoutParams.leftMargin = RandomUtils.getInt(mWidth * (position + positionOffset + 0.2f)); // mMessageSlideLine.setLayoutParams(mLayoutParams); mMessageSlideLine.requestLayout(); } } @Override protected void onPageChanged(int index) { super.onPageChanged(index); EventBus.getDefault().post(new EBUISwitch(EB_MESSAGEFRAGMENT_TAG, index)); if (index == 0) { mMessageCommentTv.setChecked(true); mMessageKefuTv.setChecked(false); } else { mMessageCommentTv.setChecked(false); mMessageKefuTv.setChecked(true); } } }