package cn.bingoogolapple.weibo.ui.activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import cn.bingoogolapple.weibo.R;
import cn.bingoogolapple.weibo.engine.ApiClient;
import cn.bingoogolapple.weibo.engine.BaseGsonRespDelegate;
import cn.bingoogolapple.weibo.model.Account;
import cn.bingoogolapple.weibo.model.Config;
import cn.bingoogolapple.weibo.util.Logger;
import cn.bingoogolapple.weibo.util.SPUtils;
import cn.bingoogolapple.weibo.util.ToastUtils;
public class AuthActivity extends BaseActivity {
private WebView mContentWv;
@Override
protected void initView(Bundle savedInstanceState) {
setContentView(R.layout.activity_auth);
mContentWv = getViewById(R.id.wv_auth_content);
}
@Override
protected void setListener() {
mContentWv.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
showLoadingDialog(R.string.loading_data_tip);
// 回调地址默认是http://
// http://www.bingoogolapple.cn/?code=xxxxxxxxx
Logger.i(TAG, "url = " + url);
String codeFlag = "code=";
if (url.contains(codeFlag)) {
view.stopLoading();
String code = url.substring(url.indexOf(codeFlag) + codeFlag.length());
accessTokenWithCode(code);
}
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
dismissLoadingDialog();
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
dismissLoadingDialog();
ToastUtils.show(R.string.network_error_tip);
}
});
}
@Override
protected void processLogic(Bundle savedInstanceState) {
mContentWv.getSettings().setJavaScriptEnabled(true);
Config config = Config.getInstance();
String urlStr = "https://api.weibo.com/oauth2/authorize?client_id=" + config.clientId + "&redirect_uri=" + config.redirectUri;
mContentWv.loadUrl(urlStr);
}
private void accessTokenWithCode(String code) {
Logger.i(TAG, "code = " + code);
ApiClient.accessTokenWithCode(code, new BaseGsonRespDelegate<Account>(this) {
@Override
protected void onSucess(Account account) {
account.save();
if (mApp.getCurrentVersionName().equals(SPUtils.getLatestVersionName())) {
forwardAndFinish(MainActivity.class);
} else {
forwardAndFinish(NewFeatureActivity.class);
}
}
});
}
@Override
public void onBackPressed() {
if (mContentWv.canGoBack()) {
mContentWv.goBack();
} else {
mApp.exitWithDoubleClick();
}
}
}