18f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen/*
28f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * Copyright (C) 2012 The Android Open Source Project
38f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen *
48f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * Licensed under the Apache License, Version 2.0 (the "License");
58f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * you may not use this file except in compliance with the License.
68f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * You may obtain a copy of the License at
78f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen *
88f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen *      http://www.apache.org/licenses/LICENSE-2.0
98f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen *
108f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * Unless required by applicable law or agreed to in writing, software
118f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * distributed under the License is distributed on an "AS IS" BASIS,
128f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * See the License for the specific language governing permissions and
148f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * limitations under the License.
158f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen */
168f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen
178f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenenpackage android.nfc.tech;
188f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen
198f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenenimport android.nfc.Tag;
208f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenenimport android.os.Bundle;
218f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenenimport android.os.RemoteException;
228f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen
238f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen/**
248f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * Provides access to tags containing just a barcode.
258f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen *
268f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * <p>Acquire an {@link NfcBarcode} object using {@link #get}.
278f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen *
288f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen */
298f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenenpublic final class NfcBarcode extends BasicTagTechnology {
308f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen
318f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen    /** Kovio Tags */
328f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen    public static final int TYPE_KOVIO = 1;
338f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen    public static final int TYPE_UNKNOWN = -1;
348f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen
358f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen    /** @hide */
368f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen    public static final String EXTRA_BARCODE_TYPE = "barcodetype";
378f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen
388f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen    private int mType;
398f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen
408f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen    /**
418f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen     * Get an instance of {@link NfcBarcode} for the given tag.
428f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen     *
438f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen     * <p>Returns null if {@link NfcBarcode} was not enumerated in {@link Tag#getTechList}.
448f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen     *
458f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen     * <p>Does not cause any RF activity and does not block.
468f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen     *
478f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen     * @param tag an NfcBarcode compatible tag
488f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen     * @return NfcBarcode object
498f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen     */
508f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen    public static NfcBarcode get(Tag tag) {
518f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen        if (!tag.hasTech(TagTechnology.NFC_BARCODE)) return null;
528f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen        try {
538f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen            return new NfcBarcode(tag);
548f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen        } catch (RemoteException e) {
558f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen            return null;
568f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen        }
578f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen    }
588f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen
598f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen    /**
608f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen     * Internal constructor, to be used by NfcAdapter
618f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen     * @hide
628f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen     */
638f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen    public NfcBarcode(Tag tag) throws RemoteException {
648f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen        super(tag, TagTechnology.NFC_BARCODE);
658f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen        Bundle extras = tag.getTechExtras(TagTechnology.NFC_BARCODE);
668f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen        if (extras != null) {
678f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen            mType = extras.getInt(EXTRA_BARCODE_TYPE);
688f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen        } else {
698f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen            throw new NullPointerException("NfcBarcode tech extras are null.");
708f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen        }
718f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen    }
728f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen
738f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen    /**
748f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen     * Returns the NFC Barcode tag type.
758f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen     *
76f8538594fe6ba6db3310da042597840601d78cdaMartijn Coenen     * <p>Currently only one of {@link #TYPE_KOVIO} or {@link #TYPE_UNKNOWN}.
778f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen     *
788f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen     * <p>Does not cause any RF activity and does not block.
798f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen     *
808f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen     * @return the NFC Barcode tag type
818f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen     */
828f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen    public int getType() {
838f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen        return mType;
848f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen    }
858f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen
868f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen    /**
878f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen     * Returns the barcode of an NfcBarcode tag.
888f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen     *
898f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen     * <p>Does not cause any RF activity and does not block.
908f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen     *
918f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen     * @return a byte array containing the barcode
928f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen     */
938f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen    public byte[] getBarcode() {
948f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen        switch (mType) {
958f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen            case TYPE_KOVIO:
968f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen                // For Kovio tags the barcode matches the ID
978f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen                return mTag.getId();
988f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen            default:
998f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen                return null;
1008f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen        }
1018f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen    }
1028f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen}
103