Add NotInCallConstraint, restrict auto-download of media and documents when on an active voice or video call.

fork-5.53.8
Alex Hart 2021-01-12 16:01:31 -04:00 zatwierdzone przez Greyson Parrelli
rodzic ef95479157
commit 8724d904b7
5 zmienionych plików z 89 dodań i 3 usunięć

Wyświetl plik

@ -0,0 +1,43 @@
package org.thoughtcrime.securesms.jobmanager.impl;
import android.app.job.JobInfo;
import androidx.annotation.NonNull;
import org.greenrobot.eventbus.EventBus;
import org.thoughtcrime.securesms.events.WebRtcViewModel;
import org.thoughtcrime.securesms.jobmanager.Constraint;
/**
* Constraint met when the user is not in an active, connected call.
*/
public final class NotInCallConstraint implements Constraint {
public static final String KEY = "NotInCallConstraint";
@Override
public boolean isMet() {
return isNotInConnectedCall();
}
@Override
public @NonNull String getFactoryKey() {
return KEY;
}
public static boolean isNotInConnectedCall() {
WebRtcViewModel viewModel = EventBus.getDefault().getStickyEvent(WebRtcViewModel.class);
return viewModel == null || viewModel.getState() != WebRtcViewModel.State.CALL_CONNECTED;
}
@Override
public void applyToJobInfo(@NonNull JobInfo.Builder jobInfoBuilder) {
}
public static class Factory implements Constraint.Factory<NotInCallConstraint> {
@Override
public NotInCallConstraint create() {
return new NotInCallConstraint();
}
}
}

Wyświetl plik

@ -0,0 +1,37 @@
package org.thoughtcrime.securesms.jobmanager.impl;
import androidx.annotation.NonNull;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import org.thoughtcrime.securesms.events.WebRtcViewModel;
import org.thoughtcrime.securesms.jobmanager.ConstraintObserver;
public final class NotInCallConstraintObserver implements ConstraintObserver {
private static final String REASON = NotInCallConstraintObserver.class.getSimpleName();
@Override
public void register(@NonNull Notifier notifier) {
EventBus.getDefault().register(new EventBusListener(notifier));
}
private static final class EventBusListener {
private final Notifier notifier;
private EventBusListener(@NonNull Notifier notifier) {
this.notifier = notifier;
}
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void consume(@NonNull WebRtcViewModel viewModel) {
NotInCallConstraint constraint = new NotInCallConstraint.Factory().create();
if (constraint.isMet()) {
notifier.onConstraintMet(REASON);
}
}
}
}

Wyświetl plik

@ -19,6 +19,7 @@ import org.thoughtcrime.securesms.jobmanager.Data;
import org.thoughtcrime.securesms.jobmanager.Job;
import org.thoughtcrime.securesms.jobmanager.JobLogger;
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint;
import org.thoughtcrime.securesms.jobmanager.impl.NotInCallConstraint;
import org.thoughtcrime.securesms.mms.MmsException;
import org.thoughtcrime.securesms.util.AttachmentUtil;
import org.thoughtcrime.securesms.util.Base64;

Wyświetl plik

@ -15,6 +15,8 @@ import org.thoughtcrime.securesms.jobmanager.impl.ChargingConstraintObserver;
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint;
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraintObserver;
import org.thoughtcrime.securesms.jobmanager.impl.NetworkOrCellServiceConstraint;
import org.thoughtcrime.securesms.jobmanager.impl.NotInCallConstraint;
import org.thoughtcrime.securesms.jobmanager.impl.NotInCallConstraintObserver;
import org.thoughtcrime.securesms.jobmanager.impl.SqlCipherMigrationConstraint;
import org.thoughtcrime.securesms.jobmanager.impl.SqlCipherMigrationConstraintObserver;
import org.thoughtcrime.securesms.jobmanager.impl.DecryptionsDrainedConstraint;
@ -186,6 +188,7 @@ public final class JobManagerFactories {
put(NetworkOrCellServiceConstraint.LEGACY_KEY, new NetworkOrCellServiceConstraint.Factory(application));
put(SqlCipherMigrationConstraint.KEY, new SqlCipherMigrationConstraint.Factory(application));
put(DecryptionsDrainedConstraint.KEY, new DecryptionsDrainedConstraint.Factory());
put(NotInCallConstraint.KEY, new NotInCallConstraint.Factory());
}};
}
@ -194,7 +197,8 @@ public final class JobManagerFactories {
new ChargingConstraintObserver(application),
new NetworkConstraintObserver(application),
new SqlCipherMigrationConstraintObserver(),
new DecryptionsDrainedConstraintObserver());
new DecryptionsDrainedConstraintObserver(),
new NotInCallConstraintObserver());
}
public static List<JobMigration> getJobMigrations(@NonNull Application application) {

Wyświetl plik

@ -16,6 +16,7 @@ import org.thoughtcrime.securesms.attachments.DatabaseAttachment;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.NoSuchMessageException;
import org.thoughtcrime.securesms.database.model.MessageRecord;
import org.thoughtcrime.securesms.jobmanager.impl.NotInCallConstraint;
import org.thoughtcrime.securesms.recipients.Recipient;
import java.util.Collections;
@ -46,9 +47,9 @@ public class AttachmentUtil {
{
return true;
} else if (isNonDocumentType(contentType)) {
return allowedTypes.contains(MediaUtil.getDiscreteMimeType(contentType));
return NotInCallConstraint.isNotInConnectedCall() && allowedTypes.contains(MediaUtil.getDiscreteMimeType(contentType));
} else {
return allowedTypes.contains("documents");
return NotInCallConstraint.isNotInConnectedCall() && allowedTypes.contains("documents");
}
}