package net.coding.program.project.detail; import android.app.Activity; import android.app.DownloadManager; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.support.v7.app.AlertDialog; import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.CheckBox; import android.widget.EditText; import android.widget.ImageView; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import net.coding.program.R; import net.coding.program.common.util.FileUtil; import net.coding.program.model.AttachmentFileHistoryObject; import net.coding.program.model.AttachmentFileObject; import net.coding.program.model.RequestData; import net.coding.program.model.util.FileRequestHelp; import net.coding.program.project.detail.file.FileDownloadBaseActivity; import net.coding.program.project.detail.file.FileDynamicActivity; import net.coding.program.project.detail.file.ViewHolderFile; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.Extra; import org.androidannotations.annotations.ItemClick; import org.androidannotations.annotations.ItemLongClick; import org.androidannotations.annotations.OnActivityResult; import org.androidannotations.annotations.ViewById; import org.json.JSONException; import org.json.JSONObject; import java.io.File; import java.util.ArrayList; import java.util.List; /* 网络请求和list其实是绑定关系 1.所有页面加下拉刷新 2.按页号分页的(大部分)(上拉更多) 3.按id号分页的(冒泡)(上拉更多) 4.无分页的 5.带 section 的 fragment 和 activity */ //@EActivity(R.layout.activity_attachments) @EActivity(R.layout.activity_file_history) //@OptionsMenu(R.menu.menu_file_history) public class FileHistoryActivity extends FileDownloadBaseActivity { final public static int FILE_DELETE_CODE = 11; private static final String TAG_FILE_HISTORY = "TAG_FILE_HISTORY"; private static final String TAG_FILE_HISTORY_REMARK = "TAG_FILE_HISTORY_REMARK"; private static final String TAG_FILE_HISTORY_DELETE = "TAG_FILE_HISTORY_DELETE"; @Extra FileDynamicActivity.ProjectFileParam mProjectFileParam; @ViewById ListView listView; FileHistoryAdapter mAdapter; ArrayList<AttachmentFileHistoryObject> mData = new ArrayList<>(); protected View.OnClickListener onMoreClickListener = new View.OnClickListener() { @Override public void onClick(View view) { Integer position = (Integer) view.getTag(); AttachmentFileObject file = mData.get(position); int selectedPosition = position; if (file.isDownload) { listViewItemClicked(position); } else { action_download_single(mData.get(selectedPosition)); } } }; protected View.OnClickListener cancelClickListener = new View.OnClickListener() { @Override public void onClick(View v) { AttachmentFileObject data = mData.get((Integer) v.getTag()); long downloadId = data.downloadId; removeDownloadFile(downloadId); data.downloadId = 0L; mAdapter.notifyDataSetChanged(); } }; FileRequestHelp mFileRequest; @AfterViews protected final void initFileHistoryActivity() { mFileRequest = new FileRequestHelp(mProjectFileParam.getProjectPath(), mProjectFileParam.getFileId()); getNetwork(mFileRequest.getHttpRequest(), TAG_FILE_HISTORY); mAdapter = new FileHistoryAdapter(this, mData); listView.setAdapter(mAdapter); } @Override public void parseJson(int code, JSONObject respanse, String tag, int pos, Object data) throws JSONException { if (tag.equals(TAG_FILE_HISTORY)) { if (code == 0) { mData.addAll(mFileRequest.parseJson(respanse, getFileDownloadPath(), getProjectId())); mAdapter.notifyDataSetChanged(); } } else if (tag.equals(TAG_FILE_HISTORY_REMARK)) { if (code == 0) { ((FileHistoryRemarkRequest) data).remarkItem(); mAdapter.notifyDataSetChanged(); } } else if (tag.equals(TAG_FILE_HISTORY_DELETE)) { if (code == 0) { mData.remove(data); mAdapter.notifyDataSetChanged(); } } } @ItemLongClick protected void listViewItemLongClicked(final int pos) { if (pos == 0) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder .setItems(new String[]{"修改备注"}, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { showRemarkHistoryDialog(mData.get(pos)); } }); builder.show(); } else { AlertDialog.Builder builder = new AlertDialog.Builder(this); String[] itemTitles = {"修改备注"}; if (mData.get(pos).owner.isMe()) { itemTitles = new String[]{"修改备注", "删除"}; } builder .setItems(itemTitles, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { AttachmentFileHistoryObject itemData = mData.get(pos); if (which == 0) { showRemarkHistoryDialog(itemData); } else { showDeleteHistoryDialog(itemData); } } }); builder.show(); } } @Override public int getProjectId() { return mProjectFileParam.getProjectId(); } @ItemClick protected void listViewItemClicked(int position) { AttachmentFileObject data = mData.get(position); if (data.isFolder) { AttachmentsActivity_.intent(this) .mAttachmentFolderObject(data.folderObject) .mProjectObjectId(mProjectFileParam.getProjectId()) .mProject(mProjectFileParam.getProject()) .startForResult(ProjectAttachmentFragment.RESULT_REQUEST_FILES); } else if (data.isImage()) { AttachmentsPicDetailActivity_.intent(this) .mProjectObjectId(mProjectFileParam.getProjectId()) .mAttachmentFileObject(data) .startForResult(FILE_DELETE_CODE); } else { AttachmentsDownloadDetailActivity_.intent(this) .mProjectObjectId(mProjectFileParam.getProjectId()) .mHideHistoryLayout(true) .mAttachmentFileObject(data) .mProject(mProjectFileParam.getProject()) .startForResult(FILE_DELETE_CODE); } } @OnActivityResult(FILE_DELETE_CODE) void onFileResult(int resultCode, Intent data) { Log.d("onFileResult", resultCode + ""); if (resultCode == Activity.RESULT_OK) { AttachmentFileObject deletedFileObject = (AttachmentFileObject) data.getSerializableExtra("mAttachmentFileObject"); Log.d("onFileResult", resultCode + " " + deletedFileObject.getName()); for (AttachmentFileObject file : mData) { if (file.file_id.equals(deletedFileObject.file_id)) { mData.remove(file); mAdapter.notifyDataSetChanged(); break; } } setResult(Activity.RESULT_OK); } } private void showDeleteHistoryDialog(final AttachmentFileHistoryObject item) { showDialog("删除", "确定删除该版本?删除后将不能恢复", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String url = mFileRequest.getHttpHistoryDelete(item.getHistory_id()); deleteNetwork(url, TAG_FILE_HISTORY_DELETE, item); } }); } private void showRemarkHistoryDialog(final AttachmentFileHistoryObject item) { LayoutInflater factory = LayoutInflater.from(this); final View textEntryView = factory.inflate(R.layout.dialog_remark_file_history, null); final EditText edit2fa = (EditText) textEntryView.findViewById(R.id.edit); edit2fa.setText(item.getRemark()); AlertDialog.Builder builder = new AlertDialog.Builder(this); AlertDialog dialog = builder .setTitle("修改备注") .setView(textEntryView) .setPositiveButton("确定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { String editStr1 = edit2fa.getText().toString().trim(); remarkFileHistory(editStr1, item); } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { } }).show(); } private void remarkFileHistory(String editStr1, AttachmentFileHistoryObject item) { if (TextUtils.isEmpty(editStr1)) { Toast.makeText(FileHistoryActivity.this, "不能为空", Toast.LENGTH_LONG).show(); return; } RequestData request = mFileRequest.getHttpHistoryRemark(item.getHistory_id(), editStr1); postNetwork(request, TAG_FILE_HISTORY_REMARK, new FileHistoryRemarkRequest(item, editStr1)); } private void deleteHistory(int pos) { } @Override public void checkFileDownloadStatus() { for (AttachmentFileObject fileObject : mData) { if (!fileObject.isFolder) { setDownloadStatus(fileObject); //Log.d("onResume", "update status:" + fileObject.name + " " + fileObject.isDownload); } } mAdapter.notifyDataSetChanged(); } private void setDownloadStatus(AttachmentFileObject mFileObject) { Long downloadId = getDownloadId(mFileObject); if (downloadId != 0L) { mFileObject.downloadId = downloadId; updateFileDownloadStatus(mFileObject); mFileObject.isDownload = false; } else { File mFile = FileUtil.getDestinationInExternalPublicDir(getFileDownloadPath(), mFileObject.getSaveName(mProjectFileParam.getProjectId())); if (mFile.exists() && mFile.isFile()) { mFileObject.isDownload = true; } else { mFileObject.downloadId = 0L; mFileObject.isDownload = false; } } } @Override public String getProjectPath() { return mProjectFileParam.getProjectPath(); } static class ViewHolder { ImageView icon; TextView name; CheckBox checkBox; RelativeLayout more; } class FileHistoryAdapter extends ArrayAdapter<AttachmentFileHistoryObject> { public FileHistoryAdapter(Context context, List<AttachmentFileHistoryObject> objects) { super(context, 0, objects); } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolderFile holder; if (convertView == null) { convertView = mInflater.inflate(R.layout.project_attachment_file_history_list_item, parent, false); holder = new ViewHolderFile(convertView); convertView.setTag(holder); } else { holder = (ViewHolderFile) convertView.getTag(); } AttachmentFileHistoryObject data = mData.get(position); holder.icon_txt.setText(data.getVersionString()); holder.name.setText(data.getRemark()); holder.username.setText(data.owner.name); holder.desc.setText(data.getActionMsg()); holder.downloadFlag.setText(data.isDownload ? "查看" : "下载"); convertView.setBackgroundResource(data.isDownload ? R.drawable.list_item_selector_project_file : R.drawable.list_item_selector); holder.more.setTag(position); holder.more.setOnClickListener(onMoreClickListener); AttachmentFileObject mFileObject = data; if (mFileObject.bytesAndStatus != null) { Log.v("updateFileDownload", mFileObject.getName() + ":" + mFileObject.bytesAndStatus[0] + " " + mFileObject.bytesAndStatus[1] + " " + mFileObject.bytesAndStatus[2]); } if (data.downloadId != 0L) { holder.cancel.setTag(position); int status = data.bytesAndStatus[2]; if (AttachmentsDownloadDetailActivity.isDownloading(status)) { if (data.bytesAndStatus[1] < 0) { holder.progressBar.setProgress(0); } else { holder.progressBar.setProgress(data.bytesAndStatus[0] * 100 / data.bytesAndStatus[1]); } data.isDownload = false; holder.desc_layout.setVisibility(View.GONE); holder.progress_layout.setVisibility(View.VISIBLE); } else { if (status == DownloadManager.STATUS_FAILED) { data.isDownload = false; } else if (status == DownloadManager.STATUS_SUCCESSFUL) { data.isDownload = true; downloadFileSuccess(data.file_id); } else { data.isDownload = false; } data.downloadId = 0L; holder.desc_layout.setVisibility(View.VISIBLE); holder.progress_layout.setVisibility(View.GONE); } } else { holder.desc_layout.setVisibility(View.VISIBLE); holder.progress_layout.setVisibility(View.GONE); } if (position == 0) { holder.icon_txt.setTextColor(0xffffffff); holder.icon_txt.setBackgroundResource(R.drawable.round_rect_file_history_orange); } else { holder.icon_txt.setTextColor(0xff808080); holder.icon_txt.setBackgroundResource(R.drawable.round_rect_file_history_gray); } holder.cancel.setOnClickListener(cancelClickListener); holder.more.setTag(position); holder.more.setOnClickListener(onMoreClickListener); holder.downloadFlag.setText(data.isDownload ? "查看" : "下载"); return convertView; } } private class FileHistoryRemarkRequest { private AttachmentFileHistoryObject item; private String remark; public FileHistoryRemarkRequest(AttachmentFileHistoryObject item, String remark) { this.item = item; this.remark = remark; } public void remarkItem() { item.setRemark(remark); } } }