diff --git a/src/com/android/settings/dashboard/DashboardFeatureProvider.java b/src/com/android/settings/dashboard/DashboardFeatureProvider.java index 20bcd3d29cf..1c55bbbe824 100644 --- a/src/com/android/settings/dashboard/DashboardFeatureProvider.java +++ b/src/com/android/settings/dashboard/DashboardFeatureProvider.java @@ -16,8 +16,8 @@ package com.android.settings.dashboard; import android.app.Activity; -import android.app.Fragment; import android.content.Context; +import android.os.Bundle; import android.support.v7.preference.Preference; import com.android.settingslib.drawer.DashboardCategory; @@ -78,7 +78,7 @@ public interface DashboardFeatureProvider { * Returns a {@link ProgressiveDisclosureMixin} for specified fragment. */ ProgressiveDisclosureMixin getProgressiveDisclosureMixin(Context context, - DashboardFragment fragment); + DashboardFragment fragment, Bundle args); /** * Returns additional intent filter action for dashboard tiles diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java index 9c2172017b9..722f9e112c0 100644 --- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java +++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java @@ -168,8 +168,12 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider { @Override public ProgressiveDisclosureMixin getProgressiveDisclosureMixin(Context context, - DashboardFragment fragment) { - return new ProgressiveDisclosureMixin(context, mMetricsFeatureProvider, fragment); + DashboardFragment fragment, Bundle args) { + boolean keepExpanded = false; + if (args != null) { + keepExpanded = args.getString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY) != null; + } + return new ProgressiveDisclosureMixin(context, fragment, keepExpanded); } @Override diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java index e3845cdb981..3687929723e 100644 --- a/src/com/android/settings/dashboard/DashboardFragment.java +++ b/src/com/android/settings/dashboard/DashboardFragment.java @@ -69,7 +69,7 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment mDashboardFeatureProvider = FeatureFactory.getFactory(context).getDashboardFeatureProvider(context); mProgressiveDisclosureMixin = mDashboardFeatureProvider - .getProgressiveDisclosureMixin(context, this); + .getProgressiveDisclosureMixin(context, this, getArguments()); getLifecycle().addObserver(mProgressiveDisclosureMixin); List controllers = getPreferenceControllers(context); diff --git a/src/com/android/settings/dashboard/ProgressiveDisclosureMixin.java b/src/com/android/settings/dashboard/ProgressiveDisclosureMixin.java index be5e21bdb98..07a729377ac 100644 --- a/src/com/android/settings/dashboard/ProgressiveDisclosureMixin.java +++ b/src/com/android/settings/dashboard/ProgressiveDisclosureMixin.java @@ -33,6 +33,7 @@ import com.android.settings.core.instrumentation.MetricsFeatureProvider; import com.android.settings.core.lifecycle.LifecycleObserver; import com.android.settings.core.lifecycle.events.OnCreate; import com.android.settings.core.lifecycle.events.OnSaveInstanceState; +import com.android.settings.overlay.FeatureFactory; import java.util.ArrayList; import java.util.Collections; @@ -56,13 +57,13 @@ public class ProgressiveDisclosureMixin implements Preference.OnPreferenceClickL private boolean mUserExpanded; public ProgressiveDisclosureMixin(Context context, - MetricsFeatureProvider metricsFeatureProvider, - PreferenceFragment fragment) { + PreferenceFragment fragment, boolean keepExpanded) { mContext = context; mFragment = fragment; mExpandButton = new ExpandPreference(context); mExpandButton.setOnPreferenceClickListener(this); - mMetricsFeatureProvider = metricsFeatureProvider; + mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider(); + mUserExpanded = keepExpanded; } @Override @@ -119,7 +120,7 @@ public class ProgressiveDisclosureMixin implements Preference.OnPreferenceClickL * Whether the screen should be collapsed. */ public boolean shouldCollapse(PreferenceScreen screen) { - return screen.getPreferenceCount() >= mTileLimit && !mUserExpanded; + return !mUserExpanded && screen.getPreferenceCount() >= mTileLimit; } /** diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java index 31ffad0289f..e35fa331e76 100644 --- a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java @@ -74,8 +74,8 @@ public class DashboardFragmentTest { mDashboardCategory.tiles = new ArrayList<>(); mDashboardCategory.tiles.add(new Tile()); mTestFragment = new TestFragment(ShadowApplication.getInstance().getApplicationContext()); - when(mFakeFeatureFactory.dashboardFeatureProvider - .getProgressiveDisclosureMixin(any(Context.class), eq(mTestFragment))) + when(mFakeFeatureFactory.dashboardFeatureProvider.getProgressiveDisclosureMixin( + any(Context.class), eq(mTestFragment), any(Bundle.class))) .thenReturn(mDisclosureMixin); when(mFakeFeatureFactory.dashboardFeatureProvider.getTilesForCategory(anyString())) .thenReturn(mDashboardCategory); diff --git a/tests/robotests/src/com/android/settings/dashboard/ProgressiveDisclosureTest.java b/tests/robotests/src/com/android/settings/dashboard/ProgressiveDisclosureTest.java index e872a091ff8..bae6f8f4a8a 100644 --- a/tests/robotests/src/com/android/settings/dashboard/ProgressiveDisclosureTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/ProgressiveDisclosureTest.java @@ -77,8 +77,7 @@ public class ProgressiveDisclosureTest { mAppContext = ShadowApplication.getInstance().getApplicationContext(); mFakeFeatureFactory = (FakeFeatureFactory) FeatureFactory.getFactory(mContext); mMixin = new ProgressiveDisclosureMixin(mAppContext, - mFakeFeatureFactory.metricsFeatureProvider, - mPreferenceFragment); + mPreferenceFragment, false /* keepExpanded */); ReflectionHelpers.setField(mMixin, "mExpandButton", mExpandButton); mPreference = new Preference(mAppContext); mPreference.setKey("test"); @@ -93,6 +92,17 @@ public class ProgressiveDisclosureTest { assertThat(mMixin.shouldCollapse(mScreen)).isFalse(); } + @Test + public void shouldNotCollapse_whenStartAsExpanded() { + when(mScreen.getPreferenceCount()).thenReturn(5); + + mMixin = new ProgressiveDisclosureMixin(mAppContext, + mPreferenceFragment, true /* keepExpanded */); + mMixin.setTileLimit(10); + + assertThat(mMixin.shouldCollapse(mScreen)).isFalse(); + } + @Test public void shouldCollapse_morePreferenceThanLimit() { when(mScreen.getPreferenceCount()).thenReturn(5);