From 9ff1d79ef626b89b8e2260faf5b3f51a48adfee4 Mon Sep 17 00:00:00 2001 From: Doris Ling Date: Mon, 13 Nov 2017 13:43:17 -0800 Subject: [PATCH] Expand all preferences when launch from search. - when the fragment is created, checks the argument to see if the extra fragment arg key is set. If so, do not hide the preferences in the preference screen inside the advanced button. Change-Id: I80fa20672024fe702ed2ddab448232bdc92ce05f Fixes: 68988454 Test: make RunSettingsRoboTests --- .../settings/SettingsPreferenceFragment.java | 19 ++++++--- .../SettingsPreferenceFragmentTest.java | 39 ++++++++++++++++--- 2 files changed, 48 insertions(+), 10 deletions(-) diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java index a3d26af8eb7..5d3bf002760 100644 --- a/src/com/android/settings/SettingsPreferenceFragment.java +++ b/src/com/android/settings/SettingsPreferenceFragment.java @@ -150,8 +150,8 @@ public abstract class SettingsPreferenceFragment extends InstrumentedPreferenceF } // Prepare help url and enable menu if necessary - Bundle arguments = getArguments(); - int helpResource; + final Bundle arguments = getArguments(); + final int helpResource; if (arguments != null && arguments.containsKey(HELP_URI_RESOURCE_KEY)) { helpResource = arguments.getInt(HELP_URI_RESOURCE_KEY); } else { @@ -160,6 +160,17 @@ public abstract class SettingsPreferenceFragment extends InstrumentedPreferenceF if (helpResource != 0) { mHelpUri = getResources().getString(helpResource); } + + // Check if we should keep the preferences expanded. + if (arguments != null) { + mPreferenceKey = arguments.getString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY); + if (!TextUtils.isEmpty(mPreferenceKey)) { + final PreferenceScreen screen = getPreferenceScreen(); + if (screen != null) { + screen.setInitialExpandedChildrenCount(Integer.MAX_VALUE); + } + } + } } @Override @@ -224,9 +235,7 @@ public abstract class SettingsPreferenceFragment extends InstrumentedPreferenceF public void onResume() { super.onResume(); - final Bundle args = getArguments(); - if (args != null) { - mPreferenceKey = args.getString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY); + if (mPreferenceKey != null) { highlightPreferenceIfNeeded(); } } diff --git a/tests/robotests/src/com/android/settings/SettingsPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/SettingsPreferenceFragmentTest.java index dc4166d7eb3..c84c1c61449 100644 --- a/tests/robotests/src/com/android/settings/SettingsPreferenceFragmentTest.java +++ b/tests/robotests/src/com/android/settings/SettingsPreferenceFragmentTest.java @@ -16,9 +16,9 @@ package com.android.settings; - import android.app.Activity; import android.content.Context; +import android.os.Bundle; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceCategory; import android.support.v7.preference.PreferenceManager; @@ -39,18 +39,18 @@ 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.verify; import static org.mockito.Mockito.when; import com.android.settings.testutils.SettingsRobolectricTestRunner; +import com.android.settings.testutils.shadow.SettingsShadowResources; @RunWith(SettingsRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O) public class SettingsPreferenceFragmentTest { private static final int ITEM_COUNT = 5; - @Mock - private PreferenceManager mPreferenceManager; @Mock private Activity mActivity; @Mock @@ -142,6 +142,36 @@ public class SettingsPreferenceFragmentTest { assertThat(mEmptyView.getVisibility()).isEqualTo(View.GONE); } + @Test + @Config(shadows = SettingsShadowResources.SettingsShadowTheme.class) + public void onCreate_hasExtraFragmentKey_shouldExpandPreferences() { + doReturn(mContext.getTheme()).when(mActivity).getTheme(); + doReturn(mContext.getResources()).when(mFragment).getResources(); + doReturn(mPreferenceScreen).when(mFragment).getPreferenceScreen(); + final Bundle bundle = new Bundle(); + bundle.putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, "test_key"); + doReturn(bundle).when(mFragment).getArguments(); + + mFragment.onCreate(null /* icicle */); + + verify(mPreferenceScreen).setInitialExpandedChildrenCount(Integer.MAX_VALUE); + } + + @Test + @Config(shadows = SettingsShadowResources.SettingsShadowTheme.class) + public void onCreate_noPreferenceScreen_shouldNotCrash() { + doReturn(mContext.getTheme()).when(mActivity).getTheme(); + doReturn(mContext.getResources()).when(mFragment).getResources(); + doReturn(null).when(mFragment).getPreferenceScreen(); + final Bundle bundle = new Bundle(); + bundle.putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, "test_key"); + doReturn(bundle).when(mFragment).getArguments(); + + mFragment.onCreate(null /* icicle */); + + // no crash + } + public static class TestFragment extends SettingsPreferenceFragment { @Override @@ -150,5 +180,4 @@ public class SettingsPreferenceFragmentTest { } } - }