code: package com.lody.virtual.server.pm;
  
  import com.lody.virtual.helper.collection.ArrayMap;
  import com.lody.virtual.server.pm.parser.PackageParserEx;
  import com.lody.virtual.server.pm.parser.VPackage;
  
  /**
   * @author Lody
   */
  
  public class PackageCacheManager {
  
      static final ArrayMap<String, VPackage> PACKAGE_CACHE = new ArrayMap<>();
  
      public static int size() {
          synchronized (PACKAGE_CACHE) {
              return PACKAGE_CACHE.size();
          }
      }
  
      public static void put(VPackage pkg, PackageSetting ps) {
          synchronized (PackageCacheManager.class) {
              PackageParserEx.initApplicationInfoBase(ps, pkg);
              PACKAGE_CACHE.put(pkg.packageName, pkg);
              pkg.mExtras = ps;
              VPackageManagerService.get().analyzePackageLocked(pkg);
          }
      }
  
      public static VPackage get(String packageName) {
          synchronized (PackageCacheManager.class) {
              return PACKAGE_CACHE.get(packageName);
          }
      }
  
      public static PackageSetting getSetting(String packageName) {
          synchronized (PackageCacheManager.class) {
              VPackage p = PACKAGE_CACHE.get(packageName);
              if (p != null) {
                  return (PackageSetting) p.mExtras;
              }
              return null;
          }
      }
  
      public static VPackage remove(String packageName) {
          synchronized (PackageCacheManager.class) {
              VPackageManagerService.get().deletePackageLocked(packageName);
              return PACKAGE_CACHE.remove(packageName);
          }
      }
  }
  