package com.znv.linkup.view;
import java.util.HashMap;
import org.json.JSONArray;
import org.json.JSONObject;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.PlatformActionListener;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.sina.weibo.SinaWeibo;
import cn.sharesdk.tencent.qzone.QZone;
import com.znv.linkup.BaseActivity;
import com.znv.linkup.R;
import com.znv.linkup.ViewSettings;
import com.znv.linkup.WelcomeActivity;
import com.znv.linkup.rest.IUpload;
import com.znv.linkup.rest.UserInfo;
import com.znv.linkup.rest.UserScore;
import com.znv.linkup.rest.VolleyHelper;
import com.znv.linkup.util.LevelUtil;
import com.znv.linkup.util.StringUtil;
import com.znv.linkup.view.CircleImageView.ILoadImage;
/**
* 登录或排行榜视图
*
* @author yzb
*
*/
public class LevelTop extends LinearLayout implements PlatformActionListener {
/**
* 登录状态
*
* @author yzb
*
*/
public enum LevelTopStatus {
None, Login, UserInfo, TopInfo
}
public LevelTop(final Context context, AttributeSet attrs) {
super(context, attrs);
View v = LayoutInflater.from(context).inflate(R.layout.level_top, null);
// LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
// v.setLayoutParams(params);
this.addView(v);
findViewById(R.id.level_tvWeibo).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
beforeLogin();
authorize(new SinaWeibo(context));
}
});
findViewById(R.id.level_tvQq).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
beforeLogin();
authorize(new QZone(context));
}
});
getControls();
volley = new VolleyHelper(context);
}
/**
* 根据状态显示界面
*/
private void showStatus(LevelTopStatus status) {
topStatus = status;
holder.levelLogin.setVisibility(View.GONE);
holder.userInfo.setVisibility(View.GONE);
holder.levelTopUsers.setVisibility(View.GONE);
switch (topStatus) {
case Login:
holder.levelLogin.setVisibility(View.VISIBLE);
break;
case UserInfo:
holder.userInfo.setVisibility(View.VISIBLE);
break;
case TopInfo:
holder.levelTopUsers.setVisibility(View.VISIBLE);
break;
case None:
break;
}
}
/**
* 重新初始化控件
*/
public void reset() {
try {
ShareSDK.initSDK(getContext());
} catch (Exception ex) {
}
if (BaseActivity.userInfo == null) {
// 显示登录
showStatus(LevelTopStatus.Login);
} else {
showStatus(LevelTopStatus.None);
}
holder.tvgolduser.setText("");
holder.tvgoldscore.setText("");
holder.ivgoldIcon.setImageResource(R.drawable.icon_default);
holder.tvsilveruser.setText("");
holder.tvsilverscore.setText("");
holder.ivsilverIcon.setImageResource(R.drawable.icon_default);
holder.tvthirduser.setText("");
holder.tvthirdscore.setText("");
holder.ivthirdIcon.setImageResource(R.drawable.icon_default);
holder.ivIcon.setImageResource(R.drawable.icon_default);
holder.tvUser.setText("");
}
public void onComplete(Platform plat, int action, HashMap<String, Object> res) {
if (action == Platform.ACTION_USER_INFOR) {
login(plat);
}
}
public void onError(Platform platform, int action, Throwable t) {
if (action == Platform.ACTION_USER_INFOR) {
netMsgHandler.sendEmptyMessage(ViewSettings.MSG_AUTH_ERROR);
}
}
public void onCancel(Platform platform, int action) {
if (action == Platform.ACTION_USER_INFOR) {
netMsgHandler.sendEmptyMessage(ViewSettings.MSG_AUTH_CANCEL);
}
}
/**
* 处理网络消息回调的handler
*/
@SuppressLint("HandlerLeak")
public Handler netMsgHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case ViewSettings.MSG_LEVEL_ADDGET: {
showLevelTop(msg);
if (uploadListener != null) {
uploadListener.onLevelResultAdd(msg);
}
}
break;
case ViewSettings.MSG_LEVEL_GET:
showLevelTop(msg);
break;
case ViewSettings.MSG_LOGIN: {
try {
JSONObject json = new JSONObject((String) msg.obj);
UserInfo userInfo = new UserInfo();
userInfo.setUserId(json.getString("userId"));
userInfo.setUserName(json.getString("userName"));
userInfo.setUserGender(json.getString("userGender"));
userInfo.setUserIcon(json.getString("userIcon"));
userInfo.setDiamond(getContext(), json.getInt("diamond"));
userInfo.setGold(getContext(), json.getInt("gold"));
userInfo.setAward(json.getInt("isAward") == 1);
userInfo.setTotalRank(json.getInt("totalRank"));
userInfo.setTop1Levels(json.getInt("top1Levels"));
userInfo.setLike(json.getInt("like"));
BaseActivity.userInfo = userInfo;
msg.obj = userInfo;
if (uploadListener != null) {
uploadListener.onLoginSuccess(msg);
}
} catch (Exception e) {
e.printStackTrace();
}
}
break;
// case ViewSettings.MSG_IMAGE_GET: {
// Bitmap bm = (Bitmap) msg.obj;
// if (bm != null) {
// showStatus(LevelTopStatus.UserInfo);
//
// Bitmap bmRound = ImageUtil.roundBitmap(ImageUtil.scaleBitmap(bm, ViewSettings.UserImageWidth, ViewSettings.UserImageWidth));
// WelcomeActivity.userInfo.setUserImage(bmRound);
// holder.ivIcon.setImageBitmap(bmRound);
// if (WelcomeActivity.userInfo != null) {
// holder.tvUser.setText(WelcomeActivity.userInfo.getUserName() + getContext().getString(R.string.user_hello));
// holder.tvDiamond.setText(String.valueOf(WelcomeActivity.userInfo.getDiamond(getContext())));
// holder.tvGold.setText(String.valueOf(WelcomeActivity.userInfo.getGold(getContext())));
// if (WelcomeActivity.userInfo.getTotalRank() == 0) {
// holder.tvTotalRank.setText(getResources().getString(R.string.total_rank_0));
// } else {
// holder.tvTotalRank.setText(String.valueOf(WelcomeActivity.userInfo.getTotalRank()));
// }
// holder.tvTop1Levels.setText(String.valueOf(WelcomeActivity.userInfo.getTop1Levels()));
// holder.tvLike.setText(String.valueOf(WelcomeActivity.userInfo.getLike()));
// String text = getContext().getString(R.string.logining);
// if (WelcomeActivity.userInfo.isAward()) {
// text = getContext().getString(R.string.login_award);
// }
// Toast.makeText(getContext(), text, Toast.LENGTH_SHORT).show();
// }
// }
// }
// break;
case ViewSettings.MSG_AUTH_CANCEL: {
showStatus(LevelTopStatus.Login);
Toast.makeText(getContext(), R.string.auth_cancel, Toast.LENGTH_SHORT).show();
}
break;
case ViewSettings.MSG_AUTH_ERROR: {
showStatus(LevelTopStatus.Login);
Toast.makeText(getContext(), R.string.auth_error, Toast.LENGTH_SHORT).show();
}
break;
case ViewSettings.MSG_NETWORK_EXCEPTION: {
showStatus(LevelTopStatus.Login);
Toast.makeText(getContext(), R.string.network_exception, Toast.LENGTH_SHORT).show();
}
break;
}
}
};
/**
* 加载用户信息
*/
public void loadUserInfo() {
if (WelcomeActivity.userInfo != null) {
loadUserTextInfo();
String text = getContext().getString(R.string.logining);
if (WelcomeActivity.userInfo.isAward()) {
text = getContext().getString(R.string.login_award);
}
Toast.makeText(getContext(), text, Toast.LENGTH_SHORT).show();
holder.ivIcon.setLoadImageListener(new ILoadImage() {
@Override
public void onCircleImageLoaded(Bitmap bm) {
WelcomeActivity.userInfo.setUserImage(bm);
}
});
volley.loadImage(holder.ivIcon, WelcomeActivity.userInfo.getUserIcon());
}
}
/**
* 更新用户钻石和金币信息
*/
public void updateUserInfo() {
if (WelcomeActivity.userInfo != null && WelcomeActivity.userInfo.getUserImage() != null) {
holder.ivIcon.setImageBitmap(WelcomeActivity.userInfo.getUserImage());
loadUserTextInfo();
}
}
private void loadUserTextInfo() {
showStatus(LevelTopStatus.UserInfo);
holder.tvUser.setText(WelcomeActivity.userInfo.getUserName() + getContext().getString(R.string.user_hello));
holder.tvDiamond.setText(String.valueOf(WelcomeActivity.userInfo.getDiamond(getContext())));
holder.tvGold.setText(String.valueOf(WelcomeActivity.userInfo.getGold(getContext())));
if (WelcomeActivity.userInfo.getTotalRank() == 0) {
holder.tvTotalRank.setText(getResources().getString(R.string.total_rank_0));
} else {
holder.tvTotalRank.setText(String.valueOf(WelcomeActivity.userInfo.getTotalRank()));
}
holder.tvTop1Levels.setText(String.valueOf(WelcomeActivity.userInfo.getTop1Levels()));
holder.tvLike.setText(String.valueOf(WelcomeActivity.userInfo.getLike()));
}
private void showLevelTop(Message msg) {
showStatus(LevelTopStatus.TopInfo);
String result = (String) msg.obj;
try {
JSONArray array = new JSONArray(result);
if (array.length() > 0) {
JSONObject obj = (JSONObject) array.get(0);
volley.loadImage(holder.ivgoldIcon, obj.getString("userIcon"));
holder.tvgolduser.setText(StringUtil.substring(obj.getString("userName"), ViewSettings.ShowNameLength));
int level = obj.getInt("level");
if (LevelUtil.isTimeMode(level)) {
holder.tvgoldscore.setText(StringUtil.secondToString(obj.getInt("time")));
} else {
holder.tvgoldscore.setText(obj.getString("score"));
}
if (array.length() > 1) {
JSONObject obj2 = (JSONObject) array.get(1);
volley.loadImage(holder.ivsilverIcon, obj2.getString("userIcon"));
holder.tvsilveruser.setText(StringUtil.substring(obj2.getString("userName"), ViewSettings.ShowNameLength));
if (LevelUtil.isTimeMode(level)) {
holder.tvsilverscore.setText(StringUtil.secondToString(obj2.getInt("time")));
} else {
holder.tvsilverscore.setText(obj2.getString("score"));
}
if (array.length() > 2) {
JSONObject obj3 = (JSONObject) array.get(2);
volley.loadImage(holder.ivthirdIcon, obj3.getString("userIcon"));
holder.tvthirduser.setText(StringUtil.substring(obj3.getString("userName"), ViewSettings.ShowNameLength));
if (LevelUtil.isTimeMode(level)) {
holder.tvthirdscore.setText(StringUtil.secondToString(obj3.getInt("time")));
} else {
holder.tvthirdscore.setText(obj3.getString("score"));
}
}
}
}
} catch (Exception e) {
// Log.d("MSG_LEVEL_GET", e.getMessage());
}
}
public IUpload getUploadListener() {
return uploadListener;
}
public void setUploadListener(IUpload uploadListener) {
this.uploadListener = uploadListener;
}
public LevelTopStatus getTopStatus() {
return topStatus;
}
public void weiboClick() {
findViewById(R.id.level_tvWeibo).performClick();
}
public void qqClick() {
findViewById(R.id.level_tvQq).performClick();
}
/**
* 取消所有获取image的网络请求
*/
public void cancelUrlImages() {
volley.cancelAll();
}
/**
* 缓存控件,提高效率
*/
private void getControls() {
holder.levelLogin = (View) findViewById(R.id.level_login);
holder.levelTopUsers = (View) findViewById(R.id.level_top_users);
holder.userInfo = (View) findViewById(R.id.user_info);
holder.tvgolduser = (TextView) findViewById(R.id.level_tvgolduser);
holder.tvgoldscore = (TextView) findViewById(R.id.level_tvgoldscore);
holder.ivgoldIcon = (ImageView) findViewById(R.id.level_ivgoldIcon);
holder.tvsilveruser = (TextView) findViewById(R.id.level_tvsilveruser);
holder.tvsilverscore = (TextView) findViewById(R.id.level_tvsilverscore);
holder.ivsilverIcon = (ImageView) findViewById(R.id.level_ivsilverIcon);
holder.tvthirduser = (TextView) findViewById(R.id.level_tvthirduser);
holder.tvthirdscore = (TextView) findViewById(R.id.level_tvthirdscore);
holder.ivthirdIcon = (ImageView) findViewById(R.id.level_ivthirdIcon);
holder.ivIcon = (CircleImageView) findViewById(R.id.ivIcon);
holder.tvUser = (TextView) findViewById(R.id.tvUser);
holder.tvDiamond = (TextView) findViewById(R.id.tvDiamond);
holder.tvGold = (TextView) findViewById(R.id.tvCoin);
holder.tvTotalRank = (TextView) findViewById(R.id.tvTotalRank);
holder.tvTop1Levels = (TextView) findViewById(R.id.tvTop1Levels);
holder.tvLike = (TextView) findViewById(R.id.tvLike);
}
private void beforeLogin() {
try {
ShareSDK.initSDK(getContext());
} catch (Exception ex) {
}
BaseActivity.soundMgr.select();
}
private void authorize(Platform plat) {
try {
// 先清除缓存账户
// plat.getDb().removeAccount();
if (plat.isValid()) {
String userId = plat.getDb().getUserId();
if (!TextUtils.isEmpty(userId)) {
login(plat);
return;
}
}
plat.setPlatformActionListener(this);
plat.SSOSetting(true);
plat.showUser(null);
} catch (Exception ex) {
Log.d("LevelTop-authorize", ex.getMessage());
}
}
/**
* 登录某个平台
*
* @param plat
* 平台信息
*/
private void login(Platform plat) {
UserInfo userInfo = new UserInfo();
userInfo.setUserId(plat.getDb().getUserId());
userInfo.setUserName(plat.getDb().getUserName());
userInfo.setUserGender(plat.getDb().getUserGender());
userInfo.setUserIcon(plat.getDb().getUserIcon());
UserScore.login(userInfo, netMsgHandler);
}
private IUpload uploadListener = null;
private levelTopHolder holder = new levelTopHolder();
private LevelTopStatus topStatus = LevelTopStatus.Login;
private VolleyHelper volley = null;
/**
* 缓存控件,提高效率
*
* @author yzb
*
*/
private class levelTopHolder {
public View levelLogin;
public View levelTopUsers;
public View userInfo;
public TextView tvgolduser;
public TextView tvgoldscore;
public ImageView ivgoldIcon;
public TextView tvsilveruser;
public TextView tvsilverscore;
public ImageView ivsilverIcon;
public TextView tvthirduser;
public TextView tvthirdscore;
public ImageView ivthirdIcon;
public CircleImageView ivIcon;
public TextView tvUser;
public TextView tvDiamond;
public TextView tvGold;
public TextView tvTotalRank;
public TextView tvTop1Levels;
public TextView tvLike;
}
}