blob: 4a2f800552f67296e05b620310ef665e9a3b07b1 [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 */
Hui Yu2d4207f2019-01-22 15:32:20 -0800104 public static final int FOREGROUND_SERVICE_TYPE_NONE = 0;
Hui Yu1ea85522018-12-06 16:59:18 -0800105
106 /**
Hui Yu2d4207f2019-01-22 15:32:20 -0800107 * Constant corresponding to <code>dataSync</code> in
Hui Yu1ea85522018-12-06 16:59:18 -0800108 * 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 */
Hui Yu2d4207f2019-01-22 15:32:20 -0800112 public static final int FOREGROUND_SERVICE_TYPE_DATA_SYNC = 1 << 0;
Hui Yu1ea85522018-12-06 16:59:18 -0800113
114 /**
Hui Yu2d4207f2019-01-22 15:32:20 -0800115 * Constant corresponding to <code>mediaPlayback</code> in
Hui Yu1ea85522018-12-06 16:59:18 -0800116 * the {@link android.R.attr#foregroundServiceType} attribute.
Hui Yu2d4207f2019-01-22 15:32:20 -0800117 * Music, video, news or other media playback.
Hui Yu1ea85522018-12-06 16:59:18 -0800118 */
Hui Yu2d4207f2019-01-22 15:32:20 -0800119 public static final int FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK = 1 << 1;
Hui Yu1ea85522018-12-06 16:59:18 -0800120
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 */
Hui Yu2d4207f2019-01-22 15:32:20 -0800126 public static final int FOREGROUND_SERVICE_TYPE_PHONE_CALL = 1 << 2;
Hui Yu1ea85522018-12-06 16:59:18 -0800127
128 /**
129 * Constant corresponding to <code>location</code> in
130 * the {@link android.R.attr#foregroundServiceType} attribute.
131 * GPS, map, navigation location update.
132 */
Hui Yu2d4207f2019-01-22 15:32:20 -0800133 public static final int FOREGROUND_SERVICE_TYPE_LOCATION = 1 << 3;
Hui Yu1ea85522018-12-06 16:59:18 -0800134
135 /**
Hui Yu2d4207f2019-01-22 15:32:20 -0800136 * Constant corresponding to <code>connectedDevice</code> in
Hui Yu1ea85522018-12-06 16:59:18 -0800137 * the {@link android.R.attr#foregroundServiceType} attribute.
138 * Auto, bluetooth, TV or other devices connection, monitoring and interaction.
139 */
Hui Yu2d4207f2019-01-22 15:32:20 -0800140 public static final int FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE = 1 << 4;
Hui Yu1ea85522018-12-06 16:59:18 -0800141
142 /**
Hui Yu2d4207f2019-01-22 15:32:20 -0800143 * A special value indicates to use all types set in manifest file.
Hui Yu1ea85522018-12-06 16:59:18 -0800144 */
Hui Yu2d4207f2019-01-22 15:32:20 -0800145 public static final int FOREGROUND_SERVICE_TYPE_MANIFEST = -1;
Hui Yu1ea85522018-12-06 16:59:18 -0800146
147 /**
Hui Yu2d4207f2019-01-22 15:32:20 -0800148 * The set of flags for foreground service type.
Hui Yu1ea85522018-12-06 16:59:18 -0800149 * The foreground service type is set in {@link android.R.attr#foregroundServiceType}
150 * attribute.
151 * @hide
152 */
Hui Yu2d4207f2019-01-22 15:32:20 -0800153 @IntDef(flag = true, prefix = { "FOREGROUND_SERVICE_TYPE_" }, value = {
Hui Yub8dcbee2019-02-14 13:50:01 -0800154 FOREGROUND_SERVICE_TYPE_MANIFEST,
Hui Yu2d4207f2019-01-22 15:32:20 -0800155 FOREGROUND_SERVICE_TYPE_NONE,
156 FOREGROUND_SERVICE_TYPE_DATA_SYNC,
157 FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK,
Hui Yu1ea85522018-12-06 16:59:18 -0800158 FOREGROUND_SERVICE_TYPE_PHONE_CALL,
159 FOREGROUND_SERVICE_TYPE_LOCATION,
Hui Yu2d4207f2019-01-22 15:32:20 -0800160 FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE,
Hui Yu1ea85522018-12-06 16:59:18 -0800161 })
162 @Retention(RetentionPolicy.SOURCE)
163 public @interface ForegroundServiceType {}
164
165 /**
166 * The type of foreground service, set in
Hui Yu2d4207f2019-01-22 15:32:20 -0800167 * {@link android.R.attr#foregroundServiceType} attribute by ORing flags in
Hui Yu1ea85522018-12-06 16:59:18 -0800168 * {@link ForegroundServiceType}
169 * @hide
170 */
Hui Yu2d4207f2019-01-22 15:32:20 -0800171 public @ForegroundServiceType int mForegroundServiceType = FOREGROUND_SERVICE_TYPE_NONE;
Hui Yu1ea85522018-12-06 16:59:18 -0800172
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800173 public ServiceInfo() {
174 }
175
176 public ServiceInfo(ServiceInfo orig) {
177 super(orig);
178 permission = orig.permission;
Dianne Hackborn0c5001d2011-04-12 18:16:08 -0700179 flags = orig.flags;
Hui Yu1ea85522018-12-06 16:59:18 -0800180 mForegroundServiceType = orig.mForegroundServiceType;
181 }
182
183 /**
Hui Yub8dcbee2019-02-14 13:50:01 -0800184 * Return foreground service type specified in the manifest..
185 * @return foreground service type specified in the manifest.
Hui Yu1ea85522018-12-06 16:59:18 -0800186 */
Hui Yub8dcbee2019-02-14 13:50:01 -0800187 public @ForegroundServiceType int getForegroundServiceType() {
Hui Yu1ea85522018-12-06 16:59:18 -0800188 return mForegroundServiceType;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800189 }
190
Dianne Hackborneb034652009-09-07 00:49:58 -0700191 public void dump(Printer pw, String prefix) {
Dianne Hackborn6ac42ae2015-12-08 17:22:10 -0800192 dump(pw, prefix, DUMP_FLAG_ALL);
193 }
194
195 /** @hide */
Yohei Yukawa8f272172017-08-31 00:26:01 -0700196 void dump(Printer pw, String prefix, int dumpFlags) {
Dianne Hackborneb034652009-09-07 00:49:58 -0700197 super.dumpFront(pw, prefix);
198 pw.println(prefix + "permission=" + permission);
Dianne Hackborn0c5001d2011-04-12 18:16:08 -0700199 pw.println(prefix + "flags=0x" + Integer.toHexString(flags));
Yohei Yukawa8f272172017-08-31 00:26:01 -0700200 super.dumpBack(pw, prefix, dumpFlags);
Dianne Hackborneb034652009-09-07 00:49:58 -0700201 }
Yohei Yukawa8f272172017-08-31 00:26:01 -0700202
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800203 public String toString() {
204 return "ServiceInfo{"
205 + Integer.toHexString(System.identityHashCode(this))
206 + " " + name + "}";
207 }
208
209 public int describeContents() {
210 return 0;
211 }
212
213 public void writeToParcel(Parcel dest, int parcelableFlags) {
214 super.writeToParcel(dest, parcelableFlags);
215 dest.writeString(permission);
Dianne Hackborn0c5001d2011-04-12 18:16:08 -0700216 dest.writeInt(flags);
Hui Yu2d4207f2019-01-22 15:32:20 -0800217 dest.writeInt(mForegroundServiceType);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800218 }
219
220 public static final Creator<ServiceInfo> CREATOR =
221 new Creator<ServiceInfo>() {
222 public ServiceInfo createFromParcel(Parcel source) {
223 return new ServiceInfo(source);
224 }
225 public ServiceInfo[] newArray(int size) {
226 return new ServiceInfo[size];
227 }
228 };
229
230 private ServiceInfo(Parcel source) {
231 super(source);
232 permission = source.readString();
Dianne Hackborn0c5001d2011-04-12 18:16:08 -0700233 flags = source.readInt();
Hui Yu2d4207f2019-01-22 15:32:20 -0800234 mForegroundServiceType = source.readInt();
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800235 }
236}