package net.coding.program.project.maopao;
import android.support.v7.app.AlertDialog;
import android.view.View;
import android.widget.ListView;
import net.coding.program.FootUpdate;
import net.coding.program.R;
import net.coding.program.common.BlankViewDisplay;
import net.coding.program.common.Global;
import net.coding.program.common.base.MyJsonResponse;
import net.coding.program.common.network.MyAsyncHttpClient;
import net.coding.program.common.ui.BackActivity;
import net.coding.program.common.widget.RefreshBaseActivity;
import net.coding.program.maopao.MaopaoDetailActivity;
import net.coding.program.maopao.MaopaoDetailActivity_;
import net.coding.program.model.Maopao;
import net.coding.program.model.ProjectObject;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.Extra;
import org.androidannotations.annotations.OnActivityResult;
import org.androidannotations.annotations.OptionsItem;
import org.androidannotations.annotations.OptionsMenu;
import org.androidannotations.annotations.ViewById;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
@EActivity(R.layout.activity_project_maopao)
@OptionsMenu(R.menu.project_maopao)
public class ProjectMaopaoActivity extends BackActivity implements FootUpdate.LoadMore {
private static final int RESULT_ADD = 1;
private static final int RESULT_EDIT = 2;
@Extra
ProjectObject projectObject;
@ViewById
ListView listView;
@ViewById
View blankLayout;
private String projectMaopaoUrl = "";
private int lastId = RefreshBaseActivity.UPDATE_ALL_INT;
View.OnClickListener clickDelete = new View.OnClickListener() {
@Override
public void onClick(View v) {
new AlertDialog.Builder(v.getContext())
.setMessage("删除冒泡?")
.setPositiveButton("确定", (dialog, which) -> deleteMaopao(v))
.setNegativeButton("取消", null)
.show();
}
public void deleteMaopao(View v) {
Maopao.MaopaoObject maopao = (Maopao.MaopaoObject) v.getTag();
String url = String.format(Global.HOST_API + "/project/%s/tweet/%s", projectObject.getId(), maopao.id);
MyAsyncHttpClient.delete(ProjectMaopaoActivity.this, url, new MyJsonResponse(ProjectMaopaoActivity.this) {
@Override
public void onMySuccess(JSONObject response) {
super.onMySuccess(response);
listData.remove(maopao);
projectMaopaoAdapter.notifyDataSetChanged();
BlankViewDisplay.setBlank(listData.size(), this, true, blankLayout, onClickRetry);
showProgressBar(false);
}
@Override
public void onMyFailure(JSONObject response) {
super.onMyFailure(response);
showProgressBar(false);
}
});
showProgressBar(true);
}
};
private List<Maopao.MaopaoObject> listData = new ArrayList<>();
ProjectMaopaoAdapter projectMaopaoAdapter = new ProjectMaopaoAdapter(listData, this, clickDelete);
@AfterViews
void initProjectMaopaoActivity() {
listView.setAdapter(projectMaopaoAdapter);
listView.setOnItemClickListener((parent, view, position, id) -> {
Maopao.MaopaoObject maopao = listData.get(position);
MaopaoDetailActivity.ClickParam clickParam = new MaopaoDetailActivity.ClickParam(projectObject.owner_user_name,
projectObject.name, String.valueOf(maopao.id));
MaopaoDetailActivity_.intent(ProjectMaopaoActivity.this)
.mClickParam(clickParam)
.startForResult(RESULT_EDIT);
});
onRefresh();
}
@Override
public void loadMore() {
if (lastId == 0) {
return;
}
projectMaopaoUrl = String.format(Global.HOST_API + "/project/%s/tweet?last_id=%d", projectObject.getId(), lastId);
getNetwork(projectMaopaoUrl, projectMaopaoUrl);
}
public void onRefresh() {
initSetting();
lastId = RefreshBaseActivity.UPDATE_ALL_INT;
loadMore();
}
@Override
public void parseJson(int code, JSONObject respanse, String tag, int pos, Object data) throws JSONException {
if (tag.equals(projectMaopaoUrl)) {
if (code == 0) {
if (lastId == RefreshBaseActivity.UPDATE_ALL_INT) {
listData.clear();
}
JSONArray jsonArray = respanse.optJSONArray("data");
if (jsonArray.length() > 0) {
for (int i = 0; i < jsonArray.length(); ++i) {
listData.add(new Maopao.MaopaoObject(jsonArray.optJSONObject(i)));
}
lastId = listData.get(listData.size() - 1).id;
} else {
lastId = 0;
}
projectMaopaoAdapter.notifyDataSetChanged();
BlankViewDisplay.setBlank(listData.size(), this, true, blankLayout, onClickRetry);
} else {
showErrorMsg(code, respanse);
BlankViewDisplay.setBlank(listData.size(), this, false, blankLayout, onClickRetry);
}
}
}
View.OnClickListener onClickRetry = v -> onRefresh();
@OptionsItem
void actionAdd() {
ProjectMaopaoAddActivity_.intent(this).projectObject(projectObject).startForResult(RESULT_ADD);
}
@OnActivityResult(RESULT_ADD)
void onResultAdd(int resultCode) {
if (resultCode == RESULT_OK) {
onRefresh();
}
}
@OnActivityResult(RESULT_EDIT)
void onResultEdit(int resultCode) {
if (resultCode == RESULT_OK) {
onRefresh();
}
}
}