Fix the ExpandDividerPreference will flash one time in some corner cases

Bug: 204051529
Test: make SettingsRoboTests
Change-Id: Iaead6d2a596cbbf0281045b40e4b00f23ceb9f09
This commit is contained in:
ykhung
2021-10-25 20:15:09 +08:00
parent f1d527ff0b
commit 36a57f4720
3 changed files with 14 additions and 29 deletions

View File

@@ -26,9 +26,7 @@
android:paddingRight="?android:attr/listPreferredItemPaddingRight" android:paddingRight="?android:attr/listPreferredItemPaddingRight"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:background="?android:attr/selectableItemBackground" android:background="?android:attr/selectableItemBackground"
android:orientation="horizontal" android:orientation="horizontal">
android:clipToPadding="false"
android:baselineAligned="false">
<TextView <TextView
android:id="@+id/expand_title" android:id="@+id/expand_title"

View File

@@ -65,8 +65,7 @@ public class ExpandDividerPreference extends Preference {
@Override @Override
public void onClick() { public void onClick() {
mIsExpanded = !mIsExpanded; setIsExpanded(!mIsExpanded);
refreshState();
if (mOnExpandListener != null) { if (mOnExpandListener != null) {
mOnExpandListener.onExpand(mIsExpanded); mOnExpandListener.onExpand(mIsExpanded);
} }
@@ -74,10 +73,7 @@ public class ExpandDividerPreference extends Preference {
void setTitle(final String titleContent) { void setTitle(final String titleContent) {
mTitleContent = titleContent; mTitleContent = titleContent;
if (mTextView != null) { refreshState();
mTextView.postDelayed(
() -> mTextView.setText(titleContent), 50);
}
} }
void setIsExpanded(boolean isExpanded) { void setIsExpanded(boolean isExpanded) {
@@ -90,13 +86,13 @@ public class ExpandDividerPreference extends Preference {
} }
private void refreshState() { private void refreshState() {
final int iconId =
mIsExpanded
? R.drawable.ic_settings_expand_less
: R.drawable.ic_settings_expand_more;
if (mImageView != null) { if (mImageView != null) {
mImageView.setImageResource(iconId); mImageView.setImageResource(mIsExpanded
? R.drawable.ic_settings_expand_less
: R.drawable.ic_settings_expand_more);
}
if (mTextView != null) {
mTextView.setText(mTitleContent);
} }
setTitle(mTitleContent);
} }
} }

View File

@@ -18,11 +18,7 @@ package com.android.settings.fuelgauge;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
@@ -36,8 +32,6 @@ import com.android.settings.R;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
@@ -52,7 +46,6 @@ public final class ExpandDividerPreferenceTest {
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application); mContext = spy(RuntimeEnvironment.application);
mImageView = spy(new ImageView(mContext)); mImageView = spy(new ImageView(mContext));
mTextView = spy(new TextView(mContext)); mTextView = spy(new TextView(mContext));
@@ -64,9 +57,9 @@ public final class ExpandDividerPreferenceTest {
@Test @Test
public void testConstructor_returnExpectedResult() { public void testConstructor_returnExpectedResult() {
assertThat(mExpandDividerPreference.getKey()) assertThat(mExpandDividerPreference.getKey())
.isEqualTo(ExpandDividerPreference.PREFERENCE_KEY); .isEqualTo(ExpandDividerPreference.PREFERENCE_KEY);
assertThat(mExpandDividerPreference.getLayoutResource()) assertThat(mExpandDividerPreference.getLayoutResource())
.isEqualTo(R.layout.preference_expand_divider); .isEqualTo(R.layout.preference_expand_divider);
} }
@Test @Test
@@ -75,9 +68,7 @@ public final class ExpandDividerPreferenceTest {
mExpandDividerPreference.mTextView = mTextView; mExpandDividerPreference.mTextView = mTextView;
mExpandDividerPreference.setTitle(titleContent); mExpandDividerPreference.setTitle(titleContent);
final ArgumentCaptor<Runnable> captor = ArgumentCaptor.forClass(Runnable.class);
verify(mTextView).postDelayed(captor.capture(), eq(50L));
captor.getValue().run();
verify(mTextView).setText(titleContent); verify(mTextView).setText(titleContent);
} }
@@ -86,7 +77,7 @@ public final class ExpandDividerPreferenceTest {
final boolean[] isExpandedArray = new boolean[] {false}; final boolean[] isExpandedArray = new boolean[] {false};
mExpandDividerPreference.mImageView = mImageView; mExpandDividerPreference.mImageView = mImageView;
mExpandDividerPreference.setOnExpandListener( mExpandDividerPreference.setOnExpandListener(
isExpanded -> isExpandedArray[0] = isExpanded); isExpanded -> isExpandedArray[0] = isExpanded);
// Click the item first time from false -> true. // Click the item first time from false -> true.
mExpandDividerPreference.onClick(); mExpandDividerPreference.onClick();
@@ -106,7 +97,7 @@ public final class ExpandDividerPreferenceTest {
final boolean[] isExpandedArray = new boolean[] {false}; final boolean[] isExpandedArray = new boolean[] {false};
mExpandDividerPreference.mImageView = mImageView; mExpandDividerPreference.mImageView = mImageView;
mExpandDividerPreference.setOnExpandListener( mExpandDividerPreference.setOnExpandListener(
isExpanded -> isExpandedArray[0] = isExpanded); isExpanded -> isExpandedArray[0] = isExpanded);
mExpandDividerPreference.setIsExpanded(true); mExpandDividerPreference.setIsExpanded(true);