* commit '39e4f590787246ce35b995c0c0ce37b676a05e0c': Fall back to "tl" if "fil" is absent.
This commit is contained in:
@ -347,6 +347,15 @@ void AssetManager::setLocale(const char* locale)
|
|||||||
setLocaleLocked(locale);
|
setLocaleLocked(locale);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static const char kFilPrefix[] = "fil";
|
||||||
|
static const char kTlPrefix[] = "tl";
|
||||||
|
|
||||||
|
// The sizes of the prefixes, excluding the 0 suffix.
|
||||||
|
// char.
|
||||||
|
static const int kFilPrefixLen = sizeof(kFilPrefix) - 1;
|
||||||
|
static const int kTlPrefixLen = sizeof(kTlPrefix) - 1;
|
||||||
|
|
||||||
void AssetManager::setLocaleLocked(const char* locale)
|
void AssetManager::setLocaleLocked(const char* locale)
|
||||||
{
|
{
|
||||||
if (mLocale != NULL) {
|
if (mLocale != NULL) {
|
||||||
@ -355,8 +364,44 @@ void AssetManager::setLocaleLocked(const char* locale)
|
|||||||
//mZipSet.purgeLocale();
|
//mZipSet.purgeLocale();
|
||||||
delete[] mLocale;
|
delete[] mLocale;
|
||||||
}
|
}
|
||||||
mLocale = strdupNew(locale);
|
|
||||||
|
|
||||||
|
|
||||||
|
// If we're attempting to set a locale that starts with "fil",
|
||||||
|
// we should convert it to "tl" for backwards compatibility since
|
||||||
|
// we've been using "tl" instead of "fil" prior to L.
|
||||||
|
//
|
||||||
|
// If the resource table already has entries for "fil", we use that
|
||||||
|
// instead of attempting a fallback.
|
||||||
|
if (strncmp(locale, kFilPrefix, kFilPrefixLen) == 0) {
|
||||||
|
Vector<String8> locales;
|
||||||
|
getLocales(&locales);
|
||||||
|
const size_t localesSize = locales.size();
|
||||||
|
bool hasFil = false;
|
||||||
|
for (size_t i = 0; i < localesSize; ++i) {
|
||||||
|
if (locales[i].find(kFilPrefix) == 0) {
|
||||||
|
hasFil = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (!hasFil) {
|
||||||
|
const size_t newLocaleLen = strlen(locale);
|
||||||
|
// This isn't a bug. We really do want mLocale to be 1 byte
|
||||||
|
// shorter than locale, because we're replacing "fil-" with
|
||||||
|
// "tl-".
|
||||||
|
mLocale = new char[newLocaleLen];
|
||||||
|
// Copy over "tl".
|
||||||
|
memcpy(mLocale, kTlPrefix, kTlPrefixLen);
|
||||||
|
// Copy the rest of |locale|, including the terminating '\0'.
|
||||||
|
memcpy(mLocale + kTlPrefixLen, locale + kFilPrefixLen,
|
||||||
|
newLocaleLen - kFilPrefixLen + 1);
|
||||||
|
updateResourceParamsLocked();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mLocale = strdupNew(locale);
|
||||||
updateResourceParamsLocked();
|
updateResourceParamsLocked();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -741,6 +786,16 @@ void AssetManager::getLocales(Vector<String8>* locales) const
|
|||||||
if (res != NULL) {
|
if (res != NULL) {
|
||||||
res->getLocales(locales);
|
res->getLocales(locales);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const size_t numLocales = locales->size();
|
||||||
|
for (size_t i = 0; i < numLocales; ++i) {
|
||||||
|
const String8& localeStr = locales->itemAt(i);
|
||||||
|
if (localeStr.find(kTlPrefix) == 0) {
|
||||||
|
String8 replaced("fil");
|
||||||
|
replaced += (localeStr.string() + kTlPrefixLen);
|
||||||
|
locales->editItemAt(i) = replaced;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user