Merge "Refactor IndexData conversion flow"
This commit is contained in:
committed by
Android (Google) Code Review
commit
bcc3b924f9
@@ -28,7 +28,8 @@ import static com.android.settings.search.IndexDatabaseHelper.IndexColumns.DATA_
|
|||||||
import static com.android.settings.search.IndexDatabaseHelper.IndexColumns.DATA_KEYWORDS;
|
import static com.android.settings.search.IndexDatabaseHelper.IndexColumns.DATA_KEYWORDS;
|
||||||
import static com.android.settings.search.IndexDatabaseHelper.IndexColumns.DATA_KEY_REF;
|
import static com.android.settings.search.IndexDatabaseHelper.IndexColumns.DATA_KEY_REF;
|
||||||
import static com.android.settings.search.IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON;
|
import static com.android.settings.search.IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON;
|
||||||
import static com.android.settings.search.IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON_NORMALIZED;
|
import static com.android.settings.search.IndexDatabaseHelper.IndexColumns
|
||||||
|
.DATA_SUMMARY_ON_NORMALIZED;
|
||||||
import static com.android.settings.search.IndexDatabaseHelper.IndexColumns.DATA_TITLE;
|
import static com.android.settings.search.IndexDatabaseHelper.IndexColumns.DATA_TITLE;
|
||||||
import static com.android.settings.search.IndexDatabaseHelper.IndexColumns.DATA_TITLE_NORMALIZED;
|
import static com.android.settings.search.IndexDatabaseHelper.IndexColumns.DATA_TITLE_NORMALIZED;
|
||||||
import static com.android.settings.search.IndexDatabaseHelper.IndexColumns.ENABLED;
|
import static com.android.settings.search.IndexDatabaseHelper.IndexColumns.ENABLED;
|
||||||
@@ -234,9 +235,9 @@ public class DatabaseIndexingManager {
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
List<IndexData> getIndexData(String locale, PreIndexData data) {
|
List<IndexData> getIndexData(String locale, PreIndexData data) {
|
||||||
if (mConverter == null) {
|
if (mConverter == null) {
|
||||||
mConverter = new IndexDataConverter(mContext);
|
mConverter = new IndexDataConverter(mContext, locale);
|
||||||
}
|
}
|
||||||
return mConverter.convertPreIndexDataToIndexData(data, locale);
|
return mConverter.convertPreIndexDataToIndexData(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -248,6 +249,10 @@ public class DatabaseIndexingManager {
|
|||||||
ContentValues values;
|
ContentValues values;
|
||||||
|
|
||||||
for (IndexData dataRow : indexData) {
|
for (IndexData dataRow : indexData) {
|
||||||
|
if (TextUtils.isEmpty(dataRow.normalizedTitle)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
values = new ContentValues();
|
values = new ContentValues();
|
||||||
values.put(IndexDatabaseHelper.IndexColumns.DOCID, dataRow.getDocId());
|
values.put(IndexDatabaseHelper.IndexColumns.DOCID, dataRow.getDocId());
|
||||||
values.put(LOCALE, dataRow.locale);
|
values.put(LOCALE, dataRow.locale);
|
||||||
|
@@ -93,7 +93,6 @@ public class DatabaseResultLoader extends AsyncLoader<Set<? extends SearchResult
|
|||||||
* If the query matches the prefix of the other words in the title, the best rank it can be is 3
|
* If the query matches the prefix of the other words in the title, the best rank it can be is 3
|
||||||
* If the query only matches the summary, the best rank it can be is 7
|
* If the query only matches the summary, the best rank it can be is 7
|
||||||
* If the query only matches keywords or entries, the best rank it can be is 9
|
* If the query only matches keywords or entries, the best rank it can be is 9
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public static final int[] BASE_RANKS = {1, 3, 7, 9};
|
public static final int[] BASE_RANKS = {1, 3, 7, 9};
|
||||||
|
|
||||||
@@ -141,7 +140,7 @@ public class DatabaseResultLoader extends AsyncLoader<Set<? extends SearchResult
|
|||||||
* Creates and executes the query which matches prefixes of the first word of the given columns.
|
* Creates and executes the query which matches prefixes of the first word of the given columns.
|
||||||
*
|
*
|
||||||
* @param matchColumns The columns to match on
|
* @param matchColumns The columns to match on
|
||||||
* @param baseRank The highest rank achievable by these results
|
* @param baseRank The highest rank achievable by these results
|
||||||
* @return A set of the matching results.
|
* @return A set of the matching results.
|
||||||
*/
|
*/
|
||||||
private Set<SearchResult> firstWordQuery(String[] matchColumns, int baseRank) {
|
private Set<SearchResult> firstWordQuery(String[] matchColumns, int baseRank) {
|
||||||
@@ -157,7 +156,7 @@ public class DatabaseResultLoader extends AsyncLoader<Set<? extends SearchResult
|
|||||||
* given columns.
|
* given columns.
|
||||||
*
|
*
|
||||||
* @param matchColumns The columns to match on
|
* @param matchColumns The columns to match on
|
||||||
* @param baseRank The highest rank achievable by these results
|
* @param baseRank The highest rank achievable by these results
|
||||||
* @return A set of the matching results.
|
* @return A set of the matching results.
|
||||||
*/
|
*/
|
||||||
private Set<SearchResult> secondaryWordQuery(String[] matchColumns, int baseRank) {
|
private Set<SearchResult> secondaryWordQuery(String[] matchColumns, int baseRank) {
|
||||||
@@ -172,7 +171,7 @@ public class DatabaseResultLoader extends AsyncLoader<Set<? extends SearchResult
|
|||||||
* Creates and executes the query which matches prefixes of the any word of the given columns.
|
* Creates and executes the query which matches prefixes of the any word of the given columns.
|
||||||
*
|
*
|
||||||
* @param matchColumns The columns to match on
|
* @param matchColumns The columns to match on
|
||||||
* @param baseRank The highest rank achievable by these results
|
* @param baseRank The highest rank achievable by these results
|
||||||
* @return A set of the matching results.
|
* @return A set of the matching results.
|
||||||
*/
|
*/
|
||||||
private Set<SearchResult> anyWordQuery(String[] matchColumns, int baseRank) {
|
private Set<SearchResult> anyWordQuery(String[] matchColumns, int baseRank) {
|
||||||
@@ -186,8 +185,8 @@ public class DatabaseResultLoader extends AsyncLoader<Set<? extends SearchResult
|
|||||||
* Generic method used by all of the query methods above to execute a query.
|
* Generic method used by all of the query methods above to execute a query.
|
||||||
*
|
*
|
||||||
* @param whereClause Where clause for the SQL query which uses bindings.
|
* @param whereClause Where clause for the SQL query which uses bindings.
|
||||||
* @param selection List of the transformed query to match each bind in the whereClause
|
* @param selection List of the transformed query to match each bind in the whereClause
|
||||||
* @param baseRank The highest rank achievable by these results.
|
* @param baseRank The highest rank achievable by these results.
|
||||||
* @return A set of the matching results.
|
* @return A set of the matching results.
|
||||||
*/
|
*/
|
||||||
private Set<SearchResult> query(String whereClause, String[] selection, int baseRank) {
|
private Set<SearchResult> query(String whereClause, String[] selection, int baseRank) {
|
||||||
@@ -249,7 +248,7 @@ public class DatabaseResultLoader extends AsyncLoader<Set<? extends SearchResult
|
|||||||
private String[] buildSingleWordSelection(String query, int size) {
|
private String[] buildSingleWordSelection(String query, int size) {
|
||||||
String[] selection = new String[size];
|
String[] selection = new String[size];
|
||||||
|
|
||||||
for(int i = 0; i < size; i ++) {
|
for (int i = 0; i < size; i++) {
|
||||||
selection[i] = query;
|
selection[i] = query;
|
||||||
}
|
}
|
||||||
return selection;
|
return selection;
|
||||||
@@ -267,7 +266,7 @@ public class DatabaseResultLoader extends AsyncLoader<Set<? extends SearchResult
|
|||||||
final String query = mQueryText + "%";
|
final String query = mQueryText + "%";
|
||||||
final String subStringQuery = "% " + mQueryText + "%";
|
final String subStringQuery = "% " + mQueryText + "%";
|
||||||
|
|
||||||
for(int i = 0; i < (size - 1); i += 2) {
|
for (int i = 0; i < (size - 1); i += 2) {
|
||||||
selection[i] = query;
|
selection[i] = query;
|
||||||
selection[i + 1] = subStringQuery;
|
selection[i + 1] = subStringQuery;
|
||||||
}
|
}
|
||||||
|
@@ -21,6 +21,7 @@ import android.content.ComponentName;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
|
||||||
import com.android.settings.SettingsActivity;
|
import com.android.settings.SettingsActivity;
|
||||||
import com.android.settings.search.DatabaseIndexingUtils;
|
import com.android.settings.search.DatabaseIndexingUtils;
|
||||||
import com.android.settings.search.ResultPayload;
|
import com.android.settings.search.ResultPayload;
|
||||||
|
@@ -17,29 +17,31 @@
|
|||||||
|
|
||||||
package com.android.settings.search.indexing;
|
package com.android.settings.search.indexing;
|
||||||
|
|
||||||
|
import android.annotation.Nullable;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.res.XmlResourceParser;
|
import android.content.res.XmlResourceParser;
|
||||||
import android.provider.SearchIndexableData;
|
import android.provider.SearchIndexableData;
|
||||||
import android.provider.SearchIndexableResource;
|
import android.provider.SearchIndexableResource;
|
||||||
import android.support.annotation.DrawableRes;
|
import android.support.annotation.DrawableRes;
|
||||||
import android.support.annotation.VisibleForTesting;
|
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.util.Xml;
|
import android.util.Xml;
|
||||||
|
|
||||||
import com.android.settings.core.PreferenceControllerMixin;
|
import com.android.settings.core.PreferenceControllerMixin;
|
||||||
|
|
||||||
import com.android.settings.search.DatabaseIndexingUtils;
|
import com.android.settings.search.DatabaseIndexingUtils;
|
||||||
import com.android.settings.search.Indexable;
|
import com.android.settings.search.Indexable;
|
||||||
import com.android.settings.search.ResultPayload;
|
import com.android.settings.search.ResultPayload;
|
||||||
import com.android.settings.search.SearchIndexableRaw;
|
import com.android.settings.search.SearchIndexableRaw;
|
||||||
import com.android.settings.search.SearchIndexableResources;
|
|
||||||
import com.android.settings.search.XmlParserUtils;
|
import com.android.settings.search.XmlParserUtils;
|
||||||
|
|
||||||
import org.xmlpull.v1.XmlPullParser;
|
import org.xmlpull.v1.XmlPullParser;
|
||||||
import org.xmlpull.v1.XmlPullParserException;
|
import org.xmlpull.v1.XmlPullParserException;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -47,10 +49,6 @@ import java.util.Set;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper class to convert {@link PreIndexData} to {@link IndexData}.
|
* Helper class to convert {@link PreIndexData} to {@link IndexData}.
|
||||||
*
|
|
||||||
* TODO (b/33577327) This is just copied straight from DatabaseIndexingManager. But it's still ugly.
|
|
||||||
* TODO This is currently a long chain of method calls. It needs to be broken up.
|
|
||||||
* TODO but for the sake of easy code reviews, that will happen later.
|
|
||||||
*/
|
*/
|
||||||
public class IndexDataConverter {
|
public class IndexDataConverter {
|
||||||
|
|
||||||
@@ -64,70 +62,77 @@ public class IndexDataConverter {
|
|||||||
|
|
||||||
private String mLocale;
|
private String mLocale;
|
||||||
|
|
||||||
private List<IndexData> mIndexData;
|
public IndexDataConverter(Context context, String locale) {
|
||||||
|
|
||||||
public IndexDataConverter(Context context) {
|
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mLocale = Locale.getDefault().toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<IndexData> convertPreIndexDataToIndexData(PreIndexData preIndexData,
|
|
||||||
String locale) {
|
|
||||||
mLocale = locale;
|
mLocale = locale;
|
||||||
mIndexData = new ArrayList<>();
|
|
||||||
List<SearchIndexableData> dataToUpdate = preIndexData.dataToUpdate;
|
|
||||||
Map<String, Set<String>> nonIndexableKeys = preIndexData.nonIndexableKeys;
|
|
||||||
parsePreIndexData(dataToUpdate, nonIndexableKeys);
|
|
||||||
return mIndexData;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Inserts {@link SearchIndexableData} into the database.
|
* Return the collection of {@param preIndexData} converted into {@link IndexData}.
|
||||||
*
|
*
|
||||||
* @param dataToUpdate is a {@link List} of the data to be inserted.
|
* @param preIndexData a collection of {@link SearchIndexableResource},
|
||||||
* @param nonIndexableKeys is a {@link Map} from Package Name to a {@link Set} of keys which
|
* {@link SearchIndexableRaw} and non-indexable keys.
|
||||||
* identify search results which should not be surfaced.
|
|
||||||
*/
|
*/
|
||||||
private void parsePreIndexData(List<SearchIndexableData> dataToUpdate,
|
public List<IndexData> convertPreIndexDataToIndexData(PreIndexData preIndexData) {
|
||||||
Map<String, Set<String>> nonIndexableKeys) {
|
|
||||||
final long current = System.currentTimeMillis();
|
final long current = System.currentTimeMillis();
|
||||||
|
final List<SearchIndexableData> indexableData = preIndexData.dataToUpdate;
|
||||||
|
final Map<String, Set<String>> nonIndexableKeys = preIndexData.nonIndexableKeys;
|
||||||
|
final List<IndexData> indexData = new ArrayList<>();
|
||||||
|
|
||||||
|
for (SearchIndexableData data : indexableData) {
|
||||||
|
if (data instanceof SearchIndexableRaw) {
|
||||||
|
final SearchIndexableRaw rawData = (SearchIndexableRaw) data;
|
||||||
|
final Set<String> rawNonIndexableKeys = nonIndexableKeys.get(
|
||||||
|
rawData.intentTargetPackage);
|
||||||
|
final IndexData.Builder builder = convertRaw(rawData, rawNonIndexableKeys);
|
||||||
|
|
||||||
|
if (builder != null) {
|
||||||
|
indexData.add(builder.build(mContext));
|
||||||
|
}
|
||||||
|
} else if (data instanceof SearchIndexableResource) {
|
||||||
|
final SearchIndexableResource sir = (SearchIndexableResource) data;
|
||||||
|
final Set<String> resourceNonIndexableKeys =
|
||||||
|
getNonIndexableKeysForResource(nonIndexableKeys, sir.packageName);
|
||||||
|
|
||||||
|
if (sir.xmlResId == 0) {
|
||||||
|
// Index from provider
|
||||||
|
final Indexable.SearchIndexProvider provider = getSearchProvider(sir);
|
||||||
|
if (provider == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
indexData.addAll(convertIndexProvider(provider, sir, resourceNonIndexableKeys));
|
||||||
|
|
||||||
|
} else {
|
||||||
|
final List<IndexData> resourceData = convertResource(sir,
|
||||||
|
resourceNonIndexableKeys);
|
||||||
|
indexData.addAll(resourceData);
|
||||||
|
}
|
||||||
|
|
||||||
for (SearchIndexableData data : dataToUpdate) {
|
|
||||||
try {
|
|
||||||
addOneIndexData(data, nonIndexableKeys);
|
|
||||||
} catch (Exception e) {
|
|
||||||
Log.e(LOG_TAG, "Cannot index: " + (data != null ? data.className : data)
|
|
||||||
+ " for locale: " + mLocale, e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final long now = System.currentTimeMillis();
|
final long endConversion = System.currentTimeMillis();
|
||||||
Log.d(LOG_TAG, "Indexing locale '" + mLocale + "' took " +
|
Log.d(LOG_TAG, "Converting pre-index data to index data took: "
|
||||||
(now - current) + " millis");
|
+ (endConversion - current));
|
||||||
|
|
||||||
|
return indexData;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addOneIndexData(SearchIndexableData data,
|
/**
|
||||||
Map<String, Set<String>> nonIndexableKeys) {
|
* Return the conversion of {@link SearchIndexableRaw} to {@link IndexData}.
|
||||||
if (data instanceof SearchIndexableResource) {
|
* The fields of {@link SearchIndexableRaw} are a subset of {@link IndexData},
|
||||||
addOneResource((SearchIndexableResource) data, nonIndexableKeys);
|
* and there is some data sanitization in the conversion.
|
||||||
} else if (data instanceof SearchIndexableRaw) {
|
*/
|
||||||
addOneRaw((SearchIndexableRaw) data, nonIndexableKeys);
|
@Nullable
|
||||||
}
|
private IndexData.Builder convertRaw(SearchIndexableRaw raw, Set<String> nonIndexableKeys) {
|
||||||
}
|
|
||||||
|
|
||||||
private void addOneRaw(SearchIndexableRaw raw, Map<String,
|
|
||||||
Set<String>> nonIndexableKeysFromResource) {
|
|
||||||
// Should be the same locale as the one we are processing
|
// Should be the same locale as the one we are processing
|
||||||
if (!raw.locale.toString().equalsIgnoreCase(mLocale)) {
|
if (!raw.locale.toString().equalsIgnoreCase(mLocale)) {
|
||||||
return;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
Set<String> packageKeys = nonIndexableKeysFromResource.get(raw.intentTargetPackage);
|
// A row is enabled if it does not show up as an nonIndexableKey
|
||||||
boolean enabled = raw.enabled;
|
boolean enabled = !(nonIndexableKeys != null && nonIndexableKeys.contains(raw.key));
|
||||||
|
|
||||||
if (packageKeys != null && packageKeys.contains(raw.key)) {
|
|
||||||
enabled = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
IndexData.Builder builder = new IndexData.Builder();
|
IndexData.Builder builder = new IndexData.Builder();
|
||||||
builder.setTitle(raw.title)
|
builder.setTitle(raw.title)
|
||||||
@@ -145,58 +150,22 @@ public class IndexDataConverter {
|
|||||||
.setKey(raw.key)
|
.setKey(raw.key)
|
||||||
.setUserId(raw.userId);
|
.setUserId(raw.userId);
|
||||||
|
|
||||||
addRowToData(builder.build(mContext));
|
return builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addOneResource(SearchIndexableResource sir,
|
/**
|
||||||
Map<String, Set<String>> nonIndexableKeysFromResource) {
|
* Return the conversion of the {@link SearchIndexableResource} to {@link IndexData}.
|
||||||
|
* Each of the elements in the xml layout attribute of {@param sir} is a candidate to be
|
||||||
if (sir == null) {
|
* converted (including the header element).
|
||||||
Log.e(LOG_TAG, "Cannot index a null resource!");
|
*
|
||||||
return;
|
* TODO (b/33577327) simplify this method.
|
||||||
}
|
*/
|
||||||
|
private List<IndexData> convertResource(SearchIndexableResource sir,
|
||||||
final List<String> nonIndexableKeys = new ArrayList<>();
|
Set<String> nonIndexableKeys) {
|
||||||
|
|
||||||
if (sir.xmlResId > SearchIndexableResources.NO_DATA_RES_ID) {
|
|
||||||
Set<String> resNonIndexableKeys = nonIndexableKeysFromResource.get(sir.packageName);
|
|
||||||
if (resNonIndexableKeys != null && resNonIndexableKeys.size() > 0) {
|
|
||||||
nonIndexableKeys.addAll(resNonIndexableKeys);
|
|
||||||
}
|
|
||||||
|
|
||||||
addIndexDataFromResource(sir, nonIndexableKeys);
|
|
||||||
} else {
|
|
||||||
if (TextUtils.isEmpty(sir.className)) {
|
|
||||||
Log.w(LOG_TAG, "Cannot index an empty Search Provider name!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
final Class<?> clazz = DatabaseIndexingUtils.getIndexableClass(sir.className);
|
|
||||||
if (clazz == null) {
|
|
||||||
Log.d(LOG_TAG, "SearchIndexableResource '" + sir.className +
|
|
||||||
"' should implement the " + Indexable.class.getName() + " interface!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Will be non null only for a Local provider implementing a
|
|
||||||
// SEARCH_INDEX_DATA_PROVIDER field
|
|
||||||
final Indexable.SearchIndexProvider provider =
|
|
||||||
DatabaseIndexingUtils.getSearchIndexProvider(clazz);
|
|
||||||
if (provider != null) {
|
|
||||||
List<String> providerNonIndexableKeys = provider.getNonIndexableKeys(sir.context);
|
|
||||||
if (providerNonIndexableKeys != null) {
|
|
||||||
nonIndexableKeys.addAll(providerNonIndexableKeys);
|
|
||||||
}
|
|
||||||
|
|
||||||
addIndexDataFromProvider(provider, sir, nonIndexableKeys);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void addIndexDataFromResource(SearchIndexableResource sir,
|
|
||||||
List<String> nonIndexableKeys) {
|
|
||||||
final Context context = sir.context;
|
final Context context = sir.context;
|
||||||
XmlResourceParser parser = null;
|
XmlResourceParser parser = null;
|
||||||
|
|
||||||
|
List<IndexData> resourceIndexData = new ArrayList<>();
|
||||||
try {
|
try {
|
||||||
parser = context.getResources().getXml(sir.xmlResId);
|
parser = context.getResources().getXml(sir.xmlResId);
|
||||||
|
|
||||||
@@ -226,8 +195,7 @@ public class IndexDataConverter {
|
|||||||
String keywords;
|
String keywords;
|
||||||
String headerKeywords;
|
String headerKeywords;
|
||||||
String childFragment;
|
String childFragment;
|
||||||
@DrawableRes
|
@DrawableRes int iconResId;
|
||||||
int iconResId;
|
|
||||||
ResultPayload payload;
|
ResultPayload payload;
|
||||||
boolean enabled;
|
boolean enabled;
|
||||||
final String fragmentName = sir.className;
|
final String fragmentName = sir.className;
|
||||||
@@ -242,9 +210,6 @@ public class IndexDataConverter {
|
|||||||
.getPreferenceControllerUriMap(fragmentName, context);
|
.getPreferenceControllerUriMap(fragmentName, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Insert rows for the main PreferenceScreen node. Rewrite the data for removing
|
|
||||||
// hyphens.
|
|
||||||
|
|
||||||
headerTitle = XmlParserUtils.getDataTitle(context, attrs);
|
headerTitle = XmlParserUtils.getDataTitle(context, attrs);
|
||||||
headerSummary = XmlParserUtils.getDataSummary(context, attrs);
|
headerSummary = XmlParserUtils.getDataSummary(context, attrs);
|
||||||
headerKeywords = XmlParserUtils.getDataKeywords(context, attrs);
|
headerKeywords = XmlParserUtils.getDataKeywords(context, attrs);
|
||||||
@@ -319,8 +284,7 @@ public class IndexDataConverter {
|
|||||||
.setChildClassName(childFragment)
|
.setChildClassName(childFragment)
|
||||||
.setPayload(payload);
|
.setPayload(payload);
|
||||||
|
|
||||||
// Insert rows for the child nodes of PreferenceScreen
|
resourceIndexData.add(builder.build(mContext));
|
||||||
addRowToData(builder.build(mContext));
|
|
||||||
} else {
|
} else {
|
||||||
// TODO (b/33577327) We removed summary off here. We should check if we can
|
// 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
|
// merge this 'else' section with the one above. Put a break point to
|
||||||
@@ -334,13 +298,13 @@ public class IndexDataConverter {
|
|||||||
|
|
||||||
builder.setSummaryOn(summaryOn);
|
builder.setSummaryOn(summaryOn);
|
||||||
|
|
||||||
addRowToData(builder.build(mContext));
|
resourceIndexData.add(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) {
|
||||||
addRowToData(headerBuilder.build(mContext));
|
resourceIndexData.add(headerBuilder.build(mContext));
|
||||||
}
|
}
|
||||||
} catch (XmlPullParserException e) {
|
} catch (XmlPullParserException e) {
|
||||||
throw new RuntimeException("Error parsing PreferenceScreen", e);
|
throw new RuntimeException("Error parsing PreferenceScreen", e);
|
||||||
@@ -349,62 +313,44 @@ public class IndexDataConverter {
|
|||||||
} finally {
|
} finally {
|
||||||
if (parser != null) parser.close();
|
if (parser != null) parser.close();
|
||||||
}
|
}
|
||||||
|
return resourceIndexData;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addIndexDataFromProvider(Indexable.SearchIndexProvider provider,
|
private List<IndexData> convertIndexProvider(Indexable.SearchIndexProvider provider,
|
||||||
SearchIndexableResource sir, List<String> nonIndexableKeys) {
|
SearchIndexableResource sir, Set<String> nonIndexableKeys) {
|
||||||
|
final List<IndexData> indexData = new ArrayList<>();
|
||||||
|
|
||||||
final String className = sir.className;
|
final String className = sir.className;
|
||||||
final String intentAction = sir.intentAction;
|
final String intentAction = sir.intentAction;
|
||||||
final String intentTargetPackage = sir.intentTargetPackage;
|
final String intentTargetPackage = sir.intentTargetPackage;
|
||||||
|
|
||||||
if (provider == null) {
|
// TODO (b/65376542) Move provider conversion to PreIndexTime
|
||||||
Log.w(LOG_TAG, "Cannot find provider: " + className);
|
// TODO (b/37741509) Providers don't use general non-indexable keys
|
||||||
return;
|
nonIndexableKeys.addAll(provider.getNonIndexableKeys(mContext));
|
||||||
}
|
|
||||||
|
|
||||||
final List<SearchIndexableRaw> rawList = provider.getRawDataToIndex(mContext,
|
final List<SearchIndexableRaw> rawList = provider.getRawDataToIndex(mContext,
|
||||||
true /* enabled */);
|
true /* enabled */);
|
||||||
|
|
||||||
if (rawList != null) {
|
if (rawList != null) {
|
||||||
|
for (SearchIndexableRaw raw : rawList) {
|
||||||
|
// The classname and intent information comes from the PreIndexData
|
||||||
|
// This will be more clear when provider conversion is done at PreIndex time.
|
||||||
|
raw.className = className;
|
||||||
|
raw.intentAction = intentAction;
|
||||||
|
raw.intentTargetPackage = intentTargetPackage;
|
||||||
|
|
||||||
final int rawSize = rawList.size();
|
IndexData.Builder builder = convertRaw(raw, nonIndexableKeys);
|
||||||
for (int i = 0; i < rawSize; i++) {
|
if (builder != null) {
|
||||||
SearchIndexableRaw raw = rawList.get(i);
|
indexData.add(builder.build(mContext));
|
||||||
|
|
||||||
// Should be the same locale as the one we are processing
|
|
||||||
if (!raw.locale.toString().equalsIgnoreCase(mLocale)) {
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
boolean enabled = !nonIndexableKeys.contains(raw.key);
|
|
||||||
|
|
||||||
IndexData.Builder builder = new IndexData.Builder();
|
|
||||||
builder.setTitle(raw.title)
|
|
||||||
.setSummaryOn(raw.summaryOn)
|
|
||||||
.setLocale(mLocale)
|
|
||||||
.setEntries(raw.entries)
|
|
||||||
.setKeywords(raw.keywords)
|
|
||||||
.setClassName(className)
|
|
||||||
.setScreenTitle(raw.screenTitle)
|
|
||||||
.setIconResId(raw.iconResId)
|
|
||||||
.setIntentAction(raw.intentAction)
|
|
||||||
.setIntentTargetPackage(raw.intentTargetPackage)
|
|
||||||
.setIntentTargetClass(raw.intentTargetClass)
|
|
||||||
.setEnabled(enabled)
|
|
||||||
.setKey(raw.key)
|
|
||||||
.setUserId(raw.userId);
|
|
||||||
|
|
||||||
addRowToData(builder.build(mContext));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final List<SearchIndexableResource> resList =
|
final List<SearchIndexableResource> resList =
|
||||||
provider.getXmlResourcesToIndex(mContext, true);
|
provider.getXmlResourcesToIndex(mContext, true);
|
||||||
if (resList != null) {
|
|
||||||
final int resSize = resList.size();
|
|
||||||
for (int i = 0; i < resSize; i++) {
|
|
||||||
SearchIndexableResource item = resList.get(i);
|
|
||||||
|
|
||||||
|
if (resList != null) {
|
||||||
|
for (SearchIndexableResource item : resList) {
|
||||||
// Should be the same locale as the one we are processing
|
// Should be the same locale as the one we are processing
|
||||||
if (!item.locale.toString().equalsIgnoreCase(mLocale)) {
|
if (!item.locale.toString().equalsIgnoreCase(mLocale)) {
|
||||||
continue;
|
continue;
|
||||||
@@ -420,16 +366,39 @@ public class IndexDataConverter {
|
|||||||
? intentTargetPackage
|
? intentTargetPackage
|
||||||
: item.intentTargetPackage;
|
: item.intentTargetPackage;
|
||||||
|
|
||||||
addIndexDataFromResource(item, nonIndexableKeys);
|
indexData.addAll(convertResource(item, nonIndexableKeys));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return indexData;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addRowToData(IndexData row) {
|
private Set<String> getNonIndexableKeysForResource(Map<String, Set<String>> nonIndexableKeys,
|
||||||
if (TextUtils.isEmpty(row.updatedTitle)) {
|
String packageName) {
|
||||||
return;
|
return nonIndexableKeys.containsKey(packageName)
|
||||||
|
? nonIndexableKeys.get(packageName)
|
||||||
|
: new HashSet<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Return the {@link Indexable.SearchIndexProvider} corresponding to the
|
||||||
|
* class specified by the Class name specified by {@param sir}.
|
||||||
|
*/
|
||||||
|
private Indexable.SearchIndexProvider getSearchProvider(SearchIndexableResource sir) {
|
||||||
|
if (TextUtils.isEmpty(sir.className)) {
|
||||||
|
Log.w(LOG_TAG, "Cannot index an empty Search Provider name!");
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
mIndexData.add(row);
|
final Class<?> clazz = DatabaseIndexingUtils.getIndexableClass(sir.className);
|
||||||
|
if (clazz == null) {
|
||||||
|
Log.d(LOG_TAG, "SearchIndexableResource '" + sir.className +
|
||||||
|
"' should implement the " + Indexable.class.getName() + " interface!");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Will be non null only for a Local provider implementing a
|
||||||
|
// SEARCH_INDEX_DATA_PROVIDER field
|
||||||
|
return DatabaseIndexingUtils.getSearchIndexProvider(clazz);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -31,6 +31,7 @@ import android.provider.SearchIndexablesContract;
|
|||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.ArraySet;
|
import android.util.ArraySet;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.settings.search.SearchIndexableRaw;
|
import com.android.settings.search.SearchIndexableRaw;
|
||||||
import com.android.settings.search.SettingsSearchIndexablesProvider;
|
import com.android.settings.search.SettingsSearchIndexablesProvider;
|
||||||
@@ -186,7 +187,7 @@ public class PreIndexDataCollector {
|
|||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
List<String> getNonIndexablesKeysFromRemoteProvider(String packageName,
|
List<String> getNonIndexablesKeysFromRemoteProvider(String packageName,
|
||||||
String authority) {
|
String authority) {
|
||||||
try {
|
try {
|
||||||
final Context packageContext = mContext.createPackageContext(packageName, 0);
|
final Context packageContext = mContext.createPackageContext(packageName, 0);
|
||||||
|
|
||||||
|
@@ -19,12 +19,12 @@ package com.android.settings.search.indexing;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.provider.SearchIndexableResource;
|
import android.provider.SearchIndexableResource;
|
||||||
|
|
||||||
import com.android.internal.logging.nano.MetricsProto;
|
import com.android.internal.logging.nano.MetricsProto;
|
||||||
import com.android.settings.dashboard.DashboardFragment;
|
import com.android.settings.dashboard.DashboardFragment;
|
||||||
import com.android.settings.search.BaseSearchIndexProvider;
|
import com.android.settings.search.BaseSearchIndexProvider;
|
||||||
import com.android.settings.search.SearchIndexableRaw;
|
import com.android.settings.search.SearchIndexableRaw;
|
||||||
import com.android.settingslib.core.AbstractPreferenceController;
|
import com.android.settingslib.core.AbstractPreferenceController;
|
||||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -76,7 +76,8 @@ public class FakeSettingsFragment extends DashboardFragment {
|
|||||||
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
||||||
new BaseSearchIndexProvider() {
|
new BaseSearchIndexProvider() {
|
||||||
@Override
|
@Override
|
||||||
public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) {
|
public List<SearchIndexableRaw> getRawDataToIndex(Context context,
|
||||||
|
boolean enabled) {
|
||||||
final SearchIndexableRaw data = new SearchIndexableRaw(context);
|
final SearchIndexableRaw data = new SearchIndexableRaw(context);
|
||||||
data.title = TITLE;
|
data.title = TITLE;
|
||||||
data.summaryOn = SUMMARY_ON;
|
data.summaryOn = SUMMARY_ON;
|
||||||
@@ -118,7 +119,7 @@ public class FakeSettingsFragment extends DashboardFragment {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<AbstractPreferenceController>
|
public List<AbstractPreferenceController>
|
||||||
getPreferenceControllers(Context context) {
|
getPreferenceControllers(Context context) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@@ -20,6 +20,7 @@ package com.android.settings.search.indexing;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.provider.SearchIndexableResource;
|
import android.provider.SearchIndexableResource;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
|
||||||
import com.android.settings.TestConfig;
|
import com.android.settings.TestConfig;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.search.ResultPayload;
|
import com.android.settings.search.ResultPayload;
|
||||||
@@ -27,6 +28,7 @@ import com.android.settings.search.ResultPayloadUtils;
|
|||||||
import com.android.settings.search.SearchIndexableRaw;
|
import com.android.settings.search.SearchIndexableRaw;
|
||||||
import com.android.settings.testutils.DatabaseTestUtils;
|
import com.android.settings.testutils.DatabaseTestUtils;
|
||||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||||
|
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@@ -40,6 +42,7 @@ import java.util.Locale;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
|
|
||||||
@RunWith(SettingsRobolectricTestRunner.class)
|
@RunWith(SettingsRobolectricTestRunner.class)
|
||||||
@@ -97,7 +100,7 @@ public class IndexDataConverterTest {
|
|||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
mContext = spy(RuntimeEnvironment.application);
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
mConverter = spy(new IndexDataConverter(mContext));
|
mConverter = spy(new IndexDataConverter(mContext, localeStr));
|
||||||
}
|
}
|
||||||
|
|
||||||
@After
|
@After
|
||||||
@@ -110,8 +113,7 @@ public class IndexDataConverterTest {
|
|||||||
final SearchIndexableRaw raw = getFakeRaw();
|
final SearchIndexableRaw raw = getFakeRaw();
|
||||||
final PreIndexData preIndexData = new PreIndexData();
|
final PreIndexData preIndexData = new PreIndexData();
|
||||||
preIndexData.dataToUpdate.add(raw);
|
preIndexData.dataToUpdate.add(raw);
|
||||||
List<IndexData> indexData = mConverter.convertPreIndexDataToIndexData(preIndexData,
|
List<IndexData> indexData = mConverter.convertPreIndexDataToIndexData(preIndexData);
|
||||||
localeStr);
|
|
||||||
|
|
||||||
assertThat(indexData.size()).isEqualTo(1);
|
assertThat(indexData.size()).isEqualTo(1);
|
||||||
final IndexData row = indexData.get(0);
|
final IndexData row = indexData.get(0);
|
||||||
@@ -148,8 +150,7 @@ public class IndexDataConverterTest {
|
|||||||
preIndexData.dataToUpdate.add(raw);
|
preIndexData.dataToUpdate.add(raw);
|
||||||
preIndexData.nonIndexableKeys.put(raw.intentTargetPackage, keys);
|
preIndexData.nonIndexableKeys.put(raw.intentTargetPackage, keys);
|
||||||
|
|
||||||
List<IndexData> indexData = mConverter.convertPreIndexDataToIndexData(preIndexData,
|
List<IndexData> indexData = mConverter.convertPreIndexDataToIndexData(preIndexData);
|
||||||
localeStr);
|
|
||||||
|
|
||||||
assertThat(indexData.size()).isEqualTo(1);
|
assertThat(indexData.size()).isEqualTo(1);
|
||||||
assertThat(indexData.get(0).enabled).isFalse();
|
assertThat(indexData.get(0).enabled).isFalse();
|
||||||
@@ -163,8 +164,7 @@ public class IndexDataConverterTest {
|
|||||||
final SearchIndexableRaw raw = getFakeRaw("ca-fr");
|
final SearchIndexableRaw raw = getFakeRaw("ca-fr");
|
||||||
PreIndexData preIndexData = new PreIndexData();
|
PreIndexData preIndexData = new PreIndexData();
|
||||||
preIndexData.dataToUpdate.add(raw);
|
preIndexData.dataToUpdate.add(raw);
|
||||||
List<IndexData> indexData = mConverter.convertPreIndexDataToIndexData(preIndexData,
|
List<IndexData> indexData = mConverter.convertPreIndexDataToIndexData(preIndexData);
|
||||||
localeStr);
|
|
||||||
|
|
||||||
assertThat(indexData).isEmpty();
|
assertThat(indexData).isEmpty();
|
||||||
}
|
}
|
||||||
@@ -175,8 +175,7 @@ public class IndexDataConverterTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testNullResource_NothingInserted() {
|
public void testNullResource_NothingInserted() {
|
||||||
PreIndexData preIndexData = new PreIndexData();
|
PreIndexData preIndexData = new PreIndexData();
|
||||||
List<IndexData> indexData = mConverter.convertPreIndexDataToIndexData(preIndexData,
|
List<IndexData> indexData = mConverter.convertPreIndexDataToIndexData(preIndexData);
|
||||||
localeStr);
|
|
||||||
|
|
||||||
assertThat(indexData).isEmpty();
|
assertThat(indexData).isEmpty();
|
||||||
}
|
}
|
||||||
@@ -187,8 +186,7 @@ public class IndexDataConverterTest {
|
|||||||
final PreIndexData preIndexData = new PreIndexData();
|
final PreIndexData preIndexData = new PreIndexData();
|
||||||
preIndexData.dataToUpdate.add(resource);
|
preIndexData.dataToUpdate.add(resource);
|
||||||
|
|
||||||
final List<IndexData> indexData = mConverter.convertPreIndexDataToIndexData(preIndexData,
|
final List<IndexData> indexData = mConverter.convertPreIndexDataToIndexData(preIndexData);
|
||||||
localeStr);
|
|
||||||
int numEnabled = getEnabledResultCount(indexData);
|
int numEnabled = getEnabledResultCount(indexData);
|
||||||
|
|
||||||
assertThat(numEnabled).isEqualTo(NUM_DISPLAY_ENTRIES);
|
assertThat(numEnabled).isEqualTo(NUM_DISPLAY_ENTRIES);
|
||||||
@@ -205,8 +203,7 @@ public class IndexDataConverterTest {
|
|||||||
preIndexData.dataToUpdate.add(resource);
|
preIndexData.dataToUpdate.add(resource);
|
||||||
preIndexData.nonIndexableKeys.put(packageName, keys);
|
preIndexData.nonIndexableKeys.put(packageName, keys);
|
||||||
|
|
||||||
List<IndexData> indexData = mConverter.convertPreIndexDataToIndexData(preIndexData,
|
List<IndexData> indexData = mConverter.convertPreIndexDataToIndexData(preIndexData);
|
||||||
localeStr);
|
|
||||||
|
|
||||||
assertThat(indexData.size()).isEqualTo(NUM_DISPLAY_ENTRIES);
|
assertThat(indexData.size()).isEqualTo(NUM_DISPLAY_ENTRIES);
|
||||||
assertThat(getEnabledResultCount(indexData)).isEqualTo(NUM_DISPLAY_ENTRIES - 2);
|
assertThat(getEnabledResultCount(indexData)).isEqualTo(NUM_DISPLAY_ENTRIES - 2);
|
||||||
@@ -218,8 +215,7 @@ public class IndexDataConverterTest {
|
|||||||
final PreIndexData preIndexData = new PreIndexData();
|
final PreIndexData preIndexData = new PreIndexData();
|
||||||
preIndexData.dataToUpdate.add(resource);
|
preIndexData.dataToUpdate.add(resource);
|
||||||
|
|
||||||
List<IndexData> indexData = mConverter.convertPreIndexDataToIndexData(preIndexData,
|
List<IndexData> indexData = mConverter.convertPreIndexDataToIndexData(preIndexData);
|
||||||
localeStr);
|
|
||||||
|
|
||||||
final IndexData row = findIndexDataForTitle(indexData, PAGE_TITLE);
|
final IndexData row = findIndexDataForTitle(indexData, PAGE_TITLE);
|
||||||
|
|
||||||
@@ -234,8 +230,7 @@ public class IndexDataConverterTest {
|
|||||||
final PreIndexData preIndexData = new PreIndexData();
|
final PreIndexData preIndexData = new PreIndexData();
|
||||||
preIndexData.dataToUpdate.add(resource);
|
preIndexData.dataToUpdate.add(resource);
|
||||||
|
|
||||||
List<IndexData> indexData = mConverter.convertPreIndexDataToIndexData(preIndexData,
|
List<IndexData> indexData = mConverter.convertPreIndexDataToIndexData(preIndexData);
|
||||||
localeStr);
|
|
||||||
|
|
||||||
String checkBoxSummaryOn = "summary_on";
|
String checkBoxSummaryOn = "summary_on";
|
||||||
String checkBoxSummaryOff = "summary_off";
|
String checkBoxSummaryOff = "summary_off";
|
||||||
@@ -252,8 +247,7 @@ public class IndexDataConverterTest {
|
|||||||
final PreIndexData preIndexData = new PreIndexData();
|
final PreIndexData preIndexData = new PreIndexData();
|
||||||
preIndexData.dataToUpdate.add(resource);
|
preIndexData.dataToUpdate.add(resource);
|
||||||
|
|
||||||
List<IndexData> indexData = mConverter.convertPreIndexDataToIndexData(preIndexData,
|
List<IndexData> indexData = mConverter.convertPreIndexDataToIndexData(preIndexData);
|
||||||
localeStr);
|
|
||||||
|
|
||||||
String listSummary = "summary_4";
|
String listSummary = "summary_4";
|
||||||
String listKey = "pref_key_4";
|
String listKey = "pref_key_4";
|
||||||
@@ -268,8 +262,7 @@ public class IndexDataConverterTest {
|
|||||||
final PreIndexData preIndexData = new PreIndexData();
|
final PreIndexData preIndexData = new PreIndexData();
|
||||||
preIndexData.dataToUpdate.add(resource);
|
preIndexData.dataToUpdate.add(resource);
|
||||||
|
|
||||||
List<IndexData> indexData = mConverter.convertPreIndexDataToIndexData(preIndexData,
|
List<IndexData> indexData = mConverter.convertPreIndexDataToIndexData(preIndexData);
|
||||||
localeStr);
|
|
||||||
|
|
||||||
final IndexData row = findIndexDataForTitle(indexData, TITLE_THREE);
|
final IndexData row = findIndexDataForTitle(indexData, TITLE_THREE);
|
||||||
|
|
||||||
@@ -286,8 +279,7 @@ public class IndexDataConverterTest {
|
|||||||
final PreIndexData preIndexData = new PreIndexData();
|
final PreIndexData preIndexData = new PreIndexData();
|
||||||
preIndexData.dataToUpdate.add(resource);
|
preIndexData.dataToUpdate.add(resource);
|
||||||
|
|
||||||
List<IndexData> indexData = mConverter.convertPreIndexDataToIndexData(preIndexData,
|
List<IndexData> indexData = mConverter.convertPreIndexDataToIndexData(preIndexData);
|
||||||
localeStr);
|
|
||||||
|
|
||||||
assertThat(indexData.size()).isEqualTo(NUM_FAKE_FRAGMENT_ENTRIES);
|
assertThat(indexData.size()).isEqualTo(NUM_FAKE_FRAGMENT_ENTRIES);
|
||||||
assertThat(findIndexDataForTitle(indexData, PAGE_TITLE)).isNotNull();
|
assertThat(findIndexDataForTitle(indexData, PAGE_TITLE)).isNotNull();
|
||||||
@@ -306,8 +298,7 @@ public class IndexDataConverterTest {
|
|||||||
final PreIndexData preIndexData = new PreIndexData();
|
final PreIndexData preIndexData = new PreIndexData();
|
||||||
preIndexData.dataToUpdate.add(resource);
|
preIndexData.dataToUpdate.add(resource);
|
||||||
|
|
||||||
List<IndexData> indexData = mConverter.convertPreIndexDataToIndexData(preIndexData,
|
List<IndexData> indexData = mConverter.convertPreIndexDataToIndexData(preIndexData);
|
||||||
localeStr);
|
|
||||||
|
|
||||||
final IndexData data = findIndexDataForTitle(indexData, FakeSettingsFragment.TITLE);
|
final IndexData data = findIndexDataForTitle(indexData, FakeSettingsFragment.TITLE);
|
||||||
assertFakeFragment(data);
|
assertFakeFragment(data);
|
||||||
@@ -322,8 +313,7 @@ public class IndexDataConverterTest {
|
|||||||
final PreIndexData preIndexData = new PreIndexData();
|
final PreIndexData preIndexData = new PreIndexData();
|
||||||
preIndexData.dataToUpdate.add(resource);
|
preIndexData.dataToUpdate.add(resource);
|
||||||
|
|
||||||
List<IndexData> indexData = mConverter.convertPreIndexDataToIndexData(preIndexData,
|
List<IndexData> indexData = mConverter.convertPreIndexDataToIndexData(preIndexData);
|
||||||
localeStr);
|
|
||||||
|
|
||||||
assertThat(getEnabledResultCount(indexData)).isEqualTo(NUM_ENABLED_FAKE_FRAGMENT_ENTRIES);
|
assertThat(getEnabledResultCount(indexData)).isEqualTo(NUM_ENABLED_FAKE_FRAGMENT_ENTRIES);
|
||||||
}
|
}
|
||||||
@@ -334,8 +324,7 @@ public class IndexDataConverterTest {
|
|||||||
final PreIndexData preIndexData = new PreIndexData();
|
final PreIndexData preIndexData = new PreIndexData();
|
||||||
preIndexData.dataToUpdate.add(resource);
|
preIndexData.dataToUpdate.add(resource);
|
||||||
|
|
||||||
List<IndexData> indexData = mConverter.convertPreIndexDataToIndexData(preIndexData,
|
List<IndexData> indexData = mConverter.convertPreIndexDataToIndexData(preIndexData);
|
||||||
localeStr);
|
|
||||||
|
|
||||||
int numEnabled = getEnabledResultCount(indexData);
|
int numEnabled = getEnabledResultCount(indexData);
|
||||||
final IndexData nonTitlePref = findIndexDataForKey(indexData, "pref_key_1");
|
final IndexData nonTitlePref = findIndexDataForKey(indexData, "pref_key_1");
|
||||||
|
Reference in New Issue
Block a user