Home | History | Annotate | Download | only in pm
      1 /*
      2  * Copyright (C) 2011 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 com.android.server.pm;
     18 
     19 import android.content.pm.ApplicationInfo;
     20 import android.content.pm.PackageManager;
     21 import android.content.pm.PackageParser;
     22 
     23 import java.io.File;
     24 import java.util.List;
     25 
     26 /**
     27  * Settings data for a particular package we know about.
     28  */
     29 final class PackageSetting extends PackageSettingBase {
     30     int appId;
     31     PackageParser.Package pkg;
     32     SharedUserSetting sharedUser;
     33 
     34     PackageSetting(String name, String realName, File codePath, File resourcePath,
     35             String legacyNativeLibraryPathString, String primaryCpuAbiString,
     36             String secondaryCpuAbiString, String cpuAbiOverrideString,
     37             int pVersionCode, int pkgFlags, int privateFlags, String parentPackageName,
     38             List<String> childPackageNames) {
     39         super(name, realName, codePath, resourcePath, legacyNativeLibraryPathString,
     40                 primaryCpuAbiString, secondaryCpuAbiString, cpuAbiOverrideString,
     41                 pVersionCode, pkgFlags, privateFlags, parentPackageName, childPackageNames);
     42     }
     43 
     44     /**
     45      * New instance of PackageSetting replicating the original settings.
     46      * Note that it keeps the same PackageParser.Package instance.
     47      */
     48     PackageSetting(PackageSetting orig) {
     49         super(orig);
     50 
     51         appId = orig.appId;
     52         pkg = orig.pkg;
     53         sharedUser = orig.sharedUser;
     54     }
     55 
     56     @Override
     57     public String toString() {
     58         return "PackageSetting{"
     59             + Integer.toHexString(System.identityHashCode(this))
     60             + " " + name + "/" + appId + "}";
     61     }
     62 
     63     public PermissionsState getPermissionsState() {
     64         return (sharedUser != null)
     65                 ? sharedUser.getPermissionsState()
     66                 : super.getPermissionsState();
     67     }
     68 
     69     public boolean isPrivileged() {
     70         return (pkgPrivateFlags & ApplicationInfo.PRIVATE_FLAG_PRIVILEGED) != 0;
     71     }
     72 
     73     public boolean isForwardLocked() {
     74         return (pkgPrivateFlags & ApplicationInfo.PRIVATE_FLAG_FORWARD_LOCK) != 0;
     75     }
     76 
     77     public boolean isSystem() {
     78         return (pkgFlags & ApplicationInfo.FLAG_SYSTEM) != 0;
     79     }
     80 
     81     public boolean isSharedUser() {
     82         return sharedUser != null;
     83     }
     84 
     85     public boolean isMatch(int flags) {
     86         if ((flags & PackageManager.MATCH_SYSTEM_ONLY) != 0) {
     87             return isSystem();
     88         }
     89         return true;
     90     }
     91 }
     92