Open personal settings tab when launching homepage

Change-Id: I341e1a128fda7db8f953f9a0800050cc007554c5
Fixes: 114441682
Test: manual/robotest
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index aa3364f..c8d9aff 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -124,7 +124,7 @@
                 android:value="true" />
         </activity>
 
-        <activity android:name=".SettingsHomepageActivity"
+        <activity android:name=".homepage.SettingsHomepageActivity"
                   android:taskAffinity="com.android.settings.root"
                   android:label="@string/settings_label_launcher"
                   android:theme="@style/Theme.Settings.Home"
@@ -136,7 +136,7 @@
                 android:taskAffinity="com.android.settings.root"
                 android:label="@string/settings_label_launcher"
                 android:launchMode="singleTask"
-                android:targetActivity=".SettingsHomepageActivity">
+                android:targetActivity=".homepage.SettingsHomepageActivity">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.DEFAULT" />
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index cde2aca..ffce321 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -62,6 +62,7 @@
 import com.android.settings.core.gateway.SettingsGateway;
 import com.android.settings.dashboard.DashboardFeatureProvider;
 import com.android.settings.dashboard.DashboardSummary;
+import com.android.settings.homepage.SettingsHomepageActivity;
 import com.android.settings.homepage.TopLevelSettings;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.search.DeviceIndexFeatureProvider;
diff --git a/src/com/android/settings/SettingsHomepageActivity.java b/src/com/android/settings/homepage/SettingsHomepageActivity.java
similarity index 79%
rename from src/com/android/settings/SettingsHomepageActivity.java
rename to src/com/android/settings/homepage/SettingsHomepageActivity.java
index 77155e0..35b45a4 100644
--- a/src/com/android/settings/SettingsHomepageActivity.java
+++ b/src/com/android/settings/homepage/SettingsHomepageActivity.java
@@ -14,32 +14,31 @@
  * limitations under the License.
  */
 
-package com.android.settings;
+package com.android.settings.homepage;
 
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
 import android.util.FeatureFlagUtils;
 
+import androidx.annotation.VisibleForTesting;
 import androidx.fragment.app.Fragment;
 import androidx.fragment.app.FragmentManager;
 import androidx.fragment.app.FragmentTransaction;
 
+import com.android.settings.R;
 import com.android.settings.core.FeatureFlags;
 import com.android.settings.core.SettingsBaseActivity;
-import com.android.settings.dashboard.DashboardSummary;
-import com.android.settings.homepage.PersonalSettingsFragment;
-import com.android.settings.homepage.TopLevelSettings;
 import com.android.settings.overlay.FeatureFactory;
