Merge "Add a way to customize boot animation during userspace reboot"
This commit is contained in:
@@ -17,6 +17,8 @@
|
|||||||
#define LOG_NDEBUG 0
|
#define LOG_NDEBUG 0
|
||||||
#define LOG_TAG "BootAnimation"
|
#define LOG_TAG "BootAnimation"
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include <sys/inotify.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 PRODUCT_SHUTDOWNANIMATION_FILE[] = "/product/media/shutdownanimation.zip";
|
||||||
static const char SYSTEM_SHUTDOWNANIMATION_FILE[] = "/system/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_DATA_DIR_PATH[] = "/data/system";
|
||||||
static const char SYSTEM_TIME_DIR_NAME[] = "time";
|
static const char SYSTEM_TIME_DIR_NAME[] = "time";
|
||||||
static const char SYSTEM_TIME_DIR_PATH[] = "/data/system/time";
|
static const char SYSTEM_TIME_DIR_PATH[] = "/data/system/time";
|
||||||
@@ -341,6 +347,16 @@ bool BootAnimation::preloadAnimation() {
|
|||||||
return false;
|
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() {
|
void BootAnimation::findBootAnimationFile() {
|
||||||
// If the device has encryption turned on or is in process
|
// If the device has encryption turned on or is in process
|
||||||
// of being encrypted we show the encrypted boot animation.
|
// of being encrypted we show the encrypted boot animation.
|
||||||
@@ -351,28 +367,33 @@ void BootAnimation::findBootAnimationFile() {
|
|||||||
!strcmp("trigger_restart_min_framework", decrypt);
|
!strcmp("trigger_restart_min_framework", decrypt);
|
||||||
|
|
||||||
if (!mShuttingDown && encryptedAnimation) {
|
if (!mShuttingDown && encryptedAnimation) {
|
||||||
static const char* encryptedBootFiles[] =
|
static const std::vector<std::string> encryptedBootFiles = {
|
||||||
{PRODUCT_ENCRYPTED_BOOTANIMATION_FILE, SYSTEM_ENCRYPTED_BOOTANIMATION_FILE};
|
PRODUCT_ENCRYPTED_BOOTANIMATION_FILE, SYSTEM_ENCRYPTED_BOOTANIMATION_FILE,
|
||||||
for (const char* f : encryptedBootFiles) {
|
};
|
||||||
if (access(f, R_OK) == 0) {
|
if (findBootAnimationFileInternal(encryptedBootFiles)) {
|
||||||
mZipFileName = f;
|
return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const bool playDarkAnim = android::base::GetIntProperty("ro.boot.theme", 0) == 1;
|
const bool playDarkAnim = android::base::GetIntProperty("ro.boot.theme", 0) == 1;
|
||||||
static const char* bootFiles[] =
|
static const std::vector<std::string> bootFiles = {
|
||||||
{APEX_BOOTANIMATION_FILE, playDarkAnim ? PRODUCT_BOOTANIMATION_DARK_FILE : PRODUCT_BOOTANIMATION_FILE,
|
APEX_BOOTANIMATION_FILE, playDarkAnim ? PRODUCT_BOOTANIMATION_DARK_FILE : PRODUCT_BOOTANIMATION_FILE,
|
||||||
OEM_BOOTANIMATION_FILE, SYSTEM_BOOTANIMATION_FILE};
|
OEM_BOOTANIMATION_FILE, SYSTEM_BOOTANIMATION_FILE
|
||||||
static const char* shutdownFiles[] =
|
};
|
||||||
{PRODUCT_SHUTDOWNANIMATION_FILE, OEM_SHUTDOWNANIMATION_FILE, SYSTEM_SHUTDOWNANIMATION_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,
|
||||||
|
};
|
||||||
|
|
||||||
for (const char* f : (!mShuttingDown ? bootFiles : shutdownFiles)) {
|
if (android::base::GetBoolProperty("sys.init.userspace_reboot.in_progress", false)) {
|
||||||
if (access(f, R_OK) == 0) {
|
findBootAnimationFileInternal(userspaceRebootFiles);
|
||||||
mZipFileName = f;
|
} else if (mShuttingDown) {
|
||||||
return;
|
findBootAnimationFileInternal(shutdownFiles);
|
||||||
}
|
} else {
|
||||||
|
findBootAnimationFileInternal(bootFiles);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
#ifndef ANDROID_BOOTANIMATION_H
|
#ifndef ANDROID_BOOTANIMATION_H
|
||||||
#define ANDROID_BOOTANIMATION_H
|
#define ANDROID_BOOTANIMATION_H
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
@@ -157,6 +159,7 @@ private:
|
|||||||
bool parseAnimationDesc(Animation&);
|
bool parseAnimationDesc(Animation&);
|
||||||
bool preloadZip(Animation &animation);
|
bool preloadZip(Animation &animation);
|
||||||
void findBootAnimationFile();
|
void findBootAnimationFile();
|
||||||
|
bool findBootAnimationFileInternal(const std::vector<std::string>& files);
|
||||||
bool preloadAnimation();
|
bool preloadAnimation();
|
||||||
|
|
||||||
void checkExit();
|
void checkExit();
|
||||||
|
|||||||
Reference in New Issue
Block a user