save uncrypt status to last_install

Save the uncrypt time cost to /cache/recovery/uncrypt_status. Recovery
reads the file and saves its contents to last_install.

Bug: 31383361
Test: Tested on angler and uncrypt_time reports correctly.

(cherry picked from commit fe16b5ccaf80f6e04d5b722c37c1abd70457ad28)

Change-Id: Id69681a35c7eb2f0eb21b48e3616dcda82ce41b8
diff --git a/install.cpp b/install.cpp
index 02c845c..9227d58 100644
--- a/install.cpp
+++ b/install.cpp
@@ -30,6 +30,8 @@
 #include <string>
 #include <vector>
 
+#include <android-base/file.h>
+#include <android-base/logging.h>
 #include <android-base/parseint.h>
 #include <android-base/stringprintf.h>
 #include <android-base/strings.h>
@@ -54,6 +56,7 @@
 static constexpr const char* AB_OTA_PAYLOAD = "payload.bin";
 #define PUBLIC_KEYS_FILE "/res/keys"
 static constexpr const char* METADATA_PATH = "META-INF/com/android/metadata";
+static constexpr const char* UNCRYPT_STATUS = "/cache/recovery/uncrypt_status";
 
 // Default allocation of progress bar segments to operations
 static const int VERIFICATION_PROGRESS_TIME = 60;
@@ -539,6 +542,16 @@
             fprintf(install_log, "%s\n", s.c_str());
         }
 
+        if (ensure_path_mounted(UNCRYPT_STATUS) != 0) {
+            LOG(WARNING) << "Can't mount " << UNCRYPT_STATUS;
+        } else {
+            std::string uncrypt_status;
+            if (!android::base::ReadFileToString(UNCRYPT_STATUS, &uncrypt_status)) {
+                PLOG(WARNING) << "failed to read uncrypt status";
+            } else {
+                fprintf(install_log, "%s\n", android::base::Trim(uncrypt_status).c_str());
+            }
+        }
         fclose(install_log);
     }
     return result;