update andriod beam demo.
add action item to go to Android Beam settings,
add help info, and add callback for on-push-complete
Change-Id: I2e0e8b9d6e66c507d62012e809ee0c01e1298f20
diff --git a/samples/AndroidBeamDemo/Android.mk b/samples/AndroidBeamDemo/Android.mk
index 7b36dd9..f125f0f 100644
--- a/samples/AndroidBeamDemo/Android.mk
+++ b/samples/AndroidBeamDemo/Android.mk
@@ -10,6 +10,4 @@
LOCAL_SDK_VERSION := current
-LOCAL_PROGUARD_FLAG_FILES := proguard.flags
-
include $(BUILD_PACKAGE)
diff --git a/samples/AndroidBeamDemo/res/drawable-hdpi/ic_menu_preferences.png b/samples/AndroidBeamDemo/res/drawable-hdpi/ic_menu_preferences.png
new file mode 100644
index 0000000..5321f82
--- /dev/null
+++ b/samples/AndroidBeamDemo/res/drawable-hdpi/ic_menu_preferences.png
Binary files differ
diff --git a/samples/AndroidBeamDemo/res/drawable-mdpi/ic_menu_preferences.png b/samples/AndroidBeamDemo/res/drawable-mdpi/ic_menu_preferences.png
new file mode 100644
index 0000000..ccc50e6
--- /dev/null
+++ b/samples/AndroidBeamDemo/res/drawable-mdpi/ic_menu_preferences.png
Binary files differ
diff --git a/samples/AndroidBeamDemo/res/drawable-xhdpi/ic_menu_preferences.png b/samples/AndroidBeamDemo/res/drawable-xhdpi/ic_menu_preferences.png
new file mode 100644
index 0000000..02cfbad
--- /dev/null
+++ b/samples/AndroidBeamDemo/res/drawable-xhdpi/ic_menu_preferences.png
Binary files differ
diff --git a/samples/AndroidBeamDemo/res/layout/main.xml b/samples/AndroidBeamDemo/res/layout/main.xml
index dce6169..eacb68e 100644
--- a/samples/AndroidBeamDemo/res/layout/main.xml
+++ b/samples/AndroidBeamDemo/res/layout/main.xml
@@ -21,4 +21,7 @@
android:id="@+id/textView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
+ android:text="@string/info"
+ android:padding="10dp"
+ android:textSize="18sp"
/>
diff --git a/samples/AndroidBeamDemo/res/menu/options.xml b/samples/AndroidBeamDemo/res/menu/options.xml
new file mode 100644
index 0000000..8012d8e
--- /dev/null
+++ b/samples/AndroidBeamDemo/res/menu/options.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:id="@+id/menu_settings"
+ android:icon="@drawable/ic_menu_preferences"
+ android:showAsAction="ifRoom"
+ android:title="@string/menu_settings" />
+</menu>
\ No newline at end of file
diff --git a/samples/AndroidBeamDemo/res/values/strings.xml b/samples/AndroidBeamDemo/res/values/strings.xml
index ff4492f..68ed73f 100644
--- a/samples/AndroidBeamDemo/res/values/strings.xml
+++ b/samples/AndroidBeamDemo/res/values/strings.xml
@@ -1,4 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Beam</string>
+ <string name="info">Ensure that Android Beam is enabled by turning it on in
+ the system Settings (select the setting icon above), then place this device up
+ against another Android device that supports Android Beam to send a
+ message.</string>
+ <string name="menu_settings">Android Beam settings</string>
</resources>
diff --git a/samples/AndroidBeamDemo/src/com/example/android/beam/Beam.java b/samples/AndroidBeamDemo/src/com/example/android/beam/Beam.java
index 17ec325..0cc5f89 100644
--- a/samples/AndroidBeamDemo/src/com/example/android/beam/Beam.java
+++ b/samples/AndroidBeamDemo/src/com/example/android/beam/Beam.java
@@ -22,38 +22,57 @@
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.nfc.NfcAdapter.CreateNdefMessageCallback;
+import android.nfc.NfcAdapter.OnNdefPushCompleteCallback;
import android.nfc.NfcEvent;
import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
import android.os.Parcelable;
+import android.provider.Settings;
+import android.text.format.Time;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Toast;
+
import java.nio.charset.Charset;
-public class Beam extends Activity implements CreateNdefMessageCallback {
+public class Beam extends Activity implements CreateNdefMessageCallback,
+ OnNdefPushCompleteCallback {
NfcAdapter mNfcAdapter;
- TextView textView;
+ TextView mInfoText;
+ private static final int MESSAGE_SENT = 1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
- TextView textView = (TextView) findViewById(R.id.textView);
+
+ mInfoText = (TextView) findViewById(R.id.textView);
// Check for available NFC Adapter
mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (mNfcAdapter == null) {
- Toast.makeText(this, "NFC is not available", Toast.LENGTH_LONG).show();
- finish();
- return;
+ mInfoText = (TextView) findViewById(R.id.textView);
+ mInfoText.setText("NFC is not available on this device.");
}
- // Register callback
+ // Register callback to set NDEF message
mNfcAdapter.setNdefPushMessageCallback(this, this);
+ // Register callback to listen for message-sent success
+ mNfcAdapter.setOnNdefPushCompleteCallback(this, this);
}
+
+ /**
+ * Implementation for the CreateNdefMessageCallback interface
+ */
@Override
public NdefMessage createNdefMessage(NfcEvent event) {
- String text = ("Beam me up, Android!\n\n" +
- "Beam Time: " + System.currentTimeMillis());
+ Time time = new Time();
+ time.setToNow();
+ String text = ("Beam me up!\n\n" +
+ "Beam Time: " + time.format("%H:%M:%S"));
NdefMessage msg = new NdefMessage(
new NdefRecord[] { createMimeRecord(
"application/com.example.android.beam", text.getBytes())
@@ -70,6 +89,28 @@
return msg;
}
+ /**
+ * Implementation for the OnNdefPushCompleteCallback interface
+ */
+ @Override
+ public void onNdefPushComplete(NfcEvent arg0) {
+ // A handler is needed to send messages to the activity when this
+ // callback occurs, because it happens from a binder thread
+ mHandler.obtainMessage(MESSAGE_SENT).sendToTarget();
+ }
+
+ /** This handler receives a message from onNdefPushComplete */
+ private final Handler mHandler = new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case MESSAGE_SENT:
+ Toast.makeText(getApplicationContext(), "Message sent!", Toast.LENGTH_LONG).show();
+ break;
+ }
+ }
+ };
+
@Override
public void onResume() {
super.onResume();
@@ -89,13 +130,12 @@
* Parses the NDEF Message from the intent and prints to the TextView
*/
void processIntent(Intent intent) {
- textView = (TextView) findViewById(R.id.textView);
Parcelable[] rawMsgs = intent.getParcelableArrayExtra(
NfcAdapter.EXTRA_NDEF_MESSAGES);
// only one message sent during the beam
NdefMessage msg = (NdefMessage) rawMsgs[0];
// record 0 contains the MIME type, record 1 is the AAR, if present
- textView.setText(new String(msg.getRecords()[0].getPayload()));
+ mInfoText.setText(new String(msg.getRecords()[0].getPayload()));
}
/**
@@ -109,4 +149,27 @@
NdefRecord.TNF_MIME_MEDIA, mimeBytes, new byte[0], payload);
return mimeRecord;
}
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ // If NFC is not available, we won't be needing this menu
+ if (mNfcAdapter == null) {
+ return super.onCreateOptionsMenu(menu);
+ }
+ MenuInflater inflater = getMenuInflater();
+ inflater.inflate(R.menu.options, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.menu_settings:
+ Intent intent = new Intent(Settings.ACTION_NFCSHARING_SETTINGS);
+ startActivity(intent);
+ return true;
+ default:
+ return super.onOptionsItemSelected(item);
+ }
+ }
}