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

Commit 57ea1e57 authored by Mohammed Althaf T's avatar Mohammed Althaf T 😊
Browse files

Updater: Update A/B devices on one go

Change-Id: Iac2a6888b8da6b27c0c9887f32266e8e5b73d9af
parent 86568f55
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@
    <string name="pause_button">Pause</string>
    <string name="resume_button">Resume</string>
    <string name="suspend_button">Suspend</string>
    <string name="reboot_install">Reboot and install</string>

    <string name="installing_update">Installing update package</string>
    <string name="installing_update_error">Install error</string>
@@ -103,6 +104,7 @@
    <string name="list_no_updates">You are running the latest /e/OS version. To manually check for updates, use the Refresh button.</string>

    <string name="action_download">Download</string>
    <string name="action_update">Apply update</string>
    <string name="action_pause">Pause</string>
    <string name="action_resume">Resume</string>
    <string name="action_install">Install</string>
+6 −3
Original line number Diff line number Diff line
@@ -239,7 +239,8 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
        if (update == null) {
            // The update was deleted
            viewHolder.mAction.setEnabled(false);
            viewHolder.mAction.setText(R.string.action_download);
            viewHolder.mAction.setText(Utils.isABDevice() ? R.string.action_update
                    : R.string.action_download);
            return;
        }

@@ -347,7 +348,8 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
                .setTitle(R.string.update_on_mobile_data_title)
                .setMessage(R.string.update_on_mobile_data_message)
                .setView(checkboxView)
                .setPositiveButton(R.string.action_download,
                .setPositiveButton(Utils.isABDevice() ? R.string.action_update
                                : R.string.action_download,
                        (dialog, which) -> {
                            if (checkbox.isChecked()) {
                                preferences.edit()
@@ -366,7 +368,8 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
        final View.OnClickListener clickListener;
        switch (action) {
            case DOWNLOAD:
                button.setText(R.string.action_download);
                button.setText(Utils.isABDevice() ? R.string.action_update
                        : R.string.action_download);
                button.setEnabled(enabled);
                clickListener = enabled ? view -> {
                    AlertDialog.Builder freeSpaceDialog = getSpaceDialog(
+42 −1
Original line number Diff line number Diff line
@@ -346,12 +346,45 @@ public class UpdaterService extends Service {
                mNotificationBuilder.setSmallIcon(R.drawable.ic_system_update);
                mNotificationBuilder.setProgress(0, 0, false);
                String text = getString(R.string.download_completed_notification);
                boolean hasRequiredSpace = Utils.availableFreeSpace() > (update.getFileSize() * 2);

                if (!Utils.canInstall(update) || !Utils.isBatteryLevelOk(this)
                        || !hasRequiredSpace) {
                    /* Show notification if any of the below condition didn't met. */
                    text = getString(R.string.blocked_update_dialog_title) + ". ";
                    if (!Utils.isBatteryLevelOk(this)) {
                        text = text + getString(R.string.dialog_battery_low_title);
                    } else if (!hasRequiredSpace) {
                        text = text + getString(R.string.dialog_free_space_low_title);
                    } else if (!Utils.canInstall(update)) {
                        text = text + getString(R.string.verification_failed_notification);
                    }
                } else if (!Utils.isABDevice()) {
                    /* Add action to reboot and install for Non-A/B devices. */
                    mNotificationBuilder.mActions.clear();
                    mNotificationBuilder.addAction(R.drawable.ic_system_update,
                            getString(R.string.reboot_install),
                            getInstallationPendingIntent(update.getDownloadId()));
                }

                mNotificationBuilder.setContentText(text);
                mNotificationBuilder.setTicker(text);
                mNotificationBuilder.setOngoing(false);
                mNotificationBuilder.setAutoCancel(true);
                mNotificationManager.notify(NOTIFICATION_ID, mNotificationBuilder.build());

                /* Make sure these conditions are met before auto install
                    - Can install package (Is a newer build or downgrade allowed)
                    - Battery level (Above 30% if discharging or 20% if charging)
                    - Free space to install (Double the size of the ota zip)
                */
                if (Utils.isABDevice() && Utils.canInstall(update)
                        && Utils.isBatteryLevelOk(this) && hasRequiredSpace) {
                    Utils.triggerUpdate(this, update.getDownloadId());
                } else {
                    tryStopSelf();
                }

                break;
            }
            case VERIFICATION_FAILED: {
@@ -525,6 +558,14 @@ public class UpdaterService extends Service {
                PendingIntent.FLAG_UPDATE_CURRENT);
    }

    private PendingIntent getInstallationPendingIntent(String downloadId) {
        final Intent intent = new Intent(this, UpdaterService.class);
        intent.setAction(ACTION_INSTALL_UPDATE);
        intent.putExtra(UpdaterService.EXTRA_DOWNLOAD_ID, downloadId);
        return PendingIntent.getService(this, 0, intent,
                PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
    }

    private PendingIntent getResumeInstallationPendingIntent() {
        final Intent intent = new Intent(this, UpdaterService.class);
        intent.setAction(ACTION_INSTALL_RESUME);