Fix shutdown animation cannot be shown

Don't start shutdown critical service or turn off
backlight, when ro.init.shutdown_animation=true

Bug: 196511757
Test: config ro.init.shutdown_animation=true and build
      shutdownanimation.zip to /system/media/
Signed-off-by: zengshuchuan <zengshuchuan@allwinnertech.com>
Change-Id: I5932b7281af630e80247048a70fe1b24f536d1d9
This commit is contained in:
zengshuchuan 2021-08-10 14:04:34 +08:00 committed by liyong
parent c5c532fc31
commit 21c97a5780
1 changed files with 4 additions and 2 deletions

View File

@ -639,6 +639,7 @@ static void DoReboot(unsigned int cmd, const std::string& reason, const std::str
abort(); abort();
} }
bool do_shutdown_animation = GetBoolProperty("ro.init.shutdown_animation", false);
// watchdogd is a vendor specific component but should be alive to complete shutdown safely. // watchdogd is a vendor specific component but should be alive to complete shutdown safely.
const std::set<std::string> to_starts{"watchdogd"}; const std::set<std::string> to_starts{"watchdogd"};
std::set<std::string> stop_first; std::set<std::string> stop_first;
@ -652,6 +653,8 @@ static void DoReboot(unsigned int cmd, const std::string& reason, const std::str
<< "': " << result.error(); << "': " << result.error();
} }
s->SetShutdownCritical(); s->SetShutdownCritical();
} else if (do_shutdown_animation) {
continue;
} else if (s->IsShutdownCritical()) { } else if (s->IsShutdownCritical()) {
// Start shutdown critical service if not started. // Start shutdown critical service if not started.
if (auto result = s->Start(); !result.ok()) { if (auto result = s->Start(); !result.ok()) {
@ -664,14 +667,13 @@ static void DoReboot(unsigned int cmd, const std::string& reason, const std::str
} }
// remaining operations (specifically fsck) may take a substantial duration // remaining operations (specifically fsck) may take a substantial duration
if (cmd == ANDROID_RB_POWEROFF || is_thermal_shutdown) { if (!do_shutdown_animation && (cmd == ANDROID_RB_POWEROFF || is_thermal_shutdown)) {
TurnOffBacklight(); TurnOffBacklight();
} }
Service* boot_anim = ServiceList::GetInstance().FindService("bootanim"); Service* boot_anim = ServiceList::GetInstance().FindService("bootanim");
Service* surface_flinger = ServiceList::GetInstance().FindService("surfaceflinger"); Service* surface_flinger = ServiceList::GetInstance().FindService("surfaceflinger");
if (boot_anim != nullptr && surface_flinger != nullptr && surface_flinger->IsRunning()) { if (boot_anim != nullptr && surface_flinger != nullptr && surface_flinger->IsRunning()) {
bool do_shutdown_animation = GetBoolProperty("ro.init.shutdown_animation", false);
if (do_shutdown_animation) { if (do_shutdown_animation) {
SetProperty("service.bootanim.exit", "0"); SetProperty("service.bootanim.exit", "0");