/* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.example.android.apis.inputmethod; import android.app.Activity; import android.os.Bundle; import android.os.LocaleList; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; import static android.widget.LinearLayout.VERTICAL; /** * Provide some {@link EditText} with specifying * {@link android.view.inputmethod.EditorInfo#hintLocales} so that IME developers can test their * IMEs. */ public class HintLocales extends Activity { /** * Creates a new instance of {@link EditText} that is configured to specify the given * {@link LocaleList} to {@link android.view.inputmethod.EditorInfo#hintLocales} so that * developers can locally test how the current input method behaves for the given hint locales. * *
Note: {@link android.view.inputmethod.EditorInfo#hintLocales} is just a hint for * the input method. IME developers can decide how to use it.
* * @return A new instance of {@link EditText}, which specifies * {@link android.view.inputmethod.EditorInfo#hintLocales} with the given {@link LocaleList}. * @param hintLocales an ordered list of locales to be specified to * {@link android.view.inputmethod.EditorInfo#hintLocales}. * @see android.view.inputmethod.EditorInfo#hintLocales * @see TextView#setImeHintLocales(LocaleList) * @see LocaleList */ @NonNull private EditText createEditTextWithImeHintLocales(@Nullable LocaleList hintLocales) { final EditText exitText = new EditText(this); if (hintLocales == null) { exitText.setHint("EditorInfo#hintLocales: (null)"); } else { exitText.setHint("EditorInfo#hintLocales: " + hintLocales.toLanguageTags()); } // Both null and non-null locale list are supported. exitText.setImeHintLocales(hintLocales); return exitText; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final LinearLayout layout = new LinearLayout(this); layout.setOrientation(VERTICAL); // Test EditorInfo#hintLocales = null. This is the default behavior and should be the same // to the behavior in Android M and prior. layout.addView(createEditTextWithImeHintLocales(null)); // This gives a hint that the application is confident that the user wants to input text // for "en-US" in this text field. Note that IME developers can decide how to use this // hint. layout.addView(createEditTextWithImeHintLocales(LocaleList.forLanguageTags("en-US"))); // Likewise, this gives a hint as a list of locales in the order of likelihood. layout.addView(createEditTextWithImeHintLocales( LocaleList.forLanguageTags("en-GB,en-US,en"))); // Being able to support 3-letter language code correctly is really important. layout.addView(createEditTextWithImeHintLocales(LocaleList.forLanguageTags("fil-ph"))); // Likewise, test some more locales. layout.addView(createEditTextWithImeHintLocales(LocaleList.forLanguageTags("fr"))); layout.addView(createEditTextWithImeHintLocales(LocaleList.forLanguageTags("zh_CN"))); layout.addView(createEditTextWithImeHintLocales(LocaleList.forLanguageTags("ja"))); // Test more complex BCP 47 language tag. Here the subtag starts with "x-" is a private-use // subtags. layout.addView(createEditTextWithImeHintLocales( LocaleList.forLanguageTags("ryu-Kana-JP-x-android"))); setContentView(layout); } }