package net.coding.program.project.detail;
import android.app.Activity;
import android.app.DownloadManager;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.support.v7.app.AlertDialog;
import android.util.Log;
import android.view.ActionMode;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.loopj.android.http.RequestParams;
import net.coding.program.FootUpdate;
import net.coding.program.R;
import net.coding.program.common.BlankViewDisplay;
import net.coding.program.common.DialogUtil;
import net.coding.program.common.Global;
import net.coding.program.common.ImageLoadTool;
import net.coding.program.common.network.NetworkImpl;
import net.coding.program.common.umeng.UmengEvent;
import net.coding.program.common.util.FileUtil;
import net.coding.program.common.widget.FileListHeadItem;
import net.coding.program.model.AttachmentFileObject;
import net.coding.program.model.AttachmentFolderObject;
import net.coding.program.model.ProjectObject;
import net.coding.program.project.detail.file.FileDownloadBaseActivity;
import net.coding.program.project.detail.file.ViewHolderFile;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.Click;
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.OptionsItem;
import org.androidannotations.annotations.ViewById;
import org.apache.http.Header;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.regex.Pattern;
/**
* 展示某一项目文档目录下面文件的Activity
* 原本没有二级目录,这个Activity是只用来处理AttachmentFileObject的
* 之后加了二级目录,那么有些实现方式就不太合适了
* Created by yangzhen
*/
@EActivity(R.layout.activity_attachments)
//@OptionsMenu(R.menu.project_attachment_file)
public class AttachmentsActivity extends FileDownloadBaseActivity implements FootUpdate.LoadMore, UploadStyle {
public static final String HOST_PROJECT_ID = Global.HOST_API + "/project/%d";
final public static int FILE_SELECT_CODE = 10;
final public static int FILE_DELETE_CODE = 11;
final public static int FILE_MOVE_CODE = 12;
private static final String TAG_HTTP_FILE_EXIST = "TAG_HTTP_FILE_EXIST";
private static final String HOST_HTTP_FILE_RENAME = "HOST_HTTP_FILE_RENAME";
private static String TAG = AttachmentsActivity.class.getSimpleName();
@Extra
int mProjectObjectId;
@Extra
ProjectObject mProject;
@Extra
AttachmentFolderObject mAttachmentFolderObject;
// ProjectObject mProjectObject;
String urlFiles = Global.HOST_API + "/project/%s/files/%s?height=90&width=90&pageSize=9999";
String urlUpload = Global.HOST_API + "/project/%s/file/upload";
ArrayList<AttachmentFileObject> mFilesArray = new ArrayList<>();
protected CompoundButton.OnCheckedChangeListener onCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
AttachmentFileObject data = mFilesArray.get((Integer) buttonView.getTag());
data.isSelected = isChecked;
}
};
boolean mNoMore = false;
@ViewById
ListView listView;
// @ViewById
// RelativeLayout uploadLayout;
//var EDITABLE_FILE_REG=/\.(txt|md|html|htm)$/
// /\.(pdf)$/
@ViewById
View blankLayout;
@ViewById
View folder_actions_layout;
@ViewById
View files_actions_layout;
// @ViewById
// ImageView uploadCloseBtn;
// @ViewById
// TextView uploadDoneHint;
// @ViewById
// TextView uploadLeftHint;
// @ViewById
// TextView uploadRightHint;
// @ViewById
// TextView uploadMiddleHint;
// @ViewById
// RelativeLayout uploadDoneLayout;
// @ViewById
// RelativeLayout uploadStatusLayout;
// @ViewById
// ImageView uploadStatusProgress;
// @ViewById
// ImageView uploadStatusProgressRemain;
// @ViewById
// RelativeLayout uploadFailureLayout;
// @ViewById
// ImageView uploadFailureCloseBtn;
LinearLayout.LayoutParams barParams;
LinearLayout.LayoutParams barParamsRemain;
ActionMode mActionMode;
ArrayList<AttachmentFileObject> selectFile;
ArrayList<AttachmentFolderObject> selectFolder;
View.OnClickListener mClickReload = new View.OnClickListener() {
@Override
public void onClick(View v) {
loadMore();
}
};
private String HOST_FILE_DELETE = Global.HOST_API + "/project/%s/file/delete?%s";
private String HOST_FILE_MOVETO = Global.HOST_API + "/project/%s/files/moveto/%s?%s";
private String HOST_FILECOUNT = Global.HOST_API + "/project/%s/folders/all_file_count";
private String HOST_FOLDER_NAME = Global.HOST_API + "/project/%s/dir/%s/name/%s";
private String HOST_FOLDER_NEW = Global.HOST_API + "/project/%s/mkdir";
private String HOST_FOLDER_DELETE_FORMAT = Global.HOST_API + "/project/%s/rmdir/%s";
private String HOST_FOLDER_DELETE;
private HashMap<String, Integer> fileCountMap = new HashMap<>();
private String uploadHitMiddleFormat = "%s%%";
// private String uploadHitCompleteFormat = "上传完成,本次共上传%s个文件";
// private String uploadHitLeftFormat = "正在上传%s项";
private long uploadStartTime = 0l;
private boolean isEditMode = false;
BaseAdapter adapter = new BaseAdapter() {
@Override
public int getCount() {
return mFilesArray.size();
}
@Override
public Object getItem(int position) {
return mFilesArray.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolderFile holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.project_attachment_file_list_item, parent, false);
holder = new ViewHolderFile(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolderFile) convertView.getTag();
}
AttachmentFileObject data = mFilesArray.get(position);
holder.name.setText(data.getName());
if (data.isFolder) {
holder.icon.setImageResource(R.drawable.ic_project_git_folder2);
holder.icon.setVisibility(View.VISIBLE);
holder.icon.setBackgroundResource(android.R.color.transparent);
holder.icon_txt.setVisibility(View.GONE);
holder.file_info_layout.setVisibility(View.GONE);
holder.folder_name.setText(data.getName());
holder.folder_name.setVisibility(View.VISIBLE);
} else if (data.isImage()) {
//Log.d("imagePattern", "data.preview:" + data.preview);
imagefromNetwork(holder.icon, data.preview, ImageLoadTool.optionsRounded);
holder.icon.setVisibility(View.VISIBLE);
holder.icon.setBackgroundResource(R.drawable.shape_image_icon_bg);
holder.icon_txt.setVisibility(View.GONE);
holder.file_info_layout.setVisibility(View.VISIBLE);
holder.folder_name.setVisibility(View.GONE);
} else {
imagefromNetwork(holder.icon, "drawable://" + data.getIconResourceId(), ImageLoadTool.optionsRounded);
holder.icon.setVisibility(View.VISIBLE);
holder.icon.setBackgroundResource(android.R.color.transparent);
holder.icon_txt.setVisibility(View.GONE);
holder.file_info_layout.setVisibility(View.VISIBLE);
holder.folder_name.setVisibility(View.GONE);
}
/*holder.btn.setTag(data);
holder.btn.setOnClickListener(btnClickListener);
if (data.isImage() || data.isHtml() || data.isMd() || data.isTxt()) {
//holder.btn.setVisibility(View.VISIBLE);
holder.btn.setText("查看");
} else {
//holder.btn.setVisibility(View.GONE);
holder.btn.setText("下载");
}*/
holder.content.setText(Global.HumanReadableFilesize(data.getSize()));
holder.desc.setText(String.format("发布于%s", Global.dayToNow(data.created_at)));
holder.username.setText(data.owner.name);
if (position == mFilesArray.size() - 1) {
if (!mNoMore) {
loadMore();
}
}
holder.checkBox.setTag(position);
if (isEditMode) {
if (!data.isFolder)
holder.checkBox.setVisibility(View.VISIBLE);
else
holder.checkBox.setVisibility(View.INVISIBLE);
if (data.isSelected) {
holder.checkBox.setChecked(true);
} else {
holder.checkBox.setChecked(false);
}
//((RelativeLayout.LayoutParams) holder.bottomLine.getLayoutParams()).addRule(RelativeLayout.LEFT_OF, R.id.icon);
((RelativeLayout.LayoutParams) holder.bottomLine.getLayoutParams()).leftMargin = Global.dpToPx(58);
} else {
holder.checkBox.setVisibility(View.GONE);
//((RelativeLayout.LayoutParams) holder.bottomLine.getLayoutParams()).removeRule(RelativeLayout.LEFT_OF);
((RelativeLayout.LayoutParams) holder.bottomLine.getLayoutParams()).leftMargin = 0;
}
holder.checkBox.setOnCheckedChangeListener(onCheckedChangeListener);
if (data.bytesAndStatus != null) {
Log.v("updateFileDownload", data.getName() + ":" + data.bytesAndStatus[0] + " " + data.bytesAndStatus[1] + " " + data.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.content.setVisibility(View.GONE);
holder.more.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.content.setVisibility(View.VISIBLE);
holder.more.setVisibility(View.VISIBLE);
holder.progress_layout.setVisibility(View.GONE);
}
} else {
holder.desc_layout.setVisibility(View.VISIBLE);
holder.content.setVisibility(View.VISIBLE);
holder.more.setVisibility(View.VISIBLE);
holder.progress_layout.setVisibility(View.GONE);
}
holder.cancel.setOnClickListener(cancelClickListener);
holder.more.setTag(position);
holder.more.setOnClickListener(onMoreClickListener);
holder.downloadFlag.setText(data.isDownload ? "查看" : "下载");
holder.item_layout_root.setBackgroundResource(data.isDownload
? R.drawable.list_item_selector_project_file
: R.drawable.list_item_selector);
if (data.isFolder) {
holder.more.setVisibility(View.INVISIBLE);
} else {
holder.more.setVisibility(View.VISIBLE);
}
return convertView;
}
};
protected View.OnClickListener cancelClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
AttachmentFileObject data = mFilesArray.get((Integer) v.getTag());
long downloadId = data.downloadId;
removeDownloadFile(downloadId);
data.downloadId = 0L;
adapter.notifyDataSetChanged();
}
};
/**
* 弹出框
*/
private DialogUtil.BottomPopupWindow mAttachmentPopupWindow = null;//文档目录的底部弹出框
private DialogUtil.BottomPopupWindow mAttachmentFilePopupWindow = null;//文档文件的底部弹出框
private int selectedPosition;
protected View.OnClickListener onMoreClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
Integer position = (Integer) view.getTag();
AttachmentFileObject file = mFilesArray.get(position);
selectedPosition = position;
if (file.isDownload) {
listViewItemClicked(position);
} else {
action_download_single(mFilesArray.get(selectedPosition));
}
}
};
private AdapterView.OnItemClickListener onPopupItemClickListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
switch (position) {
case 0:
doRename(selectedPosition, mFilesArray.get(selectedPosition).folderObject);
break;
case 1:
AttachmentFolderObject selectedFolderObject = mFilesArray.get(selectedPosition).folderObject;
if (selectedFolderObject.isDeleteable()) {
action_delete_single(selectedFolderObject);
} else {
showButtomToast("请先清空文件夹");
return;
}
break;
}
mAttachmentPopupWindow.dismiss();
}
};
private AdapterView.OnItemClickListener onFilePopupItemClickListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
switch (position) {
case 0:
// 移动
action_move_single(mFilesArray.get(selectedPosition));
break;
case 1:
// 下载
action_download_single(mFilesArray.get(selectedPosition));
break;
case 2:
// 删除
action_delete_single(mFilesArray.get(selectedPosition));
break;
}
mAttachmentFilePopupWindow.dismiss();
}
};
/**
* 为了实现设计的样式,右上角下拉没有用actionbar自带的,而是用了PopupWindow
*/
private DialogUtil.RightTopPopupWindow mRightTopPopupWindow = null;
private AdapterView.OnItemClickListener onRightTopPopupItemClickListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
switch (position) {
case 0:
action_move();
break;
case 1:
action_download(mFilesArray);
break;
case 2:
if (isChooseOthers()) {
return;
} else {
action_delete();
}
break;
}
mRightTopPopupWindow.dismiss();
}
};
private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.project_attachment_file_edit, menu);
files_actions_layout.setVisibility(View.VISIBLE);
folder_actions_layout.setVisibility(View.GONE);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;// Return false if nothing is done
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.action_all:
action_all();
return true;
case R.id.action_inverse:
action_inverse();
return true;
case R.id.action_more:
showRightTopPop();
return true;
default:
return false;
}
}
@Override
public void onDestroyActionMode(ActionMode mode) {
mActionMode = null;
files_actions_layout.setVisibility(View.GONE);
folder_actions_layout.setVisibility(View.VISIBLE);
setListEditMode(false);
}
};
@OptionsItem
protected final void action_copy() {
String link = getLink();
if (link.isEmpty()) {
showButtomToast("复制链接失败");
} else {
Global.copy(this, link);
showButtomToast("已复制链接 " + link);
}
}
@OptionsItem(android.R.id.home)
void close() {
onBackPressed();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.project_attachment_file, menu);
if (!mAttachmentFolderObject.parent_id.equals("0") || mAttachmentFolderObject.file_id.equals("0")) {
// menu.findItem(R.id.action_new_folder).setVisible(false);
Drawable drawable = getResources().getDrawable(R.drawable.project_file_action_create_folder_disable);
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
((TextView) findViewById(R.id.textCreateFolder)).setCompoundDrawables(
drawable,
null,
null,
null
);
}
return true;
}
ViewGroup listHead;
@AfterViews
final void initAttachmentsActivity() {
// uploadLayout.setVisibility(View.GONE);
setActionBarTitle(mAttachmentFolderObject.name);
urlFiles = String.format(urlFiles, mProjectObjectId, mAttachmentFolderObject.file_id);
urlUpload = String.format(urlUpload, mProjectObjectId);
// barParams = (LinearLayout.LayoutParams) uploadStatusProgress.getLayoutParams();
// barParamsRemain = (LinearLayout.LayoutParams) uploadStatusProgressRemain.getLayoutParams();
HOST_FILECOUNT = String.format(HOST_FILECOUNT, mProjectObjectId);
mFootUpdate.init(listView, mInflater, this);
listHead = (ViewGroup) getLayoutInflater().inflate(R.layout.upload_file_layout, listView, false);
listView.addHeaderView(listHead, null, false);
listView.setAdapter(adapter);
initBottomPop();
loadMore();
String projectUrl = String.format(HOST_PROJECT_ID, mProjectObjectId);
getNetwork(projectUrl, HOST_PROJECT_ID);
}
@Click
void common_files_move() {
action_move();
}
@Click
void common_files_download() {
action_download(mFilesArray);
}
@Click
void common_files_delete() {
if (!isChooseOthers()) {
action_delete();
} else {
showMiddleToast("不能删除别人的文件");
}
}
@ItemClick
void listViewItemClicked(int pos) {
int position = pos - 1; // 由于 addHeader 后, pos 是以 header 开始计算
AttachmentFileObject data = mFilesArray.get(position);
if (isEditMode) {
if (!data.isFolder) {
data.isSelected = !data.isSelected;
adapter.notifyDataSetChanged();
}
} else {
if (data.isFolder) {
AttachmentsActivity_.intent(AttachmentsActivity.this)
.mAttachmentFolderObject(data.folderObject).
mProjectObjectId(mProjectObjectId)
.mProject(mProject)
.startForResult(ProjectAttachmentFragment.RESULT_REQUEST_FILES);
// } else if (data.isImage()) {
// AttachmentsPicDetailActivity_.intent(AttachmentsActivity.this).mProjectObjectId(mProjectObjectId).mAttachmentFolderObject(mAttachmentFolderObject).mAttachmentFileObject(data).fileList(getPicFiles()).startForResult(FILE_DELETE_CODE);
// } else if (data.isHtml() || data.isMd()) {
// AttachmentsHtmlDetailActivity_.intent(AttachmentsActivity.this).mProjectObjectId(mProjectObjectId).mAttachmentFolderObject(mAttachmentFolderObject).mAttachmentFileObject(data).startForResult(FILE_DELETE_CODE);
// } else if (data.isTxt()) {
// AttachmentsTextDetailActivity_.intent(AttachmentsActivity.this).mProjectObjectId(mProjectObjectId).mAttachmentFolderObject(mAttachmentFolderObject).mAttachmentFileObject(data).startForResult(FILE_DELETE_CODE);
} else {
if (data.isDownload) {
jumpToDetail(data);
} else if (data.isImage()) {
AttachmentsPhotoDetailActivity_
.intent(this)
.mProjectObjectId(mProjectObjectId)
.mAttachmentFolderObject(mAttachmentFolderObject)
.mAttachmentFileObject(data)
.mProject(mProject)
.startForResult(FILE_DELETE_CODE);
} else {
AttachmentsDownloadDetailActivity_.intent(AttachmentsActivity.this)
.mProjectObjectId(mProjectObjectId)
.mAttachmentFolderObject(mAttachmentFolderObject)
.mAttachmentFileObject(data)
.mProject(mProject)
.startForResult(FILE_DELETE_CODE);
}
}
}
}
private void jumpToDetail(AttachmentFileObject data) {
if (AttachmentFileObject.isTxt(data.fileType)) {
AttachmentsTextDetailActivity_
.intent(this)
.mProjectObjectId(mProjectObjectId)
.mAttachmentFolderObject(mAttachmentFolderObject)
.mAttachmentFileObject(data)
.mProject(mProject)
.startForResult(FILE_DELETE_CODE);
} else if (AttachmentFileObject.isMd(data.fileType)) {
AttachmentsHtmlDetailActivity_
.intent(this)
.mProjectObjectId(mProjectObjectId)
.mAttachmentFolderObject(mAttachmentFolderObject)
.mAttachmentFileObject(data)
.mProject(mProject)
.startForResult(FILE_DELETE_CODE);
} else if (data.isImage()) {
AttachmentsPhotoDetailActivity_
.intent(this)
.mProjectObjectId(mProjectObjectId)
.mAttachmentFolderObject(mAttachmentFolderObject)
.mAttachmentFileObject(data)
.mProject(mProject)
.startForResult(FILE_DELETE_CODE);
} else {
AttachmentsDownloadDetailActivity_.intent(AttachmentsActivity.this)
.mProjectObjectId(mProjectObjectId)
.mAttachmentFolderObject(mAttachmentFolderObject)
.mAttachmentFileObject(data)
.mProject(mProject)
.startForResult(FILE_DELETE_CODE);
}
}
@ItemLongClick
void listViewItemLongClicked(int position) {
showPop(null, position - 1);
}
/**
* 获取当前文档列表中的所有图片文档,提供给AttachmentsPicDetailActivity
*
* @return 当前文档列表中的所有图片文档
*/
private ArrayList<AttachmentFileObject> getPicFiles() {
ArrayList<AttachmentFileObject> picFiles = new ArrayList<>();
for (AttachmentFileObject file : mFilesArray) {
if (file.isImage()) {
picFiles.add(file);
}
}
return picFiles;
}
@Override
public void loadMore() {
getNextPageNetwork(urlFiles, urlFiles);
}
@Override
public void parseJson(int code, JSONObject respanse, String tag, int pos, final Object data) throws JSONException {
if (tag.equals(urlFiles)) {
if (code == 0) {
JSONArray files = respanse.getJSONObject("data").getJSONArray("list");
if (mFilesArray.size() == 0) {
ArrayList<AttachmentFolderObject> subFolders = mAttachmentFolderObject.sub_folders;
for (AttachmentFolderObject subFolder : subFolders) {
mFilesArray.add(AttachmentFileObject.parseFileObject(subFolder));
}
}
for (int i = 0; i < files.length(); ++i) {
AttachmentFileObject fileObject = new AttachmentFileObject(files.getJSONObject(i));
setDownloadStatus(fileObject);
mFilesArray.add(fileObject);
}
int page = respanse.getJSONObject("data").optInt("page");
int totalPage = respanse.getJSONObject("data").optInt("totalPage");
if (page == totalPage)
mNoMore = true;
adapter.notifyDataSetChanged();
} else {
showErrorMsg(code, respanse);
}
BlankViewDisplay.setBlank(mFilesArray.size(), this, code == 0, blankLayout, mClickReload);
} else if (tag.equals(HOST_FILE_DELETE)) {
if (code == 0) {
umengEvent(UmengEvent.FILE, "删除文件");
hideProgressDialog();
showButtomToast("删除完成");
mFilesArray.removeAll(selectFile);
adapter.notifyDataSetChanged();
setResult(Activity.RESULT_OK);
} else {
showErrorMsg(code, respanse);
}
BlankViewDisplay.setBlank(mFilesArray.size(), this, code == 0, blankLayout, mClickReload);
} else if (tag.equals(HOST_FILE_MOVETO)) {
if (code == 0) {
umengEvent(UmengEvent.FILE, "移动文件夹");
showButtomToast("移动成功");
mFilesArray.removeAll(selectFile);
adapter.notifyDataSetChanged();
setResult(Activity.RESULT_OK);
} else {
showErrorMsg(code, respanse);
}
BlankViewDisplay.setBlank(mFilesArray.size(), this, code == 0, blankLayout, mClickReload);
} else if (tag.equals(HOST_FILECOUNT)) {
if (code == 0) {
JSONArray counts = respanse.getJSONArray("data");
for (int i = 0; i < counts.length(); ++i) {
JSONObject countItem = counts.optJSONObject(i);
fileCountMap.put(countItem.optString("folder"), countItem.optInt("count"));
}
for (AttachmentFileObject fileObject : mFilesArray) {
if (fileObject.isFolder) {
fileObject.folderObject.setCount(fileCountMap.get(fileObject.folderObject.file_id));
fileObject.setName(fileObject.folderObject.getNameCount());
}
}
adapter.notifyDataSetChanged();
} else {
showErrorMsg(code, respanse);
}
} else if (tag.equals(HOST_FOLDER_NAME)) {
if (code == 0) {
umengEvent(UmengEvent.FILE, "重命名文件夹");
showButtomToast("重命名成功");
AttachmentFileObject folderObject = mFilesArray.get(pos);
folderObject.folderObject.name = (String) data;
folderObject.setName(folderObject.folderObject.getNameCount());
adapter.notifyDataSetChanged();
//mData.clear();
//AttachmentFolderObject folderObject = (AttachmentFolderObject)data;
//loadMore();
} else {
showButtomToast("重命名失败");
}
} else if (tag.equals(HOST_HTTP_FILE_RENAME)) {
if (code == 0) {
umengEvent(UmengEvent.FILE, "重命名文件");
showButtomToast("重命名成功");
AttachmentFileObject folderObject = mFilesArray.get(pos);
folderObject.setName((String) data);
adapter.notifyDataSetChanged();
} else {
showButtomToast("重命名失败");
}
} else if (tag.equals(HOST_FOLDER_DELETE)) {
if (code == 0) {
umengEvent(UmengEvent.FILE, "删除文件夹");
//setRefreshing(false);
AttachmentFileObject folderObject = mFilesArray.get(pos);
mFilesArray.remove(pos);
selectFolder.remove(0);
if (selectFolder.size() > 0) {
deleteFolders();
} else {
showButtomToast("删除完成");
adapter.notifyDataSetChanged();
}
setResult(Activity.RESULT_OK);
} else {
showErrorMsg(code, respanse);
}
BlankViewDisplay.setBlank(mFilesArray.size(), this, code == 0, blankLayout, mClickReload);
} else if (tag.equals(HOST_FOLDER_NEW)) {
if (code == 0) {
umengEvent(UmengEvent.FILE, "新建文件夹");
AttachmentFolderObject folder = new AttachmentFolderObject(respanse.getJSONObject("data"));
mAttachmentFolderObject.sub_folders.add(0, folder);
mFilesArray.add(0, AttachmentFileObject.parseFileObject(folder));
adapter.notifyDataSetChanged();
setResult(Activity.RESULT_OK);
} else {
showErrorMsg(code, respanse);
}
BlankViewDisplay.setBlank(mFilesArray.size(), this, code == 0, blankLayout, mClickReload);
} else if (tag.equals(HOST_PROJECT_ID)) {
if (code == 0) {
mProject = new ProjectObject(respanse.optJSONObject("data"));
} else {
showErrorMsg(code, respanse);
}
} else if (tag.equals(TAG_HTTP_FILE_EXIST)) {
umengEvent(UmengEvent.FILE, "上传文件");
if (code == 0) {
String s = respanse.optJSONObject("data").optString("conflict_file");
if (s.isEmpty()) {
uploadFile((File) data);
} else {
File file = (File) data;
showDialog(file.getName(), "存在同名文件,是否覆盖?", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
uploadFile((File) data);
}
});
}
} else {
showErrorMsg(code, respanse);
}
}
}
@Click
protected final void common_folder_bottom_upload() {
// if (isUploading) {
// return;
// }
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);
try {
startActivityForResult(Intent.createChooser(intent, "请选择一个要上传的文件"),
FILE_SELECT_CODE);
} catch (android.content.ActivityNotFoundException ex) {
showButtomToast("请安装文件管理器");
}
}
@OnActivityResult(FILE_SELECT_CODE)
void onResult(int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
Uri uri = data.getData();
String path = FileUtil.getPath(this, uri);
File selectedFile = new File(path);
uploadFilePrepare(selectedFile);
}
}
private void uploadFilePrepare(File selectedFile) {
String httpHost = getHttpFileExist(selectedFile.getName(), mAttachmentFolderObject);
getNetwork(httpHost, TAG_HTTP_FILE_EXIST, -1, selectedFile);
}
private void uploadFile(File selectedFile) {
// showUploadStatus(UploadStatus.Uploading);
FileListHeadItem uploadItemView = new FileListHeadItem(AttachmentsActivity.this);
listHead.addView(uploadItemView);
FileListHeadItem.Param param = new FileListHeadItem.Param(urlUpload,
mAttachmentFolderObject.file_id, selectedFile);
uploadItemView.setData(param, this, getImageLoad());
// client.setTimeout(60 * 60 * 1000); // 超时设为60分钟
}
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
if (AttachmentsActivity.this.isFinishing()) {
return;
}
Log.v(TAG, "onSuccess");
try {
int code = response.getInt("code");
if (code == 0) {
umengEvent(UmengEvent.FILE, "上传文件");
AttachmentFileObject newFile = new AttachmentFileObject(response.getJSONObject("data"));
setDownloadStatus(newFile);
int i = 0;
for (; i < mFilesArray.size(); ++i) {
AttachmentFileObject item = mFilesArray.get(i);
String itemName = item.getName();
if (!item.isFolder && itemName.equals(newFile.getName())) {
mFilesArray.set(i, newFile);
break;
}
}
if (i == mFilesArray.size()) {
mFilesArray.add(mAttachmentFolderObject.sub_folders.size(), newFile);
}
adapter.notifyDataSetChanged();
setResult(Activity.RESULT_OK);
// showUploadStatus(UploadStatus.Finish);
} else {
showErrorMsg(code, response);
}
BlankViewDisplay.setBlank(mFilesArray.size(), this, code == 0, blankLayout, mClickReload);
} catch (Exception e) {
Global.errorLog(e);
}
}
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
Log.v(TAG, "onFailure");
try {
showErrorMsg(NetworkImpl.NETWORK_ERROR, errorResponse);
// showUploadStatus(UploadStatus.Failure);
} catch (Exception e) {
Global.errorLog(e);
}
}
private String getHttpFileExist(String name, AttachmentFolderObject folder) {
String encodeName = Global.encodeUtf8(name);
return Global.HOST_API +
mProject.getProjectPath() +
"/dir/" +
folder.file_id +
"/files/existed?names=" +
encodeName;
}
// private void showUploadStatus(UploadStatus status) {
// switch (status) {
// case Uploading:
// uploadFailureLayout.setVisibility(View.GONE);
// barParams.weight = 0;
// uploadStatusProgress.requestLayout();
// uploadMiddleHint.setText(String.format(uploadHitMiddleFormat, 0));
// barParamsRemain.weight = 100;
// uploadStatusProgressRemain.requestLayout();
// uploadDoneLayout.setVisibility(View.GONE);
// uploadStatusLayout.setVisibility(View.VISIBLE);
// uploadLayout.setVisibility(View.VISIBLE);
// uploadStartTime = System.currentTimeMillis();
// break;
// case Finish:
// uploadFailureLayout.setVisibility(View.GONE);
// uploadDoneLayout.setVisibility(View.VISIBLE);
// uploadStatusLayout.setVisibility(View.GONE);
// uploadLayout.setVisibility(View.VISIBLE);
// barParams.weight = 100;
// uploadStatusProgress.requestLayout();
// barParamsRemain.weight = 0;
// uploadStatusProgressRemain.requestLayout();
// break;
// case Failure:
// uploadFailureLayout.setVisibility(View.VISIBLE);
// uploadDoneLayout.setVisibility(View.GONE);
// uploadStatusLayout.setVisibility(View.GONE);
// uploadLayout.setVisibility(View.VISIBLE);
// barParams.weight = 100;
// uploadStatusProgress.requestLayout();
// barParamsRemain.weight = 0;
// uploadStatusProgressRemain.requestLayout();
// break;
// case Close:
// uploadLayout.setVisibility(View.GONE);
// break;
//
// }
// }
// @Click({R.id.uploadCloseBtn, R.id.uploadFailureCloseBtn})
// void closeUploadBar() {
// showUploadStatus(UploadStatus.Close);
// }
// private void setUploadStatus(long bytesWritten, long totalSize) {
// long uploadCurTime = System.currentTimeMillis();
// int progress = (int) ((totalSize > 0) ? (bytesWritten * 1.0 / totalSize) * 100 : -1);//bytesWritten * 100 /totalSize ;
// uploadMiddleHint.setText(String.format(uploadHitMiddleFormat, progress));
// barParams.weight = progress;
// uploadStatusProgress.requestLayout();
// barParamsRemain.weight = 100 - progress;
// uploadStatusProgressRemain.requestLayout();
// uploadRightHint.setText(String.format("%s/S", Global.HumanReadableFilesize(bytesWritten / (uploadCurTime - uploadStartTime) * 1000)));
// Log.d(TAG, barParams.weight + " " + barParamsRemain.weight + " " + (bytesWritten / (uploadCurTime - uploadStartTime) * 1000) + " " + String.format("%s/S", Global.HumanReadableFilesize(bytesWritten / (uploadCurTime - uploadStartTime) * 1000)));
// }
@OnActivityResult(FILE_DELETE_CODE)
void onFileResult(int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
int actionName = data.getIntExtra(FileActions.ACTION_NAME, 0);
switch (actionName) {
case FileActions.ACTION_DELETE: {
AttachmentFileObject paramFileObject = (AttachmentFileObject) data.getSerializableExtra(AttachmentFileObject.RESULT);
for (AttachmentFileObject file : mFilesArray) {
if (file.file_id.equals(paramFileObject.file_id)) {
mFilesArray.remove(file);
adapter.notifyDataSetChanged();
break;
}
}
setResult(Activity.RESULT_OK);
}
case FileActions.ACTION_EDIT: {
AttachmentFileObject paramFileObject = (AttachmentFileObject) data.getSerializableExtra(AttachmentFileObject.RESULT);
upadateListItem(paramFileObject);
break;
}
case FileActions.ACTION_DOWNLOAD_OPEN: {
AttachmentFileObject paramFileObject = (AttachmentFileObject) data.getSerializableExtra(AttachmentFileObject.RESULT);
upadateListItem(paramFileObject);
jumpToDetail(paramFileObject);
break;
}
// default:
// showMiddleToast("");
}
}
}
private void upadateListItem(AttachmentFileObject paramFileObject) {
for (int i = 0; i < mFilesArray.size(); ++i) {
AttachmentFileObject file = mFilesArray.get(i);
if (file.file_id.equals(paramFileObject.file_id)) {
mFilesArray.set(i, paramFileObject);
adapter.notifyDataSetChanged();
break;
}
}
}
@OnActivityResult(ProjectAttachmentFragment.RESULT_REQUEST_FILES)
void onFolderResult(int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
getNetwork(HOST_FILECOUNT, HOST_FILECOUNT);
}
}
@OptionsItem
void action_edit() {
doEdit();
}
private void doEdit() {
if (mActionMode != null) {
return;
}
mActionMode = startActionMode(mActionModeCallback);
setListEditMode(true);
}
private void setListEditMode(boolean isEditMode) {
this.isEditMode = isEditMode;
adapter.notifyDataSetChanged();
}
/**
* 删除选中的文件
*/
void action_delete() {
selectFile = new ArrayList<>();
for (AttachmentFileObject fileObject : mFilesArray) {
if (fileObject.isSelected && !fileObject.isFolder)
selectFile.add(fileObject);
}
if (selectFile.size() == 0) {
showButtomToast("没有选中文件");
return;
}
String messageFormat = "确定要删除%s个文件么?";
new AlertDialog.Builder(this)
.setTitle("删除文件")
.setMessage(String.format(messageFormat, selectFile.size()))
.setPositiveButton("确定", (dialog, which) -> deleteFiles())
.setNegativeButton("取消", null)
.show();
}
/**
* 删除单个选中的文件
*
* @param selectedFile 当前选中的文件
*/
void action_delete_single(AttachmentFileObject selectedFile) {
if (selectedFile == null) {
showButtomToast("没有选中文件");
return;
}
selectFile = new ArrayList<>();
selectFile.add(selectedFile);
final String messageFormat = "确定要删除文件 \"%s\" 么?";
new AlertDialog.Builder(this)
.setTitle("删除文件")
.setMessage(String.format(messageFormat, selectedFile.getName()))
.setPositiveButton("确定", (dialog, which) -> deleteFiles())
.setNegativeButton("取消", null)
.show();
}
void deleteFiles() {
String param = "";
int i = 0;
for (AttachmentFileObject file : selectFile) {
if (i > 0) {
param += "&";
}
param += "fileIds=" + file.file_id;
i++;
}
if (selectFile.size() > 0) {
deleteNetwork(String.format(HOST_FILE_DELETE, mProjectObjectId, param), HOST_FILE_DELETE);
}
}
void action_all() {
for (AttachmentFileObject fileObject : mFilesArray) {
if (!fileObject.isFolder)
fileObject.isSelected = true;
}
adapter.notifyDataSetChanged();
}
void action_inverse() {
for (AttachmentFileObject fileObject : mFilesArray) {
if (!fileObject.isFolder)
fileObject.isSelected = !fileObject.isSelected;
}
adapter.notifyDataSetChanged();
}
void action_move() {
selectFile = new ArrayList<>();
for (AttachmentFileObject fileObject : mFilesArray) {
if (fileObject.isSelected && !fileObject.isFolder)
selectFile.add(fileObject);
}
//showButtomToast("selected count:" + selectFolder.size());
if (selectFile.size() == 0) {
showButtomToast("没有选中文件");
return;
}
showMoveDialog();
}
void action_move_single(AttachmentFileObject selectedFile) {
if (selectedFile == null) {
showButtomToast("没有选中文件");
return;
}
selectFile = new ArrayList<>();
selectFile.add(selectedFile);
showMoveDialog();
}
/**
* 显示文档目录选择界面
*/
private void showMoveDialog() {
AttachmentsFolderSelectorActivity_.intent(AttachmentsActivity.this).mProjectObjectId(mProjectObjectId).startForResult(FILE_MOVE_CODE);
}
@OnActivityResult(FILE_MOVE_CODE)
void onFileMoveResult(int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
AttachmentFolderObject selectedFolder = (AttachmentFolderObject) data.getSerializableExtra("mAttachmentFolderObject");
String param = "";
if (selectedFolder.file_id.equals(mAttachmentFolderObject.file_id)) {
return;
}
int i = 0;
for (AttachmentFileObject file : selectFile) {
if (i > 0) {
param += "&";
}
param += "fileId=" + file.file_id;
i++;
}
putNetwork(String.format(HOST_FILE_MOVETO, mProjectObjectId, selectedFolder.file_id, param), null, HOST_FILE_MOVETO);
}
}
public void initBottomPop() {
if (mAttachmentPopupWindow == null) {
ArrayList<DialogUtil.BottomPopupItem> popupItemArrayList = new ArrayList<>();
DialogUtil.BottomPopupItem renameItem = new DialogUtil.BottomPopupItem("重命名", R.drawable.ic_popup_attachment_rename);
popupItemArrayList.add(renameItem);
DialogUtil.BottomPopupItem deleteItem = new DialogUtil.BottomPopupItem("删除", R.drawable.ic_popup_attachment_delete_selector);
popupItemArrayList.add(deleteItem);
mAttachmentPopupWindow = DialogUtil.initBottomPopupWindow(AttachmentsActivity.this, "", popupItemArrayList, onPopupItemClickListener);
}
if (mAttachmentFilePopupWindow == null) {
ArrayList<DialogUtil.BottomPopupItem> popupItemArrayList = new ArrayList<>();
DialogUtil.BottomPopupItem moveItem = new DialogUtil.BottomPopupItem("移动", R.drawable.ic_popup_attachment_move_selector);
popupItemArrayList.add(moveItem);
DialogUtil.BottomPopupItem downloadItem = new DialogUtil.BottomPopupItem("下载", R.drawable.ic_popup_attachment_download_selector);
popupItemArrayList.add(downloadItem);
DialogUtil.BottomPopupItem deleteItem = new DialogUtil.BottomPopupItem("删除", R.drawable.ic_popup_attachment_delete_selector);
popupItemArrayList.add(deleteItem);
mAttachmentFilePopupWindow = DialogUtil.initBottomPopupWindow(AttachmentsActivity.this, "", popupItemArrayList, onFilePopupItemClickListener);
}
}
public void showPop(View view, int position) {
if (mAttachmentPopupWindow == null) {
initBottomPop();
}
selectedPosition = position;
AttachmentFileObject selectedFileObject = mFilesArray.get(selectedPosition);
if (selectedFileObject.isFolder) {
AttachmentFolderObject selectedFolderObject = selectedFileObject.folderObject;
// if (mAttachmentPopupWindow == null) {
// initBottomPop();
// }
//
// DialogUtil.BottomPopupItem renameItem = mAttachmentPopupWindow.adapter.getItem(0);
// DialogUtil.BottomPopupItem deleteItem = mAttachmentPopupWindow.adapter.getItem(1);
// if (selectedFolderObject.file_id.equals("0")) {
// renameItem.enabled = false;
// deleteItem.enabled = false;
// } else if (selectedFolderObject.count != 0) {
// renameItem.enabled = true;
// deleteItem.enabled = false;
// } else {
// renameItem.enabled = true;
// deleteItem.enabled = true;
// }
// mAttachmentPopupWindow.adapter.notifyDataSetChanged();
// mAttachmentPopupWindow.tvTitle.setText(selectedFolderObject.name);
//
// mAttachmentPopupWindow.showAtLocation(view, Gravity.CENTER, 0, 0);
String[] itemNames;
if (selectedFolderObject.file_id.equals("0")) {
itemNames = new String[]{};
} else if (selectedFolderObject.count != 0) {
itemNames = new String[]{"重命名"};
} else {
itemNames = new String[]{"重命名", "删除"};
}
if (itemNames.length == 0) {
return;
}
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setItems(itemNames, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (which == 0) {
doRename(selectedPosition, mFilesArray.get(selectedPosition).folderObject);
} else {
AttachmentFolderObject selectedFolderObject = mFilesArray.get(selectedPosition).folderObject;
if (selectedFolderObject.isDeleteable()) {
action_delete_single(selectedFolderObject);
} else {
showButtomToast("请先清空文件夹");
}
}
}
});
builder.show();
} else {
if (selectedFileObject.downloadId != 0L)
return;
// if (mAttachmentFilePopupWindow == null) {
// initBottomPop();
// }
//
// DialogUtil.BottomPopupItem moveItem = mAttachmentFilePopupWindow.adapter.getItem(0);
// DialogUtil.BottomPopupItem downloadItem = mAttachmentFilePopupWindow.adapter.getItem(1);
// DialogUtil.BottomPopupItem deleteItem = mAttachmentFilePopupWindow.adapter.getItem(2);
//
// if (selectedFileObject.isOwner()) {
// moveItem.enabled = true;
// downloadItem.enabled = true;
// deleteItem.enabled = true;
// } else {
// moveItem.enabled = true;
// downloadItem.enabled = true;
// deleteItem.enabled = false;
// }
//
// mAttachmentFilePopupWindow.adapter.notifyDataSetChanged();
// mAttachmentFilePopupWindow.tvTitle.setText(selectedFileObject.getName());
//
// mAttachmentFilePopupWindow.showAtLocation(view, Gravity.CENTER, 0, 0);
String[] itemTitles;
if (selectedFileObject.isOwner()) {
itemTitles = new String[]{"重命名", "移动", "删除"};
} else {
itemTitles = new String[]{"重命名", "移动"};
}
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setItems(itemTitles, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (which == 0) {
fileRename(selectedPosition, mFilesArray.get(selectedPosition));
} else if (which == 1) {
action_move_single(mFilesArray.get(selectedPosition));
} else {
action_delete_single(mFilesArray.get(selectedPosition));
}
}
});
builder.show();
}
}
/**
* 是否选中了别人创建的文件,别人创建的文件,没有权限删除
*
* @return 是否选中了别人创建的文件
*/
private boolean isChooseOthers() {
boolean hasOtherFile = false;
for (AttachmentFileObject fileObject : mFilesArray) {
if (fileObject.isSelected && !fileObject.isFolder && !fileObject.isOwner()) {
hasOtherFile = true;
break;
}
}
return hasOtherFile;
}
private void doRename(final int position, final AttachmentFolderObject folderObject) {
if (folderObject.file_id.equals("0")) {
showButtomToast("默认文件夹无法重命名");
return;
}
LayoutInflater li = LayoutInflater.from(AttachmentsActivity.this);
View v1 = li.inflate(R.layout.dialog_input, null);
final EditText input = (EditText) v1.findViewById(R.id.value);
input.setText(folderObject.name);
new AlertDialog.Builder(this)
.setTitle("重命名")
.setView(v1)
.setPositiveButton("确定", (dialog, which) -> {
String newName = input.getText().toString();
//从网页版扒来的正则
String namePatternStr = "[,`~!@#$%^&*:;()'\"><|.\\ /=]";
Pattern namePattern = Pattern.compile(namePatternStr);
if (newName.equals("")) {
showButtomToast("名字不能为空");
} else if (namePattern.matcher(newName).find()) {
showButtomToast("文件夹名:" + newName + " 不能采用");
} else {
if (!newName.equals(folderObject.name)) {
HOST_FOLDER_NAME = String.format(HOST_FOLDER_NAME, mProjectObjectId, folderObject.file_id, newName);
putNetwork(HOST_FOLDER_NAME, HOST_FOLDER_NAME, position, newName);
}
}
})
.setNegativeButton("取消", null)
.show();
input.requestFocus();
}
private void fileRename(final int postion, final AttachmentFileObject folderObject) {
LayoutInflater li = LayoutInflater.from(AttachmentsActivity.this);
View v1 = li.inflate(R.layout.dialog_input, null);
final EditText input = (EditText) v1.findViewById(R.id.value);
input.setText(folderObject.getName());
new AlertDialog.Builder(this)
.setTitle("重命名")
.setView(v1)
.setPositiveButton("确定", (dialog, which) -> {
String newName = input.getText().toString();
if (newName.equals("")) {
showButtomToast("名字不能为空");
} else {
if (!newName.equals(folderObject.getName())) {
String urlTemplate = Global.HOST_API + "/project/%d/files/%s/rename";
String url = String.format(urlTemplate, mProjectObjectId, folderObject.file_id);
RequestParams params = new RequestParams();
params.put("name", newName);
putNetwork(url, params, HOST_HTTP_FILE_RENAME, postion, newName);
}
}
})
.setNegativeButton("取消", null)
.show();
input.requestFocus();
}
void action_delete_single(AttachmentFolderObject selectedFolderObject) {
if (selectedFolderObject == null)
return;
selectFolder = new ArrayList<>();
selectFolder.add(selectedFolderObject);
String messageFormat = "确定删除文件夹 \"%s\" ?";
showDialog("删除文件夹", String.format(messageFormat, selectedFolderObject.name),
(dialog, which) -> deleteFolders());
}
void deleteFolders() {
if (selectFolder.size() > 0) {
//setRefreshing(true);
HOST_FOLDER_DELETE = String.format(HOST_FOLDER_DELETE_FORMAT, mProjectObjectId, selectFolder.get(0).file_id);
deleteNetwork(HOST_FOLDER_DELETE, HOST_FOLDER_DELETE, selectedPosition, selectFolder.get(0));
}
}
@Click
protected final void common_folder_bottom_add() {
if (!mAttachmentFolderObject.parent_id.equals("0") || mAttachmentFolderObject.file_id.equals("0")) {
return;
}
LayoutInflater li = LayoutInflater.from(AttachmentsActivity.this);
View v1 = li.inflate(R.layout.dialog_input, null);
final EditText input = (EditText) v1.findViewById(R.id.value);
input.setHint("请输入文件夹名称");
new AlertDialog.Builder(this)
.setTitle("新建文件夹")
.setView(v1)
.setPositiveButton("确定", (dialog, which) -> {
String newName = input.getText().toString();
String namePatternStr = "[,`~!@#$%^&*:;()'\"><|.\\ /=]";
Pattern namePattern = Pattern.compile(namePatternStr);
if (newName.equals("")) {
showButtomToast("名字不能为空");
} else if (namePattern.matcher(newName).find()) {
showButtomToast("文件夹名:" + newName + " 不能采用");
} else {
HOST_FOLDER_NEW = String.format(HOST_FOLDER_NEW, mProjectObjectId);
RequestParams params = new RequestParams();
params.put("name", newName);
params.put("parentId", mAttachmentFolderObject.file_id);
postNetwork(HOST_FOLDER_NEW, params, HOST_FOLDER_NEW);
}
}).setNegativeButton("取消", null)
.show();
input.requestFocus();
}
@Override
public String getProjectPath() {
return "/project/" + mProjectObjectId;
}
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(mProjectObjectId));
if (mFile.exists() && mFile.isFile()) {
mFileObject.isDownload = true;
} else {
mFileObject.downloadId = 0L;
mFileObject.isDownload = false;
}
}
}
// 更新文件的下载状态
@Override
public void checkFileDownloadStatus() {
for (AttachmentFileObject fileObject : mFilesArray) {
if (!fileObject.isFolder) {
setDownloadStatus(fileObject);
//Log.d("onResume", "update status:" + fileObject.name + " " + fileObject.isDownload);
}
}
adapter.notifyDataSetChanged();
}
protected String getLink() {
if (mProject == null) {
showButtomToast("获取项目信息失败,请稍后重试");
getNetwork(String.format(HOST_PROJECT_ID, mProjectObjectId), HOST_PROJECT_ID);
return "";
}
return mProject.getPath() + "/attachment/" + mAttachmentFolderObject.file_id;
}
public void initRightTopPop() {
if (mRightTopPopupWindow == null) {
ArrayList<DialogUtil.RightTopPopupItem> popupItemArrayList = new ArrayList<>();
DialogUtil.RightTopPopupItem moveItem = new DialogUtil.RightTopPopupItem(getString(R.string.action_move), R.drawable.ic_popup_attachment_move);
popupItemArrayList.add(moveItem);
DialogUtil.RightTopPopupItem downloadItem = new DialogUtil.RightTopPopupItem(getString(R.string.action_download), R.drawable.ic_popup_attachment_download);
popupItemArrayList.add(downloadItem);
DialogUtil.RightTopPopupItem deleteItem = new DialogUtil.RightTopPopupItem(getString(R.string.action_delete), R.drawable.ic_menu_delete_selector);
popupItemArrayList.add(deleteItem);
mRightTopPopupWindow = DialogUtil.initRightTopPopupWindow(AttachmentsActivity.this, popupItemArrayList, onRightTopPopupItemClickListener);
}
}
@Override
public int getProjectId() {
return mProjectObjectId;
}
public void showRightTopPop() {
if (mRightTopPopupWindow == null) {
initRightTopPop();
}
DialogUtil.RightTopPopupItem moveItem = mRightTopPopupWindow.adapter.getItem(0);
DialogUtil.RightTopPopupItem deleteItem = mRightTopPopupWindow.adapter.getItem(2);
deleteItem.enabled = !isChooseOthers();
mRightTopPopupWindow.adapter.notifyDataSetChanged();
Rect rectgle = new Rect();
Window window = getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(rectgle);
int StatusBarHeight = rectgle.top;
int contentViewTop =
window.findViewById(Window.ID_ANDROID_CONTENT).getTop();
//int TitleBarHeight= contentViewTop - StatusBarHeight;
mRightTopPopupWindow.adapter.notifyDataSetChanged();
mRightTopPopupWindow.setAnimationStyle(android.R.style.Animation_Dialog);
mRightTopPopupWindow.showAtLocation(getCurrentFocus(), Gravity.TOP | Gravity.RIGHT, 0, contentViewTop);
}
private enum UploadStatus {
Uploading, Finish, Close, Failure
}
public class FileActions {
public static final String ACTION_NAME = "ACTION_NAME";
public static final int ACTION_EDIT = 1;
public static final int ACTION_DELETE = 2;
public static final int ACTION_DOWNLOAD_OPEN = 4;
}
}