Search in sources :

Example 1 with ULocale

use of android.icu.util.ULocale in project platform_frameworks_base by android.

the class LocaleHelper method getDisplayName.

/**
     * Returns the locale localized for display in the provided locale.
     *
     * @param locale the locale whose name is to be displayed.
     * @param displayLocale the locale in which to display the name.
     * @param sentenceCase true if the result should be sentence-cased
     * @return the localized name of the locale.
     */
public static String getDisplayName(Locale locale, Locale displayLocale, boolean sentenceCase) {
    final ULocale displayULocale = ULocale.forLocale(displayLocale);
    String result = shouldUseDialectName(locale) ? ULocale.getDisplayNameWithDialect(locale.toLanguageTag(), displayULocale) : ULocale.getDisplayName(locale.toLanguageTag(), displayULocale);
    return sentenceCase ? toSentenceCase(result, displayLocale) : result;
}
Also used : ULocale(android.icu.util.ULocale)

Example 2 with ULocale

use of android.icu.util.ULocale in project android_frameworks_base by ResurrectionRemix.

the class LocaleHelper method getDisplayName.

/**
     * Returns the locale localized for display in the provided locale.
     *
     * @param locale the locale whose name is to be displayed.
     * @param displayLocale the locale in which to display the name.
     * @param sentenceCase true if the result should be sentence-cased
     * @return the localized name of the locale.
     */
public static String getDisplayName(Locale locale, Locale displayLocale, boolean sentenceCase) {
    final ULocale displayULocale = ULocale.forLocale(displayLocale);
    String result = shouldUseDialectName(locale) ? ULocale.getDisplayNameWithDialect(locale.toLanguageTag(), displayULocale) : ULocale.getDisplayName(locale.toLanguageTag(), displayULocale);
    return sentenceCase ? toSentenceCase(result, displayLocale) : result;
}
Also used : ULocale(android.icu.util.ULocale)

Example 3 with ULocale

use of android.icu.util.ULocale in project android_frameworks_base by ResurrectionRemix.

the class StaticLayout_Delegate method nComputeLineBreaks.

@LayoutlibDelegate
static /*package*/
int nComputeLineBreaks(long nativeBuilder, LineBreaks recycle, int[] recycleBreaks, float[] recycleWidths, int[] recycleFlags, int recycleLength) {
    Builder builder = sBuilderManager.getDelegate(nativeBuilder);
    if (builder == null) {
        return 0;
    }
    // compute all possible breakpoints.
    int length = builder.mWidths.length;
    BreakIterator it = BreakIterator.getLineInstance(new ULocale(builder.mLocale));
    it.setText(new Segment(builder.mText, 0, length));
    // average word length in english is 5. So, initialize the possible breaks with a guess.
    List<Integer> breaks = new ArrayList<Integer>((int) Math.ceil(length / 5d));
    int loc;
    it.first();
    while ((loc = it.next()) != BreakIterator.DONE) {
        breaks.add(loc);
    }
    List<Primitive> primitives = computePrimitives(builder.mText, builder.mWidths, length, breaks);
    switch(builder.mBreakStrategy) {
        case Layout.BREAK_STRATEGY_SIMPLE:
            builder.mLineBreaker = new GreedyLineBreaker(primitives, builder.mLineWidth, builder.mTabStopCalculator);
            break;
        case Layout.BREAK_STRATEGY_HIGH_QUALITY:
        //                break;
        case Layout.BREAK_STRATEGY_BALANCED:
            builder.mLineBreaker = new OptimizingLineBreaker(primitives, builder.mLineWidth, builder.mTabStopCalculator);
            break;
        default:
            throw new AssertionError("Unknown break strategy: " + builder.mBreakStrategy);
    }
    builder.mLineBreaker.computeBreaks(recycle);
    return recycle.breaks.length;
}
Also used : ULocale(android.icu.util.ULocale) ArrayList(java.util.ArrayList) Paint(android.graphics.Paint) Segment(javax.swing.text.Segment) BreakIterator(android.icu.text.BreakIterator) LayoutlibDelegate(com.android.tools.layoutlib.annotations.LayoutlibDelegate)

Example 4 with ULocale

use of android.icu.util.ULocale in project android_frameworks_base by ResurrectionRemix.

the class LocaleUtils method calculateMatchingScore.

