Remove system call triggering location request.

This commit is contained in:
Cody Henthorne 2026-05-22 14:00:31 -04:00 committed by Michelle Tang
parent 71967b278e
commit ed73dc2c24
3 changed files with 6 additions and 174 deletions

View File

@ -1,106 +0,0 @@
package org.thoughtcrime.securesms.jobmanager.impl;
import android.app.Application;
import android.os.Build;
import android.os.Handler;
import android.os.HandlerThread;
import android.telephony.PhoneStateListener;
import android.telephony.ServiceState;
import android.telephony.TelephonyCallback;
import android.telephony.TelephonyManager;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import org.signal.core.util.concurrent.SignalExecutors;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.jobmanager.ConstraintObserver;
import org.signal.core.util.ServiceUtil;
public class CellServiceConstraintObserver implements ConstraintObserver {
private static final String TAG = Log.tag(CellServiceConstraintObserver.class);
private static final String REASON = Log.tag(CellServiceConstraintObserver.class);
private volatile Notifier notifier;
private volatile ServiceState lastKnownState;
private static volatile CellServiceConstraintObserver instance;
public static CellServiceConstraintObserver getInstance(@NonNull Application application) {
if (instance == null) {
synchronized (CellServiceConstraintObserver.class) {
if (instance == null) {
instance = new CellServiceConstraintObserver(application);
}
}
}
return instance;
}
private CellServiceConstraintObserver(@NonNull Application application) {
TelephonyManager telephonyManager = ServiceUtil.getTelephonyManager(application);
LegacyServiceStateListener serviceStateListener = new LegacyServiceStateListener();
if (Build.VERSION.SDK_INT >= 31) {
telephonyManager.registerTelephonyCallback(SignalExecutors.BOUNDED, new ServiceStateListenerApi31());
} else {
HandlerThread handlerThread = SignalExecutors.getAndStartHandlerThread("CellServiceConstraintObserver", Thread.NORM_PRIORITY);
Handler handler = new Handler(handlerThread.getLooper());
handler.post(() -> {
telephonyManager.listen(serviceStateListener, PhoneStateListener.LISTEN_SERVICE_STATE);
});
}
}
@Override
public void register(@NonNull Notifier notifier) {
this.notifier = notifier;
}
public boolean hasService() {
return lastKnownState != null && lastKnownState.getState() == ServiceState.STATE_IN_SERVICE;
}
@RequiresApi(31)
private class ServiceStateListenerApi31 extends TelephonyCallback implements TelephonyCallback.ServiceStateListener {
@Override
public void onServiceStateChanged(@NonNull ServiceState serviceState) {
lastKnownState = serviceState;
if (serviceState.getState() == ServiceState.STATE_IN_SERVICE) {
Log.i(TAG, "[API " + Build.VERSION.SDK_INT + "] Cell service available.");
if (notifier != null) {
notifier.onConstraintMet(REASON);
}
} else {
Log.w(TAG, "[API " + Build.VERSION.SDK_INT + "] Cell service unavailable. State: " + serviceState.getState());
}
}
}
private class LegacyServiceStateListener extends PhoneStateListener {
LegacyServiceStateListener() {
super();
}
@Override
public void onServiceStateChanged(ServiceState serviceState) {
lastKnownState = serviceState;
if (serviceState.getState() == ServiceState.STATE_IN_SERVICE) {
Log.i(TAG, "[API " + Build.VERSION.SDK_INT + "] Cell service available.");
if (notifier != null) {
notifier.onConstraintMet(REASON);
}
} else {
Log.w(TAG, "[API " + Build.VERSION.SDK_INT + "] Cell service unavailable. State: " + serviceState.getState());
}
}
}
}

View File

@ -1,59 +0,0 @@
package org.thoughtcrime.securesms.jobmanager.impl;
import android.app.Application;
import android.app.job.JobInfo;
import androidx.annotation.NonNull;
import org.thoughtcrime.securesms.jobmanager.Constraint;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
public class NetworkOrCellServiceConstraint implements Constraint {
public static final String KEY = "NetworkOrCellServiceConstraint";
public static final String LEGACY_KEY = "CellServiceConstraint";
private final Application application;
private final NetworkConstraint networkConstraint;
private NetworkOrCellServiceConstraint(@NonNull Application application) {
this.application = application;
this.networkConstraint = new NetworkConstraint.Factory(application).create();
}
@Override
public @NonNull String getFactoryKey() {
return KEY;
}
@Override
public boolean isMet() {
if (SignalStore.settings().isWifiCallingCompatibilityModeEnabled()) {
return networkConstraint.isMet() || hasCellService(application);
} else {
return hasCellService(application);
}
}
@Override
public void applyToJobInfo(@NonNull JobInfo.Builder jobInfoBuilder) {
}
private static boolean hasCellService(@NonNull Application application) {
return CellServiceConstraintObserver.getInstance(application).hasService();
}
public static class Factory implements Constraint.Factory<NetworkOrCellServiceConstraint> {
private final Application application;
public Factory(@NonNull Application application) {
this.application = application;
}
@Override
public NetworkOrCellServiceConstraint create() {
return new NetworkOrCellServiceConstraint(application);
}
}
}

View File

