1 /*
2  * Copyright (C) 2011 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.cts.verifier.nfc;
18 
19 import com.android.cts.verifier.PassFailButtons;
20 import com.android.cts.verifier.R;
21 
22 import android.app.Dialog;
23 import android.nfc.NdefMessage;
24 import android.nfc.NdefRecord;
25 import android.nfc.NfcAdapter;
26 import android.nfc.NfcEvent;
27 import android.nfc.NfcManager;
28 import android.os.Bundle;
29 import android.widget.TextView;
30 
31 import java.nio.charset.Charset;
32 
33 /**
34  * Test activity that sends a particular NDEF Push message to another NFC device.
35  */
36 public class NdefPushSenderActivity extends PassFailButtons.Activity implements
37         NfcAdapter.CreateNdefMessageCallback {
38 
39     static final NdefMessage TEST_MESSAGE = getTestMessage();
40 
41     private static final int NFC_NOT_ENABLED_DIALOG_ID = 1;
42     private static final int NDEF_PUSH_NOT_ENABLED_DIALOG_ID = 2;
43 
44     private NfcAdapter mNfcAdapter;
45 
46     @Override
onCreate(Bundle savedInstanceState)47     protected void onCreate(Bundle savedInstanceState) {
48         super.onCreate(savedInstanceState);
49         setContentView(R.layout.pass_fail_text);
50         setInfoResources(R.string.nfc_ndef_push_sender, R.string.nfc_ndef_push_sender_info, 0);
51         setPassFailButtonClickListeners();
52 
53         TextView text = (TextView) findViewById(R.id.text);
54         text.setText(R.string.nfc_ndef_push_sender_instructions);
55 
56         NfcManager nfcManager = (NfcManager) getSystemService(NFC_SERVICE);
57         mNfcAdapter = nfcManager.getDefaultAdapter();
58     }
59 
getTestMessage()60     private static NdefMessage getTestMessage() {
61         byte[] mimeBytes = "application/com.android.cts.verifier.nfc"
62                 .getBytes(Charset.forName("US-ASCII"));
63         byte[] id = new byte[] {1, 3, 3, 7};
64         byte[] payload = "CTS Verifier NDEF Push Tag".getBytes(Charset.forName("US-ASCII"));
65         return new NdefMessage(new NdefRecord[] {
66                 new NdefRecord(NdefRecord.TNF_MIME_MEDIA, mimeBytes, id, payload)
67         });
68     }
69 
70     @Override
onResume()71     protected void onResume() {
72         super.onResume();
73 
74         if (!mNfcAdapter.isEnabled()) {
75             showDialog(NFC_NOT_ENABLED_DIALOG_ID);
76         } else if (!mNfcAdapter.isNdefPushEnabled()) {
77             /* Sender must have NDEF push enabled */
78             showDialog(NDEF_PUSH_NOT_ENABLED_DIALOG_ID);
79         }
80 
81         mNfcAdapter.setNdefPushMessageCallback(this, this);
82     }
83 
84     @Override
onPause()85     protected void onPause() {
86         super.onPause();
87     }
88 
89     @Override
onCreateDialog(int id, Bundle args)90     public Dialog onCreateDialog(int id, Bundle args) {
91         switch (id) {
92             case NFC_NOT_ENABLED_DIALOG_ID:
93                 return NfcDialogs.createNotEnabledDialog(this);
94             case NDEF_PUSH_NOT_ENABLED_DIALOG_ID:
95                 return NfcDialogs.createNdefPushNotEnabledDialog(this);
96             default:
97                 return super.onCreateDialog(id, args);
98         }
99     }
100 
101     @Override
createNdefMessage(NfcEvent event)102     public NdefMessage createNdefMessage(NfcEvent event) {
103         return getTestMessage();
104     }
105 }
106