From 21c97a5780bb9ddc1ede6f5f23f7f66ac15edb04 Mon Sep 17 00:00:00 2001 From: zengshuchuan Date: Tue, 10 Aug 2021 14:04:34 +0800 Subject: [PATCH] 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 Change-Id: I5932b7281af630e80247048a70fe1b24f536d1d9 --- init/reboot.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/init/reboot.cpp b/init/reboot.cpp index 0e788e495..593913b7d 100644 --- a/init/reboot.cpp +++ b/init/reboot.cpp @@ -639,6 +639,7 @@ static void DoReboot(unsigned int cmd, const std::string& reason, const std::str 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. const std::set to_starts{"watchdogd"}; std::set stop_first; @@ -652,6 +653,8 @@ static void DoReboot(unsigned int cmd, const std::string& reason, const std::str << "': " << result.error(); } s->SetShutdownCritical(); + } else if (do_shutdown_animation) { + continue; } else if (s->IsShutdownCritical()) { // Start shutdown critical service if not started. 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 - if (cmd == ANDROID_RB_POWEROFF || is_thermal_shutdown) { + if (!do_shutdown_animation && (cmd == ANDROID_RB_POWEROFF || is_thermal_shutdown)) { TurnOffBacklight(); } Service* boot_anim = ServiceList::GetInstance().FindService("bootanim"); Service* surface_flinger = ServiceList::GetInstance().FindService("surfaceflinger"); if (boot_anim != nullptr && surface_flinger != nullptr && surface_flinger->IsRunning()) { - bool do_shutdown_animation = GetBoolProperty("ro.init.shutdown_animation", false); if (do_shutdown_animation) { SetProperty("service.bootanim.exit", "0");