code: package com.lody.virtual.server.pm.installer;
  
  import android.graphics.Bitmap;
  import android.os.Parcel;
  import android.os.Parcelable;
  
  import mirror.android.content.pm.PackageInstaller;
  
  /**
   * @author Lody
   */
  
  public class SessionInfo implements Parcelable {
      
      public int sessionId;
      public String installerPackageName;
      public String resolvedBaseCodePath;
      public float progress;
      public boolean sealed;
      public boolean active;
      public int mode;
      public long sizeBytes;
      public String appPackageName;
      public Bitmap appIcon;
      public CharSequence appLabel;
  
  
      public android.content.pm.PackageInstaller.SessionInfo alloc() {
          android.content.pm.PackageInstaller.SessionInfo sessionInfo = PackageInstaller.SessionInfo.ctor.newInstance();
          PackageInstaller.SessionInfo.sessionId.set(sessionInfo, sessionId);
          PackageInstaller.SessionInfo.installerPackageName.set(sessionInfo, installerPackageName);
          PackageInstaller.SessionInfo.resolvedBaseCodePath.set(sessionInfo, resolvedBaseCodePath);
          PackageInstaller.SessionInfo.progress.set(sessionInfo, progress);
          PackageInstaller.SessionInfo.sealed.set(sessionInfo, sealed);
          PackageInstaller.SessionInfo.active.set(sessionInfo, active);
          PackageInstaller.SessionInfo.mode.set(sessionInfo, mode);
          PackageInstaller.SessionInfo.sizeBytes.set(sessionInfo, sizeBytes);
          PackageInstaller.SessionInfo.appPackageName.set(sessionInfo, appPackageName);
          PackageInstaller.SessionInfo.appIcon.set(sessionInfo, appIcon);
          PackageInstaller.SessionInfo.appLabel.set(sessionInfo, appLabel);
          return sessionInfo;
      }
  
      public static SessionInfo realloc(android.content.pm.PackageInstaller.SessionInfo sessionInfo) {
          SessionInfo info = new SessionInfo();
          info.sessionId = PackageInstaller.SessionInfo.sessionId.get(sessionInfo);
          info.installerPackageName = PackageInstaller.SessionInfo.installerPackageName.get(sessionInfo);
          info.resolvedBaseCodePath = PackageInstaller.SessionInfo.resolvedBaseCodePath.get(sessionInfo);
          info.progress = PackageInstaller.SessionInfo.progress.get(sessionInfo);
          info.sealed = PackageInstaller.SessionInfo.sealed.get(sessionInfo);
          info.active = PackageInstaller.SessionInfo.active.get(sessionInfo);
          info.mode = PackageInstaller.SessionInfo.mode.get(sessionInfo);
          info.sizeBytes = PackageInstaller.SessionInfo.sizeBytes.get(sessionInfo);
          info.appPackageName = PackageInstaller.SessionInfo.appPackageName.get(sessionInfo);
          info.appIcon = PackageInstaller.SessionInfo.appIcon.get(sessionInfo);
          info.appLabel = PackageInstaller.SessionInfo.appLabel.get(sessionInfo);
          return info;
      }
  
      @Override
      public int describeContents() {
          return 0;
      }
  
      @Override
      public void writeToParcel(Parcel dest, int flags) {
          dest.writeInt(this.sessionId);
          dest.writeString(this.installerPackageName);
          dest.writeString(this.resolvedBaseCodePath);
          dest.writeFloat(this.progress);
          dest.writeByte(this.sealed ? (byte) 1 : (byte) 0);
          dest.writeByte(this.active ? (byte) 1 : (byte) 0);
          dest.writeInt(this.mode);
          dest.writeLong(this.sizeBytes);
          dest.writeString(this.appPackageName);
          dest.writeParcelable(this.appIcon, flags);
          if (appLabel != null) {
              dest.writeString(appLabel.toString());
          }
      }
  
      public SessionInfo() {
      }
  
      protected SessionInfo(Parcel in) {
          this.sessionId = in.readInt();
          this.installerPackageName = in.readString();
          this.resolvedBaseCodePath = in.readString();
          this.progress = in.readFloat();
          this.sealed = in.readByte() != 0;
          this.active = in.readByte() != 0;
          this.mode = in.readInt();
          this.sizeBytes = in.readLong();
          this.appPackageName = in.readString();
          this.appIcon = in.readParcelable(Bitmap.class.getClassLoader());
          this.appLabel = in.readString();
      }
  
      public static final Parcelable.Creator<SessionInfo> CREATOR = new Parcelable.Creator<SessionInfo>() {
          @Override
          public SessionInfo createFromParcel(Parcel source) {
              return new SessionInfo(source);
          }
  
          @Override
          public SessionInfo[] newArray(int size) {
              return new SessionInfo[size];
          }
      };
  }
  