SetupWizard: update recovery after setup

 * Instead of doing it when going to next page

Change-Id: I65c5ca1bab1d79c8fd5906b36a02fd74547827ac
diff --git a/src/org/lineageos/setupwizard/FinishActivity.java b/src/org/lineageos/setupwizard/FinishActivity.java
index 02f40e0..4eeaeb9 100644
--- a/src/org/lineageos/setupwizard/FinishActivity.java
+++ b/src/org/lineageos/setupwizard/FinishActivity.java
@@ -19,8 +19,10 @@
 
 import static org.lineageos.setupwizard.SetupWizardApp.ACTION_SETUP_COMPLETE;
 import static org.lineageos.setupwizard.SetupWizardApp.DISABLE_NAV_KEYS;
+import static org.lineageos.setupwizard.SetupWizardApp.ENABLE_RECOVERY_UPDATE;
 import static org.lineageos.setupwizard.SetupWizardApp.KEY_SEND_METRICS;
 import static org.lineageos.setupwizard.SetupWizardApp.LOGV;
+import static org.lineageos.setupwizard.SetupWizardApp.UPDATE_RECOVERY_PROP;
 
 import android.animation.Animator;
 import android.app.Activity;
@@ -34,6 +36,7 @@
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.UserHandle;
+import android.os.SystemProperties;
 import android.preference.PreferenceManager;
 import android.view.View;
 import android.view.ViewAnimationUtils;
@@ -174,6 +177,7 @@
         }
         handleEnableMetrics(mSetupWizardApp);
         handleNavKeys(mSetupWizardApp);
+        handleRecoveryUpdate(mSetupWizardApp);
         final WallpaperManager wallpaperManager =
                 WallpaperManager.getInstance(mSetupWizardApp);
         wallpaperManager.forgetLoadedWallpaper();
@@ -200,6 +204,15 @@
         }
     }
 
+    private static void handleRecoveryUpdate(SetupWizardApp setupWizardApp) {
+        if (setupWizardApp.getSettingsBundle().containsKey(ENABLE_RECOVERY_UPDATE)) {
+            boolean update = setupWizardApp.getSettingsBundle()
+                    .getBoolean(ENABLE_RECOVERY_UPDATE);
+
+            SystemProperties.set(UPDATE_RECOVERY_PROP, String.valueOf(update));
+        }
+    }
+
     private static void writeDisableNavkeysOption(Context context, boolean enabled) {
         final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
 
diff --git a/src/org/lineageos/setupwizard/SetupWizardApp.java b/src/org/lineageos/setupwizard/SetupWizardApp.java
index ac7e3c0..88581cf 100644
--- a/src/org/lineageos/setupwizard/SetupWizardApp.java
+++ b/src/org/lineageos/setupwizard/SetupWizardApp.java
@@ -65,6 +65,8 @@
     public static final String KEY_DETECT_CAPTIVE_PORTAL = "captive_portal_detection_enabled";
     public static final String KEY_SEND_METRICS = "send_metrics";
     public static final String DISABLE_NAV_KEYS = "disable_nav_keys";
+    public static final String ENABLE_RECOVERY_UPDATE = "enable_recovery_update";
+    public static final String UPDATE_RECOVERY_PROP = "persist.vendor.recovery_update";
 
     public static final int REQUEST_CODE_SETUP_WIFI = 0;
     public static final int REQUEST_CODE_SETUP_CAPTIVE_PORTAL= 4;
diff --git a/src/org/lineageos/setupwizard/UpdateRecoveryActivity.java b/src/org/lineageos/setupwizard/UpdateRecoveryActivity.java
index 6474d12..aebe830 100644
--- a/src/org/lineageos/setupwizard/UpdateRecoveryActivity.java
+++ b/src/org/lineageos/setupwizard/UpdateRecoveryActivity.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2019-2020 The Calyx Institute
+ * Copyright (C) 2020 The LineageOS Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,6 +16,9 @@
 
 package org.lineageos.setupwizard;
 
+import static org.lineageos.setupwizard.SetupWizardApp.ENABLE_RECOVERY_UPDATE;
+import static org.lineageos.setupwizard.SetupWizardApp.UPDATE_RECOVERY_PROP;
+
 import android.app.Activity;
 import android.content.Intent;
 import android.os.Bundle;
@@ -30,13 +33,14 @@
 
 public class UpdateRecoveryActivity extends BaseSetupWizardActivity {
 
-    private static final String UPDATE_RECOVERY_PROP = "persist.vendor.recovery_update";
-
     private CheckBox mRecoveryUpdateCheckbox;
+    private SetupWizardApp mSetupWizardApp;
+    private static boolean sFirstTime = true;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        mSetupWizardApp = (SetupWizardApp) getApplication();
 
         if (!SetupWizardUtils.hasRecoveryUpdater(this)) {
             Log.v(TAG, "No recovery updater, skipping UpdateRecoveryActivity");
@@ -54,21 +58,29 @@
         cbView.setOnClickListener(v -> {
             mRecoveryUpdateCheckbox.setChecked(!mRecoveryUpdateCheckbox.isChecked());
         });
+
+        // Allow overriding the default checkbox state
+        if (sFirstTime) {
+            mSetupWizardApp.getSettingsBundle().putBoolean(ENABLE_RECOVERY_UPDATE,
+                    SystemProperties.getBoolean(UPDATE_RECOVERY_PROP, true));
+        }
+
+        sFirstTime = false;
     }
 
     @Override
     public void onResume() {
         super.onResume();
 
-        // Default the checkbox to true, the effect will be reflected when going next
-        mRecoveryUpdateCheckbox.setChecked(
-                SystemProperties.getBoolean(UPDATE_RECOVERY_PROP, true));
+        final Bundle myPageBundle = mSetupWizardApp.getSettingsBundle();
+        final boolean checked = myPageBundle.getBoolean(ENABLE_RECOVERY_UPDATE, true);
+        mRecoveryUpdateCheckbox.setChecked(checked);
     }
 
     @Override
     protected void onNextPressed() {
-        SystemProperties.set(UPDATE_RECOVERY_PROP,
-                String.valueOf(mRecoveryUpdateCheckbox.isChecked()));
+        mSetupWizardApp.getSettingsBundle().putBoolean(ENABLE_RECOVERY_UPDATE,
+                mRecoveryUpdateCheckbox.isChecked());
 
         Intent intent = WizardManagerHelper.getNextIntent(getIntent(), Activity.RESULT_OK);
         nextAction(NEXT_REQUEST, intent);