Do not start suggestion loader if host isn't attached.

Change-Id: I1ab1de8f0bea6c66d8415e06aedcc7cbc6baf89c
Fixes: 68759380
Test: robotests
diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java
index 30a2fce..b7c8715 100644
--- a/src/com/android/settings/dashboard/DashboardSummary.java
+++ b/src/com/android/settings/dashboard/DashboardSummary.java
@@ -17,6 +17,7 @@
 package com.android.settings.dashboard;
 
 import android.app.Activity;
+import android.app.LoaderManager;
 import android.content.Context;
 import android.os.AsyncTask;
 import android.os.Bundle;
@@ -96,6 +97,14 @@
     }
 
     @Override
+    public LoaderManager getLoaderManager() {
+        if (!isAdded()) {
+            return null;
+        }
+        return super.getLoaderManager();
+    }
+
+    @Override
     public void onCreate(Bundle savedInstanceState) {
         long startTime = System.currentTimeMillis();
         super.onCreate(savedInstanceState);
diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionControllerMixin.java b/src/com/android/settings/dashboard/suggestions/SuggestionControllerMixin.java
index 7c2226d..e77881e 100644
--- a/src/com/android/settings/dashboard/suggestions/SuggestionControllerMixin.java
+++ b/src/com/android/settings/dashboard/suggestions/SuggestionControllerMixin.java
@@ -21,6 +21,7 @@
 import android.content.Loader;
 import android.os.Bundle;
 import android.service.settings.suggestions.Suggestion;
+import android.support.annotation.Nullable;
 import android.util.Log;
 
 import com.android.settings.overlay.FeatureFactory;
@@ -44,8 +45,10 @@
         void onSuggestionReady(List<Suggestion> data);
 
         /**
-         * Returns {@link LoaderManager} associated with the host.
+         * Returns {@link LoaderManager} associated with the host. If host is not attached to
+         * activity then return null.
          */
+        @Nullable
         LoaderManager getLoaderManager();
     }
 
@@ -82,8 +85,11 @@
 
     @Override
     public void onServiceConnected() {
-        mHost.getLoaderManager().restartLoader(SuggestionLoader.LOADER_ID_SUGGESTIONS,
-                null /* args */, this /* callback */);
+        final LoaderManager loaderManager = mHost.getLoaderManager();
+        if (loaderManager != null) {
+            loaderManager.restartLoader(SuggestionLoader.LOADER_ID_SUGGESTIONS,
+                    null /* args */, this /* callback */);
+        }
     }
 
     @Override
diff --git a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionControllerMixinTest.java b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionControllerMixinTest.java
index 6dfd67d..89c45b4 100644
--- a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionControllerMixinTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionControllerMixinTest.java
@@ -23,7 +23,6 @@
 
 import android.app.LoaderManager;
 import android.content.Context;
-import android.database.MatrixCursor;
 
 import com.android.settings.TestConfig;
 import com.android.settings.testutils.FakeFeatureFactory;
@@ -88,4 +87,14 @@
         verify(loaderManager).restartLoader(SuggestionLoader.LOADER_ID_SUGGESTIONS,
                 null /* args */, mMixin /* callback */);
     }
+
+    @Test
+    public void onServiceConnected_hostNotAttached_shouldDoNothing() {
+        when(mHost.getLoaderManager()).thenReturn(null);
+
+        mMixin = new SuggestionControllerMixin(mContext, mHost, mLifecycle);
+        mMixin.onServiceConnected();
+
+        verify(mHost).getLoaderManager();
+    }
 }