2012-10-22 04:25:59 +00:00
|
|
|
package com.froop.app.kegs;
|
|
|
|
|
|
|
|
import android.app.AlertDialog;
|
|
|
|
import android.app.Dialog;
|
|
|
|
import android.content.Context;
|
|
|
|
import android.content.DialogInterface;
|
|
|
|
import android.os.Bundle;
|
|
|
|
import android.util.Log;
|
|
|
|
import android.view.LayoutInflater;
|
|
|
|
import android.view.View;
|
|
|
|
import android.view.ViewGroup;
|
|
|
|
import android.widget.BaseAdapter;
|
|
|
|
import android.widget.ImageView;
|
|
|
|
import android.widget.TextView;
|
|
|
|
|
2012-10-24 05:25:10 +00:00
|
|
|
import com.actionbarsherlock.app.SherlockDialogFragment;
|
2012-10-22 04:25:59 +00:00
|
|
|
|
2012-12-20 21:40:35 +00:00
|
|
|
import java.io.File;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.Collections;
|
|
|
|
|
2012-10-24 05:25:10 +00:00
|
|
|
public class DiskImageFragment extends SherlockDialogFragment {
|
2012-12-20 21:40:35 +00:00
|
|
|
private ArrayList<DiskImage> mFoundImages = new ArrayList<DiskImage>();
|
|
|
|
|
|
|
|
// TODO: This should be the title name, and then we should index to it.
|
|
|
|
private static int mLastSelected = -1;
|
|
|
|
|
2012-12-20 22:34:14 +00:00
|
|
|
// DiskImage.BOOT, DiskImage.ASK, etc.
|
|
|
|
private final int mDiskImageAction;
|
|
|
|
|
|
|
|
public DiskImageFragment(final ConfigFile config, int image_action) {
|
2012-12-20 21:40:35 +00:00
|
|
|
super();
|
|
|
|
|
2012-12-20 22:34:14 +00:00
|
|
|
mDiskImageAction = image_action;
|
|
|
|
|
2012-12-20 21:40:35 +00:00
|
|
|
// NOTE: We scan the directories in the UI thread before displaying
|
|
|
|
// the dialog. The user is waiting, but considering this is just
|
|
|
|
// peeking at the directory listing on local disk it should be quick.
|
|
|
|
// (less than 500ms)
|
|
|
|
|
|
|
|
// Also, we scan each time the dialog is displayed, in case the
|
|
|
|
// user adds files in the mean time. If we wanted to be fancy,
|
|
|
|
// we could use a special adapter, rescan every second, invalidate
|
|
|
|
// the list, etc.
|
|
|
|
updateFoundImages(config);
|
|
|
|
}
|
|
|
|
|
|
|
|
private void updateFoundImages(final ConfigFile config) {
|
|
|
|
String[] dirs = config.getAllImageDirs();
|
|
|
|
for (String dir : dirs) {
|
|
|
|
String[] files = new File(dir).list();
|
|
|
|
if (files != null) {
|
|
|
|
for (String filename : files) {
|
|
|
|
if (!filename.startsWith(".") && DiskImage.isDiskImageFilename(filename)) {
|
|
|
|
final DiskImage image = DiskImage.fromPath(dir + "/" + filename);
|
|
|
|
if (image != null) {
|
|
|
|
mFoundImages.add(image);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Collections.sort(mFoundImages);
|
|
|
|
}
|
2012-10-22 04:25:59 +00:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
2012-12-20 21:40:35 +00:00
|
|
|
final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
2012-10-22 04:25:59 +00:00
|
|
|
|
|
|
|
builder.setTitle(R.string.diskimage_title);
|
2012-12-20 21:40:35 +00:00
|
|
|
final DiskImageAdapter items = new DiskImageAdapter(getActivity());
|
|
|
|
builder.setSingleChoiceItems(items, mLastSelected, new DialogInterface.OnClickListener() {
|
2012-10-22 04:25:59 +00:00
|
|
|
public void onClick(DialogInterface dialog, int item) {
|
|
|
|
dismiss();
|
2012-12-20 21:40:35 +00:00
|
|
|
mLastSelected = item;
|
|
|
|
DiskImage image = mFoundImages.get(item);
|
2012-10-28 07:14:52 +00:00
|
|
|
if (image != null) {
|
2012-12-20 22:34:14 +00:00
|
|
|
image.action = mDiskImageAction;
|
2012-11-05 05:22:27 +00:00
|
|
|
((KegsMain)getActivity()).prepareDiskImage(image);
|
2012-10-22 04:25:59 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
2012-12-20 21:40:35 +00:00
|
|
|
builder.setNegativeButton(R.string.dialog_cancel,
|
|
|
|
new DialogInterface.OnClickListener() {
|
|
|
|
public void onClick(DialogInterface dialog, int button) {
|
|
|
|
dismiss();
|
|
|
|
}
|
|
|
|
});
|
2012-10-22 04:25:59 +00:00
|
|
|
final AlertDialog dialog = builder.create();
|
|
|
|
return dialog;
|
|
|
|
}
|
2012-12-20 21:40:35 +00:00
|
|
|
|
|
|
|
|
|
|
|
// This whole adapter is just so that we can try using custom views,
|
|
|
|
// or use isEnabled()==false to create a separator line in the ListView.
|
|
|
|
public class DiskImageAdapter extends BaseAdapter {
|
|
|
|
private LayoutInflater mInflater;
|
|
|
|
|
|
|
|
public DiskImageAdapter(Context context) {
|
|
|
|
mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
|
|
|
}
|
|
|
|
|
|
|
|
public Object getItem(int pos) {
|
|
|
|
return pos;
|
|
|
|
}
|
|
|
|
|
|
|
|
public long getItemId(int pos) {
|
|
|
|
return pos;
|
|
|
|
}
|
|
|
|
|
|
|
|
public int getCount() {
|
|
|
|
return mFoundImages.size();
|
|
|
|
}
|
|
|
|
|
|
|
|
public View getView(int pos, View convertView, ViewGroup parent) {
|
|
|
|
if (convertView == null) {
|
|
|
|
convertView = mInflater.inflate(android.R.layout.simple_list_item_1, parent, false);
|
|
|
|
}
|
|
|
|
int item = pos; // BUG: should be getItem(pos)
|
|
|
|
String title = mFoundImages.get(item).getTitle();
|
|
|
|
((TextView)(convertView.findViewById(android.R.id.text1))).setText(title);
|
|
|
|
return convertView;
|
|
|
|
}
|
|
|
|
}
|
2012-10-22 04:25:59 +00:00
|
|
|
}
|