Simplify IndexData builder

This is a small refactor in the large game of refactoring
DatabeseIndexingManager, and the general indexing pipeline
for Settings search.

This change is centered around hiding the normalization of
data (title, summary, keywords) from the data collector,
and putting that responsibility into the IndexData object.

In a future CL, we may move this again to the controller
that actually indexes the data.

Note, the conversion from PreIndexData to IndexData is
still messy, but until I can write a CL that just
rearranges the code, we must stay patient and vigilant.

Bug: 33577327
Test: make RunSettingsRoboTests
Change-Id: I53543d3d9c74a61380601297c55b6e4fea13031a
This commit is contained in:
Matthew Fritze
2017-08-22 15:51:50 -07:00
parent e4cab00ffa
commit 6bbc459f24
8 changed files with 106 additions and 210 deletions

View File

@@ -362,4 +362,4 @@ public class DatabaseIndexingManager {
} }
} }
} }
} }

View File

@@ -17,16 +17,10 @@
package com.android.settings.search; package com.android.settings.search;
import android.Manifest;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.text.TextUtils;
import android.util.ArrayMap; import android.util.ArrayMap;
import android.util.Log; import android.util.Log;
@@ -37,10 +31,8 @@ import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.text.Normalizer;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.regex.Pattern;
/** /**
* Utility class for {@like DatabaseIndexingManager} to handle the mapping between Payloads * Utility class for {@like DatabaseIndexingManager} to handle the mapping between Payloads
@@ -53,15 +45,6 @@ public class DatabaseIndexingUtils {
private static final String FIELD_NAME_SEARCH_INDEX_DATA_PROVIDER = private static final String FIELD_NAME_SEARCH_INDEX_DATA_PROVIDER =
"SEARCH_INDEX_DATA_PROVIDER"; "SEARCH_INDEX_DATA_PROVIDER";
private static final String NON_BREAKING_HYPHEN = "\u2011";
private static final String EMPTY = "";
private static final String LIST_DELIMITERS = "[,]\\s*";
private static final String HYPHEN = "-";
private static final String SPACE = " ";
private static final Pattern REMOVE_DIACRITICALS_PATTERN
= Pattern.compile("\\p{InCombiningDiacriticalMarks}+");
/** /**
* Builds intent into a subsetting. * Builds intent into a subsetting.
*/ */
@@ -173,19 +156,4 @@ public class DatabaseIndexingUtils {
} }
return null; return null;
} }
public static String normalizeHyphen(String input) {
return (input != null) ? input.replaceAll(NON_BREAKING_HYPHEN, HYPHEN) : EMPTY;
}
public static String normalizeString(String input) {
final String nohyphen = (input != null) ? input.replaceAll(HYPHEN, EMPTY) : EMPTY;
final String normalized = Normalizer.normalize(nohyphen, Normalizer.Form.NFD);
return REMOVE_DIACRITICALS_PATTERN.matcher(normalized).replaceAll("").toLowerCase();
}
public static String normalizeKeywords(String input) {
return (input != null) ? input.replaceAll(LIST_DELIMITERS, SPACE) : EMPTY;
}
} }

View File

