package com.emop.client;
import static com.emop.client.Constants.TAG_EMOP;
import java.util.ArrayList;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONObject;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnLongClickListener;
import android.webkit.CookieSyncManager;
import android.webkit.DownloadListener;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.emop.client.web.TaobaoLoginWebClient;
import com.taobao.top.android.TopAndroidClient;
import com.taobao.top.android.TopParameters;
import com.taobao.top.android.api.ApiError;
import com.taobao.top.android.api.TopApiListener;
import com.tencent.mm.sdk.platformtools.Log;
public class WebViewActivity extends BaseActivity {
public final static int WEB_DONE = 1;
public final static int WEB_MSG = 2;
public final static int WEB_LOADING = 3;
public final static int WEB_LOADED = 4;
private ProgressBar processBar = null;
private WebView web = null;
private TextView titleView = null;
private String curURL = "";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.web_view);
this.web = (WebView)findViewById(R.id.web);
this.processBar = (ProgressBar)findViewById(R.id.progressbar_loading);
web.setVerticalScrollBarEnabled(false);
web.setHorizontalScrollBarEnabled(false);
//web.getSettings().s
web.getSettings().setJavaScriptEnabled(true);
web.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
web.setDownloadListener(new DownloadListener(){
@Override
public void onDownloadStart(String url, String userAgent, String contentDisposition,
String mimetype, long contentLength) {
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
});
CookieSyncManager.createInstance(this);
//web.setWebViewClient(new TaokeWebViewClient());
titleView = (TextView)findViewById(R.id.title);
titleView.setLongClickable(true);
titleView.setOnLongClickListener(new OnLongClickListener(){
@Override
public boolean onLongClick(View arg0) {
if(curURL != null && curURL.length() > 1){
Uri uri = Uri.parse(curURL);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
return false;
}
});
}
protected void onResume (){
super.onResume();
Intent intent = this.getIntent();
String title = intent.getStringExtra("title");
if(title != null && title.trim().length() > 0 && titleView != null){
titleView.setText(title);
}
if(intent.getBooleanExtra("taobaoLogin", false)){
web.setWebViewClient(new TaobaoLoginWebClient(this, processBar));
if(processBar != null){
processBar.setVisibility(View.INVISIBLE);
}
}else {
web.setWebViewClient(new TaokeWebViewClient());
}
//Uri dataUri = intent.getData();
String http_url = intent.getStringExtra("http_url");
String num_iid = intent.getStringExtra("taoke_num_iid");
boolean autoMobile = autoConvertMobileLink(num_iid);
if(!autoMobile && http_url != null && http_url.startsWith("http")){
Log.d(Constants.TAG_EMOP, "loading url:" + http_url);
web.loadUrl(http_url);
}
/**
* 如果是淘宝商品,在客户端转换后跳转。
*/
if(autoMobile){
loadTaoboItem(num_iid, http_url);
}
}
/**
* 判断是否需要自动转换,移动版链接。只有冒泡自己的帐号才需要转换链接。
* @param num_iid
* @return
*/
protected boolean autoConvertMobileLink(String num_iid){
if(num_iid == null) return false;
if(client.trackUserId != null && !client.trackUserId.equals("11")){
return false;
}
return true;
}
protected void loadTaoboItem(final String numiid, final String shortUrl){
final TopAndroidClient client = TopAndroidClient.getAndroidClientByAppKey(Constants.TAOBAO_APPID);
TopParameters param = new TopParameters();
param.setMethod("taobao.taobaoke.widget.items.convert");
param.addFields("click_url","num_iid");
param.addParam("is_mobile", "true");
param.addParam("num_iids", numiid);
TopApiListener listener = new TopApiListener(){
@Override
public void onComplete(JSONObject json) {
// TODO Auto-generated method stub
String click = null;
try{
JSONArray items = json.getJSONObject("taobaoke_widget_items_convert_response").
getJSONObject("taobaoke_items").getJSONArray("taobaoke_item");
JSONObject item = items.getJSONObject(0);
click = item.getString("click_url");
Log.i("emop", "num iid:" + numiid + ", convert click url:" + click);
}catch(Exception e){
Log.w("emop", "error e:" + e.toString(), e);
}finally{
if(click != null){
loadMobileUrl(click);
}else {
loadShortUrl(shortUrl);
}
}
}
@Override
public void onError(ApiError error) {
Log.w("emop", "error e:" + error.toString());
loadShortUrl(shortUrl);
}
@Override
public void onException(Exception e) {
Log.w("emop", "error e:" + e.toString(), e);
loadShortUrl(shortUrl);
}
private void loadMobileUrl(String url){
web.loadUrl(url);
}
private void loadShortUrl(String url){
web.loadUrl(url);
}
};
client.api(param, null, listener, true);
}
public void onFinish(View v){
onBackPressed();
}
public void onBackPressed() {
if(web.canGoBack()){
web.goBack();
}else {
finish();
}
}
public Handler handler = new Handler(){
public void handleMessage(final Message msg) {
String message = null;
if(msg.obj != null){
message = msg.obj.toString();
if(message != null){
Toast.makeText(WebViewActivity.this, message, Toast.LENGTH_LONG).show();
}
}
if(msg.what == WEB_DONE){
finish();
}else if(msg.what == WEB_LOADING){
processBar.setVisibility(View.VISIBLE);
}else if(msg.what == WEB_LOADED){
processBar.setVisibility(View.INVISIBLE);
}
}
};
private class TaokeWebViewClient extends WebViewClient {
private boolean inTaobao = false;
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
Log.d("xx", "url:" + url);
curURL = url;
//mSpinner.show();
processBar.setVisibility(View.VISIBLE);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Log.d("xx", "done url:" + url);
//curURL = url;
/**
* 刚进入宝贝详情页时,清空回退记录。这样在点回退的时候才能退出详情页。
* 不然是退回到短网址页面,会再次进入详情页。
*/
if((!inTaobao && isProductUrl(url)) || url.endsWith("taobao.com/")){
inTaobao = true;
web.clearHistory();
}
processBar.setVisibility(View.INVISIBLE);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.d(TAG_EMOP, "Redirect URL: " + url);
int i = url.indexOf("m.taobao.com");
if(i > 0 && i < 15 && isAvilible(getApplicationContext(), "com.taobao.taobao")){
Intent intent = new Intent();
//intent.setClass(this, LoginActivity.class);
url = url.replaceFirst("http:", "itaobao:");
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
// intent.setComponent(ComponentName.unflattenFromString("com.taobao.taobao/com.taobao.tao.detail.DetailActivity"))
startActivityForResult(intent, OPEN_TAOBAO);
finish();
return true;
}else {
return false;
}
}
public boolean isProductUrl(String url){
if(url.indexOf("s.click") > 0 || url.indexOf("view_shop.htm") > 0){
return false;
}
if(url.indexOf("tmall.com") > 0 || url.indexOf("m.taobao.com") > 0){
return true;
}
return false;
}
}
private boolean isAvilible(Context context, String packageName){
final PackageManager packageManager = context.getPackageManager();//获取packagemanager
List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);//获取所有已安装程序的包信息
List<String> pName = new ArrayList<String>();//用于存储所有已安装程序的包名
//从pinfo中将包名字逐一取出,压入pName list中
if(pinfo != null){
for(int i = 0; i < pinfo.size(); i++){
String pn = pinfo.get(i).packageName;
if(pn.startsWith(packageName)){
return true;
}
//pName.add(pn);
}
}
return false; //pName.contains(packageName);//判断pName中是否有目标程序的包名,有TRUE,没有FALSE
}
}