summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author petsjonkin <petsjonkin@google.com> 2024-06-13 15:03:21 +0000
committer Oleg Petšjonkin <petsjonkin@google.com> 2024-06-18 16:45:44 +0000
commit11fdb8e2bd58d8488428853ff0f5caa40b947343 (patch)
tree0f1bae9ae43ce35f7663d059b8c32b303da3d4cb
parent8ed5bdf2e83d83b9e3fbb71b082d5ffaedb5204c (diff)
Suppress shutdown thread vibrations in zen mode
Bug: b/335091231 Test: atest ShutdownThreadTest Flag: EXEMPT trivial behaviour changes / bugfix Change-Id: I133502d1d1650a8adce26810031e5b7f4a951060
-rw-r--r--core/res/res/values/config.xml3
-rw-r--r--core/res/res/values/symbols.xml1
-rw-r--r--services/core/java/com/android/server/power/ShutdownThread.java15
-rw-r--r--services/tests/powerservicetests/src/com/android/server/power/ShutdownThreadTest.java21
4 files changed, 37 insertions, 3 deletions
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 17666cfc60a0..d01122e20306 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -6972,6 +6972,9 @@
Note that, indefinitely repeating vibrations are not allowed as shutdown vibrations. -->
<string name="config_defaultShutdownVibrationFile" />
+ <!-- Whether or not vibration is disabled during shutdown -->
+ <bool name="config_disableShutdownVibrationInZen">false</bool>
+
<!-- Whether single finger panning is enabled by default when magnification is on -->
<bool name="config_enable_a11y_magnification_single_panning">false</bool>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 0de9179e2f65..63934c4dc70b 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -5425,6 +5425,7 @@
<java-symbol type="drawable" name="focus_event_pressed_key_background" />
<java-symbol type="drawable" name="focus_event_rotary_input_background" />
<java-symbol type="string" name="config_defaultShutdownVibrationFile" />
+ <java-symbol type="bool" name="config_disableShutdownVibrationInZen" />
<java-symbol type="string" name="lockscreen_too_many_failed_attempts_countdown" />
<java-symbol type="bool" name="config_enable_a11y_magnification_single_panning" />
diff --git a/services/core/java/com/android/server/power/ShutdownThread.java b/services/core/java/com/android/server/power/ShutdownThread.java
index 6b7f2fa1cf0d..4b4e442b7b84 100644
--- a/services/core/java/com/android/server/power/ShutdownThread.java
+++ b/services/core/java/com/android/server/power/ShutdownThread.java
@@ -48,6 +48,7 @@ import android.os.VibrationAttributes;
import android.os.VibrationEffect;
import android.os.Vibrator;
import android.os.vibrator.persistence.VibrationXmlParser;
+import android.provider.Settings;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.ArrayMap;
@@ -743,6 +744,11 @@ public final class ShutdownThread extends Thread {
*/
@VisibleForTesting // For testing vibrations without shutting down device
void playShutdownVibration(Context context) {
+ if (mInjector.isShutdownVibrationDisabled(context)) {
+ Log.i(TAG, "Vibration disabled in config");
+ return;
+ }
+
Vibrator vibrator = mInjector.getVibrator(context);
if (!vibrator.hasVibrator()) {
return;
@@ -920,5 +926,14 @@ public final class ShutdownThread extends Thread {
return context.getResources().getString(
com.android.internal.R.string.config_defaultShutdownVibrationFile);
}
+
+ public boolean isShutdownVibrationDisabled(Context context) {
+ boolean disabledInConfig = context.getResources().getBoolean(
+ com.android.internal.R.bool.config_disableShutdownVibrationInZen);
+ boolean isZenMode = Settings.Global.getInt(context.getContentResolver(),
+ Settings.Global.ZEN_MODE, Settings.Global.ZEN_MODE_OFF)
+ != Settings.Global.ZEN_MODE_OFF;
+ return disabledInConfig && isZenMode;
+ }
}
}
diff --git a/services/tests/powerservicetests/src/com/android/server/power/ShutdownThreadTest.java b/services/tests/powerservicetests/src/com/android/server/power/ShutdownThreadTest.java
index 62075b828a62..ab1b0cc51d39 100644
--- a/services/tests/powerservicetests/src/com/android/server/power/ShutdownThreadTest.java
+++ b/services/tests/powerservicetests/src/com/android/server/power/ShutdownThreadTest.java
@@ -17,11 +17,10 @@
package com.android.server.power;
import static com.android.server.power.ShutdownThread.DEFAULT_SHUTDOWN_VIBRATE_MS;
+
import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -42,7 +41,6 @@ import org.mockito.MockitoAnnotations;
import java.io.File;
import java.io.FileOutputStream;
-import java.io.IOException;
/**
* Tests for {@link com.android.server.power.ShutdownThread}
@@ -88,6 +86,7 @@ public class ShutdownThreadTest {
@Mock private VibratorInfo mVibratorInfoMock;
private String mDefaultShutdownVibrationFilePath;
+ private boolean mShutdownVibrationDisabled;
private long mLastSleepDurationMs;
private ShutdownThread mShutdownThread;
@@ -168,6 +167,17 @@ public class ShutdownThreadTest {
.vibrate(any(VibrationEffect.class), any(VibrationAttributes.class));
}
+ @Test
+ public void testVibrationDisabled() throws Exception {
+ setShutdownVibrationFileContent(CLICK_VIB_SERIALIZATION);
+ mShutdownVibrationDisabled = true;
+
+ mShutdownThread.playShutdownVibration(mContextMock);
+
+ verify(mVibratorMock, never())
+ .vibrate(any(VibrationEffect.class), any(VibrationAttributes.class));
+ }
+
private void assertShutdownVibration(VibrationEffect effect, long vibrationSleepDuration)
throws Exception {
verify(mVibratorMock).vibrate(
@@ -214,5 +224,10 @@ public class ShutdownThreadTest {
public void sleep(long durationMs) {
mLastSleepDurationMs = durationMs;
}
+
+ @Override
+ public boolean isShutdownVibrationDisabled(Context context) {
+ return mShutdownVibrationDisabled;
+ }
}
}