BaseBundle's mMap may be null on some devices in some situations.
Ignore the NPE and move on.
Fixes: 138364061
Test: Ran existing tests.
Change-Id: I97aa09c85517115950c892e2e00523ed88904f79
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 174d43b..f4c5c4f 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -51,4 +51,4 @@
<component name="ProjectType">
<option name="id" value="Android" />
</component>
-</project>
\ No newline at end of file
+</project>
diff --git a/work/workmanager/src/main/java/androidx/work/impl/background/systemjob/SystemJobScheduler.java b/work/workmanager/src/main/java/androidx/work/impl/background/systemjob/SystemJobScheduler.java
index d4de7b9..03df2de 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/background/systemjob/SystemJobScheduler.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/background/systemjob/SystemJobScheduler.java
@@ -264,9 +264,7 @@
List<JobInfo> jobs = getPendingJobs(context, jobScheduler);
if (jobs != null && !jobs.isEmpty()) {
for (JobInfo jobInfo : jobs) {
- PersistableBundle extras = jobInfo.getExtras();
- //noinspection ConstantConditions
- if (extras == null || !extras.containsKey(EXTRA_WORK_SPEC_ID)) {
+ if (getWorkSpecIdFromJobInfo(jobInfo) == null) {
cancelJobById(jobScheduler, jobInfo.getId());
}
}
@@ -312,7 +310,6 @@
* For reference: b/133556574, b/133556809, b/133556535
*/
@Nullable
- @SuppressWarnings("ConstantConditions")
private static List<Integer> getPendingJobIds(
@NonNull Context context,
@NonNull JobScheduler jobScheduler,
@@ -327,14 +324,25 @@
List<Integer> jobIds = new ArrayList<>(2);
for (JobInfo jobInfo : jobs) {
- PersistableBundle extras = jobInfo.getExtras();
- if (extras != null && extras.containsKey(EXTRA_WORK_SPEC_ID)) {
- if (workSpecId.equals(extras.getString(EXTRA_WORK_SPEC_ID))) {
- jobIds.add(jobInfo.getId());
- }
+ if (workSpecId.equals(getWorkSpecIdFromJobInfo(jobInfo))) {
+ jobIds.add(jobInfo.getId());
}
}
return jobIds;
}
-}
+
+ @SuppressWarnings("ConstantConditions")
+ private static @Nullable String getWorkSpecIdFromJobInfo(@NonNull JobInfo jobInfo) {
+ PersistableBundle extras = jobInfo.getExtras();
+ try {
+ if (extras != null && extras.containsKey(EXTRA_WORK_SPEC_ID)) {
+ return extras.getString(EXTRA_WORK_SPEC_ID);
+ }
+ } catch (NullPointerException e) {
+ // b/138364061: BaseBundle.mMap seems to be null in some cases here. Ignore and return
+ // null.
+ }
+ return null;
+ }
+}
\ No newline at end of file