1 /*
2  * Copyright (C) 2023 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 
17 package com.android.settings.testutils.shadow;
18 
19 import static android.os.Build.VERSION_CODES.JELLY_BEAN_MR1;
20 
21 import android.content.ContentResolver;
22 import android.provider.Settings;
23 
24 import org.robolectric.annotation.Implementation;
25 import org.robolectric.annotation.Implements;
26 import org.robolectric.annotation.Resetter;
27 import org.robolectric.shadows.ShadowSettings;
28 
29 import java.util.HashMap;
30 import java.util.Map;
31 import java.util.WeakHashMap;
32 
33 @Implements(value = Settings.System.class)
34 public class ShadowSystemSettings extends ShadowSettings.ShadowSystem {
35     private static final Map<ContentResolver, Map<String, String>> sDataMap = new WeakHashMap<>();
36 
37     @Resetter
reset()38     public static void reset() {
39         sDataMap.clear();
40     }
41 
42     @Implementation(minSdk = JELLY_BEAN_MR1)
putStringForUser(ContentResolver cr, String name, String value, int userHandle)43     protected static boolean putStringForUser(ContentResolver cr, String name, String value,
44             int userHandle) {
45         return putString(cr, name, value);
46     }
47 
48     @Implementation(minSdk = JELLY_BEAN_MR1)
getStringForUser(ContentResolver cr, String name, int userHandle)49     protected static String getStringForUser(ContentResolver cr, String name, int userHandle) {
50         return getString(cr, name);
51     }
52 
53     @Implementation
putString(ContentResolver cr, String name, String value)54     protected static boolean putString(ContentResolver cr, String name, String value) {
55         get(cr).put(name, value);
56         return true;
57     }
58 
59     @Implementation
getString(ContentResolver cr, String name)60     protected static String getString(ContentResolver cr, String name) {
61         return get(cr).get(name);
62     }
63 
get(ContentResolver cr)64     private static Map<String, String> get(ContentResolver cr) {
65         Map<String, String> map = sDataMap.get(cr);
66         if (map == null) {
67             map = new HashMap<>();
68             sDataMap.put(cr, map);
69         }
70         return map;
71     }
72 }
73