package ren.solid.ganhuoio.module.mine; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.view.View; import android.widget.TextSwitcher; import android.widget.TextView; import android.widget.ViewSwitcher; import com.sina.weibo.sdk.auth.AuthInfo; import com.sina.weibo.sdk.auth.Oauth2AccessToken; import com.sina.weibo.sdk.auth.WeiboAuthListener; import com.sina.weibo.sdk.auth.sso.SsoHandler; import com.sina.weibo.sdk.exception.WeiboException; import java.util.HashMap; import java.util.Map; import cn.bmob.v3.BmobUser; import io.reactivex.annotations.NonNull; import io.reactivex.functions.Consumer; import ren.solid.ganhuoio.R; import ren.solid.ganhuoio.api.SinaApiService; import ren.solid.ganhuoio.bean.Weibo; import ren.solid.ganhuoio.common.constant.Constants; import ren.solid.ganhuoio.common.event.LoginEvent; import ren.solid.ganhuoio.utils.AuthorityUtils; import ren.solid.library.http.ServiceFactory; import ren.solid.library.rx.RxBus; import ren.solid.library.rx.RxUtils; import ren.solid.library.utils.ToastUtils; public class LoginActivity extends AppCompatActivity { private AuthInfo mAuthInfo; private SsoHandler mSsoHandler; private Oauth2AccessToken mAccessToken; private TextSwitcher mTextSwitcher; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); setUpToolBar(); findViewById(R.id.ll_login).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { login(); } }); setTitle(getString(R.string.mine_login)); } private void setUpToolBar() { Toolbar mToolbar = (Toolbar) findViewById(ren.solid.library.R.id.toolbar); setSupportActionBar(mToolbar); mToolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { onBackPressed(); } }); getSupportActionBar().setHomeButtonEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowTitleEnabled(false); mTextSwitcher = (TextSwitcher) findViewById(ren.solid.library.R.id.textSwitcher); mTextSwitcher.setFactory(new ViewSwitcher.ViewFactory() { @SuppressWarnings("deprecation") @Override public View makeView() { Context context = LoginActivity.this; TextView textView = new TextView(context); textView.setTextAppearance(context, ren.solid.library.R.style.WebTitle); textView.setSingleLine(true); textView.setEllipsize(TextUtils.TruncateAt.MARQUEE); textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(final View v) { v.setSelected(!v.isSelected()); } }); return textView; } }); mTextSwitcher.setInAnimation(this, android.R.anim.fade_in); mTextSwitcher.setOutAnimation(this, android.R.anim.fade_out); } private void login() { mAuthInfo = new AuthInfo(this, Constants.SINA_APP_KEY, Constants.SINA_REDIRECT_URL, Constants.SINA_SCOPE); mSsoHandler = new SsoHandler(this, mAuthInfo); mSsoHandler.authorize(new AuthListener()); } class AuthListener implements WeiboAuthListener { @Override public void onComplete(Bundle values) { mAccessToken = Oauth2AccessToken.parseAccessToken(values); if (mAccessToken.isSessionValid()) { ToastUtils.getInstance().showToast("登录成功"); AuthorityUtils.setUid(mAccessToken.getUid()); AuthorityUtils.setAccessToken(mAccessToken.getToken()); AuthorityUtils.setRefreshToken(mAccessToken.getRefreshToken()); AuthorityUtils.setExpiresIn(mAccessToken.getExpiresTime()); getUserInfo(); } else { ToastUtils.getInstance().showToast(values.getString("code", "")); } } @Override public void onCancel() { ToastUtils.getInstance().showToast("onCancel"); } @Override public void onWeiboException(WeiboException e) { ToastUtils.getInstance().showToast("微博授权异常"); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // SSO 授权回调 // 重要:发起 SSO 登陆的 Activity 必须重写 onActivityResults if (mSsoHandler != null) { mSsoHandler.authorizeCallBack(requestCode, resultCode, data); } } public void getUserInfo() { Map<String, String> params = new HashMap<>(); params.put("access_token", AuthorityUtils.getAccessToken()); params.put("uid", AuthorityUtils.getUid()); SinaApiService service = ServiceFactory.getInstance().createService(SinaApiService.class); service.getUserInfo(AuthorityUtils.getAccessToken(), AuthorityUtils.getUid()).compose(RxUtils.<Weibo>defaultSchedulers_single()) .subscribe(new Consumer<Weibo>() { @Override public void accept(@NonNull Weibo result) throws Exception { if (result != null) { AuthorityUtils.setUserName(result.getName()); AuthorityUtils.login(result); RxBus.getInstance().send(new LoginEvent(1)); BmobUser user = new BmobUser(); user.setUsername(result.getName()); user.setPassword("123456"); try { user.signUp(LoginActivity.this, null); } catch (Exception e) { e.printStackTrace(); } finish(); } } }); } @Override public void setTitle(CharSequence title) { super.setTitle(title); mTextSwitcher.setText(title); mTextSwitcher.setSelected(true); } @Override public void onBackPressed() { finish(); } }