diff --git a/res/values/strings.xml b/res/values/strings.xml index 1988d9dd688..eabf8974366 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -10778,6 +10778,9 @@ System default + + None + This choice is no longer valid. Try again. diff --git a/src/com/android/settings/connecteddevice/stylus/StylusDevicesController.java b/src/com/android/settings/connecteddevice/stylus/StylusDevicesController.java index 7ed02491ca3..e04251a218e 100644 --- a/src/com/android/settings/connecteddevice/stylus/StylusDevicesController.java +++ b/src/com/android/settings/connecteddevice/stylus/StylusDevicesController.java @@ -85,16 +85,24 @@ public class StylusDevicesController extends AbstractPreferenceController implem } @Nullable - private Preference createDefaultNotesPreference() { + private Preference createOrUpdateDefaultNotesPreference(@Nullable Preference preference) { RoleManager rm = mContext.getSystemService(RoleManager.class); - if (rm == null) { + if (rm == null || !rm.isRoleAvailable(RoleManager.ROLE_NOTES)) { return null; } + Preference pref = preference == null ? new Preference(mContext) : preference; + pref.setKey(KEY_DEFAULT_NOTES); + pref.setTitle(mContext.getString(R.string.stylus_default_notes_app)); + pref.setIcon(R.drawable.ic_article); + pref.setOnPreferenceClickListener(this); + pref.setEnabled(true); + List roleHolders = rm.getRoleHoldersAsUser(RoleManager.ROLE_NOTES, mContext.getUser()); if (roleHolders.isEmpty()) { - return null; + pref.setSummary(R.string.default_app_none); + return pref; } String packageName = roleHolders.get(0); @@ -107,13 +115,6 @@ public class StylusDevicesController extends AbstractPreferenceController implem } catch (PackageManager.NameNotFoundException e) { Log.e(TAG, "Notes role package not found."); } - - Preference pref = new Preference(mContext); - pref.setKey(KEY_DEFAULT_NOTES); - pref.setTitle(mContext.getString(R.string.stylus_default_notes_app)); - pref.setIcon(R.drawable.ic_article); - pref.setOnPreferenceClickListener(this); - pref.setEnabled(true); pref.setSummary(appName); return pref; } @@ -187,12 +188,10 @@ public class StylusDevicesController extends AbstractPreferenceController implem private void refresh() { if (!isAvailable()) return; - Preference notesPref = mPreferencesContainer.findPreference(KEY_DEFAULT_NOTES); - if (notesPref == null) { - notesPref = createDefaultNotesPreference(); - if (notesPref != null) { - mPreferencesContainer.addPreference(notesPref); - } + Preference currNotesPref = mPreferencesContainer.findPreference(KEY_DEFAULT_NOTES); + Preference notesPref = createOrUpdateDefaultNotesPreference(currNotesPref); + if (currNotesPref == null && notesPref != null) { + mPreferencesContainer.addPreference(notesPref); } Preference handwritingPref = mPreferencesContainer.findPreference(KEY_HANDWRITING); diff --git a/tests/robotests/src/com/android/settings/connecteddevice/stylus/StylusDevicesControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/stylus/StylusDevicesControllerTest.java index be41787882a..d81722fd5fc 100644 --- a/tests/robotests/src/com/android/settings/connecteddevice/stylus/StylusDevicesControllerTest.java +++ b/tests/robotests/src/com/android/settings/connecteddevice/stylus/StylusDevicesControllerTest.java @@ -101,6 +101,7 @@ public class StylusDevicesControllerTest { when(mRm.getRoleHoldersAsUser(eq(RoleManager.ROLE_NOTES), any(UserHandle.class))) .thenReturn(Collections.singletonList(NOTES_PACKAGE_NAME)); + when(mRm.isRoleAvailable(RoleManager.ROLE_NOTES)).thenReturn(true); when(mContext.getPackageManager()).thenReturn(mPm); when(mPm.getApplicationInfo(eq(NOTES_PACKAGE_NAME), any(PackageManager.ApplicationInfoFlags.class))).thenReturn(new ApplicationInfo()); @@ -235,16 +236,26 @@ public class StylusDevicesControllerTest { } @Test - public void defaultNotesPreference_noRoleHolder_hidesNotesRoleApp() { + public void defaultNotesPreference_roleHolderChanges_updatesPreference() { + showScreen(mController); + Preference defaultNotesPref = mPreferenceContainer.getPreference(0); when(mRm.getRoleHoldersAsUser(eq(RoleManager.ROLE_NOTES), any(UserHandle.class))) .thenReturn(Collections.emptyList()); showScreen(mController); - for (int i = 0; i < mPreferenceContainer.getPreferenceCount(); i++) { - Preference pref = mPreferenceContainer.getPreference(i); - assertThat(pref.getTitle().toString()).isNotEqualTo( - mContext.getString(R.string.stylus_default_notes_app)); - } + assertThat(defaultNotesPref.getSummary().toString()).isEqualTo( + mContext.getString(R.string.default_app_none)); + } + + @Test + public void defaultNotesPreference_noRoleHolder_showNoneInSummary() { + when(mRm.getRoleHoldersAsUser(eq(RoleManager.ROLE_NOTES), any(UserHandle.class))) + .thenReturn(Collections.emptyList()); + showScreen(mController); + + Preference defaultNotesPref = mPreferenceContainer.getPreference(0); + assertThat(defaultNotesPref.getSummary().toString()).isEqualTo( + mContext.getString(R.string.default_app_none)); } @Test