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

Commit 505c675c authored by Deepanshu Gupta's avatar Deepanshu Gupta
Browse files

Fix SystemProperties in LayoutLib.

Not all System Properties were used via Build class. Also, properties
like SDK_INT which called SystemProperties directly were not initialized
properly.

This change is essentially cherry picking of the relevant parts from the
following commits:
984749bf75c9ce9d3401b8410ea7d6276544b6ee
167bc25bceea9280bbe4858db4cb8233f86ce325

Bug: http://b.android.com/73046
Change-Id: Ia0fb467ee6d5fdedda500d57d02be20006f115df
parent 5af7324a
Loading
Loading
Loading
Loading
+106 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2011 The Android Open Source Project
 * Copyright (C) 2014 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.
@@ -17,32 +17,90 @@
package android.os;

import com.android.layoutlib.bridge.Bridge;
import com.android.layoutlib.bridge.impl.DelegateManager;
import com.android.tools.layoutlib.annotations.LayoutlibDelegate;

import java.util.Map;

/**
 * Delegate implementing the native methods of android.os.Build
 * Delegate implementing the native methods of android.os.SystemProperties.
 *
 * Through the layoutlib_create tool, the original native methods of Build have been replaced
 * by calls to methods of the same name in this delegate class.
 * Through the layoutlib_create tool, the original native methods of SystemProperties have been
 * replaced by calls to methods of the same name in this delegate class.
 *
 * Because it's a stateless class to start with, there's no need to keep a {@link DelegateManager}
 * Because it's a stateless class to start with, there's no need to keep a {@code DelegateManager}
 * around to map int to instance of the delegate.
 *
 */
public class Build_Delegate {
public class SystemProperties_Delegate {

    @LayoutlibDelegate
    /*package*/ static String getString(String property) {
    /*package*/ static String native_get(String key) {
        return native_get(key, null);
    }

    @LayoutlibDelegate
    /*package*/ static String native_get(String key, String def) {
        Map<String, String> properties = Bridge.getPlatformProperties();
        String value = properties.get(property);
        String value = properties.get(key);
        if (value != null) {
            return value;
        }

        return Build.UNKNOWN;
        return def;
    }

    @LayoutlibDelegate
    /*package*/ static int native_get_int(String key, int def) {
        Map<String, String> properties = Bridge.getPlatformProperties();
        String value = properties.get(key);
        if (value != null) {
            return Integer.decode(value);
        }

        return def;
    }

    @LayoutlibDelegate
    /*package*/ static long native_get_long(String key, long def) {
        Map<String, String> properties = Bridge.getPlatformProperties();
        String value = properties.get(key);
        if (value != null) {
            return Long.decode(value);
        }

        return def;
    }

    /**
     * Values 'n', 'no', '0', 'false' or 'off' are considered false.
     * Values 'y', 'yes', '1', 'true' or 'on' are considered true.
     */
    @LayoutlibDelegate
    /*package*/ static boolean native_get_boolean(String key, boolean def) {
        Map<String, String> properties = Bridge.getPlatformProperties();
        String value = properties.get(key);

        if ("n".equals(value) || "no".equals(value) || "0".equals(value) || "false".equals(value)
                || "off".equals(value)) {
            return false;
        }
        //noinspection SimplifiableIfStatement
        if ("y".equals(value) || "yes".equals(value) || "1".equals(value) || "true".equals(value)
                || "on".equals(value)) {
            return true;
        }

        return def;
    }

    @LayoutlibDelegate
    /*package*/ static void native_set(String key, String def) {
        Map<String, String> properties = Bridge.getPlatformProperties();
        properties.put(key, def);
    }

    @LayoutlibDelegate
    /*package*/ static void native_add_change_callback() {
        // pass.
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -132,7 +132,6 @@ public final class CreateInfo implements ICreateInfo {
        "android.graphics.BitmapFactory#finishDecode",
        "android.os.Handler#sendMessageAtTime",
        "android.os.HandlerThread#run",
        "android.os.Build#getString",
        "android.view.Display#getWindowManager",
        "android.view.LayoutInflater#rInflate",
        "android.view.LayoutInflater#parseInclude",
@@ -188,6 +187,7 @@ public final class CreateInfo implements ICreateInfo {
        "android.graphics.Typeface",
        "android.graphics.Xfermode",
        "android.os.SystemClock",
        "android.os.SystemProperties",
        "android.text.AndroidBidi",
        "android.text.format.Time",
        "android.util.FloatMath",