diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 9c546a62a5471..7d1705720699a 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -463,10 +463,11 @@
-
- - Certificate authority installed
- - Certificate authorities installed
-
+ {count, plural,
+ =1 {Certificate authority installed}
+ other {Certificate authorities installed}
+ }
+
By an unknown third party
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 71e2a21a98ec1..c466f8e38c868 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -1266,7 +1266,7 @@
-
+
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/CertificateMonitor.java b/services/devicepolicy/java/com/android/server/devicepolicy/CertificateMonitor.java
index cc385c700e846..a1cba946354f0 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/CertificateMonitor.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/CertificateMonitor.java
@@ -35,6 +35,7 @@ import android.provider.Settings;
import android.security.Credentials;
import android.security.KeyChain;
import android.security.KeyChain.KeyChainConnection;
+import android.util.PluralsMessageFormatter;
import com.android.internal.R;
import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
@@ -46,7 +47,9 @@ import java.io.IOException;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
public class CertificateMonitor {
protected static final int MONITORING_CERT_NOTIFICATION_ID = SystemMessage.NOTE_SSL_CERT_INFO;
@@ -212,10 +215,15 @@ public class CertificateMonitor {
dialogIntent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE,
null, UserHandle.of(parentUserId));
+ Map arguments = new HashMap<>();
+ arguments.put("count", pendingCertificateCount);
+
return new Notification.Builder(userContext, SystemNotificationChannels.SECURITY)
.setSmallIcon(smallIconId)
- .setContentTitle(resources.getQuantityText(R.plurals.ssl_ca_cert_warning,
- pendingCertificateCount))
+ .setContentTitle(PluralsMessageFormatter.format(
+ resources,
+ arguments,
+ R.string.ssl_ca_cert_warning))
.setContentText(contentText)
.setContentIntent(notifyIntent)
.setShowWhen(false)
diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java
index 3c809f9e48147..df306e63cd1d8 100644
--- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java
@@ -273,6 +273,14 @@ public class DevicePolicyManagerTest extends DpmTestBase {
mIsAutomotive = mContext.getPackageManager()
.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE);
+
+ final String TEST_STRING = "{count, plural,\n"
+ + " =1 {Test for exactly 1 cert out of 4}\n"
+ + " other {Test for exactly # certs out of 4}\n"
+ + "}";
+ doReturn(TEST_STRING)
+ .when(mContext.resources)
+ .getString(R.string.ssl_ca_cert_warning);
}
private TransferOwnershipMetadataManager getMockTransferMetadataManager() {
@@ -1767,9 +1775,6 @@ public class DevicePolicyManagerTest extends DpmTestBase {
StringParceledListSlice oneCert = asSlice(new String[] {"1"});
StringParceledListSlice fourCerts = asSlice(new String[] {"1", "2", "3", "4"});
- final String TEST_STRING = "Test for exactly 2 certs out of 4";
- doReturn(TEST_STRING).when(mContext.resources).getQuantityText(anyInt(), eq(2));
-
// Given that we have exactly one certificate installed,
when(getServices().keyChainConnection.getService().getUserCaAliases()).thenReturn(oneCert);
// when that certificate is approved,
@@ -1785,9 +1790,10 @@ public class DevicePolicyManagerTest extends DpmTestBase {
dpms.approveCaCert(fourCerts.getList().get(0), userId, true);
dpms.approveCaCert(fourCerts.getList().get(1), userId, true);
// a notification should be shown saying that there are two certificates left to approve.
+ final String TEST_STRING_RESULT = "Test for exactly 2 certs out of 4";
verify(getServices().notificationManager, timeout(1000))
.notifyAsUser(anyString(), anyInt(), argThat(hasExtra(EXTRA_TITLE,
- TEST_STRING
+ TEST_STRING_RESULT
)), eq(user));
}