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

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

Support Turkish keyboard (DO NOT MERGE)

Basically this change is back port from Master I1ae2c4ff.

Bug: 4435347
Change-Id: Ide1a46bbf5584d8783bb93bbe64328f514c6ab79
parent f5e20452
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