diff --git a/api/system-current.txt b/api/system-current.txt index 7cf2bc3c5d821..e5ea2c859bb40 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -5471,6 +5471,7 @@ package android.os { public class UpdateEngine { ctor public UpdateEngine(); method public void applyPayload(String, long, long, String[]); + method public void applyPayload(java.io.FileDescriptor, long, long, String[]); method public boolean bind(android.os.UpdateEngineCallback, android.os.Handler); method public boolean bind(android.os.UpdateEngineCallback); method public void cancel(); diff --git a/core/java/android/os/UpdateEngine.java b/core/java/android/os/UpdateEngine.java index 5cf3b970c00cf..29af17afc8721 100644 --- a/core/java/android/os/UpdateEngine.java +++ b/core/java/android/os/UpdateEngine.java @@ -21,6 +21,8 @@ import android.os.IUpdateEngine; import android.os.IUpdateEngineCallback; import android.os.RemoteException; +import java.io.FileDescriptor; + /** * UpdateEngine handles calls to the update engine which takes care of A/B OTA * updates. It wraps up the update engine Binder APIs and exposes them as @@ -311,6 +313,22 @@ public class UpdateEngine { } } + /** + * Applies the payload passed as file descriptor {@code fd} instead of + * using the {@code file://} scheme. + * + *

See {@link #applyPayload(String)} for {@code offset}, {@code size} and + * {@code headerKeyValuePairs} parameters. + */ + public void applyPayload(FileDescriptor fd, long offset, long size, + String[] headerKeyValuePairs) { + try { + mUpdateEngine.applyPayloadFd(fd, offset, size, headerKeyValuePairs); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + /** * Permanently cancels an in-progress update. *