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)); }