package menion.android.whereyougo.gui.dialogs; import java.io.File; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Vector; import locus.api.objects.extra.Location; import menion.android.whereyougo.Main; import menion.android.whereyougo.R; import menion.android.whereyougo.WUI; import menion.android.whereyougo.gui.extension.DataInfo; import menion.android.whereyougo.gui.extension.IconedListAdapter; import menion.android.whereyougo.gui.extension.UtilsGUI; import menion.android.whereyougo.hardware.location.LocationState; import menion.android.whereyougo.utils.A; import menion.android.whereyougo.utils.Images; import menion.android.whereyougo.utils.Logger; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import cz.matejcik.openwig.formats.CartridgeFile; public class DialogChooseCartridge extends DialogFragmentEx { private static final String TAG = "DialogChooseCartridge"; private Vector<CartridgeFile> cartridgeFiles; public DialogChooseCartridge() { super(); } public void setParams(Vector<CartridgeFile> cartridgeFiles) { this.cartridgeFiles = cartridgeFiles; } @Override public Dialog createDialog(Bundle savedInstanceState) { try { // sort cartridges final Location actLoc = LocationState.getLocation(); final Location loc1 = new Location(TAG); final Location loc2 = new Location(TAG); Collections.sort(cartridgeFiles, new Comparator<CartridgeFile>() { @Override public int compare(CartridgeFile object1, CartridgeFile object2) { loc1.setLatitude(object1.latitude); loc1.setLongitude(object1.longitude); loc2.setLatitude(object2.latitude); loc2.setLongitude(object2.longitude); return (int) (actLoc.distanceTo(loc1) - actLoc.distanceTo(loc2)); } }); // prepare list ArrayList<DataInfo> data = new ArrayList<DataInfo>(); for (int i = 0; i < cartridgeFiles.size(); i++) { CartridgeFile file = cartridgeFiles.get(i); byte[] iconData = file.getFile(file.iconId); Bitmap icon; try { icon = BitmapFactory.decodeByteArray(iconData, 0, iconData.length); } catch (Exception e) { icon = Images.getImageB(R.drawable.icon_gc_wherigo); } DataInfo di = new DataInfo(file.name, file.type + ", " + file.author + ", " + file.version, icon); di.value01 = file.latitude; di.value02 = file.longitude; di.setDistAzi(actLoc); data.add(di); } // complete adapter IconedListAdapter adapter = new IconedListAdapter(A.getMain(), data, null); adapter.setTextView02Visible(View.VISIBLE, false); // create listView ListView lv = UtilsGUI.createListView(getActivity(), false, data); // set click listener lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { itemClicked(position); } }); // construct dialog return new AlertDialog.Builder(getActivity()). setTitle(R.string.choose_cartridge). setIcon(R.drawable.ic_title_logo). setView(lv). setNeutralButton(R.string.close, null). create(); } catch (Exception e) { Logger.e(TAG, "createDialog()", e); } return null; } private void itemClicked(int position) { try { Main.cartridgeFile = cartridgeFiles.get(position); Main.selectedFile = Main.cartridgeFile.filename; if (Main.cartridgeFile.getSavegame().exists()) { UtilsGUI.showDialogQuestion(getActivity(), R.string.resume_previous_cartridge, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int btn) { File file = new File(Main.getSelectedFile().substring( 0, Main.getSelectedFile().length() - 3) + "gwl"); FileOutputStream fos = null; try { if (!file.exists()) file.createNewFile(); fos = new FileOutputStream(file); } catch (Exception e) { Logger.e(TAG, "onResume() - create empty saveGame file", e); } Main.restoreCartridge(fos); } }, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int btn) { Main.wui.showScreen(WUI.SCREEN_CART_DETAIL, null); try { Main.getSaveFile().delete(); } catch (Exception e) { Logger.e(TAG, "onCreate() - deleteSyncFile", e); } } }); } else { Main.wui.showScreen(WUI.SCREEN_CART_DETAIL, null); } } catch (Exception e) { Logger.e(TAG, "onCreate()", e); } dismiss(); } }