package net.coding.program;
import android.content.Context;
import android.content.Intent;
import android.graphics.Rect;
import android.net.Uri;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.umeng.socialize.sso.UMSsoHandler;
import net.coding.program.common.Global;
import net.coding.program.common.htmltext.URLSpanNoUnderline;
import net.coding.program.common.network.MyAsyncHttpClient;
import net.coding.program.common.umeng.UmengActivity;
import net.coding.program.maopao.share.CustomShareBoard;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.Extra;
import org.androidannotations.annotations.OptionsItem;
import org.androidannotations.annotations.ViewById;
@EActivity(R.layout.activity_web)
public class WebActivity extends UmengActivity {
@Extra
protected String url = Global.HOST;
@Extra
protected boolean share = false; // 可以弹出显示分享 Dialog
@ViewById
protected WebView webView;
@ViewById
protected ProgressBar progressBar;
String loading = "";
private TextView actionbarTitle;
@AfterViews
protected final void initWebActivity() {
Log.d("", "WebActivity " + url);
if (url.equals("/user/tasks")) {
url = Global.HOST_MOBILE + url;
}
Toolbar toolbar = (Toolbar) findViewById(R.id.custom_action_bar);
setSupportActionBar(toolbar);
actionbarTitle = (TextView) findViewById(R.id.actionbar_title);
findViewById(R.id.actionbar_close).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
loading = actionbarTitle.getText().toString();
webView.setWebViewClient(new WebViewClient());
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
progressBar.setProgress(newProgress);
if (newProgress == 100) {
// 没有title显示网址
String currentTitle = actionbarTitle.getText().toString();
if (loading.equals(currentTitle)) {
actionbarTitle.setText(url);
}
progressBar.setVisibility(View.INVISIBLE);
AlphaAnimation animation = new AlphaAnimation(1.0f, 0.0f);
animation.setDuration(500);
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
progressBar.setVisibility(View.INVISIBLE);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
progressBar.startAnimation(animation);
} else {
progressBar.setVisibility(View.VISIBLE);
}
}
@Override
public void onReceivedTitle(WebView view, String title) {
actionbarTitle.setText(title);
}
}
);
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setUseWideViewPort(true);
settings.setLoadWithOverviewMode(true);
webView.setWebViewClient(new CustomWebViewClient(this));
String useAgent = MyAsyncHttpClient.getMapHeaders().get("User-Agent");
webView.getSettings().setUserAgentString(useAgent);
webView.loadUrl(url, MyAsyncHttpClient.getMapHeaders());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(net.coding.program.R.menu.menu_web, menu);
if (!share) {
menu.findItem(R.id.action_share).setVisible(false);
}
return super.onCreateOptionsMenu(menu);
}
@Override
public void onBackPressed() {
if (webView.canGoBack()) {
webView.goBack();
} else {
finish();
}
}
@Override
protected void onDestroy() {
webView.destroy();
webView = null;
super.onDestroy();
}
@OptionsItem
protected final void action_browser() {
try {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(webView.getUrl()));
startActivity(intent);
} catch (Exception e) {
Toast.makeText(WebActivity.this, "用浏览器打开失败", Toast.LENGTH_LONG).show();
}
}
@OptionsItem
protected final void action_copy() {
String urlString = webView.getUrl();
if (urlString == null) {
Toast.makeText(WebActivity.this, "复制链接失败", Toast.LENGTH_SHORT).show();
return;
}
Global.copy(WebActivity.this, urlString);
Toast.makeText(WebActivity.this, urlString + " 已复制", Toast.LENGTH_SHORT).show();
}
@OptionsItem
protected final void action_share() {
String urlString = webView.getUrl();
if (urlString == null) {
Toast.makeText(WebActivity.this, "获取链接失败", Toast.LENGTH_SHORT).show();
return;
}
String title = actionbarTitle.getText().toString();
if (title.isEmpty()) {
Toast.makeText(WebActivity.this, "获取标题失败", Toast.LENGTH_SHORT).show();
return;
}
action_share_third();
}
void action_share_third() {
String title = actionbarTitle.getText().toString();
CustomShareBoard.ShareData shareData = new CustomShareBoard.ShareData("Coding", title, url);
CustomShareBoard shareBoard = new CustomShareBoard(this, shareData);
Rect rect = new Rect();
View decorView = getWindow().getDecorView();
decorView.getWindowVisibleDisplayFrame(rect);
int winHeight = getWindow().getDecorView().getHeight();
// 在 5.0 的android手机上,如果是 noactionbar,显示会有问题
shareBoard.showAtLocation(decorView, Gravity.BOTTOM, 0, winHeight - rect.bottom);
}
public static class CustomWebViewClient extends WebViewClient {
Context mContext;
public CustomWebViewClient(Context context) {
mContext = context;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return URLSpanNoUnderline.openActivityByUri(mContext, url, false, false);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMSsoHandler ssoHandler = CustomShareBoard.getShareController().getConfig().getSsoHandler(
requestCode);
if (ssoHandler != null) {
ssoHandler.authorizeCallBack(requestCode, resultCode, data);
}
}
}