mirror of
https://github.com/oliexdev/openScale.git
synced 2025-08-26 09:44:31 +02:00
don't allow to add a duplicated measurement with the exact same date and time.
This commit is contained in:
@@ -210,14 +210,15 @@ public class OpenScale {
|
|||||||
scaleMeasurement.setFat(fatMetric.getFat(getScaleUser(scaleMeasurement.getUserId()), scaleMeasurement));
|
scaleMeasurement.setFat(fatMetric.getFat(getScaleUser(scaleMeasurement.getUserId()), scaleMeasurement));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (measurementDAO.get(scaleMeasurement.getDateTime(), scaleMeasurement.getUserId()) == null) {
|
if (measurementDAO.insert(scaleMeasurement) != -1) {
|
||||||
measurementDAO.insert(scaleMeasurement);
|
|
||||||
ScaleUser scaleUser = getScaleUser(scaleMeasurement.getUserId());
|
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());
|
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();
|
Toast.makeText(context, infoText, Toast.LENGTH_LONG).show();
|
||||||
alarmHandler.entryChanged(context, scaleMeasurement);
|
alarmHandler.entryChanged(context, scaleMeasurement);
|
||||||
updateScaleData();
|
updateScaleData();
|
||||||
|
} else {
|
||||||
|
Toast.makeText(context, context.getString(R.string.info_new_data_duplicated), Toast.LENGTH_LONG).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
return scaleMeasurement.getUserId();
|
return scaleMeasurement.getUserId();
|
||||||
|
@@ -18,6 +18,7 @@ package com.health.openscale.core.database;
|
|||||||
|
|
||||||
import android.arch.persistence.room.Dao;
|
import android.arch.persistence.room.Dao;
|
||||||
import android.arch.persistence.room.Insert;
|
import android.arch.persistence.room.Insert;
|
||||||
|
import android.arch.persistence.room.OnConflictStrategy;
|
||||||
import android.arch.persistence.room.Query;
|
import android.arch.persistence.room.Query;
|
||||||
import android.arch.persistence.room.Update;
|
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")
|
@Query("SELECT * FROM scaleMeasurements WHERE datetime >= :startYear AND datetime < :endYear AND userId = :userId AND enabled = 1 ORDER BY datetime DESC")
|
||||||
List<ScaleMeasurement> getAllInRange(Date startYear, Date endYear, int userId);
|
List<ScaleMeasurement> getAllInRange(Date startYear, Date endYear, int userId);
|
||||||
|
|
||||||
@Insert
|
@Insert (onConflict = OnConflictStrategy.IGNORE)
|
||||||
void insert(ScaleMeasurement measurement);
|
long insert(ScaleMeasurement measurement);
|
||||||
|
|
||||||
@Insert
|
@Insert (onConflict = OnConflictStrategy.IGNORE)
|
||||||
void insertAll(List<ScaleMeasurement> measurementList);
|
void insertAll(List<ScaleMeasurement> measurementList);
|
||||||
|
|
||||||
@Update
|
@Update
|
||||||
|
@@ -298,7 +298,8 @@ public class DataEntryActivity extends Activity {
|
|||||||
cal.setTime(dateMeasurement.getDateTime());
|
cal.setTime(dateMeasurement.getDateTime());
|
||||||
cal.set(Calendar.HOUR_OF_DAY, time.get(Calendar.HOUR_OF_DAY));
|
cal.set(Calendar.HOUR_OF_DAY, time.get(Calendar.HOUR_OF_DAY));
|
||||||
cal.set(Calendar.MINUTE, time.get(Calendar.MINUTE));
|
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();
|
ScaleMeasurement scaleMeasurement = new ScaleMeasurement();
|
||||||
|
|
||||||
|
@@ -17,7 +17,6 @@ package com.health.openscale.junit;
|
|||||||
|
|
||||||
import android.arch.persistence.room.Room;
|
import android.arch.persistence.room.Room;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.database.sqlite.SQLiteConstraintException;
|
|
||||||
import android.support.test.InstrumentationRegistry;
|
import android.support.test.InstrumentationRegistry;
|
||||||
import android.support.test.runner.AndroidJUnit4;
|
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.assertEquals;
|
||||||
import static org.junit.Assert.assertNull;
|
import static org.junit.Assert.assertNull;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.junit.Assert.fail;
|
|
||||||
|
|
||||||
// run this test as an Android instrumented test!
|
// run this test as an Android instrumented test!
|
||||||
@RunWith(AndroidJUnit4.class)
|
@RunWith(AndroidJUnit4.class)
|
||||||
@@ -179,16 +177,8 @@ public class DatabaseTest {
|
|||||||
assertEquals(25.0f, measurementDAO.getAll(user2).get(0).getWeight(), DELTA);
|
assertEquals(25.0f, measurementDAO.getAll(user2).get(0).getWeight(), DELTA);
|
||||||
|
|
||||||
// don't allow insertion with the same date
|
// don't allow insertion with the same date
|
||||||
if (measurementDAO.get(measurement11.getDateTime(), user1) == null) {
|
long id = measurementDAO.insert(measurement11);
|
||||||
measurementDAO.insert(measurement11);
|
assertEquals(-1 , id);
|
||||||
}
|
|
||||||
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) {}
|
|
||||||
assertEquals(3, measurementDAO.getAll(user1).size());
|
assertEquals(3, measurementDAO.getAll(user1).size());
|
||||||
|
|
||||||
// test get(datetime) method
|
// test get(datetime) method
|
||||||
|
@@ -159,4 +159,5 @@
|
|||||||
<string name="open_drawer">öffnen</string>
|
<string name="open_drawer">öffnen</string>
|
||||||
<string name="close_drawer">schließen</string>
|
<string name="close_drawer">schließen</string>
|
||||||
<string name="info_bluetooth_no_device_set">Kein Bluetooth Gerät ausgewählt</string>
|
<string name="info_bluetooth_no_device_set">Kein Bluetooth Gerät ausgewählt</string>
|
||||||
|
<string name="info_new_data_duplicated">Messung mit gleichen Datum und Uhrzeit exisitiert bereits</string>
|
||||||
</resources>
|
</resources>
|
@@ -109,6 +109,7 @@
|
|||||||
<string name="info_bluetooth_init">Initialize Bluetooth device</string>
|
<string name="info_bluetooth_init">Initialize Bluetooth device</string>
|
||||||
<string name="info_bluetooth_connection_error">Bluetooth has an unexpected error</string>
|
<string name="info_bluetooth_connection_error">Bluetooth has an unexpected error</string>
|
||||||
<string name="info_new_data_added">%1$.2f%2$s [%3$s] to %4$s added</string>
|
<string name="info_new_data_added">%1$.2f%2$s [%3$s] to %4$s added</string>
|
||||||
|
<string name="info_new_data_duplicated">measurement with the same date and time already exist</string>
|
||||||
|
|
||||||
<string name="info_enter_user_name">Enter your name</string>
|
<string name="info_enter_user_name">Enter your name</string>
|
||||||
<string name="info_no_selected_user">No user exists. Please create a new user in the settings.</string>
|
<string name="info_no_selected_user">No user exists. Please create a new user in the settings.</string>
|
||||||
|
Reference in New Issue
Block a user