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
diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java
index a3d26af..5d3bf00 100644
--- a/src/com/android/settings/SettingsPreferenceFragment.java
+++ b/src/com/android/settings/SettingsPreferenceFragment.java
@@ -150,8 +150,8 @@
         }
 
         // 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 @@
         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 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 dc4166d..c84c1c6 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,19 +39,19 @@
 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
     private View mListContainer;
@@ -142,6 +142,36 @@
         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 @@
         }
     }
 
-
 }