Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 50d0bcb4 authored by Nick Pelly's avatar Nick Pelly Committed by Android (Google) Code Review
Browse files

Merge "Support for TagLostException (API)." into gingerbread

parents 597fa828 bf34061b
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -17,6 +17,7 @@
package android.nfc;
package android.nfc;


import android.nfc.NdefMessage;
import android.nfc.NdefMessage;
import android.nfc.TransceiveResult;


/**
/**
 * @hide
 * @hide
@@ -30,7 +31,7 @@ interface INfcTag
    byte[] getUid(int nativeHandle);
    byte[] getUid(int nativeHandle);
    boolean isNdef(int nativeHandle);
    boolean isNdef(int nativeHandle);
    boolean isPresent(int nativeHandle);
    boolean isPresent(int nativeHandle);
    byte[] transceive(int nativeHandle, in byte[] data, boolean raw);
    TransceiveResult transceive(int nativeHandle, in byte[] data, boolean raw);


    int getLastError(int nativeHandle);
    int getLastError(int nativeHandle);


+29 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2011, The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.nfc;

import java.io.IOException;

public class TagLostException extends IOException {
    public TagLostException() {
        super();
    }

    public TagLostException(String message) {
        super(message);
    }
}
+19 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2011 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.nfc;

parcelable TransceiveResult;
+90 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2011, The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.nfc;

import android.os.Parcel;
import android.os.Parcelable;

/**
 * Class used to pipe transceive result from the NFC service.
 *
 * @hide
 */
public final class TransceiveResult implements Parcelable {
    private final boolean mTagLost;
    private final boolean mSuccess;
    private final byte[] mResponseData;

    public TransceiveResult(final boolean success, final boolean tagIsLost,
            final byte[] data) {
        mSuccess = success;
        mTagLost = tagIsLost;
        mResponseData = data;
    }

    public boolean isSuccessful() {
        return mSuccess;
    }

    public boolean isTagLost() {
        return mTagLost;
    }

    public byte[] getResponseData() {
        return mResponseData;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(mSuccess ? 1 : 0);
        dest.writeInt(mTagLost ? 1 : 0);
        if (mSuccess) {
            dest.writeInt(mResponseData.length);
            dest.writeByteArray(mResponseData);
        }
    }

    public static final Parcelable.Creator<TransceiveResult> CREATOR =
            new Parcelable.Creator<TransceiveResult>() {
        @Override
        public TransceiveResult createFromParcel(Parcel in) {
            boolean success = (in.readInt() == 1) ? true : false;
            boolean tagLost = (in.readInt() == 1) ? true : false;
            byte[] responseData;

            if (success) {
                int responseLength = in.readInt();
                responseData = new byte[responseLength];
                in.readByteArray(responseData);
            } else {
                responseData = null;
            }
            return new TransceiveResult(success, tagLost, responseData);
        }

        @Override
        public TransceiveResult[] newArray(int size) {
            return new TransceiveResult[size];
        }
    };

}
+15 −3
Original line number Original line Diff line number Diff line
@@ -21,8 +21,10 @@ import java.io.IOException;
import android.nfc.INfcAdapter;
import android.nfc.INfcAdapter;
import android.nfc.INfcTag;
import android.nfc.INfcTag;
import android.nfc.NfcAdapter;
import android.nfc.NfcAdapter;
import android.nfc.TransceiveResult;
import android.nfc.Tag;
import android.nfc.Tag;
import android.nfc.ErrorCodes;
import android.nfc.ErrorCodes;
import android.nfc.TagLostException;
import android.os.RemoteException;
import android.os.RemoteException;
import android.util.Log;
import android.util.Log;


@@ -165,11 +167,21 @@ import android.util.Log;
        checkConnected();
        checkConnected();


        try {
        try {
            byte[] response = mTagService.transceive(mTag.getServiceHandle(), data, raw);
            TransceiveResult result = mTagService.transceive(mTag.getServiceHandle(), data, raw);
            if (response == null) {
            if (result == null) {
                throw new IOException("transceive failed");
                throw new IOException("transceive failed");
            } else {
                if (result.isSuccessful()) {
                    return result.getResponseData();
                } else {
                    if (result.isTagLost()) {
                        throw new TagLostException("Tag was lost.");
                    }
                    else {
                        throw new IOException("transceive failed");
                    }
                }
            }
            }
            return response;
        } catch (RemoteException e) {
        } catch (RemoteException e) {
            Log.e(TAG, "NFC service dead", e);
            Log.e(TAG, "NFC service dead", e);
            throw new IOException("NFC service died");
            throw new IOException("NFC service died");
Loading