blob: 8300c0c8d472dd4048f0427e02f5f7fc9044a88a [file] [log] [blame]
Kenny Root15a4d2f2010-03-11 18:20:12 -08001/*
2 * Copyright (C) 2007 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
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080017package android.content.pm;
18
Hui Yu1ea85522018-12-06 16:59:18 -080019import android.annotation.IntDef;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080020import android.os.Parcel;
21import android.os.Parcelable;
Dianne Hackborneb034652009-09-07 00:49:58 -070022import android.util.Printer;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080023
Hui Yu1ea85522018-12-06 16:59:18 -080024import java.lang.annotation.Retention;
25import java.lang.annotation.RetentionPolicy;
26
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080027/**
28 * Information you can retrieve about a particular application
29 * service. This corresponds to information collected from the
30 * AndroidManifest.xml's <service> tags.
31 */
32public class ServiceInfo extends ComponentInfo
33 implements Parcelable {
34 /**
35 * Optional name of a permission required to be able to access this
36 * Service. From the "permission" attribute.
37 */
38 public String permission;
39
Dianne Hackborn0c5001d2011-04-12 18:16:08 -070040 /**
41 * Bit in {@link #flags}: If set, the service will automatically be
42 * stopped by the system if the user removes a task that is rooted
43 * in one of the application's activities. Set from the
44 * {@link android.R.attr#stopWithTask} attribute.
45 */
46 public static final int FLAG_STOP_WITH_TASK = 0x0001;
47
48 /**
Dianne Hackborna0c283e2012-02-09 10:47:01 -080049 * Bit in {@link #flags}: If set, the service will run in its own
50 * isolated process. Set from the
51 * {@link android.R.attr#isolatedProcess} attribute.
52 */
53 public static final int FLAG_ISOLATED_PROCESS = 0x0002;
54
55 /**
Robert Sesekb9a86662015-12-09 16:22:45 -050056 * Bit in {@link #flags}: If set, the service can be bound and run in the
57 * calling application's package, rather than the package in which it is
58 * declared. Set from {@link android.R.attr#externalService} attribute.
Robert Sesekb9a86662015-12-09 16:22:45 -050059 */
60 public static final int FLAG_EXTERNAL_SERVICE = 0x0004;
61
62 /**
Martijn Coenene066c5c2018-10-31 16:50:30 +010063 * Bit in {@link #flags}: If set, the service (which must be isolated)
64 * will be spawned from an Application Zygote, instead of the regular Zygote.
65 * The Application Zygote will pre-initialize the application's class loader,
66 * and call a static callback into the application to allow it to perform
67 * application-specific preloads (such as loading a shared library). Therefore,
68 * spawning from the Application Zygote will typically reduce the service
69 * launch time and reduce its memory usage. The downside of using this flag
70 * is that you will have an additional process (the app zygote itself) that
71 * is taking up memory. Whether actual memory usage is improved therefore
72 * strongly depends on the number of isolated services that an application
73 * starts, and how much memory those services save by preloading. Therefore,
74 * it is recommended to measure memory usage under typical workloads to
75 * determine whether it makes sense to use this flag.
76 */
77 public static final int FLAG_USE_APP_ZYGOTE = 0x0008;
78
79 /**
Todd Kennedy7bc3a702016-12-08 14:54:48 -080080 * Bit in {@link #flags} indicating if the service is visible to ephemeral applications.
81 * @hide
82 */
Todd Kennedyc05f5d12017-04-25 11:11:40 -070083 public static final int FLAG_VISIBLE_TO_INSTANT_APP = 0x100000;
Todd Kennedy7bc3a702016-12-08 14:54:48 -080084
85 /**
Dianne Hackbornb4163a62012-08-02 18:31:26 -070086 * Bit in {@link #flags}: If set, a single instance of the service will
87 * run for all users on the device. Set from the
88 * {@link android.R.attr#singleUser} attribute.
89 */
Dianne Hackborn7d19e022012-08-07 19:12:33 -070090 public static final int FLAG_SINGLE_USER = 0x40000000;
Dianne Hackbornb4163a62012-08-02 18:31:26 -070091
92 /**
Dianne Hackborn0c5001d2011-04-12 18:16:08 -070093 * Options that have been set in the service declaration in the
94 * manifest.
95 * These include:
Dianne Hackborn7d19e022012-08-07 19:12:33 -070096 * {@link #FLAG_STOP_WITH_TASK}, {@link #FLAG_ISOLATED_PROCESS},
97 * {@link #FLAG_SINGLE_USER}.
Dianne Hackborn0c5001d2011-04-12 18:16:08 -070098 */
99 public int flags;
100
Hui Yu1ea85522018-12-06 16:59:18 -0800101 /**
102 * The default foreground service type if not been set in manifest file.
103 */
104 public static final int FOREGROUND_SERVICE_TYPE_UNSPECIFIED = 0;
105
106 /**
107 * Constant corresponding to <code>sync</code> in
108 * the {@link android.R.attr#foregroundServiceType} attribute.
109 * Data(photo, file, account) upload/download, backup/restore, import/export, fetch,
110 * transfer over network between device and cloud.
111 */
112 public static final int FOREGROUND_SERVICE_TYPE_SYNC = 1;
113
114 /**
115 * Constant corresponding to <code>mediaPlay</code> in
116 * the {@link android.R.attr#foregroundServiceType} attribute.
117 * Music, video, news or other media play.
118 */
119 public static final int FOREGROUND_SERVICE_TYPE_MEDIA_PLAY = 2;
120
121 /**
122 * Constant corresponding to <code>phoneCall</code> in
123 * the {@link android.R.attr#foregroundServiceType} attribute.
124 * Ongoing phone call or video conference.
125 */
126 public static final int FOREGROUND_SERVICE_TYPE_PHONE_CALL = 3;
127
128 /**
129 * Constant corresponding to <code>location</code> in
130 * the {@link android.R.attr#foregroundServiceType} attribute.
131 * GPS, map, navigation location update.
132 */
133 public static final int FOREGROUND_SERVICE_TYPE_LOCATION = 4;
134
135 /**
136 * Constant corresponding to <code>deviceCompanion</code> in
137 * the {@link android.R.attr#foregroundServiceType} attribute.
138 * Auto, bluetooth, TV or other devices connection, monitoring and interaction.
139 */
140 public static final int FOREGROUND_SERVICE_TYPE_DEVICE_COMPANION = 5;
141
142 /**
143 * Constant corresponding to <code>ongoingProcess</code> in
144 * the {@link android.R.attr#foregroundServiceType} attribute.
145 * Process that should not be interrupted, including installation, setup, photo
146 * compression etc.
147 */
148 public static final int FOREGROUND_SERVICE_TYPE_ONGOING_PROCESS = 6;
149
150 /**
151 * The enumeration of values for foreground service type.
152 * The foreground service type is set in {@link android.R.attr#foregroundServiceType}
153 * attribute.
154 * @hide
155 */
156 @IntDef(flag = false, prefix = { "FOREGROUND_SERVICE_TYPE_" }, value = {
157 FOREGROUND_SERVICE_TYPE_UNSPECIFIED,
158 FOREGROUND_SERVICE_TYPE_SYNC,
159 FOREGROUND_SERVICE_TYPE_MEDIA_PLAY,
160 FOREGROUND_SERVICE_TYPE_PHONE_CALL,
161 FOREGROUND_SERVICE_TYPE_LOCATION,
162 FOREGROUND_SERVICE_TYPE_DEVICE_COMPANION,
163 FOREGROUND_SERVICE_TYPE_ONGOING_PROCESS
164 })
165 @Retention(RetentionPolicy.SOURCE)
166 public @interface ForegroundServiceType {}
167
168 /**
169 * The type of foreground service, set in
170 * {@link android.R.attr#foregroundServiceType} attribute, one value in
171 * {@link ForegroundServiceType}
172 * @hide
173 */
174 public @ForegroundServiceType int mForegroundServiceType = FOREGROUND_SERVICE_TYPE_UNSPECIFIED;
175
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800176 public ServiceInfo() {
177 }
178
179 public ServiceInfo(ServiceInfo orig) {
180 super(orig);
181 permission = orig.permission;
Dianne Hackborn0c5001d2011-04-12 18:16:08 -0700182 flags = orig.flags;
Hui Yu1ea85522018-12-06 16:59:18 -0800183 mForegroundServiceType = orig.mForegroundServiceType;
184 }
185
186 /**
187 * Return the current foreground service type.
188 * @return the current foreground service type.
189 */
190 public int getForegroundServiceType() {
191 return mForegroundServiceType;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800192 }
193
Dianne Hackborneb034652009-09-07 00:49:58 -0700194 public void dump(Printer pw, String prefix) {
Dianne Hackborn6ac42ae2015-12-08 17:22:10 -0800195 dump(pw, prefix, DUMP_FLAG_ALL);
196 }
197
198 /** @hide */
Yohei Yukawa8f272172017-08-31 00:26:01 -0700199 void dump(Printer pw, String prefix, int dumpFlags) {
Dianne Hackborneb034652009-09-07 00:49:58 -0700200 super.dumpFront(pw, prefix);
201 pw.println(prefix + "permission=" + permission);
Dianne Hackborn0c5001d2011-04-12 18:16:08 -0700202 pw.println(prefix + "flags=0x" + Integer.toHexString(flags));
Yohei Yukawa8f272172017-08-31 00:26:01 -0700203 super.dumpBack(pw, prefix, dumpFlags);
Dianne Hackborneb034652009-09-07 00:49:58 -0700204 }
Yohei Yukawa8f272172017-08-31 00:26:01 -0700205
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800206 public String toString() {
207 return "ServiceInfo{"
208 + Integer.toHexString(System.identityHashCode(this))
209 + " " + name + "}";
210 }
211
212 public int describeContents() {
213 return 0;
214 }
215
216 public void writeToParcel(Parcel dest, int parcelableFlags) {
217 super.writeToParcel(dest, parcelableFlags);
218 dest.writeString(permission);
Dianne Hackborn0c5001d2011-04-12 18:16:08 -0700219 dest.writeInt(flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800220 }
221
222 public static final Creator<ServiceInfo> CREATOR =
223 new Creator<ServiceInfo>() {
224 public ServiceInfo createFromParcel(Parcel source) {
225 return new ServiceInfo(source);
226 }
227 public ServiceInfo[] newArray(int size) {
228 return new ServiceInfo[size];
229 }
230 };
231
232 private ServiceInfo(Parcel source) {
233 super(source);
234 permission = source.readString();
Dianne Hackborn0c5001d2011-04-12 18:16:08 -0700235 flags = source.readInt();
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800236 }
237}