blob: 5a544ced1f969bb886dc0dfe8d867b4b90088f7e [file] [log] [blame]
/*
* 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.
*
* <p><b>Note:</b> {@link android.view.inputmethod.EditorInfo#hintLocales} is just a hint for
* the input method. IME developers can decide how to use it.</p>
*
* @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);
}
}