use of nodomain.freeyourgadget.gadgetbridge.entities.User in project Gadgetbridge by Freeyourgadget.
the class FetchActivityOperation method saveSamples.
private GregorianCalendar saveSamples() {
if (samples.size() > 0) {
// save all the samples that we got
try (DBHandler handler = GBApplication.acquireDB()) {
DaoSession session = handler.getDaoSession();
SampleProvider<MiBandActivitySample> sampleProvider = new MiBandSampleProvider(getDevice(), session);
Device device = DBHelper.getDevice(getDevice(), session);
User user = DBHelper.getUser(session);
GregorianCalendar timestamp = (GregorianCalendar) startTimestamp.clone();
for (MiBandActivitySample sample : samples) {
sample.setDevice(device);
sample.setUser(user);
sample.setTimestamp((int) (timestamp.getTimeInMillis() / 1000));
sample.setProvider(sampleProvider);
if (LOG.isDebugEnabled()) {
// LOG.debug("sample: " + sample);
}
timestamp.add(Calendar.MINUTE, 1);
}
sampleProvider.addGBActivitySamples(samples.toArray(new MiBandActivitySample[0]));
saveLastSyncTimestamp(timestamp);
LOG.info("Mi2 activity data: last sample timestamp: " + DateTimeUtils.formatDateTime(timestamp.getTime()));
return timestamp;
} catch (Exception ex) {
GB.toast(getContext(), "Error saving activity samples", Toast.LENGTH_LONG, GB.ERROR);
} finally {
samples.clear();
}
}
return null;
}
use of nodomain.freeyourgadget.gadgetbridge.entities.User in project Gadgetbridge by Freeyourgadget.
the class FitProDeviceSupport method onSetAlarms.
@Override
public void onSetAlarms(ArrayList<? extends Alarm> alarms) {
LOG.debug("FitPro set alarms");
if (alarms.toArray().length == 1 && alarms.get(0).getRepetition() == 0) {
Alarm oneshot = alarms.get(0);
DBHandler db = null;
try {
db = GBApplication.acquireDB();
DaoSession daoSession = db.getDaoSession();
Device device = DBHelper.getDevice(gbDevice, daoSession);
User user = DBHelper.getUser(daoSession);
nodomain.freeyourgadget.gadgetbridge.entities.Alarm tmpAlarm = new nodomain.freeyourgadget.gadgetbridge.entities.Alarm(device.getId(), user.getId(), 7, true, false, false, 0, oneshot.getHour(), oneshot.getMinute(), // kind of indicate the specialty of this alarm
true, "", "");
daoSession.insertOrReplace(tmpAlarm);
GBApplication.releaseDB();
} catch (GBException e) {
LOG.error("error storing one shot quick alarm");
}
}
try {
TransactionBuilder builder = performInitialized("Set alarm");
boolean anyAlarmEnabled = false;
byte[] all_alarms = new byte[] {};
for (Alarm alarm : alarms) {
Calendar calendar = AlarmUtils.toCalendar(alarm);
anyAlarmEnabled |= alarm.getEnabled();
LOG.debug("alarms: " + alarm.getPosition());
int maxAlarms = 8;
if (alarm.getPosition() >= maxAlarms) {
// we should never encounter this, but just in case
if (alarm.getEnabled()) {
GB.toast(getContext(), "Only 8 alarms are supported.", Toast.LENGTH_LONG, GB.WARN);
}
return;
}
if (alarm.getEnabled()) {
long datetime = (long) alarm.getRepetition() | ((long) (calendar.get(Calendar.YEAR) - 2000) << 34 | (long) (calendar.get(Calendar.MONTH) + 1) << 30 | (long) (calendar.get(Calendar.DAY_OF_MONTH)) << 25 | (long) (calendar.get(Calendar.HOUR_OF_DAY)) << 20 | (long) (calendar.get(Calendar.MINUTE)) << 14 | 1L << 11);
byte[] single_alarm = new byte[] { (byte) (datetime >> 32), (byte) (datetime >> 24), (byte) (datetime >> 16), (byte) (datetime >> 8), (byte) (datetime) };
all_alarms = ArrayUtils.addAll(all_alarms, single_alarm);
}
}
builder.write(writeCharacteristic, craftData(CMD_GROUP_GENERAL, CMD_ALARM, all_alarms));
builder.queue(getQueue());
if (anyAlarmEnabled) {
GB.toast(getContext(), getContext().getString(R.string.user_feedback_miband_set_alarms_ok), Toast.LENGTH_SHORT, GB.INFO);
} else {
GB.toast(getContext(), getContext().getString(R.string.user_feedback_all_alarms_disabled), Toast.LENGTH_SHORT, GB.INFO);
}
} catch (IOException ex) {
GB.toast(getContext(), getContext().getString(R.string.user_feedback_miband_set_alarms_failed), Toast.LENGTH_LONG, GB.ERROR, ex);
}
}
use of nodomain.freeyourgadget.gadgetbridge.entities.User in project Gadgetbridge by Freeyourgadget.
the class FitProDeviceSupport method addGBActivitySamples.
private boolean addGBActivitySamples(List<FitProActivitySample> samples) {
try (DBHandler dbHandler = GBApplication.acquireDB()) {
User user = DBHelper.getUser(dbHandler.getDaoSession());
Device device = DBHelper.getDevice(this.getDevice(), dbHandler.getDaoSession());
FitProSampleProvider provider = new FitProSampleProvider(this.getDevice(), dbHandler.getDaoSession());
for (FitProActivitySample sample : samples) {
sample.setDevice(device);
sample.setUser(user);
sample.setProvider(provider);
provider.addGBActivitySample(sample);
}
} catch (Exception ex) {
LOG.error("Error saving samples: " + ex);
GB.updateTransferNotification(null, "Data transfer failed", false, 0, getContext());
return false;
}
return true;
}
use of nodomain.freeyourgadget.gadgetbridge.entities.User in project Gadgetbridge by Freeyourgadget.
the class SampleProviderTest method testSamples.
@Test
public void testSamples() {
MiBandSampleProvider sampleProvider = new MiBandSampleProvider(dummyGBDevice, daoSession);
User user = DBHelper.getUser(daoSession);
assertNotNull(user);
assertNotNull(user.getId());
Device device = DBHelper.getDevice(dummyGBDevice, daoSession);
assertNotNull(device);
MiBandActivitySample s1 = createSample(sampleProvider, MiBandSampleProvider.TYPE_ACTIVITY, 100, 10, 70, 1000, user, device);
sampleProvider.addGBActivitySample(s1);
// add again, should not throw or fail
sampleProvider.addGBActivitySample(s1);
MiBandActivitySample s2 = createSample(sampleProvider, MiBandSampleProvider.TYPE_ACTIVITY, 200, 20, 80, 1030, user, device);
sampleProvider.addGBActivitySample(s2);
MiBandActivitySample s3 = createSample(sampleProvider, MiBandSampleProvider.TYPE_DEEP_SLEEP, 1200, 10, 62, 4030, user, device);
MiBandActivitySample s4 = createSample(sampleProvider, MiBandSampleProvider.TYPE_LIGHT_SLEEP, 2000, 10, 60, 4030, user, device);
sampleProvider.addGBActivitySamples(new MiBandActivitySample[] { s3, s4 });
// first checks for irrelevant timestamps => no samples
List<MiBandActivitySample> samples = sampleProvider.getAllActivitySamples(0, 0);
assertEquals(0, samples.size());
samples = sampleProvider.getAllActivitySamples(-1, 1);
assertEquals(0, samples.size());
samples = sampleProvider.getAllActivitySamples(1, -1);
assertEquals(0, samples.size());
// now specific activity kinds
samples = sampleProvider.getActivitySamples(0, 0);
assertEquals(0, samples.size());
samples = sampleProvider.getActivitySamples(-1, 1);
assertEquals(0, samples.size());
samples = sampleProvider.getActivitySamples(1, -1);
assertEquals(0, samples.size());
// and sleep
samples = sampleProvider.getSleepSamples(0, 0);
assertEquals(0, samples.size());
samples = sampleProvider.getSleepSamples(-1, 1);
assertEquals(0, samples.size());
samples = sampleProvider.getSleepSamples(1, -1);
assertEquals(0, samples.size());
// finally checks for existing timestamps
List<MiBandActivitySample> allSamples = sampleProvider.getAllActivitySamples(0, 10000);
assertEquals(4, allSamples.size());
List<MiBandActivitySample> activitySamples = sampleProvider.getActivitySamples(0, 10000);
assertEquals(2, activitySamples.size());
List<MiBandActivitySample> sleepSamples = sampleProvider.getSleepSamples(0, 10000);
assertEquals(2, sleepSamples.size());
// now with more strict time ranges
allSamples = sampleProvider.getAllActivitySamples(0, 1300);
assertEquals(3, allSamples.size());
activitySamples = sampleProvider.getActivitySamples(10, 150);
assertEquals(1, activitySamples.size());
sleepSamples = sampleProvider.getSleepSamples(1500, 2500);
assertEquals(1, sleepSamples.size());
}
use of nodomain.freeyourgadget.gadgetbridge.entities.User in project Gadgetbridge by Freeyourgadget.
the class GPXExporterTest method createTestTrack.
private ActivityTrack createTestTrack(List<ActivityPoint> points) {
final User user = new User();
user.setName("Test User");
Device device = new Device();
device.setName("Test Device");
final ActivityTrack track = new ActivityTrack();
track.setName("Test Track");
track.setBaseTime(new Date());
track.setUser(user);
track.setDevice(device);
for (final ActivityPoint point : points) {
track.addTrackPoint(point);
}
return track;
}
Aggregations