From 5f11c2d0b6871b3fd0129366ba2aae396345c011 Mon Sep 17 00:00:00 2001 From: kehaoyuan Date: Fri, 30 Jun 2017 17:29:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A5=E5=85=A5=E5=BE=AE=E4=BF=A1=E7=99=BB?= =?UTF-8?q?=E5=BD=95=EF=BC=8C=20=E5=A2=9E=E5=8A=A0=E4=B8=AA=E4=BA=BA?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E7=BC=96=E8=BE=91=E9=A1=B5=E9=9D=A2=EF=BC=8C?= =?UTF-8?q?=E6=88=91=E7=9A=84=E5=85=89=E7=8E=AF=E5=A2=9E=E5=8A=A0=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E6=A3=80=E6=B5=8B=E6=9B=B4=E6=96=B0=EF=BC=8C=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E9=A1=B5=E9=9D=A2=E5=A2=9E=E5=8A=A0=E6=96=B0=E8=80=81?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=88=87=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 1 + app/src/main/AndroidManifest.xml | 5 + .../java/com/gh/common/constant/Config.java | 1 + .../java/com/gh/common/util/DialogUtils.java | 46 ++++ .../java/com/gh/common/util/LoginUtils.java | 4 +- .../java/com/gh/gamecenter/AboutActivity.java | 16 +- .../java/com/gh/gamecenter/LoginActivity.java | 78 +++++-- .../com/gh/gamecenter/UserInfoActivity.java | 36 ++- .../gh/gamecenter/UserInfoEditActivity.java | 214 ++++++++++++++++++ .../gamecenter/personal/PersonalFragment.java | 35 ++- .../gh/gamecenter/wxapi/WXEntryActivity.java | 57 ++++- .../wxapi/WeChatUserInfoThread.java | 95 ++++++++ app/src/main/res/layout/activity_about.xml | 3 +- app/src/main/res/layout/activity_login.xml | 193 ++++++++++------ app/src/main/res/layout/activity_userinfo.xml | 5 +- .../res/layout/activity_userinfo_edit.xml | 114 ++++++++++ app/src/main/res/layout/fragment_personal.xml | 1 + gradle.properties | 1 + 18 files changed, 789 insertions(+), 116 deletions(-) create mode 100644 app/src/main/java/com/gh/gamecenter/UserInfoEditActivity.java create mode 100644 app/src/main/java/com/gh/gamecenter/wxapi/WeChatUserInfoThread.java create mode 100644 app/src/main/res/layout/activity_userinfo_edit.xml diff --git a/app/build.gradle b/app/build.gradle index 8129ccf114..1d89c9f7bb 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -56,6 +56,7 @@ android { * All third-party appid/appkey */ buildConfigField "String", "WECHAT_APPID", "\"${WECHAT_APPID}\"" + buildConfigField "String", "WECHAT_SECRET", "\"${WECHAT_SECRET}\"" buildConfigField "String", "TENCENT_APPID", "\"${TENCENT_APPID}\"" buildConfigField "String", "WEIBO_APPKEY", "\"${WEIBO_APPKEY}\"" buildConfigField "String", "MIPUSH_APPID", "\"${MIPUSH_APPID}\"" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e2fdecc3f8..182f2a8376 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -205,6 +205,11 @@ + + diff --git a/app/src/main/java/com/gh/common/constant/Config.java b/app/src/main/java/com/gh/common/constant/Config.java index a4bd4096c6..adc96d5201 100644 --- a/app/src/main/java/com/gh/common/constant/Config.java +++ b/app/src/main/java/com/gh/common/constant/Config.java @@ -19,6 +19,7 @@ public class Config { // Third-Party confs public static final String WECHAT_APPID = BuildConfig.WECHAT_APPID; + public static final String WECHAT_SECRET = BuildConfig.WECHAT_SECRET; public static final String TENCENT_APPID = BuildConfig.TENCENT_APPID; public static final String WEIBO_APPKEY = BuildConfig.WEIBO_APPKEY; public static final String MIPUSH_APPID = BuildConfig.MIPUSH_APPID; diff --git a/app/src/main/java/com/gh/common/util/DialogUtils.java b/app/src/main/java/com/gh/common/util/DialogUtils.java index e53507767d..32a3aae34f 100644 --- a/app/src/main/java/com/gh/common/util/DialogUtils.java +++ b/app/src/main/java/com/gh/common/util/DialogUtils.java @@ -12,7 +12,9 @@ import android.support.v4.content.ContextCompat; import android.support.v7.app.AlertDialog; import android.text.Html; import android.text.Spanned; +import android.text.TextPaint; import android.view.Display; +import android.view.Gravity; import android.view.View; import android.view.Window; import android.view.WindowManager; @@ -492,6 +494,50 @@ public class DialogUtils { } + /** + * 特殊:验证手机号码 + */ + + public static void checkPhoneNumDialog(Context context, CharSequence message, final ConfirmListener cmListener) { + String s = message.toString(); + String sub1 = s.substring(0, 3); + String sub2 = s.substring(3, 7); + String sub3 = s.substring(7, 11); + String phoneNum = StringUtils.buildString(sub1, " - ", sub2, " - ", sub3); + + AlertDialog alertDialog = new AlertDialog.Builder(context, R.style.GhAlertDialog) + .setTitle("请确定手机号:") + .setMessage(phoneNum) + .setPositiveButton("确认", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if (cmListener != null) { + cmListener.onConfirm(); + } + } + }) + .setNegativeButton("取消", null) + .create(); + alertDialog.show(); + + TextView mesage = (TextView) alertDialog.findViewById(android.R.id.message); + Button positiveBtn = alertDialog.getButton(android.app.AlertDialog.BUTTON_POSITIVE); + Button negativeBtn = alertDialog.getButton(android.app.AlertDialog.BUTTON_NEGATIVE); + + positiveBtn.setTextSize(13); + positiveBtn.setTextColor(ContextCompat.getColor(context, R.color.theme)); + negativeBtn.setTextSize(13); + negativeBtn.setTextColor(ContextCompat.getColor(context, R.color.theme)); + if (mesage != null) { + mesage.setGravity(Gravity.CENTER); + mesage.setTextSize(24); + mesage.setTextColor(ContextCompat.getColor(context, R.color.title)); + TextPaint tp = mesage.getPaint(); + tp.setFakeBoldText(true); + } + + } + public interface ConfirmListener { void onConfirm(); } diff --git a/app/src/main/java/com/gh/common/util/LoginUtils.java b/app/src/main/java/com/gh/common/util/LoginUtils.java index 18020f82e7..169186aa97 100644 --- a/app/src/main/java/com/gh/common/util/LoginUtils.java +++ b/app/src/main/java/com/gh/common/util/LoginUtils.java @@ -136,10 +136,10 @@ public class LoginUtils { public void WCLogin(OnLoginListener listener) { if (mIWXAPI != null) { - boolean register = mIWXAPI.registerApp("wx3ffd0785fad18396"); + boolean register = mIWXAPI.registerApp(Config.WECHAT_APPID); SendAuth.Req req = new SendAuth.Req(); - req.scope = "all"; + req.scope = "snsapi_userinfo"; req.state = "光环助手"; boolean b = mIWXAPI.sendReq(req); Utils.log(LoginUtils.class.getSimpleName(), "微信注册状态::" + register + "\n 发送状态::" + b); diff --git a/app/src/main/java/com/gh/gamecenter/AboutActivity.java b/app/src/main/java/com/gh/gamecenter/AboutActivity.java index 9b7a596064..2dd67958b0 100644 --- a/app/src/main/java/com/gh/gamecenter/AboutActivity.java +++ b/app/src/main/java/com/gh/gamecenter/AboutActivity.java @@ -8,6 +8,7 @@ import android.os.Message; import android.support.annotation.NonNull; import android.view.View; import android.widget.ProgressBar; +import android.widget.RelativeLayout; import android.widget.TextView; import com.gh.base.BaseActivity; @@ -27,6 +28,8 @@ public class AboutActivity extends BaseActivity { @BindView(R.id.about_version_tv) TextView mAboutVersion; + @BindView(R.id.setting_rl_update) + RelativeLayout mAboutUpdateRl; @BindView(R.id.about_version_pb) ProgressBar mAboutPb; @@ -49,8 +52,6 @@ public class AboutActivity extends BaseActivity { initTitle(getString(R.string.title_about)); ((TextView) findViewById(R.id.about_tv_version)).setText("V" + PackageUtils.getVersionName(this)); - - UpdateManager.getInstance(this).checkUpdate(false, handler); // 自动检出更新 } @Override @@ -59,13 +60,10 @@ public class AboutActivity extends BaseActivity { handler.removeCallbacksAndMessages(null); } - @OnClick({R.id.about_version_tv, R.id.about_shengming}) + @OnClick({R.id.about_shengming, R.id.setting_rl_update}) public void OnClick(View view) { - if (view.getId() == R.id.about_version_tv) { - String content = mAboutVersion.getText().toString(); - if (content.startsWith("发现新版本")) { - UpdateManager.getInstance(this).checkUpdate(false, handler); // 自动检出更新 - } + if (view.getId() == R.id.setting_rl_update) { + UpdateManager.getInstance(AboutActivity.this).checkUpdate(false, handler); // 检出更新 } else if (view.getId() == R.id.about_shengming) { Intent intent = WebActivity.getWebIntent(this); startActivity(intent); @@ -88,10 +86,8 @@ public class AboutActivity extends BaseActivity { if (msg.what == 0) { final String version = (String) msg.obj; activity.mAboutVersion.setText(StringUtils.buildString("发现新版本 V", version)); - activity.mAboutPb.setVisibility(View.GONE); } else if (msg.what == 1) { activity.mAboutVersion.setText("已是最新版本"); - activity.mAboutPb.setVisibility(View.GONE); } } } diff --git a/app/src/main/java/com/gh/gamecenter/LoginActivity.java b/app/src/main/java/com/gh/gamecenter/LoginActivity.java index 1264d4c607..03cc71cad2 100644 --- a/app/src/main/java/com/gh/gamecenter/LoginActivity.java +++ b/app/src/main/java/com/gh/gamecenter/LoginActivity.java @@ -12,6 +12,7 @@ import android.support.v4.content.ContextCompat; import android.support.v7.app.AlertDialog; import android.text.Editable; import android.text.TextWatcher; +import android.view.KeyEvent; import android.view.View; import android.widget.EditText; import android.widget.ImageView; @@ -20,6 +21,7 @@ import android.widget.RelativeLayout; import android.widget.TextView; import com.gh.base.BaseActivity; +import com.gh.common.util.DialogUtils; import com.gh.common.util.DisplayUtils; import com.gh.common.util.LoginUtils; import com.gh.common.util.PatternUtils; @@ -31,7 +33,7 @@ import butterknife.OnClick; * Created by khy on 19/06/17. */ -public class LoginActivity extends BaseActivity implements LoginUtils.OnLoginListener{ +public class LoginActivity extends BaseActivity implements LoginUtils.OnLoginListener { @BindView(R.id.login_phone_et) @@ -50,6 +52,12 @@ public class LoginActivity extends BaseActivity implements LoginUtils.OnLoginLis LinearLayout mLoginWechatBtn; @BindView(R.id.login_weibo_btn) LinearLayout mLoginWeiboBtn; + @BindView(R.id.login_bottom) + LinearLayout mLoginBottom; + @BindView(R.id.login_bottom_olduser) + LinearLayout mLoginBottomOlduser; + + ImageView mOldUser; Handler mHandler = new Handler() { @Override @@ -91,9 +99,9 @@ public class LoginActivity extends BaseActivity implements LoginUtils.OnLoginLis initTitle("登录光环助手"); // 添加老用户入口 - ImageView oldUser = new ImageView(this); - oldUser.setImageResource(R.drawable.login_olduser_icon); - oldUser.setPadding(DisplayUtils.dip2px(this, 13), DisplayUtils.dip2px(this, 11) + mOldUser = new ImageView(this); + mOldUser.setImageResource(R.drawable.login_olduser_icon); + mOldUser.setPadding(DisplayUtils.dip2px(this, 13), DisplayUtils.dip2px(this, 11) , DisplayUtils.dip2px(this, 11), DisplayUtils.dip2px(this, 13)); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams( DisplayUtils.dip2px(this, 48), DisplayUtils.dip2px(this, 48)); @@ -101,19 +109,31 @@ public class LoginActivity extends BaseActivity implements LoginUtils.OnLoginLis params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); RelativeLayout reuseActionbar = (RelativeLayout) mContentView.findViewById( R.id.reuse_actionbar); - reuseActionbar.addView(oldUser, params); + reuseActionbar.addView(mOldUser, params); mLoginPassEt.addTextChangedListener(new LoginTextWatcher(mLoginPassEt)); mLoginPhoneEt.addTextChangedListener(new LoginTextWatcher(mLoginPhoneEt)); - oldUser.setOnClickListener(new View.OnClickListener() { + mOldUser.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - toast("老用户入口"); + changeUserLogin(true); } }); + + findViewById(R.id.actionbar_rl_back).setOnClickListener( + new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOldUser.getVisibility() == View.GONE) { + changeUserLogin(false); + } else { + finish(); + } + } + }); } @OnClick({R.id.login_captcha, R.id.login_hint, R.id.login_phone_btn, R.id.login_qq_btn, @@ -122,14 +142,19 @@ public class LoginActivity extends BaseActivity implements LoginUtils.OnLoginLis switch (view.getId()) { case R.id.login_captcha: String phoneNum = mLoginPhoneEt.getText().toString().trim(); - if (PatternUtils.isPhoneNum(phoneNum)) { - Message message = new Message(); - message.what = 0; - message.arg1 = 10; - mHandler.sendMessage(message); - mLoginCaptcha.setTextColor(ContextCompat.getColor(LoginActivity.this, R.color.hint)); - mLoginCaptcha.setBackgroundResource(R.drawable.border_captcha_bg); - mLoginCaptcha.setEnabled(false); + if (PatternUtils.isPhoneNum(phoneNum) && phoneNum.length() == 11) { + DialogUtils.checkPhoneNumDialog(this, phoneNum, new DialogUtils.ConfirmListener() { + @Override + public void onConfirm() { + Message message = new Message(); + message.what = 0; + message.arg1 = 10; + mHandler.sendMessage(message); + mLoginCaptcha.setTextColor(ContextCompat.getColor(LoginActivity.this, R.color.hint)); + mLoginCaptcha.setBackgroundResource(R.drawable.border_captcha_bg); + mLoginCaptcha.setEnabled(false); + } + }); } else { toast("请输入正确的手机号"); } @@ -177,6 +202,29 @@ public class LoginActivity extends BaseActivity implements LoginUtils.OnLoginLis } + private void changeUserLogin(boolean isOldUser) { + if (isOldUser) { + mLoginBottom.setVisibility(View.GONE); + mLoginBottomOlduser.setVisibility(View.VISIBLE); + mOldUser.setVisibility(View.GONE); + initTitle("老用户登录"); + } else { + mLoginBottom.setVisibility(View.VISIBLE); + mLoginBottomOlduser.setVisibility(View.GONE); + mOldUser.setVisibility(View.VISIBLE); + initTitle("登录光环助手"); + } + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK && mOldUser.getVisibility() == View.GONE) { + changeUserLogin(false); + return true; + } + return super.onKeyDown(keyCode, event); + } + private class LoginTextWatcher implements TextWatcher { private EditText mEditText; diff --git a/app/src/main/java/com/gh/gamecenter/UserInfoActivity.java b/app/src/main/java/com/gh/gamecenter/UserInfoActivity.java index 6d52749dfd..a87a3dc759 100644 --- a/app/src/main/java/com/gh/gamecenter/UserInfoActivity.java +++ b/app/src/main/java/com/gh/gamecenter/UserInfoActivity.java @@ -3,6 +3,7 @@ package com.gh.gamecenter; import android.content.Context; import android.content.Intent; import android.os.Bundle; +import android.text.TextUtils; import android.view.View; import android.widget.RelativeLayout; import android.widget.TextView; @@ -35,10 +36,10 @@ public class UserInfoActivity extends BaseActivity { TextView mUserinfoAreaTv; @BindView(R.id.userinfo_area_rl) RelativeLayout mUserinfoAreaRl; - @BindView(R.id.userinfo_qq_tv) - TextView mUserinfoQqTv; - @BindView(R.id.userinfo_qq_rl) - RelativeLayout mUserinfoQqRl; + @BindView(R.id.userinfo_contact_tv) + TextView mUserinfoContactTv; + @BindView(R.id.userinfo_contact_rl) + RelativeLayout mUserinfoContactRl; public static Intent getIntent(Context context) { Intent intent = new Intent(context, UserInfoActivity.class); @@ -53,6 +54,23 @@ public class UserInfoActivity extends BaseActivity { mUserinfoAreaTv.setText(stringExtra); toast(stringExtra); } + + String editContent = null; + if (data != null) { + editContent = data.getStringExtra("editContent"); + } + if (!TextUtils.isEmpty(editContent)) + switch (requestCode) { + case 0x131: + mUserinfoNicknameTv.setText(editContent); + break; + case 0x132: + mUserinfoSexTv.setText(editContent); + break; + case 0x133: + mUserinfoContactTv.setText(editContent); + break; + } } @Override @@ -68,19 +86,25 @@ public class UserInfoActivity extends BaseActivity { } @OnClick({R.id.userinfo_icon_rl, R.id.userinfo_nickname_rl, R.id.userinfo_sex_rl, - R.id.userinfo_area_rl, R.id.userinfo_qq_rl}) + R.id.userinfo_area_rl, R.id.userinfo_contact_rl}) public void onViewClicked(View view) { switch (view.getId()) { case R.id.userinfo_icon_rl: + startActivityForResult(SelectUserIconActivity.getIntent(this), 1); break; case R.id.userinfo_nickname_rl: + String nickName = mUserinfoNicknameTv.getText().toString(); + startActivityForResult(UserInfoEditActivity.getIntent(this, "nickName", nickName), 0x131); break; case R.id.userinfo_sex_rl: + startActivityForResult(UserInfoEditActivity.getIntent(this, "sex", null), 0x132); break; case R.id.userinfo_area_rl: startActivityForResult(UserAreaActivity.getIntent(this), 0x121); break; - case R.id.userinfo_qq_rl: + case R.id.userinfo_contact_rl: + String contact = mUserinfoContactTv.getText().toString(); + startActivityForResult(UserInfoEditActivity.getIntent(this, "contact", contact), 0x133); break; } } diff --git a/app/src/main/java/com/gh/gamecenter/UserInfoEditActivity.java b/app/src/main/java/com/gh/gamecenter/UserInfoEditActivity.java new file mode 100644 index 0000000000..ca8ca3298f --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/UserInfoEditActivity.java @@ -0,0 +1,214 @@ +package com.gh.gamecenter; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.content.ContextCompat; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.view.Gravity; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gh.base.BaseActivity; +import com.gh.common.util.DisplayUtils; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * Created by khy on 30/06/17. + */ + +public class UserInfoEditActivity extends BaseActivity { + @BindView(R.id.userinfo_sex_man) + TextView mUserinfoSexMan; + @BindView(R.id.userinfo_sex_woman) + TextView mUserinfoSexWoman; + @BindView(R.id.userinfo_edit_sex) + LinearLayout mUserinfoEditSex; + @BindView(R.id.userinfo_nickname_et) + EditText mUserinfoNicknameEt; + @BindView(R.id.userinfo_nickname_iv) + ImageView mUserinfoNicknameIv; + @BindView(R.id.userinfo_edit_nickname) + RelativeLayout mUserinfoEditNickname; + @BindView(R.id.userinfo_contact_et) + EditText mUserinfoContactEt; + @BindView(R.id.userinfo_contact_iv) + ImageView mUserinfoContactIv; + @BindView(R.id.userinfo_edit_contact) + LinearLayout mUserinfoEditContact; + + TextView mSaveTv; + + private String mEditType; + private String mEditContent; + + @NonNull + public static Intent getIntent(Context context, String editType, String editContent) { + Intent intent = new Intent(context, UserInfoEditActivity.class); + intent.putExtra("editType", editType); + intent.putExtra("editContent", editContent); + return intent; + } + + @Override + protected int getLayoutId() { + return R.layout.activity_userinfo_edit; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mEditType = getIntent().getStringExtra("editType"); + mEditContent = getIntent().getStringExtra("editContent"); + + // 添加分享图标 + mSaveTv = new TextView(this); + mSaveTv.setBackgroundResource(R.drawable.border_black_bg); + mSaveTv.setVisibility(View.GONE); + mSaveTv.setText("保存"); + mSaveTv.setTextSize(13); + mSaveTv.setGravity(Gravity.CENTER); + mSaveTv.setTextColor(ContextCompat.getColor(this, R.color.title)); + RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams( + DisplayUtils.dip2px(this, 48), DisplayUtils.dip2px(this, 24)); + params.addRule(RelativeLayout.CENTER_VERTICAL); + params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); + params.setMargins(0, 0, DisplayUtils.dip2px(this, 18), 0); + RelativeLayout reuse_actionbar = (RelativeLayout) mContentView.findViewById( + R.id.reuse_actionbar); + reuse_actionbar.addView(mSaveTv, params); + + initView(); + + mSaveTv.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + saveData(); + } + }); + } + + private void initView() { + String title; + switch (mEditType) { + case "sex": + mUserinfoEditSex.setVisibility(View.VISIBLE); + title = "选择性别"; + break; + case "nickName": + mUserinfoEditNickname.setVisibility(View.VISIBLE); + mSaveTv.setVisibility(View.VISIBLE); + mUserinfoNicknameEt.addTextChangedListener(new UserInfoEditTextWatcher(mUserinfoNicknameEt)); + title = "修改昵称"; + if (!TextUtils.isEmpty(mEditContent)) { + mUserinfoNicknameEt.setText(mEditContent); + } + break; + case "contact": + mUserinfoEditContact.setVisibility(View.VISIBLE); + mSaveTv.setVisibility(View.VISIBLE); + mUserinfoContactEt.addTextChangedListener(new UserInfoEditTextWatcher(mUserinfoContactEt)); + title = "联系方式"; + if (!TextUtils.isEmpty(mEditContent)) { + mUserinfoContactEt.setText(mEditContent); + } + break; + default: + title = ""; + break; + } + initTitle(title); + } + + private void saveData() { + Intent data = new Intent(); + if ("nickName".equals(mEditType)) { + String value = mUserinfoNicknameEt.getText().toString(); + if (!TextUtils.isEmpty(value)) { + data.putExtra("editContent", value); + setResult(0x131, data); + finish(); + } else { + toast("昵称不能为空"); + } + } else if ("contact".equals(mEditType)) { + String value = mUserinfoContactEt.getText().toString(); + if (!TextUtils.isEmpty(value)) { + data.putExtra("editContent", value); + setResult(0x133, data); + finish(); + } else { + toast("请输入QQ或邮箱"); + } + } + } + + @OnClick({R.id.userinfo_nickname_iv, R.id.userinfo_contact_iv, R.id.userinfo_sex_man, R.id.userinfo_sex_woman}) + public void onViewClicked(View view) { + switch (view.getId()) { + case R.id.userinfo_nickname_iv: + mUserinfoNicknameEt.setText(""); + break; + case R.id.userinfo_contact_iv: + mUserinfoContactEt.setText(""); + break; + case R.id.userinfo_sex_man: + Intent data = new Intent(); + data.putExtra("editContent", "男"); + setResult(0x132, data); + finish(); + break; + case R.id.userinfo_sex_woman: + Intent data2 = new Intent(); + data2.putExtra("editContent", "女"); + setResult(0x132, data2); + finish(); + break; + } + } + + private class UserInfoEditTextWatcher implements TextWatcher { + private EditText mEditText; + + public UserInfoEditTextWatcher(EditText e) { + mEditText = e; + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + int tvCount = s.length(); + if (mEditText == mUserinfoNicknameEt) { + if (tvCount > 0) { + mUserinfoNicknameIv.setVisibility(View.VISIBLE); + } else { + mUserinfoNicknameIv.setVisibility(View.GONE); + } + } else { + if (tvCount > 0) { + mUserinfoContactIv.setVisibility(View.VISIBLE); + } else { + mUserinfoContactIv.setVisibility(View.GONE); + } + } + } + + @Override + public void afterTextChanged(Editable s) { + + } + } +} 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 f80adf9d64..de35a74efe 100644 --- a/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java +++ b/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java @@ -10,10 +10,12 @@ import android.widget.RelativeLayout; import android.widget.TextView; import com.facebook.drawee.view.SimpleDraweeView; +import com.gh.base.AppController; import com.gh.base.fragment.BaseFragment; import com.gh.common.util.DataCollectionUtils; import com.gh.common.util.DataUtils; import com.gh.common.util.LoginUtils; +import com.gh.common.util.PackageUtils; import com.gh.gamecenter.InstallActivity; import com.gh.gamecenter.LibaoActivity; import com.gh.gamecenter.LoginActivity; @@ -22,20 +24,25 @@ import com.gh.gamecenter.SettingActivity; import com.gh.gamecenter.ShareGhActivity; import com.gh.gamecenter.SuggestSelectActivity; import com.gh.gamecenter.UserInfoActivity; +import com.gh.gamecenter.entity.AppEntity; import com.gh.gamecenter.eventbus.EBNetworkState; +import com.gh.gamecenter.retrofit.Response; +import com.gh.gamecenter.retrofit.RetrofitManager; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import butterknife.BindView; import butterknife.OnClick; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; /** * @author 温冠超 * 294299195@qq.com * 2015-8-8 我的光环页面 */ -public class PersonalFragment extends BaseFragment implements LoginUtils.OnLoginListener{ +public class PersonalFragment extends BaseFragment implements LoginUtils.OnLoginListener { @BindView(R.id.personal_login_qq) @@ -83,6 +90,7 @@ public class PersonalFragment extends BaseFragment implements LoginUtils.OnLogin @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); + checkUpdate(); } @@ -100,7 +108,7 @@ public class PersonalFragment extends BaseFragment implements LoginUtils.OnLogin LoginUtils.getInstance(getActivity()).QQLogin(this); break; case R.id.personal_login_wechat: - changeLoginState(true); + LoginUtils.getInstance(getActivity()).WCLogin(this); break; case R.id.personal_login_weibo: LoginUtils.getInstance(getActivity()).WeiBoLogin(this); @@ -156,6 +164,29 @@ public class PersonalFragment extends BaseFragment implements LoginUtils.OnLogin } } + private void checkUpdate() { + String channel = AppController.getInstance().getChannel(); + RetrofitManager. + getApi(). + getUpdate(PackageUtils.getVersionName(getContext()), channel) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Response(){ + @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 onLogin() { diff --git a/app/src/main/java/com/gh/gamecenter/wxapi/WXEntryActivity.java b/app/src/main/java/com/gh/gamecenter/wxapi/WXEntryActivity.java index 76113f81f6..5ce2732ff3 100644 --- a/app/src/main/java/com/gh/gamecenter/wxapi/WXEntryActivity.java +++ b/app/src/main/java/com/gh/gamecenter/wxapi/WXEntryActivity.java @@ -10,13 +10,18 @@ import com.tencent.mm.sdk.openapi.BaseReq; import com.tencent.mm.sdk.openapi.BaseResp; import com.tencent.mm.sdk.openapi.IWXAPI; import com.tencent.mm.sdk.openapi.IWXAPIEventHandler; +import com.tencent.mm.sdk.openapi.SendAuth; import com.tencent.mm.sdk.openapi.WXAPIFactory; /** * 微信客户端回调activity示例 * 注意:WXEntryActivity类只能在wxapi包下 */ -public class WXEntryActivity extends Activity implements IWXAPIEventHandler { +public class WXEntryActivity extends Activity implements IWXAPIEventHandler, + WeChatUserInfoThread.OnUserInfoCallBackListener { + + private static final int RETURN_MSG_TYPE_LOGIN = 1; + private static final int RETURN_MSG_TYPE_SHARE = 2; private IWXAPI mWxApi; @@ -47,19 +52,59 @@ public class WXEntryActivity extends Activity implements IWXAPIEventHandler { public void onResp(BaseResp baseResp) { switch (baseResp.errCode) { case BaseResp.ErrCode.ERR_OK: - shareResult = "分享成功"; + if (RETURN_MSG_TYPE_SHARE == baseResp.getType()) { + shareResult = "分享成功"; + } else { + if (baseResp instanceof SendAuth.Resp) { + SendAuth.Resp resp = (SendAuth.Resp) baseResp; + Utils.log("WXEntryActivity=TOKEN::" + resp.token); + new WeChatUserInfoThread(WXEntryActivity.this, resp.token).start(); + } else { + shareResult = "登录失败"; + } + } break; case BaseResp.ErrCode.ERR_USER_CANCEL: - shareResult = "分享已取消"; + if (RETURN_MSG_TYPE_SHARE == baseResp.getType()) { + shareResult = "分享已取消"; + } else { + shareResult = "登录已取消"; + } break; case BaseResp.ErrCode.ERR_AUTH_DENIED: - shareResult = "分享被拒绝"; + if (RETURN_MSG_TYPE_SHARE == baseResp.getType()) { + shareResult = "分享被拒绝"; + } else { + shareResult = "登录被拒绝"; + } break; default: - shareResult = "分享错误"; + if (RETURN_MSG_TYPE_SHARE == baseResp.getType()) { + shareResult = "分享错误"; + } else { + shareResult = "登录错误"; + } break; } - Utils.toast(this, shareResult); + if (shareResult != null) { + Utils.toast(this, shareResult); + finishActivity(); + } + } + + + @Override + public void onComplete(String userInfo, String accessToken) { + Utils.toast(this, "登录成功"); + finishActivity(); + } + + @Override + public void onError() { + Utils.toast(this, "登录失败"); + finishActivity(); + } + private void finishActivity() { this.finish(); overridePendingTransition(0, 0);//禁止退出Activity 动画 } diff --git a/app/src/main/java/com/gh/gamecenter/wxapi/WeChatUserInfoThread.java b/app/src/main/java/com/gh/gamecenter/wxapi/WeChatUserInfoThread.java new file mode 100644 index 0000000000..92bbe366e5 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/wxapi/WeChatUserInfoThread.java @@ -0,0 +1,95 @@ +package com.gh.gamecenter.wxapi; + +import android.text.TextUtils; + +import com.gh.common.constant.Config; +import com.gh.common.util.LoginUtils; +import com.lightgame.utils.Utils; + +import org.json.JSONObject; + +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URL; + +/** + * Created by khy on 30/06/17. + * 获取微信 accessToken 和 userInfo + */ + +public class WeChatUserInfoThread extends Thread { + + private OnUserInfoCallBackListener listener; + + private String mCode; + + //刷新access_token有效期 + private String refresh_token = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN"; + + public WeChatUserInfoThread(OnUserInfoCallBackListener listener, String code) { + this.listener = listener; + this.mCode = code; + } + + @Override + public void run() { + super.run(); + try { + String tokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + + Config.WECHAT_APPID + "&secret=" + + Config.WECHAT_SECRET + "&code=" + + mCode + "&grant_type=authorization_code"; + String jsonResult = getJsonResultByUrlPath(tokenUrl); + JSONObject jsonObject = new JSONObject(jsonResult); + String accessToken = jsonObject.getString("access_token"); + String openid = jsonObject.getString("openid"); + + if (!TextUtils.isEmpty(accessToken) && !TextUtils.isEmpty(openid)) { + String userInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + accessToken + "&openid=" + openid; + String userInfo = getJsonResultByUrlPath(userInfoUrl); + if (listener != null && !TextUtils.isEmpty(userInfo)) { + listener.onComplete(userInfo, accessToken); + } + } else { + if (listener != null) { + listener.onError(); + } + } + } catch (Exception e) { + e.printStackTrace(); + if (listener != null) { + listener.onError(); + } + } + } + + private String getJsonResultByUrlPath(String path) throws Exception { + URL url = new URL(path); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setConnectTimeout(5000); + conn.setRequestMethod("GET"); + conn.setDoInput(true); + int code = conn.getResponseCode(); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + byte[] buffer = new byte[1024]; + int len; + Utils.log(WeChatUserInfoThread.class.getSimpleName(), "WeChatUserInfoThread-getJsonResultByUrlPath::" + code); + if (code == 200) { + InputStream is = conn.getInputStream(); + while ((len = is.read(buffer)) != -1) { + baos.write(buffer, 0, len); + } + String str = new String(baos.toByteArray()); + Utils.log(LoginUtils.class.getSimpleName(), "WeChatUserInfoThread-Body::" + str); + return str; + } + return null; + } + + public interface OnUserInfoCallBackListener { + void onComplete(String userInfo, String accessToken); + + void onError(); + } +} diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml index 0eda54419b..8edd43f770 100644 --- a/app/src/main/res/layout/activity_about.xml +++ b/app/src/main/res/layout/activity_about.xml @@ -73,7 +73,7 @@ android:layout_centerVertical = "true" android:layout_marginRight = "5dp" android:layout_toLeftOf = "@+id/about_version_tv" - android:visibility = "visible" /> + android:visibility = "gone" /> diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index 56c7cc2966..8d8ef7a764 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -2,8 +2,8 @@ + android:background = "@android:color/white" + android:orientation = "vertical" > @@ -46,6 +46,7 @@ android:drawablePadding = "12dp" android:hint = "@string/input_captcha_hint" android:maxLength = "8" + android:inputType="number" android:paddingBottom = "18dp" android:textColorHint = "@color/hint" android:textSize = "15sp" @@ -66,7 +67,7 @@ - + android:layout_alignParentBottom = "true" + android:layout_marginBottom = "30dp" + android:orientation="vertical" + android:visibility="gone"> + + + + + + - + android:background="@color/type_xinyou" + android:layout_marginTop="8dp"/> - - + android:layout_height = "wrap_content" + android:textColor="@color/title" + android:textSize="12sp" + android:text="如果你在当前的手机/设备中安装过光环助手V3.0以前的版本(具体是指V2.0-V2.6),则过去产生的数据只记录在本地缓存中,为了防止数据丢失,请尽快使用手机号完成登录。\n\n注:为了保证数据的唯一性,只能使用没登录过的手机号进行登录。" + android:layout_marginTop="15dp"/> + + - + android:layout_marginRight = "-20dp" + android:orientation = "vertical" + android:visibility="visible"> - + android:layout_marginBottom = "30dp" > - + + android:layout_centerInParent = "true" + android:text = "@string/other_login_hint" + android:textColor = "@color/title" + android:textSize = "12sp" /> - + + + + android:layout_width = "match_parent" + android:layout_height = "wrap_content" > - - - + android:layout_weight = "1" + android:gravity = "center" + android:orientation = "vertical" > - + - + - + - + android:layout_weight = "1" + android:gravity = "center" + android:orientation = "vertical" > + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_userinfo.xml b/app/src/main/res/layout/activity_userinfo.xml index 341fa63fb1..90d35eb5b3 100644 --- a/app/src/main/res/layout/activity_userinfo.xml +++ b/app/src/main/res/layout/activity_userinfo.xml @@ -117,7 +117,7 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_personal.xml b/app/src/main/res/layout/fragment_personal.xml index 3c0026845e..61e41beff7 100644 --- a/app/src/main/res/layout/fragment_personal.xml +++ b/app/src/main/res/layout/fragment_personal.xml @@ -449,6 +449,7 @@ android:paddingBottom="2dp" android:paddingLeft="8dp" android:paddingRight="8dp" + android:visibility="gone" android:text = "@string/personal_update_hint" android:textColor = "@android:color/white" android:textSize = "12sp" /> diff --git a/gradle.properties b/gradle.properties index 965443f6af..95c7e32add 100644 --- a/gradle.properties +++ b/gradle.properties @@ -22,6 +22,7 @@ org.gradle.jvmargs=-Xmx2048m -XX\:MaxPermSize\=512m -XX\:+HeapDumpOnOutOfMemoryE MIPUSH_APPID=2882303761517352993 MIPUSH_APPKEY=5451735292993 WECHAT_APPID=wx3ffd0785fad18396 +WECHAT_SECRET=368b49e8471857575a033b206218f9fb TENCENT_APPID=1104659243 WEIBO_APPKEY=1723629218 MTA_APPKEY=APV567FTBS7J