Only wait for successful vibration

Currently, the device sleeps for 500ms even if no
vibrator is available, such as on a TV device.
This CL ensures the sleep happens only if the vibration
is happening successfully.

MUST_SLEEP because this is just moving already exiting code.

Test: atest FrameworksServicesTests:VibratorManagerServiceTest
Bug: 276697207
Change-Id: I14182e43ad1fe08c2276be7988f2ac1fb3d79634
Merged-In: I14182e43ad1fe08c2276be7988f2ac1fb3d79634
This commit is contained in:
Nikolas Havrikov
2023-03-30 18:07:34 +02:00
parent 63f9e57674
commit e54c911b10

View File

@@ -703,17 +703,20 @@ public final class ShutdownThread extends Thread {
// vibrate before shutting down
Vibrator vibrator = new SystemVibrator(context);
try {
vibrator.vibrate(SHUTDOWN_VIBRATE_MS, VIBRATION_ATTRIBUTES);
if (vibrator.hasVibrator()) {
vibrator.vibrate(SHUTDOWN_VIBRATE_MS, VIBRATION_ATTRIBUTES);
// vibrator is asynchronous so we need to wait to avoid shutting down too soon.
try {
Thread.sleep(SHUTDOWN_VIBRATE_MS);
} catch (InterruptedException unused) {
// this is not critical and does not require logging
}
}
} catch (Exception e) {
// Failure to vibrate shouldn't interrupt shutdown. Just log it.
Log.w(TAG, "Failed to vibrate during shutdown.", e);
}
// vibrator is asynchronous so we need to wait to avoid shutting down too soon.
try {
Thread.sleep(SHUTDOWN_VIBRATE_MS);
} catch (InterruptedException unused) {
}
}
// Shutdown power
Log.i(TAG, "Performing low-level shutdown...");