Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ce93c656 authored by Vania Januar's avatar Vania Januar
Browse files

Show None default app in stylus preference if no Notes holder.

This also fixes the role holder not updating when the
default role holder has changed.

Test: StylusDevicesControllerTest
Bug: 254834764
Change-Id: Iec7ed7698f18279da9a04918dcdf3e20e73609d1
parent c3f6c0d5
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -10778,6 +10778,9 @@
    <!-- Subtext of system default app for current setting [CHAR LIMIT=NONE] -->
    <string name="system_default_app_subtext">System default</string>
    <!-- Summary of a default app when there is no app set [CHAR LIMIT=60] -->
    <string name="default_app_none">None</string>
    <!-- Developer settings: text for the bug report handler selection toast shown if an invalid bug report handler was chosen. [CHAR LIMIT=NONE] -->
    <string name="select_invalid_bug_report_handler_toast_text">This choice is no longer valid. Try again.</string>
+15 −16
Original line number Diff line number Diff line
@@ -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<String> 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,13 +188,11 @@ 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) {
        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);
        // TODO(b/255732419): add proper InputMethodInfo conditional to show or hide
+17 −6
Original line number Diff line number Diff line
@@ -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