diff --git a/res/values-es/arrays.xml b/res/values-es/arrays.xml index f8a0d1c85af4a2de87df0f928e5a8389e14e50cf..47cf7031181fef1f5050ee52cd33416b6980ebfc 100644 --- a/res/values-es/arrays.xml +++ b/res/values-es/arrays.xml @@ -14,4 +14,9 @@ 3 4 + + Eliminar + Copiar + Editar + \ No newline at end of file diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 2d77e995da6aa0627900ee2c635fa4cab62a0ac1..caebd6b41d50a3ff510d49249e14dcd421f9214a 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -115,6 +115,11 @@ Eliminar Cancelar + Copiar Misión + Desea copiar la misión + Copiar + Cancelar + Resetear Config. Se dispone a resetear toda configuración y datos a los valores por defecto (Las misiones se guardarán) Resetear diff --git a/res/values-fr/arrays.xml b/res/values-fr/arrays.xml index 944e0c6e0b3f4199f29de51e5310ef39ff462c5f..f2634f2393cc9adf4e47bd018ff07fafa1d2d87d 100644 --- a/res/values-fr/arrays.xml +++ b/res/values-fr/arrays.xml @@ -14,4 +14,9 @@ 3 4 + + Enlever + Copier + Modifier + \ No newline at end of file diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index a69ea98534f159fd9f5d0e8a33f37836edec460b..13a98f6175b15aab4187b7b7f27c62d37d0f9818 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -116,6 +116,11 @@ Supprimer Annuler + Copier Mission + Voulez-vous copier la mission + Copier + Annuler + Réinitialiser Config. Vous êtes en train de réinitialiser toute configuration et données avec les valeurs par défaut (Les missions sont sauvegardés) Réinitialiser diff --git a/res/values/arrays.xml b/res/values/arrays.xml index 7a9e0f68aa121083efdaaabc76fceef227bcc0ef..bad396788f3702c8c639c033562ff6a1af6e3af7 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -14,4 +14,9 @@ 3 4 + + Remove + Copy + Edit + \ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml index 1735f4a1c221c08270e39cfef4c56de02b901262..2d358f2cc5bdd01a0ddac0990abec6314e844588 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -115,6 +115,11 @@ Delete Cancel + Copy Mission + Do you want to copy the mission + Copy + Cancel + Reset Config. You are going to reset all configurations and data to default values (Missions will be kept) Reset diff --git a/src/cs/si/stavor/dialogs/CopyMissionDialogFragment.java b/src/cs/si/stavor/dialogs/CopyMissionDialogFragment.java new file mode 100644 index 0000000000000000000000000000000000000000..8531c55bf98132afdc4774d3b309396617ac25a3 --- /dev/null +++ b/src/cs/si/stavor/dialogs/CopyMissionDialogFragment.java @@ -0,0 +1,94 @@ +package cs.si.stavor.dialogs; + +import java.io.IOException; + +import cs.si.stavor.R; +import cs.si.stavor.MainActivity; +import cs.si.stavor.StavorApplication; +import cs.si.stavor.database.SerializationUtil; +import cs.si.stavor.database.MissionReaderContract.MissionEntry; +import cs.si.stavor.mission.Mission; +import android.app.AlertDialog; +import android.app.Dialog; +import android.app.DialogFragment; +import android.content.ContentValues; +import android.content.DialogInterface; +import android.os.Bundle; + +/** + * Dialog to prevent unwilling mission removals + * @author Xavier Gibert + * + */ +public class CopyMissionDialogFragment extends DialogFragment { + private static final String ARG_NAME = "mission_name"; + private static final String ARG_ID = "mission_id"; + private static final String ARG_CLASS = "mission_class"; + + public static CopyMissionDialogFragment newInstance(int id, String name, Mission mis_class) { + CopyMissionDialogFragment fragment = new CopyMissionDialogFragment(); + Bundle args = new Bundle(); + args.putString(ARG_NAME, name); + args.putInt(ARG_ID, id); + args.putSerializable(ARG_CLASS, mis_class); + fragment.setArguments(args); + return fragment; + } + int mission_id; + Mission mission; + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + // Use the Builder class for convenient dialog construction + String mis_name = getArguments().getString(ARG_NAME); + int mis_id = getArguments().getInt(ARG_ID); + mission_id = mis_id; + mission = (Mission) getArguments().getSerializable(ARG_CLASS); + + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setTitle(getString(R.string.dialog_copy_title)) + .setMessage(getString(R.string.dialog_copy_message)+" "+mis_name+"?") + .setCancelable(true) + .setPositiveButton(getString(R.string.dialog_copy_confirm), new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + // Dummy + copyMission(); + } + + }); + builder.setNegativeButton(getString(R.string.dialog_copy_cancel), new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + // User cancelled the dialog + } + }); + // Create the AlertDialog object and return it + return builder.create(); + } + + /** + * Delete Mission from database + * @param mission_id + */ + private void copyMission() { + MainActivity act = ((MainActivity)getActivity()); + + ContentValues values = new ContentValues(); + mission.name = mission.name+"_copy"; + values.put(MissionEntry.COLUMN_NAME_NAME, mission.name); + values.put(MissionEntry.COLUMN_NAME_DESCRIPTION, mission.description); + + try { + values.put(MissionEntry.COLUMN_NAME_CLASS, SerializationUtil.serialize(mission)); + } catch (IOException e) { + e.printStackTrace(); + } + + // Insert the new row + ((StavorApplication)act.getApplication()).loader.insert( + MissionEntry.TABLE_NAME, + null, + values); + + } + +} diff --git a/src/cs/si/stavor/fragments/SimulatorFragment.java b/src/cs/si/stavor/fragments/SimulatorFragment.java index 49b016d5898272ad5b30f4fd9586ede2072eac4d..7bf982fdab69bcfa18e60ecc40e270eba7cbd2fa 100644 --- a/src/cs/si/stavor/fragments/SimulatorFragment.java +++ b/src/cs/si/stavor/fragments/SimulatorFragment.java @@ -7,6 +7,7 @@ import cs.si.stavor.app.Parameters; import cs.si.stavor.database.MissionReaderDbHelper; import cs.si.stavor.database.SerializationUtil; import cs.si.stavor.database.MissionReaderContract.MissionEntry; +import cs.si.stavor.dialogs.CopyMissionDialogFragment; import cs.si.stavor.dialogs.DeleteMissionDialogFragment; import cs.si.stavor.mission.Mission; import cs.si.stavor.mission.MissionAndId; @@ -23,7 +24,11 @@ import android.content.Loader; import android.content.SharedPreferences; import android.database.Cursor; import android.graphics.Paint; +import android.view.ContextMenu; +import android.view.ContextMenu.ContextMenuInfo; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; @@ -166,7 +171,7 @@ public final class SimulatorFragment extends Fragment implements LoaderCallbacks simulator.connect(); }else{ //Set mission - MissionAndId mis = getSelectedMission(); + MissionAndId mis = getMission(activeMissionId); if(mis!=null){ simulator.setSelectedMission(mis.mission, mis.id); simulator.connect(); @@ -225,7 +230,7 @@ public final class SimulatorFragment extends Fragment implements LoaderCallbacks }else if (activeMissionId==0 ||activeMissionId==1 ||activeMissionId==2 ||activeMissionId==3){ Toast.makeText(getActivity().getApplicationContext(), getString(R.string.sim_local_mission_not_editable), Toast.LENGTH_LONG).show(); }else{ - MissionAndId mis = getSelectedMission(); + MissionAndId mis = getMission(activeMissionId); if(mis!=null){ ((MainActivity)getActivity()).showMissionEditor(mis); }else{ @@ -244,7 +249,7 @@ public final class SimulatorFragment extends Fragment implements LoaderCallbacks * Returns the selected Mission from the database * @return */ - private MissionAndId getSelectedMission(){ + private MissionAndId getMission(int id){ String[] projection = { MissionEntry._ID, MissionEntry.COLUMN_NAME_CLASS @@ -254,7 +259,7 @@ public final class SimulatorFragment extends Fragment implements LoaderCallbacks MissionEntry.TABLE_NAME, // The table to query projection, // The columns to return MissionEntry._ID+" = ?", // The columns for the WHERE clause - new String[]{Integer.toString(activeMissionId)}, // The values for the WHERE clause + new String[]{Integer.toString(id)}, // The values for the WHERE clause "", // don't group the rows "", // don't filter by row groups null // The sort order @@ -284,6 +289,17 @@ public final class SimulatorFragment extends Fragment implements LoaderCallbacks newFragment.setCancelable(true); newFragment.show(getFragmentManager(), "delete"); } + + /** + * Shows the copy mission confirmation dialog + * @param id Mission id + * @param name Mission name + */ + public void showCopyMissionDialog(int id, String name, Mission mis) { + DialogFragment newFragment = CopyMissionDialogFragment.newInstance(id, name, mis); + newFragment.setCancelable(true); + newFragment.show(getFragmentManager(), "copy"); + } /** * Change the text color of the missions in list that is selected @@ -400,4 +416,60 @@ public final class SimulatorFragment extends Fragment implements LoaderCallbacks adapter.changeCursor(null); } + @Override + public void onCreateContextMenu(ContextMenu menu, View v, + ContextMenuInfo menuInfo) { + if (v.getId()==R.id.listView1) { + AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo; + String header = ((TextView)((ListView)v).getChildAt(info.position).findViewById(R.id.textViewMission)).getText().toString(); + menu.setHeaderTitle(header); + String[] menuItems = getResources().getStringArray(R.array.missions_menu); + for (int i = 0; i