package mobilesecurity.ini.cmu.edu.oauthdemo;

import android.app.Activity;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.IntentFilter;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.os.Bundle;
import android.os.Parcelable;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

/**
 * Created by agadgil on 11/9/15.
 */
public class MainActivity extends Activity{

    Button selectDomain;
    TextView tagDetected;
    NfcAdapter nfcAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        selectDomain = (Button)findViewById(R.id.button_main_select_domain);
        tagDetected = (TextView)findViewById(R.id.textView_main_tag);
        selectDomain.setVisibility(View.INVISIBLE);

        nfcAdapter = NfcAdapter.getDefaultAdapter(this);

    }
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);

        if (intent.hasExtra(NfcAdapter.EXTRA_TAG)) {
            Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);

            // TODO: implement nfc message constructing logic here.

            byte[] payload = "CMU SV door access".getBytes();

            NdefRecord ndefRecord = NdefRecord.createExternal("CMU", "access", payload);
            //

            NdefMessage ndefMessage = new NdefMessage(new NdefRecord[]{ndefRecord});


            writeNdefMessage(tag, ndefMessage);
        }
    }

    public NdefMessage getNdefMessageFromIntent(Intent intent) {
        NdefMessage ndefMessage = null;
        Parcelable[] extra = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);

        if (extra != null && extra.length > 0) {
            ndefMessage = (NdefMessage) extra[0];
        }
        return ndefMessage;
    }

    protected void onResume() {
        super.onResume();
        Intent intent = new Intent(this, MainActivity.class).addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING);

        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);

        IntentFilter[] intentFilters = new IntentFilter[]{};

        nfcAdapter.enableForegroundDispatch(this, pendingIntent, intentFilters, null);
    }

    @Override
    protected void onPause() {
        super.onPause();

        nfcAdapter.disableForegroundDispatch(this);
    }

    private void writeNdefMessage(Tag tag, NdefMessage ndefMessage) {

        try {

            if (tag == null) {
                Toast.makeText(this, "Tag object cannot be null", Toast.LENGTH_SHORT).show();
                return;
            }

            Ndef ndef = Ndef.get(tag);

            if (ndef == null) {
                // format tag with the ndef format and writes the message.
                formatTag(tag, ndefMessage);
            } else {
                ndef.connect();

                if (!ndef.isWritable()) {
                    Toast.makeText(this, "Tag is not writable!", Toast.LENGTH_SHORT).show();

                    ndef.close();
                    return;
                }

                ndef.writeNdefMessage(ndefMessage);
                ndef.close();
                for (String abc : tag.getTechList()) {
                    Toast.makeText(this, abc, Toast.LENGTH_SHORT).show();
                }

                Toast.makeText(this, "Tag writen!", Toast.LENGTH_SHORT).show();

            }

        } catch (Exception e) {
            Log.e("writeNdefMessage", e.getMessage());
        }

    }
}

@@ -3671,10 +3671,653 @@
 %0A%0A    %7D%0A
+        private void formatTag(Tag tag, NdefMessage ndefMessage) %7B%0A        try %7B%0A%0A            NdefFormatable ndefFormatable = NdefFormatable.get(tag);%0A%0A            ;%0A%0A            if (ndefFormatable == null) %7B%0A                Toast.makeText(this, %22Tag is not ndef formatable!%22, Toast.LENGTH_SHORT).show();%0A                return;%0A            %7D%0A%0A%0A            ndefFormatable.connect();%0A            ndefFormatable.format(ndefMessage);%0A            ndefFormatable.close();%0A%0A            Toast.makeText(this, %22Tag writen!%22, Toast.LENGTH_SHORT).show();%0A%0A        %7D catch (Exception e) %7B%0A            Log.e(%22formatTag%22, e.getMessage());%0A        %7D%0A%0A    %7D%0A%0A
 %7D%0A

Update writeTag.java