Search in sources :

Example 21 with User

use of nodomain.freeyourgadget.gadgetbridge.entities.User in project Gadgetbridge by Freeyourgadget.

the class EntitiesTest method testActivityDescription.

@Test
public void testActivityDescription() {
    User user = DBHelper.getUser(daoSession);
    assertNotNull(user);
    ActivityDescriptionDao descDao = daoSession.getActivityDescriptionDao();
    assertEquals(0, descDao.count());
    List<ActivityDescription> list = DBHelper.findActivityDecriptions(user, 10, 100, daoSession);
    assertTrue(list.isEmpty());
    ActivityDescription desc = DBHelper.createActivityDescription(user, 10, 100, daoSession);
    assertNotNull(desc);
    assertEquals(user, desc.getUser());
    assertEquals(10, desc.getTimestampFrom());
    assertEquals(100, desc.getTimestampTo());
    List<Tag> tagList = desc.getTagList();
    assertEquals(0, tagList.size());
    Tag t1 = DBHelper.getTag(user, "Table Tennis", daoSession);
    assertNotNull(t1);
    assertEquals("Table Tennis", t1.getName());
    t1.setDescription("Table tennis training for Olympia");
    tagList.add(t1);
    list = DBHelper.findActivityDecriptions(user, 10, 100, daoSession);
    assertEquals(1, list.size());
    ActivityDescription desc1 = list.get(0);
    assertEquals(desc, desc1);
    assertEquals(1, desc1.getTagList().size());
    // check for partial range overlaps
    list = DBHelper.findActivityDecriptions(user, 20, 80, daoSession);
    assertEquals(1, list.size());
    list = DBHelper.findActivityDecriptions(user, 5, 120, daoSession);
    assertEquals(1, list.size());
    list = DBHelper.findActivityDecriptions(user, 20, 120, daoSession);
    assertEquals(1, list.size());
    list = DBHelper.findActivityDecriptions(user, 5, 80, daoSession);
    assertEquals(1, list.size());
    // Now with a second, adjacent ActivityDescription
    ActivityDescription desc2 = DBHelper.createActivityDescription(user, 101, 200, daoSession);
    list = DBHelper.findActivityDecriptions(user, 10, 100, daoSession);
    assertEquals(1, list.size());
    list = DBHelper.findActivityDecriptions(user, 20, 80, daoSession);
    assertEquals(1, list.size());
    list = DBHelper.findActivityDecriptions(user, 5, 120, daoSession);
    assertEquals(2, list.size());
    list = DBHelper.findActivityDecriptions(user, 20, 120, daoSession);
    assertEquals(2, list.size());
    list = DBHelper.findActivityDecriptions(user, 5, 80, daoSession);
    assertEquals(1, list.size());
    // Now with a third, partially overlapping ActivityDescription
    ActivityDescription desc3 = DBHelper.createActivityDescription(user, 5, 15, daoSession);
    list = DBHelper.findActivityDecriptions(user, 10, 100, daoSession);
    assertEquals(2, list.size());
    list = DBHelper.findActivityDecriptions(user, 20, 80, daoSession);
    assertEquals(1, list.size());
    list = DBHelper.findActivityDecriptions(user, 5, 120, daoSession);
    assertEquals(3, list.size());
    list = DBHelper.findActivityDecriptions(user, 20, 120, daoSession);
    assertEquals(2, list.size());
    list = DBHelper.findActivityDecriptions(user, 5, 80, daoSession);
    assertEquals(2, list.size());
}
Also used : ActivityUser(nodomain.freeyourgadget.gadgetbridge.model.ActivityUser) User(nodomain.freeyourgadget.gadgetbridge.entities.User) ActivityDescription(nodomain.freeyourgadget.gadgetbridge.entities.ActivityDescription) ActivityDescriptionDao(nodomain.freeyourgadget.gadgetbridge.entities.ActivityDescriptionDao) Tag(nodomain.freeyourgadget.gadgetbridge.entities.Tag) Test(org.junit.Test)

Example 22 with User

use of nodomain.freeyourgadget.gadgetbridge.entities.User in project Gadgetbridge by Freeyourgadget.