/**
     * Calculates a matching score for the desired locale list.
     *
     * <p>The supported locale gets a matching score of 3 if all language, script and country of the
     * supported locale matches with the desired locale.  The supported locale gets a matching
     * score of 2 if the language and script of the supported locale matches with the desired
     * locale. The supported locale gets a matching score of 1 if only language of the supported
     * locale matches with the desired locale.  The supported locale gets a matching score of 0 if
     * the language of the supported locale doesn't match with the desired locale.</p>
     *
     * @param supported The locale supported by IME subtyle.
     * @param desired The locale list preferred by user. Typically system locale list.
     * @param out The output buffer to be stored the individual score for the desired language list.
     * The length of {@code out} must be same as the length of {@code desired} language list.
     * @return {@code false} if supported locale doesn't match with any desired locale list.
     * Otherwise {@code true}.
     */
private static boolean calculateMatchingScore(@NonNull final ULocale supported, @NonNull final LocaleList desired, @NonNull byte[] out) {
    if (desired.isEmpty()) {
        return false;
    }
    boolean allZeros = true;
    final int N = desired.size();
    for (int i = 0; i < N; ++i) {
        final Locale locale = desired.get(i);
        if (!locale.getLanguage().equals(supported.getLanguage())) {
            // TODO: cache the result of addLikelySubtags if it is slow.
            out[i] = 0;
        } else {
            out[i] = calculateMatchingSubScore(supported, ULocale.addLikelySubtags(ULocale.forLocale(locale)));
            if (allZeros && out[i] != 0) {
                allZeros = false;
            }
        }
    }
    return !allZeros;
}
Also used : Locale(java.util.Locale) ULocale(android.icu.util.ULocale)

Example 5 with ULocale

use of android.icu.util.ULocale in project android_frameworks_base by ResurrectionRemix.

the class LocaleUtils method filterByLanguage.

/**
     * Filters the given items based on language preferences.
     *
     * <p>For each language found in {@code preferredLanguages}, this method tries to copy at most
     * one best-match item from {@code source} to {@code dest}.  For example, if
     * {@code "en-GB", "ja", "en-AU", "fr-CA", "en-IN"} is specified to {@code preferredLanguages},
     * this method tries to copy at most one English locale, at most one Japanese, and at most one
     * French locale from {@code source} to {@code dest}.  Here the best matching English locale
     * will be searched from {@code source} based on matching score. For the score design, see
     * {@link LocaleUtils#calculateMatchingScore(ULocale, LocaleList, byte[])}</p>
     *
     * @param sources Source items to be filtered.
     * @param extractor Type converter from the source items to {@link Locale} object.
     * @param preferredLanguages Ordered list of locales with which the input items will be
     * filtered.
     * @param dest Destination into which the filtered items will be added.
     * @param <T> Type of the data items.
     */
@VisibleForTesting
public static <T> void filterByLanguage(@NonNull List<T> sources, @NonNull LocaleExtractor<T> extractor, @NonNull LocaleList preferredLanguages, @NonNull ArrayList<T> dest) {
    final HashMap<String, ScoreEntry> scoreboard = new HashMap<>();
    final byte[] score = new byte[preferredLanguages.size()];
    final int sourceSize = sources.size();
    for (int i = 0; i < sourceSize; ++i) {
        final Locale locale = extractor.get(sources.get(i));
        if (locale == null || !calculateMatchingScore(ULocale.addLikelySubtags(ULocale.forLocale(locale)), preferredLanguages, score)) {
            continue;
        }
        final String lang = locale.getLanguage();
        final ScoreEntry bestScore = scoreboard.get(lang);
        if (bestScore == null) {
            scoreboard.put(lang, new ScoreEntry(score, i));
        } else {
            bestScore.updateIfBetter(score, i);
        }
    }
    final ScoreEntry[] result = scoreboard.values().toArray(new ScoreEntry[scoreboard.size()]);
    Arrays.sort(result);
    for (final ScoreEntry entry : result) {
        dest.add(sources.get(entry.mIndex));
    }
}
Also used : Locale(java.util.Locale) ULocale(android.icu.util.ULocale) HashMap(java.util.HashMap) VisibleForTesting(com.android.internal.annotations.VisibleForTesting)

Aggregations

ULocale (android.icu.util.ULocale)25 Locale (java.util.Locale)10 Paint (android.graphics.Paint)5 BreakIterator (android.icu.text.BreakIterator)5 DecimalFormatSymbols (android.icu.text.DecimalFormatSymbols)5 VisibleForTesting (com.android.internal.annotations.VisibleForTesting)5 LayoutlibDelegate (com.android.tools.layoutlib.annotations.LayoutlibDelegate)5 ArrayList (java.util.ArrayList)5 HashMap (java.util.HashMap)5 Segment (javax.swing.text.Segment)5