summaryrefslogtreecommitdiffstats
path: root/src/com/android
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android')
-rw-r--r--src/com/android/nfc/P2pEventManager.java9
-rwxr-xr-xsrc/com/android/nfc/P2pLinkManager.java39
-rw-r--r--src/com/android/nfc/handover/HandoverServer.java5
3 files changed, 48 insertions, 5 deletions
diff --git a/src/com/android/nfc/P2pEventManager.java b/src/com/android/nfc/P2pEventManager.java
index 468aeaff..c68fae80 100644
--- a/src/com/android/nfc/P2pEventManager.java
+++ b/src/com/android/nfc/P2pEventManager.java
@@ -131,6 +131,15 @@ public class P2pEventManager implements P2pEventListener, SendUi.Callback {
}
@Override
+ public void onP2pHandoverBusy() {
+ mNfcService.playSound(NfcService.SOUND_ERROR);
+ mVibrator.vibrate(VIBRATION_PATTERN, -1);
+ mSendUi.finishAndToast(SendUi.FINISH_SCALE_UP, mContext.getString(R.string.beam_busy));
+ mSending = false;
+ mNdefSent = false;
+ }
+
+ @Override
public void onP2pReceiveComplete(boolean playSound) {
mVibrator.vibrate(VIBRATION_PATTERN, -1);
if (playSound) mNfcService.playSound(NfcService.SOUND_END);
diff --git a/src/com/android/nfc/P2pLinkManager.java b/src/com/android/nfc/P2pLinkManager.java
index 0effe4e3..aa4ec25e 100755
--- a/src/com/android/nfc/P2pLinkManager.java
+++ b/src/com/android/nfc/P2pLinkManager.java
@@ -115,6 +115,11 @@ interface P2pEventListener {
public void onP2pHandoverNotSupported();
/**
+ * Called to indicate the device is busy with another handover transfer
+ */
+ public void onP2pHandoverBusy();
+
+ /**
* Called to indicate a receive was successful.
*/
public void onP2pReceiveComplete(boolean playSound);
@@ -179,6 +184,7 @@ class P2pLinkManager implements Handler.Callback, P2pEventListener.Callback {
static final int MSG_HANDOVER_NOT_SUPPORTED = 7;
static final int MSG_SHOW_CONFIRMATION_UI = 8;
static final int MSG_WAIT_FOR_LINK_TIMEOUT = 9;
+ static final int MSG_HANDOVER_BUSY = 10;
// values for mLinkState
static final int LINK_STATE_DOWN = 1;
@@ -202,6 +208,7 @@ class P2pLinkManager implements Handler.Callback, P2pEventListener.Callback {
static final int HANDOVER_SUCCESS = 0;
static final int HANDOVER_FAILURE = 1;
static final int HANDOVER_UNSUPPORTED = 2;
+ static final int HANDOVER_BUSY = 3;
final NdefPushServer mNdefPushServer;
final SnepServer mDefaultSnepServer;
@@ -610,6 +617,10 @@ class P2pLinkManager implements Handler.Callback, P2pEventListener.Callback {
mHandler.sendEmptyMessage(MSG_HANDOVER_NOT_SUPPORTED);
}
+ void onHandoverBusy() {
+ mHandler.sendEmptyMessage(MSG_HANDOVER_BUSY);
+ }
+
void onSendComplete(NdefMessage msg, long elapsedRealtime) {
// Make callbacks on UI thread
mHandler.sendEmptyMessage(MSG_SEND_COMPLETE);
@@ -760,7 +771,7 @@ class P2pLinkManager implements Handler.Callback, P2pEventListener.Callback {
BeamManager beamManager = BeamManager.getInstance();
if (beamManager.isBeamInProgress()) {
- return HANDOVER_FAILURE;
+ return HANDOVER_BUSY;
}
NdefMessage request = mHandoverDataParser.createHandoverRequestMessage();
@@ -782,12 +793,12 @@ class P2pLinkManager implements Handler.Callback, P2pEventListener.Callback {
return HANDOVER_UNSUPPORTED;
}
- if (beamManager.startBeamSend(mContext,
+ if (!beamManager.startBeamSend(mContext,
mHandoverDataParser.getOutgoingHandoverData(response), uris, userHandle)) {
- return HANDOVER_SUCCESS;
+ return HANDOVER_BUSY;
}
- return HANDOVER_FAILURE;
+ return HANDOVER_SUCCESS;
}
int doSnepProtocol(NdefMessage msg) throws IOException {
@@ -835,6 +846,10 @@ class P2pLinkManager implements Handler.Callback, P2pEventListener.Callback {
result = false;
onHandoverUnsupported();
break;
+ case HANDOVER_BUSY:
+ result = false;
+ onHandoverBusy();
+ break;
}
} catch (IOException e) {
result = false;
@@ -880,6 +895,11 @@ class P2pLinkManager implements Handler.Callback, P2pEventListener.Callback {
public void onHandoverRequestReceived() {
onReceiveHandover();
}
+
+ @Override
+ public void onHandoverBusy() {
+ onHandoverBusy();
+ }
};
final NdefPushServer.Callback mNppCallback = new NdefPushServer.Callback() {
@@ -1018,6 +1038,17 @@ class P2pLinkManager implements Handler.Callback, P2pEventListener.Callback {
}
}
break;
+ case MSG_HANDOVER_BUSY:
+ synchronized (P2pLinkManager.this) {
+ mSendTask = null;
+
+ if (mLinkState == LINK_STATE_DOWN || mSendState != SEND_STATE_SENDING) {
+ break;
+ }
+ mSendState = SEND_STATE_NOTHING_TO_SEND;
+ if (DBG) Log.d(TAG, "onP2pHandoverBusy()");
+ mEventListener.onP2pHandoverBusy();
+ }
}
return true;
}
diff --git a/src/com/android/nfc/handover/HandoverServer.java b/src/com/android/nfc/handover/HandoverServer.java
index 56036d82..23ac1d9d 100644
--- a/src/com/android/nfc/handover/HandoverServer.java
+++ b/src/com/android/nfc/handover/HandoverServer.java
@@ -52,6 +52,7 @@ public final class HandoverServer {
public interface Callback {
void onHandoverRequestReceived();
+ void onHandoverBusy();
}
public HandoverServer(Context context, int sap, HandoverDataParser manager, Callback callback) {
@@ -203,6 +204,7 @@ public final class HandoverServer {
BeamManager beamManager = BeamManager.getInstance();
if (beamManager.isBeamInProgress()) {
+ mCallback.onHandoverBusy();
break;
}
@@ -227,7 +229,8 @@ public final class HandoverServer {
// We're done
mCallback.onHandoverRequestReceived();
if (!beamManager.startBeamReceive(mContext, handoverData.handoverData)) {
- break;
+ mCallback.onHandoverBusy();
+ break;
}
// We can process another handover transfer
byteStream = new ByteArrayOutputStream();