diff --git a/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java index 4a55ea9cf21..22706d7d0f3 100644 --- a/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java +++ b/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java @@ -16,13 +16,16 @@ package com.android.settings.accessibility; -import android.content.ContentResolver; +import android.accessibilityservice.AccessibilityServiceInfo; +import android.content.ComponentName; import android.content.Context; import android.os.Bundle; import android.provider.SearchIndexableResource; import android.provider.Settings; import android.support.v7.preference.Preference; +import android.text.TextUtils; import android.view.View; +import android.view.accessibility.AccessibilityManager; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; @@ -42,6 +45,10 @@ public final class MagnificationPreferenceFragment extends SettingsPreferenceFra private static final String MAGNIFICATION_NAVBAR_PREFERENCE_SCREEN_KEY = "screen_magnification_navbar_preference_screen"; + // Pseudo ComponentName used to represent navbar magnification in Settings.Secure. + private static final String MAGNIFICATION_COMPONENT_ID = + "com.android.server.accessibility.MagnificationController"; + private Preference mMagnificationGesturesPreference; private Preference mMagnificationNavbarPreference; @@ -147,17 +154,38 @@ public final class MagnificationPreferenceFragment extends SettingsPreferenceFra extras.putBoolean(AccessibilitySettings.EXTRA_LAUNCHED_FROM_SUW, mLaunchedFromSuw); } - static int getConfigurationWarningStringResourceForSecureSettingsKey(String key, - ContentResolver resolver) { - if (Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED.equals(key)) { - if (Settings.Secure.getInt(resolver, - Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED, 0) == 1) { - // TODO(b/34720082): Only report a config warning when nav-bar is not mapped to mag - return R.string.accessibility_screen_magnification_navbar_configuration_warning; + static CharSequence getConfigurationWarningStringForSecureSettingsKey(String key, + Context context) { + if (!Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED.equals(key)) { + return null; + } + if (Settings.Secure.getInt(context.getContentResolver(), + Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED, 0) == 0) { + return null; + } + final AccessibilityManager am = (AccessibilityManager) context.getSystemService( + Context.ACCESSIBILITY_SERVICE); + final String assignedId = Settings.Secure.getString(context.getContentResolver(), + Settings.Secure.ACCESSIBILITY_BUTTON_TARGET_COMPONENT); + if (!TextUtils.isEmpty(assignedId) && !MAGNIFICATION_COMPONENT_ID.equals(assignedId)) { + final ComponentName assignedComponentName = ComponentName.unflattenFromString( + assignedId); + final List activeServices = + am.getEnabledAccessibilityServiceList( + AccessibilityServiceInfo.FEEDBACK_ALL_MASK); + final int serviceCount = activeServices.size(); + for (int i = 0; i < serviceCount; i++) { + final AccessibilityServiceInfo info = activeServices.get(i); + if (info.getComponentName().equals(assignedComponentName)) { + final CharSequence assignedServiceName = info.getResolveInfo().loadLabel( + context.getPackageManager()); + return context.getString( + R.string.accessibility_screen_magnification_navbar_configuration_warning, + assignedServiceName); + } } } - - return -1; + return null; } public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java index 19cde082815..c6dc7a7cf31 100644 --- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java @@ -214,14 +214,13 @@ public class ToggleScreenMagnificationPreferenceFragment extends } private void updateConfigurationWarningIfNeeded() { - final int warningRes = - MagnificationPreferenceFragment - .getConfigurationWarningStringResourceForSecureSettingsKey( - mPreferenceKey, getContentResolver()); - if (warningRes != -1) { - mConfigWarningPreference.setSummary(warningRes); + final CharSequence warningMessage = + MagnificationPreferenceFragment.getConfigurationWarningStringForSecureSettingsKey( + mPreferenceKey, getPrefContext()); + if (warningMessage != null) { + mConfigWarningPreference.setSummary(warningMessage); } - mConfigWarningPreference.setVisible(warningRes != -1); + mConfigWarningPreference.setVisible(warningMessage != null); } private static int getScreenWidth(Context context) {