diff --git a/core/java/com/android/internal/accessibility/AccessibilityShortcutController.java b/core/java/com/android/internal/accessibility/AccessibilityShortcutController.java index 293471c686e57..ffc21d5ea9e1f 100644 --- a/core/java/com/android/internal/accessibility/AccessibilityShortcutController.java +++ b/core/java/com/android/internal/accessibility/AccessibilityShortcutController.java @@ -319,7 +319,7 @@ public class AccessibilityShortcutController { } final PackageManager pm = mContext.getPackageManager(); String label = serviceInfo.getResolveInfo().loadLabel(pm).toString(); - String summary = serviceInfo.loadSummary(pm).toString(); + CharSequence summary = serviceInfo.loadSummary(pm); if (!includeSummary || TextUtils.isEmpty(summary)) { return label; } diff --git a/core/tests/coretests/src/com/android/internal/accessibility/AccessibilityShortcutControllerTest.java b/core/tests/coretests/src/com/android/internal/accessibility/AccessibilityShortcutControllerTest.java index 449e3743e3aab..a15d337112526 100644 --- a/core/tests/coretests/src/com/android/internal/accessibility/AccessibilityShortcutControllerTest.java +++ b/core/tests/coretests/src/com/android/internal/accessibility/AccessibilityShortcutControllerTest.java @@ -397,6 +397,17 @@ public class AccessibilityShortcutControllerTest { } } + @Test + public void testOnAccessibilityShortcut_forServiceWithNoSummary_doesNotCrash() + throws Exception { + configureShortcutEnabled(ENABLED_EXCEPT_LOCK_SCREEN); + configureValidShortcutService(); + when(mServiceInfo.loadSummary(any())).thenReturn(null); + Settings.Secure.putInt(mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN, 1); + getController().performAccessibilityShortcut(); + verify(mAccessibilityManagerService).performAccessibilityShortcut(); + } + @Test public void testOnAccessibilityShortcut_forFrameworkFeature_callsServiceWithNoToast() throws Exception {