package app.create.rpg;
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.app.ListFragment;
import android.widget.ListView;
import android.widget.Toast;
public class FragmentFileList extends ListFragment {
protected String mDirectoryPath, mFilters[];
@Override
public void onCreate(Bundle state) {
super.onCreate(state);
Bundle args = getArguments();
if ((mDirectoryPath = args.getString("path")) == null)
mDirectoryPath = Environment.getExternalStorageDirectory().getAbsolutePath();
mFilters = args.getStringArray("filters");
}
@Override
public void onActivityCreated(Bundle state) {
super.onActivityCreated(state);
if (state != null)
mDirectoryPath = state.getString("path");
refreshDir (mDirectoryPath);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("path", mDirectoryPath);
}
protected void refreshDir(String newDir) {
File folder = new File(newDir);
if (!folder.isDirectory())
return;
try {
File[] files = folder.listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
if (file.isDirectory() || mFilters == null)
return true;
for (String filter : mFilters) {
if (file.getName().endsWith("."
+ filter.toLowerCase(Locale.ENGLISH))) {
return true;
}
}
return false;
}
});
List<File> fileList = new ArrayList<File>(), folderList = new ArrayList<File>();
for (File file : files) {
if (file.isDirectory()) {
folderList.add(file);
} else {
fileList.add(file);
}
}
Collections.sort(fileList);
Collections.sort(folderList);
// setTitle(mDirectoryPath = newDir);
final ListView listView = getListView();
FileListAdapter adapter = (FileListAdapter) listView.getAdapter();
if (adapter == null) {
List<File> totalList = new ArrayList<File>(folderList);
totalList.addAll(fileList);
listView.setAdapter(new FileListAdapter(getActivity(), totalList));
} else {
adapter.setNotifyOnChange(false);
adapter.clear();
for (File f : folderList)
adapter.add(f);
for (File f : fileList)
adapter.add(f);
adapter.notifyDataSetChanged();
}
} catch (Exception e) {
Toast.makeText(getActivity(), e.toString(), Toast.LENGTH_SHORT).show();
}
}
}