1013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna/* 2013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna * Copyright (C) 2017 The Android Open Source Project 3013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna * 4013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna * Licensed under the Apache License, Version 2.0 (the "License"); 5013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna * you may not use this file except in compliance with the License. 6013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna * You may obtain a copy of the License at 7013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna * 8013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna * http://www.apache.org/licenses/LICENSE-2.0 9013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna * 10013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna * Unless required by applicable law or agreed to in writing, software 11013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna * distributed under the License is distributed on an "AS IS" BASIS, 12013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna * See the License for the specific language governing permissions and 14013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna * limitations under the License. 15013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna */ 16013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPennapackage com.android.networkrecommendation.config; 17013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna 18013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPennaimport static com.android.networkrecommendation.Constants.TAG; 19013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna 20013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPennaimport android.support.annotation.VisibleForTesting; 21013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPennaimport com.android.networkrecommendation.config.G.Netrec; 22013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPennaimport com.android.networkrecommendation.util.Blog; 23013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPennaimport com.google.common.collect.ImmutableSet; 24013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPennaimport java.io.BufferedReader; 25013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPennaimport java.io.IOException; 26013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPennaimport java.io.StringReader; 27013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPennaimport java.util.ArrayList; 28013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPennaimport java.util.List; 29013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna 30013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna/** Provides a list of known wide area networks. */ 31013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPennapublic class WideAreaNetworks { 32013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna private WideAreaNetworks() {} 33013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna 34013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna private static ImmutableSet<String> sWideAreaNetworks; 35013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna 36013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna /** Initialize the list of wide area networks from the phenotype flag. */ 37013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna public static void init() { 38013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna sWideAreaNetworks = parseFlag(); 39013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna } 40013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna 41013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna /** 42013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna * @param ssid canonical SSID for a network (with quotes removed) 43013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna * @return {@code true} if {@code ssid} is in the set of wide area networks. 44013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna */ 45013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna public static boolean contains(String ssid) { 46013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna if (sWideAreaNetworks == null) { 47013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna init(); 48013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna } 49013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna return sWideAreaNetworks.contains(ssid); 50013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna } 51013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna 52013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna @VisibleForTesting 53013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna static ImmutableSet<String> parseFlag() { 54013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna List<String> parts = new ArrayList<>(); 55013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna BufferedReader reader = new BufferedReader(new StringReader(Netrec.wideAreaNetworks.get())); 56013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna try { 57013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna Csv.parseLine(reader, parts); 58013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna } catch (IOException ex) { 59013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna Blog.e(TAG, ex, "Error parsing flag"); 60013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna } 61013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna return ImmutableSet.copyOf(parts); 62013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna } 63013ba587a539e3ea2f872e3f7b8c981805a6ad93Joe LaPenna} 64