Add method to Requirements to get not met requirements
PiperOrigin-RevId: 225549778
This commit is contained in:
parent
1a3d735bc3
commit
28dca0b339
@ -129,7 +129,7 @@ public final class JobDispatcherScheduler implements Scheduler {
|
|||||||
Bundle extras = new Bundle();
|
Bundle extras = new Bundle();
|
||||||
extras.putString(KEY_SERVICE_ACTION, serviceAction);
|
extras.putString(KEY_SERVICE_ACTION, serviceAction);
|
||||||
extras.putString(KEY_SERVICE_PACKAGE, servicePackage);
|
extras.putString(KEY_SERVICE_PACKAGE, servicePackage);
|
||||||
extras.putInt(KEY_REQUIREMENTS, requirements.getRequirementsData());
|
extras.putInt(KEY_REQUIREMENTS, requirements.getRequirements());
|
||||||
builder.setExtras(extras);
|
builder.setExtras(extras);
|
||||||
|
|
||||||
return builder.build();
|
return builder.build();
|
||||||
|
@ -130,7 +130,7 @@ public final class PlatformScheduler implements Scheduler {
|
|||||||
PersistableBundle extras = new PersistableBundle();
|
PersistableBundle extras = new PersistableBundle();
|
||||||
extras.putString(KEY_SERVICE_ACTION, serviceAction);
|
extras.putString(KEY_SERVICE_ACTION, serviceAction);
|
||||||
extras.putString(KEY_SERVICE_PACKAGE, servicePackage);
|
extras.putString(KEY_SERVICE_PACKAGE, servicePackage);
|
||||||
extras.putInt(KEY_REQUIREMENTS, requirements.getRequirementsData());
|
extras.putInt(KEY_REQUIREMENTS, requirements.getRequirements());
|
||||||
builder.setExtras(extras);
|
builder.setExtras(extras);
|
||||||
|
|
||||||
return builder.build();
|
return builder.build();
|
||||||
|
@ -25,6 +25,7 @@ import android.net.NetworkInfo;
|
|||||||
import android.os.BatteryManager;
|
import android.os.BatteryManager;
|
||||||
import android.os.PowerManager;
|
import android.os.PowerManager;
|
||||||
import android.support.annotation.IntDef;
|
import android.support.annotation.IntDef;
|
||||||
|
import com.google.android.exoplayer2.util.Assertions;
|
||||||
import com.google.android.exoplayer2.util.Log;
|
import com.google.android.exoplayer2.util.Log;
|
||||||
import com.google.android.exoplayer2.util.Util;
|
import com.google.android.exoplayer2.util.Util;
|
||||||
import java.lang.annotation.Documented;
|
import java.lang.annotation.Documented;
|
||||||
@ -50,22 +51,49 @@ public final class Requirements {
|
|||||||
NETWORK_TYPE_METERED,
|
NETWORK_TYPE_METERED,
|
||||||
})
|
})
|
||||||
public @interface NetworkType {}
|
public @interface NetworkType {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Requirement flags.
|
||||||
|
*
|
||||||
|
* <p>Combination of the following values is possible:
|
||||||
|
*
|
||||||
|
* <ul>
|
||||||
|
* <li>Only one of {@link #NETWORK_TYPE_ANY}, {@link #NETWORK_TYPE_UNMETERED}, {@link
|
||||||
|
* #NETWORK_TYPE_NOT_ROAMING} or {@link #NETWORK_TYPE_METERED}.
|
||||||
|
* <li>{@link #DEVICE_IDLE}
|
||||||
|
* <li>{@link #DEVICE_CHARGING}
|
||||||
|
* <ul>
|
||||||
|
*/
|
||||||
|
@Documented
|
||||||
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
@IntDef(
|
||||||
|
flag = true,
|
||||||
|
value = {
|
||||||
|
NETWORK_TYPE_ANY,
|
||||||
|
NETWORK_TYPE_UNMETERED,
|
||||||
|
NETWORK_TYPE_NOT_ROAMING,
|
||||||
|
NETWORK_TYPE_METERED,
|
||||||
|
DEVICE_IDLE,
|
||||||
|
DEVICE_CHARGING
|
||||||
|
})
|
||||||
|
public @interface RequirementFlags {}
|
||||||
|
|
||||||
/** This job doesn't require network connectivity. */
|
/** This job doesn't require network connectivity. */
|
||||||
public static final int NETWORK_TYPE_NONE = 0;
|
public static final int NETWORK_TYPE_NONE = 0;
|
||||||
/** This job requires network connectivity. */
|
/** This job requires network connectivity. */
|
||||||
public static final int NETWORK_TYPE_ANY = 1;
|
public static final int NETWORK_TYPE_ANY = 1;
|
||||||
/** This job requires network connectivity that is unmetered. */
|
/** This job requires network connectivity that is unmetered. */
|
||||||
public static final int NETWORK_TYPE_UNMETERED = 2;
|
public static final int NETWORK_TYPE_UNMETERED = 1 << 1;
|
||||||
/** This job requires network connectivity that is not roaming. */
|
/** This job requires network connectivity that is not roaming. */
|
||||||
public static final int NETWORK_TYPE_NOT_ROAMING = 3;
|
public static final int NETWORK_TYPE_NOT_ROAMING = 1 << 2;
|
||||||
/** This job requires metered connectivity such as most cellular data networks. */
|
/** This job requires metered connectivity such as most cellular data networks. */
|
||||||
public static final int NETWORK_TYPE_METERED = 4;
|
public static final int NETWORK_TYPE_METERED = 1 << 3;
|
||||||
/** This job requires the device to be idle. */
|
/** This job requires the device to be idle. */
|
||||||
private static final int DEVICE_IDLE = 8;
|
public static final int DEVICE_IDLE = 1 << 4;
|
||||||
/** This job requires the device to be charging. */
|
/** This job requires the device to be charging. */
|
||||||
private static final int DEVICE_CHARGING = 16;
|
public static final int DEVICE_CHARGING = 1 << 5;
|
||||||
|
|
||||||
private static final int NETWORK_TYPE_MASK = 7;
|
private static final int NETWORK_TYPE_MASK = 0b1111;
|
||||||
|
|
||||||
private static final String TAG = "Requirements";
|
private static final String TAG = "Requirements";
|
||||||
|
|
||||||
@ -86,7 +114,7 @@ public final class Requirements {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private final int requirements;
|
@RequirementFlags private final int requirements;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param networkType Required network type.
|
* @param networkType Required network type.
|
||||||
@ -97,9 +125,12 @@ public final class Requirements {
|
|||||||
this(networkType | (charging ? DEVICE_CHARGING : 0) | (idle ? DEVICE_IDLE : 0));
|
this(networkType | (charging ? DEVICE_CHARGING : 0) | (idle ? DEVICE_IDLE : 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @param requirementsData The value returned by {@link #getRequirementsData()}. */
|
/** @param requirements A combination of requirement flags. */
|
||||||
public Requirements(int requirementsData) {
|
public Requirements(@RequirementFlags int requirements) {
|
||||||
this.requirements = requirementsData;
|
this.requirements = requirements;
|
||||||
|
int networkType = getRequiredNetworkType();
|
||||||
|
// Check if only one network type is specified.
|
||||||
|
Assertions.checkState((networkType & (networkType - 1)) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns required network type. */
|
/** Returns required network type. */
|
||||||
@ -121,6 +152,7 @@ public final class Requirements {
|
|||||||
* Returns whether the requirements are met.
|
* Returns whether the requirements are met.
|
||||||
*
|
*
|
||||||
* @param context Any context.
|
* @param context Any context.
|
||||||
|
* @return Whether the requirements are met.
|
||||||
*/
|
*/
|
||||||
public boolean checkRequirements(Context context) {
|
public boolean checkRequirements(Context context) {
|
||||||
return checkNetworkRequirements(context)
|
return checkNetworkRequirements(context)
|
||||||
@ -128,8 +160,22 @@ public final class Requirements {
|
|||||||
&& checkIdleRequirement(context);
|
&& checkIdleRequirement(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns the encoded requirements data which can be used with {@link #Requirements(int)}. */
|
/**
|
||||||
public int getRequirementsData() {
|
* Returns the requirement flags that are not met, or 0.
|
||||||
|
*
|
||||||
|
* @param context Any context.
|
||||||
|
* @return The requirement flags that are not met, or 0.
|
||||||
|
*/
|
||||||
|
@RequirementFlags
|
||||||
|
public int getNotMetRequirements(Context context) {
|
||||||
|
return (!checkNetworkRequirements(context) ? getRequiredNetworkType() : 0)
|
||||||
|
| (!checkChargingRequirement(context) ? DEVICE_CHARGING : 0)
|
||||||
|
| (!checkIdleRequirement(context) ? DEVICE_IDLE : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Returns the requirement flags. */
|
||||||
|
@RequirementFlags
|
||||||
|
public int getRequirements() {
|
||||||
return requirements;
|
return requirements;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user