package com.aiyou.electricity;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import android.annotation.SuppressLint;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.TextView.OnEditorActionListener;
import com.aiyou.BaseActivity;
import com.aiyou.R;
import com.aiyou.utils.AiYouManager;
import com.aiyou.utils.NetWorkManager;
import com.aiyou.utils.logcat.Logcat;
import com.aiyou.utils.thread.ThreadUtils;
import external.PullToRefresh.PullToRefreshBase;
import external.PullToRefresh.PullToRefreshBase.OnRefreshListener2;
import external.PullToRefresh.PullToRefreshListView;
public class ElectricityActivity extends BaseActivity implements OnRefreshListener2<ListView>,
OnPageChangeListener {
private static final String URL = "http://ydcx.bupt.edu.cn/see.aspx?useid=";
private static final int MSG_ERROR = -1;
private static final int MSG_MESSAGE = 0;
private static final int MSG_MESSAGE1 = 1;
private static final int MSG_MESSAGE2 = 2;
private static final int MSG_NULL = 3;
private String mValue1, mValue2;
private Document mDoc;
private String mId;
private PullToRefreshListView mPTRLV1, mPTRLV2;
private List<ConsumeInfo> mList1 = new ArrayList<>();
private List<BuyEleInfo> mList2 = new ArrayList<>();
private ListAdapter1 mAdapter1;
private ListAdapter2 mAdapter2;
private int mPage1 = 1, mPage2 = 1, mTotalPage1 = 1, mTotalPage2 = 1;
private EditText mIdET;
private ProgressDialog mProgressDlg;
private LinearLayout mContentLL;
private TextView mIdTV, mTypeTV, mAmmeterTV, mIpTV;
private TextView mTag1TV, mTag2TV;
private ViewPager mViewPager;
// 处理UI线程的handler
public Handler mHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
if (msg.what == MSG_MESSAGE) {
try {
parseHtml(mDoc);
mContentLL.setVisibility(View.VISIBLE);
} catch (Exception e) {
Toast.makeText(getBaseContext(), "查询失败", Toast.LENGTH_SHORT).show();
}
} else if (msg.what == MSG_MESSAGE1) {
ConsumeInfo.parseHtml(mList1, mDoc);
mAdapter1.notifyDataSetChanged();
} else if (msg.what == MSG_MESSAGE2) {
BuyEleInfo.parseHtml(mList2, mDoc);
mAdapter2.notifyDataSetChanged();
} else if (msg.what == MSG_ERROR) {
Toast.makeText(getBaseContext(), NetWorkManager.MSG_NONET, Toast.LENGTH_SHORT)
.show();
}
mProgressDlg.dismiss();
mPTRLV1.onRefreshComplete();
mPTRLV2.onRefreshComplete();
return true;
}
});
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_electricity);
init();
}
@SuppressLint("InflateParams")
private void init() {
mIdET = (EditText) findViewById(R.id.et_id);
mIdET.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId,
KeyEvent event) {
switch (actionId) {
case EditorInfo.IME_ACTION_DONE:
onQuery(null);
break;
}
return true;
}
});
mProgressDlg = new ProgressDialog(this);
mProgressDlg.setCancelable(false);
mProgressDlg.setCanceledOnTouchOutside(false);
mProgressDlg.setIndeterminate(true);
mProgressDlg.setMessage("正在查询");
mContentLL = (LinearLayout) findViewById(R.id.ll_content);
mIdTV = (TextView) findViewById(R.id.tv_id);
mTypeTV = (TextView) findViewById(R.id.tv_type);
mAmmeterTV = (TextView) findViewById(R.id.tv_ammeter);
mIpTV = (TextView) findViewById(R.id.tv_ip);
mTag1TV = (TextView) findViewById(R.id.tv_tag1);
mTag2TV = (TextView) findViewById(R.id.tv_tag2);
mViewPager = (ViewPager) findViewById(R.id.vp);
List<View> viewList = new ArrayList<>();
LayoutInflater inflater = getLayoutInflater();
View view1 = inflater.inflate(R.layout.electricity_vp_list1, null);
View view2 = inflater.inflate(R.layout.electricity_vp_list2, null);
mPTRLV1 = (PullToRefreshListView) view1.findViewById(R.id.ptrlv1);
mPTRLV2 = (PullToRefreshListView) view2.findViewById(R.id.ptrlv2);
mPTRLV1.setShowIndicator(false);
mPTRLV2.setShowIndicator(false);
mAdapter1 = new ListAdapter1(getBaseContext(), mList1);
mAdapter2 = new ListAdapter2(getBaseContext(), mList2);
mPTRLV1.setAdapter(mAdapter1);
mPTRLV2.setAdapter(mAdapter2);
mPTRLV1.setOnRefreshListener(this);
mPTRLV2.setOnRefreshListener(this);
viewList.add(view1);
viewList.add(view2);
mViewPager.setAdapter(new ElectricityPagerAdapter(getBaseContext(), viewList));
mViewPager.setOnPageChangeListener(this);
mViewPager.setCurrentItem(0);
}
public void onQuery(View v) {
String id = mIdET.getText().toString().trim();
if (isValid(id)) {
mId = id;
query(id);
AiYouManager.viewInputMethod(ElectricityActivity.this, false, mIdET);
} else {
Toast.makeText(getBaseContext(), "输入格式有误", Toast.LENGTH_SHORT).show();
}
}
private void query(final String id) {
if (!NetWorkManager.getInstance(getBaseContext()).isNetAvailable()) {
if (mHandler != null) {
mHandler.sendEmptyMessage(MSG_ERROR);
}
return;
}
mProgressDlg.show();
ThreadUtils.execute(new Runnable() {
@Override
public void run() {
try {
mDoc = Jsoup.connect(URL + id).timeout(10000).get();
} catch (IOException e) {
if (mHandler != null) {
mHandler.sendEmptyMessage(MSG_ERROR);
}
return;
}
if (mHandler != null) {
mHandler.sendEmptyMessage(MSG_MESSAGE);
}
}
});
}
private void parseHtml(Document doc) {
String id = doc.select("span#labfangjianhao").get(0).text();
String type = doc.select("span#yonghuleixing").get(0).text();
String ammeter = doc.select("span#Labbiaohao").get(0).text();
String ip = doc.select("span#onlinenow").get(0).text();
mIdTV.setText(id);
mTypeTV.setText(type);
mAmmeterTV.setText(ammeter);
mIpTV.setText(ip);
mList1.clear();
mList2.clear();
mTotalPage1 = ConsumeInfo.parseHtml(mList1, doc);
mAdapter1.notifyDataSetChanged();
mTotalPage2 = BuyEleInfo.parseHtml(mList2, doc);
mAdapter2.notifyDataSetChanged();
mValue1 = doc.select("input#__VIEWSTATE").get(0).attr("value");
mValue2 = doc.select("input#__EVENTVALIDATION").get(0).attr("value");
}
public void onTagClick(View v) {
final int nId = v.getId();
if (nId == R.id.tv_tag1) {
mViewPager.setCurrentItem(0);
} else if (nId == R.id.tv_tag2) {
mViewPager.setCurrentItem(1);
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// 按下键盘上返回按钮
if (keyCode == KeyEvent.KEYCODE_BACK) {
selfFinish(null);
return true;
}
return super.onKeyDown(keyCode, event);
}
public void selfFinish(View view) {
scrollToFinishActivity();
}
@Override
protected void onDestroy() {
super.onDestroy();
mHandler.removeCallbacksAndMessages(null);
mHandler = null;
}
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
final int nId = refreshView.getId();
if (nId == R.id.ptrlv1) {
if (mPage1 < mTotalPage1) {
queryNext(mId, ++mPage1, 1);
return;
}
} else if (nId == R.id.ptrlv2) {
if (mPage2 < mTotalPage2) {
queryNext(mId, ++mPage2, 2);
return;
}
}
Toast.makeText(getBaseContext(), "没有了", Toast.LENGTH_SHORT).show();
if (mHandler != null) {
mHandler.sendEmptyMessage(MSG_NULL);
}
}
private void queryNext(final String id, final int page, final int target) {
if (!NetWorkManager.getInstance(getBaseContext()).isNetAvailable()) {
if (mHandler != null) {
mHandler.sendEmptyMessage(MSG_ERROR);
}
return;
}
ThreadUtils.execute(new Runnable() {
@Override
public void run() {
Map<String, String> data = new HashMap<>();
data.put("__EVENTTARGET", "GridView" + target);
data.put("__EVENTARGUMENT", "Page$" + page);
data.put("__VIEWSTATE", mValue1);
data.put("__EVENTVALIDATION", mValue2);
try {
mDoc = Jsoup.connect(URL + id)
.timeout(10000)
.data(data)
.post();
} catch (IOException e) {
Logcat.e(id, "IOException:" + e.getMessage());
if (mHandler != null) {
mHandler.sendEmptyMessage(MSG_ERROR);
}
return;
}
if (mHandler != null) {
mHandler.sendEmptyMessage(MSG_MESSAGE1);
}
}
});
}
private boolean isValid(String id) {
Pattern p = Pattern
.compile("\\d{1,2}\\-\\d{3,4}");
Matcher m = p.matcher(id);
return m.find();
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
if (position == 0) {
mTag1TV.setTextColor(0xff0fd451);
mTag2TV.setTextColor(0xff000000);
} else if (position == 1) {
mTag1TV.setTextColor(0xff000000);
mTag2TV.setTextColor(0xff0fd451);
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
}