OSDN Git Service

Disable collapse when fragment is opened from search
authorFan Zhang <zhfan@google.com>
Wed, 15 Mar 2017 22:06:41 +0000 (15:06 -0700)
committerFan Zhang <zhfan@google.com>
Wed, 15 Mar 2017 22:21:34 +0000 (15:21 -0700)
Change-Id: I9564dff4ec53256a0fe992055049cf65ce68e37b
Fix: 36076953
Test: make RunSettingsRoboTests

src/com/android/settings/dashboard/DashboardFeatureProvider.java
src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
src/com/android/settings/dashboard/DashboardFragment.java
src/com/android/settings/dashboard/ProgressiveDisclosureMixin.java
tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
tests/robotests/src/com/android/settings/dashboard/ProgressiveDisclosureTest.java

index 20bcd3d..1c55bbb 100644 (file)
@@ -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
index 9c21720..722f9e1 100644 (file)
@@ -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
index e3845cd..3687929 100644 (file)
@@ -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<PreferenceController> controllers = getPreferenceControllers(context);
index be5e21b..07a7293 100644 (file)
@@ -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;
     }
 
     /**
index 31ffad0..e35fa33 100644 (file)
@@ -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);
index e872a09..bae6f8f 100644 (file)
@@ -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");
@@ -94,6 +93,17 @@ public class ProgressiveDisclosureTest {
     }
 
     @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);
         mMixin.setTileLimit(3);