Track the first time a megaphone appeared.

This commit is contained in:
Greyson Parrelli
2020-01-30 11:33:34 -05:00
parent 22f9bfeceb
commit 9f7b2e2cfd
10 changed files with 67 additions and 26 deletions

View File

@@ -9,7 +9,7 @@ final class ForeverSchedule implements MegaphoneSchedule {
}
@Override
public boolean shouldDisplay(int seenCount, long lastSeen, long currentTime) {
public boolean shouldDisplay(int seenCount, long lastSeen, long firstVisible, long currentTime) {
return enabled;
}
}

View File

@@ -69,6 +69,18 @@ public class MegaphoneRepository {
});
}
@MainThread
public void markVisible(@NonNull Megaphones.Event event) {
long time = System.currentTimeMillis();
executor.execute(() -> {
if (getRecord(event).getFirstVisible() == 0) {
database.markFirstVisible(event, time);
resetDatabaseCache();
}
});
}
@MainThread
public void markSeen(@NonNull Megaphone megaphone) {
long lastSeen = System.currentTimeMillis();

View File

@@ -1,5 +1,5 @@
package org.thoughtcrime.securesms.megaphone;
public interface MegaphoneSchedule {
boolean shouldDisplay(int seenCount, long lastSeen, long currentTime);
boolean shouldDisplay(int seenCount, long lastSeen, long firstVisible, long currentTime);
}

View File

@@ -45,7 +45,7 @@ public final class Megaphones {
MegaphoneRecord record = Objects.requireNonNull(records.get(e.getKey()));
MegaphoneSchedule schedule = e.getValue();
return !record.isFinished() && schedule.shouldDisplay(record.getSeenCount(), record.getLastSeen(), currentTime);
return !record.isFinished() && schedule.shouldDisplay(record.getSeenCount(), record.getLastSeen(), record.getFirstVisible(), currentTime);
})
.map(Map.Entry::getKey)
.map(records::get)

View File

@@ -9,7 +9,7 @@ class RecurringSchedule implements MegaphoneSchedule {
}
@Override
public boolean shouldDisplay(int seenCount, long lastSeen, long currentTime) {
public boolean shouldDisplay(int seenCount, long lastSeen, long firstVisible, long currentTime) {
if (seenCount == 0) {
return true;
}