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

Commit c3bd9def authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Refactor DynamicSystemInstallationService notifications" am: fe4b43da...

Merge "Refactor DynamicSystemInstallationService notifications" am: fe4b43da am: d41966bc am: 4eb4aa3a

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1541269

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I9bd2504346685aaca8289af3d3a50e19a011d606
parents 2736178b 4eb4aa3a
Loading
Loading
Loading
Loading
+17 −35
Original line number Original line Diff line number Diff line
@@ -138,9 +138,6 @@ public class DynamicSystemInstallationService extends Service
    private long mCurrentPartitionSize;
    private long mCurrentPartitionSize;
    private long mCurrentPartitionInstalledSize;
    private long mCurrentPartitionInstalledSize;


    private boolean mJustCancelledByUser;
    private boolean mKeepNotification;

    // This is for testing only now
    // This is for testing only now
    private boolean mEnableWhenCompleted;
    private boolean mEnableWhenCompleted;


@@ -174,11 +171,6 @@ public class DynamicSystemInstallationService extends Service
        if (cache != null) {
        if (cache != null) {
            cache.flush();
            cache.flush();
        }
        }

        if (!mKeepNotification) {
            // Cancel the persistent notification.
            mNM.cancel(NOTIFICATION_ID);
        }
    }
    }


    @Override
    @Override
@@ -231,9 +223,11 @@ public class DynamicSystemInstallationService extends Service
            return;
            return;
        }
        }


        boolean removeNotification = false;
        switch (result) {
        switch (result) {
            case RESULT_CANCELLED:
            case RESULT_CANCELLED:
                postStatus(STATUS_NOT_STARTED, CAUSE_INSTALL_CANCELLED, null);
                postStatus(STATUS_NOT_STARTED, CAUSE_INSTALL_CANCELLED, null);
                removeNotification = true;
                break;
                break;


            case RESULT_ERROR_IO:
            case RESULT_ERROR_IO:
@@ -251,7 +245,7 @@ public class DynamicSystemInstallationService extends Service
        }
        }


        // if it's not successful, reset the task and stop self.
        // if it's not successful, reset the task and stop self.
        resetTaskAndStop();
        resetTaskAndStop(removeNotification);
    }
    }


    private void executeInstallCommand(Intent intent) {
    private void executeInstallCommand(Intent intent) {
@@ -302,12 +296,12 @@ public class DynamicSystemInstallationService extends Service
            return;
            return;
        }
        }


        stopForeground(true);
        mJustCancelledByUser = true;

        if (mInstallTask.cancel(false)) {
        if (mInstallTask.cancel(false)) {
            // Will stopSelf() in onResult()
            // onResult() would call resetTaskAndStop() upon task completion.
            Log.d(TAG, "Cancel request filed successfully");
            Log.d(TAG, "Cancel request filed successfully");
            // Dismiss the notification as soon as possible as DynamicSystemManager.remove() may
            // block.
            stopForeground(STOP_FOREGROUND_REMOVE);
        } else {
        } else {
            Log.e(TAG, "Trying to cancel installation while it's already completed.");
            Log.e(TAG, "Trying to cancel installation while it's already completed.");
        }
        }
@@ -322,8 +316,7 @@ public class DynamicSystemInstallationService extends Service
        if (!isDynamicSystemInstalled() && (getStatus() != STATUS_READY)) {
        if (!isDynamicSystemInstalled() && (getStatus() != STATUS_READY)) {
            Log.e(TAG, "Trying to discard AOT while there is no complete installation");
            Log.e(TAG, "Trying to discard AOT while there is no complete installation");
            // Stop foreground state and dismiss stale notification.
            // Stop foreground state and dismiss stale notification.
            stopForeground(STOP_FOREGROUND_REMOVE);
            resetTaskAndStop(true);
            resetTaskAndStop();
            return;
            return;
        }
        }


