blob: 52a837a0950e869f502b7e6e67769d820394c56d [file] [log] [blame]
Sander Alewijnseed0883b2014-03-18 15:01:13 +00001/*
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
Nicolas Prevot668d65f2015-03-10 17:58:15 +000019import android.content.Context;
Nicolas Prevot0b447252015-03-09 14:59:02 +000020import android.content.ComponentName;
Sander Alewijnsed7043852014-06-17 15:50:48 +010021import android.os.Parcel;
22import android.os.Parcelable;
Sander Alewijnsef88f7092014-08-20 16:26:09 +010023import android.os.PersistableBundle;
Sander Alewijnse74d6c142015-04-13 11:51:19 +010024import android.text.TextUtils;
Sander Alewijnse48fdbe02014-07-03 14:25:45 +010025import android.util.Base64;
Sander Alewijnse74d6c142015-04-13 11:51:19 +010026
Sander Alewijnse63254f42014-03-21 15:31:12 +000027import java.util.Locale;
Sander Alewijnse74d6c142015-04-13 11:51:19 +010028
Sander Alewijnseed0883b2014-03-18 15:01:13 +000029/**
30 * Provisioning Parameters for DeviceOwner Provisioning
31 */
Sander Alewijnsed7043852014-06-17 15:50:48 +010032public class ProvisioningParams implements Parcelable {
Sander Alewijnse56f71572014-06-23 16:21:33 +010033 public static final long DEFAULT_LOCAL_TIME = -1;
34 public static final boolean DEFAULT_WIFI_HIDDEN = false;
Sander Alewijnsefd134872014-11-18 13:28:06 +000035 public static final boolean DEFAULT_LEAVE_ALL_SYSTEM_APPS_ENABLED = false;
Sander Alewijnse56f71572014-06-23 16:21:33 +010036 public static final int DEFAULT_WIFI_PROXY_PORT = 0;
Julia Reynolds5d47b652015-02-02 06:47:25 -050037 public static final boolean DEFAULT_EXTRA_PROVISIONING_SKIP_ENCRYPTION = false;
Julia Reynoldsf3a5b3b2015-03-20 09:34:37 -040038 // Always download packages if no minimum version given.
39 public static final int DEFAULT_MINIMUM_VERSION = Integer.MAX_VALUE;
Sander Alewijnse56f71572014-06-23 16:21:33 +010040
Sander Alewijnse74d6c142015-04-13 11:51:19 +010041 public String timeZone;
42 public long localTime = DEFAULT_LOCAL_TIME;
43 public Locale locale;
Sander Alewijnseed0883b2014-03-18 15:01:13 +000044
Sander Alewijnse74d6c142015-04-13 11:51:19 +010045 public static class WifiInfo {
46 public String ssid;
47 public boolean hidden = DEFAULT_WIFI_HIDDEN;
48 public String securityType;
49 public String password;
50 public String proxyHost;
51 public int proxyPort = DEFAULT_WIFI_PROXY_PORT;
52 public String proxyBypassHosts;
53 public String pacUrl;
Sander Alewijnseed0883b2014-03-18 15:01:13 +000054
Sander Alewijnse74d6c142015-04-13 11:51:19 +010055 public void writeToParcel(Parcel out) {
56 out.writeString(ssid);
57 out.writeInt(hidden ? 1 : 0);
58 out.writeString(securityType);
59 out.writeString(password);
60 out.writeString(proxyHost);
61 out.writeInt(proxyPort);
62 out.writeString(proxyBypassHosts);
63 out.writeString(pacUrl);
64 }
Sander Alewijnseaf8413e2014-03-19 11:37:44 +000065
Sander Alewijnse74d6c142015-04-13 11:51:19 +010066 public void readFromParcel(Parcel in) {
67 ssid = in.readString();
68 hidden = in.readInt() == 1;
69 securityType = in.readString();
70 password = in.readString();
71 proxyHost = in.readString();
72 proxyPort = in.readInt();
73 proxyBypassHosts = in.readString();
74 pacUrl = in.readString();
75 }
76 };
77 public WifiInfo wifiInfo = new WifiInfo();
Nicolas Prevot668d65f2015-03-10 17:58:15 +000078
Sander Alewijnse74d6c142015-04-13 11:51:19 +010079 // At least one one of deviceAdminPackageName and deviceAdminComponentName should be non-null
80 public String deviceAdminPackageName; // Package name of the device admin package.
81 public ComponentName deviceAdminComponentName;
82 public ComponentName deviceInitializerComponentName;
Julia Reynolds3f4eb372015-02-11 13:46:42 -050083
Sander Alewijnse74d6c142015-04-13 11:51:19 +010084 private ComponentName inferedDeviceAdminComponentName;
Julia Reynolds3f4eb372015-02-11 13:46:42 -050085
Sander Alewijnse74d6c142015-04-13 11:51:19 +010086 public static class PackageDownloadInfo {
87 // Url where the package (.apk) can be downloaded from
88 public String location;
89 // Cookie header for http request
90 public String cookieHeader;
Sander Alewijnse3efa83a2015-04-14 14:46:18 +010091 // One of the following two checksums should be non empty.
92 // SHA-1 hash of the .apk file, or empty array if not used.
Sander Alewijnse74d6c142015-04-13 11:51:19 +010093 public byte[] packageChecksum = new byte[0];
Sander Alewijnse3efa83a2015-04-14 14:46:18 +010094 // SHA-1 hash of the certificate in the .apk file, or empty array if not used.
95 public byte[] certificateChecksum = new byte[0];
Sander Alewijnse74d6c142015-04-13 11:51:19 +010096 public int minVersion;
Julia Reynolds3f4eb372015-02-11 13:46:42 -050097
Sander Alewijnse74d6c142015-04-13 11:51:19 +010098 public void writeToParcel(Parcel out) {
99 out.writeInt(minVersion);
100 out.writeString(location);
101 out.writeString(cookieHeader);
102 out.writeByteArray(packageChecksum);
Sander Alewijnse3efa83a2015-04-14 14:46:18 +0100103 out.writeByteArray(certificateChecksum);
Sander Alewijnse74d6c142015-04-13 11:51:19 +0100104 }
Julia Reynolds3f4eb372015-02-11 13:46:42 -0500105
Sander Alewijnse74d6c142015-04-13 11:51:19 +0100106 public void readFromParcel(Parcel in) {
107 minVersion = in.readInt();
108 location = in.readString();
109 cookieHeader = in.readString();
110 packageChecksum = in.createByteArray();
Sander Alewijnse3efa83a2015-04-14 14:46:18 +0100111 certificateChecksum = in.createByteArray();
Sander Alewijnse74d6c142015-04-13 11:51:19 +0100112 }
113 }
114 public PackageDownloadInfo deviceAdminDownloadInfo = new PackageDownloadInfo();
115 public PackageDownloadInfo deviceInitializerDownloadInfo = new PackageDownloadInfo();
Julia Reynolds3f4eb372015-02-11 13:46:42 -0500116
Sander Alewijnse74d6c142015-04-13 11:51:19 +0100117 public PersistableBundle adminExtrasBundle;
118 public PersistableBundle frpChallengeBundle;
119
120 public boolean startedByNfc; // True iff provisioning flow was started by Nfc bump.
121
122 public boolean leaveAllSystemAppsEnabled;
123 public boolean skipEncryption;
124
125 public static class BluetoothInfo {
126 public String mac;
127 public String uuid;
128 public String deviceIdentifier;
129 public boolean useProxy;
130
131 public void writeToParcel(Parcel out) {
132 out.writeString(mac);
133 out.writeString(uuid);
134 out.writeString(deviceIdentifier);
135 out.writeInt(useProxy ? 1 : 0);
136 }
137
138 public void readFromParcel(Parcel in) {
139 mac = in.readString();
140 uuid = in.readString();
141 deviceIdentifier = in.readString();
142 useProxy = in.readInt() == 1;
143 }
144 };
145 public BluetoothInfo bluetoothInfo = new BluetoothInfo();
Craig Lafayette2fe9d992015-03-24 12:42:05 -0400146
Julia Reynolds3f4eb372015-02-11 13:46:42 -0500147 public String inferDeviceAdminPackageName() {
Sander Alewijnse74d6c142015-04-13 11:51:19 +0100148 if (deviceAdminComponentName != null) {
149 return deviceAdminComponentName.getPackageName();
Nicolas Prevot668d65f2015-03-10 17:58:15 +0000150 }
Sander Alewijnse74d6c142015-04-13 11:51:19 +0100151 return deviceAdminPackageName;
152 }
153
154 public String getDeviceInitializerPackageName() {
155 if (deviceInitializerComponentName != null) {
156 return deviceInitializerComponentName.getPackageName();
157 }
158 return null;
Nicolas Prevot668d65f2015-03-10 17:58:15 +0000159 }
160
161 // This should not be called if the app has not been installed yet.
162 ComponentName inferDeviceAdminComponentName(Context c)
163 throws Utils.IllegalProvisioningArgumentException {
Sander Alewijnse74d6c142015-04-13 11:51:19 +0100164 if (inferedDeviceAdminComponentName == null) {
165 inferedDeviceAdminComponentName = Utils.findDeviceAdmin(
166 deviceAdminPackageName, deviceAdminComponentName, c);
Nicolas Prevot668d65f2015-03-10 17:58:15 +0000167 }
Sander Alewijnse74d6c142015-04-13 11:51:19 +0100168 return inferedDeviceAdminComponentName;
Julia Reynolds3f4eb372015-02-11 13:46:42 -0500169 }
170
Sander Alewijnsed7043852014-06-17 15:50:48 +0100171 @Override
172 public int describeContents() {
173 return 0;
174 }
175
176 @Override
177 public void writeToParcel(Parcel out, int flags) {
Sander Alewijnse74d6c142015-04-13 11:51:19 +0100178 out.writeString(timeZone);
179 out.writeLong(localTime);
180 out.writeSerializable(locale);
181 wifiInfo.writeToParcel(out);
182 out.writeString(deviceAdminPackageName);
183 out.writeParcelable(deviceAdminComponentName, 0 /* default */);
184 deviceAdminDownloadInfo.writeToParcel(out);
185 out.writeParcelable(deviceInitializerComponentName, 0 /* default */);
186 deviceInitializerDownloadInfo.writeToParcel(out);
187 out.writeParcelable(adminExtrasBundle, 0 /* default */);
188 out.writeInt(startedByNfc ? 1 : 0);
189 out.writeInt(leaveAllSystemAppsEnabled ? 1 : 0);
190 out.writeInt(skipEncryption ? 1 : 0);
191 bluetoothInfo.writeToParcel(out);
192 out.writeParcelable(frpChallengeBundle, 0 /* default */);
Sander Alewijnsed7043852014-06-17 15:50:48 +0100193 }
194
195 public static final Parcelable.Creator<ProvisioningParams> CREATOR
196 = new Parcelable.Creator<ProvisioningParams>() {
197 @Override
198 public ProvisioningParams createFromParcel(Parcel in) {
199 ProvisioningParams params = new ProvisioningParams();
Sander Alewijnse74d6c142015-04-13 11:51:19 +0100200 params.timeZone = in.readString();
201 params.localTime = in.readLong();
202 params.locale = (Locale) in.readSerializable();
203 params.wifiInfo.readFromParcel(in);
204 params.deviceAdminPackageName = in.readString();
205 params.deviceAdminComponentName = (ComponentName)
Nicolas Prevot0b447252015-03-09 14:59:02 +0000206 in.readParcelable(null /* use default classloader */);
Sander Alewijnse74d6c142015-04-13 11:51:19 +0100207 params.deviceAdminDownloadInfo.readFromParcel(in);
208 params.deviceInitializerComponentName = (ComponentName)
Julia Reynolds3f4eb372015-02-11 13:46:42 -0500209 in.readParcelable(null /* use default classloader */);
Sander Alewijnse74d6c142015-04-13 11:51:19 +0100210 params.deviceInitializerDownloadInfo.readFromParcel(in);
211 params.adminExtrasBundle = in.readParcelable(null /* use default classloader */);
212 params.startedByNfc = in.readInt() == 1;
213 params.leaveAllSystemAppsEnabled = in.readInt() == 1;
214 params.skipEncryption = in.readInt() == 1;
215 params.bluetoothInfo.readFromParcel(in);
216 params.frpChallengeBundle = in.readParcelable(null /* use default classloader */);
Sander Alewijnsed7043852014-06-17 15:50:48 +0100217 return params;
218 }
219
220 @Override
221 public ProvisioningParams[] newArray(int size) {
222 return new ProvisioningParams[size];
223 }
224 };
Sander Alewijnseed0883b2014-03-18 15:01:13 +0000225}