package com.lody.virtual.server.pm.installer;
import android.annotation.TargetApi;
import android.content.pm.PackageInfo;
import android.content.pm.PackageInstaller;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Build;
import android.os.Parcel;
import android.os.Parcelable;
import mirror.android.content.pm.PackageInstaller.SessionParamsLOLLIPOP;
import mirror.android.content.pm.PackageInstaller.SessionParamsMarshmallow;
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public class SessionParams implements Parcelable {
public static final int MODE_INVALID = -1;
/**
* Mode for an install session whose staged APKs should fully replace any
* existing APKs for the target app.
*/
public static final int MODE_FULL_INSTALL = 1;
/**
* Mode for an install session that should inherit any existing APKs for the
* target app, unless they have been explicitly overridden (based on split
* name) by the session. For example, this can be used to add one or more
* split APKs to an existing installation.
* <p>
* If there are no existing APKs for the target app, this behaves like
* {@link #MODE_FULL_INSTALL}.
*/
public static final int MODE_INHERIT_EXISTING = 2;
public int mode = MODE_INVALID;
public int installFlags;
public int installLocation = PackageInfo.INSTALL_LOCATION_INTERNAL_ONLY;
public long sizeBytes = -1;
public String appPackageName;
public Bitmap appIcon;
public String appLabel;
public long appIconLastModified = -1;
public Uri originatingUri;
public Uri referrerUri;
public String abiOverride;
public String volumeUuid;
public String[] grantedRuntimePermissions;
public SessionParams(int mode) {
this.mode = mode;
}
public PackageInstaller.SessionParams a() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(mode);
SessionParamsMarshmallow.installFlags.set(params, installFlags);
SessionParamsMarshmallow.installLocation.set(params, installLocation);
SessionParamsMarshmallow.sizeBytes.set(params, sizeBytes);
SessionParamsMarshmallow.appPackageName.set(params, appPackageName);
SessionParamsMarshmallow.appIcon.set(params, appIcon);
SessionParamsMarshmallow.appLabel.set(params, appLabel);
SessionParamsMarshmallow.appIconLastModified.set(params, appIconLastModified);
SessionParamsMarshmallow.originatingUri.set(params, originatingUri);
SessionParamsMarshmallow.referrerUri.set(params, referrerUri);
SessionParamsMarshmallow.abiOverride.set(params, abiOverride);
SessionParamsMarshmallow.volumeUuid.set(params, volumeUuid);
SessionParamsMarshmallow.grantedRuntimePermissions.set(params, grantedRuntimePermissions);
return params;
}
PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(mode);
SessionParamsLOLLIPOP.installFlags.set(params, installFlags);
SessionParamsLOLLIPOP.installLocation.set(params, installLocation);
SessionParamsLOLLIPOP.sizeBytes.set(params, sizeBytes);
SessionParamsLOLLIPOP.appPackageName.set(params, appPackageName);
SessionParamsLOLLIPOP.appIcon.set(params, appIcon);
SessionParamsLOLLIPOP.appLabel.set(params, appLabel);
SessionParamsLOLLIPOP.appIconLastModified.set(params, appIconLastModified);
SessionParamsLOLLIPOP.originatingUri.set(params, originatingUri);
SessionParamsLOLLIPOP.referrerUri.set(params, referrerUri);
SessionParamsLOLLIPOP.abiOverride.set(params, abiOverride);
return params;
}
public static SessionParams a(PackageInstaller.SessionParams sessionParams) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
SessionParams params = new SessionParams(SessionParamsMarshmallow.mode.get(sessionParams));
params.installFlags = SessionParamsMarshmallow.installFlags.get(sessionParams);
params.installLocation = SessionParamsMarshmallow.installLocation.get(sessionParams);
params.sizeBytes = SessionParamsMarshmallow.sizeBytes.get(sessionParams);
params.appPackageName = SessionParamsMarshmallow.appPackageName.get(sessionParams);
params.appIcon = SessionParamsMarshmallow.appIcon.get(sessionParams);
params.appLabel = SessionParamsMarshmallow.appLabel.get(sessionParams);
params.appIconLastModified = SessionParamsMarshmallow.appIconLastModified.get(sessionParams);
params.originatingUri = SessionParamsMarshmallow.originatingUri.get(sessionParams);
params.referrerUri = SessionParamsMarshmallow.referrerUri.get(sessionParams);
params.abiOverride = SessionParamsMarshmallow.abiOverride.get(sessionParams);
params.volumeUuid = SessionParamsMarshmallow.volumeUuid.get(sessionParams);
params.grantedRuntimePermissions = SessionParamsMarshmallow.grantedRuntimePermissions.get(sessionParams);
return params;
}
SessionParams params = new SessionParams(SessionParamsLOLLIPOP.mode.get(sessionParams));
params.installFlags = SessionParamsLOLLIPOP.installFlags.get(sessionParams);
params.installLocation = SessionParamsLOLLIPOP.installLocation.get(sessionParams);
params.sizeBytes = SessionParamsLOLLIPOP.sizeBytes.get(sessionParams);
params.appPackageName = SessionParamsLOLLIPOP.appPackageName.get(sessionParams);
params.appIcon = SessionParamsLOLLIPOP.appIcon.get(sessionParams);
params.appLabel = SessionParamsLOLLIPOP.appLabel.get(sessionParams);
params.appIconLastModified = SessionParamsLOLLIPOP.appIconLastModified.get(sessionParams);
params.originatingUri = SessionParamsLOLLIPOP.originatingUri.get(sessionParams);
params.referrerUri = SessionParamsLOLLIPOP.referrerUri.get(sessionParams);
params.abiOverride = SessionParamsLOLLIPOP.abiOverride.get(sessionParams);
return params;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(this.mode);
dest.writeInt(this.installFlags);
dest.writeInt(this.installLocation);
dest.writeLong(this.sizeBytes);
dest.writeString(this.appPackageName);
dest.writeParcelable(this.appIcon, flags);
dest.writeString(this.appLabel);
dest.writeLong(this.appIconLastModified);
dest.writeParcelable(this.originatingUri, flags);
dest.writeParcelable(this.referrerUri, flags);
dest.writeString(this.abiOverride);
dest.writeString(this.volumeUuid);
dest.writeStringArray(this.grantedRuntimePermissions);
}
protected SessionParams(Parcel in) {
this.mode = in.readInt();
this.installFlags = in.readInt();
this.installLocation = in.readInt();
this.sizeBytes = in.readLong();
this.appPackageName = in.readString();
this.appIcon = in.readParcelable(Bitmap.class.getClassLoader());
this.appLabel = in.readString();
this.appIconLastModified = in.readLong();
this.originatingUri = in.readParcelable(Uri.class.getClassLoader());
this.referrerUri = in.readParcelable(Uri.class.getClassLoader());
this.abiOverride = in.readString();
this.volumeUuid = in.readString();
this.grantedRuntimePermissions = in.createStringArray();
}
public static final Parcelable.Creator<SessionParams> CREATOR = new Parcelable.Creator<SessionParams>() {
@Override
public SessionParams createFromParcel(Parcel source) {
return new SessionParams(source);
}
@Override
public SessionParams[] newArray(int size) {
return new SessionParams[size];
}
};
}