ConfigurationMap.java revision fbb081b7c28c18f0644701061a1ab38a4627db27
1package com.android.server.wifi;
2
3import android.net.wifi.WifiConfiguration;
4
5import java.util.ArrayList;
6import java.util.Collection;
7import java.util.HashMap;
8import java.util.Iterator;
9import java.util.List;
10import java.util.Map;
11
12public class ConfigurationMap {
13    private final Map<Integer, WifiConfiguration> mPerID = new HashMap<>();
14    private final Map<Integer, WifiConfiguration> mPerConfigKey = new HashMap<>();
15    private final Map<String, Integer> mPerFQDN = new HashMap<>();
16
17    // RW methods:
18    public WifiConfiguration put(int netid, WifiConfiguration config) {
19        WifiConfiguration current = mPerID.put(netid, config);
20        mPerConfigKey.put(config.configKey().hashCode(), config);   // This is ridiculous...
21        if (config.FQDN != null && config.FQDN.length() > 0) {
22            mPerFQDN.put(config.FQDN, netid);
23        }
24        return current;
25    }
26
27    public WifiConfiguration remove(int netID) {
28        WifiConfiguration config = mPerID.remove(netID);
29        if (config == null) {
30            return null;
31        }
32        mPerConfigKey.remove(config.configKey().hashCode());
33
34        Iterator<Map.Entry<String, Integer>> entries = mPerFQDN.entrySet().iterator();
35        while (entries.hasNext()) {
36            if (entries.next().getValue() == netID) {
37                entries.remove();
38                break;
39            }
40        }
41        return config;
42    }
43
44    public void clear() {
45        mPerID.clear();
46        mPerConfigKey.clear();
47        mPerFQDN.clear();
48    }
49
50    // RO methods:
51    public WifiConfiguration get(int netid) {
52        return mPerID.get(netid);
53    }
54
55    public int size() {
56        return mPerID.size();
57    }
58
59    public boolean isEmpty() {
60        return mPerID.size() == 0;
61    }
62
63    public WifiConfiguration getByFQDN(String fqdn) {
64        Integer id = mPerFQDN.get(fqdn);
65        return id != null ? mPerID.get(id) : null;
66    }
67
68    public WifiConfiguration getByConfigKey(String key) {
69        if (key == null) {
70            return null;
71        }
72        for (WifiConfiguration config : mPerID.values()) {
73            if (config.configKey().equals(key)) {
74                return config;
75            }
76        }
77        return null;
78    }
79
80    public WifiConfiguration getByConfigKeyID(int id) {
81        return mPerConfigKey.get(id);
82    }
83
84    public Collection<WifiConfiguration> getEnabledNetworks() {
85        List<WifiConfiguration> list = new ArrayList<>();
86        for (WifiConfiguration config : mPerID.values()) {
87            if (config.status != WifiConfiguration.Status.DISABLED) {
88                list.add(config);
89            }
90        }
91        return list;
92    }
93
94    public WifiConfiguration getEphemeral(String ssid) {
95        for (WifiConfiguration config : mPerID.values()) {
96            if (ssid.equals(config.SSID) && config.ephemeral) {
97                return config;
98            }
99        }
100        return null;
101    }
102
103    public Collection<WifiConfiguration> values() {
104        return mPerID.values();
105    }
106}
107