From 4b1c5dfce2f7a7a30827947f4e3a05c1213f585b Mon Sep 17 00:00:00 2001 From: Niels Andriesse Date: Tue, 4 Jun 2019 11:45:29 +1000 Subject: [PATCH] Quick fix compilation issues --- .../SignalCommunicationModule.java | 2 +- .../securesms/jobs/AttachmentUploadJob.java | 2 +- .../securesms/jobs/PushDecryptJob.java | 2 +- .../mms/AttachmentStreamLocalUriFetcher.java | 2 +- .../securesms/util/RealtimeSleepTimer.java | 89 +++++++++++++++++++ 5 files changed, 93 insertions(+), 4 deletions(-) create mode 100644 src/org/thoughtcrime/securesms/util/RealtimeSleepTimer.java diff --git a/src/org/thoughtcrime/securesms/dependencies/SignalCommunicationModule.java b/src/org/thoughtcrime/securesms/dependencies/SignalCommunicationModule.java index 0b3d82c796..9fecccd64f 100644 --- a/src/org/thoughtcrime/securesms/dependencies/SignalCommunicationModule.java +++ b/src/org/thoughtcrime/securesms/dependencies/SignalCommunicationModule.java @@ -46,13 +46,13 @@ import org.thoughtcrime.securesms.push.SecurityEventListener; import org.thoughtcrime.securesms.push.SignalServiceNetworkAccess; import org.thoughtcrime.securesms.service.IncomingMessageObserver; import org.thoughtcrime.securesms.service.WebRtcCallService; +import org.thoughtcrime.securesms.util.RealtimeSleepTimer; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceAccountManager; import org.whispersystems.signalservice.api.SignalServiceMessageReceiver; import org.whispersystems.signalservice.api.SignalServiceMessageSender; import org.whispersystems.signalservice.api.util.CredentialsProvider; -import org.whispersystems.signalservice.api.util.RealtimeSleepTimer; import org.whispersystems.signalservice.api.util.SleepTimer; import org.whispersystems.signalservice.api.util.UptimeSleepTimer; import org.whispersystems.signalservice.api.websocket.ConnectivityListener; diff --git a/src/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java b/src/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java index c9866c390a..8157ae06d5 100644 --- a/src/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java +++ b/src/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java @@ -85,7 +85,7 @@ public class AttachmentUploadJob extends BaseJob implements InjectableType { MediaConstraints mediaConstraints = MediaConstraints.getPushMediaConstraints(); Attachment scaledAttachment = scaleAndStripExif(database, mediaConstraints, databaseAttachment); SignalServiceAttachment localAttachment = getAttachmentFor(scaledAttachment); - SignalServiceAttachmentPointer remoteAttachment = messageSender.uploadAttachment(localAttachment.asStream()); + SignalServiceAttachmentPointer remoteAttachment = messageSender.uploadAttachment(localAttachment.asStream(), false); Attachment attachment = PointerAttachment.forPointer(Optional.of(remoteAttachment)).get(); database.updateAttachmentAfterUpload(databaseAttachment.getAttachmentId(), attachment); diff --git a/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java b/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java index 388f1ee9eb..ebfc17d8a7 100644 --- a/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java +++ b/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java @@ -106,7 +106,7 @@ import org.whispersystems.signalservice.api.messages.multidevice.VerifiedMessage import org.whispersystems.signalservice.api.messages.shared.SharedContact; import org.whispersystems.signalservice.api.push.SignalServiceAddress; import org.whispersystems.signalservice.loki.crypto.LokiServiceCipher; -import org.whispersystems.signalservice.loki.messages.LokiServiceMessage; +import org.whispersystems.signalservice.loki.messaging.LokiServiceMessage; import java.security.MessageDigest; import java.util.ArrayList; diff --git a/src/org/thoughtcrime/securesms/mms/AttachmentStreamLocalUriFetcher.java b/src/org/thoughtcrime/securesms/mms/AttachmentStreamLocalUriFetcher.java index 8475761428..53056eef3c 100644 --- a/src/org/thoughtcrime/securesms/mms/AttachmentStreamLocalUriFetcher.java +++ b/src/org/thoughtcrime/securesms/mms/AttachmentStreamLocalUriFetcher.java @@ -37,7 +37,7 @@ class AttachmentStreamLocalUriFetcher implements DataFetcher { public void loadData(Priority priority, DataCallback callback) { try { if (!digest.isPresent()) throw new InvalidMessageException("No attachment digest!"); - is = AttachmentCipherInputStream.createFor(attachment, plaintextLength, key, digest.get()); + is = AttachmentCipherInputStream.createForAttachment(attachment, plaintextLength, key, digest.get()); callback.onDataReady(is); } catch (IOException | InvalidMessageException e) { callback.onLoadFailed(e); diff --git a/src/org/thoughtcrime/securesms/util/RealtimeSleepTimer.java b/src/org/thoughtcrime/securesms/util/RealtimeSleepTimer.java new file mode 100644 index 0000000000..99e244e8dd --- /dev/null +++ b/src/org/thoughtcrime/securesms/util/RealtimeSleepTimer.java @@ -0,0 +1,89 @@ +package org.thoughtcrime.securesms.util; + +import android.app.AlarmManager; +import android.app.PendingIntent; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.Build; +import android.os.SystemClock; +import android.util.Log; + +import org.whispersystems.signalservice.api.util.SleepTimer; + +import java.util.concurrent.TimeUnit; + +/** + * A sleep timer that is based on elapsed realtime, so + * that it works properly, even in low-power sleep modes. + * + */ +public class RealtimeSleepTimer implements SleepTimer { + private static final String TAG = RealtimeSleepTimer.class.getSimpleName(); + + private final AlarmReceiver alarmReceiver; + private final Context context; + + public RealtimeSleepTimer(Context context) { + this.context = context; + alarmReceiver = new RealtimeSleepTimer.AlarmReceiver(); + } + + @Override + public void sleep(long millis) { + context.registerReceiver(alarmReceiver, + new IntentFilter(AlarmReceiver.WAKE_UP_THREAD_ACTION)); + + final long startTime = System.currentTimeMillis(); + alarmReceiver.setAlarm(millis); + + while (System.currentTimeMillis() - startTime < millis) { + try { + synchronized (this) { + wait(millis - System.currentTimeMillis() + startTime); + } + } catch (InterruptedException e) { + Log.w(TAG, e); + } + } + + context.unregisterReceiver(alarmReceiver); + } + + private class AlarmReceiver extends BroadcastReceiver { + private static final String WAKE_UP_THREAD_ACTION = "org.whispersystems.signalservice.api.util.RealtimeSleepTimer.AlarmReceiver.WAKE_UP_THREAD"; + + private void setAlarm(long millis) { + final Intent intent = new Intent(WAKE_UP_THREAD_ACTION); + final PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0); + final AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); + + Log.w(TAG, "Setting alarm to wake up in " + millis + "ms."); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + alarmManager.setExactAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP, + SystemClock.elapsedRealtime() + millis, + pendingIntent); + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, + SystemClock.elapsedRealtime() + millis, + pendingIntent); + } else { + alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, + SystemClock.elapsedRealtime() + millis, + pendingIntent); + } + } + + @Override + public void onReceive(Context context, Intent intent) { + Log.w(TAG, "Waking up."); + + synchronized (RealtimeSleepTimer.this) { + RealtimeSleepTimer.this.notifyAll(); + } + } + } +} +