diff options
author | Nikita Ioffe <ioffe@google.com> | 2020-01-27 17:16:03 +0000 |
---|---|---|
committer | Nikita Ioffe <ioffe@google.com> | 2020-01-28 15:41:42 +0000 |
commit | 06c986e7c92d43f95718ee34b1984e8dffbdc15c (patch) | |
tree | 4a45c146f89a7aa7995fb453ddfef31c12692367 /cmds/bootanimation/BootAnimation.cpp | |
parent | 3f0a9dbf65f4dd239ef15a4a905dd4cd9dc2753f (diff) |
Add a way to customize boot animation during userspace reboot
In case userspace reboot boot animation can't be found, a default
Android logo is going to be shown.
Test: adb reboot userspace
Bug: 148172262
Change-Id: Ida12ffcfe73b335b63178f3e3f2b0c4063dae2c2
Diffstat (limited to 'cmds/bootanimation/BootAnimation.cpp')
-rw-r--r-- | cmds/bootanimation/BootAnimation.cpp | 57 |
1 files changed, 39 insertions, 18 deletions
diff --git a/cmds/bootanimation/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp index db384baff4d7..85db4b9f0f8f 100644 --- a/cmds/bootanimation/BootAnimation.cpp +++ b/cmds/bootanimation/BootAnimation.cpp @@ -17,6 +17,8 @@ #define LOG_NDEBUG 0 #define LOG_TAG "BootAnimation" +#include <vector> + #include <stdint.h> #include <inttypes.h> #include <sys/inotify.h> @@ -80,6 +82,10 @@ static const char OEM_SHUTDOWNANIMATION_FILE[] = "/oem/media/shutdownanimation.z static const char PRODUCT_SHUTDOWNANIMATION_FILE[] = "/product/media/shutdownanimation.zip"; static const char SYSTEM_SHUTDOWNANIMATION_FILE[] = "/system/media/shutdownanimation.zip"; +static constexpr const char* PRODUCT_USERSPACE_REBOOT_ANIMATION_FILE = "/product/media/userspace-reboot.zip"; +static constexpr const char* OEM_USERSPACE_REBOOT_ANIMATION_FILE = "/oem/media/userspace-reboot.zip"; +static constexpr const char* SYSTEM_USERSPACE_REBOOT_ANIMATION_FILE = "/system/media/userspace-reboot.zip"; + static const char SYSTEM_DATA_DIR_PATH[] = "/data/system"; static const char SYSTEM_TIME_DIR_NAME[] = "time"; static const char SYSTEM_TIME_DIR_PATH[] = "/data/system/time"; @@ -341,6 +347,16 @@ bool BootAnimation::preloadAnimation() { return false; } +bool BootAnimation::findBootAnimationFileInternal(const std::vector<std::string> &files) { + for (const std::string& f : files) { + if (access(f.c_str(), R_OK) == 0) { + mZipFileName = f.c_str(); + return true; + } + } + return false; +} + void BootAnimation::findBootAnimationFile() { // If the device has encryption turned on or is in process // of being encrypted we show the encrypted boot animation. @@ -351,28 +367,33 @@ void BootAnimation::findBootAnimationFile() { !strcmp("trigger_restart_min_framework", decrypt); if (!mShuttingDown && encryptedAnimation) { - static const char* encryptedBootFiles[] = - {PRODUCT_ENCRYPTED_BOOTANIMATION_FILE, SYSTEM_ENCRYPTED_BOOTANIMATION_FILE}; - for (const char* f : encryptedBootFiles) { - if (access(f, R_OK) == 0) { - mZipFileName = f; - return; - } + static const std::vector<std::string> encryptedBootFiles = { + PRODUCT_ENCRYPTED_BOOTANIMATION_FILE, SYSTEM_ENCRYPTED_BOOTANIMATION_FILE, + }; + if (findBootAnimationFileInternal(encryptedBootFiles)) { + return; } } const bool playDarkAnim = android::base::GetIntProperty("ro.boot.theme", 0) == 1; - static const char* bootFiles[] = - {APEX_BOOTANIMATION_FILE, playDarkAnim ? PRODUCT_BOOTANIMATION_DARK_FILE : PRODUCT_BOOTANIMATION_FILE, - OEM_BOOTANIMATION_FILE, SYSTEM_BOOTANIMATION_FILE}; - static const char* shutdownFiles[] = - {PRODUCT_SHUTDOWNANIMATION_FILE, OEM_SHUTDOWNANIMATION_FILE, SYSTEM_SHUTDOWNANIMATION_FILE, ""}; - - for (const char* f : (!mShuttingDown ? bootFiles : shutdownFiles)) { - if (access(f, R_OK) == 0) { - mZipFileName = f; - return; - } + static const std::vector<std::string> bootFiles = { + APEX_BOOTANIMATION_FILE, playDarkAnim ? PRODUCT_BOOTANIMATION_DARK_FILE : PRODUCT_BOOTANIMATION_FILE, + OEM_BOOTANIMATION_FILE, SYSTEM_BOOTANIMATION_FILE + }; + static const std::vector<std::string> shutdownFiles = { + PRODUCT_SHUTDOWNANIMATION_FILE, OEM_SHUTDOWNANIMATION_FILE, SYSTEM_SHUTDOWNANIMATION_FILE, "" + }; + static const std::vector<std::string> userspaceRebootFiles = { + PRODUCT_USERSPACE_REBOOT_ANIMATION_FILE, OEM_USERSPACE_REBOOT_ANIMATION_FILE, + SYSTEM_USERSPACE_REBOOT_ANIMATION_FILE, + }; + + if (android::base::GetBoolProperty("sys.init.userspace_reboot.in_progress", false)) { + findBootAnimationFileInternal(userspaceRebootFiles); + } else if (mShuttingDown) { + findBootAnimationFileInternal(shutdownFiles); + } else { + findBootAnimationFileInternal(bootFiles); } } |