Create Public API in AccessibilityManager to expose Audio description
enabled status.
1) Move ENABLE_ACCESSIBILITY_AUDIO_DESCRIPTION_BY_DEFAULT from
Settings.Global to Settings.Secure.
2) Add isAudioDescriptionEnabled public API to read the
Settings.Secure.ENABLED_ACCESSIBILITY_AUDIO_DESCRIPTION_BY_DEFAULT.
Test: local test
Test: atest AccessibilityManagerTest
Bug: 160823970
CTS-Coverage-Bug: 197311729
Change-Id: Iecf006bc8a1315414b37b6d644fc607b3d2aa03b
diff --git a/core/api/current.txt b/core/api/current.txt
index fab08a5..3168538 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -50832,6 +50832,7 @@
method public int getRecommendedTimeoutMillis(int, int);
method public void interrupt();
method public static boolean isAccessibilityButtonSupported();
+ method public boolean isAudioDescriptionEnabled();
method public boolean isEnabled();
method public boolean isTouchExplorationEnabled();
method public void removeAccessibilityRequestPreparer(android.view.accessibility.AccessibilityRequestPreparer);
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 7002a38..c52b48a 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -7220,6 +7220,14 @@
"enabled_accessibility_services";
/**
+ * Whether select sound track with audio description by default.
+ * @hide
+ */
+ @Readable
+ public static final String ENABLE_ACCESSIBILITY_AUDIO_DESCRIPTION_BY_DEFAULT =
+ "enable_accessibility_audio_description_by_default";
+
+ /**
* List of the notified non-accessibility category accessibility services.
*
* @hide
@@ -10376,14 +10384,6 @@
"enable_accessibility_global_gesture_enabled";
/**
- * Whether select sound track with audio description by default.
- * @hide
- */
- @Readable
- public static final String ENABLE_ACCESSIBILITY_AUDIO_DESCRIPTION_BY_DEFAULT =
- "enable_accessibility_audio_description_by_default";
-
- /**
* Whether Airplane Mode is on.
*/
@Readable
diff --git a/core/java/android/view/accessibility/AccessibilityManager.java b/core/java/android/view/accessibility/AccessibilityManager.java
index 17fad7e..0606b5c 100644
--- a/core/java/android/view/accessibility/AccessibilityManager.java
+++ b/core/java/android/view/accessibility/AccessibilityManager.java
@@ -36,6 +36,7 @@
import android.app.RemoteAction;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.ComponentName;
+import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
@@ -54,6 +55,7 @@
import android.os.ServiceManager;
import android.os.SystemClock;
import android.os.UserHandle;
+import android.provider.Settings;
import android.util.ArrayMap;
import android.util.Log;
import android.util.SparseArray;
@@ -271,6 +273,8 @@
*/
private SparseArray<List<AccessibilityRequestPreparer>> mRequestPreparerLists;
+ private ContentResolver mContentResolver;
+
/**
* Listener for the system accessibility state. To listen for changes to the
* accessibility state on the device, implement this interface and register
@@ -483,6 +487,7 @@
mCallback = new MyCallback();
mHandler = new Handler(context.getMainLooper(), mCallback);
mUserId = userId;
+ mContentResolver = context.getContentResolver();
synchronized (mLock) {
initialFocusAppearanceLocked(context.getResources());
tryConnectToServiceLocked(service);
@@ -507,6 +512,7 @@
mCallback = new MyCallback();
mHandler = handler;
mUserId = userId;
+ mContentResolver = context.getContentResolver();
synchronized (mLock) {
initialFocusAppearanceLocked(context.getResources());
if (serviceConnect) {
@@ -1820,6 +1826,25 @@
return res.getBoolean(com.android.internal.R.bool.config_showNavigationBar);
}
+ /**
+ * Determines if users want to select sound track with audio description by default.
+ *
+ * Audio description, also referred to as a video description, described video, or
+ * more precisely called a visual description, is a form of narration used to provide
+ * information surrounding key visual elements in a media work for the benefit of
+ * blind and visually impaired consumers.
+ *
+ * The method provides the preference value to content provider apps to select the
+ * default sound track during playing a video or movie.
+ *
+ * @return {@code true} if the audio description is enabled, {@code false} otherwise.
+ */
+ public boolean isAudioDescriptionEnabled() {
+ return Settings.Secure.getInt(
+ mContentResolver,
+ Settings.Secure.ENABLE_ACCESSIBILITY_AUDIO_DESCRIPTION_BY_DEFAULT, 0) == 1;
+ }
+
private final class MyCallback implements Handler.Callback {
public static final int MSG_SET_STATE = 1;
diff --git a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
index df7bf20..4ebfbd2 100644
--- a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
+++ b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
@@ -272,7 +272,6 @@
Settings.Global.DYNAMIC_POWER_SAVINGS_DISABLE_THRESHOLD,
Settings.Global.SMART_REPLIES_IN_NOTIFICATIONS_FLAGS,
Settings.Global.SMART_SUGGESTIONS_IN_NOTIFICATIONS_FLAGS,
- Settings.Global.ENABLE_ACCESSIBILITY_AUDIO_DESCRIPTION_BY_DEFAULT,
Settings.Global.ENABLE_ADB_INCREMENTAL_INSTALL_DEFAULT,
Settings.Global.ENABLE_MULTI_SLOT_TIMEOUT_MILLIS,
Settings.Global.ENHANCED_4G_MODE_ENABLED,
@@ -722,6 +721,7 @@
Settings.Secure.DOCKED_CLOCK_FACE,
Settings.Secure.DOZE_PULSE_ON_LONG_PRESS,
Settings.Secure.EMERGENCY_ASSISTANCE_APPLICATION,
+ Settings.Secure.ENABLE_ACCESSIBILITY_AUDIO_DESCRIPTION_BY_DEFAULT,
Settings.Secure.ENABLED_INPUT_METHODS, // Intentionally removed in P
Settings.Secure.ENABLED_NOTIFICATION_ASSISTANT,
Settings.Secure.ENABLED_NOTIFICATION_LISTENERS,