Merge "Search in Settings for Japanese"

This commit is contained in:
TreeHugger Robot
2017-10-27 03:31:46 +00:00
committed by Android (Google) Code Review
4 changed files with 50 additions and 11 deletions

View File

@@ -24,8 +24,11 @@ import android.util.Log;
import com.android.settings.dashboard.SiteMapManager;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.indexing.IndexData;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import java.util.Locale;
/**
* FeatureProvider for the refactored search code.
*/
@@ -130,6 +133,9 @@ public class SearchFeatureProviderImpl implements SearchFeatureProvider {
if (TextUtils.isEmpty(query)) {
return null;
}
if (Locale.getDefault().equals(Locale.JAPAN)) {
query = IndexData.normalizeJapaneseString(query);
}
return query.trim();
}
}

View File

@@ -29,6 +29,7 @@ import com.android.settings.search.ResultPayloadUtils;
import com.android.settings.search.SearchIndexableResources;
import java.text.Normalizer;
import java.util.Locale;
import java.util.Objects;
import java.util.regex.Pattern;
@@ -69,9 +70,15 @@ public class IndexData {
private IndexData(Builder builder) {
locale = builder.mLocale;
updatedTitle = normalizeHyphen(builder.mTitle);
normalizedTitle = normalizeString(builder.mTitle);
updatedSummaryOn = normalizeHyphen(builder.mSummaryOn);
normalizedSummaryOn = normalizeString(builder.mSummaryOn);
if (Locale.JAPAN.toString().equalsIgnoreCase(locale)) {
// Special case for JP. Convert charset to the same type for indexing purpose.
normalizedTitle = normalizeJapaneseString(builder.mTitle);
normalizedSummaryOn = normalizeJapaneseString(builder.mSummaryOn);
} else {
normalizedTitle = normalizeString(builder.mTitle);
normalizedSummaryOn = normalizeString(builder.mSummaryOn);
}
entries = builder.mEntries;
className = builder.mClassName;
childClassName = builder.mChildClassName;
@@ -133,6 +140,24 @@ public class IndexData {
return REMOVE_DIACRITICALS_PATTERN.matcher(normalized).replaceAll("").toLowerCase();
}
public static String normalizeJapaneseString(String input) {
final String nohyphen = (input != null) ? input.replaceAll(HYPHEN, EMPTY) : EMPTY;
final String normalized = Normalizer.normalize(nohyphen, Normalizer.Form.NFKD);
final StringBuffer sb = new StringBuffer();
final int length = normalized.length();
for (int i = 0; i < length; i++) {
char c = normalized.charAt(i);
// Convert Hiragana to full-width Katakana
if (c >= '\u3041' && c <= '\u3096') {
sb.append((char) (c - '\u3041' + '\u30A1'));
} else {
sb.append(c);
}
}
return REMOVE_DIACRITICALS_PATTERN.matcher(sb.toString()).replaceAll("").toLowerCase();
}
public static class Builder {
private String mLocale;
private String mTitle;
@@ -273,8 +298,8 @@ public class IndexData {
|| TextUtils.equals(mIntentTargetPackage,
SearchIndexableResources.SUBSETTING_TARGET_PACKAGE)) {
// Action is null, we will launch it as a sub-setting
intent = DatabaseIndexingUtils.buildSearchResultPageIntent(context, mClassName, mKey,
mScreenTitle);
intent = DatabaseIndexingUtils.buildSearchResultPageIntent(context, mClassName,
mKey, mScreenTitle);
} else {
intent = new Intent(mIntentAction);
final String targetClass = mIntentTargetClass;