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

Commit 82c7fdb1 authored by Deepanshu Gupta's avatar Deepanshu Gupta
Browse files

Replace Locale.getDefault with custom impl.

In LayoutLib the default locale should always be the locale set the
rendering params. This change replaces all calls to Locale.getDefault in
the framework with calls to AndroidLocale.getDefault() which tries to
find the locale from the current context, but falls back to the original
call.

Change-Id: I496b35dcfc17fd61fedee21c7495541ab870b1fc
parent 0437cac7
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.layoutlib.bridge.android;

import com.android.layoutlib.bridge.impl.RenderAction;

import android.icu.util.ULocale;

import java.util.Locale;
@@ -56,4 +58,15 @@ public class AndroidLocale {
    public static String getScript(Locale locale) {
        return ULocale.forLocale(locale).getScript();
    }

    public static Locale getDefault() {
        BridgeContext context = RenderAction.getCurrentContext();
        if (context != null) {
            Locale locale = context.getConfiguration().locale;
            if (locale != null) {
                return locale;
            }
        }
        return Locale.getDefault();
    }
}
+3 −0
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import android.view.ViewConfiguration_Accessor;
import android.view.inputmethod.InputMethodManager;
import android.view.inputmethod.InputMethodManager_Accessor;

import java.util.Locale;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;

@@ -397,6 +398,8 @@ public abstract class RenderAction<T extends RenderParams> extends FrameworkReso
            // preview releases of API 15.
            // TODO: Remove the try catch around Oct 2015.
        }
        String locale = getParams().getLocale();
        if (locale != null && !locale.isEmpty()) config.locale = new Locale(locale);

        // TODO: fill in more config info.

+6 −2
Original line number Diff line number Diff line
@@ -93,18 +93,22 @@ public class ReplaceMethodCallsAdapter extends ClassVisitor {
            }
        });

        // Case 3: java.util.Locale.adjustLanguageCode() or java.util.Locale.forLanguageTag()
        // Case 3: java.util.Locale.adjustLanguageCode() or java.util.Locale.forLanguageTag() or
        // java.util.Locale.getDefault()
        METHOD_REPLACERS.add(new MethodReplacer() {

            private final String STRING_TO_STRING = Type.getMethodDescriptor(STRING, STRING);
            private final String STRING_TO_LOCALE = Type.getMethodDescriptor(
                    Type.getType(Locale.class), STRING);
            private final String VOID_TO_LOCALE =
                    Type.getMethodDescriptor(Type.getType(Locale.class));

            @Override
            public boolean isNeeded(String owner, String name, String desc, String sourceClass) {
                return JAVA_LOCALE_CLASS.equals(owner) &&
                        ("adjustLanguageCode".equals(name) && desc.equals(STRING_TO_STRING) ||
                        "forLanguageTag".equals(name) && desc.equals(STRING_TO_LOCALE));
                        "forLanguageTag".equals(name) && desc.equals(STRING_TO_LOCALE) ||
                        "getDefault".equals(name) && desc.equals(VOID_TO_LOCALE));
            }

            @Override