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