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

Commit 677dfeae authored by Yi-Yo Chiang's avatar Yi-Yo Chiang Committed by Yo Chiang
Browse files

DSUService: Deduplicate InstallUserdata() and InstallScratch()

Factor out common code and some minor polishing.

Bug: 165471299
Test: Fire a DSU installation and observe logcat
Change-Id: Ia13db74c038e49d888e69e43b59ab0ad5b078464
parent 0885cc3d
Loading
Loading
Loading
Loading
+15 −45
Original line number Diff line number Diff line
@@ -320,20 +320,21 @@ class InstallationAsyncTask extends AsyncTask<String, InstallationAsyncTask.Prog
        }
    }

    private void installScratch() throws IOException {
        final long scratchSize = mDynSystem.suggestScratchSize();
    private void installWritablePartition(final String partitionName, final long partitionSize)
            throws IOException {
        Log.d(TAG, "Creating writable partition: " + partitionName + ", size: " + partitionSize);

        Thread thread = new Thread() {
            @Override
            public void run() {
                mInstallationSession =
                        mDynSystem.createPartition("scratch", scratchSize, /* readOnly= */ false);
                        mDynSystem.createPartition(
                                partitionName, partitionSize, /* readOnly= */ false);
            }
        };

        Log.d(TAG, "Creating partition: scratch, size = " + scratchSize);
        thread.start();

        Progress progress = new Progress("scratch", scratchSize, mNumInstalledPartitions++);
        Progress progress = new Progress(partitionName, partitionSize, mNumInstalledPartitions++);

        while (thread.isAlive()) {
            if (isCancelled()) {
@@ -356,53 +357,22 @@ class InstallationAsyncTask extends AsyncTask<String, InstallationAsyncTask.Prog

        if (mInstallationSession == null) {
            throw new IOException(
                    "Failed to start installation with requested size: " + scratchSize);
                    "Failed to start installation with requested size: " + partitionSize);
        }

        // Reset installation session and verify that installation completes successfully.
        mInstallationSession = null;
        if (!mDynSystem.closePartition()) {
            throw new IOException("Failed to complete partition installation: scratch");
        }
    }

    private void installUserdata() throws IOException {
        Thread thread = new Thread(() -> {
            mInstallationSession = mDynSystem.createPartition("userdata", mUserdataSize, false);
        });

        Log.d(TAG, "Creating partition: userdata, size = " + mUserdataSize);
        thread.start();

        Progress progress = new Progress("userdata", mUserdataSize, mNumInstalledPartitions++);

        while (thread.isAlive()) {
            if (isCancelled()) {
                return;
            throw new IOException("Failed to complete partition installation: " + partitionName);
        }

            final long installedSize = mDynSystem.getInstallationProgress().bytes_processed;

            if (installedSize > progress.installedSize + MIN_PROGRESS_TO_PUBLISH) {
                progress.installedSize = installedSize;
                publishProgress(progress);
    }

            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                // Ignore the error.
            }
    private void installScratch() throws IOException {
        installWritablePartition("scratch", mDynSystem.suggestScratchSize());
    }

        if (mInstallationSession == null) {
            throw new IOException(
                    "Failed to start installation with requested size: " + mUserdataSize);
        }
        // Reset installation session and verify that installation completes successfully.
        mInstallationSession = null;
        if (!mDynSystem.closePartition()) {
            throw new IOException("Failed to complete partition installation: userdata");
        }
    private void installUserdata() throws IOException {
        installWritablePartition("userdata", mUserdataSize);
    }

    private void installImages() throws IOException, ImageValidationException {