Fix Settings home lifecycle

Bug: 27330440
Bug: 26268813
Change-Id: Ibb3729c9872be2488db3741ec72ba5a43e66db5f
diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java
index 69fd8e7..448a77d 100644
--- a/src/com/android/settings/dashboard/DashboardSummary.java
+++ b/src/com/android/settings/dashboard/DashboardSummary.java
@@ -58,11 +58,14 @@
 
     private static final String SUGGESTIONS = "suggestions";
 
+    private static final String EXTRA_SCROLL_POSITION = "scroll_position";
+
     private FocusRecyclerView mDashboard;
     private DashboardAdapter mAdapter;
     private SummaryLoader mSummaryLoader;
     private ConditionManager mConditionManager;
     private SuggestionParser mSuggestionParser;
+    private LinearLayoutManager mLayoutManager;
 
     @Override
     protected int getMetricsCategory() {
@@ -134,16 +137,27 @@
     }
 
     @Override
+    public void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+        outState.putInt(EXTRA_SCROLL_POSITION, mLayoutManager.findFirstVisibleItemPosition());
+    }
+
+    @Override
     public void onViewCreated(View view, Bundle bundle) {
         mDashboard = (FocusRecyclerView) view.findViewById(R.id.dashboard_container);
-        LinearLayoutManager llm = new LinearLayoutManager(getContext());
-        llm.setOrientation(LinearLayoutManager.VERTICAL);
-        mDashboard.setLayoutManager(llm);
+        mLayoutManager = new LinearLayoutManager(getContext());
+        mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
+        if (bundle != null) {
+            int scrollPosition = bundle.getInt(EXTRA_SCROLL_POSITION);
+            mLayoutManager.scrollToPosition(scrollPosition);
+        }
+        mDashboard.setLayoutManager(mLayoutManager);
         mDashboard.setHasFixedSize(true);
         mDashboard.setListener(this);
         mAdapter = new DashboardAdapter(getContext());
         mAdapter.setConditions(mConditionManager.getConditions());
         mAdapter.setSuggestions(mSuggestionParser);
+        mDashboard.setAdapter(mAdapter);
         mSummaryLoader.setAdapter(mAdapter);
         ConditionAdapterUtils.addDismiss(mDashboard);
 
@@ -164,7 +178,6 @@
 
         // recheck to see if any suggestions have been changed.
         mAdapter.setSuggestions(mSuggestionParser);
-        mDashboard.setAdapter(mAdapter);
 
         long delta = System.currentTimeMillis() - start;
         Log.d(TAG, "rebuildUI took: " + delta + " ms");