mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-22 01:40:07 +01:00
Add a charging constraint to the backup job.
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
package org.thoughtcrime.securesms.jobmanager.impl;
|
||||
|
||||
import android.app.job.JobInfo;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
||||
import org.thoughtcrime.securesms.jobmanager.Constraint;
|
||||
|
||||
/**
|
||||
* Job constraint for determining whether or not the device is actively charging.
|
||||
*/
|
||||
public class ChargingConstraint implements Constraint {
|
||||
|
||||
public static final String KEY = "ChargingConstraint";
|
||||
|
||||
private ChargingConstraint() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isMet() {
|
||||
return ChargingConstraintObserver.isCharging();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull String getFactoryKey() {
|
||||
return KEY;
|
||||
}
|
||||
|
||||
@RequiresApi(26)
|
||||
@Override
|
||||
public void applyToJobInfo(@NonNull JobInfo.Builder jobInfoBuilder) {
|
||||
jobInfoBuilder.setRequiresCharging(true);
|
||||
}
|
||||
|
||||
public static final class Factory implements Constraint.Factory<ChargingConstraint> {
|
||||
|
||||
@Override
|
||||
public ChargingConstraint create() {
|
||||
return new ChargingConstraint();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package org.thoughtcrime.securesms.jobmanager.impl;
|
||||
|
||||
import android.app.Application;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.os.BatteryManager;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
||||
import org.thoughtcrime.securesms.jobmanager.ConstraintObserver;
|
||||
|
||||
/**
|
||||
* Observes the charging state of the device and notifies the JobManager system when appropriate.
|
||||
*/
|
||||
public class ChargingConstraintObserver implements ConstraintObserver {
|
||||
|
||||
private static final String REASON = ChargingConstraintObserver.class.getSimpleName();
|
||||
private static final int STATUS_BATTERY = 0;
|
||||
|
||||
private final Application application;
|
||||
|
||||
private static volatile boolean charging;
|
||||
|
||||
public ChargingConstraintObserver(@NonNull Application application) {
|
||||
this.application = application;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void register(@NonNull Notifier notifier) {
|
||||
Intent intent = application.registerReceiver(new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
boolean wasCharging = charging;
|
||||
|
||||
charging = isCharging(intent);
|
||||
|
||||
if (charging && !wasCharging) {
|
||||
notifier.onConstraintMet(REASON);
|
||||
}
|
||||
}
|
||||
}, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
|
||||
|
||||
charging = isCharging(intent);
|
||||
}
|
||||
|
||||
public static boolean isCharging() {
|
||||
return charging;
|
||||
}
|
||||
|
||||
private static boolean isCharging(@Nullable Intent intent) {
|
||||
if (intent == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
int status = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, STATUS_BATTERY);
|
||||
return status != STATUS_BATTERY;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user