Search in sources :

Example 16 with User

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;
}
Also used : DBHandler(nodomain.freeyourgadget.gadgetbridge.database.DBHandler) User(nodomain.freeyourgadget.gadgetbridge.entities.User) Device(nodomain.freeyourgadget.gadgetbridge.entities.Device) GregorianCalendar(java.util.GregorianCalendar) MiBandSampleProvider(nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandSampleProvider) MiBandActivitySample(nodomain.freeyourgadget.gadgetbridge.entities.MiBandActivitySample) IOException(java.io.IOException) DaoSession(nodomain.freeyourgadget.gadgetbridge.entities.DaoSession)

Example 17 with User

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);
    }
}
Also used : User(nodomain.freeyourgadget.gadgetbridge.entities.User) ActivityUser(nodomain.freeyourgadget.gadgetbridge.model.ActivityUser) Device(nodomain.freeyourgadget.gadgetbridge.entities.Device) GBDevice(nodomain.freeyourgadget.gadgetbridge.impl.GBDevice) GregorianCalendar(java.util.GregorianCalendar) Calendar(java.util.Calendar) TransactionBuilder(nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder) GBException(nodomain.freeyourgadget.gadgetbridge.GBException) IOException(java.io.IOException) DBHandler(nodomain.freeyourgadget.gadgetbridge.database.DBHandler) Alarm(nodomain.freeyourgadget.gadgetbridge.model.Alarm) DaoSession(nodomain.freeyourgadget.gadgetbridge.entities.DaoSession)

Example 18 with User

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;
}
Also used : FitProActivitySample(nodomain.freeyourgadget.gadgetbridge.entities.FitProActivitySample) DBHandler(nodomain.freeyourgadget.gadgetbridge.database.DBHandler) User(nodomain.freeyourgadget.gadgetbridge.entities.User) ActivityUser(nodomain.freeyourgadget.gadgetbridge.model.ActivityUser) FitProSampleProvider(nodomain.freeyourgadget.gadgetbridge.devices.fitpro.FitProSampleProvider) Device(nodomain.freeyourgadget.gadgetbridge.entities.Device) GBDevice(nodomain.freeyourgadget.gadgetbridge.impl.GBDevice) IOException(java.io.IOException) ParseException(java.text.ParseException) GBException(nodomain.freeyourgadget.gadgetbridge.GBException)

Example 19 with User

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());
}
Also used : User(nodomain.freeyourgadget.gadgetbridge.entities.User) GBDevice(nodomain.freeyourgadget.gadgetbridge.impl.GBDevice) Device(nodomain.freeyourgadget.gadgetbridge.entities.Device) MiBandSampleProvider(nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandSampleProvider) MiBandActivitySample(nodomain.freeyourgadget.gadgetbridge.entities.MiBandActivitySample) Test(org.junit.Test)

Example 20 with User

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;
}
Also used : User(nodomain.freeyourgadget.gadgetbridge.entities.User) Device(nodomain.freeyourgadget.gadgetbridge.entities.Device) ActivityPoint(nodomain.freeyourgadget.gadgetbridge.model.ActivityPoint) ActivityTrack(nodomain.freeyourgadget.gadgetbridge.model.ActivityTrack) Date(java.util.Date)

Aggregations

User (nodomain.freeyourgadget.gadgetbridge.entities.User)23 Device (nodomain.freeyourgadget.gadgetbridge.entities.Device)19 DBHandler (nodomain.freeyourgadget.gadgetbridge.database.DBHandler)14 GBDevice (nodomain.freeyourgadget.gadgetbridge.impl.GBDevice)12 IOException (java.io.IOException)11 DaoSession (nodomain.freeyourgadget.gadgetbridge.entities.DaoSession)9 ActivityUser (nodomain.freeyourgadget.gadgetbridge.model.ActivityUser)9 NonNull (androidx.annotation.NonNull)5 GregorianCalendar (java.util.GregorianCalendar)4 DeviceCoordinator (nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator)4 MiBandSampleProvider (nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandSampleProvider)4 MiBandActivitySample (nodomain.freeyourgadget.gadgetbridge.entities.MiBandActivitySample)4 Alarm (nodomain.freeyourgadget.gadgetbridge.entities.Alarm)3 Prefs (nodomain.freeyourgadget.gadgetbridge.util.Prefs)3 Test (org.junit.Test)3 Calendar (java.util.Calendar)2 GBException (nodomain.freeyourgadget.gadgetbridge.GBException)2 CasioGBX100SampleProvider (nodomain.freeyourgadget.gadgetbridge.devices.casio.CasioGBX100SampleProvider)2 CasioGBX100ActivitySample (nodomain.freeyourgadget.gadgetbridge.entities.CasioGBX100ActivitySample)2 Reminder (nodomain.freeyourgadget.gadgetbridge.entities.Reminder)2