blob: 91f884ccd3dc4e24937537a2bc567bd2349af79c [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
19import android.os.Parcel;
20import android.os.Parcelable;
Dianne Hackborneb034652009-09-07 00:49:58 -070021import android.util.Printer;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080022
23/**
24 * Information you can retrieve about a particular application
25 * service. This corresponds to information collected from the
26 * AndroidManifest.xml's <service> tags.
27 */
28public class ServiceInfo extends ComponentInfo
29 implements Parcelable {
30 /**
31 * Optional name of a permission required to be able to access this
32 * Service. From the "permission" attribute.
33 */
34 public String permission;
35
Dianne Hackborn0c5001d2011-04-12 18:16:08 -070036 /**
37 * Bit in {@link #flags}: If set, the service will automatically be
38 * stopped by the system if the user removes a task that is rooted
39 * in one of the application's activities. Set from the
40 * {@link android.R.attr#stopWithTask} attribute.
41 */
42 public static final int FLAG_STOP_WITH_TASK = 0x0001;
43
44 /**
Dianne Hackborna0c283e2012-02-09 10:47:01 -080045 * Bit in {@link #flags}: If set, the service will run in its own
46 * isolated process. Set from the
47 * {@link android.R.attr#isolatedProcess} attribute.
48 */
49 public static final int FLAG_ISOLATED_PROCESS = 0x0002;
50
51 /**
Robert Sesekb9a86662015-12-09 16:22:45 -050052 * Bit in {@link #flags}: If set, the service can be bound and run in the
53 * calling application's package, rather than the package in which it is
54 * declared. Set from {@link android.R.attr#externalService} attribute.
Robert Sesekb9a86662015-12-09 16:22:45 -050055 */
56 public static final int FLAG_EXTERNAL_SERVICE = 0x0004;
57
58 /**
Todd Kennedy7bc3a702016-12-08 14:54:48 -080059 * Bit in {@link #flags} indicating if the service is visible to ephemeral applications.
60 * @hide
61 */
Todd Kennedyc05f5d12017-04-25 11:11:40 -070062 public static final int FLAG_VISIBLE_TO_INSTANT_APP = 0x100000;
Todd Kennedy7bc3a702016-12-08 14:54:48 -080063
64 /**
Dianne Hackbornb4163a62012-08-02 18:31:26 -070065 * Bit in {@link #flags}: If set, a single instance of the service will
66 * run for all users on the device. Set from the
67 * {@link android.R.attr#singleUser} attribute.
68 */
Dianne Hackborn7d19e022012-08-07 19:12:33 -070069 public static final int FLAG_SINGLE_USER = 0x40000000;
Dianne Hackbornb4163a62012-08-02 18:31:26 -070070
71 /**
Dianne Hackborn0c5001d2011-04-12 18:16:08 -070072 * Options that have been set in the service declaration in the
73 * manifest.
74 * These include:
Dianne Hackborn7d19e022012-08-07 19:12:33 -070075 * {@link #FLAG_STOP_WITH_TASK}, {@link #FLAG_ISOLATED_PROCESS},
76 * {@link #FLAG_SINGLE_USER}.
Dianne Hackborn0c5001d2011-04-12 18:16:08 -070077 */
78 public int flags;
79
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080080 public ServiceInfo() {
81 }
82
83 public ServiceInfo(ServiceInfo orig) {
84 super(orig);
85 permission = orig.permission;
Dianne Hackborn0c5001d2011-04-12 18:16:08 -070086 flags = orig.flags;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080087 }
88
Dianne Hackborneb034652009-09-07 00:49:58 -070089 public void dump(Printer pw, String prefix) {
Dianne Hackborn6ac42ae2015-12-08 17:22:10 -080090 dump(pw, prefix, DUMP_FLAG_ALL);
91 }
92
93 /** @hide */
Yohei Yukawa8f272172017-08-31 00:26:01 -070094 void dump(Printer pw, String prefix, int dumpFlags) {
Dianne Hackborneb034652009-09-07 00:49:58 -070095 super.dumpFront(pw, prefix);
96 pw.println(prefix + "permission=" + permission);
Dianne Hackborn0c5001d2011-04-12 18:16:08 -070097 pw.println(prefix + "flags=0x" + Integer.toHexString(flags));
Yohei Yukawa8f272172017-08-31 00:26:01 -070098 super.dumpBack(pw, prefix, dumpFlags);
Dianne Hackborneb034652009-09-07 00:49:58 -070099 }
Yohei Yukawa8f272172017-08-31 00:26:01 -0700100
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800101 public String toString() {
102 return "ServiceInfo{"
103 + Integer.toHexString(System.identityHashCode(this))
104 + " " + name + "}";
105 }
106
107 public int describeContents() {
108 return 0;
109 }
110
111 public void writeToParcel(Parcel dest, int parcelableFlags) {
112 super.writeToParcel(dest, parcelableFlags);
113 dest.writeString(permission);
Dianne Hackborn0c5001d2011-04-12 18:16:08 -0700114 dest.writeInt(flags);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800115 }
116
117 public static final Creator<ServiceInfo> CREATOR =
118 new Creator<ServiceInfo>() {
119 public ServiceInfo createFromParcel(Parcel source) {
120 return new ServiceInfo(source);
121 }
122 public ServiceInfo[] newArray(int size) {
123 return new ServiceInfo[size];
124 }
125 };
126
127 private ServiceInfo(Parcel source) {
128 super(source);
129 permission = source.readString();
Dianne Hackborn0c5001d2011-04-12 18:16:08 -0700130 flags = source.readInt();
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800131 }
132}