-import com.android.settings.search.SearchFeatureProvider;
 
 import com.google.android.material.bottomnavigation.BottomNavigationView;
 import com.google.android.material.floatingactionbutton.FloatingActionButton;
 
 public class SettingsHomepageActivity extends SettingsBaseActivity {
 
+    @VisibleForTesting
+    static final String PERSONAL_SETTINGS_TAG = "personal_settings";
     private static final String ALL_SETTINGS_TAG = "all_settings";
-    private static final String PERSONAL_SETTINGS_TAG = "personal_settings";
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -63,25 +62,31 @@
         navigation.setOnNavigationItemSelectedListener(item -> {
             switch (item.getItemId()) {
                 case R.id.homepage_personal_settings:
-                    switchFragment(PersonalSettingsFragment.class.getName(), PERSONAL_SETTINGS_TAG,
+                    switchFragment(new PersonalSettingsFragment(), PERSONAL_SETTINGS_TAG,
                             ALL_SETTINGS_TAG);
                     return true;
 
                 case R.id.homepage_all_settings:
-                    switchFragment(TopLevelSettings.class.getName(), ALL_SETTINGS_TAG,
+                    switchFragment(new TopLevelSettings(), ALL_SETTINGS_TAG,
                             PERSONAL_SETTINGS_TAG);
                     return true;
             }
             return false;
         });
+
+        if (savedInstanceState == null) {
+            // savedInstanceState is null, this is first load.
+            // Default to open contextual cards.
+            switchFragment(new PersonalSettingsFragment(), PERSONAL_SETTINGS_TAG,
+                    ALL_SETTINGS_TAG);
+        }
     }
 
     public static boolean isDynamicHomepageEnabled(Context context) {
         return FeatureFlagUtils.isEnabled(context, FeatureFlags.DYNAMIC_HOMEPAGE);
     }
 
-    private void switchFragment(String fragmentName, String showFragmentTag,
-            String hideFragmentTag) {
+    private void switchFragment(Fragment fragment, String showFragmentTag, String hideFragmentTag) {
         final FragmentManager fragmentManager = getSupportFragmentManager();
         final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
 
@@ -92,8 +97,7 @@
 
         Fragment showFragment = fragmentManager.findFragmentByTag(showFragmentTag);
         if (showFragment == null) {
-            showFragment = Fragment.instantiate(this, fragmentName, null /* args */);
-            fragmentTransaction.add(R.id.main_content, showFragment, showFragmentTag);
+            fragmentTransaction.add(R.id.main_content, fragment, showFragmentTag);
         } else {
             fragmentTransaction.show(showFragment);
         }
diff --git a/tests/robotests/res/values/themes.xml b/tests/robotests/res/values/themes.xml
index 9a247f6..d3ba69f 100644
--- a/tests/robotests/res/values/themes.xml
+++ b/tests/robotests/res/values/themes.xml
@@ -6,5 +6,14 @@
 
     <!-- Override the main app's style for ActionPrimaryButton to get around lack of new style
          support in robolectric  -->
-    <style name="ActionPrimaryButton" parent="android:Widget.DeviceDefault.Button" />
+    <style name="ActionPrimaryButton" parent="android:Widget.DeviceDefault.Button"/>
+
+    <!-- Test version of Theme.Settings.Home. Needed to build homepage activity in Robolectric -->
+    <style name="Theme.Settings.Home" parent="Theme.AppCompat.DayNight.NoActionBar">
+        <item name="colorPrimary">#ffffff</item>
+        <item name="colorPrimaryDark">#ffffff</item>
+        <item name="colorAccent">#ffffff</item>
+        <item name="preferenceTheme">@style/PreferenceTheme</item>
+        <item name="android:windowLightStatusBar">true</item>
+    </style>
 </resources>
diff --git a/tests/robotests/src/com/android/settings/homepage/SettingsHomepageActivityTest.java b/tests/robotests/src/com/android/settings/homepage/SettingsHomepageActivityTest.java
new file mode 100644
index 0000000..4b237a0
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/homepage/SettingsHomepageActivityTest.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.homepage;
+
+import static com.android.settings.homepage.SettingsHomepageActivity.PERSONAL_SETTINGS_TAG;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+import android.util.FeatureFlagUtils;
+
+import androidx.fragment.app.Fragment;
+
+import com.android.settings.core.FeatureFlags;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.Robolectric;
+import org.robolectric.RuntimeEnvironment;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+public class SettingsHomepageActivityTest {
+
+    private Context mContext;
+    private SettingsHomepageActivity mActivity;
+
+    @Before
+    public void setUp() {
+        mContext = RuntimeEnvironment.application;
+        FeatureFlagUtils.setEnabled(mContext, FeatureFlags.DYNAMIC_HOMEPAGE, true);
+    }
+
+    @Test
+    public void launchHomepage_shouldOpenPersonalSettings() {
+        mActivity = Robolectric.setupActivity(SettingsHomepageActivity.class);
+        final Fragment fragment = mActivity.getSupportFragmentManager()
+                .findFragmentByTag(PERSONAL_SETTINGS_TAG);
+
+        assertThat(fragment).isInstanceOf(PersonalSettingsFragment.class);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/testutils/SettingsRobolectricTestRunner.java b/tests/robotests/src/com/android/settings/testutils/SettingsRobolectricTestRunner.java
index ad808fc..1432ab1 100644
--- a/tests/robotests/src/com/android/settings/testutils/SettingsRobolectricTestRunner.java
+++ b/tests/robotests/src/com/android/settings/testutils/SettingsRobolectricTestRunner.java
@@ -86,6 +86,8 @@
             paths.add(new ResourcePath(null,
                 Fs.fromURL(new URL("file:out/soong/.intermediates/prebuilts/sdk/current/androidx/androidx.appcompat_appcompat-nodeps/android_common/aar/res/")), null));
             paths.add(new ResourcePath(null,
+                Fs.fromURL(new URL("file:out/soong/.intermediates/prebuilts/sdk/current/extras/material-design-x/com.google.android.material_material-nodeps/android_common/aar/res/")), null));
+            paths.add(new ResourcePath(null,
                 Fs.fromURL(new URL("file:out/soong/.intermediates/prebuilts/sdk/current/androidx/androidx.cardview_cardview-nodeps/android_common/aar/res")), null));
         } catch (MalformedURLException e) {
             throw new RuntimeException("SettingsRobolectricTestRunner failure", e);