Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fd5abe36 authored by William Loh's avatar William Loh Committed by Android (Google) Code Review
Browse files

Merge "Remove app metadata if data is null or empty"

parents e4b0ce5c f7ee7642
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -69,4 +69,5 @@ interface IPackageInstallerSession {


    ParcelFileDescriptor getAppMetadataFd();
    ParcelFileDescriptor getAppMetadataFd();
    ParcelFileDescriptor openWriteAppMetadata();
    ParcelFileDescriptor openWriteAppMetadata();
    void removeAppMetadata();
}
}
+10 −4
Original line number Original line Diff line number Diff line
@@ -1956,16 +1956,22 @@ public class PackageInstaller {
        /**
        /**
         * Optionally set the app metadata. The size of this data cannot exceed the maximum allowed.
         * Optionally set the app metadata. The size of this data cannot exceed the maximum allowed.
         * Any existing data from the previous install will not be retained even if no data is set
         * Any existing data from the previous install will not be retained even if no data is set
         * for the current install session.
         * for the current install session. Setting data to null or an empty PersistableBundle will
         * remove any metadata that has previously been set in the same session.
         *
         *
         * @param data a PersistableBundle containing the app metadata. If this is set to null then
         * @param data a PersistableBundle containing the app metadata.
         *     any existing app metadata will be removed.
         * @throws IOException if writing the data fails.
         * @throws IOException if writing the data fails.
         */
         */
        public void setAppMetadata(@Nullable PersistableBundle data) throws IOException {
        public void setAppMetadata(@Nullable PersistableBundle data) throws IOException {
            if (data == null) {
            if (data == null || data.isEmpty()) {
                try {
                    mSession.removeAppMetadata();
                } catch (RemoteException e) {
                    throw e.rethrowFromSystemServer();
                }
                return;
                return;
            }
            }
            Objects.requireNonNull(data);
            try (OutputStream outputStream = openWriteAppMetadata()) {
            try (OutputStream outputStream = openWriteAppMetadata()) {
                data.writeToStream(outputStream);
                data.writeToStream(outputStream);
            }
            }
+12 −1
Original line number Original line Diff line number Diff line
@@ -1521,7 +1521,10 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
    public ParcelFileDescriptor getAppMetadataFd() {
    public ParcelFileDescriptor getAppMetadataFd() {
        assertCallerIsOwnerOrRoot();
        assertCallerIsOwnerOrRoot();
        synchronized (mLock) {
        synchronized (mLock) {
            assertPreparedAndNotCommittedOrDestroyedLocked("openRead");
            assertPreparedAndNotCommittedOrDestroyedLocked("getAppMetadataFd");
            if (getStagedAppMetadataFile() == null) {
                return null;
            }
            try {
            try {
                return openReadInternalLocked(APP_METADATA_FILE_NAME);
                return openReadInternalLocked(APP_METADATA_FILE_NAME);
            } catch (IOException e) {
            } catch (IOException e) {
@@ -1530,6 +1533,14 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
        }
        }
    }
    }


    @Override
    public void removeAppMetadata() {
        File file = getStagedAppMetadataFile();
        if (file != null) {
            file.delete();
        }
    }

    private static long getAppMetadataSizeLimit() {
    private static long getAppMetadataSizeLimit() {
        final long token = Binder.clearCallingIdentity();
        final long token = Binder.clearCallingIdentity();
        try {
        try {