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>
|
</intent-filter>
|
||||||
</receiver>
|
</receiver>
|
||||||
|
|
||||||
|
<receiver android:name=".service.ExpirationListener" />
|
||||||
|
|
||||||
|
|
||||||
<provider android:name=".providers.PartProvider"
|
<provider android:name=".providers.PartProvider"
|
||||||
android:grantUriPermissions="true"
|
android:grantUriPermissions="true"
|
||||||
|
|
|
@ -559,6 +559,10 @@ public class ConversationItem extends LinearLayout
|
||||||
this.expirationTimer.setExpirationTime(messageRecord.getExpireStarted(),
|
this.expirationTimer.setExpirationTime(messageRecord.getExpireStarted(),
|
||||||
messageRecord.getExpiresIn());
|
messageRecord.getExpiresIn());
|
||||||
this.expirationTimer.startAnimation();
|
this.expirationTimer.startAnimation();
|
||||||
|
|
||||||
|
if (messageRecord.getExpireStarted() + messageRecord.getExpiresIn() <= System.currentTimeMillis()) {
|
||||||
|
ApplicationContext.getInstance(context).getExpiringMessageManager().checkSchedule();
|
||||||
|
}
|
||||||
} else if (!messageRecord.isOutgoing() && !messageRecord.isMediaPending()) {
|
} else if (!messageRecord.isOutgoing() && !messageRecord.isMediaPending()) {
|
||||||
new AsyncTask<Void, Void, Void>() {
|
new AsyncTask<Void, Void, Void>() {
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -21,6 +21,6 @@ public class ExpirationListener extends BroadcastReceiver {
|
||||||
AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
|
AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
|
||||||
|
|
||||||
alarmManager.cancel(pendingIntent);
|
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) {
|
synchronized (expiringMessageReferences) {
|
||||||
expiringMessageReferences.notifyAll();
|
expiringMessageReferences.notifyAll();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue