From: jackqdyulei Date: Fri, 26 May 2017 17:47:55 +0000 (-0700) Subject: Update updateEmptyView X-Git-Tag: android-x86-9.0-r1~946^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=2b2abac7148163dc6199b9dd304a6cebccbf310f;p=android-x86%2Fpackages-apps-Settings.git Update updateEmptyView Also consider the visiblity of list container, when list container is invisible, we should show the empty view. Bug: 62062415 Test: RunSettingsRoboTests Change-Id: I065e70386242c425ef3cbfb2b703a5433dbe40c1 --- diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java index 5bcbc11b95..0c5bc063b1 100644 --- a/src/com/android/settings/SettingsPreferenceFragment.java +++ b/src/com/android/settings/SettingsPreferenceFragment.java @@ -312,12 +312,15 @@ public abstract class SettingsPreferenceFragment extends InstrumentedPreferenceF } } - private void updateEmptyView() { + @VisibleForTesting + void updateEmptyView() { if (mEmptyView == null) return; if (getPreferenceScreen() != null) { + final View listContainer = getActivity().findViewById(android.R.id.list_container); boolean show = (getPreferenceScreen().getPreferenceCount() - (mHeader != null ? 1 : 0) - - (mFooterPreferenceMixin.hasFooter() ? 1 : 0)) <= 0; + - (mFooterPreferenceMixin.hasFooter() ? 1 : 0)) <= 0 + || (listContainer != null && listContainer.getVisibility() != View.VISIBLE); mEmptyView.setVisibility(show ? View.VISIBLE : View.GONE); } else { mEmptyView.setVisibility(View.VISIBLE); diff --git a/tests/robotests/src/com/android/settings/SettingsPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/SettingsPreferenceFragmentTest.java index cd48da3c91..b5a4bf08de 100644 --- a/tests/robotests/src/com/android/settings/SettingsPreferenceFragmentTest.java +++ b/tests/robotests/src/com/android/settings/SettingsPreferenceFragmentTest.java @@ -17,11 +17,13 @@ package com.android.settings; +import android.app.Activity; import android.content.Context; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceCategory; import android.support.v7.preference.PreferenceManager; import android.support.v7.preference.PreferenceScreen; +import android.view.View; import org.junit.Before; import org.junit.Test; @@ -30,8 +32,11 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; +import org.robolectric.util.ReflectionHelpers; import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; @@ -40,16 +45,31 @@ import static org.mockito.Mockito.when; @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class SettingsPreferenceFragmentTest { + private static final int ITEM_COUNT = 5; + @Mock private PreferenceManager mPreferenceManager; + @Mock + private Activity mActivity; + @Mock + private View mListContainer; + @Mock + private PreferenceScreen mPreferenceScreen; private Context mContext; private TestFragment mFragment; + private View mEmptyView; @Before public void setUp() { MockitoAnnotations.initMocks(this); mContext = RuntimeEnvironment.application; - mFragment = new TestFragment(); + mFragment = spy(new TestFragment()); + doReturn(mActivity).when(mFragment).getActivity(); + + mEmptyView = new View(mContext); + ReflectionHelpers.setField(mFragment, "mEmptyView", mEmptyView); + + doReturn(ITEM_COUNT).when(mPreferenceScreen).getPreferenceCount(); } @Test @@ -100,7 +120,27 @@ public class SettingsPreferenceFragmentTest { assertThat(mScreen.getPreferenceCount()).isEqualTo(1); } - public static final class TestFragment extends SettingsPreferenceFragment { + @Test + public void testUpdateEmptyView_containerInvisible_emptyViewVisible() { + doReturn(View.INVISIBLE).when(mListContainer).getVisibility(); + doReturn(mListContainer).when(mActivity).findViewById(android.R.id.list_container); + doReturn(mPreferenceScreen).when(mFragment).getPreferenceScreen(); + + mFragment.updateEmptyView(); + + assertThat(mEmptyView.getVisibility()).isEqualTo(View.VISIBLE); + } + + @Test + public void testUpdateEmptyView_containerNull_emptyViewGone() { + doReturn(mPreferenceScreen).when(mFragment).getPreferenceScreen(); + + mFragment.updateEmptyView(); + + assertThat(mEmptyView.getVisibility()).isEqualTo(View.GONE); + } + + public static class TestFragment extends SettingsPreferenceFragment { @Override public int getMetricsCategory() {