Skip to content

Commit f47fcf7

Browse files
Martijn CoenenAndroid (Google) Code Review
authored andcommitted
Merge "First cut at Bluetooth Beam"
2 parents 7c8fd15 + 1d7e906 commit f47fcf7

File tree

3 files changed

+55
-1
lines changed

3 files changed

+55
-1
lines changed

core/java/android/nfc/INdefPushCallback.aidl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,15 @@
1717
package android.nfc;
1818

1919
import android.nfc.NdefMessage;
20+
import android.net.Uri;
2021

2122
/**
2223
* @hide
2324
*/
2425
interface INdefPushCallback
2526
{
2627
NdefMessage createMessage();
28+
Uri getUri();
29+
String getMimeType();
2730
void onNdefPushComplete();
2831
}

core/java/android/nfc/NfcActivityManager.java

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import android.app.Activity;
2020
import android.app.Application;
21+
import android.net.Uri;
2122
import android.os.Bundle;
2223
import android.os.RemoteException;
2324
import android.util.Log;
@@ -107,6 +108,8 @@ class NfcActivityState {
107108
NdefMessage ndefMessage = null; // static NDEF message
108109
NfcAdapter.CreateNdefMessageCallback ndefMessageCallback = null;
109110
NfcAdapter.OnNdefPushCompleteCallback onNdefPushCompleteCallback = null;
111+
Uri uri = null;
112+
String mimeType = null;
110113
public NfcActivityState(Activity activity) {
111114
if (activity.getWindow().isDestroyed()) {
112115
throw new IllegalStateException("activity is already destroyed");
@@ -121,12 +124,14 @@ public void destroy() {
121124
ndefMessage = null;
122125
ndefMessageCallback = null;
123126
onNdefPushCompleteCallback = null;
127+
uri = null;
128+
mimeType = null;
124129
}
125130
@Override
126131
public String toString() {
127132
StringBuilder s = new StringBuilder("[").append(" ");
128133
s.append(ndefMessage).append(" ").append(ndefMessageCallback).append(" ");
129-
s.append(onNdefPushCompleteCallback).append("]");
134+
s.append(onNdefPushCompleteCallback).append(" ").append(uri).append("]");
130135
return s.toString();
131136
}
132137
}
@@ -175,6 +180,19 @@ public NfcActivityManager(NfcAdapter adapter) {
175180
mDefaultEvent = new NfcEvent(mAdapter);
176181
}
177182

183+
public void setNdefPushContentUri(Activity activity, String mimeType, Uri uri) {
184+
boolean isResumed;
185+
synchronized (NfcActivityManager.this) {
186+
NfcActivityState state = getActivityState(activity);
187+
state.uri = uri;
188+
state.mimeType = mimeType;
189+
isResumed = state.resumed;
190+
}
191+
if (isResumed) {
192+
requestNfcServiceCallback(true);
193+
}
194+
}
195+
178196
public void setNdefPushMessage(Activity activity, NdefMessage message) {
179197
boolean isResumed;
180198
synchronized (NfcActivityManager.this) {
@@ -247,6 +265,26 @@ public NdefMessage createMessage() {
247265
}
248266
}
249267

268+
/** Callback from NFC service, usually on binder thread */
269+
@Override
270+
public Uri getUri() {
271+
synchronized (NfcActivityManager.this) {
272+
NfcActivityState state = findResumedActivityState();
273+
if (state == null) return null;
274+
275+
return state.uri;
276+
}
277+
}
278+
/** Callback from NFC service, usually on binder thread */
279+
@Override
280+
public String getMimeType() {
281+
synchronized (NfcActivityManager.this) {
282+
NfcActivityState state = findResumedActivityState();
283+
if (state == null) return null;
284+
285+
return state.mimeType;
286+
}
287+
}
250288
/** Callback from NFC service, usually on binder thread */
251289
@Override
252290
public void onNdefPushComplete() {

core/java/android/nfc/NfcAdapter.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import android.content.IntentFilter;
2929
import android.content.pm.IPackageManager;
3030
import android.content.pm.PackageManager;
31+
import android.net.Uri;
3132
import android.nfc.tech.MifareClassic;
3233
import android.nfc.tech.Ndef;
3334
import android.nfc.tech.NfcA;
@@ -555,6 +556,18 @@ public boolean disable() {
555556
}
556557
}
557558

559+
//TODO: Consider a callback alternative
560+
//TOOD: See if we get rid of mimeType
561+
//TODO: make sure NFC service has permission for URI
562+
//TODO: javadoc
563+
/** @hide */
564+
public void setBeamPushUri(String mimeType, Uri uri, Activity activity) {
565+
if (activity == null) {
566+
throw new NullPointerException("activity cannot be null");
567+
}
568+
mNfcActivityManager.setNdefPushContentUri(activity, mimeType, uri);
569+
}
570+
558571
/**
559572
* Set a static {@link NdefMessage} to send using Android Beam (TM).
560573
*

0 commit comments

Comments
 (0)