Migrates to the new component name for A11yMenu in SettingsProvider.

Bug: 261252772
Test: Enable Menu-in-AAS on device, with shortcuts enabled;
      Ensure device's SettingsProvider database version is
      smaller than SETTINGS_VERSION;
      'adb sync' the new SettingsProvider and reboot;
      Observe that all A11yMenu settings are migrated;
Change-Id: Ia8abb81694569d9701c8c02bf61676d35035020c
This commit is contained in:
Daniel Norman
2023-02-06 11:21:59 -08:00
parent 19a301ed84
commit 8e94007250

View File

@@ -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<String> 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();
}