@@ -27,7 +27,9 @@ import com.android.settings.search.ResultPayload;
import com.android.settings.search.ResultPayloadUtils; import com.android.settings.search.ResultPayloadUtils;
import com.android.settings.search.SearchIndexableResources; import com.android.settings.search.SearchIndexableResources;
import java.text.Normalizer;
import java.util.Objects; import java.util.Objects;
import java.util.regex.Pattern;
/** /**
* Data class representing a single row in the Setting Search results database. * Data class representing a single row in the Setting Search results database.
@@ -38,14 +40,11 @@ public class IndexData {
public final String normalizedTitle; public final String normalizedTitle;
public final String updatedSummaryOn; public final String updatedSummaryOn;
public final String normalizedSummaryOn; public final String normalizedSummaryOn;
public final String updatedSummaryOff;
public final String normalizedSummaryOff;
public final String entries; public final String entries;
public final String className; public final String className;
public final String childClassName; public final String childClassName;
public final String screenTitle; public final String screenTitle;
public final int iconResId; public final int iconResId;
public final int rank;
public final String spaceDelimitedKeywords; public final String spaceDelimitedKeywords;
public final String intentAction; public final String intentAction;
public final String intentTargetPackage; public final String intentTargetPackage;
@@ -56,21 +55,28 @@ public class IndexData {
public final int payloadType; public final int payloadType;
public final byte[] payload; public final byte[] payload;
private static final String NON_BREAKING_HYPHEN = "\u2011";
private static final String EMPTY = "";
private static final String HYPHEN = "-";
private static final String SPACE = " ";
// Regex matching a comma, and any number of subsequent white spaces.
private static final String LIST_DELIMITERS = "[,]\\s*";
private static final Pattern REMOVE_DIACRITICALS_PATTERN
= Pattern.compile("\\p{InCombiningDiacriticalMarks}+");
private IndexData(Builder builder) { private IndexData(Builder builder) {
locale = builder.mLocale; locale = builder.mLocale;
updatedTitle = builder.mUpdatedTitle; updatedTitle = normalizeHyphen(builder.mTitle);
normalizedTitle = builder.mNormalizedTitle; normalizedTitle = normalizeString(builder.mTitle);
updatedSummaryOn = builder.mUpdatedSummaryOn; updatedSummaryOn = normalizeHyphen(builder.mSummaryOn);
normalizedSummaryOn = builder.mNormalizedSummaryOn; normalizedSummaryOn = normalizeString(builder.mSummaryOn);
updatedSummaryOff = builder.mUpdatedSummaryOff;
normalizedSummaryOff = builder.mNormalizedSummaryOff;
entries = builder.mEntries; entries = builder.mEntries;
className = builder.mClassName; className = builder.mClassName;
childClassName = builder.mChildClassName; childClassName = builder.mChildClassName;
screenTitle = builder.mScreenTitle; screenTitle = builder.mScreenTitle;
iconResId = builder.mIconResId; iconResId = builder.mIconResId;
rank = builder.mRank; spaceDelimitedKeywords = normalizeKeywords(builder.mKeywords);
spaceDelimitedKeywords = builder.mSpaceDelimitedKeywords;
intentAction = builder.mIntentAction; intentAction = builder.mIntentAction;
intentTargetPackage = builder.mIntentTargetPackage; intentTargetPackage = builder.mIntentTargetPackage;
intentTargetClass = builder.mIntentTargetClass; intentTargetClass = builder.mIntentTargetClass;
@@ -93,21 +99,49 @@ public class IndexData {
: key.hashCode(); : key.hashCode();
} }
@Override
public String toString() {
return new StringBuilder(updatedTitle)
.append(": ")
.append(updatedSummaryOn)
.toString();
}
/**
* In the list of keywords, replace the comma and all subsequent whitespace with a single space.
*/
public static String normalizeKeywords(String input) {
return (input != null) ? input.replaceAll(LIST_DELIMITERS, SPACE) : EMPTY;
}
/**
* @return {@param input} where all non-standard hyphens are replaced by normal hyphens.
*/
public static String normalizeHyphen(String input) {
return (input != null) ? input.replaceAll(NON_BREAKING_HYPHEN, HYPHEN) : EMPTY;
}
/**
* @return {@param input} with all hyphens removed, and all letters lower case.
*/
public static String normalizeString(String input) {
final String normalizedHypen = normalizeHyphen(input);
final String nohyphen = (input != null) ? normalizedHypen.replaceAll(HYPHEN, EMPTY) : EMPTY;
final String normalized = Normalizer.normalize(nohyphen, Normalizer.Form.NFD);
return REMOVE_DIACRITICALS_PATTERN.matcher(normalized).replaceAll("").toLowerCase();
}
public static class Builder { public static class Builder {
private String mLocale; private String mLocale;
private String mUpdatedTitle; private String mTitle;
private String mNormalizedTitle; private String mSummaryOn;
private String mUpdatedSummaryOn;
private String mNormalizedSummaryOn;
private String mUpdatedSummaryOff;
private String mNormalizedSummaryOff;
private String mEntries; private String mEntries;
private String mClassName; private String mClassName;
private String mChildClassName; private String mChildClassName;
private String mScreenTitle; private String mScreenTitle;
private int mIconResId; private int mIconResId;
private int mRank; private String mKeywords;
private String mSpaceDelimitedKeywords;
private String mIntentAction; private String mIntentAction;
private String mIntentTargetPackage; private String mIntentTargetPackage;
private String mIntentTargetClass; private String mIntentTargetClass;
@@ -123,33 +157,13 @@ public class IndexData {
return this; return this;
} }
public Builder setUpdatedTitle(String updatedTitle) { public Builder setTitle(String title) {
mUpdatedTitle = updatedTitle; mTitle = title;
return this; return this;
} }
public Builder setNormalizedTitle(String normalizedTitle) { public Builder setSummaryOn(String summaryOn) {
mNormalizedTitle = normalizedTitle; mSummaryOn = summaryOn;
return this;
}
public Builder setUpdatedSummaryOn(String updatedSummaryOn) {
mUpdatedSummaryOn = updatedSummaryOn;
return this;
}
public Builder setNormalizedSummaryOn(String normalizedSummaryOn) {
mNormalizedSummaryOn = normalizedSummaryOn;
return this;
}
public Builder setUpdatedSummaryOff(String updatedSummaryOff) {
mUpdatedSummaryOff = updatedSummaryOff;
return this;
}
public Builder setNormalizedSummaryOff(String normalizedSummaryOff) {
this.mNormalizedSummaryOff = normalizedSummaryOff;
return this; return this;
} }
@@ -178,13 +192,8 @@ public class IndexData {
return this; return this;
} }
public Builder setRank(int rank) { public Builder setKeywords(String keywords) {
mRank = rank; mKeywords = keywords;
return this;
}
public Builder setSpaceDelimitedKeywords(String spaceDelimitedKeywords) {
mSpaceDelimitedKeywords = spaceDelimitedKeywords;
return this; return this;
} }
@@ -260,8 +269,8 @@ public class IndexData {
boolean isEmptyIntentAction = TextUtils.isEmpty(mIntentAction); boolean isEmptyIntentAction = TextUtils.isEmpty(mIntentAction);
// No intent action is set, or the intent action is for a subsetting. // No intent action is set, or the intent action is for a subsetting.
if (isEmptyIntentAction if (isEmptyIntentAction
|| (!isEmptyIntentAction && TextUtils.equals(mIntentTargetPackage, || TextUtils.equals(mIntentTargetPackage,
SearchIndexableResources.SUBSETTING_TARGET_PACKAGE))) { SearchIndexableResources.SUBSETTING_TARGET_PACKAGE)) {
// Action is null, we will launch it as a sub-setting // Action is null, we will launch it as a sub-setting
intent = DatabaseIndexingUtils.buildSubsettingIntent(context, mClassName, mKey, intent = DatabaseIndexingUtils.buildSubsettingIntent(context, mClassName, mKey,
mScreenTitle); mScreenTitle);

View File

@@ -147,12 +147,14 @@ public class IndexDataConverter {
} }
IndexData.Builder builder = new IndexData.Builder(); IndexData.Builder builder = new IndexData.Builder();
builder.setLocale(localeStr) builder.setTitle(raw.title)
.setSummaryOn(raw.summaryOn)
.setLocale(localeStr)
.setEntries(raw.entries) .setEntries(raw.entries)
.setKeywords(raw.keywords)
.setClassName(raw.className) .setClassName(raw.className)
.setScreenTitle(raw.screenTitle) .setScreenTitle(raw.screenTitle)
.setIconResId(raw.iconResId) .setIconResId(raw.iconResId)
.setRank(raw.rank)
.setIntentAction(raw.intentAction) .setIntentAction(raw.intentAction)
.setIntentTargetPackage(raw.intentTargetPackage) .setIntentTargetPackage(raw.intentTargetPackage)
.setIntentTargetClass(raw.intentTargetClass) .setIntentTargetClass(raw.intentTargetClass)
@@ -160,8 +162,7 @@ public class IndexDataConverter {
.setKey(raw.key) .setKey(raw.key)
.setUserId(raw.userId); .setUserId(raw.userId);
updateOneRowWithFilteredData(builder, raw.title, raw.summaryOn, raw.summaryOff, updateOneRow(builder.build(mContext));
raw.keywords);
} }
@VisibleForTesting @VisibleForTesting
@@ -249,7 +250,6 @@ public class IndexDataConverter {
ResultPayload payload; ResultPayload payload;
boolean enabled; boolean enabled;
final String fragmentName = sir.className; final String fragmentName = sir.className;
final int rank = sir.rank;
final String intentAction = sir.intentAction; final String intentAction = sir.intentAction;
final String intentTargetPackage = sir.intentTargetPackage; final String intentTargetPackage = sir.intentTargetPackage;
final String intentTargetClass = sir.intentTargetClass; final String intentTargetClass = sir.intentTargetClass;
@@ -271,11 +271,12 @@ public class IndexDataConverter {
// TODO: Set payload type for header results // TODO: Set payload type for header results
IndexData.Builder headerBuilder = new IndexData.Builder(); IndexData.Builder headerBuilder = new IndexData.Builder();
headerBuilder.setLocale(localeStr) headerBuilder.setTitle(headerTitle)
.setEntries(null) .setSummaryOn(headerSummary)
.setKeywords(headerKeywords)
.setLocale(localeStr)
.setClassName(fragmentName) .setClassName(fragmentName)
.setScreenTitle(screenTitle) .setScreenTitle(screenTitle)
.setRank(rank)
.setIntentAction(intentAction) .setIntentAction(intentAction)
.setIntentTargetPackage(intentTargetPackage) .setIntentTargetPackage(intentTargetPackage)
.setIntentTargetClass(intentTargetClass) .setIntentTargetClass(intentTargetClass)
@@ -306,11 +307,12 @@ public class IndexDataConverter {
} }
builder = new IndexData.Builder(); builder = new IndexData.Builder();
builder.setLocale(localeStr) builder.setTitle(title)
.setLocale(localeStr)
.setKeywords(keywords)
.setClassName(fragmentName) .setClassName(fragmentName)
.setScreenTitle(screenTitle) .setScreenTitle(screenTitle)
.setIconResId(iconResId) .setIconResId(iconResId)
.setRank(rank)
.setIntentAction(intentAction) .setIntentAction(intentAction)
.setIntentTargetPackage(intentTargetPackage) .setIntentTargetPackage(intentTargetPackage)
.setIntentTargetClass(intentTargetClass) .setIntentTargetClass(intentTargetClass)
@@ -331,14 +333,17 @@ public class IndexDataConverter {
payload = DatabaseIndexingUtils.getPayloadFromUriMap(controllerUriMap, key); payload = DatabaseIndexingUtils.getPayloadFromUriMap(controllerUriMap, key);
childFragment = XmlParserUtils.getDataChildFragment(context, attrs); childFragment = XmlParserUtils.getDataChildFragment(context, attrs);
builder.setEntries(entries) builder.setSummaryOn(summary)
.setEntries(entries)
.setChildClassName(childFragment) .setChildClassName(childFragment)
.setPayload(payload); .setPayload(payload);
// Insert rows for the child nodes of PreferenceScreen // Insert rows for the child nodes of PreferenceScreen
updateOneRowWithFilteredData(builder, title, summary, updateOneRow(builder.build(mContext));
null /* summary off */, keywords);
} else { } else {
// TODO (b/33577327) We removed summary off here. We should check if we can
// merge this 'else' section with the one above. Put a break point to
// investigate.
String summaryOn = XmlParserUtils.getDataSummaryOn(context, attrs); String summaryOn = XmlParserUtils.getDataSummaryOn(context, attrs);
String summaryOff = XmlParserUtils.getDataSummaryOff(context, attrs); String summaryOff = XmlParserUtils.getDataSummaryOff(context, attrs);
@@ -346,15 +351,15 @@ public class IndexDataConverter {
summaryOn = XmlParserUtils.getDataSummary(context, attrs); summaryOn = XmlParserUtils.getDataSummary(context, attrs);
} }
updateOneRowWithFilteredData(builder, title, summaryOn, summaryOff, builder.setSummaryOn(summaryOn);
keywords);
updateOneRow(builder.build(mContext));
} }
} }
// The xml header's title does not match the title of one of the child settings. // The xml header's title does not match the title of one of the child settings.
if (isHeaderUnique) { if (isHeaderUnique) {
updateOneRowWithFilteredData(headerBuilder, headerTitle, headerSummary, updateOneRow(headerBuilder.build(mContext));
null /* summary off */, headerKeywords);
} }
} catch (XmlPullParserException e) { } catch (XmlPullParserException e) {
throw new RuntimeException("Error parsing PreferenceScreen", e); throw new RuntimeException("Error parsing PreferenceScreen", e);
@@ -394,8 +399,11 @@ public class IndexDataConverter {
boolean enabled = !nonIndexableKeys.contains(raw.key); boolean enabled = !nonIndexableKeys.contains(raw.key);
IndexData.Builder builder = new IndexData.Builder(); IndexData.Builder builder = new IndexData.Builder();
builder.setLocale(localeStr) builder.setTitle(raw.title)
.setSummaryOn(raw.summaryOn)
.setLocale(localeStr)
.setEntries(raw.entries) .setEntries(raw.entries)
.setKeywords(raw.keywords)
.setClassName(className) .setClassName(className)
.setScreenTitle(raw.screenTitle) .setScreenTitle(raw.screenTitle)
.setIconResId(raw.iconResId) .setIconResId(raw.iconResId)
@@ -406,8 +414,7 @@ public class IndexDataConverter {
.setKey(raw.key) .setKey(raw.key)
.setUserId(raw.userId); .setUserId(raw.userId);
updateOneRowWithFilteredData(builder, raw.title, raw.summaryOn, raw.summaryOff, updateOneRow(builder.build(mContext));
raw.keywords);
} }
} }
@@ -438,32 +445,6 @@ public class IndexDataConverter {
} }
} }
@VisibleForTesting
void updateOneRowWithFilteredData(IndexData.Builder builder,
String title, String summaryOn, String summaryOff, String keywords) {
final String updatedTitle = DatabaseIndexingUtils.normalizeHyphen(title);
final String updatedSummaryOn = DatabaseIndexingUtils.normalizeHyphen(summaryOn);
final String updatedSummaryOff = DatabaseIndexingUtils.normalizeHyphen(summaryOff);
final String normalizedTitle = DatabaseIndexingUtils.normalizeString(updatedTitle);
final String normalizedSummaryOn = DatabaseIndexingUtils.normalizeString(updatedSummaryOn);
final String normalizedSummaryOff = DatabaseIndexingUtils
.normalizeString(updatedSummaryOff);
final String spaceDelimitedKeywords = DatabaseIndexingUtils.normalizeKeywords(keywords);
builder.setUpdatedTitle(updatedTitle)
.setUpdatedSummaryOn(updatedSummaryOn)
.setUpdatedSummaryOff(updatedSummaryOff)
.setNormalizedTitle(normalizedTitle)
.setNormalizedSummaryOn(normalizedSummaryOn)
.setNormalizedSummaryOff(normalizedSummaryOff)
.setSpaceDelimitedKeywords(spaceDelimitedKeywords);
updateOneRow(builder.build(mContext));
}
private void updateOneRow(IndexData row) { private void updateOneRow(IndexData row) {
if (TextUtils.isEmpty(row.updatedTitle)) { if (TextUtils.isEmpty(row.updatedTitle)) {
return; return;
@@ -472,13 +453,10 @@ public class IndexDataConverter {
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();
values.put(IndexDatabaseHelper.IndexColumns.DOCID, row.getDocId()); values.put(IndexDatabaseHelper.IndexColumns.DOCID, row.getDocId());
values.put(LOCALE, row.locale); values.put(LOCALE, row.locale);
values.put(DATA_RANK, row.rank);
values.put(DATA_TITLE, row.updatedTitle); values.put(DATA_TITLE, row.updatedTitle);
values.put(DATA_TITLE_NORMALIZED, row.normalizedTitle); values.put(DATA_TITLE_NORMALIZED, row.normalizedTitle);
values.put(DATA_SUMMARY_ON, row.updatedSummaryOn); values.put(DATA_SUMMARY_ON, row.updatedSummaryOn);
values.put(DATA_SUMMARY_ON_NORMALIZED, row.normalizedSummaryOn); values.put(DATA_SUMMARY_ON_NORMALIZED, row.normalizedSummaryOn);
values.put(DATA_SUMMARY_OFF, row.updatedSummaryOff);
values.put(DATA_SUMMARY_OFF_NORMALIZED, row.normalizedSummaryOff);
values.put(DATA_ENTRIES, row.entries); values.put(DATA_ENTRIES, row.entries);
values.put(DATA_KEYWORDS, row.spaceDelimitedKeywords); values.put(DATA_KEYWORDS, row.spaceDelimitedKeywords);
values.put(CLASS_NAME, row.className); values.put(CLASS_NAME, row.className);

View File

@@ -27,7 +27,6 @@ import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import android.content.ContentValues; import android.content.ContentValues;
@@ -287,6 +286,7 @@ public class DatabaseIndexingManagerTest {
@Test @Test
public void testLocaleUpdated_afterFullIndexing_localeAdded() { public void testLocaleUpdated_afterFullIndexing_localeAdded() {
mManager.performIndexing(); mManager.performIndexing();
assertThat(IndexDatabaseHelper.isLocaleAlreadyIndexed(mContext, localeStr)).isTrue(); assertThat(IndexDatabaseHelper.isLocaleAlreadyIndexed(mContext, localeStr)).isTrue();
} }
@@ -302,8 +302,6 @@ public class DatabaseIndexingManagerTest {
// Locale // Locale
assertThat(cursor.getString(0)).isEqualTo(localeStr); assertThat(cursor.getString(0)).isEqualTo(localeStr);
// Data Rank
assertThat(cursor.getInt(1)).isEqualTo(rank);
// Data Title // Data Title
assertThat(cursor.getString(2)).isEqualTo(updatedTitle); assertThat(cursor.getString(2)).isEqualTo(updatedTitle);
// Normalized Title // Normalized Title
@@ -312,10 +310,6 @@ public class DatabaseIndexingManagerTest {
assertThat(cursor.getString(4)).isEqualTo(updatedSummaryOn); assertThat(cursor.getString(4)).isEqualTo(updatedSummaryOn);
// Summary On Normalized // Summary On Normalized
assertThat(cursor.getString(5)).isEqualTo(normalizedSummaryOn); assertThat(cursor.getString(5)).isEqualTo(normalizedSummaryOn);
// Summary Off
assertThat(cursor.getString(6)).isEqualTo(updatedSummaryOff);
// Summary off normalized
assertThat(cursor.getString(7)).isEqualTo(normalizedSummaryOff);
// Entries // Entries
assertThat(cursor.getString(8)).isEqualTo(entries); assertThat(cursor.getString(8)).isEqualTo(entries);
// Keywords // Keywords

View File

@@ -24,6 +24,7 @@ import android.database.sqlite.SQLiteDatabase;
import com.android.settings.TestConfig; import com.android.settings.TestConfig;
import com.android.settings.dashboard.SiteMapManager; import com.android.settings.dashboard.SiteMapManager;
import com.android.settings.search.indexing.IndexData;
import com.android.settings.testutils.DatabaseTestUtils; import com.android.settings.testutils.DatabaseTestUtils;
import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.SettingsRobolectricTestRunner;
@@ -227,8 +228,8 @@ public class DatabaseResultLoaderTest {
} }
private void insertSpecialCase(String specialCase) { private void insertSpecialCase(String specialCase) {
String normalized = DatabaseIndexingUtils.normalizeHyphen(specialCase); String normalized = IndexData.normalizeHyphen(specialCase);
normalized = DatabaseIndexingUtils.normalizeString(normalized); normalized = IndexData.normalizeString(normalized);
final ResultPayload payload = new ResultPayload(new Intent()); final ResultPayload payload = new ResultPayload(new Intent());
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();

View File

@@ -54,7 +54,6 @@ public class IndexDataConverterTest {
private final String localeStr = "en_US"; private final String localeStr = "en_US";
private final int rank = 8;
private final String title = "title\u2011title"; private final String title = "title\u2011title";
private final String updatedTitle = "title-title"; private final String updatedTitle = "title-title";
private final String normalizedTitle = "titletitle"; private final String normalizedTitle = "titletitle";
@@ -128,8 +127,6 @@ public class IndexDataConverterTest {
// Locale // Locale
assertThat(cursor.getString(0)).isEqualTo(localeStr); assertThat(cursor.getString(0)).isEqualTo(localeStr);
// Data Rank
assertThat(cursor.getInt(1)).isEqualTo(raw.rank);
// Data Title // Data Title
assertThat(cursor.getString(2)).isEqualTo(updatedTitle); assertThat(cursor.getString(2)).isEqualTo(updatedTitle);
// Normalized Title // Normalized Title
@@ -138,10 +135,6 @@ public class IndexDataConverterTest {
assertThat(cursor.getString(4)).isEqualTo(updatedSummaryOn); assertThat(cursor.getString(4)).isEqualTo(updatedSummaryOn);
// Summary On Normalized // Summary On Normalized
assertThat(cursor.getString(5)).isEqualTo(normalizedSummaryOn); assertThat(cursor.getString(5)).isEqualTo(normalizedSummaryOn);
// Summary Off
assertThat(cursor.getString(6)).isEqualTo(updatedSummaryOff);
// Summary off normalized
assertThat(cursor.getString(7)).isEqualTo(normalizedSummaryOff);
// Entries // Entries
assertThat(cursor.getString(8)).isEqualTo(raw.entries); assertThat(cursor.getString(8)).isEqualTo(raw.entries);
// Keywords // Keywords
@@ -225,8 +218,6 @@ public class IndexDataConverterTest {
// Locale // Locale
assertThat(cursor.getString(0)).isEqualTo(localeStr); assertThat(cursor.getString(0)).isEqualTo(localeStr);
// Data Rank
assertThat(cursor.getInt(1)).isEqualTo(rank);
// Data Title // Data Title
assertThat(cursor.getString(2)).isEqualTo("App info"); assertThat(cursor.getString(2)).isEqualTo("App info");
// Normalized Title // Normalized Title
@@ -235,10 +226,6 @@ public class IndexDataConverterTest {
assertThat(cursor.getString(4)).isEqualTo("Manage apps, set up quick launch shortcuts"); assertThat(cursor.getString(4)).isEqualTo("Manage apps, set up quick launch shortcuts");
// Summary On Normalized // Summary On Normalized
assertThat(cursor.getString(5)).isEqualTo("manage apps, set up quick launch shortcuts"); assertThat(cursor.getString(5)).isEqualTo("manage apps, set up quick launch shortcuts");
// 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 // Entries - only on for list preferences
assertThat(cursor.getString(8)).isNull(); assertThat(cursor.getString(8)).isNull();
// Keywords // Keywords
@@ -285,8 +272,6 @@ public class IndexDataConverterTest {
// Locale // Locale
assertThat(cursor.getString(0)).isEqualTo(localeStr); assertThat(cursor.getString(0)).isEqualTo(localeStr);
// Data Rank
assertThat(cursor.getInt(1)).isEqualTo(rank);
// Data Title // Data Title
assertThat(cursor.getString(2)).isEqualTo(prefTitle); assertThat(cursor.getString(2)).isEqualTo(prefTitle);
// Normalized Title // Normalized Title
@@ -295,10 +280,6 @@ public class IndexDataConverterTest {
assertThat(cursor.getString(4)).isEqualTo(prefSummary); assertThat(cursor.getString(4)).isEqualTo(prefSummary);
// Summary On Normalized // Summary On Normalized
assertThat(cursor.getString(5)).isEqualTo(prefSummary.toLowerCase()); assertThat(cursor.getString(5)).isEqualTo(prefSummary.toLowerCase());
// 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 // Entries - only on for list preferences
assertThat(cursor.getString(8)).isNull(); assertThat(cursor.getString(8)).isNull();
// Keywords // Keywords
@@ -343,8 +324,6 @@ public class IndexDataConverterTest {
cursor.moveToPosition(0); cursor.moveToPosition(0);
// Locale // Locale
assertThat(cursor.getString(0)).isEqualTo(localeStr); assertThat(cursor.getString(0)).isEqualTo(localeStr);
// Data Rank
assertThat(cursor.getInt(1)).isEqualTo(rank);
// Data Title // Data Title
assertThat(cursor.getString(2)).isEqualTo("Advanced settings"); assertThat(cursor.getString(2)).isEqualTo("Advanced settings");
// Normalized Title // Normalized Title
@@ -353,10 +332,6 @@ public class IndexDataConverterTest {
assertThat(cursor.getString(4)).isEqualTo("Enable more settings options"); assertThat(cursor.getString(4)).isEqualTo("Enable more settings options");
// Summary On Normalized // Summary On Normalized
assertThat(cursor.getString(5)).isEqualTo("enable more settings options"); assertThat(cursor.getString(5)).isEqualTo("enable more settings options");
// Summary Off
assertThat(cursor.getString(6)).isEqualTo("Enable more settings options");
// Summary Off
assertThat(cursor.getString(7)).isEqualTo("enable more settings options");
// Entries - only on for list preferences // Entries - only on for list preferences
assertThat(cursor.getString(8)).isNull(); assertThat(cursor.getString(8)).isNull();
// Keywords // Keywords
@@ -397,8 +372,6 @@ public class IndexDataConverterTest {
cursor.moveToPosition(3); cursor.moveToPosition(3);
// Locale // Locale
assertThat(cursor.getString(0)).isEqualTo(localeStr); assertThat(cursor.getString(0)).isEqualTo(localeStr);
// Data Rank
assertThat(cursor.getInt(1)).isEqualTo(rank);
// Data Title // Data Title
assertThat(cursor.getString(2)).isEqualTo("Preferred install location"); assertThat(cursor.getString(2)).isEqualTo("Preferred install location");
// Normalized Title // Normalized Title
@@ -409,10 +382,6 @@ public class IndexDataConverterTest {
// Summary On Normalized // Summary On Normalized
assertThat(cursor.getString(5)).isEqualTo( assertThat(cursor.getString(5)).isEqualTo(
"change the preferred installation location for new apps"); "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 // Entries - only on for list preferences
assertThat(cursor.getString(8)).isEqualTo("Internal device storage|Removable SD card|" + assertThat(cursor.getString(8)).isEqualTo("Internal device storage|Removable SD card|" +
"Let the system decide|"); "Let the system decide|");
@@ -483,8 +452,6 @@ public class IndexDataConverterTest {
// Locale // Locale
assertThat(cursor.getString(0)).isEqualTo(localeStr); assertThat(cursor.getString(0)).isEqualTo(localeStr);
// Data Rank
assertThat(cursor.getInt(1)).isEqualTo(0);
// Data Title // Data Title
assertThat(cursor.getString(2)).isEqualTo("Display size"); assertThat(cursor.getString(2)).isEqualTo("Display size");
// Normalized Title // Normalized Title
@@ -493,10 +460,6 @@ public class IndexDataConverterTest {
assertThat(cursor.getString(4)).isEmpty(); assertThat(cursor.getString(4)).isEmpty();
// Summary On Normalized // Summary On Normalized
assertThat(cursor.getString(5)).isEmpty(); assertThat(cursor.getString(5)).isEmpty();
// 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 // Entries - only on for list preferences
assertThat(cursor.getString(8)).isNull(); assertThat(cursor.getString(8)).isNull();
// Keywords // Keywords
@@ -550,8 +513,6 @@ public class IndexDataConverterTest {
// Locale // Locale
assertThat(cursor.getString(0)).isEqualTo(localeStr); assertThat(cursor.getString(0)).isEqualTo(localeStr);
// Data Rank
assertThat(cursor.getInt(1)).isEqualTo(0);
// Data Title // Data Title
assertThat(cursor.getString(2)).isEqualTo("Display size"); assertThat(cursor.getString(2)).isEqualTo("Display size");
// Normalized Title // Normalized Title
@@ -560,10 +521,6 @@ public class IndexDataConverterTest {
assertThat(cursor.getString(4)).isEmpty(); assertThat(cursor.getString(4)).isEmpty();
// Summary On Normalized // Summary On Normalized
assertThat(cursor.getString(5)).isEmpty(); assertThat(cursor.getString(5)).isEmpty();
// 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 // Entries - only on for list preferences
assertThat(cursor.getString(8)).isNull(); assertThat(cursor.getString(8)).isNull();
// Keywords // Keywords
@@ -646,7 +603,6 @@ public class IndexDataConverterTest {
private SearchIndexableRaw getFakeRaw(String localeStr) { private SearchIndexableRaw getFakeRaw(String localeStr) {
SearchIndexableRaw data = new SearchIndexableRaw(mContext); SearchIndexableRaw data = new SearchIndexableRaw(mContext);
data.locale = new Locale(localeStr); data.locale = new Locale(localeStr);
data.rank = rank;
data.title = title; data.title = title;
data.summaryOn = summaryOn; data.summaryOn = summaryOn;
data.summaryOff = summaryOff; data.summaryOff = summaryOff;
@@ -667,7 +623,6 @@ public class IndexDataConverterTest {
private SearchIndexableResource getFakeResource(int xml) { private SearchIndexableResource getFakeResource(int xml) {
SearchIndexableResource sir = new SearchIndexableResource(mContext); SearchIndexableResource sir = new SearchIndexableResource(mContext);
sir.rank = rank;
sir.xmlResId = xml; sir.xmlResId = xml;
sir.className = className; sir.className = className;
sir.packageName = packageName; sir.packageName = packageName;

View File

@@ -41,17 +41,16 @@ public class IndexDataTest {
private IndexData.Builder mBuilder; private IndexData.Builder mBuilder;
private static final String LOCALE = "locale"; private static final String LOCALE = "locale";
private static final String UPDATED_TITLE = "updated title"; private static final String TITLE = "updated-title";
private static final String NORMALIZED_TITLE = "normal title"; private static final String NORM_TITLE = "updatedtitle";
private static final String UPDATED_SUMMARY_ON = "updated summary on"; private static final String SUMMARY_ON = "updated-summary-on";
private static final String NORMALIZED_SUMMARY_ON = "normalized summary on"; private static final String NORM_SUMMARY_ON = "updatedsummaryon";
private static final String UPDATED_SUMMARY_OFF = "updated summary off"; private static final String SUMMARY_OFF = "updated-summary-off";
private static final String NORMALIZED_SUMMARY_OFF = "normalized summary off"; private static final String NORM_SUMMARY_OFF = "updatedsummaryoff";
private static final String ENTRIES = "entries"; private static final String ENTRIES = "entries";
private static final String CLASS_NAME = "class name"; private static final String CLASS_NAME = "class name";
private static final String SCREEN_TITLE = "screen title"; private static final String SCREEN_TITLE = "screen title";
private static final int ICON_RES_ID = 0xff; private static final int ICON_RES_ID = 0xff;
private static final int RANK = 1;
private static final String SPACE_DELIMITED_KEYWORDS = "keywords"; private static final String SPACE_DELIMITED_KEYWORDS = "keywords";
private static final String INTENT_ACTION = "intent action"; private static final String INTENT_ACTION = "intent action";
private static final String INTENT_TARGET_PACKAGE = "target package"; private static final String INTENT_TARGET_PACKAGE = "target package";
@@ -79,17 +78,14 @@ public class IndexDataTest {
IndexData row = generateRow(); IndexData row = generateRow();
assertThat(row.locale).isEqualTo(LOCALE); assertThat(row.locale).isEqualTo(LOCALE);
assertThat(row.updatedTitle).isEqualTo(UPDATED_TITLE); assertThat(row.updatedTitle).isEqualTo(TITLE);
assertThat(row.normalizedTitle).isEqualTo(NORMALIZED_TITLE); assertThat(row.normalizedTitle).isEqualTo(NORM_TITLE);
assertThat(row.updatedSummaryOn).isEqualTo(UPDATED_SUMMARY_ON); assertThat(row.updatedSummaryOn).isEqualTo(SUMMARY_ON);
assertThat(row.normalizedSummaryOn).isEqualTo(NORMALIZED_SUMMARY_ON); assertThat(row.normalizedSummaryOn).isEqualTo(NORM_SUMMARY_ON);
assertThat(row.updatedSummaryOff).isEqualTo(UPDATED_SUMMARY_OFF);
assertThat(row.normalizedSummaryOff).isEqualTo(NORMALIZED_SUMMARY_OFF);
assertThat(row.entries).isEqualTo(ENTRIES); assertThat(row.entries).isEqualTo(ENTRIES);
assertThat(row.className).isEqualTo(CLASS_NAME); assertThat(row.className).isEqualTo(CLASS_NAME);
assertThat(row.screenTitle).isEqualTo(SCREEN_TITLE); assertThat(row.screenTitle).isEqualTo(SCREEN_TITLE);
assertThat(row.iconResId).isEqualTo(ICON_RES_ID); assertThat(row.iconResId).isEqualTo(ICON_RES_ID);
assertThat(row.rank).isEqualTo(RANK);
assertThat(row.spaceDelimitedKeywords).isEqualTo(SPACE_DELIMITED_KEYWORDS); assertThat(row.spaceDelimitedKeywords).isEqualTo(SPACE_DELIMITED_KEYWORDS);
assertThat(row.intentAction).isEqualTo(INTENT_ACTION); assertThat(row.intentAction).isEqualTo(INTENT_ACTION);
assertThat(row.intentTargetClass).isEqualTo(INTENT_TARGET_CLASS); assertThat(row.intentTargetClass).isEqualTo(INTENT_TARGET_CLASS);
@@ -153,18 +149,13 @@ public class IndexDataTest {
private IndexData.Builder createBuilder() { private IndexData.Builder createBuilder() {
mBuilder = new IndexData.Builder(); mBuilder = new IndexData.Builder();
mBuilder.setLocale(LOCALE) mBuilder.setLocale(LOCALE)
.setUpdatedTitle(UPDATED_TITLE) .setTitle(TITLE)
.setNormalizedTitle(NORMALIZED_TITLE) .setSummaryOn(SUMMARY_ON)
.setUpdatedSummaryOn(UPDATED_SUMMARY_ON)
.setNormalizedSummaryOn(NORMALIZED_SUMMARY_ON)
.setUpdatedSummaryOff(UPDATED_SUMMARY_OFF)
.setNormalizedSummaryOff(NORMALIZED_SUMMARY_OFF)
.setEntries(ENTRIES) .setEntries(ENTRIES)
.setClassName(CLASS_NAME) .setClassName(CLASS_NAME)
.setScreenTitle(SCREEN_TITLE) .setScreenTitle(SCREEN_TITLE)
.setIconResId(ICON_RES_ID) .setIconResId(ICON_RES_ID)
.setRank(RANK) .setKeywords(SPACE_DELIMITED_KEYWORDS)
.setSpaceDelimitedKeywords(SPACE_DELIMITED_KEYWORDS)
.setIntentAction(INTENT_ACTION) .setIntentAction(INTENT_ACTION)
.setIntentTargetPackage(INTENT_TARGET_PACKAGE) .setIntentTargetPackage(INTENT_TARGET_PACKAGE)
.setIntentTargetClass(INTENT_TARGET_CLASS) .setIntentTargetClass(INTENT_TARGET_CLASS)