package net.coding.program.project.detail.file;
import android.content.Context;
import android.content.Intent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import com.loopj.android.http.RequestParams;
import net.coding.program.MyApp;
import net.coding.program.R;
import net.coding.program.common.ClickSmallImage;
import net.coding.program.common.Global;
import net.coding.program.common.MyImageGetter;
import net.coding.program.common.ui.BackActivity;
import net.coding.program.common.util.FileUtil;
import net.coding.program.model.AttachmentFileObject;
import net.coding.program.model.BaseComment;
import net.coding.program.model.DynamicObject;
import net.coding.program.model.ProjectObject;
import net.coding.program.model.RequestData;
import net.coding.program.project.detail.merge.CommentActivity;
import net.coding.program.project.detail.merge.CommentActivity_;
import net.coding.program.task.add.CommentHolder;
import net.coding.program.task.add.TaskListHolder;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.Click;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.Extra;
import org.androidannotations.annotations.OnActivityResult;
import org.androidannotations.annotations.ViewById;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
@EActivity(R.layout.activity_file_dynamic)
//@OptionsMenu(R.menu.menu_file_dynamic)
public class FileDynamicActivity extends BackActivity {
public static final int RESULT_COMMENT = 1;
public static final String TAG_HTTP_FILE_DYNAMIC = "TAG_HTTP_FILE_DYNAMIC";
private static final String TAG_HTTP_COMMENT_DELETE = "TAG_HTTP_COMMENT_DELETE";
DynamicFileAdapter adapter;
ArrayList<Object> mData = new ArrayList<>();
@ViewById
ListView listView;
@Extra
ProjectFileParam mProjectFileParam;
@AfterViews
protected void initFileDynamicActivity() {
adapter = new DynamicFileAdapter(this, 0, mData);
listView.setAdapter(adapter);
getNetwork(mProjectFileParam.getHttpDynamic(), TAG_HTTP_FILE_DYNAMIC);
}
@Override
public void parseJson(int code, JSONObject respanse, String tag, int pos, Object data) throws JSONException {
if (tag.equals(TAG_HTTP_FILE_DYNAMIC)) {
if (code == 0) {
JSONArray json = respanse.getJSONArray("data");
for (int i = 0; i < json.length(); ++i) {
JSONObject jsonItem = json.getJSONObject(i);
String targetType = jsonItem.optString("target_type");
Object dynamic = null;
if (targetType.equals("ProjectFile")) {
dynamic = new DynamicObject.DynamicProjectFile(jsonItem);
} else if (targetType.equals("ProjectFileComment")) {
dynamic = new BaseComment(new DynamicObject.DynamicProjectFileComment(jsonItem));
}
if (dynamic != null) {
mData.add(dynamic);
}
}
adapter.notifyDataSetChanged();
} else {
showErrorMsg(code, respanse);
}
} else if (tag.equals("TAG_HTTP_COMMENT_DELETE")) {
if (code == 0) {
mData.remove(data);
adapter.notifyDataSetChanged();
}
}
}
@Click
protected void itemAddComment() {
FileDynamicParam param = new FileDynamicParam(mProjectFileParam.getProject(),
Integer.valueOf(mProjectFileParam.mFileObject.file_id), "");
CommentActivity_.intent(this).mParam(param).startForResult(RESULT_COMMENT);
}
@OnActivityResult(RESULT_COMMENT)
void onResultComment(int result, Intent data) {
if (result == RESULT_OK && data != null) {
BaseComment comment = (BaseComment) data.getSerializableExtra("data");
mData.add(comment);
adapter.notifyDataSetChanged();
}
}
static class FileDynamicParam extends CommentActivity.CommentParam implements Serializable {
int fileId;
String atSomeOne;
ProjectObject mProjectObject;
public FileDynamicParam(ProjectObject projectObject, int fileId, String atSomeOne) {
this.mProjectObject = projectObject;
this.fileId = fileId;
this.atSomeOne = atSomeOne;
}
@Override
public RequestData getSendCommentParam(String input) {
String url = String.format(Global.HOST_API +
mProjectObject.getProjectPath() +
"/files/%d/comment", fileId);
RequestData request = new RequestData(url, new RequestParams());
request.setContent(input);
return request;
}
@Override
public String getAtSome() {
return atSomeOne;
}
@Override
public String getAtSomeUrl() {
return String.format(Global.HOST_API +
"/user/relationships/context?context_type=project_file_comment&item_id=%d", mProjectObject.getId());
}
@Override
public String getProjectPath() {
return mProjectObject.getProjectPath();
}
@Override
public boolean isPublicProject() {
return false;
}
}
public static class ProjectFileParam implements Serializable {
private AttachmentFileObject mFileObject;
// private int mProjectid;
private ProjectObject mProject;
public ProjectFileParam(AttachmentFileObject fileObject, ProjectObject project) {
mFileObject = fileObject;
mProject = project;
}
public String getProjectPath() {
return mProject.getProjectPath();
}
public int getProjectId() {
return mProject.getId();
}
public int getFileId() {
return Integer.valueOf(mFileObject.file_id);
}
public String getHttpDynamic() {
String url = Global.HOST_API + mProject.getProjectPath() + "/file/%s/activities?last_id=999999999";
return String.format(url, mFileObject.file_id);
}
public String getHttpDeleteComment(int commmentId) {
String url = Global.HOST_API + mProject.getProjectPath() + "/files/%s/comment/%d";
return String.format(url, mFileObject.file_id, commmentId);
}
public RequestData getHttpEditFile(String content) {
final String template = Global.HOST_API + getProjectPath() + "/files/%s/edit";
String url = String.format(template, mFileObject.file_id);
RequestParams params = new RequestParams();
params.put("name", mFileObject.getName());
params.put("content", content);
return new RequestData(url, params);
}
public String getHtttpFileView() {
String url = Global.HOST_API + mProject.getProjectPath() + "/files/%s/view";
return String.format(url, mFileObject.file_id);
}
public ProjectObject getProject() {
return mProject;
}
public AttachmentFileObject getFileObject() {
return mFileObject;
}
public void setFileObject(AttachmentFileObject fileObject) {
mFileObject = fileObject;
}
public File getLocalFile(String path) {
if (mFileObject == null || mProject == null) {
return null;
}
return FileUtil.getDestinationInExternalPublicDir(path,
mFileObject.getSaveName(mProject.getId()));
}
}
class DynamicFileAdapter extends ArrayAdapter<Object> {
final int TYPE_DYNAMIC = 0;
final int TYPE_COMMENT = 1;
private final MyImageGetter myImageGetter = new MyImageGetter(getContext());
private final ClickSmallImage onClickImage = new ClickSmallImage(FileDynamicActivity.this);
private View.OnClickListener mOnClickComment = new View.OnClickListener() {
@Override
public void onClick(View v) {
final Object tagData = v.getTag(R.layout.activity_task_comment_much_image_task);
int itemId = 0;
String ownerName = "";
String globalKey = "";
if (tagData instanceof BaseComment) {
BaseComment comment = (BaseComment) tagData;
itemId = comment.id;
globalKey = comment.owner.global_key;
ownerName = comment.owner.name;
} else if (tagData instanceof DynamicObject.DynamicProjectFileComment) {
DynamicObject.DynamicProjectFileComment commentDynamic = (DynamicObject.DynamicProjectFileComment) tagData;
DynamicObject.ProjectFileComment comment = commentDynamic.getProjectFileComment();
itemId = comment.getId();
globalKey = comment.getOwnerGlobalKey();
ownerName = comment.getOwnerName();
}
final int itemIdFinal = itemId;
if (globalKey.equals(MyApp.sUserObject.global_key)) {
showDialog("评论", "删除评论?", (dialog, which) ->
deleteNetwork(mProjectFileParam.getHttpDeleteComment(itemIdFinal), TAG_HTTP_COMMENT_DELETE, tagData));
} else {
FileDynamicParam param = new FileDynamicParam(mProjectFileParam.getProject(),
Integer.valueOf(mProjectFileParam.mFileObject.file_id), ownerName);
CommentActivity_.intent(FileDynamicActivity.this).mParam(param).startForResult(RESULT_COMMENT);
}
}
};
public DynamicFileAdapter(Context context, int resource, List<Object> objects) {
super(context, resource, objects);
}
@Override
public int getItemViewType(int position) {
Object data = getItem(position);
if (data instanceof BaseComment) {
return TYPE_COMMENT;
} else {
DynamicObject.DynamicBaseObject item = (DynamicObject.DynamicBaseObject) data;
if (item.target_type.equals("ProjectFileComment")) {
return TYPE_COMMENT;
} else {
return TYPE_DYNAMIC;
}
}
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
int count = getCount();
if (getItemViewType(position) == TYPE_COMMENT) {
CommentHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.activity_task_comment_much_image_task, parent, false);
holder = new CommentHolder(convertView, mOnClickComment, myImageGetter, getImageLoad(), mOnClickUser, onClickImage);
convertView.setTag(R.id.layout, holder);
} else {
holder = (CommentHolder) convertView.getTag(R.id.layout);
}
Object data = getItem(position);
holder.setContent(data);
holder.updateLine(position, count);
convertView.setTag(R.layout.activity_task_comment_much_image_task, data);
return convertView;
} else {
TaskListHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.task_list_item_dynamic, parent, false);
holder = new TaskListHolder(convertView);
} else {
holder = (TaskListHolder) convertView.getTag(TaskListHolder.getTagId());
}
DynamicObject.DynamicProjectFile data = (DynamicObject.DynamicProjectFile) getItem(position);
convertView.setTag(R.layout.activity_task_comment_much_image_task, data);
String content;
int resId;
switch (data.action) {
// case "create":
// content = "创建了文件";
// resId = R.drawable.project_file_dynamic_delete;
// break;
case "update":
content = "更新了文件";
resId = R.drawable.project_file_dynamic_edit;
break;
case "upload_file":
if (data.version.isEmpty()) {
content = "上传了新版本";
} else {
content = "上传了新版本 V" + data.version;
}
resId = R.drawable.project_file_dynamic_upload;
break;
case "delete_history":
if (data.version.isEmpty()) {
content = "删除了版本";
} else {
content = "删除了版本 V" + data.version;
}
resId = R.drawable.project_file_dynamic_delete;
break;
case "move_file":
content = "移动了文件";
resId = R.drawable.project_file_dynamic_move;
break;
default:
content = data.action_msg + "文件";
resId = R.drawable.project_file_dynamic_edit;
break;
}
content = data.user.name + " " + content;
holder.mContent.setText(content);
holder.mIcon.setImageResource(resId);
holder.updateLine(position, count);
return convertView;
}
}
}
}