diff --git a/android_app/app/src/main/java/com/health/openscale/core/OpenScale.java b/android_app/app/src/main/java/com/health/openscale/core/OpenScale.java index c7542cf7..be55a964 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/OpenScale.java +++ b/android_app/app/src/main/java/com/health/openscale/core/OpenScale.java @@ -210,14 +210,15 @@ public class OpenScale { scaleMeasurement.setFat(fatMetric.getFat(getScaleUser(scaleMeasurement.getUserId()), scaleMeasurement)); } - if (measurementDAO.get(scaleMeasurement.getDateTime(), scaleMeasurement.getUserId()) == null) { - measurementDAO.insert(scaleMeasurement); + if (measurementDAO.insert(scaleMeasurement) != -1) { ScaleUser scaleUser = getScaleUser(scaleMeasurement.getUserId()); String infoText = String.format(context.getString(R.string.info_new_data_added), scaleMeasurement.getConvertedWeight(scaleUser.getScaleUnit()), scaleUser.UNIT_STRING[scaleUser.getScaleUnit()], dateTimeFormat.format(scaleMeasurement.getDateTime()), scaleUser.getUserName()); Toast.makeText(context, infoText, Toast.LENGTH_LONG).show(); alarmHandler.entryChanged(context, scaleMeasurement); updateScaleData(); + } else { + Toast.makeText(context, context.getString(R.string.info_new_data_duplicated), Toast.LENGTH_LONG).show(); } return scaleMeasurement.getUserId(); diff --git a/android_app/app/src/main/java/com/health/openscale/core/database/ScaleMeasurementDAO.java b/android_app/app/src/main/java/com/health/openscale/core/database/ScaleMeasurementDAO.java index bb550dd2..e91a8022 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/database/ScaleMeasurementDAO.java +++ b/android_app/app/src/main/java/com/health/openscale/core/database/ScaleMeasurementDAO.java @@ -18,6 +18,7 @@ package com.health.openscale.core.database; import android.arch.persistence.room.Dao; import android.arch.persistence.room.Insert; +import android.arch.persistence.room.OnConflictStrategy; import android.arch.persistence.room.Query; import android.arch.persistence.room.Update; @@ -46,10 +47,10 @@ public interface ScaleMeasurementDAO { @Query("SELECT * FROM scaleMeasurements WHERE datetime >= :startYear AND datetime < :endYear AND userId = :userId AND enabled = 1 ORDER BY datetime DESC") List getAllInRange(Date startYear, Date endYear, int userId); - @Insert - void insert(ScaleMeasurement measurement); + @Insert (onConflict = OnConflictStrategy.IGNORE) + long insert(ScaleMeasurement measurement); - @Insert + @Insert (onConflict = OnConflictStrategy.IGNORE) void insertAll(List measurementList); @Update diff --git a/android_app/app/src/main/java/com/health/openscale/gui/activities/DataEntryActivity.java b/android_app/app/src/main/java/com/health/openscale/gui/activities/DataEntryActivity.java index 49407130..bddd5330 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/activities/DataEntryActivity.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/activities/DataEntryActivity.java @@ -298,7 +298,8 @@ public class DataEntryActivity extends Activity { cal.setTime(dateMeasurement.getDateTime()); cal.set(Calendar.HOUR_OF_DAY, time.get(Calendar.HOUR_OF_DAY)); cal.set(Calendar.MINUTE, time.get(Calendar.MINUTE)); - cal.set(Calendar.SECOND, time.get(Calendar.SECOND)); + cal.set(Calendar.SECOND, 0); + cal.set(Calendar.MILLISECOND, 0); ScaleMeasurement scaleMeasurement = new ScaleMeasurement(); diff --git a/android_app/app/src/main/java/com/health/openscale/junit/DatabaseTest.java b/android_app/app/src/main/java/com/health/openscale/junit/DatabaseTest.java index cbf834c7..6d926d39 100644 --- a/android_app/app/src/main/java/com/health/openscale/junit/DatabaseTest.java +++ b/android_app/app/src/main/java/com/health/openscale/junit/DatabaseTest.java @@ -17,7 +17,6 @@ package com.health.openscale.junit; import android.arch.persistence.room.Room; import android.content.Context; -import android.database.sqlite.SQLiteConstraintException; import android.support.test.InstrumentationRegistry; import android.support.test.runner.AndroidJUnit4; @@ -40,7 +39,6 @@ import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; // run this test as an Android instrumented test! @RunWith(AndroidJUnit4.class) @@ -179,16 +177,8 @@ public class DatabaseTest { assertEquals(25.0f, measurementDAO.getAll(user2).get(0).getWeight(), DELTA); // don't allow insertion with the same date - if (measurementDAO.get(measurement11.getDateTime(), user1) == null) { - measurementDAO.insert(measurement11); - } - assertEquals(3, measurementDAO.getAll(user1).size()); - - // test if SQLiteConstraintException exception is thrown if we want to try to insert a measurement with the same date - try { - measurementDAO.insert(measurement11); - fail("SQLiteConstraintException was not thrown while inserting measurement with the same date"); - } catch (SQLiteConstraintException e) {} + long id = measurementDAO.insert(measurement11); + assertEquals(-1 , id); assertEquals(3, measurementDAO.getAll(user1).size()); // test get(datetime) method diff --git a/android_app/app/src/main/res/values-de/strings.xml b/android_app/app/src/main/res/values-de/strings.xml index 419fa97a..b6d6b07e 100644 --- a/android_app/app/src/main/res/values-de/strings.xml +++ b/android_app/app/src/main/res/values-de/strings.xml @@ -159,4 +159,5 @@ öffnen schließen Kein Bluetooth Gerät ausgewählt + Messung mit gleichen Datum und Uhrzeit exisitiert bereits \ No newline at end of file diff --git a/android_app/app/src/main/res/values/strings.xml b/android_app/app/src/main/res/values/strings.xml index 3cddb676..718796a4 100644 --- a/android_app/app/src/main/res/values/strings.xml +++ b/android_app/app/src/main/res/values/strings.xml @@ -109,6 +109,7 @@ Initialize Bluetooth device Bluetooth has an unexpected error %1$.2f%2$s [%3$s] to %4$s added + measurement with the same date and time already exist Enter your name No user exists. Please create a new user in the settings.