Home | History | Annotate | Download | only in pm
      1 /*
      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 
     17 package android.content.pm;
     18 
     19 import android.os.Parcel;
     20 import android.os.Parcelable;
     21 import android.util.Printer;
     22 
     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  */
     28 public 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 
     36     /**
     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     /**
     45      * 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     /**
     52      * Bit in {@link #flags}: If set, a single instance of the service will
     53      * run for all users on the device.  Set from the
     54      * {@link android.R.attr#singleUser} attribute.
     55      */
     56     public static final int FLAG_SINGLE_USER = 0x40000000;
     57 
     58     /**
     59      * Options that have been set in the service declaration in the
     60      * manifest.
     61      * These include:
     62      * {@link #FLAG_STOP_WITH_TASK}, {@link #FLAG_ISOLATED_PROCESS},
     63      * {@link #FLAG_SINGLE_USER}.
     64      */
     65     public int flags;
     66 
     67     public ServiceInfo() {
     68     }
     69 
     70     public ServiceInfo(ServiceInfo orig) {
     71         super(orig);
     72         permission = orig.permission;
     73         flags = orig.flags;
     74     }
     75 
     76     public void dump(Printer pw, String prefix) {
     77         super.dumpFront(pw, prefix);
     78         pw.println(prefix + "permission=" + permission);
     79         pw.println(prefix + "flags=0x" + Integer.toHexString(flags));
     80     }
     81 
     82     public String toString() {
     83         return "ServiceInfo{"
     84             + Integer.toHexString(System.identityHashCode(this))
     85             + " " + name + "}";
     86     }
     87 
     88     public int describeContents() {
     89         return 0;
     90     }
     91 
     92     public void writeToParcel(Parcel dest, int parcelableFlags) {
     93         super.writeToParcel(dest, parcelableFlags);
     94         dest.writeString(permission);
     95         dest.writeInt(flags);
     96     }
     97 
     98     public static final Creator<ServiceInfo> CREATOR =
     99         new Creator<ServiceInfo>() {
    100         public ServiceInfo createFromParcel(Parcel source) {
    101             return new ServiceInfo(source);
    102         }
    103         public ServiceInfo[] newArray(int size) {
    104             return new ServiceInfo[size];
    105         }
    106     };
    107 
    108     private ServiceInfo(Parcel source) {
    109         super(source);
    110         permission = source.readString();
    111         flags = source.readInt();
    112     }
    113 }
    114