Files
assistant-android/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java

390 lines
16 KiB
Java

package com.gh.gamecenter.personal;
import android.app.Dialog;
import android.arch.lifecycle.Observer;
import android.arch.lifecycle.ViewModelProviders;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.Nullable;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.facebook.drawee.view.SimpleDraweeView;
import com.gh.base.fragment.BaseFragment;
import com.gh.common.util.DataCollectionUtils;
import com.gh.gamecenter.DataUtils;
import com.gh.common.util.DialogUtils;
import com.gh.common.util.GetLoginDataUtils;
import com.gh.common.util.PackageUtils;
import com.gh.gamecenter.CollectionActivity;
import com.gh.gamecenter.InstallActivity;
import com.gh.gamecenter.LibaoActivity;
import com.gh.gamecenter.LoginActivity;
import com.gh.gamecenter.MessageActivity;
import com.gh.gamecenter.R;
import com.gh.gamecenter.ShareGhActivity;
import com.gh.gamecenter.SuggestSelectActivity;
import com.gh.gamecenter.SuggestionActivity;
import com.gh.gamecenter.UserInfoActivity;
import com.gh.gamecenter.entity.AppEntity;
import com.gh.gamecenter.entity.LoginTokenEntity;
import com.gh.gamecenter.entity.MessageUnreadEntity;
import com.gh.gamecenter.entity.UserInfoEntity;
import com.gh.gamecenter.eventbus.EBConcernChanged;
import com.gh.gamecenter.eventbus.EBNetworkState;
import com.gh.gamecenter.eventbus.EBReuse;
import com.gh.gamecenter.login.ApiResponse;
import com.gh.gamecenter.login.LoginTag;
import com.gh.gamecenter.login.UserViewModel;
import com.gh.gamecenter.manager.UserManager;
import com.gh.gamecenter.message.MessageFragment;
import com.gh.gamecenter.retrofit.Response;
import com.gh.gamecenter.retrofit.RetrofitManager;
import com.halo.assistant.HaloApp;
import com.halo.assistant.ui.IntentFactory;
import com.halo.assistant.fragment.SettingsFragment;
import com.lightgame.config.CommonDebug;
import com.lightgame.utils.Utils;
import com.tencent.connect.common.Constants;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import org.json.JSONObject;
import butterknife.BindView;
import butterknife.OnClick;
import retrofit2.HttpException;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
/**
* @author 温冠超
* 294299195@qq.com
* 2015-8-8 我的光环页面
*/
public class PersonalFragment extends BaseFragment implements Observer<ApiResponse<UserInfoEntity>>, GetLoginDataUtils.OnLoginDataListener {
@BindView(R.id.personal_login_qq)
LinearLayout mLoginQq;
@BindView(R.id.personal_login_wechat)
LinearLayout mLoginWechat;
@BindView(R.id.personal_login_weibo)
LinearLayout mLoginWeibo;
@BindView(R.id.personal_user_icon)
SimpleDraweeView mUserIcon;
@BindView(R.id.personal_user_name)
TextView mUserName;
@BindView(R.id.login_qq_icon)
ImageView mLoginQqIcon;
@BindView(R.id.login_qq_tv)
TextView mLoginQqTv;
@BindView(R.id.login_wechat_icon)
ImageView mLoginWechatIcon;
@BindView(R.id.login_wechat_tv)
TextView mLoginWechatTv;
@BindView(R.id.login_weibo_icon)
ImageView mLoginWeiboIcon;
@BindView(R.id.login_weibo_tv)
TextView mLoginWeiboTv;
@BindView(R.id.personal_game)
RelativeLayout mPersonalGame;
@BindView(R.id.personal_libao)
RelativeLayout mPersonalLibao;
@BindView(R.id.personal_share)
RelativeLayout mPersonalShare;
@BindView(R.id.personal_suggestion)
RelativeLayout mPersonalSuggestion;
@BindView(R.id.personal_setting_update_hint)
TextView mPersonalSettingUpdateHint;
@BindView(R.id.personal_setting)
RelativeLayout mPersonalSetting;
@BindView(R.id.login_sign_hint)
View mLoginSignHint;
@BindView(R.id.login_message_hint)
View mLoginMessgeHint;
@BindView(R.id.user_icon_hint)
View mIconHint;
public final static String LOGIN_TAG = "login_tag"; //登入标识
public final static String LOGOUT_TAG = "logout_tag"; // 登出标识
public final static String MESSAGE_UNREAD_TAG = "message_unread_tag";
private UserInfoEntity mUserInfoEntity;
private Dialog mLoginDialog;
private SharedPreferences sp;
private UserViewModel mUserViewModel;
private boolean isLogin;
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (CommonDebug.IS_DEBUG) {
CommonDebug.logMethodWithParams(this, requestCode, resultCode, data);
}
if (requestCode == Constants.REQUEST_LOGIN) { // QQ Login callback
GetLoginDataUtils.getInstance(getContext()).onQQCallback(requestCode, resultCode, data);
} else if (requestCode == 32973) {// 32973 WeiBo requestCode
GetLoginDataUtils.getInstance(getContext()).onWeiboCallback(requestCode, resultCode, data);
}
}
@Override
protected int getLayoutId() {
return R.layout.fragment_personal;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sp = PreferenceManager.getDefaultSharedPreferences(getContext());
checkUpdate();
final UserViewModel.Factory factory = new UserViewModel.Factory(getActivity().getApplication());
mUserViewModel = ViewModelProviders.of(this, factory).get(UserViewModel.class);
mUserViewModel.getLoginObsUserinfo().observe(this, this);
isLogin = mUserViewModel.isLogin();
}
// 连接上网络事件
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(EBNetworkState busNetworkState) {
if (busNetworkState.isNetworkConnected() && isLogin && mUserInfoEntity == null) {
mUserViewModel.reptyCheckLogin();
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(EBReuse reuse) {
if (MessageFragment.MESSAGE_READ_OVER.equals(reuse.getType())) { // 消息阅读完成
if (mLoginMessgeHint != null) {
mLoginMessgeHint.setVisibility(View.GONE);
}
} else if (LOGOUT_TAG.equals(reuse.getType())) {
mUserViewModel.logout();
}
}
@OnClick({R.id.personal_login_qq, R.id.personal_login_wechat, R.id.personal_login_weibo, R.id.personal_user_icon,
R.id.personal_user_name, R.id.personal_game, R.id.personal_libao, R.id.personal_share, R.id.personal_suggestion,
R.id.personal_setting})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.personal_login_qq:
if (mUserInfoEntity != null) {
startActivity(CollectionActivity.getCollectionActivity(getContext()));
} else {
GetLoginDataUtils.getInstance(getActivity()).QQLogin(this, getActivity());
}
break;
case R.id.personal_login_wechat:
if (mUserInfoEntity != null) {
DialogUtils.showAlertDialog(getContext(), "期待你的建议", "签到功能暂未开放,如果你有好的建议请反馈给我们,谢谢!"
, "我有一个想法", " 以后再说", new DialogUtils.ConfirmListener() {
@Override
public void onConfirm() {
SuggestionActivity.startSuggestionActivity(getContext(), 2, null, "签到功能的建议:");
}
});
} else {
GetLoginDataUtils.getInstance(getActivity()).WCLogin(this);
}
break;
case R.id.personal_login_weibo:
if (mUserInfoEntity != null) {
startActivity(MessageActivity.getIntent(getContext()));
} else {
GetLoginDataUtils.getInstance(getActivity()).WeiBoLogin(this, getActivity());
}
break;
case R.id.personal_user_icon:
case R.id.personal_user_name:
if (mIconHint.getVisibility() == View.VISIBLE) {
LoginTokenEntity loginToken = UserManager.getInstance().getLoginTokenEntity();
mIconHint.setVisibility(View.GONE);
if (loginToken != null && loginToken.getId() != null)
sp.edit().putBoolean(loginToken.getId(), false).apply();
}
if (mUserInfoEntity != null) {
startActivity(UserInfoActivity.getIntent(getContext()));
} else {
startActivity(LoginActivity.getIntent(getContext()));
}
break;
case R.id.personal_game:
getContext().startActivity(InstallActivity.getIntent(getContext()));
break;
case R.id.personal_libao:
DataUtils.onEvent(getActivity(), "主页", "礼包图标");
DataCollectionUtils.uploadClick(getActivity(), "礼包图标", "我的光环");
Intent intent = LibaoActivity.getIntent(getContext(), "(我的光环:礼包[4-1])");
startActivity(intent);
DataCollectionUtils.uploadPosition(getActivity(), "我的光环", "1", "礼包");
break;
case R.id.personal_share:
getContext().startActivity(ShareGhActivity.getIntent(getContext()));
break;
case R.id.personal_suggestion:
getContext().startActivity(SuggestSelectActivity.getIntent(getActivity()));
break;
case R.id.personal_setting:
DataUtils.onEvent(getActivity(), "我的光环", "设置图标");
DataCollectionUtils.uploadClick(getActivity(), "设置图标", "我的光环");
new IntentFactory.Builder(getContext()).setFragment(SettingsFragment.class).setEntrance("(我的光环)").start();
break;
}
}
private void checkMessageUnread(final Context context) {
if (context == null) return;
RetrofitManager.getInstance(context).getApi()
.getMessageUnread()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Response<MessageUnreadEntity>() {
@Override
public void onResponse(MessageUnreadEntity response) {
super.onResponse(response);
if (response != null && response.getKefuList() != null && response.getKefuList().size() > 0) {
if (response.getKefuList() != null && response.getKefuList().size() > 0) {
mLoginMessgeHint.setVisibility(View.VISIBLE);
}
}
if (response != null && response.getComment() > 0) {
mLoginMessgeHint.setVisibility(View.VISIBLE);
}
if (mLoginMessgeHint.getVisibility() == View.VISIBLE) {
EventBus.getDefault().post(new EBReuse(MESSAGE_UNREAD_TAG));
}
}
@Override
public void onFailure(HttpException e) {
}
});
}
private void changeLoginState(boolean isLogin) {
if (isLogin) {
if (mUserInfoEntity != null) {
mUserIcon.setImageURI(mUserInfoEntity.getIcon());
mUserName.setText(mUserInfoEntity.getName());
}
mLoginQqIcon.setImageResource(R.drawable.personal_collection_icon);
mLoginQqTv.setText("收藏");
mLoginWechatIcon.setImageResource(R.drawable.personal_sign_icon);
mLoginWechatTv.setText("签到");
mLoginWeiboIcon.setImageResource(R.drawable.personal_message_icon);
mLoginWeiboTv.setText("消息");
} else {
mLoginQqIcon.setImageResource(R.drawable.qq_login_icon);
mLoginQqTv.setText(getString(R.string.QQ));
mLoginWechatIcon.setImageResource(R.drawable.wechat_login_icon);
mLoginWechatTv.setText(getString(R.string.wechat));
mLoginWeiboIcon.setImageResource(R.drawable.weibo_login_icon);
mLoginWeiboTv.setText(getString(R.string.sina_weibo));
mLoginSignHint.setVisibility(View.GONE);
mLoginMessgeHint.setVisibility(View.GONE);
mUserIcon.setImageURI("");
mUserName.setText("手机登录");
}
}
private void checkUpdate() {
String channel = HaloApp.getInstance().getChannel();
RetrofitManager.getInstance(getContext())
.getApi()
.getUpdate(PackageUtils.getVersionName(getContext()), channel)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Response<AppEntity>() {
@Override
public void onResponse(AppEntity response) {
super.onResponse(response);
float version = Float.valueOf(response.getVersion());
float currentVersion = Float.valueOf(PackageUtils.getVersionName(getContext()));
if (version > currentVersion) {
mPersonalSettingUpdateHint.setVisibility(View.VISIBLE);
} else {
mPersonalSettingUpdateHint.setVisibility(View.GONE);
}
}
});
}
@Override
public void OnLoginData(JSONObject content, LoginTag loginTag) {
Utils.log("======获取第三方登录信息成功" + content.toString() + "===" + loginTag.name());
mLoginDialog = DialogUtils.showWaitDialog(getContext(), "登录中...");
mUserViewModel.login(content, loginTag);
}
@Override
public void onChanged(@Nullable ApiResponse<UserInfoEntity> userInfoEntity) {
UserInfoEntity notifyUserInfo;
if (userInfoEntity != null) {
notifyUserInfo = userInfoEntity.getData();
} else {
notifyUserInfo = null;
}
if (notifyUserInfo != null && mUserInfoEntity == null) { // 单个用户,首次触发
checkMessageUnread(getContext()); // 检查是否有未读消息
EventBus.getDefault().post(new EBConcernChanged());
EventBus.getDefault().post(new EBReuse(PersonalFragment.LOGIN_TAG));
/**
* default_icon_ 判断是不是默认头像
* 具体默认头像链接请看:
* {@link com.gh.common.util.UserIconUtils#getUserIconUrl(int)}
*/
LoginTokenEntity loginToken = UserManager.getInstance().getLoginTokenEntity();
if (loginToken != null && loginToken.getId() != null &&
sp.getBoolean(loginToken.getId(), true) &&
notifyUserInfo.getIcon() != null &&
notifyUserInfo.getIcon().contains("default_icon_")) {
mIconHint.setVisibility(View.VISIBLE);
}
}
mUserInfoEntity = notifyUserInfo;
if (notifyUserInfo == null) {
changeLoginState(false);
EventBus.getDefault().post(new EBConcernChanged());
if (mIconHint.getVisibility() == View.VISIBLE) mIconHint.setVisibility(View.GONE);
} else {
changeLoginState(true);
}
if (mLoginDialog != null && mLoginDialog.isShowing()) {
mLoginDialog.dismiss();
}
}
}