Build a sitemap manager to keep track of breadcrumbs

- Have a new db to track parent-child page relation at index time.
- Make a registry class to track (in IA) which page host what type of
  sub pages.
- Make a manager class that queries the db as well as IA to compute
  breadcrumbs

Fix: 32936784
Test: RunSettingsRoboTest

Change-Id: I5f1583fae772c3d477d2ad186e111b79cc3e41aa
This commit is contained in:
Fan Zhang
2017-01-21 14:53:01 -08:00
parent 03cd212f17
commit a96b11f65d
17 changed files with 692 additions and 63 deletions

View File

@@ -25,6 +25,7 @@ import android.provider.SearchIndexableResource;
import com.android.settings.R;
import com.android.settings.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
import com.android.settings.search.IndexDatabaseHelper.SiteMapColumns;
import com.android.settings.search2.DatabaseIndexingManager;
import com.android.settings.testutils.DatabaseTestUtils;
@@ -41,6 +42,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import static com.android.settings.dashboard.SiteMapManager.SITE_MAP_COLUMNS;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.spy;
@@ -57,7 +59,7 @@ public class DatabaseIndexingManagerTest {
private final String updatedSummaryOn = "summary-on";
private final String normalizedSummaryOn = "summaryon";
private final String summaryOff = "summary\u2011off";
private final String updatedSummaryOff ="summary-off";
private final String updatedSummaryOff = "summary-off";
private final String normalizedSummaryOff = "summaryoff";
private final String entries = "entries";
private final String keywords = "keywords, keywordss, keywordsss";
@@ -94,7 +96,7 @@ public class DatabaseIndexingManagerTest {
Cursor dbCursor = mDb.query("prefs_index", null, null, null, null, null, null);
List<String> columnNames = new ArrayList<>(Arrays.asList(dbCursor.getColumnNames()));
// Note that docid is not included.
List<String> expColumnNames = new ArrayList<>(Arrays.asList(new String[ ]{
List<String> expColumnNames = new ArrayList<>(Arrays.asList(new String[]{
"locale",
"data_rank",
"data_title",
@@ -263,6 +265,29 @@ public class DatabaseIndexingManagerTest {
assertThat(cursor.getBlob(20)).isNull();
}
@Test
public void testAddResourceWithChildFragment_shouldUpdateSiteMapDb() {
SearchIndexableResource resource = getFakeResource(R.xml.network_and_internet);
mManager.indexOneSearchIndexableData(mDb, localeStr, resource,
new HashMap<>());
Cursor query = mDb.query(IndexDatabaseHelper.Tables.TABLE_SITE_MAP, SITE_MAP_COLUMNS,
null, null, null, null, null);
query.moveToPosition(-1);
int count = 0;
while (query.moveToNext()) {
count++;
assertThat(query.getString(query.getColumnIndex(SiteMapColumns.PARENT_CLASS)))
.isEqualTo(className);
assertThat(query.getString(query.getColumnIndex(SiteMapColumns.PARENT_TITLE)))
.isEqualTo(mContext.getString(R.string.network_dashboard_title));
assertThat(query.getString(query.getColumnIndex(SiteMapColumns.CHILD_CLASS)))
.isNotEmpty();
assertThat(query.getString(query.getColumnIndex(SiteMapColumns.CHILD_TITLE)))
.isNotEmpty();
}
assertThat(count).isEqualTo(5);
}
@Test
public void testAddResourceCustomSetting_RowsMatch() {
SearchIndexableResource resource = getFakeResource(R.xml.gesture_settings);
@@ -393,16 +418,18 @@ public class DatabaseIndexingManagerTest {
// Normalized Title
assertThat(cursor.getString(3)).isEqualTo("preferred install location");
// Summary On
assertThat(cursor.getString(4)).isEqualTo("Change the preferred installation location for new apps");
assertThat(cursor.getString(4)).isEqualTo(
"Change the preferred installation location for new apps");
// Summary On Normalized
assertThat(cursor.getString(5)).isEqualTo("change the preferred installation location for new apps");
assertThat(cursor.getString(5)).isEqualTo(
"change the preferred installation location for new apps");
// Summary Off - only on for checkbox preferences
assertThat(cursor.getString(6)).isEmpty();
// Summary off normalized - only on for checkbox preferences
assertThat(cursor.getString(7)).isEmpty();
// Entries - only on for list preferences
assertThat(cursor.getString(8)).isEqualTo("Internal device storage|Removable SD card|" +
"Let the system decide|");
"Let the system decide|");
// Keywords
assertThat(cursor.getString(9)).isEmpty();
// Screen Title