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

Commit ec622ced authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka Committed by android-merger
Browse files

Support Turkish keyboard (DO NOT MERGE)

Basically this change is back port from Master I1ae2c4ff.

Bug: 4435347
Change-Id: Ide1a46bbf5584d8783bb93bbe64328f514c6ab79
parent e5e9bc0e
Loading
Loading
Loading
Loading
+9 −9
Original line number Diff line number Diff line
@@ -18,14 +18,14 @@
*/
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <string name="alternates_for_a">àáâãäåæ</string>
    <string name="alternates_for_e">3èéêë</string>
    <string name="alternates_for_i">ìíîï8</string>
    <string name="alternates_for_o">öòóôõœø9</string>
    <string name="alternates_for_u">üùúû7</string>
    <string name="alternates_for_s">ş§ß</string>
    <string name="alternates_for_n">ñ</string>
    <string name="alternates_for_c">ç</string>
    <string name="alternates_for_y">ýÿ6</string>
    <string name="alternates_for_a">â</string>
    <string name="alternates_for_e">3</string>
    <string name="alternates_for_i">īįíìïîı8</string>
    <string name="alternates_for_o">ōøõóòœôö9</string>
    <string name="alternates_for_u">ūúùûü7</string>
    <string name="alternates_for_s">śşßš</string>
    <string name="alternates_for_n"></string>
    <string name="alternates_for_c">čćç</string>
    <string name="alternates_for_y">6</string>
    <string name="alternates_for_g">ğ</string>
</resources>
 No newline at end of file
+13 −11
Original line number Diff line number Diff line
@@ -16,11 +16,6 @@

package com.android.inputmethod.latin;

import java.text.Collator;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Locale;

import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.res.Configuration;
@@ -32,13 +27,19 @@ import android.preference.PreferenceGroup;
import android.preference.PreferenceManager;
import android.text.TextUtils;

import java.text.Collator;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Locale;

public class InputLanguageSelection extends PreferenceActivity {

    private String mSelectedLanguages;
    private ArrayList<Loc> mAvailableLanguages = new ArrayList<Loc>();

    private static final String[] WHITELIST_LANGUAGES = {
        "cs", "da", "de", "en_GB", "en_US", "es", "es_US", "fr", "it", "nb", "nl", "pl", "pt", "ru"
        "cs", "da", "de", "en_GB", "en_US", "es", "es_US", "fr", "it", "nb", "nl", "pl", "pt",
        "ru", "tr",
    };

