1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-06-09 22:57:54 +02:00
Gadgetbridge/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/withingssteelhr/communication/datastructures/Time.java
hrglpfrmpf c1fd0b77ad Support for Withings Steel HR (#2831)
Co-authored-by: hrglpfrmpf <hrglpfrmpf@web.de>
Reviewed-on: https://codeberg.org/Freeyourgadget/Gadgetbridge/pulls/2831
Co-authored-by: hrglpfrmpf <hrglpfrmpf@noreply.codeberg.org>
Co-committed-by: hrglpfrmpf <hrglpfrmpf@noreply.codeberg.org>
2023-07-26 17:20:43 +00:00

103 lines
3.5 KiB
Java

/* Copyright (C) 2021 Frank Ertl
This file is part of Gadgetbridge.
Gadgetbridge is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Gadgetbridge is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
package nodomain.freeyourgadget.gadgetbridge.service.devices.withingssteelhr.communication.datastructures;
import org.threeten.bp.Instant;
import org.threeten.bp.ZoneId;
import org.threeten.bp.zone.ZoneOffsetTransition;
import org.threeten.bp.zone.ZoneRules;
import java.nio.ByteBuffer;
import java.util.Date;
import java.util.TimeZone;
import ch.qos.logback.core.encoder.ByteArrayUtil;
public class Time extends WithingsStructure {
private Instant now;
private int timeOffsetInSeconds;
private Instant nextDaylightSavingTransition;
private int nextDaylightSavingTransitionOffsetInSeconds;
public Time() {
now = Instant.now();
final TimeZone timezone = TimeZone.getDefault();
timeOffsetInSeconds = timezone.getOffset(now.toEpochMilli()) / 1000;
final ZoneId zoneId = ZoneId.systemDefault();
final ZoneRules zoneRules = zoneId.getRules();
final ZoneOffsetTransition nextTransition = zoneRules.nextTransition(Instant.now());
long nextTransitionTs = 0;
if (nextTransition != null) {
nextTransitionTs = nextTransition.getDateTimeBefore().atZone(zoneId).toEpochSecond();
nextDaylightSavingTransitionOffsetInSeconds = nextTransition.getOffsetAfter().getTotalSeconds();
}
nextDaylightSavingTransition = Instant.ofEpochSecond(nextTransitionTs);
}
public Instant getNow() {
return now;
}
public void setNow(Instant now) {
this.now = now;
}
public int getTimeOffsetInSeconds() {
return timeOffsetInSeconds;
}
public void setTimeOffsetInSeconds(int TimeOffsetInSeconds) {
this.timeOffsetInSeconds = TimeOffsetInSeconds;
}
public Instant getNextDaylightSavingTransition() {
return nextDaylightSavingTransition;
}
public void setNextDaylightSavingTransition(Instant nextDaylightSavingTransition) {
this.nextDaylightSavingTransition = nextDaylightSavingTransition;
}
public int getNextDaylightSavingTransitionOffsetInSeconds() {
return nextDaylightSavingTransitionOffsetInSeconds;
}
public void setNextDaylightSavingTransitionOffsetInSeconds(int nextDaylightSavingTransitionOffsetInSeconds) {
this.nextDaylightSavingTransitionOffsetInSeconds = nextDaylightSavingTransitionOffsetInSeconds;
}
@Override
public short getType() {
return WithingsStructureType.TIME;
}
@Override
public short getLength() {
return 20;
}
@Override
protected void fillinTypeSpecificData(ByteBuffer rawDataBuffer) {
rawDataBuffer.putInt((int)now.getEpochSecond());
rawDataBuffer.putInt(timeOffsetInSeconds);
rawDataBuffer.putInt((int)nextDaylightSavingTransition.getEpochSecond());
rawDataBuffer.putInt(nextDaylightSavingTransitionOffsetInSeconds);
}
}