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