@Override public void readPersistenceData(Parcel p) { int count = p.readInt(); while (count-- > 0) { PackageSetting setting = new PackageSetting(p); mService.loadPackage(setting); } }
@Override public List<InstalledAppInfo> getInstalledAppsAsUser(int userId, int flags) { List<InstalledAppInfo> infoList = new ArrayList<>(getInstalledAppCount()); for (VPackage p : PackageCacheManager.PACKAGE_CACHE.values()) { PackageSetting setting = (PackageSetting) p.mExtras; boolean visible = setting.isInstalled(userId); if ((flags & VirtualCore.GET_HIDDEN_APP) == 0 && setting.isHidden(userId)) { visible = false; } if (visible) { infoList.add(setting.getAppInfo()); } } return infoList; }
public boolean isPackageLaunched(int userId, String packageName) { PackageSetting ps = PackageCacheManager.getSetting(packageName); return ps != null && ps.isLaunched(userId); }
@Override public synchronized boolean installPackageAsUser(int userId, String packageName) { if (VUserManagerService.get().exists(userId)) { PackageSetting ps = PackageCacheManager.getSetting(packageName); if (ps != null) { if (!ps.isInstalled(userId)) { ps.setInstalled(userId, true); notifyAppInstalled(ps, userId); mPersistenceLayer.save(); return true; } } } return false; }
public boolean isLaunched(int userId) { return readUserState(userId).launched; }
void setUserState(int userId, boolean launched, boolean hidden, boolean installed) { PackageUserState state = modifyUserState(userId); state.launched = launched; state.hidden = hidden; state.installed = installed; }
ProcessRecord startProcessIfNeedLocked(String processName, int userId, String packageName) { if (VActivityManagerService.get().getFreeStubCount() < 3) { // run GC killAllApps(); } PackageSetting ps = PackageCacheManager.getSetting(packageName); ApplicationInfo info = VPackageManagerService.get().getApplicationInfo(packageName, 0, userId); if (ps == null || info == null) { return null; } if (!ps.isLaunched(userId)) { sendFirstLaunchBroadcast(ps, userId); ps.setLaunched(userId, true); VAppManagerService.get().savePersistenceData(); } int uid = VUserHandle.getUid(userId, ps.appId); ProcessRecord app = mProcessNames.get(processName, uid); if (app != null && app.client.asBinder().pingBinder()) { return app; } int vpid = queryFreeStubProcessLocked(); if (vpid == -1) { return null; } app = performStartProcessLocked(uid, vpid, info, processName); if (app != null) { app.pkgList.add(info.packageName); } return app; }
ps = existSetting; } else { ps = new PackageSetting(); for (int userId : VUserManagerService.get().getUserIds()) { boolean installed = userId == 0; ps.setUserState(userId, false/*launched*/, false/*hidden*/, installed);
@Override public InstalledAppInfo getInstalledAppInfo(String packageName, int flags) { synchronized (PackageCacheManager.class) { if (packageName != null) { PackageSetting setting = PackageCacheManager.getSetting(packageName); if (setting != null) { return setting.getAppInfo(); } } return null; } }
@Override public boolean clearPackageAsUser(int userId, String packageName) throws RemoteException { if (!VUserManagerService.get().exists(userId)) { return false; } PackageSetting ps = PackageCacheManager.getSetting(packageName); if (ps != null) { int[] userIds = getPackageInstalledUsers(packageName); if (!ArrayUtils.contains(userIds, userId)) { return false; } if (userIds.length == 1) { clearPackage(packageName); } else { // Just hidden it VActivityManagerService.get().killAppByPkg(packageName, userId); ps.setInstalled(userId, false); mPersistenceLayer.save(); FileUtils.deleteDir(VEnvironment.getDataUserPackageDirectory(userId, packageName)); FileUtils.deleteDir(VEnvironment.getVirtualPrivateStorageDir(userId, packageName)); } return true; } return false; }
@Override public boolean isAppInstalledAsUser(int userId, String packageName) { if (packageName == null || !VUserManagerService.get().exists(userId)) { return false; } PackageSetting setting = PackageCacheManager.getSetting(packageName); if (setting == null) { return false; } return setting.isInstalled(userId); }
public void setPackageHidden(int userId, String packageName, boolean hidden) { PackageSetting ps = PackageCacheManager.getSetting(packageName); if (ps != null && VUserManagerService.get().exists(userId)) { ps.setHidden(userId, hidden); mPersistenceLayer.save(); } }
void cleanUpUser(int userId) { for (VPackage p : mPackages.values()) { PackageSetting ps = (PackageSetting) p.mExtras; ps.removeUser(userId); } }
public boolean isHidden(int userId) { return readUserState(userId).hidden; }
public void setInstalled(int userId, boolean installed) { modifyUserState(userId).installed = installed; } }
@Override public synchronized boolean installPackageAsUser(int userId, String packageName) { if (VUserManagerService.get().exists(userId)) { PackageSetting ps = PackageCacheManager.getSetting(packageName); if (ps != null) { if (!ps.isInstalled(userId)) { ps.setInstalled(userId, true); notifyAppInstalled(ps, userId); mPersistenceLayer.save(); return true; } } } return false; }
ProcessRecord startProcessIfNeedLocked(String processName, int userId, String packageName) { if (VActivityManagerService.get().getFreeStubCount() < 3) { // run GC killAllApps(); } PackageSetting ps = PackageCacheManager.getSetting(packageName); ApplicationInfo info = VPackageManagerService.get().getApplicationInfo(packageName, 0, userId); if (ps == null || info == null) { return null; } if (!ps.isLaunched(userId)) { sendFirstLaunchBroadcast(ps, userId); ps.setLaunched(userId, true); VAppManagerService.get().savePersistenceData(); } int uid = VUserHandle.getUid(userId, ps.appId); ProcessRecord app = mProcessNames.get(processName, uid); if (app != null && app.client.asBinder().pingBinder()) { return app; } int vpid = queryFreeStubProcessLocked(); if (vpid == -1) { return null; } app = performStartProcessLocked(uid, vpid, info, processName); if (app != null) { app.pkgList.add(info.packageName); } return app; }
ps = existSetting; } else { ps = new PackageSetting(); for (int userId : VUserManagerService.get().getUserIds()) { boolean installed = userId == 0; ps.setUserState(userId, false/*launched*/, false/*hidden*/, installed);
@Override public List<InstalledAppInfo> getInstalledApps(int flags) { List<InstalledAppInfo> infoList = new ArrayList<>(getInstalledAppCount()); for (VPackage p : PackageCacheManager.PACKAGE_CACHE.values()) { PackageSetting setting = (PackageSetting) p.mExtras; infoList.add(setting.getAppInfo()); } return infoList; }
@Override public synchronized boolean uninstallPackageAsUser(String packageName, int userId) { if (!VUserManagerService.get().exists(userId)) { return false; } PackageSetting ps = PackageCacheManager.getSetting(packageName); if (ps != null) { int[] userIds = getPackageInstalledUsers(packageName); if (!ArrayUtils.contains(userIds, userId)) { return false; } if (userIds.length == 1) { uninstallPackageFully(ps); } else { // Just hidden it VActivityManagerService.get().killAppByPkg(packageName, userId); ps.setInstalled(userId, false); notifyAppUninstalled(ps, userId); mPersistenceLayer.save(); FileUtils.deleteDir(VEnvironment.getDataUserPackageDirectory(userId, packageName)); FileUtils.deleteDir(VEnvironment.getVirtualPrivateStorageDir(userId, packageName)); } return true; } return false; }