the class ConfigureReminders method onCreate.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_configure_reminders);
    gbDevice = getIntent().getParcelableExtra(GBDevice.EXTRA_DEVICE);
    mGBReminderListAdapter = new GBReminderListAdapter(this);
    final RecyclerView remindersRecyclerView = findViewById(R.id.reminder_list);
    remindersRecyclerView.setHasFixedSize(true);
    remindersRecyclerView.setLayoutManager(new LinearLayoutManager(this));
    remindersRecyclerView.setAdapter(mGBReminderListAdapter);
    updateRemindersFromDB();
    final FloatingActionButton fab = findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            final DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(gbDevice);
            final Prefs prefs = new Prefs(GBApplication.getDeviceSpecificSharedPrefs(gbDevice.getAddress()));
            int reservedSlots = prefs.getInt(DeviceSettingsPreferenceConst.PREF_RESERVER_REMINDERS_CALENDAR, 9);
            int deviceSlots = coordinator.getReminderSlotCount() - reservedSlots;
            if (mGBReminderListAdapter.getItemCount() >= deviceSlots) {
                // No more free slots
                new AlertDialog.Builder(v.getContext()).setTitle(R.string.reminder_no_free_slots_title).setMessage(getBaseContext().getString(R.string.reminder_no_free_slots_description, String.format(Locale.getDefault(), "%d", deviceSlots))).setIcon(R.drawable.ic_warning).setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {

                    public void onClick(final DialogInterface dialog, final int whichButton) {
                    }
                }).show();
                return;
            }
            final Reminder reminder;
            try (DBHandler db = GBApplication.acquireDB()) {
                final DaoSession daoSession = db.getDaoSession();
                final Device device = DBHelper.getDevice(gbDevice, daoSession);
                final User user = DBHelper.getUser(daoSession);
                reminder = createDefaultReminder(device, user);
            } catch (final Exception e) {
                LOG.error("Error accessing database", e);
                return;
            }
            configureReminder(reminder);
        }
    });
}
Also used : Reminder(nodomain.freeyourgadget.gadgetbridge.entities.Reminder) User(nodomain.freeyourgadget.gadgetbridge.entities.User) DialogInterface(android.content.DialogInterface) Device(nodomain.freeyourgadget.gadgetbridge.entities.Device) GBDevice(nodomain.freeyourgadget.gadgetbridge.impl.GBDevice) LinearLayoutManager(androidx.recyclerview.widget.LinearLayoutManager) Prefs(nodomain.freeyourgadget.gadgetbridge.util.Prefs) View(android.view.View) RecyclerView(androidx.recyclerview.widget.RecyclerView) GBReminderListAdapter(nodomain.freeyourgadget.gadgetbridge.adapter.GBReminderListAdapter) DBHandler(nodomain.freeyourgadget.gadgetbridge.database.DBHandler) FloatingActionButton(com.google.android.material.floatingactionbutton.FloatingActionButton) RecyclerView(androidx.recyclerview.widget.RecyclerView) DeviceCoordinator(nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator) DaoSession(nodomain.freeyourgadget.gadgetbridge.entities.DaoSession)

Example 23 with User

use of nodomain.freeyourgadget.gadgetbridge.entities.User in project Gadgetbridge by Freeyourgadget.

the class FetchActivityOperation method flushActivityDataHolder.

/**
 * empty the local buffer for activity data, arrange the values received in groups of three and
 * store them in the DB
 */
private void flushActivityDataHolder() {
    if (activityStruct == null) {
        LOG.debug("nothing to flush, struct is already null");
        return;
    }
    int bpm = getBytesPerMinuteOfActivityData();
    LOG.debug("flushing activity data samples: " + activityStruct.activityDataHolderProgress / bpm);
    byte category, intensity, steps, heartrate = 0;
    try (DBHandler dbHandler = GBApplication.acquireDB()) {
        MiBandSampleProvider provider = new MiBandSampleProvider(getDevice(), dbHandler.getDaoSession());
        User user = DBHelper.getUser(dbHandler.getDaoSession());
        Device device = DBHelper.getDevice(getDevice(), dbHandler.getDaoSession());
        int minutes = 0;
        try {
            int timestampInSeconds = (int) (activityStruct.activityDataTimestampProgress.getTimeInMillis() / 1000);
            if ((activityStruct.activityDataHolderProgress % bpm) != 0) {
                throw new IllegalStateException("Unexpected data, progress should be multiple of " + bpm + ": " + activityStruct.activityDataHolderProgress);
            }
            int numSamples = activityStruct.activityDataHolderProgress / bpm;
            MiBandActivitySample[] samples = new MiBandActivitySample[numSamples];
            for (int i = 0; i < activityStruct.activityDataHolderProgress; i += bpm) {
                category = activityStruct.activityDataHolder[i];
                intensity = activityStruct.activityDataHolder[i + 1];
                steps = activityStruct.activityDataHolder[i + 2];
                if (hasExtendedActivityData) {
                    heartrate = activityStruct.activityDataHolder[i + 3];
                // LOG.debug("heartrate received: " + (heartrate & 0xff));
                }
                MiBandActivitySample sample = getSupport().createActivitySample(device, user, timestampInSeconds, provider);
                sample.setRawIntensity(intensity & 0xff);
                sample.setSteps(steps & 0xff);
                sample.setRawKind(category & 0xff);
                sample.setHeartRate(heartrate & 0xff);
                samples[minutes] = sample;
                if (LOG.isDebugEnabled()) {
                    LOG.debug("sample: " + samples[minutes]);
                }
                // next minute
                minutes++;
                timestampInSeconds += 60;
            }
            provider.addGBActivitySamples(samples);
        } finally {
            activityStruct.bufferFlushed(minutes);
        }
    } catch (Exception ex) {
        GB.toast(getContext(), ex.getMessage(), Toast.LENGTH_LONG, GB.ERROR, ex);
    }
}
Also used : DBHandler(nodomain.freeyourgadget.gadgetbridge.database.DBHandler) User(nodomain.freeyourgadget.gadgetbridge.entities.User) Device(nodomain.freeyourgadget.gadgetbridge.entities.Device) MiBandSampleProvider(nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandSampleProvider) MiBandActivitySample(nodomain.freeyourgadget.gadgetbridge.entities.MiBandActivitySample) IOException(java.io.IOException)

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