1 /*
2  * Copyright 2016, 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.managedprovisioning.model;
18 
19 import android.os.Parcel;
20 import android.os.Parcelable;
21 import android.support.annotation.Nullable;
22 import android.text.TextUtils;
23 
24 import java.util.Objects;
25 
26 import com.android.internal.annotations.Immutable;
27 
28 /**
29  * Stores the WiFi configuration which is used in managed provisioning.
30  */
31 @Immutable
32 public final class WifiInfo implements Parcelable {
33     public static final boolean DEFAULT_WIFI_HIDDEN = false;
34     public static final int DEFAULT_WIFI_PROXY_PORT = 0;
35 
36     public static final Parcelable.Creator<WifiInfo> CREATOR
37             = new Parcelable.Creator<WifiInfo>() {
38         @Override
39         public WifiInfo createFromParcel(Parcel in) {
40             return new WifiInfo(in);
41         }
42 
43         @Override
44         public WifiInfo[] newArray(int size) {
45             return new WifiInfo[size];
46         }
47     };
48 
49     /** Ssid of the wifi network. */
50     public final String ssid;
51     /** Wifi network in {@link #ssid} is hidden or not. */
52     public final boolean hidden;
53     /** Security type of the wifi network in {@link #ssid}. */
54     @Nullable
55     public final String securityType;
56     /** Password of the wifi network in {@link #ssid}. */
57     @Nullable
58     public final String password;
59     /** Proxy host for the wifi network in {@link #ssid}. */
60     @Nullable
61     public final String proxyHost;
62     /** Proxy port for the wifi network in {@link #ssid}. */
63     public final int proxyPort;
64     /** The proxy bypass for the wifi network in {@link #ssid}. */
65     @Nullable
66     public final String proxyBypassHosts;
67     /** The proxy bypass list for the wifi network in {@link #ssid}. */
68     @Nullable
69     public final String pacUrl;
70 
WifiInfo(Builder builder)71     private WifiInfo(Builder builder) {
72         ssid = builder.mSsid;
73         hidden = builder.mHidden;
74         securityType = builder.mSecurityType;
75         password = builder.mPassword;
76         proxyHost = builder.mProxyHost;
77         proxyPort = builder.mProxyPort;
78         proxyBypassHosts = builder.mProxyBypassHosts;
79         pacUrl = builder.mPacUrl;
80 
81         validateFields();
82     }
83 
WifiInfo(Parcel in)84     private WifiInfo(Parcel in) {
85         ssid = in.readString();
86         hidden = in.readInt() == 1;
87         securityType = in.readString();
88         password = in.readString();
89         proxyHost = in.readString();
90         proxyPort = in.readInt();
91         proxyBypassHosts = in.readString();
92         pacUrl = in.readString();
93 
94         validateFields();
95     }
96 
validateFields()97     private void validateFields() {
98         if (TextUtils.isEmpty(ssid)) {
99             throw new IllegalArgumentException("Ssid must not be empty!");
100         }
101     }
102 
103     @Override
describeContents()104     public int describeContents() {
105         return 0;
106     }
107 
108     @Override
writeToParcel(Parcel out, int flags)109     public void writeToParcel(Parcel out, int flags) {
110         out.writeString(ssid);
111         out.writeInt(hidden ? 1 : 0);
112         out.writeString(securityType);
113         out.writeString(password);
114         out.writeString(proxyHost);
115         out.writeInt(proxyPort);
116         out.writeString(proxyBypassHosts);
117         out.writeString(pacUrl);
118     }
119 
120     @Override
equals(Object o)121     public boolean equals(Object o) {
122         if (this == o) {
123             return true;
124         }
125         if (o == null || getClass() != o.getClass()) {
126             return false;
127         }
128         WifiInfo that = (WifiInfo) o;
129         return hidden == that.hidden
130                 && proxyPort == that.proxyPort
131                 && Objects.equals(ssid, that.ssid)
132                 && Objects.equals(securityType, that.securityType)
133                 && Objects.equals(password, that.password)
134                 && Objects.equals(proxyHost, that.proxyHost)
135                 && Objects.equals(proxyBypassHosts, that.proxyBypassHosts)
136                 && Objects.equals(pacUrl, that.pacUrl);
137     }
138 
139     public final static class Builder {
140         private String mSsid;
141         private boolean mHidden = DEFAULT_WIFI_HIDDEN;
142         private String mSecurityType;
143         private String mPassword;
144         private String mProxyHost;
145         private int mProxyPort = DEFAULT_WIFI_PROXY_PORT;
146         private String mProxyBypassHosts;
147         private String mPacUrl;
148 
setSsid(String ssid)149         public Builder setSsid(String ssid) {
150             mSsid = ssid;
151             return this;
152         }
153 
setHidden(boolean hidden)154         public Builder setHidden(boolean hidden) {
155             mHidden = hidden;
156             return this;
157         }
158 
setSecurityType(String securityType)159         public Builder setSecurityType(String securityType) {
160             mSecurityType = securityType;
161             return this;
162         }
163 
setPassword(String password)164         public Builder setPassword(String password) {
165             mPassword = password;
166             return this;
167         }
168 
setProxyHost(String proxyHost)169         public Builder setProxyHost(String proxyHost) {
170             mProxyHost = proxyHost;
171             return this;
172         }
173 
setProxyPort(int proxyPort)174         public Builder setProxyPort(int proxyPort) {
175             mProxyPort = proxyPort;
176             return this;
177         }
178 
setProxyBypassHosts(String proxyBypassHosts)179         public Builder setProxyBypassHosts(String proxyBypassHosts) {
180             mProxyBypassHosts = proxyBypassHosts;
181             return this;
182         }
183 
setPacUrl(String pacUrl)184         public Builder setPacUrl(String pacUrl) {
185             mPacUrl = pacUrl;
186             return this;
187         }
188 
build()189         public WifiInfo build() {
190             return new WifiInfo(this);
191         }
192 
builder()193         public static Builder builder() {
194             return new Builder();
195         }
196     }
197 }
198