package com.weibo.net;
import org.czzz.demo.R;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.graphics.Bitmap;
import android.net.Uri;
import android.net.http.SslError;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.webkit.SslErrorHandler;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.LinearLayout;
import android.widget.Toast;
import com.weibo.net.AccessToken;
import com.weibo.net.DialogError;
import com.weibo.net.Utility;
import com.weibo.net.Weibo;
import com.weibo.net.WeiboDialogListener;
import com.weibo.net.WeiboException;
/***
* 自定义webview(Oauth认证)
*
* @author zhangjia
*
*/
public class WeiboWebviewActivity extends Activity implements WeiboDialogListener {
private final String TAG = "jjhappyforever";
private WebView mWebView;
private WeiboDialogListener mListener;
private LinearLayout linearLayout;
private String mUrl;
public void InitWebView() {
mWebView = (WebView) findViewById(R.id.webv);
mWebView.setVerticalScrollBarEnabled(false);
mWebView.setHorizontalScrollBarEnabled(false);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebViewClient(new WeiboWebViewClient());
mWebView.loadUrl(mUrl);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mListener = this;
setContentView(R.layout.web_view);
Intent i = getIntent();
mUrl = i.getStringExtra("url");
InitWebView();
}
/***
* WebViewClient
*
* @author zhangjia
*
*/
private class WeiboWebViewClient extends WebViewClient {
/***
* 地址改变都会调用
*/
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.d(TAG, "Redirect URL: " + url);
if (url.startsWith(Weibo.getInstance().getRedirectUrl())) {
handleRedirectUrl(view, url);
return true;
}
// launch non-dialog URLs in a full browser
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
return true;
}
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
mListener.onError(new DialogError(description, errorCode,
failingUrl));
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
Log.d(TAG, "onPageStarted URL: " + url);
// google issue. shouldOverrideUrlLoading not executed
/**
* 点击授权,url正确
*/
if (url.startsWith(Weibo.getInstance().getRedirectUrl())) {
handleRedirectUrl(view, url);
view.stopLoading();
return;
}
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
Log.d(TAG, "onPageFinished URL: " + url);
super.onPageFinished(view, url);
linearLayout.setVisibility(View.GONE);
}
public void onReceivedSslError(WebView view, SslErrorHandler handler,
SslError error) {
handler.proceed();
}
}
private void handleRedirectUrl(WebView view, String url) {
Bundle values = Utility.parseUrl(url);
String error = values.getString("error");
String error_code = values.getString("error_code");
// 授权成功
if (error == null && error_code == null) {
mListener.onComplete(values);
// 拒绝失败等
} else if (error.equals("access_denied")) {
mListener.onCancel();
} else {
// 异常
mListener.onWeiboException(new WeiboException(error, Integer
.parseInt(error_code)));
}
}
@Override
public void onComplete(Bundle values) {
/***
* 在这里要save the access_token
*/
String token = values.getString("access_token");
// SharedPreferences preferences = getSharedPreferences(MainActivity.file,
// 0);
// Editor editor = preferences.edit();
// editor.putString("token", token);
// editor.commit();
AccessToken accessToken = new AccessToken(token, Weibo.getAppSecret());
Weibo.getInstance().setAccessToken(accessToken);
setResult(RESULT_OK);
finish();
}
@Override
public void onWeiboException(WeiboException e) {
e.printStackTrace();
}
@Override
public void onError(DialogError e) {
e.printStackTrace();
}
@Override
public void onCancel() {
finish();
}
}