Loading api/current.txt +8 −1 Original line number Diff line number Diff line Loading @@ -8519,9 +8519,11 @@ package android.content.pm { method public android.graphics.Bitmap getAppIcon(); method public java.lang.CharSequence getAppLabel(); method public java.lang.String getAppPackageName(); method public android.content.Intent getDetailsIntent(); method public java.lang.String getInstallerPackageName(); method public float getProgress(); method public int getSessionId(); method public boolean isOpen(); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; } Loading @@ -8535,7 +8537,6 @@ package android.content.pm { method public void setInstallLocation(int); method public void setOriginatingUri(android.net.Uri); method public void setReferrerUri(android.net.Uri); method public void setSignatures(android.content.pm.Signature[]); method public void setSize(long); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; Loading Loading @@ -8651,6 +8652,8 @@ package android.content.pm { method public android.content.pm.PackageInstaller.Session openSession(int); method public void removeSessionCallback(android.content.pm.PackageInstaller.SessionCallback); method public void uninstall(java.lang.String, android.content.pm.PackageInstaller.UninstallCallback); field public static final java.lang.String ACTION_SESSION_DETAILS = "android.content.pm.action.SESSION_DETAILS"; field public static final java.lang.String EXTRA_SESSION_ID = "android.content.pm.extra.SESSION_ID"; } public static abstract class PackageInstaller.CommitCallback { Loading @@ -8670,14 +8673,18 @@ package android.content.pm { method public void close(); method public void commit(android.content.pm.PackageInstaller.CommitCallback); method public void fsync(java.io.OutputStream) throws java.io.IOException; method public java.lang.String[] list(); method public java.io.InputStream openRead(java.lang.String) throws java.io.IOException; method public java.io.OutputStream openWrite(java.lang.String, long, long) throws java.io.IOException; method public void setProgress(float); } public static abstract class PackageInstaller.SessionCallback { ctor public PackageInstaller.SessionCallback(); method public abstract void onClosed(int); method public abstract void onCreated(int); method public abstract void onFinished(int, boolean); method public abstract void onOpened(int); method public abstract void onProgressChanged(int, float); } cmds/pm/src/com/android/commands/pm/Pm.java +14 −8 Original line number Diff line number Diff line Loading @@ -59,7 +59,6 @@ import com.android.internal.util.ArrayUtils; import com.android.internal.util.SizedInputStream; import libcore.io.IoUtils; import libcore.io.Streams; import java.io.File; import java.io.FileDescriptor; Loading Loading @@ -1068,6 +1067,8 @@ public final class Pm { } } final InstallSessionInfo info = mInstaller.getSessionInfo(sessionId); PackageInstaller.Session session = null; InputStream in = null; OutputStream out = null; Loading @@ -1081,16 +1082,21 @@ public final class Pm { } out = session.openWrite(splitName, 0, sizeBytes); final int n = Streams.copy(in, out); session.fsync(out); int total = 0; byte[] buffer = new byte[65536]; int c; while ((c = in.read(buffer)) != -1) { total += c; out.write(buffer, 0, c); final InstallSessionInfo info = mInstaller.getSessionInfo(sessionId); if (info.sizeBytes > 0) { final float fraction = ((float) n / (float) info.sizeBytes); final float fraction = ((float) c / (float) info.sizeBytes); session.addProgress(fraction); } } session.fsync(out); System.out.println("Success: streamed " + n + " bytes"); System.out.println("Success: streamed " + total + " bytes"); } finally { IoUtils.closeQuietly(out); IoUtils.closeQuietly(in); Loading core/java/android/content/pm/IPackageInstallerCallback.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,8 @@ package android.content.pm; /** {@hide} */ oneway interface IPackageInstallerCallback { void onSessionCreated(int sessionId); void onSessionOpened(int sessionId); void onSessionProgressChanged(int sessionId, float progress); void onSessionClosed(int sessionId); void onSessionFinished(int sessionId, boolean success); } core/java/android/content/pm/IPackageInstallerSession.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -24,7 +24,9 @@ interface IPackageInstallerSession { void setClientProgress(float progress); void addClientProgress(float progress); String[] list(); ParcelFileDescriptor openWrite(String name, long offsetBytes, long lengthBytes); ParcelFileDescriptor openRead(String name); void close(); void commit(in IPackageInstallObserver2 observer); Loading core/java/android/content/pm/InstallSessionInfo.java +30 −0 Original line number Diff line number Diff line Loading @@ -16,7 +16,9 @@ package android.content.pm; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Intent; import android.graphics.Bitmap; import android.os.Parcel; import android.os.Parcelable; Loading @@ -32,6 +34,8 @@ public class InstallSessionInfo implements Parcelable { public String installerPackageName; /** {@hide} */ public float progress; /** {@hide} */ public boolean open; /** {@hide} */ public int mode; Loading @@ -53,6 +57,7 @@ public class InstallSessionInfo implements Parcelable { sessionId = source.readInt(); installerPackageName = source.readString(); progress = source.readFloat(); open = source.readInt() != 0; mode = source.readInt(); sizeBytes = source.readLong(); Loading Loading @@ -87,6 +92,13 @@ public class InstallSessionInfo implements Parcelable { return progress; } /** * Return if this session is currently open. */ public boolean isOpen() { return open; } /** * Return the package name this session is working with. May be {@code null} * if unknown. Loading @@ -111,6 +123,23 @@ public class InstallSessionInfo implements Parcelable { return appLabel; } /** * Return an Intent that can be started to view details about this install * session. This may surface actions such as pause, resume, or cancel. * <p> * In some cases, a matching Activity may not exist, so ensure you safeguard * against this. * * @see PackageInstaller#ACTION_SESSION_DETAILS */ public @Nullable Intent getDetailsIntent() { final Intent intent = new Intent(PackageInstaller.ACTION_SESSION_DETAILS); intent.putExtra(PackageInstaller.EXTRA_SESSION_ID, sessionId); intent.setPackage(installerPackageName); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); return intent; } @Override public int describeContents() { return 0; Loading @@ -121,6 +150,7 @@ public class InstallSessionInfo implements Parcelable { dest.writeInt(sessionId); dest.writeString(installerPackageName); dest.writeFloat(progress); dest.writeInt(open ? 1 : 0); dest.writeInt(mode); dest.writeLong(sizeBytes); Loading Loading
api/current.txt +8 −1 Original line number Diff line number Diff line Loading @@ -8519,9 +8519,11 @@ package android.content.pm { method public android.graphics.Bitmap getAppIcon(); method public java.lang.CharSequence getAppLabel(); method public java.lang.String getAppPackageName(); method public android.content.Intent getDetailsIntent(); method public java.lang.String getInstallerPackageName(); method public float getProgress(); method public int getSessionId(); method public boolean isOpen(); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; } Loading @@ -8535,7 +8537,6 @@ package android.content.pm { method public void setInstallLocation(int); method public void setOriginatingUri(android.net.Uri); method public void setReferrerUri(android.net.Uri); method public void setSignatures(android.content.pm.Signature[]); method public void setSize(long); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; Loading Loading @@ -8651,6 +8652,8 @@ package android.content.pm { method public android.content.pm.PackageInstaller.Session openSession(int); method public void removeSessionCallback(android.content.pm.PackageInstaller.SessionCallback); method public void uninstall(java.lang.String, android.content.pm.PackageInstaller.UninstallCallback); field public static final java.lang.String ACTION_SESSION_DETAILS = "android.content.pm.action.SESSION_DETAILS"; field public static final java.lang.String EXTRA_SESSION_ID = "android.content.pm.extra.SESSION_ID"; } public static abstract class PackageInstaller.CommitCallback { Loading @@ -8670,14 +8673,18 @@ package android.content.pm { method public void close(); method public void commit(android.content.pm.PackageInstaller.CommitCallback); method public void fsync(java.io.OutputStream) throws java.io.IOException; method public java.lang.String[] list(); method public java.io.InputStream openRead(java.lang.String) throws java.io.IOException; method public java.io.OutputStream openWrite(java.lang.String, long, long) throws java.io.IOException; method public void setProgress(float); } public static abstract class PackageInstaller.SessionCallback { ctor public PackageInstaller.SessionCallback(); method public abstract void onClosed(int); method public abstract void onCreated(int); method public abstract void onFinished(int, boolean); method public abstract void onOpened(int); method public abstract void onProgressChanged(int, float); }
cmds/pm/src/com/android/commands/pm/Pm.java +14 −8 Original line number Diff line number Diff line Loading @@ -59,7 +59,6 @@ import com.android.internal.util.ArrayUtils; import com.android.internal.util.SizedInputStream; import libcore.io.IoUtils; import libcore.io.Streams; import java.io.File; import java.io.FileDescriptor; Loading Loading @@ -1068,6 +1067,8 @@ public final class Pm { } } final InstallSessionInfo info = mInstaller.getSessionInfo(sessionId); PackageInstaller.Session session = null; InputStream in = null; OutputStream out = null; Loading @@ -1081,16 +1082,21 @@ public final class Pm { } out = session.openWrite(splitName, 0, sizeBytes); final int n = Streams.copy(in, out); session.fsync(out); int total = 0; byte[] buffer = new byte[65536]; int c; while ((c = in.read(buffer)) != -1) { total += c; out.write(buffer, 0, c); final InstallSessionInfo info = mInstaller.getSessionInfo(sessionId); if (info.sizeBytes > 0) { final float fraction = ((float) n / (float) info.sizeBytes); final float fraction = ((float) c / (float) info.sizeBytes); session.addProgress(fraction); } } session.fsync(out); System.out.println("Success: streamed " + n + " bytes"); System.out.println("Success: streamed " + total + " bytes"); } finally { IoUtils.closeQuietly(out); IoUtils.closeQuietly(in); Loading
core/java/android/content/pm/IPackageInstallerCallback.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,8 @@ package android.content.pm; /** {@hide} */ oneway interface IPackageInstallerCallback { void onSessionCreated(int sessionId); void onSessionOpened(int sessionId); void onSessionProgressChanged(int sessionId, float progress); void onSessionClosed(int sessionId); void onSessionFinished(int sessionId, boolean success); }
core/java/android/content/pm/IPackageInstallerSession.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -24,7 +24,9 @@ interface IPackageInstallerSession { void setClientProgress(float progress); void addClientProgress(float progress); String[] list(); ParcelFileDescriptor openWrite(String name, long offsetBytes, long lengthBytes); ParcelFileDescriptor openRead(String name); void close(); void commit(in IPackageInstallObserver2 observer); Loading
core/java/android/content/pm/InstallSessionInfo.java +30 −0 Original line number Diff line number Diff line Loading @@ -16,7 +16,9 @@ package android.content.pm; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Intent; import android.graphics.Bitmap; import android.os.Parcel; import android.os.Parcelable; Loading @@ -32,6 +34,8 @@ public class InstallSessionInfo implements Parcelable { public String installerPackageName; /** {@hide} */ public float progress; /** {@hide} */ public boolean open; /** {@hide} */ public int mode; Loading @@ -53,6 +57,7 @@ public class InstallSessionInfo implements Parcelable { sessionId = source.readInt(); installerPackageName = source.readString(); progress = source.readFloat(); open = source.readInt() != 0; mode = source.readInt(); sizeBytes = source.readLong(); Loading Loading @@ -87,6 +92,13 @@ public class InstallSessionInfo implements Parcelable { return progress; } /** * Return if this session is currently open. */ public boolean isOpen() { return open; } /** * Return the package name this session is working with. May be {@code null} * if unknown. Loading @@ -111,6 +123,23 @@ public class InstallSessionInfo implements Parcelable { return appLabel; } /** * Return an Intent that can be started to view details about this install * session. This may surface actions such as pause, resume, or cancel. * <p> * In some cases, a matching Activity may not exist, so ensure you safeguard * against this. * * @see PackageInstaller#ACTION_SESSION_DETAILS */ public @Nullable Intent getDetailsIntent() { final Intent intent = new Intent(PackageInstaller.ACTION_SESSION_DETAILS); intent.putExtra(PackageInstaller.EXTRA_SESSION_ID, sessionId); intent.setPackage(installerPackageName); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); return intent; } @Override public int describeContents() { return 0; Loading @@ -121,6 +150,7 @@ public class InstallSessionInfo implements Parcelable { dest.writeInt(sessionId); dest.writeString(installerPackageName); dest.writeFloat(progress); dest.writeInt(open ? 1 : 0); dest.writeInt(mode); dest.writeLong(sizeBytes); Loading