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_ACCOUNT_TO_MIGRATE;
     20 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE;
     21 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME;
     22 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_ICON_URI;
     23 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_LABEL;
     24 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME;
     25 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DISCLAIMERS;
     26 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_KEEP_ACCOUNT_ON_MIGRATION;
     27 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED;
     28 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_LOCALE;
     29 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_LOCAL_TIME;
     30 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR;
     31 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_ORGANIZATION_NAME;
     32 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_SKIP_ENCRYPTION;
     33 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_SKIP_USER_CONSENT;
     34 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_SKIP_USER_SETUP;
     35 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_SUPPORT_URL;
     36 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_TIME_ZONE;
     37 import static com.android.internal.util.Preconditions.checkArgument;
     38 import static com.android.internal.util.Preconditions.checkNotNull;
     39 import static com.android.managedprovisioning.common.ManagedProvisioningSharedPreferences.DEFAULT_PROVISIONING_ID;
     40 import static com.android.managedprovisioning.common.StoreUtils.accountToPersistableBundle;
     41 import static com.android.managedprovisioning.common.StoreUtils.getIntegerAttrFromPersistableBundle;
     42 import static com.android.managedprovisioning.common.StoreUtils.getObjectAttrFromPersistableBundle;
     43 import static com.android.managedprovisioning.common.StoreUtils.getStringAttrFromPersistableBundle;
     44 import static com.android.managedprovisioning.common.StoreUtils.putIntegerIfNotNull;
     45 import static com.android.managedprovisioning.common.StoreUtils.putPersistableBundlableIfNotNull;
     46 
     47 import android.accounts.Account;
     48 import android.content.ComponentName;
     49 import android.content.Context;
     50 import android.os.Parcel;
     51 import android.os.Parcelable;
     52 import android.os.PersistableBundle;
     53 import android.support.annotation.Nullable;
     54 import android.util.Xml;
     55 import com.android.internal.util.FastXmlSerializer;
     56 import com.android.managedprovisioning.common.ManagedProvisioningSharedPreferences;
     57 import com.android.managedprovisioning.common.PersistableBundlable;
     58 import com.android.managedprovisioning.common.ProvisionLogger;
     59 import com.android.managedprovisioning.common.StoreUtils;
     60 import java.io.File;
     61 import java.io.FileInputStream;
     62 import java.io.FileOutputStream;
     63 import java.io.IOException;
     64 import java.nio.charset.StandardCharsets;
     65 import java.util.Locale;
     66 import org.xmlpull.v1.XmlPullParser;
     67 import org.xmlpull.v1.XmlPullParserException;
     68 import org.xmlpull.v1.XmlSerializer;
     69 
     70 /**
     71  * Provisioning parameters for Device Owner and Profile Owner provisioning.
     72  */
     73 public final class ProvisioningParams extends PersistableBundlable {
     74     public static final long DEFAULT_LOCAL_TIME = -1;
     75     public static final Integer DEFAULT_MAIN_COLOR = null;
     76     public static final boolean DEFAULT_STARTED_BY_TRUSTED_SOURCE = false;
     77     public static final boolean DEFAULT_IS_NFC = false;
     78     public static final boolean DEFAULT_LEAVE_ALL_SYSTEM_APPS_ENABLED = false;
     79     public static final boolean DEFAULT_EXTRA_PROVISIONING_SKIP_ENCRYPTION = false;
     80     public static final boolean DEFAULT_EXTRA_PROVISIONING_SKIP_USER_CONSENT = false;
     81     public static final boolean DEFAULT_EXTRA_PROVISIONING_KEEP_ACCOUNT_MIGRATED = false;
     82     public static final boolean DEFAULT_SKIP_USER_SETUP = true;
     83     // Intent extra used internally for passing data between activities and service.
     84     public static final String EXTRA_PROVISIONING_PARAMS = "provisioningParams";
     85 
     86     private static final String TAG_PROVISIONING_ID = "provisioning-id";
     87     private static final String TAG_PROVISIONING_PARAMS = "provisioning-params";
     88     private static final String TAG_WIFI_INFO = "wifi-info";
     89     private static final String TAG_PACKAGE_DOWNLOAD_INFO = "download-info";
     90     private static final String TAG_STARTED_BY_TRUSTED_SOURCE = "started-by-trusted-source";
     91     private static final String TAG_IS_NFC = "started-is-nfc";
     92     private static final String TAG_PROVISIONING_ACTION = "provisioning-action";
     93 
     94     public static final Parcelable.Creator<ProvisioningParams> CREATOR
     95             = new Parcelable.Creator<ProvisioningParams>() {
     96         @Override
     97         public ProvisioningParams createFromParcel(Parcel in) {
     98             return new ProvisioningParams(in);
     99         }
    100 
    101         @Override
    102         public ProvisioningParams[] newArray(int size) {
    103             return new ProvisioningParams[size];
    104         }
    105     };
    106 
    107     public final long provisioningId;
    108 
    109     @Nullable
    110     public final String timeZone;
    111 
    112     public final long localTime;
    113 
    114     @Nullable
    115     public final Locale locale;
    116 
    117     /** WiFi configuration. */
    118     @Nullable
    119     public final WifiInfo wifiInfo;
    120 
    121     /**
    122      * Package name of the device admin package.
    123      *
    124      * <p>At least one one of deviceAdminPackageName and deviceAdminComponentName should be
    125      * non-null.
    126      */
    127     @Deprecated
    128     public final String deviceAdminPackageName;
    129 
    130     /**
    131      * {@link ComponentName} of the device admin package.
    132      *
    133      * <p>At least one one of deviceAdminPackageName and deviceAdminComponentName should be
    134      * non-null.
    135      */
    136     public final ComponentName deviceAdminComponentName;
    137 
    138     public final String deviceAdminLabel;
    139     public final String organizationName;
    140     public final String supportUrl;
    141     public final String deviceAdminIconFilePath;
    142 
    143     /** {@link Account} that should be migrated to the managed profile. */
    144     @Nullable
    145     public final Account accountToMigrate;
    146 
    147     /** True if the account will not be removed from the calling user after it is migrated. */
    148     public final boolean keepAccountMigrated;
    149 
    150     /** Provisioning action comes along with the provisioning data. */
    151     public final String provisioningAction;
    152 
    153     /**
    154      * The main color theme used in managed profile only.
    155      *
    156      * <p>{@code null} means the default value.
    157      */
    158     @Nullable
    159     public final Integer mainColor;
    160 
    161     /** The download information of device admin package. */
    162     @Nullable
    163     public final PackageDownloadInfo deviceAdminDownloadInfo;
    164 
    165     /** List of disclaimers */
    166     @Nullable
    167     public final DisclaimersParam disclaimersParam;
    168 
    169     /**
    170      * Custom key-value pairs from enterprise mobility management which are passed to device admin
    171      * package after provisioning.
    172      *
    173      * <p>Note that {@link ProvisioningParams} is not immutable because this field is mutable.
    174      */
    175     @Nullable
    176     public final PersistableBundle adminExtrasBundle;
    177 
    178     /**
    179      * True iff provisioning flow was started by a trusted app. This includes Nfc bump and QR code.
    180      */
    181     public final boolean startedByTrustedSource;
    182 
    183     public final boolean isNfc;
    184 
    185     /** True if all system apps should be enabled after provisioning. */
    186     public final boolean leaveAllSystemAppsEnabled;
    187 
    188     /** True if device encryption should be skipped. */
    189     public final boolean skipEncryption;
    190 
    191     /** True if user setup can be skipped. */
    192     public final boolean skipUserSetup;
    193 
    194     /** True if user consent page in pre-provisioning can be skipped. */
    195     public final boolean skipUserConsent;
    196 
    197     public static String inferStaticDeviceAdminPackageName(ComponentName deviceAdminComponentName,
    198             String deviceAdminPackageName) {
    199         if (deviceAdminComponentName != null) {
    200             return deviceAdminComponentName.getPackageName();
    201         }
    202         return deviceAdminPackageName;
    203     }
    204 
    205     public String inferDeviceAdminPackageName() {
    206         return inferStaticDeviceAdminPackageName(deviceAdminComponentName, deviceAdminPackageName);
    207     }
    208 
    209     private ProvisioningParams(Builder builder) {
    210         provisioningId = builder.mProvisioningId;
    211         timeZone = builder.mTimeZone;
    212         localTime = builder.mLocalTime;
    213         locale = builder.mLocale;
    214 
    215         wifiInfo = builder.mWifiInfo;
    216 
    217         deviceAdminComponentName = builder.mDeviceAdminComponentName;
    218         deviceAdminPackageName = builder.mDeviceAdminPackageName;
    219         deviceAdminLabel = builder.mDeviceAdminLabel;
    220         organizationName = builder.mOrganizationName;
    221         supportUrl = builder.mSupportUrl;
    222         deviceAdminIconFilePath = builder.mDeviceAdminIconFilePath;
    223 
    224         deviceAdminDownloadInfo = builder.mDeviceAdminDownloadInfo;
    225         disclaimersParam = builder.mDisclaimersParam;
    226 
    227         adminExtrasBundle = builder.mAdminExtrasBundle;
    228 
    229         startedByTrustedSource = builder.mStartedByTrustedSource;
    230         isNfc = builder.mIsNfc;
    231         leaveAllSystemAppsEnabled = builder.mLeaveAllSystemAppsEnabled;
    232         skipEncryption = builder.mSkipEncryption;
    233         accountToMigrate = builder.mAccountToMigrate;
    234         provisioningAction = checkNotNull(builder.mProvisioningAction);
    235         mainColor = builder.mMainColor;
    236         skipUserConsent = builder.mSkipUserConsent;
    237         skipUserSetup = builder.mSkipUserSetup;
    238         keepAccountMigrated = builder.mKeepAccountMigrated;
    239 
    240         validateFields();
    241     }
    242 
    243     private ProvisioningParams(Parcel in) {
    244         this(createBuilderFromPersistableBundle(
    245                 PersistableBundlable.getPersistableBundleFromParcel(in)));
    246     }
    247 
    248     private void validateFields() {
    249         checkArgument(deviceAdminPackageName != null || deviceAdminComponentName != null);
    250     }
    251 
    252     @Override
    253     public PersistableBundle toPersistableBundle() {
    254         final PersistableBundle bundle = new PersistableBundle();
    255 
    256         bundle.putLong(TAG_PROVISIONING_ID, provisioningId);
    257         bundle.putString(EXTRA_PROVISIONING_TIME_ZONE, timeZone);
    258         bundle.putLong(EXTRA_PROVISIONING_LOCAL_TIME, localTime);
    259         bundle.putString(EXTRA_PROVISIONING_LOCALE, StoreUtils.localeToString(locale));
    260         putPersistableBundlableIfNotNull(bundle, TAG_WIFI_INFO, wifiInfo);
    261         bundle.putString(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, deviceAdminPackageName);
    262         bundle.putString(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME,
    263                 StoreUtils.componentNameToString(deviceAdminComponentName));
    264         bundle.putString(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_LABEL, deviceAdminLabel);
    265         bundle.putString(EXTRA_PROVISIONING_ORGANIZATION_NAME, organizationName);
    266         bundle.putString(EXTRA_PROVISIONING_SUPPORT_URL, supportUrl);
    267         bundle.putString(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_ICON_URI, deviceAdminIconFilePath);
    268         bundle.putPersistableBundle(EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE, accountToMigrate == null
    269                 ? null : accountToPersistableBundle(accountToMigrate));
    270         bundle.putString(TAG_PROVISIONING_ACTION, provisioningAction);
    271         putIntegerIfNotNull(bundle, EXTRA_PROVISIONING_MAIN_COLOR, mainColor);
    272         putPersistableBundlableIfNotNull(bundle, TAG_PACKAGE_DOWNLOAD_INFO,
    273                 deviceAdminDownloadInfo);
    274         putPersistableBundlableIfNotNull(bundle, EXTRA_PROVISIONING_DISCLAIMERS,
    275                 disclaimersParam);
    276         bundle.putPersistableBundle(EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE, adminExtrasBundle);
    277         bundle.putBoolean(TAG_STARTED_BY_TRUSTED_SOURCE, startedByTrustedSource);
    278         bundle.putBoolean(TAG_IS_NFC, isNfc);
    279         bundle.putBoolean(EXTRA_PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED,
    280                 leaveAllSystemAppsEnabled);
    281         bundle.putBoolean(EXTRA_PROVISIONING_SKIP_ENCRYPTION, skipEncryption);
    282         bundle.putBoolean(EXTRA_PROVISIONING_SKIP_USER_SETUP, skipUserSetup);
    283         bundle.putBoolean(EXTRA_PROVISIONING_SKIP_USER_CONSENT, skipUserConsent);
    284         bundle.putBoolean(EXTRA_PROVISIONING_KEEP_ACCOUNT_ON_MIGRATION, keepAccountMigrated);
    285         return bundle;
    286     }
    287 
    288     /* package */ static ProvisioningParams fromPersistableBundle(PersistableBundle bundle) {
    289         return createBuilderFromPersistableBundle(bundle).build();
    290     }
    291 
    292     private static Builder createBuilderFromPersistableBundle(PersistableBundle bundle) {
    293         Builder builder = new Builder();
    294         builder.setProvisioningId(bundle.getLong(TAG_PROVISIONING_ID, DEFAULT_PROVISIONING_ID));
    295         builder.setTimeZone(bundle.getString(EXTRA_PROVISIONING_TIME_ZONE));
    296         builder.setLocalTime(bundle.getLong(EXTRA_PROVISIONING_LOCAL_TIME));
    297         builder.setLocale(getStringAttrFromPersistableBundle(bundle,
    298                 EXTRA_PROVISIONING_LOCALE, StoreUtils::stringToLocale));
    299         builder.setWifiInfo(getObjectAttrFromPersistableBundle(bundle,
    300                 TAG_WIFI_INFO, WifiInfo::fromPersistableBundle));
    301         builder.setDeviceAdminPackageName(bundle.getString(
    302                 EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME));
    303         builder.setDeviceAdminComponentName(getStringAttrFromPersistableBundle(bundle,
    304                 EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, StoreUtils::stringToComponentName));
    305         builder.setDeviceAdminLabel(bundle.getString(
    306                 EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_LABEL));
    307         builder.setOrganizationName(bundle.getString(EXTRA_PROVISIONING_ORGANIZATION_NAME));
    308         builder.setSupportUrl(bundle.getString(EXTRA_PROVISIONING_SUPPORT_URL));
    309         builder.setDeviceAdminIconFilePath(bundle.getString(
    310                 EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_ICON_URI));
    311         builder.setAccountToMigrate(getObjectAttrFromPersistableBundle(bundle,
    312                 EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE, StoreUtils::persistableBundleToAccount));
    313         builder.setProvisioningAction(bundle.getString(TAG_PROVISIONING_ACTION));
    314         builder.setMainColor(getIntegerAttrFromPersistableBundle(bundle,
    315                 EXTRA_PROVISIONING_MAIN_COLOR));
    316         builder.setDeviceAdminDownloadInfo(getObjectAttrFromPersistableBundle(bundle,
    317                 TAG_PACKAGE_DOWNLOAD_INFO, PackageDownloadInfo::fromPersistableBundle));
    318         builder.setDisclaimersParam(getObjectAttrFromPersistableBundle(bundle,
    319                 EXTRA_PROVISIONING_DISCLAIMERS, DisclaimersParam::fromPersistableBundle));
    320         builder.setAdminExtrasBundle(bundle.getPersistableBundle(
    321                 EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE));
    322         builder.setStartedByTrustedSource(bundle.getBoolean(TAG_STARTED_BY_TRUSTED_SOURCE));
    323         builder.setIsNfc(bundle.getBoolean(TAG_IS_NFC));
    324         builder.setSkipEncryption(bundle.getBoolean(EXTRA_PROVISIONING_SKIP_ENCRYPTION));
    325         builder.setLeaveAllSystemAppsEnabled(bundle.getBoolean(
    326                 EXTRA_PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED));
    327         builder.setSkipUserSetup(bundle.getBoolean(EXTRA_PROVISIONING_SKIP_USER_SETUP));
    328         builder.setSkipUserConsent(bundle.getBoolean(EXTRA_PROVISIONING_SKIP_USER_CONSENT));
    329         builder.setKeepAccountMigrated(bundle.getBoolean(
    330                 EXTRA_PROVISIONING_KEEP_ACCOUNT_ON_MIGRATION));
    331         return builder;
    332     }
    333 
    334     @Override
    335     public String toString() {
    336         return "ProvisioningParams values: " + toPersistableBundle().toString();
    337     }
    338 
    339     /**
    340      * Saves the ProvisioningParams to the specified file.
    341      */
    342     public void save(File file) {
    343         ProvisionLogger.logd("Saving ProvisioningParams to " + file);
    344         try (FileOutputStream stream = new FileOutputStream(file)) {
    345             XmlSerializer serializer = new FastXmlSerializer();
    346             serializer.setOutput(stream, StandardCharsets.UTF_8.name());
    347             serializer.startDocument(null, true);
    348             serializer.startTag(null, TAG_PROVISIONING_PARAMS);
    349             toPersistableBundle().saveToXml(serializer);
    350             serializer.endTag(null, TAG_PROVISIONING_PARAMS);
    351             serializer.endDocument();
    352         } catch (IOException | XmlPullParserException e) {
    353             ProvisionLogger.loge("Caught exception while trying to save Provisioning Params to "
    354                     + " file " + file, e);
    355             file.delete();
    356         }
    357     }
    358 
    359     public void cleanUp() {
    360         if (disclaimersParam != null) {
    361             disclaimersParam.cleanUp();
    362         }
    363         if (deviceAdminIconFilePath != null) {
    364             new File(deviceAdminIconFilePath).delete();
    365         }
    366     }
    367 
    368     /**
    369      * Loads the ProvisioningParams From the specified file.
    370      */
    371     public static ProvisioningParams load(File file) {
    372         if (!file.exists()) {
    373             return null;
    374         }
    375         ProvisionLogger.logd("Loading ProvisioningParams from " + file);
    376         try (FileInputStream stream = new FileInputStream(file)) {
    377             XmlPullParser parser = Xml.newPullParser();
    378             parser.setInput(stream, null);
    379             return load(parser);
    380         } catch (IOException | XmlPullParserException e) {
    381             ProvisionLogger.loge("Caught exception while trying to load the provisioning params"
    382                     + " from file " + file, e);
    383             return null;
    384         }
    385     }
    386 
    387     private static ProvisioningParams load(XmlPullParser parser) throws XmlPullParserException,
    388             IOException {
    389         int type;
    390         int outerDepth = parser.getDepth();
    391         while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
    392                 && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
    393              if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
    394                  continue;
    395              }
    396              String tag = parser.getName();
    397              switch (tag) {
    398                  case TAG_PROVISIONING_PARAMS:
    399                      return createBuilderFromPersistableBundle(
    400                              PersistableBundle.restoreFromXml(parser)).build();
    401              }
    402         }
    403         return new Builder().build();
    404     }
    405 
    406     public final static class Builder {
    407         private long mProvisioningId;
    408         private String mTimeZone;
    409         private long mLocalTime = DEFAULT_LOCAL_TIME;
    410         private Locale mLocale;
    411         private WifiInfo mWifiInfo;
    412         private String mDeviceAdminPackageName;
    413         private ComponentName mDeviceAdminComponentName;
    414         private String mDeviceAdminLabel;
    415         private String mOrganizationName;
    416         private String mSupportUrl;
    417         private String mDeviceAdminIconFilePath;
    418         private Account mAccountToMigrate;
    419         private String mProvisioningAction;
    420         private Integer mMainColor = DEFAULT_MAIN_COLOR;
    421         private PackageDownloadInfo mDeviceAdminDownloadInfo;
    422         private DisclaimersParam mDisclaimersParam;
    423         private PersistableBundle mAdminExtrasBundle;
    424         private boolean mStartedByTrustedSource = DEFAULT_STARTED_BY_TRUSTED_SOURCE;
    425         private boolean mIsNfc = DEFAULT_IS_NFC;
    426         private boolean mLeaveAllSystemAppsEnabled = DEFAULT_LEAVE_ALL_SYSTEM_APPS_ENABLED;
    427         private boolean mSkipEncryption = DEFAULT_EXTRA_PROVISIONING_SKIP_ENCRYPTION;
    428         private boolean mSkipUserConsent = DEFAULT_EXTRA_PROVISIONING_SKIP_USER_CONSENT;
    429         private boolean mSkipUserSetup = DEFAULT_SKIP_USER_SETUP;
    430         private boolean mKeepAccountMigrated = DEFAULT_EXTRA_PROVISIONING_KEEP_ACCOUNT_MIGRATED;
    431 
    432         public Builder setProvisioningId(long provisioningId) {
    433             mProvisioningId = provisioningId;
    434             return this;
    435         }
    436 
    437         public Builder setTimeZone(String timeZone) {
    438             mTimeZone = timeZone;
    439             return this;
    440         }
    441 
    442         public Builder setLocalTime(long localTime) {
    443             mLocalTime = localTime;
    444             return this;
    445         }
    446 
    447         public Builder setLocale(Locale locale) {
    448             mLocale = locale;
    449             return this;
    450         }
    451 
    452         public Builder setWifiInfo(WifiInfo wifiInfo) {
    453             mWifiInfo = wifiInfo;
    454             return this;
    455         }
    456 
    457         @Deprecated
    458         public Builder setDeviceAdminPackageName(String deviceAdminPackageName) {
    459             mDeviceAdminPackageName = deviceAdminPackageName;
    460             return this;
    461         }
    462 
    463         public Builder setDeviceAdminComponentName(ComponentName deviceAdminComponentName) {
    464             mDeviceAdminComponentName = deviceAdminComponentName;
    465             return this;
    466         }
    467 
    468         public Builder setDeviceAdminLabel(String deviceAdminLabel) {
    469             mDeviceAdminLabel = deviceAdminLabel;
    470             return this;
    471         }
    472 
    473         public Builder setOrganizationName(String organizationName) {
    474             mOrganizationName = organizationName;
    475             return this;
    476         }
    477 
    478         public Builder setSupportUrl(String supportUrl) {
    479             mSupportUrl = supportUrl;
    480             return this;
    481         }
    482 
    483         public Builder setDeviceAdminIconFilePath(String deviceAdminIconFilePath) {
    484             mDeviceAdminIconFilePath = deviceAdminIconFilePath;
    485             return this;
    486         }
    487 
    488         public Builder setAccountToMigrate(Account accountToMigrate) {
    489             mAccountToMigrate = accountToMigrate;
    490             return this;
    491         }
    492 
    493         public Builder setProvisioningAction(String provisioningAction) {
    494             mProvisioningAction = provisioningAction;
    495             return this;
    496         }
    497 
    498         public Builder setMainColor(Integer mainColor) {
    499             mMainColor = mainColor;
    500             return this;
    501         }
    502 
    503         public Builder setDeviceAdminDownloadInfo(PackageDownloadInfo deviceAdminDownloadInfo) {
    504             mDeviceAdminDownloadInfo = deviceAdminDownloadInfo;
    505             return this;
    506         }
    507 
    508         public Builder setDisclaimersParam(DisclaimersParam disclaimersParam) {
    509             mDisclaimersParam = disclaimersParam;
    510             return this;
    511         }
    512 
    513         public Builder setAdminExtrasBundle(PersistableBundle adminExtrasBundle) {
    514             mAdminExtrasBundle = adminExtrasBundle;
    515             return this;
    516         }
    517 
    518         public Builder setStartedByTrustedSource(boolean startedByTrustedSource) {
    519             mStartedByTrustedSource = startedByTrustedSource;
    520             return this;
    521         }
    522 
    523         public Builder setIsNfc(boolean isNfc) {
    524             mIsNfc = isNfc;
    525             return this;
    526         }
    527 
    528 
    529         public Builder setLeaveAllSystemAppsEnabled(boolean leaveAllSystemAppsEnabled) {
    530             mLeaveAllSystemAppsEnabled = leaveAllSystemAppsEnabled;
    531             return this;
    532         }
    533 
    534         public Builder setSkipEncryption(boolean skipEncryption) {
    535             mSkipEncryption = skipEncryption;
    536             return this;
    537         }
    538 
    539         public Builder setSkipUserConsent(boolean skipUserConsent) {
    540             mSkipUserConsent = skipUserConsent;
    541             return this;
    542         }
    543 
    544         public Builder setSkipUserSetup(boolean skipUserSetup) {
    545             mSkipUserSetup = skipUserSetup;
    546             return this;
    547         }
    548 
    549         public Builder setKeepAccountMigrated(boolean keepAccountMigrated) {
    550             mKeepAccountMigrated = keepAccountMigrated;
    551             return this;
    552         }
    553 
    554         public ProvisioningParams build() {
    555             return new ProvisioningParams(this);
    556         }
    557 
    558         public static Builder builder() {
    559             return new Builder();
    560         }
    561     }
    562 }
    563