1/*
2 * Copyright (C) 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.os;
18
19import com.android.layoutlib.bridge.Bridge;
20import com.android.layoutlib.bridge.impl.DelegateManager;
21import com.android.tools.layoutlib.annotations.LayoutlibDelegate;
22
23import java.util.Map;
24
25/**
26 * Delegate implementing the native methods of android.os.SystemProperties
27 *
28 * Through the layoutlib_create tool, the original native methods of SystemProperties have been
29 * replaced by calls to methods of the same name in this delegate class.
30 *
31 * Because it's a stateless class to start with, there's no need to keep a {@link DelegateManager}
32 * around to map int to instance of the delegate.
33 */
34public class SystemProperties_Delegate {
35
36    @LayoutlibDelegate
37    /*package*/ static String native_get(String key) {
38        return native_get(key, "");
39    }
40
41    @LayoutlibDelegate
42    /*package*/ static String native_get(String key, String def) {
43        Map<String, String> properties = Bridge.getPlatformProperties();
44        String value = properties.get(key);
45        if (value != null) {
46            return value;
47        }
48
49        return def;
50    }
51    @LayoutlibDelegate
52    /*package*/ static int native_get_int(String key, int def) {
53        Map<String, String> properties = Bridge.getPlatformProperties();
54        String value = properties.get(key);
55        if (value != null) {
56            return Integer.decode(value);
57        }
58
59        return def;
60    }
61
62    @LayoutlibDelegate
63    /*package*/ static long native_get_long(String key, long def) {
64        Map<String, String> properties = Bridge.getPlatformProperties();
65        String value = properties.get(key);
66        if (value != null) {
67            return Long.decode(value);
68        }
69
70        return def;
71    }
72
73    /**
74     * Values 'n', 'no', '0', 'false' or 'off' are considered false.
75     * Values 'y', 'yes', '1', 'true' or 'on' are considered true.
76     */
77    @LayoutlibDelegate
78    /*package*/ static boolean native_get_boolean(String key, boolean def) {
79        Map<String, String> properties = Bridge.getPlatformProperties();
80        String value = properties.get(key);
81
82        if ("n".equals(value) || "no".equals(value) || "0".equals(value) || "false".equals(value)
83                || "off".equals(value)) {
84            return false;
85        }
86        //noinspection SimplifiableIfStatement
87        if ("y".equals(value) || "yes".equals(value) || "1".equals(value) || "true".equals(value)
88                || "on".equals(value)) {
89            return true;
90        }
91
92        return def;
93    }
94
95    @LayoutlibDelegate
96    /*package*/ static void native_set(String key, String def) {
97        Map<String, String> properties = Bridge.getPlatformProperties();
98        properties.put(key, def);
99    }
100
101    @LayoutlibDelegate
102    /*package*/ static void native_add_change_callback() {
103        // pass.
104    }
105}
106