package com.ztspeech.simutalk2.weibo;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.net.http.SslError;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Display;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.Window;
import android.webkit.SslErrorHandler;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import com.tencent.weibo.oauthv1.OAuthV1;
import com.ztspeech.simutalk2.R;
import com.ztspeech.weibo.sdk.kaixin.KaixinDialogListener;
/**
* ������ʾ�û���֤�����dialog����װ��һ��webview��ͨ��redirect��ַ�еIJ�������ȡaccesstoken
*
* @author xiaowei6@staff.sina.com.cn
*
*/
public class TencentWeiboDialog extends Dialog {
private static final float[] DIMENSIONS_LANDSCAPE = { 460, 260 };
private static final float[] DIMENSIONS_PORTRAIT = { 280, 420 };
private static final String DIALOG_LOADING = "��������...";
private String mUrl;
private KaixinDialogListener mListener;
private ProgressDialog mProgress;
private WebView mWebView;
private LinearLayout mContent;
private Context context;
private Handler handler;
private OAuthV1 oAuth;
public TencentWeiboDialog(Context context, String mUrl, OAuthV1 oAuth, Handler handler) {
super(context);
this.context = context;
this.mUrl = mUrl;
this.oAuth = oAuth;
this.handler = handler;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mProgress = new ProgressDialog(getContext(), R.style.mydialog);
mProgress.requestWindowFeature(Window.FEATURE_NO_TITLE);
mProgress.setMessage(DIALOG_LOADING);
mProgress.setCanceledOnTouchOutside(false);
mContent = new LinearLayout(getContext());
mContent.setOrientation(LinearLayout.VERTICAL);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setUpWebView();
Display display = getWindow().getWindowManager().getDefaultDisplay();
float scale = getContext().getResources().getDisplayMetrics().density;
float[] dimensions = display.getWidth() < display.getHeight() ? DIMENSIONS_PORTRAIT : DIMENSIONS_LANDSCAPE;
addContentView(mContent, new FrameLayout.LayoutParams((int) (dimensions[0] * scale + 0.5f),
(int) (dimensions[1] * scale + 0.5f)));
}
private void setUpWebView() {
mWebView = new WebView(getContext());
mWebView.setVerticalScrollBarEnabled(false);
mWebView.setHorizontalScrollBarEnabled(false);
mWebView.setWebViewClient(new TencentWeiboDialog.WeiboWebViewClient());
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl(mUrl);
mWebView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
v.requestFocus();
return false;
}
});
mWebView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
v.requestFocus();
return false;
}
});
FrameLayout.LayoutParams fill = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.FILL_PARENT);
mWebView.setLayoutParams(fill);
mContent.addView(mWebView);
}
protected void onBack() {
try {
mProgress.dismiss();
if (null != mWebView) {
mWebView.stopLoading();
mWebView.destroy();
}
} catch (Exception e) {
}
dismiss();
}
private class WeiboWebViewClient extends WebViewClient {
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
TencentWeiboDialog.this.dismiss();
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
// Log.e(TAG, "WebView onPageStarted...");
// Log.e(TAG, "URL = " + url);
if (url != null) {
if (url.indexOf("checkType=verifycode") != -1) {
int start = url.indexOf("checkType=verifycode&v=") + 23;
String verifyCode = url.substring(start, start + 6);
oAuth.setOauthVerifier(verifyCode);
view.destroyDrawingCache();
handler.sendMessage(Message.obtain(handler, 200, oAuth));
onBack();
} else {
mProgress.show();
}
}
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
// Log.d(TAG, "onPageFinished URL: " + url);
super.onPageFinished(view, url);
if (mProgress.isShowing()) {
mProgress.dismiss();
}
mWebView.setVisibility(View.VISIBLE);
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
}
}
}