Prevent crash when rotating screen in Settings Search

Change-Id: If8134a1e96f791aacedf2e907272cee33dfc85fe
Fix: 34690393
Test: make RunSettingsRoboTests
This commit is contained in:
Matthew Fritze
2017-01-24 17:17:56 -08:00
parent a1bae0ad7e
commit 5ab7ecd775
2 changed files with 30 additions and 0 deletions

View File

@@ -20,6 +20,7 @@ import android.content.Context;
import android.database.Cursor; import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase;
import android.text.TextUtils;
import com.android.settings.dashboard.SiteMapManager; import com.android.settings.dashboard.SiteMapManager;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.IndexDatabaseHelper; import com.android.settings.search.IndexDatabaseHelper;
@@ -162,6 +163,9 @@ public class DatabaseResultLoader extends AsyncLoader<List<SearchResult>> {
* @return the cleaned query string * @return the cleaned query string
*/ */
private static String cleanQuery(String query) { private static String cleanQuery(String query) {
if (TextUtils.isEmpty(query)) {
return null;
}
return query.trim(); return query.trim();
} }

View File

@@ -17,6 +17,7 @@
package com.android.settings.search2; package com.android.settings.search2;
import android.content.Context; import android.content.Context;
import android.content.Loader;
import android.os.Bundle; import android.os.Bundle;
import com.android.internal.logging.nano.MetricsProto; import com.android.internal.logging.nano.MetricsProto;
@@ -35,6 +36,9 @@ import org.robolectric.Robolectric;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
import org.robolectric.util.ActivityController; import org.robolectric.util.ActivityController;
import java.util.List;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any; import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq; import static org.mockito.Matchers.eq;
@@ -96,6 +100,28 @@ public class SearchFragmentTest {
.getInstalledAppSearchLoader(any(Context.class), anyString()); .getInstalledAppSearchLoader(any(Context.class), anyString());
} }
@Test
public void screenRotateEmptyString_ShouldNotCrash() {
final Bundle bundle = new Bundle();
ActivityController<SearchActivity> activityController =
Robolectric.buildActivity(SearchActivity.class);
activityController.setup();
SearchFragment fragment = (SearchFragment) activityController.get().getFragmentManager()
.findFragmentById(R.id.main_content);
fragment.mQuery = "";
activityController.saveInstanceState(bundle).pause().stop().destroy();
activityController = Robolectric.buildActivity(SearchActivity.class);
activityController.setup(bundle);
verify(mFeatureFactory.searchFeatureProvider)
.getDatabaseSearchLoader(any(Context.class), anyString());
verify(mFeatureFactory.searchFeatureProvider)
.getInstalledAppSearchLoader(any(Context.class), anyString());
}
@Test @Test
public void queryTextChange_shouldTriggerLoader() { public void queryTextChange_shouldTriggerLoader() {
final String testQuery = "test"; final String testQuery = "test";