Add subtitle to settings (settings)

Allows a credential provider to show a
subtitle/summary underneath the title in
the list of providers.

Test: ondevice & atest
Bug: 253157366
Change-Id: I481da16985027a49ee464623b6db166d941cab55
This commit is contained in:
Becca Hughes
2023-02-23 19:52:53 +00:00
parent 53936d0ec3
commit 6474e01372
2 changed files with 22 additions and 4 deletions

View File

@@ -176,7 +176,8 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl
context,
label == null ? "" : label,
service.getServiceIcon(mContext),
service.getServiceInfo().packageName);
service.getServiceInfo().packageName,
service.getSettingsSubtitle());
}
/**
@@ -234,7 +235,8 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl
@NonNull Context prefContext,
@NonNull CharSequence title,
@Nullable Drawable icon,
@NonNull String packageName) {
@NonNull String packageName,
@Nullable CharSequence subtitle) {
final SwitchPreference pref = new SwitchPreference(prefContext);
pref.setTitle(title);
pref.setChecked(mEnabledPackageNames.contains(packageName));
@@ -244,6 +246,10 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl
pref.setIcon(Utils.getSafeIcon(icon));
}
if (subtitle != null) {
pref.setSummary(subtitle);
}
pref.setOnPreferenceClickListener(
p -> {
boolean isChecked = pref.isChecked();

View File

@@ -115,10 +115,10 @@ public class CredentialManagerPreferenceControllerTest {
public void buildSwitchPreference() {
CredentialProviderInfo providerInfo1 =
createCredentialProviderInfo(
"com.android.provider1", "ClassA", "Service Title", false);
"com.android.provider1", "ClassA", "Service Title", false, null);
CredentialProviderInfo providerInfo2 =
createCredentialProviderInfo(
"com.android.provider2", "ClassA", "Service Title", false);
"com.android.provider2", "ClassA", "Service Title", false, "Summary Text");
CredentialManagerPreferenceController controller =
createControllerWithServices(Lists.newArrayList(providerInfo1, providerInfo2));
assertThat(controller.getAvailabilityStatus()).isEqualTo(AVAILABLE);
@@ -139,11 +139,13 @@ public class CredentialManagerPreferenceControllerTest {
SwitchPreference pref = controller.createPreference(mContext, providerInfo1);
assertThat(pref.getTitle().toString()).isEqualTo("Service Title");
assertThat(pref.isChecked()).isTrue();
assertThat(pref.getSummary()).isNull();
// Create the pref (not checked).
SwitchPreference pref2 = controller.createPreference(mContext, providerInfo2);
assertThat(pref2.getTitle().toString()).isEqualTo("Service Title");
assertThat(pref2.isChecked()).isFalse();
assertThat(pref2.getSummary().toString()).isEqualTo("Summary Text");
}
@Test
@@ -264,6 +266,15 @@ public class CredentialManagerPreferenceControllerTest {
private CredentialProviderInfo createCredentialProviderInfo(
String packageName, String className, CharSequence label, boolean isEnabled) {
return createCredentialProviderInfo(packageName, className, label, isEnabled, null);
}
private CredentialProviderInfo createCredentialProviderInfo(
String packageName,
String className,
CharSequence label,
boolean isEnabled,
CharSequence subtitle) {
ServiceInfo si = new ServiceInfo();
si.packageName = packageName;
si.name = className;
@@ -276,6 +287,7 @@ public class CredentialManagerPreferenceControllerTest {
return new CredentialProviderInfo.Builder(si)
.setOverrideLabel(label)
.setEnabled(isEnabled)
.setSettingsSubtitle(subtitle)
.build();
}
}