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