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];
        }
    };
}