diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 2c856ae1a..70c76c01b 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -313,8 +313,6 @@ - - () { @Override protected Void doInBackground(Void... params) { - DatabaseFactory.getRecipientDatabase(context).setColor(recipient, selectedColor); +// DatabaseFactory.getRecipientDatabase(context).setColor(recipient, selectedColor); // if (recipient.resolve().getRegistered() == RecipientDatabase.RegisteredState.REGISTERED) { // ApplicationContext.getInstance(context) diff --git a/src/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java b/src/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java index 7e37005ab..b7e1ac38c 100644 --- a/src/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java +++ b/src/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java @@ -1,23 +1,15 @@ +// called when the user click the "clear" or "mark read" button in the system notification + package org.thoughtcrime.securesms.notifications; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.AsyncTask; -import android.support.annotation.NonNull; import android.support.v4.app.NotificationManagerCompat; -import org.thoughtcrime.securesms.ApplicationContext; import org.thoughtcrime.securesms.connect.ApplicationDcContext; import org.thoughtcrime.securesms.connect.DcHelper; -import org.thoughtcrime.securesms.database.DatabaseFactory; -import org.thoughtcrime.securesms.database.MessagingDatabase.ExpirationInfo; -import org.thoughtcrime.securesms.database.MessagingDatabase.MarkedMessageInfo; -import org.thoughtcrime.securesms.database.MessagingDatabase.SyncMessageId; -import org.thoughtcrime.securesms.service.ExpiringMessageManager; - -import java.util.LinkedList; -import java.util.List; public class MarkReadReceiver extends BroadcastReceiver { @@ -40,46 +32,4 @@ public class MarkReadReceiver extends BroadcastReceiver { new MarkAsNoticedAsyncTask(threadIds, dcContext, true).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } } - - public static void process(@NonNull Context context, @NonNull int[] markedReadMessages) { - - } - - public static void process(@NonNull Context context, @NonNull List markedReadMessages) { - if (markedReadMessages.isEmpty()) return; - - List syncMessageIds = new LinkedList<>(); - - for (MarkedMessageInfo messageInfo : markedReadMessages) { - scheduleDeletion(context, messageInfo.getExpirationInfo()); - syncMessageIds.add(messageInfo.getSyncMessageId()); - } - -// ApplicationContext.getInstance(context) -// .getJobManager() -// .add(new MultiDeviceReadUpdateJob(context, syncMessageIds)); - -// Map> addressMap = Stream.of(markedReadMessages) -// .map(MarkedMessageInfo::getSyncMessageId) -// .collect(Collectors.groupingBy(SyncMessageId::getAddress)); -// -// for (Address address : addressMap.keySet()) { -// List timestamps = Stream.of(addressMap.get(address)).map(SyncMessageId::getTimetamp).toList(); -// -// ApplicationContext.getInstance(context) -// .getJobManager() -// .add(new SendReadReceiptJob(context, address, timestamps)); -// } - } - - private static void scheduleDeletion(Context context, ExpirationInfo expirationInfo) { - if (expirationInfo.getExpiresIn() > 0 && expirationInfo.getExpireStarted() <= 0) { - ExpiringMessageManager expirationManager = ApplicationContext.getInstance(context).getExpiringMessageManager(); - - if (expirationInfo.isMms()) DatabaseFactory.getMmsDatabase(context).markExpireStarted(expirationInfo.getId()); - else DatabaseFactory.getSmsDatabase(context).markExpireStarted(expirationInfo.getId()); - - expirationManager.scheduleDeletion(expirationInfo.getId(), expirationInfo.isMms(), expirationInfo.getExpiresIn()); - } - } } diff --git a/src/org/thoughtcrime/securesms/service/ExpirationListener.java b/src/org/thoughtcrime/securesms/service/ExpirationListener.java deleted file mode 100644 index 4a83707dd..000000000 --- a/src/org/thoughtcrime/securesms/service/ExpirationListener.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.thoughtcrime.securesms.service; - -import android.app.AlarmManager; -import android.app.PendingIntent; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; - -import org.thoughtcrime.securesms.ApplicationContext; - -public class ExpirationListener extends BroadcastReceiver { - - @Override - public void onReceive(Context context, Intent intent) { - ApplicationContext.getInstance(context).getExpiringMessageManager().checkSchedule(); - } - - public static void setAlarm(Context context, long waitTimeMillis) { - Intent intent = new Intent(context, ExpirationListener.class); - PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0); - AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); - - alarmManager.cancel(pendingIntent); - alarmManager.set(AlarmManager.RTC, System.currentTimeMillis() + waitTimeMillis, pendingIntent); - } -} diff --git a/src/org/thoughtcrime/securesms/service/ExpiringMessageManager.java b/src/org/thoughtcrime/securesms/service/ExpiringMessageManager.java deleted file mode 100644 index b43cf0e7d..000000000 --- a/src/org/thoughtcrime/securesms/service/ExpiringMessageManager.java +++ /dev/null @@ -1,152 +0,0 @@ -package org.thoughtcrime.securesms.service; - -import android.content.Context; -import android.util.Log; - -import org.thoughtcrime.securesms.database.DatabaseFactory; -import org.thoughtcrime.securesms.database.MmsDatabase; -import org.thoughtcrime.securesms.database.SmsDatabase; -import org.thoughtcrime.securesms.database.model.MessageRecord; - -import java.util.Comparator; -import java.util.TreeSet; -import java.util.concurrent.Executor; -import java.util.concurrent.Executors; - -public class ExpiringMessageManager { - - private static final String TAG = ExpiringMessageManager.class.getSimpleName(); - - private final TreeSet expiringMessageReferences = new TreeSet<>(new ExpiringMessageComparator()); - private final Executor executor = Executors.newSingleThreadExecutor(); - - private final SmsDatabase smsDatabase; - private final MmsDatabase mmsDatabase; - private final Context context; - - public ExpiringMessageManager(Context context) { - this.context = context.getApplicationContext(); - this.smsDatabase = DatabaseFactory.getSmsDatabase(context); - this.mmsDatabase = DatabaseFactory.getMmsDatabase(context); - - executor.execute(new LoadTask()); - executor.execute(new ProcessTask()); - } - - public void scheduleDeletion(long id, boolean mms, long expiresInMillis) { - scheduleDeletion(id, mms, System.currentTimeMillis(), expiresInMillis); - } - - public void scheduleDeletion(long id, boolean mms, long startedAtTimestamp, long expiresInMillis) { - long expiresAtMillis = startedAtTimestamp + expiresInMillis; - - synchronized (expiringMessageReferences) { - expiringMessageReferences.add(new ExpiringMessageReference(id, mms, expiresAtMillis)); - expiringMessageReferences.notifyAll(); - } - } - - public void checkSchedule() { - synchronized (expiringMessageReferences) { - expiringMessageReferences.notifyAll(); - } - } - - private class LoadTask implements Runnable { - public void run() { - SmsDatabase.Reader smsReader = smsDatabase.readerFor(smsDatabase.getExpirationStartedMessages()); - MmsDatabase.Reader mmsReader = mmsDatabase.getExpireStartedMessages(); - - MessageRecord messageRecord; - - while ((messageRecord = smsReader.getNext()) != null) { - expiringMessageReferences.add(new ExpiringMessageReference(messageRecord.getId(), - messageRecord.isMms(), - messageRecord.getExpireStarted() + messageRecord.getExpiresIn())); - } - - while ((messageRecord = mmsReader.getNext()) != null) { - expiringMessageReferences.add(new ExpiringMessageReference(messageRecord.getId(), - messageRecord.isMms(), - messageRecord.getExpireStarted() + messageRecord.getExpiresIn())); - } - - smsReader.close(); - mmsReader.close(); - } - } - - @SuppressWarnings("InfiniteLoopStatement") - private class ProcessTask implements Runnable { - public void run() { - while (true) { - ExpiringMessageReference expiredMessage = null; - - synchronized (expiringMessageReferences) { - try { - while (expiringMessageReferences.isEmpty()) expiringMessageReferences.wait(); - - ExpiringMessageReference nextReference = expiringMessageReferences.first(); - long waitTime = nextReference.expiresAtMillis - System.currentTimeMillis(); - - if (waitTime > 0) { - ExpirationListener.setAlarm(context, waitTime); - expiringMessageReferences.wait(waitTime); - } else { - expiredMessage = nextReference; - expiringMessageReferences.remove(nextReference); - } - - } catch (InterruptedException e) { - Log.w(TAG, e); - } - } - - if (expiredMessage != null) { - if (expiredMessage.mms) mmsDatabase.delete(expiredMessage.id); - else smsDatabase.deleteMessage(expiredMessage.id); - } - } - } - } - - private static class ExpiringMessageReference { - private final long id; - private final boolean mms; - private final long expiresAtMillis; - - private ExpiringMessageReference(long id, boolean mms, long expiresAtMillis) { - this.id = id; - this.mms = mms; - this.expiresAtMillis = expiresAtMillis; - } - - @Override - public boolean equals(Object other) { - if (other == null) return false; - if (!(other instanceof ExpiringMessageReference)) return false; - - ExpiringMessageReference that = (ExpiringMessageReference)other; - return this.id == that.id && this.mms == that.mms && this.expiresAtMillis == that.expiresAtMillis; - } - - @Override - public int hashCode() { - return (int)this.id ^ (mms ? 1 : 0) ^ (int)expiresAtMillis; - } - } - - private static class ExpiringMessageComparator implements Comparator { - @Override - public int compare(ExpiringMessageReference lhs, ExpiringMessageReference rhs) { - if (lhs.expiresAtMillis < rhs.expiresAtMillis) return -1; - else if (lhs.expiresAtMillis > rhs.expiresAtMillis) return 1; - else if (lhs.id < rhs.id) return -1; - else if (lhs.id > rhs.id) return 1; - else if (!lhs.mms && rhs.mms) return -1; - else if (lhs.mms && !rhs.mms) return 1; - else return 0; - } - } - -}