Loading src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java +18 −1 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.CompoundButton; import androidx.annotation.VisibleForTesting; import androidx.core.view.MotionEventCompat; import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.RecyclerView; Loading Loading @@ -178,17 +179,33 @@ class LocaleDragAndDropAdapter // clear listener before setChecked() in case another item already bind to // current ViewHolder and checked event is triggered on stale listener mistakenly. checkbox.setOnCheckedChangeListener(null); checkbox.setChecked(mRemoveMode ? feedItem.getChecked() : false); boolean isChecked = mRemoveMode ? feedItem.getChecked() : false; checkbox.setChecked(isChecked); setCheckBoxDescription(dragCell, checkbox, isChecked); checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { LocaleStore.LocaleInfo feedItem = (LocaleStore.LocaleInfo) dragCell.getTag(); feedItem.setChecked(isChecked); setCheckBoxDescription(dragCell, checkbox, isChecked); } }); } @VisibleForTesting protected void setCheckBoxDescription(LocaleDragCell dragCell, CheckBox checkbox, boolean isChecked) { CharSequence checkedStatus = mContext.getText( isChecked ? com.android.internal.R.string.checked : com.android.internal.R.string.not_checked); // Talkback dragCell.setStateDescription(checkedStatus); // Select to Speak checkbox.setContentDescription(checkedStatus); } @Override public int getItemCount() { int itemCount = (null != mFeedItemList ? mFeedItemList.size() : 0); Loading tests/robotests/src/com/android/settings/localepicker/LocaleListEditorTest.java +51 −4 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.anyBoolean; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; Loading @@ -34,6 +35,10 @@ import android.os.Bundle; import android.os.LocaleList; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; import androidx.appcompat.app.AlertDialog; Loading @@ -46,6 +51,7 @@ import com.android.settings.R; import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.shadow.ShadowActivityManager; import com.android.settings.testutils.shadow.ShadowAlertDialogCompat; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import org.junit.After; import org.junit.Before; Loading @@ -58,7 +64,6 @@ import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.robolectric.util.ReflectionHelpers; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import java.util.ArrayList; import java.util.List; Loading @@ -75,11 +80,12 @@ public class LocaleListEditorTest { private static final int REQUEST_CONFIRM_SYSTEM_DEFAULT = 1; private LocaleListEditor mLocaleListEditor; private Context mContext; private FragmentActivity mActivity; private List mLocaleList; private List<LocaleStore.LocaleInfo> mLocaleList; private Intent mIntent = new Intent(); private LocaleDragCell mLocaleDragCell; private LocaleDragAndDropAdapter.CustomViewHolder mCustomViewHolder; @Mock private LocaleDragAndDropAdapter mAdapter; Loading @@ -95,11 +101,23 @@ public class LocaleListEditorTest { private IActivityManager mActivityService; @Mock private MetricsFeatureProvider mMetricsFeatureProvider; @Mock private TextView mLabel; @Mock private CheckBox mCheckbox; @Mock private TextView mMiniLabel; @Mock private TextView mLocalized; @Mock private TextView mCurrentDefault; @Mock private ImageView mDragHandle; @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); mContext = RuntimeEnvironment.application; mContext = spy(RuntimeEnvironment.application); mLocaleListEditor = spy(new LocaleListEditor()); when(mLocaleListEditor.getContext()).thenReturn(mContext); mActivity = Robolectric.buildActivity(FragmentActivity.class).get(); Loading Loading @@ -300,6 +318,35 @@ public class LocaleListEditorTest { verify(mAdapter).doTheUpdate(); } @Test public void onBindViewHolder_shouldSetCheckedBoxText() { ReflectionHelpers.setField(mLocaleListEditor, "mRemoveMode", true); mLocaleList = new ArrayList<>(); mLocaleList.add(mLocaleInfo); when(mLocaleInfo.getFullNameNative()).thenReturn("English"); when(mLocaleInfo.getLocale()).thenReturn(LocaleList.forLanguageTags("en-US").get(0)); mAdapter = spy(new LocaleDragAndDropAdapter(mLocaleListEditor, mLocaleList)); ReflectionHelpers.setField(mAdapter, "mFeedItemList", mLocaleList); ReflectionHelpers.setField(mAdapter, "mParent", mLocaleListEditor); ReflectionHelpers.setField(mAdapter, "mCacheItemList", new ArrayList<>(mLocaleList)); ReflectionHelpers.setField(mAdapter, "mContext", mContext); ViewGroup view = new FrameLayout(mContext); mCustomViewHolder = mAdapter.onCreateViewHolder(view, 0); mLocaleDragCell = new LocaleDragCell(mContext, null); ReflectionHelpers.setField(mCustomViewHolder, "mLocaleDragCell", mLocaleDragCell); ReflectionHelpers.setField(mLocaleDragCell, "mLabel", mLabel); ReflectionHelpers.setField(mLocaleDragCell, "mLocalized", mLocalized); ReflectionHelpers.setField(mLocaleDragCell, "mCurrentDefault", mCurrentDefault); ReflectionHelpers.setField(mLocaleDragCell, "mMiniLabel", mMiniLabel); ReflectionHelpers.setField(mLocaleDragCell, "mDragHandle", mDragHandle); ReflectionHelpers.setField(mLocaleDragCell, "mCheckbox", mCheckbox); mAdapter.onBindViewHolder(mCustomViewHolder, 0); verify(mAdapter).setCheckBoxDescription(any(LocaleDragCell.class), any(), anyBoolean()); } private void setUpLocaleConditions() { ShadowActivityManager.setService(mActivityService); mLocaleList = new ArrayList<>(); Loading Loading
src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java +18 −1 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.CompoundButton; import androidx.annotation.VisibleForTesting; import androidx.core.view.MotionEventCompat; import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.RecyclerView; Loading Loading @@ -178,17 +179,33 @@ class LocaleDragAndDropAdapter // clear listener before setChecked() in case another item already bind to // current ViewHolder and checked event is triggered on stale listener mistakenly. checkbox.setOnCheckedChangeListener(null); checkbox.setChecked(mRemoveMode ? feedItem.getChecked() : false); boolean isChecked = mRemoveMode ? feedItem.getChecked() : false; checkbox.setChecked(isChecked); setCheckBoxDescription(dragCell, checkbox, isChecked); checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { LocaleStore.LocaleInfo feedItem = (LocaleStore.LocaleInfo) dragCell.getTag(); feedItem.setChecked(isChecked); setCheckBoxDescription(dragCell, checkbox, isChecked); } }); } @VisibleForTesting protected void setCheckBoxDescription(LocaleDragCell dragCell, CheckBox checkbox, boolean isChecked) { CharSequence checkedStatus = mContext.getText( isChecked ? com.android.internal.R.string.checked : com.android.internal.R.string.not_checked); // Talkback dragCell.setStateDescription(checkedStatus); // Select to Speak checkbox.setContentDescription(checkedStatus); } @Override public int getItemCount() { int itemCount = (null != mFeedItemList ? mFeedItemList.size() : 0); Loading
tests/robotests/src/com/android/settings/localepicker/LocaleListEditorTest.java +51 −4 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.anyBoolean; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; Loading @@ -34,6 +35,10 @@ import android.os.Bundle; import android.os.LocaleList; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; import androidx.appcompat.app.AlertDialog; Loading @@ -46,6 +51,7 @@ import com.android.settings.R; import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.shadow.ShadowActivityManager; import com.android.settings.testutils.shadow.ShadowAlertDialogCompat; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import org.junit.After; import org.junit.Before; Loading @@ -58,7 +64,6 @@ import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.robolectric.util.ReflectionHelpers; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import java.util.ArrayList; import java.util.List; Loading @@ -75,11 +80,12 @@ public class LocaleListEditorTest { private static final int REQUEST_CONFIRM_SYSTEM_DEFAULT = 1; private LocaleListEditor mLocaleListEditor; private Context mContext; private FragmentActivity mActivity; private List mLocaleList; private List<LocaleStore.LocaleInfo> mLocaleList; private Intent mIntent = new Intent(); private LocaleDragCell mLocaleDragCell; private LocaleDragAndDropAdapter.CustomViewHolder mCustomViewHolder; @Mock private LocaleDragAndDropAdapter mAdapter; Loading @@ -95,11 +101,23 @@ public class LocaleListEditorTest { private IActivityManager mActivityService; @Mock private MetricsFeatureProvider mMetricsFeatureProvider; @Mock private TextView mLabel; @Mock private CheckBox mCheckbox; @Mock private TextView mMiniLabel; @Mock private TextView mLocalized; @Mock private TextView mCurrentDefault; @Mock private ImageView mDragHandle; @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); mContext = RuntimeEnvironment.application; mContext = spy(RuntimeEnvironment.application); mLocaleListEditor = spy(new LocaleListEditor()); when(mLocaleListEditor.getContext()).thenReturn(mContext); mActivity = Robolectric.buildActivity(FragmentActivity.class).get(); Loading Loading @@ -300,6 +318,35 @@ public class LocaleListEditorTest { verify(mAdapter).doTheUpdate(); } @Test public void onBindViewHolder_shouldSetCheckedBoxText() { ReflectionHelpers.setField(mLocaleListEditor, "mRemoveMode", true); mLocaleList = new ArrayList<>(); mLocaleList.add(mLocaleInfo); when(mLocaleInfo.getFullNameNative()).thenReturn("English"); when(mLocaleInfo.getLocale()).thenReturn(LocaleList.forLanguageTags("en-US").get(0)); mAdapter = spy(new LocaleDragAndDropAdapter(mLocaleListEditor, mLocaleList)); ReflectionHelpers.setField(mAdapter, "mFeedItemList", mLocaleList); ReflectionHelpers.setField(mAdapter, "mParent", mLocaleListEditor); ReflectionHelpers.setField(mAdapter, "mCacheItemList", new ArrayList<>(mLocaleList)); ReflectionHelpers.setField(mAdapter, "mContext", mContext); ViewGroup view = new FrameLayout(mContext); mCustomViewHolder = mAdapter.onCreateViewHolder(view, 0); mLocaleDragCell = new LocaleDragCell(mContext, null); ReflectionHelpers.setField(mCustomViewHolder, "mLocaleDragCell", mLocaleDragCell); ReflectionHelpers.setField(mLocaleDragCell, "mLabel", mLabel); ReflectionHelpers.setField(mLocaleDragCell, "mLocalized", mLocalized); ReflectionHelpers.setField(mLocaleDragCell, "mCurrentDefault", mCurrentDefault); ReflectionHelpers.setField(mLocaleDragCell, "mMiniLabel", mMiniLabel); ReflectionHelpers.setField(mLocaleDragCell, "mDragHandle", mDragHandle); ReflectionHelpers.setField(mLocaleDragCell, "mCheckbox", mCheckbox); mAdapter.onBindViewHolder(mCustomViewHolder, 0); verify(mAdapter).setCheckBoxDescription(any(LocaleDragCell.class), any(), anyBoolean()); } private void setUpLocaleConditions() { ShadowActivityManager.setService(mActivityService); mLocaleList = new ArrayList<>(); Loading