From 12c5208ad0ef0fdf1b2e9c6ea2de852a8414990f Mon Sep 17 00:00:00 2001 From: Salvador Martinez Date: Mon, 25 Jul 2016 18:16:47 -0700 Subject: [PATCH 1/2] can open settings with support tab by default Changes were made to the two files to allow users to provide an argument in the intent for the settings activity. This argument allows you to specify if you want the summary tab or support open on startup. Fixes: 30233920 Change-Id: I4745a0f75ea6a60a22381f5e58f2fac3836d86b9 (cherry picked from commit 2368e548e69e7331a0ea9b579cc65dd4b73b1343) --- src/com/android/settings/SettingsActivity.java | 11 ++++++++--- .../dashboard/DashboardContainerFragment.java | 16 +++++++++++++++- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index 5b81c56804b..05d67b55b0f 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -588,7 +588,6 @@ public class SettingsActivity extends SettingsDrawerActivity // of starting fresh. mSearchMenuItemExpanded = savedState.getBoolean(SAVE_KEY_SEARCH_MENU_EXPANDED); mSearchQuery = savedState.getString(SAVE_KEY_SEARCH_QUERY); - setTitleFromIntent(intent); ArrayList categories = @@ -601,6 +600,7 @@ public class SettingsActivity extends SettingsDrawerActivity mDisplayHomeAsUpEnabled = savedState.getBoolean(SAVE_KEY_SHOW_HOME_AS_UP); mDisplaySearch = savedState.getBoolean(SAVE_KEY_SHOW_SEARCH); + } else { if (!mIsShowingDashboard) { mDisplaySearch = false; @@ -623,7 +623,13 @@ public class SettingsActivity extends SettingsDrawerActivity // Show Search affordance mDisplaySearch = true; mInitialTitleResId = R.string.dashboard_title; - switchToFragment(DashboardContainerFragment.class.getName(), null, false, false, + + // add argument to indicate which settings tab should be initially selected + final Bundle args = new Bundle(); + final String extraName = DashboardContainerFragment.EXTRA_SELECT_SETTINGS_TAB; + args.putString(extraName, intent.getStringExtra(extraName)); + + switchToFragment(DashboardContainerFragment.class.getName(), args, false, false, mInitialTitleResId, mInitialTitle, false); } } @@ -1272,5 +1278,4 @@ public class SettingsActivity extends SettingsDrawerActivity } super.onActivityResult(requestCode, resultCode, data); } - } diff --git a/src/com/android/settings/dashboard/DashboardContainerFragment.java b/src/com/android/settings/dashboard/DashboardContainerFragment.java index 4268b81fbc3..cd42f7dbaff 100644 --- a/src/com/android/settings/dashboard/DashboardContainerFragment.java +++ b/src/com/android/settings/dashboard/DashboardContainerFragment.java @@ -22,6 +22,7 @@ import android.app.FragmentManager; import android.content.Context; import android.os.Bundle; import android.support.v13.app.FragmentPagerAdapter; +import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -42,6 +43,10 @@ import com.android.settingslib.drawer.SettingsDrawerActivity; */ public final class DashboardContainerFragment extends InstrumentedFragment { + public static final String EXTRA_SELECT_SETTINGS_TAB = ":settings:select_settings_tab"; + + private static final String ARG_SUPPORT_TAB = "SUPPORT"; + private static final String ARG_SUMMARY_TAB = "SUMMARY"; private static final int INDEX_SUMMARY_FRAGMENT = 0; private static final int INDEX_SUPPORT_FRAGMENT = 1; @@ -69,7 +74,16 @@ public final class DashboardContainerFragment extends InstrumentedFragment { mViewPager.setAdapter(mPagerAdapter); mViewPager.addOnPageChangeListener( new TabChangeListener((SettingsActivity) getActivity())); - mViewPager.setCurrentItem(INDEX_SUMMARY_FRAGMENT); + + // check if support tab needs to be selected + final String selectedTab = getArguments(). + getString(EXTRA_SELECT_SETTINGS_TAB, ARG_SUMMARY_TAB); + if (TextUtils.equals(selectedTab, ARG_SUPPORT_TAB)) { + mViewPager.setCurrentItem(INDEX_SUPPORT_FRAGMENT); + } else { + mViewPager.setCurrentItem(INDEX_SUMMARY_FRAGMENT); + } + mHeaderView = inflater.inflate(R.layout.dashboard_container_header, parent, false); ((SlidingTabLayout) mHeaderView).setViewPager(mViewPager); return content; From 3fb4e96b0deb719658a8b86adce5d6b5ea8c9f42 Mon Sep 17 00:00:00 2001 From: Salvador Martinez Date: Fri, 29 Jul 2016 09:50:56 -0700 Subject: [PATCH 2/2] Tests for launch support on default feature Includes some espresso tests to ensure that the proper tab is selected when you attempt to launch settings. Bug: 30233920 Change-Id: I171293114bd84b064b333091fcf2394d44debed5 (cherry picked from commit d1ef20beaa3c69e038860fd610f076892d428da2) --- tests/app/Android.mk | 5 + tests/app/AndroidManifest.xml | 4 +- .../dashboard/TabSelectionOnLaunchTest.java | 108 ++++++++++++++++++ tests/unit/Android.mk | 5 +- 4 files changed, 119 insertions(+), 3 deletions(-) create mode 100644 tests/app/src/com/android/settings/dashboard/TabSelectionOnLaunchTest.java diff --git a/tests/app/Android.mk b/tests/app/Android.mk index bb31539d4ad..cd1338438db 100644 --- a/tests/app/Android.mk +++ b/tests/app/Android.mk @@ -7,6 +7,11 @@ LOCAL_CERTIFICATE := platform LOCAL_JAVA_LIBRARIES := android.test.runner bouncycastle +LOCAL_STATIC_JAVA_LIBRARIES := \ + android-support-test \ + mockito-target \ + espresso-core + # Include all test java files. LOCAL_SRC_FILES := $(call all-java-files-under, src) diff --git a/tests/app/AndroidManifest.xml b/tests/app/AndroidManifest.xml index 2ef96cfcc64..1c507004ebe 100644 --- a/tests/app/AndroidManifest.xml +++ b/tests/app/AndroidManifest.xml @@ -51,9 +51,9 @@ - + android:label="Settings Test Cases"> mActivityRule = + new ActivityTestRule<>(Settings.class, true, false); + + private final int FLAG_RESTART = Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK; + private final String ARG_SELECT_SUPPORT_TAB = "SUPPORT"; + private final String ARG_SELECT_FAKE_TAB = "NOT_SUPPORT"; + + @Test + /* cold start for settings app with correct flags and extra always selects support tab */ + public void test_ColdStartWithCorrectArgsCorrectFlags_SupportSelected() { + launchSettingsWithFlags(ARG_SELECT_SUPPORT_TAB, FLAG_RESTART); + verifySupportSelected(); + } + + @Test + /* cold start with correct flags and wrong extra defaults to all tab */ + public void test_ColdStartWithWrongExtra_DoesNotSelectSupport() { + launchSettingsWithFlags(ARG_SELECT_FAKE_TAB, FLAG_RESTART); + verifySupportNotSelected(); + } + + @Test + /* warm start from elsewhere in settings with wrong flags does not select support */ + public void test_WarmStartSummarySelectedCorrectExtraWrongFlags_DoesNotSelectSupport() { + InstrumentationRegistry.getContext(). + startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS)); + launchSettingsNoFlags(ARG_SELECT_SUPPORT_TAB); + verifySupportNotSelected(); + } + + @Test + /* warm start from elsewhere in settings with with wrong flags & extra does not select support*/ + public void test_WarmStartSummarySelectedWrongExtraWrongFlags_DoesNotSelectSupport() { + InstrumentationRegistry.getContext(). + startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS)); + launchSettingsNoFlags(ARG_SELECT_FAKE_TAB); + verifySupportNotSelected(); + } + + @Test + /* settings does not crash on null string */ + public void test_DoesNotCrashOnNullExtra_DoesNotSelectSupport() { + launchSettingsWithFlags(null, FLAG_RESTART); + verifySupportNotSelected(); + } + + private void verifySupportNotSelected() { + onView(withText(mActivityRule.getActivity().getApplicationContext(). + getString(com.android.settings.R.string.page_tab_title_support))). + check(matches(not(isSelected()))); + } + + private void verifySupportSelected() { + onView(withText(mActivityRule.getActivity().getApplicationContext(). + getString(com.android.settings.R.string.page_tab_title_support))). + check(matches(isSelected())); + } + + private void launchSettingsWithFlags(String extra, int flags) { + Intent intent = new Intent(android.provider.Settings.ACTION_SETTINGS); + intent.setFlags(flags); + intent.putExtra(DashboardContainerFragment.EXTRA_SELECT_SETTINGS_TAB, extra); + mActivityRule.launchActivity(intent); + } + + private void launchSettingsNoFlags(String extra) { + Intent intent = new Intent(android.provider.Settings.ACTION_SETTINGS); + intent.putExtra(DashboardContainerFragment.EXTRA_SELECT_SETTINGS_TAB, extra); + mActivityRule.launchActivity(intent); + } +} \ No newline at end of file diff --git a/tests/unit/Android.mk b/tests/unit/Android.mk index 3ba4606e6e3..5b20173bbbc 100644 --- a/tests/unit/Android.mk +++ b/tests/unit/Android.mk @@ -7,7 +7,10 @@ LOCAL_CERTIFICATE := platform LOCAL_JAVA_LIBRARIES := android.test.runner -LOCAL_STATIC_JAVA_LIBRARIES := android-support-test mockito-target +LOCAL_STATIC_JAVA_LIBRARIES := \ + android-support-test \ + mockito-target \ + espresso-core # Include all test java files. LOCAL_SRC_FILES := $(call all-java-files-under, src)