mirror of
https://gitlab.futo.org/keyboard/latinime.git
synced 2024-09-28 14:54:30 +01:00
Fix a concurrency bug.
This probably only ever happens in tests, but still, that's the right thing to do. Bug: 10139031 Change-Id: I259be9e7306162e19faf738a093a77762f2e7675
This commit is contained in:
parent
f0a7f70cf6
commit
10d66669c7
@ -27,12 +27,14 @@ import com.android.inputmethod.latin.AudioAndHapticFeedbackManager;
|
|||||||
import com.android.inputmethod.latin.InputAttributes;
|
import com.android.inputmethod.latin.InputAttributes;
|
||||||
import com.android.inputmethod.latin.R;
|
import com.android.inputmethod.latin.R;
|
||||||
import com.android.inputmethod.latin.utils.AdditionalSubtypeUtils;
|
import com.android.inputmethod.latin.utils.AdditionalSubtypeUtils;
|
||||||
|
import com.android.inputmethod.latin.utils.DebugLogUtils;
|
||||||
import com.android.inputmethod.latin.utils.LocaleUtils;
|
import com.android.inputmethod.latin.utils.LocaleUtils;
|
||||||
import com.android.inputmethod.latin.utils.ResourceUtils;
|
import com.android.inputmethod.latin.utils.ResourceUtils;
|
||||||
import com.android.inputmethod.latin.utils.RunInLocale;
|
import com.android.inputmethod.latin.utils.RunInLocale;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
import java.util.concurrent.locks.ReentrantLock;
|
||||||
|
|
||||||
public final class Settings implements SharedPreferences.OnSharedPreferenceChangeListener {
|
public final class Settings implements SharedPreferences.OnSharedPreferenceChangeListener {
|
||||||
private static final String TAG = Settings.class.getSimpleName();
|
private static final String TAG = Settings.class.getSimpleName();
|
||||||
@ -94,6 +96,7 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
|
|||||||
private Resources mRes;
|
private Resources mRes;
|
||||||
private SharedPreferences mPrefs;
|
private SharedPreferences mPrefs;
|
||||||
private SettingsValues mSettingsValues;
|
private SettingsValues mSettingsValues;
|
||||||
|
private final ReentrantLock mSettingsValuesLock = new ReentrantLock();
|
||||||
|
|
||||||
private static final Settings sInstance = new Settings();
|
private static final Settings sInstance = new Settings();
|
||||||
|
|
||||||
@ -121,6 +124,8 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSharedPreferenceChanged(final SharedPreferences prefs, final String key) {
|
public void onSharedPreferenceChanged(final SharedPreferences prefs, final String key) {
|
||||||
|
mSettingsValuesLock.lock();
|
||||||
|
try {
|
||||||
if (mSettingsValues == null) {
|
if (mSettingsValues == null) {
|
||||||
// TODO: Introduce a static function to register this class and ensure that
|
// TODO: Introduce a static function to register this class and ensure that
|
||||||
// loadSettings must be called before "onSharedPreferenceChanged" is called.
|
// loadSettings must be called before "onSharedPreferenceChanged" is called.
|
||||||
@ -128,9 +133,14 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
loadSettings(mSettingsValues.mLocale, mSettingsValues.mInputAttributes);
|
loadSettings(mSettingsValues.mLocale, mSettingsValues.mInputAttributes);
|
||||||
|
} finally {
|
||||||
|
mSettingsValuesLock.unlock();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void loadSettings(final Locale locale, final InputAttributes inputAttributes) {
|
public void loadSettings(final Locale locale, final InputAttributes inputAttributes) {
|
||||||
|
mSettingsValuesLock.lock();
|
||||||
|
try {
|
||||||
final SharedPreferences prefs = mPrefs;
|
final SharedPreferences prefs = mPrefs;
|
||||||
final RunInLocale<SettingsValues> job = new RunInLocale<SettingsValues>() {
|
final RunInLocale<SettingsValues> job = new RunInLocale<SettingsValues>() {
|
||||||
@Override
|
@Override
|
||||||
@ -139,6 +149,9 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
mSettingsValues = job.runInLocale(mRes, locale);
|
mSettingsValues = job.runInLocale(mRes, locale);
|
||||||
|
} finally {
|
||||||
|
mSettingsValuesLock.unlock();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Remove this method and add proxy method to SettingsValues.
|
// TODO: Remove this method and add proxy method to SettingsValues.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user