package com.mzeat.ui;
import java.util.ArrayList;
import java.util.LinkedList;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import com.mzeat.MzeatApplication;
import com.mzeat.R;
import com.mzeat.api.MzeatService;
import com.mzeat.model.MyShareItem;
import com.mzeat.model.MyShareList;
import com.mzeat.model.Page;
import com.mzeat.task.GenericTask;
import com.mzeat.task.TaskAdapter;
import com.mzeat.task.TaskParams;
import com.mzeat.task.TaskResult;
import com.mzeat.ui.adapter.MyShareListAdapter;
import com.mzeat.util.CheckNetworkConnection;
import com.mzeat.util.ConnectionChangeReceiver;
import com.mzeat.util.ShowToast;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
public class MyShareActivity extends BaseActivity {
private NetworkChange networkChange;
private LoadDataTask mLoadDataTask;
private int load_result = 0;
public int load_fromnetwork_success = 1;
public int load_fromdb_success = 2;
public final static String SER_KEY = "myshare";
private TextView tv_title;
private ImageButton btn_pubshare;
private MyShareListAdapter mAdapter;
private PullToRefreshListView mListView;
private LinearLayout ll_tips;
private LinearLayout ll_gotoshare;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_myshare);
initView();
setViewData();
}
private void initView() {
tv_title = (TextView) findViewById(R.id.tv_title);
findViewById(R.id.btn_back).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
finish();
}
});
mListView = (PullToRefreshListView) findViewById(R.id.myshare_list);
mListView.setOnRefreshListener(RefreshListener);
mAdapter = new MyShareListAdapter(this);
mListView.setOnItemClickListener(mItemClickListener);
btn_pubshare = (ImageButton) findViewById(R.id.btn_pubshare);
btn_pubshare.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent;
if (MzeatApplication.getInstance().getpPreferencesConfig()
.getInt("loginstate", 0) == 1) {
intent = new Intent(MyShareActivity.this,
PubShareActivity.class);
startActivityForResult(intent, 1);
} else {
intent = new Intent(MyShareActivity.this, LoginActivity.class);
MzeatApplication.getInstance().getpPreferencesConfig()
.setInt("fromsharelist", 1);
ShowToast.showMessage(MyShareActivity.this, "请您先登录再发分享。");
startActivity(intent);
}
}
});
ll_tips = (LinearLayout) findViewById(R.id.ll_tips);
ll_gotoshare = (LinearLayout) findViewById(R.id.ll_gotoshare);
}
private PullToRefreshBase.OnRefreshListener<ListView> RefreshListener = new PullToRefreshBase.OnRefreshListener<ListView>() {
@Override
public void onRefresh(PullToRefreshBase<ListView> refreshView) {
if (CheckNetworkConnection
.checkNetworkConnection(MyShareActivity.this)) {
loaddata();
} else {
ShowToast.showToastShort(MyShareActivity.this,
R.string.your_network_has_disconnected);
mListView.onRefreshComplete();
}
}
};
private void setViewData() {
tv_title.setText(R.string.myshare);
}
ProgressDialog pg;
ArrayList<MyShareItem> mShareItem = new ArrayList<MyShareItem>();
private TaskAdapter mTaskListener = new TaskAdapter() {
@Override
public String getName() {
// TODO Auto-generated method stub
return null;
}
public void onPreExecute(GenericTask task) {
// TODO 任务开始执行,可提供进度条展现
mListView.setRefreshing(true);
mListView.setDisableScrollingWhileRefreshing(true);
}
public void onPostExecute(GenericTask task, TaskResult result) {
mListView.onRefreshComplete();
// TODO 判断TaskReult的返回值是否ok
if (result == TaskResult.OK) {
if (page == 1) {
mShareItem = mLoadDataTask.getShareItem();
mAdapter.setData(mShareItem);
mAdapter.notifyDataSetChanged();
mListView.setAdapter(mAdapter);
load_result = load_fromnetwork_success;
page = page + 1;
mLoadDataTask = null;
}else {
page = page + 1;
mShareItem.addAll(mLoadDataTask.getShareItem());
mAdapter.notifyDataSetChanged();
mLoadDataTask = null;
}
} else if (result == TaskResult.FAILED) {
mLoadDataTask = null;
ShowToast.showGetFaile(MyShareActivity.this);
} else if (result == TaskResult.IO_ERROR) {
mLoadDataTask = null;
ShowToast.showError(MyShareActivity.this);
} else if (result == TaskResult.NO_MORE_DATA) {
mLoadDataTask = null;
ShowToast.showNomoredata(MyShareActivity.this);
}else if (result == TaskResult.CANCELLED){
mListView.setVisibility(View.GONE);
ll_tips.setVisibility(View.VISIBLE);
ll_gotoshare.setVisibility(View.VISIBLE);
ll_gotoshare.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(MyShareActivity.this,PubShareActivity.class);
startActivity(intent);
}
});
}
}
public void onProgressUpdate(GenericTask task, Object param) {
// TODO 如果是下载,可在此显示下载进度
}
public void onCancelled(GenericTask task) {
// TODO 后台任务被取消的事件回调,适当情况下可以提示用户,如“下载已取消”
//mListView.onRefreshComplete();
}
};
DialogInterface.OnCancelListener cancelListener = new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface arg0) {
// TODO Auto-generated method stub
clearTask();
}
};
private void clearTask() {
// TODO Auto-generated method stub
if (null != mLoadDataTask
&& mLoadDataTask.getStatus() == GenericTask.Status.RUNNING) {
mLoadDataTask.cancel(true);
mLoadDataTask = null;
}
}
private int page = 1;
private ArrayList<MyShareItem> shareItem = new ArrayList<MyShareItem>();
private Page mPage = null;
private class LoadDataTask extends GenericTask {
@Override
protected TaskResult _doInBackground(TaskParams... params) {
// TODO Auto-generated method stub
MyShareList share = new MyShareList();
if (mPage == null) {
share = MzeatApplication.getInstance().getService()
.getMyShareList(String.valueOf(page));
int code = Integer.valueOf(share.getOpen());
if (code == MzeatService.RESULT_OK) {
shareItem = (ArrayList<MyShareItem>) share.getItem();
mPage = (Page) share.getPage();
return TaskResult.OK;
} else if (code == MzeatService.RESULT_FAILE) {
return TaskResult.FAILED;
}else if (code == MzeatService.RESULT_NODATA) {
return TaskResult.CANCELLED;
}
else {
return TaskResult.IO_ERROR;
}
} else {
if (page <= Integer.valueOf(mPage.getPage_total())) {
share = MzeatApplication.getInstance().getService()
.getMyShareList(String.valueOf(page));
int code = Integer.valueOf(share.getOpen());
if (code == MzeatService.RESULT_OK) {
shareItem = (ArrayList<MyShareItem>) share.getItem();
mPage = (Page) share.getPage();
return TaskResult.OK;
} else if (code == MzeatService.RESULT_FAILE) {
return TaskResult.FAILED;
}else if (code == MzeatService.RESULT_NODATA) {
return TaskResult.CANCELLED;
}
else {
return TaskResult.IO_ERROR;
}
} else {
return TaskResult.NO_MORE_DATA;
}
}
}
@Override
protected void onCancelled() {
// TODO Auto-generated method stub
//super.onCancelled();
}
private ArrayList<MyShareItem> getShareItem() {
return shareItem;
}
}
private void loaddata() {
/**
* 重要!!需要判断当前任务是否正在运行,否则重复执行会出错,典型的场景就是用户点击登录按钮多次
*/
if (null != mLoadDataTask
&& mLoadDataTask.getStatus() == GenericTask.Status.RUNNING)
return;
mLoadDataTask = new LoadDataTask();
mLoadDataTask.setListener(mTaskListener);
try {
mLoadDataTask.execute();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
public class NetworkChange extends ConnectionChangeReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
super.onReceive(context, intent);
if (super.success == true) {
if (load_result != load_fromnetwork_success) {
loaddata();
super.success = false;
}
}
}
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
// Log.e("onDestroy()", "onDestroy()");
if (null != mLoadDataTask
&& mLoadDataTask.getStatus() == LoadDataTask.Status.RUNNING) {
mLoadDataTask.cancel(true);
}
super.onDestroy();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
networkChange = new NetworkChange();
IntentFilter filter = new IntentFilter();
filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(networkChange, filter);
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
try {
unregisterReceiver(networkChange);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
public boolean onKeyDown(int keyCode, KeyEvent event) {// 捕捉返回键
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (null != mLoadDataTask) {
mLoadDataTask.cancel(true);
mLoadDataTask.setListener(null);
mLoadDataTask = null;
mListView.onRefreshComplete();
return true;
}
}
if (keyCode == KeyEvent.KEYCODE_BACK) {
finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
ListView.OnItemClickListener mItemClickListener = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// TODO Auto-generated method stub
if (CheckNetworkConnection
.checkNetworkConnection(MyShareActivity.this)) {
//mListView.setSelected(true);
Intent intent = new Intent(MyShareActivity.this,
ShareDetailActivity.class);
intent.putExtra("share_id", mShareItem.get(position - 1)
.getShare_id());
startActivity(intent);
} else {
ShowToast.showToastShort(MyShareActivity.this,
R.string.your_network_has_disconnected);
}
}
};
}