Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ff0735ad authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka
Browse files

Make Settings class singleton to manage SettingsValues

Change-Id: Id30828a141de86d9bcf8bce586d2adb468cc59e1
parent 8873b5ae
Loading
Loading
Loading
Loading
+83 −90

File changed.

Preview size limit exceeded, changes collapsed.

+61 −1
Original line number Diff line number Diff line
@@ -16,7 +16,16 @@

package com.android.inputmethod.latin;

public final class Settings {
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.preference.PreferenceManager;

import com.android.inputmethod.latin.LocaleUtils.RunInLocale;

import java.util.Locale;

public final class Settings implements SharedPreferences.OnSharedPreferenceChangeListener {
    // In the same order as xml/prefs.xml
    public static final String PREF_GENERAL_SETTINGS = "general_settings";
    public static final String PREF_AUTO_CAP = "auto_cap";
@@ -56,4 +65,55 @@ public final class Settings {
    public static final String PREF_INPUT_LANGUAGE = "input_language";
    public static final String PREF_SELECTED_LANGUAGES = "selected_languages";
    public static final String PREF_DEBUG_SETTINGS = "debug_settings";

    private Resources mRes;
    private SharedPreferences mPrefs;
    private Locale mCurrentLocale;
    private SettingsValues mSettingsValues;

    private static final Settings sInstance = new Settings();

    public static Settings getInstance() {
        return sInstance;
    }

    public static void init(final Context context) {
        sInstance.onCreate(context);
    }

    private Settings() {
        // Intentional empty constructor for singleton.
    }

    private void onCreate(final Context context) {
        mRes = context.getResources();
        mPrefs = PreferenceManager.getDefaultSharedPreferences(context);
        mPrefs.registerOnSharedPreferenceChangeListener(this);
    }

    public void onDestroy() {
        mPrefs.unregisterOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onSharedPreferenceChanged(final SharedPreferences prefs, final String key) {
        loadSettings(mCurrentLocale, mSettingsValues.mInputAttributes);
    }

    public void loadSettings(final Locale locale, final InputAttributes inputAttributes) {
        mCurrentLocale = locale;
        final SharedPreferences prefs = mPrefs;
        final RunInLocale<SettingsValues> job = new RunInLocale<SettingsValues>() {
            @Override
            protected SettingsValues job(final Resources res) {
                return new SettingsValues(prefs, res, inputAttributes);
            }
        };
        mSettingsValues = job.runInLocale(mRes, locale);
    }

    // TODO: Remove this method and add proxy method to SettingsValues.
    public SettingsValues getCurrent() {
        return mSettingsValues;
    }
}
+2 −6
Original line number Diff line number Diff line
@@ -82,7 +82,7 @@ public final class SettingsValues {
    public final boolean mGestureFloatingPreviewTextEnabled;

    // From the input box
    private final InputAttributes mInputAttributes;
    public final InputAttributes mInputAttributes;

    // Deduced settings
    public final int mKeypressVibrationDuration;
@@ -269,6 +269,7 @@ public final class SettingsValues {
        return !currentAutoCorrectionSetting.equals(autoCorrectionOff);
    }

    // TODO: Clean up and move public helper methods to Settings class.
    // Public to access from KeyboardSwitcher. Should it have access to some
    // process-global instance instead?
    public static boolean isKeyPreviewPopupEnabled(final SharedPreferences prefs,
@@ -419,9 +420,4 @@ public final class SettingsValues {
    public boolean isSameInputType(final EditorInfo editorInfo) {
        return mInputAttributes.isSameInputType(editorInfo);
    }

    // For debug.
    public String getInputAttributesDebugString() {
        return mInputAttributes.toString();
    }
}