package net.coding.program.project.detail.file;
import android.content.Intent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import net.coding.program.R;
import net.coding.program.common.Global;
import net.coding.program.common.ui.BackActivity;
import net.coding.program.model.AccountInfo;
import net.coding.program.model.AttachmentFileObject;
import net.coding.program.model.ProjectObject;
import net.coding.program.project.detail.AttachmentsFolderSelectorActivity;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.OnActivityResult;
import org.androidannotations.annotations.ViewById;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@EActivity(R.layout.activity_notify_list)
public class LocalProjectFileActivity extends BackActivity {
private static final int RESULT_FILE_LIST = 1;
@ViewById
ListView listView;
Map<String, ArrayList<File>> data = new HashMap<>();
private LocalAdapter adapter;
private String[] setStrings;
@AfterViews
protected final void initLocalProjectFileActivity() {
HashMap<Integer, String> idName = new HashMap<>();
ArrayList<ProjectObject> projects = AccountInfo.loadProjects(this);
for (ProjectObject item : projects) {
idName.put(item.getId(), item.name);
}
String cachePath = FileSaveHelp.getFileDownloadAbsolutePath(this);
List<File> allFiles = getListFiles(cachePath);
for (File file : allFiles) {
String fileName = file.getName();
String[] fileInfo = fileName.split("\\|\\|\\|");
if (fileInfo.length != AttachmentFileObject.INFO_COUNT) {
continue;
}
int projectId = 0;
try {
projectId = Integer.parseInt(fileInfo[0]);
} catch (Exception e) {
Global.errorLog(e);
}
String name = idName.get(projectId);
if (name == null) {
continue;
}
ArrayList<File> singleProjectFiles;
if ((singleProjectFiles = data.get(name)) == null) {
singleProjectFiles = new ArrayList<>();
data.put(name, singleProjectFiles);
}
singleProjectFiles.add(file);
}
// String ss = "";
// for (String s : data.keySet()) {
// ss += s;
// }
// Log.d("", ss);
setStrings = createListData();
adapter = new LocalAdapter();
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
String item = (String) adapterView.getItemAtPosition(i);
LocalFileListActivity_.intent(LocalProjectFileActivity.this)
.title(item)
.files(data.get(item))
.startForResult(RESULT_FILE_LIST);
}
});
}
private String[] createListData() {
Set<String> keySet = data.keySet();
String[] temp = new String[keySet.size()];
temp = keySet.toArray(temp);
return temp;
}
@OnActivityResult(RESULT_FILE_LIST)
void onResultFileList(int result, Intent intent) {
String title = intent.getStringExtra(LocalFileListActivity.RESULT_INTENT_TITLE);
ArrayList<File> files = (ArrayList<File>) intent.getSerializableExtra(LocalFileListActivity.RESULT_INTENT_FILES);
if (files.isEmpty()) {
data.remove(title);
} else {
data.put(title, files);
}
setStrings = createListData();
adapter.notifyDataSetChanged();
}
public static ArrayList<File> getListFiles(Object obj) {
File directory;
if (obj instanceof File) {
directory = (File) obj;
} else {
directory = new File(obj.toString());
}
ArrayList<File> files = new ArrayList<File>();
if (directory.isFile()) {
files.add(directory);
return files;
} else if (directory.isDirectory()) {
File[] fileArr = directory.listFiles();
for (int i = 0; i < fileArr.length; i++) {
File fileOne = fileArr[i];
files.addAll(getListFiles(fileOne));
}
}
return files;
}
class LocalAdapter extends BaseAdapter {
@Override
public int getCount() {
return setStrings.length;
}
@Override
public Object getItem(int position) {
return setStrings[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
AttachmentsFolderSelectorActivity.ViewHolder holder =
AttachmentsFolderSelectorActivity.ViewHolder.instance(convertView, parent);
holder.checkBox.setVisibility(View.INVISIBLE);
holder.more.setVisibility(View.INVISIBLE);
String name = (String) getItem(position);
int count = data.get(name).size();
holder.name.setText(String.format("%s (%d)", name, count));
return holder.getRootView();
}
}
}