package com.hupu.games.fragment;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import org.json.JSONArray;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings.LayoutAlgorithm;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import com.hupu.games.R;
import com.hupu.games.activity.BaseGameActivity;
import com.hupu.games.activity.HupuBaseActivity;
import com.hupu.games.activity.WebViewActivity;
import com.hupu.games.adapter.LiveDataListAdapter;
import com.hupu.games.casino.CasinoDialog;
import com.hupu.games.common.HupuLog;
import com.hupu.games.common.HupuSchemeProccess;
import com.hupu.games.common.SharedPreferencesMgr;
import com.hupu.games.data.BaseLiveResp;
import com.hupu.games.data.BaseLiveResp.CasinoStatus;
import com.hupu.games.data.IncreaseEntity;
import com.hupu.games.data.LiveEntity;
import com.hupu.games.data.LiveEntity.Answer;
import com.hupu.games.data.goldbean.ExchangeGoldBeanEntity;
import com.hupu.games.data.goldbean.GoldBeanManager;
import com.hupu.games.pay.BasePayActivity;
import com.hupu.games.pay.PhoneInputActivity;
import com.hupu.games.view.XListView;
import com.hupu.games.view.XListView.IXListViewListener;
/**
* 直播fragment
* */
@SuppressLint("ValidFragment")
public class LiveFragment extends BaseFragment {
private XListView mLvLive;
private LiveDataListAdapter mListAdapter;
private int i_homeId;
private int i_awayId;
private View mProgressBar;
private ArrayList<LiveEntity> mListMsg;
BaseGameActivity mAct;
// View nodata;
WebView noData;
private String mPreview;
View imgNew;
private HashMap<Integer, LiveEntity> mapCasino;
// private HashMap<Integer,Integer> mapCommit;
private boolean bGetData;
private int[] bets;
View casinoBtn;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mAct = (BaseGameActivity) getActivity();
mapCasino = new HashMap<Integer, LiveEntity>();
// mapCommit= new HashMap<Integer, Integer>();
}
@SuppressLint("ValidFragment")
public LiveFragment(int h, int a, boolean isStart) {
super();
i_homeId = h;
i_awayId = a;
isStart(isStart);
}
public LiveFragment() {
super();
isStart(false);
}
boolean start;
String url;
public void setURL(String u) {
url = u;
//前瞻不和比赛状态绑定
// if (!start && noData != null & url != null)
// noData.loadDataWithBaseURL(null, getContent(url), mimeType,
// encoding, null);
if (noData != null && url != null){
noData.setVisibility(View.VISIBLE);
noData.loadDataWithBaseURL(null, getContent(url), mimeType,
encoding, null);
}
}
public void setPreview(String previewStr){
mPreview = previewStr;
if (noData!= null) {
noData.setVisibility(View.GONE);
}
}
public void setURLForCBA(String u) {
url = u;
mPreview = url;
if (noData != null && url != null){
noData.setVisibility(View.VISIBLE);
noData.loadDataWithBaseURL(null, getContent(url), mimeType,
encoding, null);
}
}
/** 比赛是否开始了 */
public void isStart(boolean s) {
start = s;
if (start && noData != null)
noData.setVisibility(View.GONE);
if (!start && noData != null & url != null)
noData.loadUrl(url);
}
private static final String mimeType = "text/html";
private static final String encoding = "utf-8";
private String getContent(String c) {
StringBuffer sb = new StringBuffer();
sb.append("<html xmlns=\"http://www.w3.org/1999/xhtml\">"
+ "<head>"
+ "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />"
+ "<title></title>" + "</head>" + "<body>" + c
+ "</body></html>");
return sb.toString();
}
Click click;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_live, container, false);
mProgressBar = v.findViewById(R.id.probar);
noData = (WebView) v.findViewById(R.id.webview_no_data);
if (mPreview != null&&!"".equals(mPreview))
noData.setVisibility(View.VISIBLE);
else
noData.setVisibility(View.GONE);
noData.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Intent in = new Intent(getActivity(), WebViewActivity.class);
in.putExtra("url", url);
startActivity(in);
return true;
}
});
if ((bGetData && mProgressBar != null) || !start)
mProgressBar.setVisibility(View.GONE);
if (start)
noData.setVisibility(View.GONE);
else if (url != null)
noData.loadDataWithBaseURL(null, getContent(url), mimeType,
encoding, null);
click = new Click();
mListAdapter = new LiveDataListAdapter(getActivity(), i_homeId,
i_awayId, click);
mLvLive = (XListView) v.findViewById(R.id.list_live);
mLvLive.setXListViewListener(new pullListener());
mLvLive.setPullLoadEnable(false, false);
mLvLive.setAdapter(mListAdapter);
if (mListMsg != null || bGetData) {
mListAdapter.setData(mListMsg);
}
return v;
}
public void setData(ArrayList<LiveEntity> gameList) {
bGetData = true;
if (mProgressBar != null)
mProgressBar.setVisibility(View.GONE);
mListMsg = gameList;
if (mListMsg != null) {
int size = mListMsg.size();
LiveEntity en;
for (int i = 0; i < size; i++) {
en = mListMsg.get(i);
if (en.type == 1) {
mapCasino.put(en.answers[0].casino_id, en);
}
}
}
if (mListAdapter != null) {
mListAdapter.setData(mListMsg);
}
}
public void setBets(int[] b) {
bets = b;
}
/** 添加到列表尾部 */
public void appendData1(ArrayList<LiveEntity> gameList) {
if (mProgressBar != null)
mProgressBar.setVisibility(View.GONE);
if (gameList != null) {
int size = gameList.size();
LiveEntity en;
for (int i = 0; i < size; i++) {
en = gameList.get(i);
if (en.type == 1) {
mapCasino.put(en.answers[0].casino_id, en);
}
}
}
if (mListAdapter != null)
mListMsg = mListAdapter.appendData(gameList);
}
/** 添加到列表头部 */
public void addData1(ArrayList<LiveEntity> gameList) {
if (mProgressBar != null)
mProgressBar.setVisibility(View.GONE);
if (gameList != null) {
int size = gameList.size();
LiveEntity en;
for (int i = 0; i < size; i++) {
en = gameList.get(i);
if (en.type == 1) {
mapCasino.put(en.answers[0].casino_id, en);
}
}
}
if (mListAdapter != null)
mListMsg = mListAdapter.addDataToHead(gameList);
}
public void addData(boolean b) {
bGetData = b;
if (bGetData && mProgressBar != null)
mProgressBar.setVisibility(View.GONE);
}
public void updateData(BaseLiveResp data) {
bGetData = true;
if (mProgressBar != null)
mProgressBar.setVisibility(View.GONE);
if (data.casinoList != null) {
Log.d("updateData", "size=" + data.casinoList.size());
updateData(data.casinoList);
}
if (data.mListDel == null && data.mListAdd == null) {
// addData(data.dataList );
return;
}
int delSize = data.mListDel.size();
int addSize = data.mListAdd.size();
int rowSize = delSize > addSize ? delSize : addSize;
int colunmSize = 0;
int[] indexArr;
if (rowSize > 0) {
LinkedList<LiveEntity> entityList;
LiveEntity en;
if (mListMsg == null)
mListMsg = new ArrayList<LiveEntity>();
for (int i = 0; i < rowSize; i++) {
if (i < delSize) {
indexArr = data.mListDel.get(i);
colunmSize = indexArr.length;
// 删除
for (int j = colunmSize - 1; j > -1; j--) {
mListMsg.remove(indexArr[j]);
}
}
if (i < addSize) {
// 添加
indexArr = data.mListAdd.get(i);
entityList = data.mListMsg.get(i);
colunmSize = indexArr.length;
int msgSize = 0;
for (int j = 0; j < colunmSize; j++) {
msgSize = mListMsg.size();
en = entityList.get(j);
if (indexArr[j] > msgSize)
mListMsg.add(en);
else
mListMsg.add(indexArr[j], en);
if (en.type == 1)
mapCasino.put(en.answers[0].casino_id, en);
}
}
}
mListAdapter.setData(mListMsg);
}
}
private void refresh() {
if (mListAdapter != null && mListAdapter.getCount() > 0)
mAct.reqFresh();
else
stopLoad();
}
public void stopLoad() {
if (mLvLive != null)
mLvLive.stopRefresh();
}
class pullListener implements IXListViewListener {
Handler handler = new Handler();
@Override
public void onRefresh() {
handler.postDelayed(new Runnable() {
@Override
public void run() {
refresh();
}
}, 800);
}
@Override
public void onLoadMore() {
}
}
Dialog mImgDialog;
WebView webview;
Handler mImgHandler;
View progress;
/** 放大图片 */
public void showImgDialog(final String url) {
if (url == null)
return;
if (mImgHandler == null)
mImgHandler = new Handler();
if (mImgDialog != null && mImgDialog.isShowing()) {
mImgDialog.dismiss();
}
View v = LayoutInflater.from(getActivity()).inflate(
R.layout.dialog_img, null);
progress = v.findViewById(R.id.probar);
v.findViewById(R.id.mask).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mImgDialog.cancel();
}
});
// gifView = (GifView) v.findViewById(R.id.btn_close);
// gifView.setGifImageType(GifImageType.WAIT_FINISH);
webview = (WebView) v.findViewById(R.id.webview);
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
webview.setBackgroundColor(Color.argb(0, 0, 0, 0));
webview.setVisibility(View.INVISIBLE);
webview.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
if (newProgress >= 100) {
progress.setVisibility(View.GONE);
webview.setVisibility(View.VISIBLE);
}
}
});
mImgHandler.postDelayed(new Runnable() {
@Override
public void run() {
webview.loadDataWithBaseURL(null, String.format(IMG_URL, url),
"text/html", "utf-8", null);
}
}, 300);
mImgDialog = new Dialog(getActivity(), R.style.MyWebDialog);
mImgDialog.setContentView(v);
// mImgDialog.setCanceledOnTouchOutside(true);
// mImgDialog.setCancelable(true);
mImgDialog.getWindow().setGravity(Gravity.CENTER);
mImgDialog.show();
mImgDialog.getWindow().setLayout(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);
}
/**
* 下注对话框
* **/
CasinoDialog mCasinoDialog;
private Answer mAnswer;
/** 显示下注框 */
public void showCasinoDialog(final Answer answer, int blc) {
if(mCasinoDialog!=null && mCasinoDialog.isShowing())
{
return ;
}
if (bets != null && bets.length > 4) {
mAnswer = answer;
bets[bets.length-1] = mapCasino.get(answer.casino_id).max_bet;// 代表后台返回最大下注金额,0代表无限
mCasinoDialog = new CasinoDialog(getActivity(), click, bets,
mapCasino.get(mAnswer.casino_id).isCasino > 0);
mCasinoDialog.goShow(mAnswer);
if (mAct instanceof BasePayActivity) {
((BasePayActivity) mAct).reqBitCoin(answer.casino_id);
}
//直播流投注 友盟事件
// if (mapCasino.get(mAnswer.casino_id).isCasino > 0) //加注
// mAct.sendUmeng(HuPuRes.UMENG_EVENT_LIVE_RAISE_LINK);
// else //投注
// mAct.sendUmeng(HuPuRes.UMENG_EVENT_LIVE_ANSWER_LINK,HuPuRes.UMENG_KEY_ANSWER_POS,answer.answer_id ==1 ? "Left":"Right");
}
}
/** 显示绑定对话框 */
private void showBindNotify() {
mAct.showBindDialog(SharedPreferencesMgr.getString("dialogQuize", getString(R.string.casino_notify)));
// mAct.showCustomDialog(mAct.DIALOG_SHOW_BIND_PHONE,
// SharedPreferencesMgr.getString("dialogQuize", getString(R.string.casino_notify)), BaseGameActivity.TOW_BUTTONS,
// R.string.bind_phone, R.string.cancel);
}
private void showChargeNotify(int bet) {
String s =mAct.getResources().getString(R.string.no_charge1);
mAct.showCustomDialog(mAct.DIALOG_SHOW_CHARGE_NOTIFY,
s.format(s, bet), BaseGameActivity.TOW_BUTTONS,
R.string.buy_at_once,R.string.cancel);
}
/** 绑定*/
private void switchToBindPhone() {
Intent intent = new Intent(getActivity(), PhoneInputActivity.class);
startActivityForResult(intent, HupuBaseActivity.REQ_GO_BIND_PHONE);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == HupuBaseActivity.REQ_GO_BIND_PHONE) {
// 绑定手机
if (resultCode == Activity.RESULT_OK) {
}
} else if (requestCode == HupuBaseActivity.REQ_SHOW_QUIZLIST) {
// 同步竞猜页面的操作
if (resultCode == Activity.RESULT_OK) {
}
}
}
public void updateBet(ArrayList<IncreaseEntity> list )
{
HupuLog.e("papa", "更新下注");
if (list != null) {
LiveEntity en;
for (IncreaseEntity ien : list) {
HupuLog.d("qid", "="+ien.qid);
en = mapCasino.get(ien.qid);
if (en != null) {
en.isCasino = ien.answerId;
}
}
mListAdapter.notifyDataSetChanged();
}
}
public void updateMoney(int betCoin, int balance) {
if (mCasinoDialog != null && mCasinoDialog.isShowing()) {
mCasinoDialog.setBet(betCoin, balance);
}
}
boolean isIncrease;
public void sendQuizCommit() {
// --
try {
if (mCasinoDialog.getInputCoin() > 0) {
// 加注
if (mapCasino.get(mAnswer.casino_id) != null) {
isIncrease = mapCasino.get(mAnswer.casino_id).isCasino > 0;
// Log.d("sendQuizCommit", "increase=" + increase);
}
mAct.sendQuizCommit(mAnswer, mCasinoDialog.getInputCoin(),
isIncrease);
}
} catch (NumberFormatException e) {
e.printStackTrace();
}
}
/**余额和下注金额的差额*/
int dif;
public void showNoMoney(ExchangeGoldBeanEntity glodn)
{
if(glodn==null)
{
return;
}
// showChargeNotify(glodn.content,glodn.status);//没钱提示去冲钱
// GoldBeanManager.getInstance().onExchangeGoldBeanDiaog(mAct, glodn);
if(!mAct.isExchange)
{
GoldBeanManager.getInstance().onExchangeGoldBeanDiaog((BasePayActivity) mAct, glodn);
}
}
class Click implements OnClickListener {
@Override
public void onClick(View v) {
int id = v.getId();
switch (id) {
case R.id.btn_cancel:
if (mCasinoDialog != null)
mCasinoDialog.dismiss();
break;
case R.id.btn_confirm:
// cb =mCasinoDialog.canBet();
dif=mCasinoDialog.getBetDif();
mAct.isExchange = false;
sendQuizCommit();
// if(cb>0 )
// sendQuizCommit();
// else if(cb==-1)
// showChargeNotify(mCasinoDialog.getBetDif());//没钱提示去冲钱
if (mCasinoDialog != null)
mCasinoDialog.dismiss();
break;
default:
if (v instanceof Button) {
// 从列表点击猜题
if (mAct.mToken == null||mAct.mToken.length()<8) {
// 先要弹个高科技的提示框,提示用户充钱
showBindNotify();
} else {
showCasinoDialog((Answer) v.getTag(), 0);
}
} else if (v instanceof TextView) {
String url = (String) v.getTag();
HupuLog.d("live url="+url);
if (url != null) {
Uri uri = Uri.parse(url);
if ("kanqiu".equalsIgnoreCase(uri.getScheme())) {
HupuSchemeProccess.proccessScheme(getActivity(), uri);
}else
{
Intent in = new Intent(getActivity(),
WebViewActivity.class);
in.putExtra("url", url);
startActivity(in);
}
}
} else if (v instanceof ImageView) {
String url = (String) v.getTag();
showImgDialog(url);
}
break;
}
}
}
public final static String IMG_URL = "<div style=\"display:table\" id=\"JPicWrap\">"
+ "<div style=\"display:table-cell;text-align:center;vertical-align:middle;horizontal-align:middle\">"
+ "<img src=\"%s\" alt=\"\">"
+ "</div>"
+ "</div>"
+ "<script type=\"text/javascript\">"
+ "window.onload = function(){"
+ "clientH = document.documentElement.clientHeight||document.body.clientHeight;"
+ "document.getElementById('JPicWrap').style.height = clientH+'px';"
+ "clientW = document.documentElement.clientWidth||document.body.clientWidth;"
+ "document.getElementById('JPicWrap').style.width = clientW+'px';"
+ "}" + "</script>";
public class ImagePreviewDialog extends Dialog {
private ImageView mImageView;
public ImagePreviewDialog(Context context, int theme) {
super(context, theme);
Window win = getWindow();
WindowManager.LayoutParams wAttrs = win.getAttributes();
win.setFlags(0, WindowManager.LayoutParams.FLAG_DIM_BEHIND);
win.clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
setCanceledOnTouchOutside(true);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
Context ctxt = getContext();
mImageView = new ImageView(ctxt);
mImageView.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
setContentView(mImageView);
}
}
/** 更新竞猜状态 */
public void updateBetData(ArrayList<IncreaseEntity> list)
{
if (list != null) {
LiveEntity en;
for (IncreaseEntity ien : list) {
HupuLog.d("qid", "="+ien.qid);
en = mapCasino.get(ien.qid);
if (en != null) {
en.isCasino = ien.answerId;
}
}
mListAdapter.notifyDataSetChanged();
}
}
/** 更新数据 */
private void updateData(ArrayList<CasinoStatus> casino) {
int size = casino.size();
CasinoStatus cs;
LiveEntity en;
for (int i = 0; i < size; i++) {
cs = casino.get(i);
// Log.d("updateData", "id=" + cs.casino_id + " count=" +
// cs.userCount);
en = mapCasino.get(cs.casino_id);
if (en != null) {
en.userCount = cs.userCount;
en.quizStatus = cs.status;
en.quizStr = cs.desc;
en.rightId = cs.rightId;
// Log.d("updateData en", "str=" + en.quizStr + " count="
// + en.userCount);
}
}
mListAdapter.notifyDataSetChanged();
}
/** 更新数据 */
public void updateCommit(int qid, int aid) {
LiveEntity en = mapCasino.get(qid);
if (en != null) {
en.isCasino = aid;
mListAdapter.notifyDataSetChanged();
}
}
public JSONArray getQids()
{
Iterator <Integer> keys=mapCasino.keySet().iterator();
if(keys==null)
return null;
int qid;
LiveEntity en;
JSONArray arr=null;
while(keys.hasNext())
{
qid =keys.next();
en = mapCasino.get(qid);
if(en!=null)
{
Log.d("getQids", "en="+en.quizStatus);
if(en.quizStatus ==1 ||en.quizStatus ==2)
{
if(arr == null)
arr =new JSONArray();
arr.put(qid);
Log.d("getQids", "qid="+qid);
}
}
}
return arr;
}
}