From 6d7aa4e9514ff99ee4a288a34cc6087dd63bb45b Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Wed, 1 Nov 2017 10:09:04 -0700 Subject: [PATCH] Do not start suggestion loader if host isn't attached. Change-Id: I1ab1de8f0bea6c66d8415e06aedcc7cbc6baf89c Fixes: 68759380 Test: robotests --- .../android/settings/dashboard/DashboardSummary.java | 9 +++++++++ .../suggestions/SuggestionControllerMixin.java | 12 +++++++++--- .../suggestions/SuggestionControllerMixinTest.java | 11 ++++++++++- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java index 30a2fce8d7e..b7c87150fc2 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; @@ -95,6 +96,14 @@ public class DashboardSummary extends InstrumentedFragment } } + @Override + public LoaderManager getLoaderManager() { + if (!isAdded()) { + return null; + } + return super.getLoaderManager(); + } + @Override public void onCreate(Bundle savedInstanceState) { long startTime = System.currentTimeMillis(); diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionControllerMixin.java b/src/com/android/settings/dashboard/suggestions/SuggestionControllerMixin.java index 7c2226d5ead..e77881e7e0a 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.Context; 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 @@ public class SuggestionControllerMixin implements SuggestionController.ServiceCo void onSuggestionReady(List 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 @@ public class SuggestionControllerMixin implements SuggestionController.ServiceCo @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 6dfd67dd55b..89c45b480b8 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 static org.mockito.Mockito.when; 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 @@ public class SuggestionControllerMixinTest { 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(); + } }