1 /* 2 * Copyright (C) 2011 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5 * use this file except in compliance with the License. You may obtain a copy of 6 * the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 * License for the specific language governing permissions and limitations under 14 * the License. 15 */ 16 17 package com.android.inputmethod.deprecated; 18 19 import com.android.inputmethod.compat.InputMethodManagerCompatWrapper; 20 import com.android.inputmethod.deprecated.languageswitcher.LanguageSwitcher; 21 import com.android.inputmethod.latin.LatinIME; 22 import com.android.inputmethod.latin.Settings; 23 24 import android.content.SharedPreferences; 25 import android.content.res.Configuration; 26 27 import java.util.Locale; 28 29 // This class is used only when the IME doesn't use method.xml for language switching. 30 public class LanguageSwitcherProxy implements SharedPreferences.OnSharedPreferenceChangeListener { 31 private static final LanguageSwitcherProxy sInstance = new LanguageSwitcherProxy(); 32 private LatinIME mService; 33 private LanguageSwitcher mLanguageSwitcher; 34 private SharedPreferences mPrefs; 35 getInstance()36 public static LanguageSwitcherProxy getInstance() { 37 if (InputMethodManagerCompatWrapper.SUBTYPE_SUPPORTED) return null; 38 return sInstance; 39 } 40 init(LatinIME service, SharedPreferences prefs)41 public static void init(LatinIME service, SharedPreferences prefs) { 42 if (InputMethodManagerCompatWrapper.SUBTYPE_SUPPORTED) return; 43 final Configuration conf = service.getResources().getConfiguration(); 44 sInstance.mLanguageSwitcher = new LanguageSwitcher(service); 45 sInstance.mLanguageSwitcher.loadLocales(prefs, conf.locale); 46 sInstance.mPrefs = prefs; 47 sInstance.mService = service; 48 prefs.registerOnSharedPreferenceChangeListener(sInstance); 49 } 50 onConfigurationChanged(Configuration conf)51 public static void onConfigurationChanged(Configuration conf) { 52 if (InputMethodManagerCompatWrapper.SUBTYPE_SUPPORTED) return; 53 sInstance.mLanguageSwitcher.onConfigurationChanged(conf, sInstance.mPrefs); 54 } 55 loadSettings()56 public static void loadSettings() { 57 if (InputMethodManagerCompatWrapper.SUBTYPE_SUPPORTED) return; 58 sInstance.mLanguageSwitcher.loadLocales(sInstance.mPrefs, null); 59 } 60 getLocaleCount()61 public int getLocaleCount() { 62 return mLanguageSwitcher.getLocaleCount(); 63 } 64 getEnabledLanguages(boolean allowImplicitlySelectedLanguages)65 public String[] getEnabledLanguages(boolean allowImplicitlySelectedLanguages) { 66 return mLanguageSwitcher.getEnabledLanguages(allowImplicitlySelectedLanguages); 67 } 68 getInputLocale()69 public Locale getInputLocale() { 70 return mLanguageSwitcher.getInputLocale(); 71 } 72 setLocale(String localeStr)73 public void setLocale(String localeStr) { 74 mLanguageSwitcher.setLocale(localeStr); 75 mLanguageSwitcher.persist(mPrefs); 76 } 77 78 @Override onSharedPreferenceChanged(SharedPreferences prefs, String key)79 public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { 80 // PREF_SELECTED_LANGUAGES: enabled input subtypes 81 // PREF_INPUT_LANGUAGE: current input subtype 82 if (key.equals(Settings.PREF_SELECTED_LANGUAGES) 83 || key.equals(Settings.PREF_INPUT_LANGUAGE)) { 84 mLanguageSwitcher.loadLocales(prefs, null); 85 if (mService != null) { 86 mService.onRefreshKeyboard(); 87 } 88 } 89 } 90 } 91