[Ally] Add content description for the supervion promo action button

Bug: 411279121
Test: manually with Talkback
Test: atest SupervisionPromoFooterPreferenceTest
Flag: android.app.supervision.flags.enable_supervision_settings_screen
Change-Id: I5dcf3b9ffb3179a8d086c8865c8113394877c547
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 3a560f1..24c5a49 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -14513,6 +14513,10 @@
     <!-- Title on activity to confirm PIN for supervision setup [CHAR LIMIT=NONE] -->
     <string name="supervision_confirm_your_pin_header">Confirm PIN</string>
     <string name="supervision_pin_reset_success_toast">PIN updated</string>
+    <!-- Content description for the action button in the supervision promo footer.
+         This button typically opens a related application or a web page for more information.
+         [CHAR LIMIT=NONE] -->
+    <string name="supervision_promo_footer_action_button_description">Open app</string>
     <!-- Title on dialog that confirms whether user wants to delete their supervision PIN [CHAR LIMIT=NONE] -->
     <string name="supervision_delete_pin_confirm_header">Delete PIN?</string>
     <!-- Message in dialog that confirms whether user wants to delete their supervision PIN [CHAR LIMIT=NONE] -->
diff --git a/src/com/android/settings/supervision/SupervisionPromoFooterPreference.kt b/src/com/android/settings/supervision/SupervisionPromoFooterPreference.kt
index 8551a32..9a7bdb9 100644
--- a/src/com/android/settings/supervision/SupervisionPromoFooterPreference.kt
+++ b/src/com/android/settings/supervision/SupervisionPromoFooterPreference.kt
@@ -22,18 +22,19 @@
 import android.widget.TextView
 import androidx.preference.Preference
 import androidx.preference.PreferenceViewHolder
+import com.android.settings.R
 import com.android.settings.supervision.ipc.PreferenceData
 import com.android.settingslib.metadata.PreferenceLifecycleContext
 import com.android.settingslib.metadata.PreferenceLifecycleProvider
 import com.android.settingslib.metadata.PreferenceMetadata
 import com.android.settingslib.preference.PreferenceBinding
 import com.android.settingslib.widget.CardPreference
+import com.android.settingslib.widget.mainswitch.R as MainSwitchPreferenceR
+import com.android.settingslib.widget.preference.card.R as CardPreferenceR
 import kotlinx.coroutines.CoroutineDispatcher
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.withContext
-import com.android.settingslib.widget.mainswitch.R as MainSwitchPreferenceR
-import com.android.settingslib.widget.preference.card.R as CardPreferenceR
 
 /** A bottom banner promoting other supervision features offered by the supervision app. */
 class SupervisionPromoFooterPreference(
@@ -83,8 +84,8 @@
                 }
             (preference as CardPreference).setAdditionalAction(
                 trailingIcon,
-                // TODO(b/411279121): add content description once we have the finalized string.
-                contentDescription = "",
+                contentDescription =
+                    context.getString(R.string.supervision_promo_footer_action_button_description),
             ) {
                 @SuppressLint("RestrictedApi") it.performClick()
             }
diff --git a/tests/robotests/src/com/android/settings/supervision/SupervisionPromoFooterPreferenceTest.kt b/tests/robotests/src/com/android/settings/supervision/SupervisionPromoFooterPreferenceTest.kt
index 9e64010..c0c4e36 100644
--- a/tests/robotests/src/com/android/settings/supervision/SupervisionPromoFooterPreferenceTest.kt
+++ b/tests/robotests/src/com/android/settings/supervision/SupervisionPromoFooterPreferenceTest.kt
@@ -22,6 +22,7 @@
 import androidx.preference.Preference
 import androidx.test.core.app.ApplicationProvider
 import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.android.settings.R
 import com.android.settings.supervision.SupervisionPromoFooterPreference.Companion.KEY
 import com.android.settings.supervision.ipc.PreferenceData
 import com.android.settingslib.metadata.PreferenceLifecycleContext
@@ -34,9 +35,11 @@
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.mockito.kotlin.any
+import org.mockito.kotlin.atLeastOnce
 import org.mockito.kotlin.doReturn
 import org.mockito.kotlin.mock
 import org.mockito.kotlin.never
+import org.mockito.kotlin.spy
 import org.mockito.kotlin.stub
 import org.mockito.kotlin.verify
 
@@ -48,7 +51,7 @@
         object : ContextWrapper(ApplicationProvider.getApplicationContext()) {
             override fun getPackageManager() = mockPackageManager
         }
-    private val preference = CardPreference(context)
+    private val preference = spy(CardPreference(context))
 
     private var preferenceData: PreferenceData? = null
 
@@ -207,6 +210,12 @@
 
             verify(preferenceLifecycleContext).notifyPreferenceChange(KEY) // will trigger binding
             promoPreference.bind(preference, mock())
+            verify(preference, atLeastOnce()).setAdditionalAction(
+                null,
+                context.getString(R.string.supervision_promo_footer_action_button_description),
+            ) {
+                it.performClick()
+            }
 
             assertThat(preference.isVisible).isTrue()
             val intent = preference.intent!!