Open personal settings tab when launching homepage

Change-Id: I341e1a128fda7db8f953f9a0800050cc007554c5
Fixes: 114441682
Test: manual/robotest
This commit is contained in:
Fan Zhang
2018-09-07 12:56:53 -07:00
parent ea0b32d1ed
commit 44be9131b1
6 changed files with 88 additions and 15 deletions

View File

@@ -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" />

View File

@@ -62,6 +62,7 @@ import com.android.settings.core.SubSettingLauncher;
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;

View File

@@ -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 @@ public class SettingsHomepageActivity extends SettingsBaseActivity {
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 @@ public class SettingsHomepageActivity extends SettingsBaseActivity {
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);
}

View File

@@ -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>

View File

@@ -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);
}
}

View File

@@ -85,6 +85,8 @@ public class SettingsRobolectricTestRunner extends RobolectricTestRunner {
Fs.fromURL(new URL("file:frameworks/opt/setupwizard/library/recyclerview/res")), null));
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) {