r34 - in trunk: res/values res/values-fr src/fr/ifremer/wlo src/fr/ifremer/wlo/measurement src/fr/ifremer/wlo/storage
Author: kmorin Date: 2014-01-28 17:18:29 +0100 (Tue, 28 Jan 2014) New Revision: 34 Url: http://forge.codelutin.com/projects/wlo/repository/revisions/34 Log: fixes #4251 Pouvoir supprimer une ?\195?\169tape et ses fils de fait Modified: trunk/res/values-fr/strings.xml trunk/res/values/strings.xml trunk/src/fr/ifremer/wlo/WloBaseListActivity.java trunk/src/fr/ifremer/wlo/measurement/LogsFragment.java trunk/src/fr/ifremer/wlo/storage/WloSqlOpenHelper.java Modified: trunk/res/values/strings.xml =================================================================== --- trunk/res/values/strings.xml 2014-01-28 15:00:21 UTC (rev 33) +++ trunk/res/values/strings.xml 2014-01-28 16:18:29 UTC (rev 34) @@ -22,6 +22,8 @@ <string name="no">No</string> <string name="required_field_error_message">Required field</string> <string name="one_required_field_error_message">At least one these fields is required</string> + <string name="delete">Delete</string> + <string name="edit">Edit</string> <!-- BigFin communication service --> <string name="bigfin_no_ichtyometer_connected_title">No ichtyometer connected</string> @@ -52,9 +54,10 @@ <string name="measurement_graph_title">Observations</string> - <string name="delete">Delete</string> - <string name="deletion_confirmation_title">Delete an input</string> - <string name="deletion_confirmation_message">Êtes vous sûr de vouloir\nsupprimer la saisie\n%s ?</string> + <string name="deletion">Delete</string> + <string name="input_deletion_confirmation_title">Delete an input</string> + <string name="input_deletion_confirmation_message">Are you sure you want\nto delete the input\n%s ?</string> + <string name="item_deletion_confirmation_message">Are you sure you want\nto delete the item\n%s ?</string> <string name="fulltime_format">%1$tH:%1$tM:%1$tS</string> <string name="time_format">%1$tH:%1$tM</string> Modified: trunk/res/values-fr/strings.xml =================================================================== --- trunk/res/values-fr/strings.xml 2014-01-28 15:00:21 UTC (rev 33) +++ trunk/res/values-fr/strings.xml 2014-01-28 16:18:29 UTC (rev 34) @@ -22,6 +22,8 @@ <string name="no">Non</string> <string name="required_field_error_message">Champs obligatoire</string> <string name="one_required_field_error_message">Au moins un de ces champs doit être saisi</string> + <string name="delete">Supprimer</string> + <string name="edit">Éditer</string> <!-- BigFin communication service --> <string name="bigfin_no_ichtyometer_connected_title">Aucun ichtyomètre connecté</string> @@ -51,9 +53,10 @@ <string name="measurement_graph_title">Observations</string> - <string name="delete">Suppression</string> - <string name="deletion_confirmation_title">Supprimer une mesure</string> - <string name="deletion_confirmation_message">Êtes vous sûr de vouloir\nsupprimer la saisie\n%s ?</string> + <string name="deletion">Suppression</string> + <string name="input_deletion_confirmation_title">Supprimer une mesure</string> + <string name="input_deletion_confirmation_message">Êtes vous sûr de vouloir\nsupprimer la saisie\n%s ?</string> + <string name="item_deletion_confirmation_message">Êtes vous sûr de vouloir\nsupprimer l\'élément\n%s ?</string> <string name="undefined">Non défini</string> Modified: trunk/src/fr/ifremer/wlo/WloBaseListActivity.java =================================================================== --- trunk/src/fr/ifremer/wlo/WloBaseListActivity.java 2014-01-28 15:00:21 UTC (rev 33) +++ trunk/src/fr/ifremer/wlo/WloBaseListActivity.java 2014-01-28 16:18:29 UTC (rev 34) @@ -39,12 +39,15 @@ * #L% */ +import android.app.AlertDialog; +import android.content.DialogInterface; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.os.Handler; import android.support.v4.widget.SimpleCursorAdapter; import android.util.Log; +import android.view.ContextMenu; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; @@ -55,6 +58,7 @@ import fr.ifremer.wlo.models.BaseModel; import fr.ifremer.wlo.models.HierarchicalModel; import fr.ifremer.wlo.storage.WloSqlOpenHelper; +import fr.ifremer.wlo.utils.UIUtils; import fr.ifremer.wlo.utils.WloItemListViewBinder; /** @@ -209,7 +213,7 @@ * @author kmorin <kmorin@codelutin.com> * @since 0.1 */ -public abstract class WloBaseListActivity<M extends BaseModel> extends WloBaseActivity implements AdapterView.OnItemLongClickListener { +public abstract class WloBaseListActivity<M extends BaseModel> extends WloBaseActivity { private static final String TAG = "WloBaseListActivity"; @@ -276,7 +280,7 @@ adapter.setViewBinder(getAdapterBinder()); setListAdapter(adapter); - getListView().setOnItemLongClickListener(this); + registerForContextMenu(mList); } @Override @@ -354,13 +358,49 @@ } @Override - public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { - M model = createNewModel(parent, position); + public void onCreateContextMenu(ContextMenu menu, View v, + ContextMenu.ContextMenuInfo menuInfo) { + if (mList.equals(v)) { + int[] menuItems = new int[]{R.string.edit, R.string.delete}; + for (int i = 0; i<menuItems.length; i++) { + menu.add(Menu.NONE, i, i, menuItems[i]); + } + } + } - Log.d(TAG, model.toString(this) + " long clicked"); - Intent intent = new Intent(this, getEditionActivity()); - intent.putExtra(WloModelEditionActivity.INTENT_EXTRA_MODEL, model); - startActivity(intent); + @Override + public boolean onContextItemSelected(MenuItem item) { + AdapterView.AdapterContextMenuInfo info = + (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); + + AdapterView<?> parent = (AdapterView<?>) info.targetView.getParent(); + final M model = createNewModel(parent, info.position); + + switch (item.getItemId()) { + case 0: + Intent intent = new Intent(this, getEditionActivity()); + intent.putExtra(WloModelEditionActivity.INTENT_EXTRA_MODEL, model); + startActivity(intent); + break; + + case 1: + new AlertDialog.Builder(this).setTitle(R.string.deletion) + .setMessage(getString(R.string.item_deletion_confirmation_message, model.toString(this))) + .setPositiveButton(R.string.delete, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + WloSqlOpenHelper soh = new WloSqlOpenHelper(WloBaseListActivity.this); + soh.deleteData(model); + soh.close(); + Cursor cursor = getAllData(); + adapter.swapCursor(cursor); + } + }) + .setNegativeButton(android.R.string.cancel, UIUtils.getCancelClickListener()) + .create() + .show(); + + break; + } return true; } Modified: trunk/src/fr/ifremer/wlo/measurement/LogsFragment.java =================================================================== --- trunk/src/fr/ifremer/wlo/measurement/LogsFragment.java 2014-01-28 15:00:21 UTC (rev 33) +++ trunk/src/fr/ifremer/wlo/measurement/LogsFragment.java 2014-01-28 16:18:29 UTC (rev 34) @@ -3,8 +3,8 @@ /* * #%L * WLO - * $Id:$ - * $HeadURL:$ + * $Id$ + * $HeadURL$ * %% * Copyright (C) 2013 - 2014 Ifremer * %% @@ -36,7 +36,6 @@ import android.widget.ArrayAdapter; import android.widget.ListView; import com.google.common.base.Function; -import com.google.common.base.Preconditions; import com.google.common.collect.Lists; import fr.ifremer.wlo.R; import fr.ifremer.wlo.models.MeasurementModel; @@ -48,7 +47,6 @@ import org.apache.commons.lang3.StringUtils; import java.util.Comparator; -import java.util.Date; import java.util.List; /** @@ -102,7 +100,7 @@ }); dialogBuilder = new AlertDialog.Builder(activity) - .setTitle(R.string.deletion_confirmation_title) + .setTitle(R.string.input_deletion_confirmation_title) .setNegativeButton(android.R.string.cancel, UIUtils.getCancelClickListener()); // Find and set up the ListView for paired devices @@ -113,7 +111,7 @@ public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { final MeasurementModel measurement = (MeasurementModel) parent.getItemAtPosition(position); - dialogBuilder.setMessage(getString(R.string.deletion_confirmation_message, + dialogBuilder.setMessage(getString(R.string.input_deletion_confirmation_message, measurement.toString(getActivity(), measurements.getPrecision()))) .setPositiveButton(R.string.delete, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { Modified: trunk/src/fr/ifremer/wlo/storage/WloSqlOpenHelper.java =================================================================== --- trunk/src/fr/ifremer/wlo/storage/WloSqlOpenHelper.java 2014-01-28 15:00:21 UTC (rev 33) +++ trunk/src/fr/ifremer/wlo/storage/WloSqlOpenHelper.java 2014-01-28 16:18:29 UTC (rev 34) @@ -66,7 +66,7 @@ private static final String TAG = "WloOpenHelper"; public static final String DATABASE_NAME = "wlo.db"; - public static final int DATABASE_VERSION = 10; + public static final int DATABASE_VERSION = 13; public static final String TEXT_TYPE = " TEXT"; public static final String BIGINT_TYPE = " BIGINT"; @@ -95,7 +95,7 @@ LocationModel.COLUMN_LOCATION + TEXT_TYPE + NOT_NULL + COMMA_SEP + LocationModel.COLUMN_CONTEXT_ID + TEXT_TYPE + NOT_NULL + COMMA_SEP + "FOREIGN KEY(" + LocationModel.COLUMN_CONTEXT_ID + ") REFERENCES " + - ContextModel.TABLE_NAME + "(" + ContextModel._ID + ")" + COMMA_SEP + + ContextModel.TABLE_NAME + "(" + ContextModel._ID + ") ON DELETE CASCADE" + COMMA_SEP + "FOREIGN KEY(" + LocationModel.COLUMN_LOCATION + ") REFERENCES " + Location.TABLE_NAME + "(" + Location._ID + ")" + " )"; @@ -113,7 +113,7 @@ VesselModel.COLUMN_LANDING_LOCATION + TEXT_TYPE + COMMA_SEP + VesselModel.COLUMN_LOCATION_ID + TEXT_TYPE + NOT_NULL + COMMA_SEP + "FOREIGN KEY(" + VesselModel.COLUMN_LOCATION_ID + ") REFERENCES " + - LocationModel.TABLE_NAME + "(" + LocationModel._ID + ")" + COMMA_SEP + + LocationModel.TABLE_NAME + "(" + LocationModel._ID + ") ON DELETE CASCADE" + COMMA_SEP + "FOREIGN KEY(" + VesselModel.COLUMN_LANDING_LOCATION + ") REFERENCES " + Location.TABLE_NAME + "(" + Location._ID + ")" + " )"; @@ -130,7 +130,7 @@ MetierModel.COLUMN_SAMPLE_ROW_CODE + TEXT_TYPE + COMMA_SEP + MetierModel.COLUMN_VESSEL_ID + TEXT_TYPE + NOT_NULL + COMMA_SEP + "FOREIGN KEY(" + MetierModel.COLUMN_VESSEL_ID + ") REFERENCES " + - VesselModel.TABLE_NAME + "(" + VesselModel._ID + ")" + COMMA_SEP + + VesselModel.TABLE_NAME + "(" + VesselModel._ID + ") ON DELETE CASCADE" + COMMA_SEP + "FOREIGN KEY(" + MetierModel.COLUMN_GEAR_SPECIES + ") REFERENCES " + Metier.TABLE_NAME + "(" + Metier._ID + ")" + " )"; @@ -151,7 +151,7 @@ CommercialSpeciesModel.COLUMN_PRESENTATION + TEXT_TYPE + COMMA_SEP + CommercialSpeciesModel.COLUMN_METIER_ID + TEXT_TYPE + NOT_NULL + COMMA_SEP + "FOREIGN KEY(" + CommercialSpeciesModel.COLUMN_METIER_ID + ") REFERENCES " + - MetierModel.TABLE_NAME + "(" + MetierModel._ID + ")" + COMMA_SEP + + MetierModel.TABLE_NAME + "(" + MetierModel._ID + ") ON DELETE CASCADE" + COMMA_SEP + "FOREIGN KEY(" + CommercialSpeciesModel.COLUMN_FAO_CODE + ") REFERENCES " + CommercialSpecies.TABLE_NAME + "(" + CommercialSpecies._ID + ")" + COMMA_SEP + "FOREIGN KEY(" + CommercialSpeciesModel.COLUMN_MEASUREMENT_METHOD + ") REFERENCES " + @@ -173,7 +173,7 @@ ScientificSpeciesModel.COLUMN_TAKING_ACTIVATION + BYTE_TYPE + COMMA_SEP + ScientificSpeciesModel.COLUMN_COMMERCIAL_SPECIES_ID + TEXT_TYPE + NOT_NULL + COMMA_SEP + "FOREIGN KEY(" + ScientificSpeciesModel.COLUMN_COMMERCIAL_SPECIES_ID + ") REFERENCES " + - CommercialSpeciesModel.TABLE_NAME + "(" + CommercialSpeciesModel._ID + ")" + COMMA_SEP + + CommercialSpeciesModel.TABLE_NAME + "(" + CommercialSpeciesModel._ID + ") ON DELETE CASCADE" + COMMA_SEP + "FOREIGN KEY(" + ScientificSpeciesModel.COLUMN_NAME + ") REFERENCES " + ScientificSpecies.TABLE_NAME + "(" + ScientificSpecies._ID + ")" + " )"; @@ -192,7 +192,7 @@ MeasurementModel.COLUMN_CATEGORY_3 + TEXT_TYPE + COMMA_SEP + MeasurementModel.COLUMN_SCIENTIFIC_SPECIES_ID + TEXT_TYPE + NOT_NULL + COMMA_SEP + "FOREIGN KEY(" + MeasurementModel.COLUMN_SCIENTIFIC_SPECIES_ID + ") REFERENCES " + - ScientificSpeciesModel.TABLE_NAME + "(" + ScientificSpeciesModel._ID + ")" + + ScientificSpeciesModel.TABLE_NAME + "(" + ScientificSpeciesModel._ID + ") ON DELETE CASCADE" + " )"; protected static final String SQL_DELETE_MEASUREMENTS = @@ -399,6 +399,15 @@ } @Override + public void onOpen(SQLiteDatabase db) { + super.onOpen(db); + if (!db.isReadOnly()) { + // Enable foreign key constraints + db.execSQL("PRAGMA foreign_keys=ON;"); + } + } + + @Override public synchronized void close() { super.close(); getReadableDatabase().close(); @@ -619,6 +628,15 @@ db.endTransaction(); } + public <M extends BaseModel> void deleteData(M model) { + Preconditions.checkNotNull(model); + if (model.isNew()) { + return; + } + SQLiteDatabase db = getWritableDatabase(); + db.delete(model.getTableName(), BaseModel._ID + " = ?", new String[]{ model.getId() }); + } + public static <E> List<E> transformCursorIntoCollection(Cursor cursor, Function<Cursor, E> function) {
participants (1)
-
kmorin@users.forge.codelutin.com