1/*
2 * Copyright 2014, 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
17package com.android.managedprovisioning;
18
19import android.os.Parcel;
20import android.os.Parcelable;
21import android.os.PersistableBundle;
22import android.util.Base64;
23import java.util.Locale;
24
25
26/**
27 * Provisioning Parameters for DeviceOwner Provisioning
28 */
29public class ProvisioningParams implements Parcelable {
30    public static final long DEFAULT_LOCAL_TIME = -1;
31    public static final boolean DEFAULT_WIFI_HIDDEN = false;
32    public static final int DEFAULT_WIFI_PROXY_PORT = 0;
33
34    public String mTimeZone;
35    public long mLocalTime = DEFAULT_LOCAL_TIME;
36    public Locale mLocale;
37
38    public String mWifiSsid;
39    public boolean mWifiHidden = DEFAULT_WIFI_HIDDEN;
40    public String mWifiSecurityType;
41    public String mWifiPassword;
42    public String mWifiProxyHost;
43    public int mWifiProxyPort = DEFAULT_WIFI_PROXY_PORT;
44    public String mWifiProxyBypassHosts;
45    public String mWifiPacUrl;
46
47    public String mDeviceAdminPackageName; // Package name of the device admin package.
48
49    public String mDeviceAdminPackageDownloadLocation; // Url of the device admin .apk
50    public String mDeviceAdminPackageDownloadCookieHeader; // Cookie header for http request
51    public byte[] mDeviceAdminPackageChecksum = new byte[0]; // SHA-1 sum of the .apk file.
52
53    public PersistableBundle mAdminExtrasBundle;
54
55    public boolean mStartedByNfc; // True iff provisioning flow was started by Nfc bump.
56
57    public String getLocaleAsString() {
58        if (mLocale != null) {
59            return mLocale.getLanguage() + "_" + mLocale.getCountry();
60        } else {
61            return null;
62        }
63    }
64
65    public String getDeviceAdminPackageChecksumAsString() {
66        return Base64.encodeToString(mDeviceAdminPackageChecksum,
67                Base64.URL_SAFE | Base64.NO_PADDING | Base64.NO_WRAP);
68    }
69
70    @Override
71    public int describeContents() {
72        return 0;
73    }
74
75    @Override
76    public void writeToParcel(Parcel out, int flags) {
77        out.writeString(mTimeZone);
78        out.writeLong(mLocalTime);
79        out.writeSerializable(mLocale);
80        out.writeString(mWifiSsid);
81        out.writeInt(mWifiHidden ? 1 : 0);
82        out.writeString(mWifiSecurityType);
83        out.writeString(mWifiPassword);
84        out.writeString(mWifiProxyHost);
85        out.writeInt(mWifiProxyPort);
86        out.writeString(mWifiProxyBypassHosts);
87        out.writeString(mDeviceAdminPackageName);
88        out.writeString(mDeviceAdminPackageDownloadLocation);
89        out.writeString(mDeviceAdminPackageDownloadCookieHeader);
90        out.writeInt(mDeviceAdminPackageChecksum.length);
91        out.writeByteArray(mDeviceAdminPackageChecksum);
92        out.writeParcelable(mAdminExtrasBundle, 0 /* default */);
93        out.writeInt(mStartedByNfc ? 1 : 0);
94    }
95
96    public static final Parcelable.Creator<ProvisioningParams> CREATOR
97        = new Parcelable.Creator<ProvisioningParams>() {
98        @Override
99        public ProvisioningParams createFromParcel(Parcel in) {
100            ProvisioningParams params = new ProvisioningParams();
101            params.mTimeZone = in.readString();
102            params.mLocalTime = in.readLong();
103            params.mLocale = (Locale) in.readSerializable();
104            params.mWifiSsid = in.readString();
105            params.mWifiHidden = in.readInt() == 1;
106            params.mWifiSecurityType = in.readString();
107            params.mWifiPassword = in.readString();
108            params.mWifiProxyHost = in.readString();
109            params.mWifiProxyPort = in.readInt();
110            params.mWifiProxyBypassHosts = in.readString();
111            params.mDeviceAdminPackageName = in.readString();
112            params.mDeviceAdminPackageDownloadLocation = in.readString();
113            params.mDeviceAdminPackageDownloadCookieHeader = in.readString();
114            int checksumLength = in.readInt();
115            params.mDeviceAdminPackageChecksum = new byte[checksumLength];
116            in.readByteArray(params.mDeviceAdminPackageChecksum);
117            params.mAdminExtrasBundle = in.readParcelable(null /* use default classloader */);
118            params.mStartedByNfc = in.readInt() == 1;
119            return params;
120        }
121
122        @Override
123        public ProvisioningParams[] newArray(int size) {
124            return new ProvisioningParams[size];
125        }
126    };
127}
128