mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-08-31 19:45:27 +02:00
Add month and day to date of birth
This commit is contained in:
parent
b59ba76803
commit
4da02fa851
@ -123,7 +123,7 @@ public class GBApplication extends Application {
|
||||
private static SharedPreferences sharedPrefs;
|
||||
private static final String PREFS_VERSION = "shared_preferences_version";
|
||||
//if preferences have to be migrated, increment the following and add the migration logic in migratePrefs below; see http://stackoverflow.com/questions/16397848/how-can-i-migrate-android-preferences-with-a-new-version
|
||||
private static final int CURRENT_PREFS_VERSION = 37;
|
||||
private static final int CURRENT_PREFS_VERSION = 38;
|
||||
|
||||
private static final LimitedQueue<Integer, String> mIDSenderLookup = new LimitedQueue<>(16);
|
||||
private static GBPrefs prefs;
|
||||
@ -735,7 +735,7 @@ public class GBApplication extends Application {
|
||||
editor.remove("mi_user_weight_kg");
|
||||
}
|
||||
if (legacyYOB != null) {
|
||||
editor.putString(ActivityUser.PREF_USER_YEAR_OF_BIRTH, legacyYOB);
|
||||
editor.putString("activity_user_year_of_birth", legacyYOB);
|
||||
editor.remove("mi_user_year_of_birth");
|
||||
}
|
||||
}
|
||||
@ -1726,6 +1726,14 @@ public class GBApplication extends Application {
|
||||
}
|
||||
}
|
||||
|
||||
if (oldVersion < 38) {
|
||||
// Migrate year of birth to date of birth
|
||||
final String yearOfBirth = sharedPrefs.getString("activity_user_year_of_birth", null);
|
||||
if (StringUtils.isNotBlank(yearOfBirth)) {
|
||||
editor.putString("activity_user_date_of_birth", String.format(Locale.ROOT, "%s-01-01", yearOfBirth.trim()));
|
||||
}
|
||||
}
|
||||
|
||||
editor.putString(PREFS_VERSION, Integer.toString(CURRENT_PREFS_VERSION));
|
||||
editor.apply();
|
||||
}
|
||||
|
@ -18,6 +18,7 @@ package nodomain.freeyourgadget.gadgetbridge.activities;
|
||||
|
||||
import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_ACTIVETIME_MINUTES;
|
||||
import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_CALORIES_BURNT;
|
||||
import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_DATE_OF_BIRTH;
|
||||
import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_DISTANCE_METERS;
|
||||
import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_GENDER;
|
||||
import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_GOAL_FAT_BURN_TIME_MINUTES;
|
||||
@ -29,7 +30,6 @@ import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_
|
||||
import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_STEPS_GOAL;
|
||||
import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_STEP_LENGTH_CM;
|
||||
import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_WEIGHT_KG;
|
||||
import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_YEAR_OF_BIRTH;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
@ -62,7 +62,7 @@ public class AboutUserPreferencesActivity extends AbstractSettingsActivityV2 {
|
||||
setPreferencesFromResource(R.xml.about_user, rootKey);
|
||||
|
||||
addPreferenceHandlerFor(PREF_USER_NAME, true, false);
|
||||
addPreferenceHandlerFor(PREF_USER_YEAR_OF_BIRTH, true, false);
|
||||
addPreferenceHandlerFor(PREF_USER_DATE_OF_BIRTH, true, false);
|
||||
addPreferenceHandlerFor(PREF_USER_HEIGHT_CM, true, true);
|
||||
addPreferenceHandlerFor(PREF_USER_WEIGHT_KG, true, false);
|
||||
addPreferenceHandlerFor(PREF_USER_GENDER, true, false);
|
||||
@ -74,7 +74,6 @@ public class AboutUserPreferencesActivity extends AbstractSettingsActivityV2 {
|
||||
addPreferenceHandlerFor(PREF_USER_STEP_LENGTH_CM, false, true);
|
||||
addPreferenceHandlerFor(PREF_USER_DISTANCE_METERS, false, true);
|
||||
|
||||
setInputTypeFor(PREF_USER_YEAR_OF_BIRTH, InputType.TYPE_CLASS_NUMBER);
|
||||
setInputTypeFor(PREF_USER_HEIGHT_CM, InputType.TYPE_CLASS_NUMBER);
|
||||
setInputTypeFor(PREF_USER_WEIGHT_KG, InputType.TYPE_CLASS_NUMBER);
|
||||
setInputTypeFor(PREF_USER_STEPS_GOAL, InputType.TYPE_CLASS_NUMBER);
|
||||
|
@ -17,6 +17,8 @@
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
||||
package nodomain.freeyourgadget.gadgetbridge.model;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.Period;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.GregorianCalendar;
|
||||
@ -36,7 +38,7 @@ public class ActivityUser {
|
||||
|
||||
private String activityUserName;
|
||||
private int activityUserGender;
|
||||
private int activityUserYearOfBirth;
|
||||
private LocalDate activityUserDateOfBirth;
|
||||
private int activityUserHeightCm;
|
||||
private int activityUserWeightKg;
|
||||
private int activityUserSleepDurationGoal;
|
||||
@ -49,7 +51,7 @@ public class ActivityUser {
|
||||
|
||||
private static final String defaultUserName = "gadgetbridge-user";
|
||||
public static final int defaultUserGender = GENDER_FEMALE;
|
||||
public static final int defaultUserYearOfBirth = 1970;
|
||||
public static final String defaultUserDateOfBirth = "1970-01-01";
|
||||
public static final int defaultUserAge = 0;
|
||||
public static final int defaultUserHeightCm = 175;
|
||||
public static final int defaultUserWeightKg = 70;
|
||||
@ -64,7 +66,7 @@ public class ActivityUser {
|
||||
public static final int defaultUserFatBurnTimeMinutes = 30;
|
||||
|
||||
public static final String PREF_USER_NAME = "mi_user_alias";
|
||||
public static final String PREF_USER_YEAR_OF_BIRTH = "activity_user_year_of_birth";
|
||||
public static final String PREF_USER_DATE_OF_BIRTH = "activity_user_date_of_birth";
|
||||
public static final String PREF_USER_GENDER = "activity_user_gender";
|
||||
public static final String PREF_USER_HEIGHT_CM = "activity_user_height_cm";
|
||||
public static final String PREF_USER_WEIGHT_KG = "activity_user_weight_kg";
|
||||
@ -99,8 +101,8 @@ public class ActivityUser {
|
||||
return activityUserGender;
|
||||
}
|
||||
|
||||
public int getYearOfBirth() {
|
||||
return activityUserYearOfBirth;
|
||||
public LocalDate getDateOfBirth() {
|
||||
return activityUserDateOfBirth;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -145,15 +147,7 @@ public class ActivityUser {
|
||||
}
|
||||
|
||||
public int getAge() {
|
||||
int userYear = getYearOfBirth();
|
||||
int age = 25;
|
||||
if (userYear > 1900) {
|
||||
age = Calendar.getInstance().get(Calendar.YEAR) - userYear;
|
||||
if (age <= 0) {
|
||||
age = 25;
|
||||
}
|
||||
}
|
||||
return age;
|
||||
return Period.between(getDateOfBirth(), LocalDate.now()).getYears();
|
||||
}
|
||||
|
||||
private void fetchPreferences() {
|
||||
@ -162,7 +156,7 @@ public class ActivityUser {
|
||||
activityUserGender = prefs.getInt(PREF_USER_GENDER, defaultUserGender);
|
||||
activityUserHeightCm = prefs.getInt(PREF_USER_HEIGHT_CM, defaultUserHeightCm);
|
||||
activityUserWeightKg = prefs.getInt(PREF_USER_WEIGHT_KG, defaultUserWeightKg);
|
||||
activityUserYearOfBirth = prefs.getInt(PREF_USER_YEAR_OF_BIRTH, defaultUserYearOfBirth);
|
||||
activityUserDateOfBirth = prefs.getLocalDate(PREF_USER_DATE_OF_BIRTH, defaultUserDateOfBirth);
|
||||
activityUserSleepDurationGoal = prefs.getInt(PREF_USER_SLEEP_DURATION, defaultUserSleepDurationGoal);
|
||||
activityUserStepsGoal = prefs.getInt(PREF_USER_STEPS_GOAL, defaultUserStepsGoal);
|
||||
activityUserCaloriesBurntGoal = prefs.getInt(PREF_USER_CALORIES_BURNT, defaultUserCaloriesBurntGoal);
|
||||
@ -172,9 +166,16 @@ public class ActivityUser {
|
||||
activityUserStepLengthCm = prefs.getInt(PREF_USER_STEP_LENGTH_CM, defaultUserStepLengthCm);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #getDateOfBirth()}.
|
||||
*/
|
||||
@Deprecated
|
||||
public Date getUserBirthday() {
|
||||
final LocalDate dateOfBirth = getDateOfBirth();
|
||||
Calendar cal = DateTimeUtils.getCalendarUTC();
|
||||
cal.set(GregorianCalendar.YEAR, getYearOfBirth());
|
||||
cal.set(GregorianCalendar.YEAR, dateOfBirth.getYear());
|
||||
cal.set(GregorianCalendar.MONTH, dateOfBirth.getMonthValue() - 1);
|
||||
cal.set(GregorianCalendar.DAY_OF_MONTH, dateOfBirth.getDayOfMonth());
|
||||
return cal.getTime();
|
||||
}
|
||||
|
||||
|
@ -69,12 +69,12 @@ import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.Dev
|
||||
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_PREVIEW_MESSAGE_IN_TITLE;
|
||||
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_TIMEFORMAT;
|
||||
import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_ACTIVETIME_MINUTES;
|
||||
import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_DATE_OF_BIRTH;
|
||||
import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_DISTANCE_METERS;
|
||||
import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_GENDER;
|
||||
import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_HEIGHT_CM;
|
||||
import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_STEPS_GOAL;
|
||||
import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_WEIGHT_KG;
|
||||
import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_YEAR_OF_BIRTH;
|
||||
|
||||
public class CasioGBX100DeviceSupport extends Casio2C2DSupport implements SharedPreferences.OnSharedPreferenceChangeListener {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(CasioGBX100DeviceSupport.class);
|
||||
@ -676,7 +676,7 @@ public class CasioGBX100DeviceSupport extends Casio2C2DSupport implements Shared
|
||||
case PREF_USER_WEIGHT_KG:
|
||||
new SetConfigurationOperation(this, CasioConstants.ConfigurationOption.OPTION_WEIGHT).perform();
|
||||
break;
|
||||
case PREF_USER_YEAR_OF_BIRTH:
|
||||
case PREF_USER_DATE_OF_BIRTH:
|
||||
new SetConfigurationOperation(this, CasioConstants.ConfigurationOption.OPTION_BIRTHDAY).perform();
|
||||
break;
|
||||
case PREF_TIMEFORMAT:
|
||||
|
@ -24,6 +24,7 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.time.LocalDate;
|
||||
import java.util.Arrays;
|
||||
import java.util.UUID;
|
||||
|
||||
@ -120,10 +121,10 @@ public class SetConfigurationOperation extends AbstractBTLEOperation<CasioGBX10
|
||||
}
|
||||
}
|
||||
if(option == CasioConstants.ConfigurationOption.OPTION_BIRTHDAY || all) {
|
||||
int year = user.getYearOfBirth();
|
||||
// Month and Day are not configured in Gadgetbridge!
|
||||
int month = 1;
|
||||
int day = 1;
|
||||
LocalDate dateOfBirth = user.getDateOfBirth();
|
||||
int year = dateOfBirth.getYear();
|
||||
int month = dateOfBirth.getMonthValue();
|
||||
int day = dateOfBirth.getDayOfMonth();
|
||||
data[6] = BcdUtil.toBcd8(year % 100);
|
||||
data[7] = BcdUtil.toBcd8((year - (year % 100)) / 100);
|
||||
data[8] = BcdUtil.toBcd8(month);
|
||||
|
@ -491,7 +491,7 @@ public class FitProDeviceSupport extends AbstractBTLEDeviceSupport {
|
||||
case ActivityUser.PREF_USER_WEIGHT_KG:
|
||||
case ActivityUser.PREF_USER_GENDER:
|
||||
case ActivityUser.PREF_USER_HEIGHT_CM:
|
||||
case ActivityUser.PREF_USER_YEAR_OF_BIRTH:
|
||||
case ActivityUser.PREF_USER_DATE_OF_BIRTH:
|
||||
setUserData(builder);
|
||||
break;
|
||||
case ActivityUser.PREF_USER_STEPS_GOAL:
|
||||
|
@ -123,7 +123,7 @@ public final class HamaFit6900DeviceSupport extends AbstractBTLEDeviceSupport {
|
||||
case ActivityUser.PREF_USER_WEIGHT_KG:
|
||||
case ActivityUser.PREF_USER_GENDER:
|
||||
case ActivityUser.PREF_USER_HEIGHT_CM:
|
||||
case ActivityUser.PREF_USER_YEAR_OF_BIRTH:
|
||||
case ActivityUser.PREF_USER_DATE_OF_BIRTH:
|
||||
case DeviceSettingsPreferenceConst.PREF_USER_FITNESS_GOAL:
|
||||
sendMessage("update-user-info", makeSetUserInfoMessage());
|
||||
return;
|
||||
|
@ -48,6 +48,7 @@ import java.nio.ByteBuffer;
|
||||
import java.nio.ByteOrder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDate;
|
||||
import java.time.ZoneId;
|
||||
import java.time.zone.ZoneOffsetTransition;
|
||||
import java.time.zone.ZoneRules;
|
||||
@ -285,11 +286,11 @@ import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.VI
|
||||
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.VIBRATION_PROFILE;
|
||||
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.getNotificationPrefIntValue;
|
||||
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.getNotificationPrefStringValue;
|
||||
import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_DATE_OF_BIRTH;
|
||||
import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_GENDER;
|
||||
import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_HEIGHT_CM;
|
||||
import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_NAME;
|
||||
import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_WEIGHT_KG;
|
||||
import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_YEAR_OF_BIRTH;
|
||||
import static nodomain.freeyourgadget.gadgetbridge.service.btle.GattCharacteristic.UUID_CHARACTERISTIC_ALERT_LEVEL;
|
||||
|
||||
public abstract class HuamiSupport extends AbstractBTLEDeviceSupport implements Huami2021Handler {
|
||||
@ -646,9 +647,10 @@ public abstract class HuamiSupport extends AbstractBTLEDeviceSupport implements
|
||||
ActivityUser activityUser = new ActivityUser();
|
||||
int height = activityUser.getHeightCm();
|
||||
int weight = activityUser.getWeightKg();
|
||||
int birth_year = activityUser.getYearOfBirth();
|
||||
byte birth_month = 7; // not in user attributes
|
||||
byte birth_day = 1; // not in user attributes
|
||||
LocalDate dateOfBirth = activityUser.getDateOfBirth();
|
||||
int birth_year = dateOfBirth.getYear();
|
||||
byte birth_month = (byte) dateOfBirth.getMonthValue();
|
||||
byte birth_day = (byte) dateOfBirth.getDayOfMonth();
|
||||
|
||||
if (alias == null || weight == 0 || height == 0 || birth_year == 0) {
|
||||
LOG.warn("Unable to set user info, make sure it is set up");
|
||||
@ -2914,8 +2916,8 @@ public abstract class HuamiSupport extends AbstractBTLEDeviceSupport implements
|
||||
case PREF_SOUNDS:
|
||||
setBeepSounds(builder);
|
||||
break;
|
||||
case PREF_USER_DATE_OF_BIRTH:
|
||||
case PREF_USER_NAME:
|
||||
case PREF_USER_YEAR_OF_BIRTH:
|
||||
case PREF_USER_WEIGHT_KG:
|
||||
case PREF_USER_HEIGHT_CM:
|
||||
case PREF_USER_GENDER:
|
||||
|
@ -61,6 +61,7 @@ import java.nio.ByteBuffer;
|
||||
import java.nio.ByteOrder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.sql.Timestamp;
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
@ -458,9 +459,10 @@ public class ZeppOsSupport extends HuamiSupport implements ZeppOsFileTransferSer
|
||||
final ActivityUser activityUser = new ActivityUser();
|
||||
final int height = activityUser.getHeightCm();
|
||||
final int weight = activityUser.getWeightKg();
|
||||
final int birthYear = activityUser.getYearOfBirth();
|
||||
final byte birthMonth = 7; // not in user attributes
|
||||
final byte birthDay = 1; // not in user attributes
|
||||
final LocalDate dateOfBirth = activityUser.getDateOfBirth();
|
||||
final int birthYear = dateOfBirth.getYear();
|
||||
final byte birthMonth = (byte) dateOfBirth.getMonthValue();
|
||||
final byte birthDay = (byte) dateOfBirth.getDayOfMonth();
|
||||
final String region = devicePrefs.getString(DeviceSettingsPreferenceConst.PREF_DEVICE_REGION, "unknown");
|
||||
|
||||
if (alias == null || weight == 0 || height == 0 || birthYear == 0) {
|
||||
|
@ -1071,7 +1071,7 @@ public class HuaweiSupportProvider {
|
||||
case ActivityUser.PREF_USER_WEIGHT_KG:
|
||||
case ActivityUser.PREF_USER_HEIGHT_CM:
|
||||
case ActivityUser.PREF_USER_GENDER:
|
||||
case ActivityUser.PREF_USER_YEAR_OF_BIRTH:
|
||||
case ActivityUser.PREF_USER_DATE_OF_BIRTH:
|
||||
sendUserInfo();
|
||||
break;
|
||||
}
|
||||
|
@ -19,8 +19,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
|
||||
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiPacket;
|
||||
@ -50,12 +49,10 @@ public class SendFitnessUserInfoRequest extends Request {
|
||||
gender = 1;
|
||||
}
|
||||
|
||||
Date birthday = activityUser.getUserBirthday();
|
||||
Calendar cal = Calendar.getInstance();
|
||||
cal.setTime(birthday);
|
||||
int birthdayEncoded = cal.get(Calendar.YEAR) << 16;
|
||||
birthdayEncoded += (cal.get(Calendar.MONTH)+1) << 8;
|
||||
birthdayEncoded += cal.get(Calendar.DAY_OF_MONTH);
|
||||
LocalDate dateOfBirth = activityUser.getDateOfBirth();
|
||||
int birthdayEncoded = dateOfBirth.getYear() << 16;
|
||||
birthdayEncoded += dateOfBirth.getMonthValue() << 8;
|
||||
birthdayEncoded += dateOfBirth.getDayOfMonth();
|
||||
|
||||
return new UserInfo.Request(paramsProvider,
|
||||
activityUser.getHeightCm(),
|
||||
|
@ -31,6 +31,7 @@ import java.io.IOException;
|
||||
import java.text.DateFormat;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
@ -843,7 +844,8 @@ public class SonyWena3DeviceSupport extends AbstractBTLEDeviceSupport {
|
||||
private void sendActivityGoalSettings(TransactionBuilder b) {
|
||||
Prefs prefs = new Prefs(GBApplication.getDeviceSpecificSharedPrefs(getDevice().getAddress()));
|
||||
ActivityUser user = new ActivityUser();
|
||||
if(user.getYearOfBirth() < 1920) {
|
||||
LocalDate dateOfBirth = user.getDateOfBirth();
|
||||
if(dateOfBirth.getYear() < 1920) {
|
||||
LOG.error("Device does not support this year of birth");
|
||||
return;
|
||||
}
|
||||
@ -851,8 +853,16 @@ public class SonyWena3DeviceSupport extends AbstractBTLEDeviceSupport {
|
||||
|
||||
GenderSetting gender = user.getGender() == ActivityUser.GENDER_FEMALE ? GenderSetting.FEMALE : GenderSetting.MALE;
|
||||
|
||||
|
||||
// Maybe we need to set the full birth date?
|
||||
BodyPropertiesSetting bodyPropertiesSetting = new BodyPropertiesSetting(gender, (short)user.getYearOfBirth(), (short)0, (short)1, (short)user.getHeightCm(), (short)user.getWeightKg());
|
||||
BodyPropertiesSetting bodyPropertiesSetting = new BodyPropertiesSetting(
|
||||
gender,
|
||||
(short)dateOfBirth.getYear(),
|
||||
(short)dateOfBirth.getMonthValue(),
|
||||
(short)dateOfBirth.getDayOfMonth(),
|
||||
(short)user.getHeightCm(),
|
||||
(short)user.getWeightKg()
|
||||
);
|
||||
GoalStepsSetting stepsSetting = new GoalStepsSetting(stepsNotification, user.getStepsGoal());
|
||||
|
||||
b.write(
|
||||
@ -1034,7 +1044,7 @@ public class SonyWena3DeviceSupport extends AbstractBTLEDeviceSupport {
|
||||
sendHomeScreenSettings(builder);
|
||||
break;
|
||||
|
||||
case ActivityUser.PREF_USER_YEAR_OF_BIRTH:
|
||||
case ActivityUser.PREF_USER_DATE_OF_BIRTH:
|
||||
case ActivityUser.PREF_USER_GENDER:
|
||||
case ActivityUser.PREF_USER_HEIGHT_CM:
|
||||
case ActivityUser.PREF_USER_WEIGHT_KG:
|
||||
|
@ -25,15 +25,15 @@ import nodomain.freeyourgadget.gadgetbridge.service.devices.sony.wena3.protocol.
|
||||
public class BodyPropertiesSetting implements Wena3Packetable {
|
||||
public final GenderSetting gender;
|
||||
public final short yearOfBirth;
|
||||
public final short monthOfBirthZeroIndexed;
|
||||
public final short monthOfBirth;
|
||||
public final short dayOfBirth;
|
||||
public final short height;
|
||||
public final short weight;
|
||||
|
||||
public BodyPropertiesSetting(GenderSetting gender, short yearOfBirth, short monthOfBirthZeroIndexed, short dayOfBirth, short height, short weight) {
|
||||
public BodyPropertiesSetting(GenderSetting gender, short yearOfBirth, short monthOfBirth, short dayOfBirth, short height, short weight) {
|
||||
this.gender = gender;
|
||||
this.yearOfBirth = yearOfBirth;
|
||||
this.monthOfBirthZeroIndexed = monthOfBirthZeroIndexed;
|
||||
this.monthOfBirth = monthOfBirth;
|
||||
this.dayOfBirth = dayOfBirth;
|
||||
this.height = height;
|
||||
this.weight = weight;
|
||||
@ -46,7 +46,7 @@ public class BodyPropertiesSetting implements Wena3Packetable {
|
||||
.put((byte) 0x1D)
|
||||
.put((byte) gender.ordinal())
|
||||
.putShort(yearOfBirth)
|
||||
.put((byte) (monthOfBirthZeroIndexed + 1)) // Java uses 0-indexed months
|
||||
.put((byte) monthOfBirth)
|
||||
.put((byte) dayOfBirth)
|
||||
.putShort((short) (height * 10))
|
||||
.putShort((short) (weight * 10))
|
||||
|
@ -29,6 +29,7 @@ import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.ByteOrder;
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
@ -209,7 +210,7 @@ public class XiaomiHealthService extends AbstractXiaomiService {
|
||||
switch (config) {
|
||||
case ActivityUser.PREF_USER_HEIGHT_CM:
|
||||
case ActivityUser.PREF_USER_WEIGHT_KG:
|
||||
case ActivityUser.PREF_USER_YEAR_OF_BIRTH:
|
||||
case ActivityUser.PREF_USER_DATE_OF_BIRTH:
|
||||
case ActivityUser.PREF_USER_GENDER:
|
||||
case ActivityUser.PREF_USER_CALORIES_BURNT:
|
||||
case ActivityUser.PREF_USER_STEPS_GOAL:
|
||||
@ -260,14 +261,14 @@ public class XiaomiHealthService extends AbstractXiaomiService {
|
||||
LOG.debug("Setting user info");
|
||||
|
||||
final ActivityUser activityUser = new ActivityUser();
|
||||
final int birthYear = activityUser.getYearOfBirth();
|
||||
final byte birthMonth = 7; // not in user attributes
|
||||
final byte birthDay = 1; // not in user attributes
|
||||
final LocalDate dateOfBirth = activityUser.getDateOfBirth();
|
||||
final int birthYear = dateOfBirth.getYear();
|
||||
final byte birthMonth = (byte) dateOfBirth.getMonthValue();
|
||||
final byte birthDay = (byte) dateOfBirth.getDayOfMonth();
|
||||
|
||||
final int genderInt = activityUser.getGender() != ActivityUser.GENDER_FEMALE ? GENDER_MALE : GENDER_FEMALE; // TODO other gender?
|
||||
|
||||
final Calendar now = GregorianCalendar.getInstance();
|
||||
final int age = now.get(Calendar.YEAR) - birthYear;
|
||||
final int age = activityUser.getAge();
|
||||
// Compute the approximate max heart rate from the user age
|
||||
// TODO max heart rate should be input by the user
|
||||
int maxHeartRate = (int) Math.round(age <= 40 ? 220 - age : 207 - 0.7 * age);
|
||||
|
@ -21,6 +21,7 @@ import android.util.Log;
|
||||
|
||||
import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalTime;
|
||||
import java.util.Arrays;
|
||||
import java.util.Calendar;
|
||||
@ -212,6 +213,24 @@ public class Prefs {
|
||||
return LocalTime.now();
|
||||
}
|
||||
|
||||
public LocalDate getLocalDate(final String key, final String defaultValue) {
|
||||
final String time = getString(key, defaultValue);
|
||||
|
||||
final DateFormat df = new SimpleDateFormat("yyyy-MM-dd", Locale.ROOT);
|
||||
try {
|
||||
final Date parse = df.parse(time);
|
||||
final Calendar calendar = GregorianCalendar.getInstance();
|
||||
calendar.setTime(parse);
|
||||
|
||||
return LocalDate.of(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
|
||||
} catch (final Exception e) {
|
||||
Log.e(TAG, "Error reading localdate preference value: " + key + "; returning default current day", e); // log the first exception
|
||||
}
|
||||
|
||||
return LocalDate.now();
|
||||
}
|
||||
|
||||
|
||||
private void logReadError(String key, Exception ex) {
|
||||
Log.e(TAG, "Error reading preference value: " + key + "; returning default value", ex); // log the first exception
|
||||
}
|
||||
|
@ -1160,6 +1160,7 @@
|
||||
<string name="waiting_for_reconnect">Waiting for reconnect</string>
|
||||
<string name="activity_prefs_about_you">About you</string>
|
||||
<string name="activity_prefs_goals">Goals</string>
|
||||
<string name="activity_prefs_date_birth">Date of birth</string>
|
||||
<string name="activity_prefs_year_birth">Year of birth</string>
|
||||
<string name="activity_prefs_gender">Gender</string>
|
||||
<string name="activity_prefs_height_cm">Height in cm</string>
|
||||
|
@ -13,13 +13,10 @@
|
||||
app:iconSpaceReserved="false"
|
||||
app:useSimpleSummaryProvider="true" />
|
||||
|
||||
<EditTextPreference
|
||||
<nodomain.freeyourgadget.gadgetbridge.util.XDatePreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:inputType="number"
|
||||
android:key="activity_user_year_of_birth"
|
||||
android:maxLength="4"
|
||||
android:title="@string/activity_prefs_year_birth"
|
||||
app:useSimpleSummaryProvider="true" />
|
||||
android:key="activity_user_date_of_birth"
|
||||
android:title="@string/activity_prefs_date_birth" />
|
||||
|
||||
<ListPreference
|
||||
app:iconSpaceReserved="false"
|
||||
|
Loading…
Reference in New Issue
Block a user