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();
+ }
}