Fix the problem that the "Turn off SIM" dialog will be displayed
when the MobileNetwork page is slid to to top.
- Update the onBindViewHolder method of
SettingsMainSwitchPreference. The root cause is that the
onBindViewHolder method reset the visibility state of the
SwitchBar.
Fix: 190652161
Test: robotest and test MobileNetwork page manually.
Change-Id: If0a75579fd4bf0fe987ce5d11d2f11d10f4bc43c
diff --git a/src/com/android/settings/widget/SettingsMainSwitchPreference.java b/src/com/android/settings/widget/SettingsMainSwitchPreference.java
index de7d692..09e1ca4 100644
--- a/src/com/android/settings/widget/SettingsMainSwitchPreference.java
+++ b/src/com/android/settings/widget/SettingsMainSwitchPreference.java
@@ -82,15 +82,15 @@
holder.setDividerAllowedAbove(false);
holder.setDividerAllowedBelow(false);
- mMainSwitchBar = (SettingsMainSwitchBar) holder.findViewById(R.id.main_switch_bar);
- mMainSwitchBar.show();
if (mRestrictedHelper != null) {
mEnforcedAdmin = mRestrictedHelper.checkRestrictionEnforced();
}
- updateStatus(isChecked());
- registerListenerToSwitchBar();
-
- if (!mIsVisible) {
+ mMainSwitchBar = (SettingsMainSwitchBar) holder.findViewById(R.id.main_switch_bar);
+ if (mIsVisible) {
+ mMainSwitchBar.show();
+ updateStatus(isChecked());
+ registerListenerToSwitchBar();
+ } else {
mMainSwitchBar.hide();
}
}
diff --git a/tests/robotests/src/com/android/settings/widget/SettingsMainSwitchPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/SettingsMainSwitchPreferenceTest.java
index cb53805..c0c4fd7 100644
--- a/tests/robotests/src/com/android/settings/widget/SettingsMainSwitchPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/widget/SettingsMainSwitchPreferenceTest.java
@@ -24,6 +24,10 @@
import android.view.View;
import android.widget.ImageView;
+import androidx.preference.PreferenceViewHolder;
+
+import com.android.settings.R;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -39,6 +43,7 @@
@Mock
private EnforcedAdmin mEnforcedAdmin;
private SettingsMainSwitchPreference mPreference;
+ private PreferenceViewHolder mHolder;
@Before
public void setUp() {
@@ -48,6 +53,9 @@
mPreference = new SettingsMainSwitchPreference(context);
ReflectionHelpers.setField(mPreference, "mEnforcedAdmin", mEnforcedAdmin);
ReflectionHelpers.setField(mPreference, "mMainSwitchBar", switchBar);
+ final View rootView = View.inflate(context, R.layout.preference_widget_main_switch,
+ null /* parent */);
+ mHolder = PreferenceViewHolder.createInstanceForTests(rootView);
}
@Test
@@ -60,4 +68,22 @@
assertThat(restrictedIcon.getVisibility() == View.VISIBLE).isTrue();
}
+
+ @Test
+ public void show_preferenceShouldDisplay() {
+ mPreference.show();
+
+ mPreference.onBindViewHolder(mHolder);
+
+ assertThat(mPreference.isShowing()).isTrue();
+ }
+
+ @Test
+ public void hide_preferenceShouldNotDisplay() {
+ mPreference.hide();
+
+ mPreference.onBindViewHolder(mHolder);
+
+ assertThat(mPreference.isShowing()).isFalse();
+ }
}