@@ -331,8 +324,8 @@ public class DynamicSystemInstallationService extends Service
                getString(R.string.toast_dynsystem_discarded),
                getString(R.string.toast_dynsystem_discarded),
                Toast.LENGTH_LONG).show();
                Toast.LENGTH_LONG).show();


        resetTaskAndStop();
        postStatus(STATUS_NOT_STARTED, CAUSE_INSTALL_CANCELLED, null);
        postStatus(STATUS_NOT_STARTED, CAUSE_INSTALL_CANCELLED, null);
        resetTaskAndStop(true);


        mDynSystem.remove();
        mDynSystem.remove();
    }
    }
@@ -412,12 +405,13 @@ public class DynamicSystemInstallationService extends Service
    }
    }


    private void resetTaskAndStop() {
    private void resetTaskAndStop() {
        mInstallTask = null;
        resetTaskAndStop(/* removeNotification= */ false);
    }


        new Handler().postDelayed(() -> {
    private void resetTaskAndStop(boolean removeNotification) {
            stopForeground(STOP_FOREGROUND_DETACH);
        mInstallTask = null;
        stopForeground(removeNotification ? STOP_FOREGROUND_REMOVE : STOP_FOREGROUND_DETACH);
        stopSelf();
        stopSelf();
        }, 50);
    }
    }


    private void prepareNotification() {
    private void prepareNotification() {
@@ -525,7 +519,7 @@ public class DynamicSystemInstallationService extends Service
    private void postStatus(int status, int cause, Throwable detail) {
    private void postStatus(int status, int cause, Throwable detail) {
        String statusString;
        String statusString;
        String causeString;
        String causeString;
        mKeepNotification = false;
        boolean notifyOnNotificationBar = true;


        switch (status) {
        switch (status) {
            case STATUS_NOT_STARTED:
            case STATUS_NOT_STARTED:
@@ -551,18 +545,16 @@ public class DynamicSystemInstallationService extends Service
                break;
                break;
            case CAUSE_INSTALL_CANCELLED:
            case CAUSE_INSTALL_CANCELLED:
                causeString = "INSTALL_CANCELLED";
                causeString = "INSTALL_CANCELLED";
                notifyOnNotificationBar = false;
                break;
                break;
            case CAUSE_ERROR_IO:
            case CAUSE_ERROR_IO:
                causeString = "ERROR_IO";
                causeString = "ERROR_IO";
                mKeepNotification = true;
                break;
                break;
            case CAUSE_ERROR_INVALID_URL:
            case CAUSE_ERROR_INVALID_URL:
                causeString = "ERROR_INVALID_URL";
                causeString = "ERROR_INVALID_URL";
                mKeepNotification = true;
                break;
                break;
            case CAUSE_ERROR_EXCEPTION:
            case CAUSE_ERROR_EXCEPTION:
                causeString = "ERROR_EXCEPTION";
                causeString = "ERROR_EXCEPTION";
                mKeepNotification = true;
                break;
                break;
            default:
            default:
                causeString = "CAUSE_NOT_SPECIFIED";
                causeString = "CAUSE_NOT_SPECIFIED";
@@ -571,16 +563,6 @@ public class DynamicSystemInstallationService extends Service


        Log.d(TAG, "status=" + statusString + ", cause=" + causeString + ", detail=" + detail);
        Log.d(TAG, "status=" + statusString + ", cause=" + causeString + ", detail=" + detail);


        boolean notifyOnNotificationBar = true;

        if (status == STATUS_NOT_STARTED
                && cause == CAUSE_INSTALL_CANCELLED
                && mJustCancelledByUser) {
            // if task is cancelled by user, do not notify them
            notifyOnNotificationBar = false;
            mJustCancelledByUser = false;
        }

        if (notifyOnNotificationBar) {
        if (notifyOnNotificationBar) {
            mNM.notify(NOTIFICATION_ID, buildNotification(status, cause, detail));
            mNM.notify(NOTIFICATION_ID, buildNotification(status, cause, detail));
        }
        }