package info.papdt.pano.ui.fragments;
import android.app.Activity;
import android.os.AsyncTask;
import android.view.View;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import info.papdt.pano.R;
import info.papdt.pano.support.Settings;
import info.papdt.pano.ui.adapter.ImageAdapter;
import static info.papdt.pano.ui.util.UiUtility.*;
public class ImageListFragment extends BaseFragment
{
private RecyclerView mRecycler;
private List<File> mFiles = new ArrayList<>();
private ImageAdapter mAdapter;
private GridLayoutManager mManager;
private String mOptDir;
@Override
protected int getLayoutResource() {
return R.layout.image_list;
}
@Override
protected void onInflated(View v) {
mRecycler = $(v, R.id.list);
if (getActivity() != null) {
init();
}
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (mRecycler != null) {
init();
}
}
private void init() {
mAdapter = new ImageAdapter(getActivity(), mFiles);
mManager = new GridLayoutManager(getActivity(), 2);
mRecycler.setLayoutManager(mManager);
mRecycler.setAdapter(mAdapter);
Settings settings = Settings.getInstance(getActivity());
mOptDir = settings.getString(Settings.OUTPUT_DIRECTORY);
// TODO Refresh
new RefreshTask().execute();
}
private class RefreshTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
List<File> list = new ArrayList<>();
// TODO Output path should be changeable
File[] files = new File(mOptDir).listFiles();
if (files == null) files = new File[0];
for (File f : files) {
if (f.isFile() && f.getAbsolutePath().endsWith(".png")) {
list.add(f);
}
}
Collections.sort(list, new Comparator<File>() {
@Override
public int compare(File p1, File p2) {
return p1.lastModified() < p2.lastModified() ? 0 : -1;
}
});
mFiles.clear();
mFiles.addAll(list);
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
mAdapter.notifyDataSetChanged();
}
}
}