Home | History | Annotate | Download | only in wifi
      1 package com.android.server.wifi;
      2 
      3 import android.content.pm.UserInfo;
      4 import android.net.wifi.WifiConfiguration;
      5 import android.os.UserHandle;
      6 import android.os.UserManager;
      7 
      8 import java.util.ArrayList;
      9 import java.util.Collection;
     10 import java.util.HashMap;
     11 import java.util.HashSet;
     12 import java.util.Iterator;
     13 import java.util.List;
     14 import java.util.Map;
     15 import java.util.Set;
     16 
     17 public class ConfigurationMap {
     18     private final Map<Integer, WifiConfiguration> mPerID = new HashMap<>();
     19 
     20     private final Map<Integer, WifiConfiguration> mPerIDForCurrentUser = new HashMap<>();
     21     private final Map<String, WifiConfiguration> mPerFQDNForCurrentUser = new HashMap<>();
     22 
     23     private final UserManager mUserManager;
     24 
     25     private int mCurrentUserId = UserHandle.USER_SYSTEM;
     26 
     27     ConfigurationMap(UserManager userManager) {
     28         mUserManager = userManager;
     29     }
     30 
     31     // RW methods:
     32     public WifiConfiguration put(WifiConfiguration config) {
     33         final WifiConfiguration current = mPerID.put(config.networkId, config);
     34         if (WifiConfigurationUtil.isVisibleToAnyProfile(config,
     35                 mUserManager.getProfiles(mCurrentUserId))) {
     36             mPerIDForCurrentUser.put(config.networkId, config);
     37             if (config.FQDN != null && config.FQDN.length() > 0) {
     38                 mPerFQDNForCurrentUser.put(config.FQDN, config);
     39             }
     40         }
     41         return current;
     42     }
     43 
     44     public WifiConfiguration remove(int netID) {
     45         WifiConfiguration config = mPerID.remove(netID);
     46         if (config == null) {
     47             return null;
     48         }
     49 
     50         mPerIDForCurrentUser.remove(netID);
     51         Iterator<Map.Entry<String, WifiConfiguration>> entries =
     52                 mPerFQDNForCurrentUser.entrySet().iterator();
     53         while (entries.hasNext()) {
     54             if (entries.next().getValue().networkId == netID) {
     55                 entries.remove();
     56                 break;
     57             }
     58         }
     59         return config;
     60     }
     61 
     62     public void clear() {
     63         mPerID.clear();
     64         mPerIDForCurrentUser.clear();
     65         mPerFQDNForCurrentUser.clear();
     66     }
     67 
     68     /**
     69      * Sets the new foreground user ID.
     70      *
     71      * @param userId the id of the new foreground user
     72      */
     73     public void setNewUser(int userId) {
     74         mCurrentUserId = userId;
     75     }
     76 
     77     // RO methods:
     78     public WifiConfiguration getForAllUsers(int netid) {
     79         return mPerID.get(netid);
     80     }
     81 
     82     public WifiConfiguration getForCurrentUser(int netid) {
     83         return mPerIDForCurrentUser.get(netid);
     84     }
     85 
     86     public int sizeForAllUsers() {
     87         return mPerID.size();
     88     }
     89 
     90     public int sizeForCurrentUser() {
     91         return mPerIDForCurrentUser.size();
     92     }
     93 
     94     public WifiConfiguration getByFQDNForCurrentUser(String fqdn) {
     95         return mPerFQDNForCurrentUser.get(fqdn);
     96     }
     97 
     98     public WifiConfiguration getByConfigKeyForCurrentUser(String key) {
     99         if (key == null) {
    100             return null;
    101         }
    102         for (WifiConfiguration config : mPerIDForCurrentUser.values()) {
    103             if (config.configKey().equals(key)) {
    104                 return config;
    105             }
    106         }
    107         return null;
    108     }
    109 
    110     public Collection<WifiConfiguration> getEnabledNetworksForCurrentUser() {
    111         List<WifiConfiguration> list = new ArrayList<>();
    112         for (WifiConfiguration config : mPerIDForCurrentUser.values()) {
    113             if (config.status != WifiConfiguration.Status.DISABLED) {
    114                 list.add(config);
    115             }
    116         }
    117         return list;
    118     }
    119 
    120     public WifiConfiguration getEphemeralForCurrentUser(String ssid) {
    121         for (WifiConfiguration config : mPerIDForCurrentUser.values()) {
    122             if (ssid.equals(config.SSID) && config.ephemeral) {
    123                 return config;
    124             }
    125         }
    126         return null;
    127     }
    128 
    129     public Collection<WifiConfiguration> valuesForAllUsers() {
    130         return mPerID.values();
    131     }
    132 
    133     public Collection<WifiConfiguration> valuesForCurrentUser() {
    134         return mPerIDForCurrentUser.values();
    135     }
    136 }
    137