diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java index a9c0f00788ae8..f1413e54f16de 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java @@ -33,6 +33,7 @@ import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL; import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL_OVERLAY; import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_CONTROLLER_NAME; +import static com.android.internal.accessibility.util.AccessibilityUtils.ACCESSIBILITY_MENU_IN_SYSTEM; import static com.android.providers.settings.SettingsState.FALLBACK_FILE_SUFFIX; import android.Manifest; @@ -107,6 +108,7 @@ import android.util.SparseArray; import android.util.SparseBooleanArray; import android.util.proto.ProtoOutputStream; +import com.android.internal.accessibility.util.AccessibilityUtils; import com.android.internal.annotations.GuardedBy; import com.android.internal.content.PackageMonitor; import com.android.internal.os.BackgroundThread; @@ -3712,7 +3714,7 @@ public class SettingsProvider extends ContentProvider { } private final class UpgradeController { - private static final int SETTINGS_VERSION = 213; + private static final int SETTINGS_VERSION = 214; private final int mUserId; @@ -5646,6 +5648,27 @@ public class SettingsProvider extends ContentProvider { currentVersion = 213; } + if (currentVersion == 213) { + final ComponentName accessibilityMenuToMigrate = + AccessibilityUtils.getAccessibilityMenuComponentToMigrate( + getContext().getPackageManager(), userId); + if (accessibilityMenuToMigrate != null) { + final SettingsState secureSettings = getSecureSettingsLocked(userId); + final String toRemove = accessibilityMenuToMigrate.flattenToString(); + final String toAdd = ACCESSIBILITY_MENU_IN_SYSTEM.flattenToString(); + // Migrate the accessibility shortcuts and enabled state. + migrateColonDelimitedStringSettingLocked(secureSettings, + Secure.ACCESSIBILITY_BUTTON_TARGETS, toRemove, toAdd); + migrateColonDelimitedStringSettingLocked(secureSettings, + Secure.ACCESSIBILITY_BUTTON_TARGET_COMPONENT, toRemove, toAdd); + migrateColonDelimitedStringSettingLocked(secureSettings, + Secure.ACCESSIBILITY_SHORTCUT_TARGET_SERVICE, toRemove, toAdd); + migrateColonDelimitedStringSettingLocked(secureSettings, + Secure.ENABLED_ACCESSIBILITY_SERVICES, toRemove, toAdd); + } + currentVersion = 214; + } + // vXXX: Add new settings above this point. if (currentVersion != newVersion) { @@ -5867,6 +5890,22 @@ public class SettingsProvider extends ContentProvider { return items; } + @GuardedBy("mLock") + private void migrateColonDelimitedStringSettingLocked(SettingsState settingsState, + String setting, String toRemove, String toAdd) { + final Set componentNames = transformColonDelimitedStringToSet( + settingsState.getSettingLocked(setting).getValue()); + if (componentNames != null && componentNames.contains(toRemove)) { + componentNames.remove(toRemove); + componentNames.add(toAdd); + settingsState.insertSettingLocked( + setting, + TextUtils.join(":", componentNames), + null /* tag */, false /* makeDefault */, + SettingsState.SYSTEM_PACKAGE_NAME); + } + } + private boolean isAccessibilityButtonInNavigationBarOn(SettingsState secureSettings) { return hasValueInA11yButtonTargets(secureSettings) && !isGestureNavigateEnabled(); }