17079df5a3fb155947004843ee8ec25b36127e3edSteven Ng/*
27079df5a3fb155947004843ee8ec25b36127e3edSteven Ng * Copyright 2016, The Android Open Source Project
37079df5a3fb155947004843ee8ec25b36127e3edSteven Ng *
47079df5a3fb155947004843ee8ec25b36127e3edSteven Ng * Licensed under the Apache License, Version 2.0 (the "License");
57079df5a3fb155947004843ee8ec25b36127e3edSteven Ng * you may not use this file except in compliance with the License.
67079df5a3fb155947004843ee8ec25b36127e3edSteven Ng * You may obtain a copy of the License at
77079df5a3fb155947004843ee8ec25b36127e3edSteven Ng *
87079df5a3fb155947004843ee8ec25b36127e3edSteven Ng *     http://www.apache.org/licenses/LICENSE-2.0
97079df5a3fb155947004843ee8ec25b36127e3edSteven Ng *
107079df5a3fb155947004843ee8ec25b36127e3edSteven Ng * Unless required by applicable law or agreed to in writing, software
117079df5a3fb155947004843ee8ec25b36127e3edSteven Ng * distributed under the License is distributed on an "AS IS" BASIS,
127079df5a3fb155947004843ee8ec25b36127e3edSteven Ng * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137079df5a3fb155947004843ee8ec25b36127e3edSteven Ng * See the License for the specific language governing permissions and
147079df5a3fb155947004843ee8ec25b36127e3edSteven Ng * limitations under the License.
157079df5a3fb155947004843ee8ec25b36127e3edSteven Ng */
167079df5a3fb155947004843ee8ec25b36127e3edSteven Ng
177079df5a3fb155947004843ee8ec25b36127e3edSteven Ngpackage com.android.managedprovisioning.parser;
187079df5a3fb155947004843ee8ec25b36127e3edSteven Ng
197079df5a3fb155947004843ee8ec25b36127e3edSteven Ngimport static android.nfc.NfcAdapter.ACTION_NDEF_DISCOVERED;
207079df5a3fb155947004843ee8ec25b36127e3edSteven Ngimport static com.android.internal.util.Preconditions.checkNotNull;
217079df5a3fb155947004843ee8ec25b36127e3edSteven Ng
227079df5a3fb155947004843ee8ec25b36127e3edSteven Ngimport android.content.Context;
237079df5a3fb155947004843ee8ec25b36127e3edSteven Ngimport android.content.Intent;
247079df5a3fb155947004843ee8ec25b36127e3edSteven Ngimport android.support.annotation.VisibleForTesting;
259b26a5adee4f3d9f674c8b9dc1a185ea290dc624Benjamin Franz
267079df5a3fb155947004843ee8ec25b36127e3edSteven Ngimport com.android.managedprovisioning.common.IllegalProvisioningArgumentException;
277079df5a3fb155947004843ee8ec25b36127e3edSteven Ngimport com.android.managedprovisioning.common.Utils;
287079df5a3fb155947004843ee8ec25b36127e3edSteven Ngimport com.android.managedprovisioning.model.ProvisioningParams;
297079df5a3fb155947004843ee8ec25b36127e3edSteven Ng
307079df5a3fb155947004843ee8ec25b36127e3edSteven Ng/**
317079df5a3fb155947004843ee8ec25b36127e3edSteven Ng * This class can initialize a {@link ProvisioningParams} object from an intent.
327079df5a3fb155947004843ee8ec25b36127e3edSteven Ng *
337079df5a3fb155947004843ee8ec25b36127e3edSteven Ng * <p>A {@link ProvisioningParams} object stores various parameters both for the device owner
347079df5a3fb155947004843ee8ec25b36127e3edSteven Ng * provisioning and profile owner provisioning.
357079df5a3fb155947004843ee8ec25b36127e3edSteven Ng */
367079df5a3fb155947004843ee8ec25b36127e3edSteven Ngpublic class MessageParser implements ProvisioningDataParser {
377079df5a3fb155947004843ee8ec25b36127e3edSteven Ng
387079df5a3fb155947004843ee8ec25b36127e3edSteven Ng    private final Utils mUtils;
3990f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang    private final Context mContext;
407079df5a3fb155947004843ee8ec25b36127e3edSteven Ng
4190f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang    public MessageParser(Context context) {
4290f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang        this(context, new Utils());
437079df5a3fb155947004843ee8ec25b36127e3edSteven Ng    }
447079df5a3fb155947004843ee8ec25b36127e3edSteven Ng
457079df5a3fb155947004843ee8ec25b36127e3edSteven Ng    @VisibleForTesting
4690f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang    MessageParser(Context context, Utils utils) {
4790f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang        mContext = checkNotNull(context);
487079df5a3fb155947004843ee8ec25b36127e3edSteven Ng        mUtils = checkNotNull(utils);
497079df5a3fb155947004843ee8ec25b36127e3edSteven Ng    }
507079df5a3fb155947004843ee8ec25b36127e3edSteven Ng
517079df5a3fb155947004843ee8ec25b36127e3edSteven Ng    @Override
5290f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang    public ProvisioningParams parse(Intent provisioningIntent)
537079df5a3fb155947004843ee8ec25b36127e3edSteven Ng            throws IllegalProvisioningArgumentException {
5490f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang        return getParser(provisioningIntent).parse(provisioningIntent);
557079df5a3fb155947004843ee8ec25b36127e3edSteven Ng    }
567079df5a3fb155947004843ee8ec25b36127e3edSteven Ng
577079df5a3fb155947004843ee8ec25b36127e3edSteven Ng    @VisibleForTesting
587079df5a3fb155947004843ee8ec25b36127e3edSteven Ng    ProvisioningDataParser getParser(Intent provisioningIntent) {
597079df5a3fb155947004843ee8ec25b36127e3edSteven Ng        if (ACTION_NDEF_DISCOVERED.equals(provisioningIntent.getAction())) {
6090f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang            return new PropertiesProvisioningDataParser(mContext, mUtils);
617079df5a3fb155947004843ee8ec25b36127e3edSteven Ng        } else {
6290f58ca887207a527c80d7e9ccea97e205c960d4Victor Chang            return new ExtrasProvisioningDataParser(mContext, mUtils);
637079df5a3fb155947004843ee8ec25b36127e3edSteven Ng        }
647079df5a3fb155947004843ee8ec25b36127e3edSteven Ng    }
657079df5a3fb155947004843ee8ec25b36127e3edSteven Ng}
66