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

Commit 1d7e9062 authored by Nick Pelly's avatar Nick Pelly Committed by Martijn Coenen
Browse files

First cut at Bluetooth Beam

Change-Id: I37e5759515ff8779095b6d8adf5ad9c456fa8529
parent 30bd284c
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package android.nfc;

import android.nfc.NdefMessage;
import android.net.Uri;

/**
 * @hide
@@ -24,5 +25,7 @@ import android.nfc.NdefMessage;
interface INdefPushCallback
{
    NdefMessage createMessage();
    Uri getUri();
    String getMimeType();
    void onNdefPushComplete();
}
+39 −1
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package android.nfc;

import android.app.Activity;
import android.app.Application;
import android.net.Uri;
import android.os.Bundle;
import android.os.RemoteException;
import android.util.Log;
@@ -107,6 +108,8 @@ public final class NfcActivityManager extends INdefPushCallback.Stub
        NdefMessage ndefMessage = null;  // static NDEF message
        NfcAdapter.CreateNdefMessageCallback ndefMessageCallback = null;
        NfcAdapter.OnNdefPushCompleteCallback onNdefPushCompleteCallback = null;
        Uri uri = null;
        String mimeType = null;
        public NfcActivityState(Activity activity) {
            if (activity.getWindow().isDestroyed()) {
                throw new IllegalStateException("activity is already destroyed");
@@ -121,12 +124,14 @@ public final class NfcActivityManager extends INdefPushCallback.Stub
            ndefMessage = null;
            ndefMessageCallback = null;
            onNdefPushCompleteCallback = null;
            uri = null;
            mimeType = null;
        }
        @Override
        public String toString() {
            StringBuilder s = new StringBuilder("[").append(" ");
            s.append(ndefMessage).append(" ").append(ndefMessageCallback).append(" ");
            s.append(onNdefPushCompleteCallback).append("]");
            s.append(onNdefPushCompleteCallback).append(" ").append(uri).append("]");
            return s.toString();
        }
    }
@@ -175,6 +180,19 @@ public final class NfcActivityManager extends INdefPushCallback.Stub
        mDefaultEvent = new NfcEvent(mAdapter);
    }

    public void setNdefPushContentUri(Activity activity, String mimeType, Uri uri) {
        boolean isResumed;
        synchronized (NfcActivityManager.this) {
            NfcActivityState state = getActivityState(activity);
            state.uri = uri;
            state.mimeType = mimeType;
            isResumed = state.resumed;
        }
        if (isResumed) {
            requestNfcServiceCallback(true);
        }
    }

    public void setNdefPushMessage(Activity activity, NdefMessage message) {
        boolean isResumed;
        synchronized (NfcActivityManager.this) {
@@ -247,6 +265,26 @@ public final class NfcActivityManager extends INdefPushCallback.Stub
        }
    }

    /** Callback from NFC service, usually on binder thread */
    @Override
    public Uri getUri() {
        synchronized (NfcActivityManager.this) {
            NfcActivityState state = findResumedActivityState();
            if (state == null) return null;

            return state.uri;
        }
    }
    /** Callback from NFC service, usually on binder thread */
    @Override
    public String getMimeType() {
        synchronized (NfcActivityManager.this) {
            NfcActivityState state = findResumedActivityState();
            if (state == null) return null;

            return state.mimeType;
        }
    }
    /** Callback from NFC service, usually on binder thread */
    @Override
    public void onNdefPushComplete() {
+13 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import android.content.Context;
import android.content.IntentFilter;
import android.content.pm.IPackageManager;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.nfc.tech.MifareClassic;
import android.nfc.tech.Ndef;
import android.nfc.tech.NfcA;
@@ -555,6 +556,18 @@ public final class NfcAdapter {
        }
    }

    //TODO: Consider a callback alternative
    //TOOD: See if we get rid of mimeType
    //TODO: make sure NFC service has permission for URI
    //TODO: javadoc
    /** @hide */
    public void setBeamPushUri(String mimeType, Uri uri, Activity activity) {
        if (activity == null) {
            throw new NullPointerException("activity cannot be null");
        }
        mNfcActivityManager.setNdefPushContentUri(activity, mimeType, uri);
    }

    /**
     * Set a static {@link NdefMessage} to send using Android Beam (TM).
     *