/**============================================================
* 版权: 久其软件 版权所有 (c)
* 包: com.jiuqi.njt.ui
* 修改记录:
* 日期 作者 内容
* =============================================================
* 2013-10-06 malingya
* ============================================================*/
package com.jiuqi.njt.ui;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.webkit.CookieManager;
import android.webkit.DownloadListener;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.FrameLayout;
import android.widget.ImageView;
import com.jiuqi.mobile.nigo.comeclose.bean.app.news.NoticeNewsBean;
import com.jiuqi.mobile.nigo.comeclose.manager.app.INewsManager;
import com.jiuqi.mobile.nigo.comeclose.ws.client.ClientContext;
import com.jiuqi.njt.R;
import com.jiuqi.njt.data.MyApp;
import com.jiuqi.njt.util.Constants;
import com.jiuqi.njt.util.TextToSpeechUtil;
import com.jiuqi.njt.util.TitleBarUtil;
import com.jiuqi.njt.util.UIUtil;
import com.jiuqi.njt.widget.WaitPageWebView;
/**
* <p>
* 农信网功能模块
* </p>
*
* <p>
* Copyright: 版权所有 (c)<br>
* Company: 久其
* </p>
*
* @author malingya
* @version 2013-10-06
*/
public class NxwPushInfoDetailActivity extends Activity implements OnTouchListener,
OnGestureListener {
private FrameLayout webviewLayout;
private WebView webview;
private String url;
private GestureDetector gestureDetector;
private ImageView speechButton;
private String id;
private int position = 0;
private ArrayList<NoticeNewsBean> newslist;
private MyApp application;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
doinit();
}
private void doinit() {
initParam();
initWidgets();
initListeners();
initUI();
}
private void initParam() {
url = getIntent().getStringExtra(Constants.PARAM_URL);
id = getIntent().getStringExtra(Constants.PARAM_ID);
application = (MyApp) getApplicationContext();
doQuery();
}
private void initWidgets() {
String title = TextUtils.isEmpty(getIntent().getStringExtra(
Constants.PARAM_TITLE)) ? "" : getIntent().getStringExtra(
Constants.PARAM_TITLE);
String btnLeftTitle = TextUtils.isEmpty(getIntent().getStringExtra(
Constants.PARAM_BTNLEFT_TITLE)) ? Constants.MAINPAGE_TITLE_TEXT
: getIntent().getStringExtra(Constants.PARAM_BTNLEFT_TITLE);
setContentView(R.layout.nxw_moduler_detail);
View rlTitleBar = findViewById(R.id.titleBarStub);
TitleBarUtil.createTitleBar(this, rlTitleBar, title,
Constants.BTN_BACK_TEXT, new OnClickListener() {
@Override
public void onClick(View v) {
NxwPushInfoDetailActivity.this.finish();
}
}, btnLeftTitle, new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(NxwPushInfoDetailActivity.this,NjtMainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
NxwPushInfoDetailActivity.this.finish();
}
});
speechButton = (ImageView) findViewById(R.id.speechButton);
webviewLayout = (FrameLayout) findViewById(R.id.webview);
webview = new WaitPageWebView(NxwPushInfoDetailActivity.this, null);
gestureDetector = new GestureDetector(NxwPushInfoDetailActivity.this);
}
// ---------begin触摸屏监听和手势监听的方法-------------------------------------------------------
public boolean onTouch(View v, MotionEvent event) {
gestureDetector.onTouchEvent(event);// 将触摸屏事件传入手势事件
//请求焦点
webview.requestFocus();
return false;
}
public boolean onDown(MotionEvent e) {
return true;
}
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
float scale = getResources().getDisplayMetrics().density;
int FLINGTHRESHOLD = (int) (20.0f * scale + 0.5f);
float vx = Math.abs(velocityX);// 取其绝对值
float vy = Math.abs(velocityY);
//----begin设置浮动框的弹出和收回--------------------
//列表页支持上下滑动翻页,内容页支持左右滑动
if(vx - vy >FLINGTHRESHOLD){
if(newslist!=null && newslist.size()>1){
if(velocityX>0){//前一页
toForward();
}else if(velocityX<0){//后一页
toNext();
}
}else{ //没有更多内容,返回到列表
NxwPushInfoDetailActivity.this.finish();
}
}
return false;
}
private void initListeners() {
// 点击后退按钮,让WebView后退一页(也可以覆写Activity的onKeyDown方法)
webview.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
NxwPushInfoDetailActivity.this.finish();
// 清除缓存
webview.removeAllViews();
webview.clearCache(true);
CookieManager.getInstance().removeAllCookie();
}
return false;
}
});
webview.setOnClickListener(null);
//webview.setOnTouchListener(this);
DisplayMetrics dm = getResources().getDisplayMetrics();
final int screenWidth = dm.widthPixels;
final int screenHeight = dm.heightPixels - 50;
speechButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(newslist!=null){
NoticeNewsBean bean = newslist.get(position);
StringBuffer contentString = new StringBuffer();
contentString.append(bean.getTitle());
contentString.append("来源");
contentString.append(bean.getAddPersonOrganizationName());
contentString.append(bean.getCreateDateStr());
contentString.append(bean.getContent());
TextToSpeechUtil ttsUtil = new TextToSpeechUtil(NxwPushInfoDetailActivity.this);
ttsUtil.textToSpeechDialog(UIUtil.delHTMLTag(contentString.toString()));;
}
}
});
speechButton.setOnTouchListener(new OnTouchListener(){
int lastX, lastY;
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
int ea=event.getAction();
Log.i("TAG", "Touch:"+ea);
//Toast.makeText(DraftTest.this, "位置:"+x+","+y, Toast.LENGTH_SHORT).show();
switch(ea){
case MotionEvent.ACTION_DOWN:
lastX = (int) event.getRawX();
lastY = (int) event.getRawY();
break;
/**
* layout(l,t,r,b)
* l Left position, relative to parent
t Top position, relative to parent
r Right position, relative to parent
b Bottom position, relative to parent
* */
case MotionEvent.ACTION_MOVE:
int dx =(int)event.getRawX() - lastX;
int dy =(int)event.getRawY() - lastY;
int left = v.getLeft() + dx;
int top = v.getTop() + dy;
int right = v.getRight() + dx;
int bottom = v.getBottom() + dy;
if(left < 0){
left = 0;
right = left + v.getWidth();
}
if(right > screenWidth){
right = screenWidth;
left = right - v.getWidth();
}
if(top < 0){
top = 0;
bottom = top + v.getHeight();
}
if(bottom > screenHeight){
bottom = screenHeight;
top = bottom - v.getHeight();
}
v.layout(left, top, right, bottom);
Log.i("", "position:" + left +", " + top + ", " + right + ", " + bottom);
lastX = (int) event.getRawX();
lastY = (int) event.getRawY();
break;
case MotionEvent.ACTION_UP:
break;
}
return false;
}});
}
private void initUI() {
webview.getSettings().setJavaScriptEnabled(true);// 启用javascript脚本程序
webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);// 支持通过JS打开新窗口
webview.getSettings().setSupportZoom(false);// //支持缩放
// webview.getSettings().setUseWideViewPort(true); //将图片调整到适合webview的大小
// webview.getSettings().setPluginState(PluginState.ON);
webview.getSettings().setBuiltInZoomControls(true);// 设置支持缩放
webview.getSettings().setDefaultTextEncodingName("UTF-8");
webview.loadUrl(url); // 加载网络中的index.html.
webview.setWebViewClient(new MyWebViewClient());
// 设置滚动条样式这样设置就不会出现右边和下边的滚动条了
// webview.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
webview.setDownloadListener(new MyWebViewDownLoadListener());
// 设置缓存
webview.getSettings().setDomStorageEnabled(true);
webview.getSettings().setAppCacheMaxSize(1024 * 1024 * 8);// 设置缓冲大小,我设的是8M
String appCacheDir = this.getApplicationContext()
.getDir("cache", Context.MODE_PRIVATE).getPath();
webview.getSettings().setAppCachePath(appCacheDir);
webview.getSettings().setAllowFileAccess(true);
webview.getSettings().setAppCacheEnabled(true);
webview.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
webviewLayout.addView(webview);
}
private void doQuery(){
GetNoticeInfo getInfo = new GetNoticeInfo();
getInfo.execute();
}
private class GetNoticeInfo extends AsyncTask<Void, Void, String> {
protected String doInBackground(Void... params) {
try {
ClientContext context = application.getClientContext();
if(null==context){
context = ClientContext.getClientContext(
Constants.SERVER_URL, Constants.ANONYMOUS,
Constants.ANONYMOUS);
application.setClientContext(context);
}
INewsManager manager = context
.getManager(INewsManager.class);
//manager
NoticeNewsBean bean = manager.find(NoticeNewsBean.class, id);
if(newslist==null){
newslist = new ArrayList<NoticeNewsBean>();
}
newslist.add(bean);
Log.i("NxwPushInfoDetailActivity", "获取成功");
} catch (Exception e) {
Log.i("NxwPushInfoDetailActivity", "获取失败");
e.printStackTrace();
}
return null;
}
}
private class MyWebViewDownLoadListener implements 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);
}
}
private class MyWebViewClient extends WebViewClient {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
}
//详情的上一条
private void toForward(){
int poi = position - 1;
if(poi>-1){
NoticeNewsBean bean = newslist.get(poi);
String urlString = Constants.NXW_MODULER_URL_DETAIL_BASE+bean.getGuid();
webview.loadUrl(urlString);
position = poi;
}else {
NxwPushInfoDetailActivity.this.finish();
}
}
//详情下一条
private void toNext(){
int poi = position + 1;
if(poi<newslist.size()){
NoticeNewsBean bean = newslist.get(poi);
String urlString = Constants.NXW_MODULER_URL_DETAIL_BASE+bean.getGuid();
webview.loadUrl(urlString);
position = poi;
}else {
NxwPushInfoDetailActivity.this.finish();
}
}
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
}
}