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