mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-26 14:22:01 +00:00
Bug 1352343 - Bind LocaleService to react to OSPreferences intl:system-locales-changed
. r=jfkthame
MozReview-Commit-ID: Hnhun0bAVSr --HG-- extra : rebase_source : 4aa553251bde30797de84bd72ef872891d44d1a3
This commit is contained in:
parent
7d1e1adec8
commit
e6913c46a1
@ -19,6 +19,8 @@
|
||||
|
||||
#include "unicode/uloc.h"
|
||||
|
||||
#define INTL_SYSTEM_LOCALES_CHANGED "intl:system-locales-changed"
|
||||
|
||||
#define MATCH_OS_LOCALE_PREF "intl.locale.matchOS"
|
||||
#define SELECTED_LOCALE_PREF "general.useragent.locale"
|
||||
|
||||
@ -175,6 +177,11 @@ LocaleService::GetInstance()
|
||||
// from prefs.
|
||||
DebugOnly<nsresult> rv = Preferences::AddWeakObservers(sInstance, kObservedPrefs);
|
||||
MOZ_ASSERT(NS_SUCCEEDED(rv), "Adding observers failed.");
|
||||
|
||||
nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
|
||||
if (obs) {
|
||||
obs->AddObserver(sInstance, INTL_SYSTEM_LOCALES_CHANGED, false);
|
||||
}
|
||||
}
|
||||
ClearOnShutdown(&sInstance);
|
||||
}
|
||||
@ -185,6 +192,11 @@ LocaleService::~LocaleService()
|
||||
{
|
||||
if (mIsServer) {
|
||||
Preferences::RemoveObservers(this, kObservedPrefs);
|
||||
|
||||
nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
|
||||
if (obs) {
|
||||
obs->RemoveObserver(static_cast<nsIObserver*>(this), INTL_SYSTEM_LOCALES_CHANGED);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -519,19 +531,24 @@ LocaleService::Observe(nsISupports *aSubject, const char *aTopic,
|
||||
{
|
||||
MOZ_ASSERT(mIsServer, "This should only be called in the server mode.");
|
||||
|
||||
NS_ConvertUTF16toUTF8 pref(aData);
|
||||
|
||||
// This is a temporary solution until we get bug 1337078 landed.
|
||||
if (pref.EqualsLiteral(ANDROID_OS_LOCALE_PREF)) {
|
||||
OSPreferences::GetInstance()->Refresh();
|
||||
}
|
||||
// At the moment the only thing we're observing are settings indicating
|
||||
// user requested locales.
|
||||
if (pref.EqualsLiteral(MATCH_OS_LOCALE_PREF) ||
|
||||
pref.EqualsLiteral(SELECTED_LOCALE_PREF) ||
|
||||
pref.EqualsLiteral(ANDROID_OS_LOCALE_PREF)) {
|
||||
if (!strcmp(aTopic, INTL_SYSTEM_LOCALES_CHANGED)) {
|
||||
OnRequestedLocalesChanged();
|
||||
} else {
|
||||
NS_ConvertUTF16toUTF8 pref(aData);
|
||||
|
||||
// This is a temporary solution until we get bug 1337078 landed.
|
||||
if (pref.EqualsLiteral(ANDROID_OS_LOCALE_PREF)) {
|
||||
OSPreferences::GetInstance()->Refresh();
|
||||
}
|
||||
// At the moment the only thing we're observing are settings indicating
|
||||
// user requested locales.
|
||||
if (pref.EqualsLiteral(MATCH_OS_LOCALE_PREF) ||
|
||||
pref.EqualsLiteral(SELECTED_LOCALE_PREF) ||
|
||||
pref.EqualsLiteral(ANDROID_OS_LOCALE_PREF)) {
|
||||
OnRequestedLocalesChanged();
|
||||
}
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user