    private static boolean isWhitelisted(String lang) {
@@ -84,7 +85,7 @@ public class InputLanguageSelection extends PreferenceActivity {
        for (int i = 0; i < mAvailableLanguages.size(); i++) {
            CheckBoxPreference pref = new CheckBoxPreference(this);
            Locale locale = mAvailableLanguages.get(i).locale;
            pref.setTitle(LanguageSwitcher.toTitleCase(locale.getDisplayName(locale)));
            pref.setTitle(LanguageSwitcher.toTitleCase(locale.getDisplayName(locale), locale));
            boolean checked = isLocaleIn(locale, languageList);
            pref.setChecked(checked);
            if (hasDictionary(locale)) {
@@ -184,7 +185,7 @@ public class InputLanguageSelection extends PreferenceActivity {

            if (finalSize == 0) {
                preprocess[finalSize++] =
                        new Loc(LanguageSwitcher.toTitleCase(l.getDisplayName(l)), l);
                        new Loc(LanguageSwitcher.toTitleCase(l.getDisplayName(l), l), l);
            } else {
                // check previous entry:
                //  same lang and a country -> upgrade to full name and
@@ -193,14 +194,15 @@ public class InputLanguageSelection extends PreferenceActivity {
                if (preprocess[finalSize-1].locale.getLanguage().equals(
                        language)) {
                    preprocess[finalSize-1].label = LanguageSwitcher.toTitleCase(
                            preprocess[finalSize-1].locale.getDisplayName());
                            preprocess[finalSize-1].locale.getDisplayName(),
                            preprocess[finalSize-1].locale);
                    preprocess[finalSize++] =
                            new Loc(LanguageSwitcher.toTitleCase(l.getDisplayName()), l);
                            new Loc(LanguageSwitcher.toTitleCase(l.getDisplayName(), l), l);
                } else {
                    String displayName;
                    if (s.equals("zz_ZZ")) {
                    } else {
                        displayName = LanguageSwitcher.toTitleCase(l.getDisplayName(l));
                        displayName = LanguageSwitcher.toTitleCase(l.getDisplayName(l), l);
                        preprocess[finalSize++] = new Loc(displayName, l);
                    }
                }
+4 −4
Original line number Diff line number Diff line
@@ -16,13 +16,13 @@

package com.android.inputmethod.latin;

import java.util.Locale;

import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.preference.PreferenceManager;
import android.text.TextUtils;

import java.util.Locale;

/**
 * Keeps track of list of selected input languages and the current
 * input language that the user has selected.
@@ -191,11 +191,11 @@ public class LanguageSwitcher {
        SharedPreferencesCompat.apply(editor);
    }

    static String toTitleCase(String s) {
    static String toTitleCase(String s, Locale locale) {
        if (s.length() == 0) {
            return s;
        }

        return Character.toUpperCase(s.charAt(0)) + s.substring(1);
        return s.toUpperCase(locale).charAt(0) + s.substring(1);
    }
}
+20 −16
Original line number Diff line number Diff line
@@ -16,13 +16,6 @@

package com.android.inputmethod.latin;

import com.android.inputmethod.latin.LatinIMEUtil.RingCharBuffer;
import com.android.inputmethod.voice.FieldContext;
import com.android.inputmethod.voice.SettingsUtil;
import com.android.inputmethod.voice.VoiceInput;

import org.xmlpull.v1.XmlPullParserException;

import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -65,6 +58,13 @@ import android.view.inputmethod.InputConnection;
import android.view.inputmethod.InputMethodManager;
import android.widget.LinearLayout;

import com.android.inputmethod.latin.LatinIMEUtil.RingCharBuffer;
import com.android.inputmethod.voice.FieldContext;
import com.android.inputmethod.voice.SettingsUtil;
import com.android.inputmethod.voice.VoiceInput;

import org.xmlpull.v1.XmlPullParserException;

import java.io.FileDescriptor;
import java.io.IOException;
import java.io.PrintWriter;
@@ -1413,13 +1413,15 @@ public class LatinIME extends InputMethodService
            }
            primaryCode = keyCodes[0];
            if (mKeyboardSwitcher.isAlphabetMode() && Character.isLowerCase(primaryCode)) {
                int upperCaseCode = Character.toUpperCase(primaryCode);
                if (upperCaseCode != primaryCode) {
                    primaryCode = upperCaseCode;
                // In some locales, such as Turkish, Character.toUpperCase() may return a wrong
                // character because it doesn't take care of locale.
                final String upperCaseString = new String(new int[] {primaryCode}, 0, 1)
                        .toUpperCase(mLanguageSwitcher.getInputLocale());
                if (upperCaseString.codePointCount(0, upperCaseString.length()) == 1) {
                    primaryCode = upperCaseString.codePointAt(0);
                } else {
                    // Some keys, such as [eszett], have upper case as multi-characters.
                    String upperCase = new String(new int[] {primaryCode}, 0, 1).toUpperCase();
                    onText(upperCase);
                    onText(upperCaseString);
                    return;
                }
            }
@@ -1983,13 +1985,14 @@ public class LatinIME extends InputMethodService
     *            word.
     */
    private void pickSuggestion(CharSequence suggestion, boolean correcting) {
        LatinKeyboardView inputView = mKeyboardSwitcher.getInputView();
        final LatinKeyboardView inputView = mKeyboardSwitcher.getInputView();
        final Locale inputLocale = mLanguageSwitcher.getInputLocale();
        if (mCapsLock) {
            suggestion = suggestion.toString().toUpperCase();
            suggestion = suggestion.toString().toUpperCase(inputLocale);
        } else if (preferCapitalization()
                || (mKeyboardSwitcher.isAlphabetMode()
                        && inputView.isShifted())) {
            suggestion = suggestion.toString().toUpperCase().charAt(0)
            suggestion = suggestion.toString().toUpperCase(inputLocale).charAt(0)
                    + suggestion.subSequence(1, suggestion.length()).toString();
        }
        InputConnection ic = getCurrentInputConnection();
@@ -2026,9 +2029,10 @@ public class LatinIME extends InputMethodService
            // If the first letter of touching is capitalized, make all the suggestions
            // start with a capital letter.
            if (Character.isUpperCase(touching.word.charAt(0))) {
                final Locale inputLocale = mLanguageSwitcher.getInputLocale();
                for (int i = 0; i < suggestions.size(); i++) {
                    String origSugg = (String) suggestions.get(i);
                    String capsSugg = origSugg.toUpperCase().charAt(0)
                    String capsSugg = origSugg.toUpperCase(inputLocale).charAt(0)
                            + origSugg.subSequence(1, origSugg.length()).toString();
                    suggestions.set(i, capsSugg);
                }
+7 −3
Original line number Diff line number Diff line
@@ -513,7 +513,7 @@ public class LatinKeyboard extends Keyboard {
        final Rect bounds = new Rect();

        // Estimate appropriate language name text size to fit in maxTextWidth.
        String language = LanguageSwitcher.toTitleCase(locale.getDisplayLanguage(locale));
        String language = LanguageSwitcher.toTitleCase(locale.getDisplayLanguage(locale), locale);
        int textWidth = getTextWidth(paint, language, origTextSize, bounds);
        // Assuming text width and text size are proportional to each other.
        float textSize = origTextSize * Math.min(maxTextWidth / textWidth, 1.0f);
@@ -529,7 +529,7 @@ public class LatinKeyboard extends Keyboard {
            textSize = origTextSize;
        }
        if (useShortName) {
            language = LanguageSwitcher.toTitleCase(locale.getLanguage());
            language = LanguageSwitcher.toTitleCase(locale.getLanguage(), locale);
            textWidth = getTextWidth(paint, language, origTextSize, bounds);
            textSize = origTextSize * Math.min(maxTextWidth / textWidth, 1.0f);
        }
@@ -646,6 +646,10 @@ public class LatinKeyboard extends Keyboard {
        setColorOfSymbolIcons(isAutoCompletion, isBlackSym);
    }

    public Locale getInputLocale() {
        return (mLocale != null) ? mLocale : mLanguageSwitcher.getSystemLocale();
    }

    boolean isCurrentlyInSpace() {
        return mCurrentlyInSpace;
    }
@@ -955,7 +959,7 @@ public class LatinKeyboard extends Keyboard {
        }

        private String getLanguageName(Locale locale) {
            return LanguageSwitcher.toTitleCase(locale.getDisplayLanguage(locale));
            return LanguageSwitcher.toTitleCase(locale.getDisplayLanguage(locale), locale);
        }

        @Override
Loading