mirror of
https://github.com/oxen-io/session-android.git
synced 2025-08-26 05:58:33 +00:00
Add NotInCallConstraint, restrict auto-download of media and documents when on an active voice or video call.
This commit is contained in:

committed by
Greyson Parrelli

parent
ef95479157
commit
8724d904b7
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -19,6 +19,7 @@ import org.thoughtcrime.securesms.jobmanager.Data;
|
|||||||
import org.thoughtcrime.securesms.jobmanager.Job;
|
import org.thoughtcrime.securesms.jobmanager.Job;
|
||||||
import org.thoughtcrime.securesms.jobmanager.JobLogger;
|
import org.thoughtcrime.securesms.jobmanager.JobLogger;
|
||||||
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint;
|
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint;
|
||||||
|
import org.thoughtcrime.securesms.jobmanager.impl.NotInCallConstraint;
|
||||||
import org.thoughtcrime.securesms.mms.MmsException;
|
import org.thoughtcrime.securesms.mms.MmsException;
|
||||||
import org.thoughtcrime.securesms.util.AttachmentUtil;
|
import org.thoughtcrime.securesms.util.AttachmentUtil;
|
||||||
import org.thoughtcrime.securesms.util.Base64;
|
import org.thoughtcrime.securesms.util.Base64;
|
||||||
|
@@ -15,6 +15,8 @@ import org.thoughtcrime.securesms.jobmanager.impl.ChargingConstraintObserver;
|
|||||||
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint;
|
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint;
|
||||||
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraintObserver;
|
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraintObserver;
|
||||||
import org.thoughtcrime.securesms.jobmanager.impl.NetworkOrCellServiceConstraint;
|
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.SqlCipherMigrationConstraint;
|
||||||
import org.thoughtcrime.securesms.jobmanager.impl.SqlCipherMigrationConstraintObserver;
|
import org.thoughtcrime.securesms.jobmanager.impl.SqlCipherMigrationConstraintObserver;
|
||||||
import org.thoughtcrime.securesms.jobmanager.impl.DecryptionsDrainedConstraint;
|
import org.thoughtcrime.securesms.jobmanager.impl.DecryptionsDrainedConstraint;
|
||||||
@@ -186,6 +188,7 @@ public final class JobManagerFactories {
|
|||||||
put(NetworkOrCellServiceConstraint.LEGACY_KEY, new NetworkOrCellServiceConstraint.Factory(application));
|
put(NetworkOrCellServiceConstraint.LEGACY_KEY, new NetworkOrCellServiceConstraint.Factory(application));
|
||||||
put(SqlCipherMigrationConstraint.KEY, new SqlCipherMigrationConstraint.Factory(application));
|
put(SqlCipherMigrationConstraint.KEY, new SqlCipherMigrationConstraint.Factory(application));
|
||||||
put(DecryptionsDrainedConstraint.KEY, new DecryptionsDrainedConstraint.Factory());
|
put(DecryptionsDrainedConstraint.KEY, new DecryptionsDrainedConstraint.Factory());
|
||||||
|
put(NotInCallConstraint.KEY, new NotInCallConstraint.Factory());
|
||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -194,7 +197,8 @@ public final class JobManagerFactories {
|
|||||||
new ChargingConstraintObserver(application),
|
new ChargingConstraintObserver(application),
|
||||||
new NetworkConstraintObserver(application),
|
new NetworkConstraintObserver(application),
|
||||||
new SqlCipherMigrationConstraintObserver(),
|
new SqlCipherMigrationConstraintObserver(),
|
||||||
new DecryptionsDrainedConstraintObserver());
|
new DecryptionsDrainedConstraintObserver(),
|
||||||
|
new NotInCallConstraintObserver());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<JobMigration> getJobMigrations(@NonNull Application application) {
|
public static List<JobMigration> getJobMigrations(@NonNull Application application) {
|
||||||
|
@@ -16,6 +16,7 @@ import org.thoughtcrime.securesms.attachments.DatabaseAttachment;
|
|||||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||||
import org.thoughtcrime.securesms.database.NoSuchMessageException;
|
import org.thoughtcrime.securesms.database.NoSuchMessageException;
|
||||||
import org.thoughtcrime.securesms.database.model.MessageRecord;
|
import org.thoughtcrime.securesms.database.model.MessageRecord;
|
||||||
|
import org.thoughtcrime.securesms.jobmanager.impl.NotInCallConstraint;
|
||||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@@ -46,9 +47,9 @@ public class AttachmentUtil {
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
} else if (isNonDocumentType(contentType)) {
|
} else if (isNonDocumentType(contentType)) {
|
||||||
return allowedTypes.contains(MediaUtil.getDiscreteMimeType(contentType));
|
return NotInCallConstraint.isNotInConnectedCall() && allowedTypes.contains(MediaUtil.getDiscreteMimeType(contentType));
|
||||||
} else {
|
} else {
|
||||||
return allowedTypes.contains("documents");
|
return NotInCallConstraint.isNotInConnectedCall() && allowedTypes.contains("documents");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user