Merge "Fix talkback doesn't speak subtext info" into sc-dev

This commit is contained in:
TreeHugger Robot
2021-05-21 08:08:44 +00:00
committed by Android (Google) Code Review
3 changed files with 28 additions and 6 deletions

View File

@@ -19,6 +19,7 @@ package com.android.settings.applications.manageapplications;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@@ -37,9 +38,8 @@ import com.android.settingslib.applications.ApplicationsState.AppEntry;
public class ApplicationViewHolder extends RecyclerView.ViewHolder { public class ApplicationViewHolder extends RecyclerView.ViewHolder {
private final TextView mAppName; @VisibleForTesting
private final ImageView mAppIcon; final TextView mAppName;
@VisibleForTesting @VisibleForTesting
final TextView mSummary; final TextView mSummary;
@VisibleForTesting @VisibleForTesting
@@ -49,6 +49,8 @@ public class ApplicationViewHolder extends RecyclerView.ViewHolder {
@VisibleForTesting @VisibleForTesting
final Switch mSwitch; final Switch mSwitch;
private final ImageView mAppIcon;
ApplicationViewHolder(View itemView) { ApplicationViewHolder(View itemView) {
super(itemView); super(itemView);
mAppName = itemView.findViewById(android.R.id.title); mAppName = itemView.findViewById(android.R.id.title);
@@ -95,11 +97,16 @@ public class ApplicationViewHolder extends RecyclerView.ViewHolder {
itemView.setEnabled(isEnabled); itemView.setEnabled(isEnabled);
} }
void setTitle(CharSequence title) { void setTitle(CharSequence title, CharSequence contentDescription) {
if (title == null) { if (title == null) {
return; return;
} }
mAppName.setText(title); mAppName.setText(title);
if (TextUtils.isEmpty(contentDescription)) {
return;
}
mAppName.setContentDescription(contentDescription);
} }
void setIcon(int drawableRes) { void setIcon(int drawableRes) {

View File

@@ -1422,9 +1422,8 @@ public class ManageApplications extends InstrumentedFragment
// Bind the data efficiently with the holder // Bind the data efficiently with the holder
final ApplicationsState.AppEntry entry = mEntries.get(position); final ApplicationsState.AppEntry entry = mEntries.get(position);
synchronized (entry) { synchronized (entry) {
holder.setTitle(entry.label);
mState.ensureLabelDescription(entry); mState.ensureLabelDescription(entry);
holder.itemView.setContentDescription(entry.labelDescription); holder.setTitle(entry.label, entry.labelDescription);
mState.ensureIcon(entry); mState.ensureIcon(entry);
holder.setIcon(entry.icon); holder.setIcon(entry.icon);
updateSummary(holder, entry); updateSummary(holder, entry);

View File

@@ -69,6 +69,22 @@ public class ApplicationViewHolderTest {
assertThat(mHolder.mSummary.getText()).isEqualTo(mContext.getText(R.string.disabled)); assertThat(mHolder.mSummary.getText()).isEqualTo(mContext.getText(R.string.disabled));
} }
@Test
public void setTitle_titleIsNotEmptyAndContentIsNotEmpty_shouldSetTitleAndContentDescription() {
mHolder.setTitle("title", "content");
assertThat(mHolder.mAppName).isEqualTo("title");
assertThat(mHolder.mAppName.getContentDescription()).isEqualTo("content");
}
@Test
public void setTitle_titleIsNotEmptyButContentIsEmpty_shouldSetTitle() {
mHolder.setTitle("title", "");
assertThat(mHolder.mAppName).isEqualTo("title");
assertThat(mHolder.mAppName.getContentDescription()).isEqualTo("title");
}
@Test @Test
public void updateSize() { public void updateSize() {
final String invalidStr = "invalid"; final String invalidStr = "invalid";