1cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root/* 2cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root * Copyright (C) 2011 The Android Open Source Project 3cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root * 4cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root * Licensed under the Apache License, Version 2.0 (the "License"); 5cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root * you may not use this file except in compliance with the License. 6cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root * You may obtain a copy of the License at 7cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root * 8cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root * http://www.apache.org/licenses/LICENSE-2.0 9cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root * 10cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root * Unless required by applicable law or agreed to in writing, software 11cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root * distributed under the License is distributed on an "AS IS" BASIS, 12cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root * See the License for the specific language governing permissions and 14cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root * limitations under the License. 15cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root */ 16cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root 17cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Rootpackage com.android.server.pm; 18cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root 19cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Rootimport java.util.HashSet; 20cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root 21cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root/** 22cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root * Settings data for a particular shared user ID we know about. 23cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root */ 24cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Rootfinal class SharedUserSetting extends GrantedPermissions { 25cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root final String name; 26cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root 27cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root int userId; 28cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root 29dd72c9ed558158f889a8cdfed8a108553ba5a562Ben Gruver // flags that are associated with this uid, regardless of any package flags 30dd72c9ed558158f889a8cdfed8a108553ba5a562Ben Gruver int uidFlags; 31dd72c9ed558158f889a8cdfed8a108553ba5a562Ben Gruver 32cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root final HashSet<PackageSetting> packages = new HashSet<PackageSetting>(); 33cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root 34cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root final PackageSignatures signatures = new PackageSignatures(); 35cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root 36cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root SharedUserSetting(String _name, int _pkgFlags) { 37cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root super(_pkgFlags); 38dd72c9ed558158f889a8cdfed8a108553ba5a562Ben Gruver uidFlags = _pkgFlags; 39cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root name = _name; 40cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root } 41cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root 42cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root @Override 43cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root public String toString() { 44cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root return "SharedUserSetting{" + Integer.toHexString(System.identityHashCode(this)) + " " 45cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root + name + "/" + userId + "}"; 46cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root } 47dd72c9ed558158f889a8cdfed8a108553ba5a562Ben Gruver 48dd72c9ed558158f889a8cdfed8a108553ba5a562Ben Gruver void removePackage(PackageSetting packageSetting) { 49dd72c9ed558158f889a8cdfed8a108553ba5a562Ben Gruver if (packages.remove(packageSetting)) { 50dd72c9ed558158f889a8cdfed8a108553ba5a562Ben Gruver // recalculate the pkgFlags for this shared user if needed 51dd72c9ed558158f889a8cdfed8a108553ba5a562Ben Gruver if ((this.pkgFlags & packageSetting.pkgFlags) != 0) { 52dd72c9ed558158f889a8cdfed8a108553ba5a562Ben Gruver int aggregatedFlags = uidFlags; 53dd72c9ed558158f889a8cdfed8a108553ba5a562Ben Gruver for (PackageSetting ps : packages) { 54dd72c9ed558158f889a8cdfed8a108553ba5a562Ben Gruver aggregatedFlags |= ps.pkgFlags; 55dd72c9ed558158f889a8cdfed8a108553ba5a562Ben Gruver } 56dd72c9ed558158f889a8cdfed8a108553ba5a562Ben Gruver setFlags(aggregatedFlags); 57dd72c9ed558158f889a8cdfed8a108553ba5a562Ben Gruver } 58dd72c9ed558158f889a8cdfed8a108553ba5a562Ben Gruver } 59dd72c9ed558158f889a8cdfed8a108553ba5a562Ben Gruver } 60dd72c9ed558158f889a8cdfed8a108553ba5a562Ben Gruver 61dd72c9ed558158f889a8cdfed8a108553ba5a562Ben Gruver void addPackage(PackageSetting packageSetting) { 62dd72c9ed558158f889a8cdfed8a108553ba5a562Ben Gruver if (packages.add(packageSetting)) { 63dd72c9ed558158f889a8cdfed8a108553ba5a562Ben Gruver setFlags(this.pkgFlags | packageSetting.pkgFlags); 64dd72c9ed558158f889a8cdfed8a108553ba5a562Ben Gruver } 65dd72c9ed558158f889a8cdfed8a108553ba5a562Ben Gruver } 66cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root} 67