@ -13,10 +13,8 @@ import org.thoughtcrime.securesms.jobmanager.impl.AutoDownloadEmojiConstraint;
import org.thoughtcrime.securesms.jobmanager.impl.BackupMessagesConstraint;
import org.thoughtcrime.securesms.jobmanager.impl.BackupMessagesConstraintObserver;
import org.thoughtcrime.securesms.jobmanager.impl.BatteryNotLowConstraint;
import org.thoughtcrime.securesms.jobmanager.impl.CellServiceConstraintObserver;
import org.thoughtcrime.securesms.jobmanager.impl.ChangeNumberConstraint;
import org.thoughtcrime.securesms.jobmanager.impl.ChangeNumberConstraintObserver;
import org.thoughtcrime.securesms.jobmanager.impl.SealedSenderConstraint;
import org.thoughtcrime.securesms.jobmanager.impl.ChargingAndBatteryIsNotLowConstraintObserver;
import org.thoughtcrime.securesms.jobmanager.impl.ChargingConstraint;
import org.thoughtcrime.securesms.jobmanager.impl.DataRestoreConstraint;
@ -27,13 +25,13 @@ import org.thoughtcrime.securesms.jobmanager.impl.DeletionNotAwaitingMediaDownlo
import org.thoughtcrime.securesms.jobmanager.impl.DiskSpaceNotLowConstraint;
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.NoRemoteArchiveGarbageCollectionPendingConstraint;
import org.thoughtcrime.securesms.jobmanager.impl.NotInCallConstraint;
import org.thoughtcrime.securesms.jobmanager.impl.NotInCallConstraintObserver;
import org.thoughtcrime.securesms.jobmanager.impl.RegisteredConstraint;
import org.thoughtcrime.securesms.jobmanager.impl.RestoreAttachmentConstraint;
import org.thoughtcrime.securesms.jobmanager.impl.RestoreAttachmentConstraintObserver;
import org.thoughtcrime.securesms.jobmanager.impl.SealedSenderConstraint;
import org.thoughtcrime.securesms.jobmanager.impl.StickersNotDownloadingConstraint;
import org.thoughtcrime.securesms.jobmanager.impl.WifiConstraint;
import org.thoughtcrime.securesms.jobmanager.migrations.DeprecatedJobMigration;
@ -91,16 +89,16 @@ import org.thoughtcrime.securesms.migrations.ProfileSharingUpdateMigrationJob;
import org.thoughtcrime.securesms.migrations.QuoteThumbnailBackfillMigrationJob;
import org.thoughtcrime.securesms.migrations.RebuildMessageSearchIndexMigrationJob;
import org.thoughtcrime.securesms.migrations.RecheckPaymentsMigrationJob;
import org.thoughtcrime.securesms.migrations.ReleaseChannelRecipientFixMigrationJob;
import org.thoughtcrime.securesms.migrations.RecipientSearchMigrationJob;
import org.thoughtcrime.securesms.migrations.ReleaseChannelRecipientFixMigrationJob;
import org.thoughtcrime.securesms.migrations.ResetArchiveTierMigrationJob;
import org.thoughtcrime.securesms.migrations.ResetKeyTransparencyMigrationJob;
import org.thoughtcrime.securesms.migrations.SelfRegisteredStateMigrationJob;
import org.thoughtcrime.securesms.migrations.StickerAdditionMigrationJob;
import org.thoughtcrime.securesms.migrations.StickerDayByDayMigrationJob;
import org.thoughtcrime.securesms.migrations.StickerPackAddition2MigrationJob;
import org.thoughtcrime.securesms.migrations.StickerLaunchMigrationJob;
import org.thoughtcrime.securesms.migrations.StickerMyDailyLifeMigrationJob;
import org.thoughtcrime.securesms.migrations.StickerPackAddition2MigrationJob;
import org.thoughtcrime.securesms.migrations.StorageCapabilityMigrationJob;
import org.thoughtcrime.securesms.migrations.StorageFixLocalUnknownMigrationJob;
import org.thoughtcrime.securesms.migrations.StorageServiceMigrationJob;
@ -450,8 +448,8 @@ public final class JobManagerFactories {
put(DeletionNotAwaitingMediaDownloadConstraint.KEY, new DeletionNotAwaitingMediaDownloadConstraint.Factory());
put(DiskSpaceNotLowConstraint.KEY, new DiskSpaceNotLowConstraint.Factory());
put(NetworkConstraint.KEY, new NetworkConstraint.Factory(application));
put(NetworkOrCellServiceConstraint.KEY, new NetworkOrCellServiceConstraint.Factory(application));
put(NetworkOrCellServiceConstraint.LEGACY_KEY, new NetworkOrCellServiceConstraint.Factory(application));
put("NetworkOrCellServiceConstraint", new NetworkConstraint.Factory(application));
put("CellServiceConstraint", new NetworkConstraint.Factory(application));
put(NotInCallConstraint.KEY, new NotInCallConstraint.Factory());
put(RegisteredConstraint.KEY, new RegisteredConstraint.Factory());
put(RestoreAttachmentConstraint.KEY, new RestoreAttachmentConstraint.Factory(application));
@ -462,8 +460,7 @@ public final class JobManagerFactories {
}
public static List<ConstraintObserver> getConstraintObservers(@NonNull Application application) {
return Arrays.asList(CellServiceConstraintObserver.getInstance(application),
new ChargingAndBatteryIsNotLowConstraintObserver(application),
return Arrays.asList(new ChargingAndBatteryIsNotLowConstraintObserver(application),
new NetworkConstraintObserver(application),
new DecryptionsDrainedConstraintObserver(),
new NotInCallConstraintObserver(),