Fix disappearing message corner case.
We never properly registered the ExpirationListener, meaning we were relying on the wait-notify loop of ExpirationManager to delete things. This normally works, but fails when your phone goes to sleep. So I properly registered the receiver, and then added a failsafe to re-run the ExpirationManager if we're about to render an expired message. Fixes #7906
This commit is contained in:
parent
42f1baaf61
commit
62c42a3513
4 changed files with 8 additions and 2 deletions
|
@ -526,6 +526,8 @@
|
|||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<receiver android:name=".service.ExpirationListener" />
|
||||
|
||||
|
||||
<provider android:name=".providers.PartProvider"
|
||||
android:grantUriPermissions="true"
|
||||
|
|
|
@ -559,6 +559,10 @@ public class ConversationItem extends LinearLayout
|
|||
this.expirationTimer.setExpirationTime(messageRecord.getExpireStarted(),
|
||||
messageRecord.getExpiresIn());
|
||||
this.expirationTimer.startAnimation();
|
||||
|
||||
if (messageRecord.getExpireStarted() + messageRecord.getExpiresIn() <= System.currentTimeMillis()) {
|
||||
ApplicationContext.getInstance(context).getExpiringMessageManager().checkSchedule();
|
||||
}
|
||||
} else if (!messageRecord.isOutgoing() && !messageRecord.isMediaPending()) {
|
||||
new AsyncTask<Void, Void, Void>() {
|
||||
@Override
|
||||
|
|
|
@ -21,6 +21,6 @@ public class ExpirationListener extends BroadcastReceiver {
|
|||
AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
|
||||
|
||||
alarmManager.cancel(pendingIntent);
|
||||
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + waitTimeMillis, pendingIntent);
|
||||
alarmManager.set(AlarmManager.RTC, System.currentTimeMillis() + waitTimeMillis, pendingIntent);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -46,7 +46,7 @@ public class ExpiringMessageManager {
|
|||
}
|
||||
}
|
||||
|
||||
void checkSchedule() {
|
||||
public void checkSchedule() {
|
||||
synchronized (expiringMessageReferences) {
|
||||
expiringMessageReferences.notifyAll();
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue