diff options
| author | 2016-06-22 17:12:07 +0000 | |
|---|---|---|
| committer | 2016-06-22 17:12:09 +0000 | |
| commit | a62a7eef2435a906eaca29e798408fda8c44d1d1 (patch) | |
| tree | 404040a65b9f3523eb12078b45e7508d170f9363 | |
| parent | 6b6bf9cd54d8f0946d9bba3f9ca222757e879d4b (diff) | |
| parent | 121e1645d1396b47f0fefa978f8c77d2c4c6c968 (diff) | |
Merge "Fix issue #29545190: JobScheduler ContentUri NOTIFY_FOR_DESCENDANTS flag..." into nyc-dev
| -rw-r--r-- | core/java/android/app/job/JobInfo.java | 15 | ||||
| -rw-r--r-- | services/core/java/com/android/server/job/controllers/ContentObserverController.java | 13 |
2 files changed, 23 insertions, 5 deletions
diff --git a/core/java/android/app/job/JobInfo.java b/core/java/android/app/job/JobInfo.java index c4ca82e59b99..5823abf9d78f 100644 --- a/core/java/android/app/job/JobInfo.java +++ b/core/java/android/app/job/JobInfo.java @@ -28,6 +28,7 @@ import android.os.PersistableBundle; import android.util.Log; import java.util.ArrayList; +import java.util.Objects; /** * Container of data passed to the {@link android.app.job.JobScheduler} fully encapsulating the @@ -494,6 +495,20 @@ public class JobInfo implements Parcelable { return mFlags; } + @Override + public boolean equals(Object o) { + if (!(o instanceof TriggerContentUri)) { + return false; + } + TriggerContentUri t = (TriggerContentUri) o; + return Objects.equals(t.mUri, mUri) && t.mFlags == mFlags; + } + + @Override + public int hashCode() { + return (mUri == null ? 0 : mUri.hashCode()) ^ mFlags; + } + private TriggerContentUri(Parcel in) { mUri = Uri.CREATOR.createFromParcel(in); mFlags = in.readInt(); diff --git a/services/core/java/com/android/server/job/controllers/ContentObserverController.java b/services/core/java/com/android/server/job/controllers/ContentObserverController.java index 26660e82e841..9dce070221bc 100644 --- a/services/core/java/com/android/server/job/controllers/ContentObserverController.java +++ b/services/core/java/com/android/server/job/controllers/ContentObserverController.java @@ -57,7 +57,7 @@ public class ContentObserverController extends StateController { private static volatile ContentObserverController sController; final private List<JobStatus> mTrackedTasks = new ArrayList<JobStatus>(); - ArrayMap<Uri, ObserverInstance> mObservers = new ArrayMap<>(); + ArrayMap<JobInfo.TriggerContentUri, ObserverInstance> mObservers = new ArrayMap<>(); final Handler mHandler; public static ContentObserverController get(JobSchedulerService taskManagerService) { @@ -253,10 +253,10 @@ public class ContentObserverController extends StateController { final JobInfo.TriggerContentUri[] uris = jobStatus.getJob().getTriggerContentUris(); if (uris != null) { for (JobInfo.TriggerContentUri uri : uris) { - ObserverInstance obs = mObservers.get(uri.getUri()); + ObserverInstance obs = mObservers.get(uri); if (obs == null) { obs = new ObserverInstance(mHandler, uri.getUri()); - mObservers.put(uri.getUri(), obs); + mObservers.put(uri, obs); mContext.getContentResolver().registerContentObserver( uri.getUri(), (uri.getFlags() & @@ -316,7 +316,7 @@ public class ContentObserverController extends StateController { obs.mJobs.remove(this); if (obs.mJobs.size() == 0) { mContext.getContentResolver().unregisterContentObserver(obs); - mObservers.remove(obs.mUri); + mObservers.remove(obs); } } } @@ -355,7 +355,10 @@ public class ContentObserverController extends StateController { continue; } pw.print(" "); - pw.print(mObservers.keyAt(i)); + JobInfo.TriggerContentUri trigger = mObservers.keyAt(i); + pw.print(trigger.getUri()); + pw.print(" 0x"); + pw.print(Integer.toHexString(trigger.getFlags())); pw.print(" ("); pw.print(System.identityHashCode(obs)); pw.println("):"); |