1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)package org.chromium.ui.base; 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)import android.content.res.Configuration; 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)import android.view.View; 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)import org.chromium.base.ApiCompatibilityUtils; 11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)import org.chromium.base.ApplicationStatus; 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)import org.chromium.base.CalledByNative; 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)import org.chromium.base.JNINamespace; 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport org.chromium.base.LocaleUtils; 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)import java.util.Locale; 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * This class provides the locale related methods for the native library. 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)@JNINamespace("l10n_util") 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)public class LocalizationUtils { 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // This is mirrored from base/i18n/rtl.h. Please keep in sync. 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public static final int UNKNOWN_DIRECTION = 0; 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public static final int RIGHT_TO_LEFT = 1; 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public static final int LEFT_TO_RIGHT = 2; 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) private static Boolean sIsLayoutRtl; 30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private LocalizationUtils() { /* cannot be instantiated */ } 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @return the default locale, translating Android deprecated 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * language codes into the modern ones used by Chromium. 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @CalledByNative 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public static String getDefaultLocale() { 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(vivekg): Native callers should use LocaleUtils directly instead of the redirection. 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return LocaleUtils.getDefaultLocale(); 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @CalledByNative 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private static Locale getJavaLocale(String language, String country, String variant) { 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return new Locale(language, country, variant); 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @CalledByNative 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private static String getDisplayNameForLocale(Locale locale, Locale displayLocale) { 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return locale.getDisplayName(displayLocale); 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * Returns whether the Android layout direction is RTL. 55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * 56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * Note that the locale direction can be different from layout direction. Two known cases: 57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * - RTL languages on Android 4.1, due to the lack of RTL layout support on 4.1. 58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * - When user turned on force RTL layout option under developer options. 59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * 60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * Therefore, only this function should be used to query RTL for layout purposes. 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) @CalledByNative 63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public static boolean isLayoutRtl() { 64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (sIsLayoutRtl == null) { 65a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Configuration configuration = 66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ApplicationStatus.getApplicationContext().getResources().getConfiguration(); 67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) sIsLayoutRtl = Boolean.valueOf( 68a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ApiCompatibilityUtils.getLayoutDirection(configuration) == 69a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) View.LAYOUT_DIRECTION_RTL); 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return sIsLayoutRtl.booleanValue(); 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Jni binding to base::i18n::GetFirstStrongCharacterDirection 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param string String to decide the direction. 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @return One of the UNKNOWN_DIRECTION, RIGHT_TO_LEFT, and LEFT_TO_RIGHT. 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public static int getFirstStrongCharacterDirection(String string) { 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return nativeGetFirstStrongCharacterDirection(string); 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) /** 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Jni binding to ui::TimeFormat::TimeRemaining. Converts milliseconds to 86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * time remaining format : "3 mins left", "2 days left". 87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @param timeInMillis time in milliseconds 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @return time remaining 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */ 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public static String getDurationString(long timeInMillis) { 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return nativeGetDurationString(timeInMillis); 92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private static native int nativeGetFirstStrongCharacterDirection(String string); 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private static native String nativeGetDurationString(long timeInMillis); 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 98