summaryrefslogtreecommitdiff
path: root/cmds/bootanimation/BootAnimationUtil.cpp
diff options
context:
space:
mode:
authorJiyong Park <jiyong@google.com>2018-08-02 17:02:45 +0900
committerJiyong Park <jiyong@google.com>2018-08-02 18:07:54 +0900
commit1581c348fc5d6cbf1673b3dbc5960637f891d488 (patch)
tree31e9444210520c28f42b9445fbc53daf68e5a0be /cmds/bootanimation/BootAnimationUtil.cpp
parent7a01a307753309f198eacbb8a36e15428b38bbe7 (diff)
parentdecdaee091799aced8169d45632c923e2605214e (diff)
Merge QPR1.180718.001
Conflicts: core/java/android/provider/Settings.java core/jni/android_view_InputEventReceiver.cpp core/res/res/values/config.xml core/res/res/values/symbols.xml media/jni/Android.bp packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java packages/SettingsLib/tests/robotests/src/com/android/settingslib/fuelgauge/PowerWhitelistBackendTest.java packages/SystemUI/res/layout/status_bar_mobile_signal_group.xml packages/SystemUI/res/values/config.xml packages/SystemUI/src/com/android/keyguard/KeyguardConstants.java packages/SystemUI/src/com/android/systemui/statusbar/StatusBarMobileView.java services/core/java/com/android/server/ConnectivityService.java services/core/java/com/android/server/NetworkTimeUpdateService.java services/core/java/com/android/server/StorageManagerService.java services/core/java/com/android/server/Watchdog.java services/core/java/com/android/server/am/ActiveServices.java services/core/java/com/android/server/am/ActivityManagerService.java services/core/java/com/android/server/am/ActivityStack.java services/core/java/com/android/server/am/AppTaskImpl.java services/core/java/com/android/server/audio/AudioService.java services/core/java/com/android/server/wm/DisplayContent.java services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordTest.java telephony/java/android/telephony/CarrierConfigManager.java telephony/java/android/telephony/ims/ImsReasonInfo.java telephony/java/android/telephony/ims/feature/MmTelFeature.java telephony/java/com/android/internal/telephony/ISmsBaseImpl.java Change-Id: I3f98340699f9e31be03eaf23fdea70803c4cef42
Diffstat (limited to 'cmds/bootanimation/BootAnimationUtil.cpp')
-rw-r--r--cmds/bootanimation/BootAnimationUtil.cpp43
1 files changed, 43 insertions, 0 deletions
diff --git a/cmds/bootanimation/BootAnimationUtil.cpp b/cmds/bootanimation/BootAnimationUtil.cpp
index 7718daf61d81..1e417e938359 100644
--- a/cmds/bootanimation/BootAnimationUtil.cpp
+++ b/cmds/bootanimation/BootAnimationUtil.cpp
@@ -16,14 +16,30 @@
#include "BootAnimationUtil.h"
+#include <vector>
#include <inttypes.h>
#include <binder/IServiceManager.h>
#include <cutils/properties.h>
#include <utils/Log.h>
#include <utils/SystemClock.h>
+#include <android-base/properties.h>
namespace android {
+namespace {
+
+static constexpr char PLAY_SOUND_PROP_NAME[] = "persist.sys.bootanim.play_sound";
+static constexpr char BOOT_COMPLETED_PROP_NAME[] = "sys.boot_completed";
+static constexpr char POWER_CTL_PROP_NAME[] = "sys.powerctl";
+static constexpr char BOOTREASON_PROP_NAME[] = "ro.boot.bootreason";
+static const std::vector<std::string> PLAY_SOUND_BOOTREASON_BLACKLIST {
+ "kernel_panic",
+ "Panic",
+ "Watchdog",
+};
+
+} // namespace
+
bool bootAnimationDisabled() {
char value[PROPERTY_VALUE_MAX];
@@ -58,4 +74,31 @@ void waitForSurfaceFlinger() {
}
}
+bool playSoundsAllowed() {
+ // Only play sounds for system boots, not runtime restarts.
+ if (android::base::GetBoolProperty(BOOT_COMPLETED_PROP_NAME, false)) {
+ return false;
+ }
+ // no audio while shutting down
+ if (!android::base::GetProperty(POWER_CTL_PROP_NAME, "").empty()) {
+ return false;
+ }
+ // Read the system property to see if we should play the sound.
+ // If it's not present, default to allowed.
+ if (!property_get_bool(PLAY_SOUND_PROP_NAME, 1)) {
+ return false;
+ }
+
+ // Don't play sounds if this is a reboot due to an error.
+ char bootreason[PROPERTY_VALUE_MAX];
+ if (property_get(BOOTREASON_PROP_NAME, bootreason, nullptr) > 0) {
+ for (const auto& str : PLAY_SOUND_BOOTREASON_BLACKLIST) {
+ if (strcasecmp(str.c_str(), bootreason) == 0) {
+ return false;
+ }
+ }
+ }
+ return true;
+}
+
} // namespace android