• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2014 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License
15  */
16 
17 package android.app.job;
18 
19 import android.app.job.IJobCallback;
20 import android.net.Uri;
21 import android.os.IBinder;
22 import android.os.Parcel;
23 import android.os.Parcelable;
24 import android.os.PersistableBundle;
25 
26 /**
27  * Contains the parameters used to configure/identify your job. You do not create this object
28  * yourself, instead it is handed in to your application by the System.
29  */
30 public class JobParameters implements Parcelable {
31 
32     /** @hide */
33     public static final int REASON_CANCELED = 0;
34     /** @hide */
35     public static final int REASON_CONSTRAINTS_NOT_SATISFIED = 1;
36     /** @hide */
37     public static final int REASON_PREEMPT = 2;
38     /** @hide */
39     public static final int REASON_TIMEOUT = 3;
40     /** @hide */
41     public static final int REASON_DEVICE_IDLE = 4;
42 
43     private final int jobId;
44     private final PersistableBundle extras;
45     private final IBinder callback;
46     private final boolean overrideDeadlineExpired;
47     private final Uri[] mTriggeredContentUris;
48     private final String[] mTriggeredContentAuthorities;
49 
50     private int stopReason; // Default value of stopReason is REASON_CANCELED
51 
52     /** @hide */
JobParameters(IBinder callback, int jobId, PersistableBundle extras, boolean overrideDeadlineExpired, Uri[] triggeredContentUris, String[] triggeredContentAuthorities)53     public JobParameters(IBinder callback, int jobId, PersistableBundle extras,
54                 boolean overrideDeadlineExpired, Uri[] triggeredContentUris,
55             String[] triggeredContentAuthorities) {
56         this.jobId = jobId;
57         this.extras = extras;
58         this.callback = callback;
59         this.overrideDeadlineExpired = overrideDeadlineExpired;
60         this.mTriggeredContentUris = triggeredContentUris;
61         this.mTriggeredContentAuthorities = triggeredContentAuthorities;
62     }
63 
64     /**
65      * @return The unique id of this job, specified at creation time.
66      */
getJobId()67     public int getJobId() {
68         return jobId;
69     }
70 
71     /**
72      * Reason onStopJob() was called on this job.
73      * @hide
74      */
getStopReason()75     public int getStopReason() {
76         return stopReason;
77     }
78 
79     /**
80      * @return The extras you passed in when constructing this job with
81      * {@link android.app.job.JobInfo.Builder#setExtras(android.os.PersistableBundle)}. This will
82      * never be null. If you did not set any extras this will be an empty bundle.
83      */
getExtras()84     public PersistableBundle getExtras() {
85         return extras;
86     }
87 
88     /**
89      * For jobs with {@link android.app.job.JobInfo.Builder#setOverrideDeadline(long)} set, this
90      * provides an easy way to tell whether the job is being executed due to the deadline
91      * expiring. Note: If the job is running because its deadline expired, it implies that its
92      * constraints will not be met.
93      */
isOverrideDeadlineExpired()94     public boolean isOverrideDeadlineExpired() {
95         return overrideDeadlineExpired;
96     }
97 
98     /**
99      * For jobs with {@link android.app.job.JobInfo.Builder#addTriggerContentUri} set, this
100      * reports which URIs have triggered the job.  This will be null if either no URIs have
101      * triggered it (it went off due to a deadline or other reason), or the number of changed
102      * URIs is too large to report.  Whether or not the number of URIs is too large, you can
103      * always use {@link #getTriggeredContentAuthorities()} to determine whether the job was
104      * triggered due to any content changes and the authorities they are associated with.
105      */
getTriggeredContentUris()106     public Uri[] getTriggeredContentUris() {
107         return mTriggeredContentUris;
108     }
109 
110     /**
111      * For jobs with {@link android.app.job.JobInfo.Builder#addTriggerContentUri} set, this
112      * reports which content authorities have triggered the job.  It will only be null if no
113      * authorities have triggered it -- that is, the job executed for some other reason, such
114      * as a deadline expiring.  If this is non-null, you can use {@link #getTriggeredContentUris()}
115      * to retrieve the details of which URIs changed (as long as that has not exceeded the maximum
116      * number it can reported).
117      */
getTriggeredContentAuthorities()118     public String[] getTriggeredContentAuthorities() {
119         return mTriggeredContentAuthorities;
120     }
121 
122     /** @hide */
getCallback()123     public IJobCallback getCallback() {
124         return IJobCallback.Stub.asInterface(callback);
125     }
126 
JobParameters(Parcel in)127     private JobParameters(Parcel in) {
128         jobId = in.readInt();
129         extras = in.readPersistableBundle();
130         callback = in.readStrongBinder();
131         overrideDeadlineExpired = in.readInt() == 1;
132         mTriggeredContentUris = in.createTypedArray(Uri.CREATOR);
133         mTriggeredContentAuthorities = in.createStringArray();
134         stopReason = in.readInt();
135     }
136 
137     /** @hide */
setStopReason(int reason)138     public void setStopReason(int reason) {
139         stopReason = reason;
140     }
141 
142     @Override
describeContents()143     public int describeContents() {
144         return 0;
145     }
146 
147     @Override
writeToParcel(Parcel dest, int flags)148     public void writeToParcel(Parcel dest, int flags) {
149         dest.writeInt(jobId);
150         dest.writePersistableBundle(extras);
151         dest.writeStrongBinder(callback);
152         dest.writeInt(overrideDeadlineExpired ? 1 : 0);
153         dest.writeTypedArray(mTriggeredContentUris, flags);
154         dest.writeStringArray(mTriggeredContentAuthorities);
155         dest.writeInt(stopReason);
156     }
157 
158     public static final Creator<JobParameters> CREATOR = new Creator<JobParameters>() {
159         @Override
160         public JobParameters createFromParcel(Parcel in) {
161             return new JobParameters(in);
162         }
163 
164         @Override
165         public JobParameters[] newArray(int size) {
166             return new JobParameters[size];
167         }
168     };
169 }
170