package net.coding.program.project.detail.file; import android.content.Intent; import android.view.ActionMode; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.CompoundButton; import android.widget.ListView; import net.coding.program.R; import net.coding.program.common.ui.BackActivity; import net.coding.program.model.AttachmentFileObject; import net.coding.program.model.AttachmentFolderObject; import net.coding.program.project.detail.AttachmentsDownloadDetailActivity; import net.coding.program.project.detail.AttachmentsFolderSelectorActivity; import net.coding.program.project.detail.AttachmentsHtmlDetailActivity_; import net.coding.program.project.detail.AttachmentsPhotoDetailActivity_; import net.coding.program.project.detail.AttachmentsTextDetailActivity_; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.Click; import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.Extra; import org.androidannotations.annotations.OptionsItem; import org.androidannotations.annotations.OptionsMenu; import org.androidannotations.annotations.ViewById; import java.io.File; import java.util.ArrayList; import java.util.HashSet; @EActivity(R.layout.activity_local_file_list) @OptionsMenu(R.menu.activity_local_file_list) public class LocalFileListActivity extends BackActivity { public static final String RESULT_INTENT_TITLE = "RESULT_INTENT_TITLE"; public static final String RESULT_INTENT_FILES = "RESULT_INTENT_FILES"; @Extra String title; @Extra ArrayList<File> files; @ViewById ListView listView; @ViewById View common_files_delete; private LocalAdapter adapter; boolean editMode = false; HashSet<Integer> pickItems = new HashSet<>(); private ActionMode actionMode; @AfterViews protected void initLocalFileListActivity() { getSupportActionBar().setTitle(title); adapter = new LocalAdapter(); listView.setAdapter(adapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { File fileData = (File) adapterView.getItemAtPosition(i); // AttachmentFileObject data = createFileHelp(fileData); // if (data.isTxt()) { // AttachmentsTextDetailActivity_ // .intent(LocalFileListActivity.this) // .extraFile(fileData) // .start(); // // } else if (data.isMd()) { // AttachmentsHtmlDetailActivity_ // .intent(LocalFileListActivity.this) // .extraFile(fileData) // .start(); // // // } else if (data.isImage()) { // AttachmentsPhotoDetailActivity_ // .intent(LocalFileListActivity.this) // .extraFile(fileData) // .start(); // // } else { //// AttachmentsDownloadDetailActivity_.intent(AttachmentsActivity.this) //// .mProjectObjectId(mProjectObjectId) //// .mAttachmentFolderObject(mAttachmentFolderObject) //// .mAttachmentFileObject(data) //// .mProject(mProject) //// .startForResult(FILE_DELETE_CODE); // // // } AttachmentFileObject fileHelp = new AttachmentFileObject(); String[] split = fileData.getName().split("\\|\\|\\|"); String name = split[split.length - 1]; fileHelp.setName(name); int pos = name.lastIndexOf("."); String fileSuffix; if (pos != -1 && pos != name.length() - 1) { fileSuffix = name.substring(pos + 1, name.length()); } else { fileSuffix = name; } fileHelp.fileType = fileSuffix.toLowerCase(); AttachmentFolderObject folder = new AttachmentFolderObject(); folder.name = fileHelp.getName(); AttachmentFileObject folderFile = new AttachmentFileObject(); folderFile.file_id = split[1]; folderFile.setName(folder.name); int projectId = Integer.valueOf(split[0]); String extension = folderFile.getName().toLowerCase(); final String imageType = ".*\\.(gif|png|jpeg|jpg)$"; final String htmlMdType = ".*\\.(html|htm|markd|markdown|md|mdown)$"; final String txtType = ".*\\.(sh|txt)$"; if (extension.matches(imageType)) { AttachmentsPhotoDetailActivity_.intent(LocalFileListActivity.this) .mProjectObjectId(projectId) .mAttachmentFolderObject(folder) .mAttachmentFileObject(folderFile) .mExtraFile(fileData) .start(); } else if (extension.matches(htmlMdType)) { AttachmentsHtmlDetailActivity_.intent(LocalFileListActivity.this) .mProjectObjectId(projectId) .mAttachmentFolderObject(folder) .mAttachmentFileObject(folderFile) .mExtraFile(fileData) .start(); } else if (extension.matches(txtType)) { AttachmentsTextDetailActivity_.intent(LocalFileListActivity.this) .mProjectObjectId(projectId) .mExtraFile(fileData) .mAttachmentFolderObject(folder) .mAttachmentFileObject(folderFile) .start(); } else { AttachmentsDownloadDetailActivity.openFile(LocalFileListActivity.this, fileData); } } }); } @Override public void onBackPressed() { Intent intent = new Intent(); intent.putExtra(RESULT_INTENT_TITLE, title); intent.putExtra(RESULT_INTENT_FILES, files); setResult(RESULT_OK, intent); super.onBackPressed(); } @Click void common_files_delete() { ArrayList<File> removes = new ArrayList<>(); for (Integer pos : pickItems) { try { File file = files.get(pos); if (file.delete()) { removes.add(file); } } catch (Exception e) { } } pickItems.clear(); files.removeAll(removes); adapter.notifyDataSetChanged(); if (actionMode != null) { actionMode.finish(); } showButtomToast("删除成功"); } @OptionsItem void action_edit() { actionMode = startActionMode(mActionModeCallback); } class LocalAdapter extends BaseAdapter { @Override public int getCount() { return files.size(); } @Override public Object getItem(int position) { return files.get(position); } @Override public long getItemId(int position) { return position; } CompoundButton.OnCheckedChangeListener checkChange = new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { int pos = (int) compoundButton.getTag(); if (b) { pickItems.add(pos); } else { pickItems.remove(pos); } } }; @Override public View getView(int position, View convertView, ViewGroup parent) { AttachmentsFolderSelectorActivity.ViewHolder holder = AttachmentsFolderSelectorActivity.ViewHolder.instance(convertView, parent, checkChange); if (editMode) { holder.checkBox.setVisibility(View.VISIBLE); } else { holder.checkBox.setVisibility(View.GONE); } holder.checkBox.setTag(position); holder.checkBox.setChecked(pickItems.contains(position)); holder.more.setVisibility(View.INVISIBLE); File data = (File) getItem(position); AttachmentFileObject fileHelp = createFileHelp(data); holder.name.setText(fileHelp.getName()); if (fileHelp.isImage()) { getImageLoad().loadImage(holder.icon, "file://" + data.getAbsolutePath()); } else { holder.icon.setImageResource(fileHelp.getIconResourceId()); } return holder.getRootView(); } } private AttachmentFileObject createFileHelp(File data) { AttachmentFileObject fileHelp = new AttachmentFileObject(); String[] split = data.getName().split("\\|\\|\\|"); String name = split[split.length - 1]; fileHelp.setName(name); int pos = name.lastIndexOf("."); String fileSuffix; if (pos != -1 && pos != name.length() - 1) { fileSuffix = name.substring(pos + 1, name.length()); } else { fileSuffix = name; } fileHelp.fileType = fileSuffix.toLowerCase(); return fileHelp; } 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); common_files_delete.setVisibility(View.VISIBLE); editMode = true; adapter.notifyDataSetChanged(); 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; default: return false; } } @Override public void onDestroyActionMode(ActionMode actionMode) { common_files_delete.setVisibility(View.GONE); adapter.notifyDataSetChanged(); } }; private void action_all() { for (int i = 0; i < files.size(); ++i) { pickItems.add(i); } adapter.notifyDataSetChanged(); } private void action_inverse() { HashSet<Integer> temp = new HashSet<>(); for (int i = 0; i < files.size(); ++i) { if (!pickItems.contains(i)) { temp.add(i); } } pickItems = temp; adapter.notifyDataSetChanged(); } }