EntityTimeManager.java

 1package eu.siacs.conversations.xmpp.manager;
 2
 3import android.content.Context;
 4import eu.siacs.conversations.AppSettings;
 5import eu.siacs.conversations.generator.AbstractGenerator;
 6import eu.siacs.conversations.services.XmppConnectionService;
 7import eu.siacs.conversations.xmpp.XmppConnection;
 8import im.conversations.android.xmpp.model.error.Condition;
 9import im.conversations.android.xmpp.model.error.Error;
10import im.conversations.android.xmpp.model.stanza.Iq;
11import im.conversations.android.xmpp.model.time.Time;
12import java.util.Locale;
13import java.util.TimeZone;
14
15public class EntityTimeManager extends AbstractManager {
16
17    public EntityTimeManager(XmppConnectionService context, XmppConnection connection) {
18        super(context, connection);
19    }
20
21    public void request(final Iq request) {
22        final var appSettings = new AppSettings(this.context);
23        if (appSettings.isUseTor() || getAccount().isOnion()) {
24            this.connection.sendErrorFor(request, Error.Type.AUTH, new Condition.Forbidden());
25            return;
26        }
27        final var time = new Time();
28        final long now = System.currentTimeMillis();
29        time.setUniversalTime(AbstractGenerator.getTimestamp(now));
30        final TimeZone ourTimezone = TimeZone.getDefault();
31        final long offsetSeconds = ourTimezone.getOffset(now) / 1000;
32        final long offsetMinutes = Math.abs((offsetSeconds % 3600) / 60);
33        final long offsetHours = offsetSeconds / 3600;
34        final String hours;
35        if (offsetHours < 0) {
36            hours = String.format(Locale.US, "%03d", offsetHours);
37        } else {
38            hours = String.format(Locale.US, "%02d", offsetHours);
39        }
40        String minutes = String.format(Locale.US, "%02d", offsetMinutes);
41        time.setTimeZoneOffset(hours + ":" + minutes);
42        this.connection.sendResultFor(request, time);
43    }
44}