1*90c8c64dSAndroid Build Coastguard Worker /* 2*90c8c64dSAndroid Build Coastguard Worker * Copyright (C) 2013 The Android Open Source Project 3*90c8c64dSAndroid Build Coastguard Worker * 4*90c8c64dSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*90c8c64dSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*90c8c64dSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*90c8c64dSAndroid Build Coastguard Worker * 8*90c8c64dSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*90c8c64dSAndroid Build Coastguard Worker * 10*90c8c64dSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*90c8c64dSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*90c8c64dSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*90c8c64dSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*90c8c64dSAndroid Build Coastguard Worker * limitations under the License. 15*90c8c64dSAndroid Build Coastguard Worker */ 16*90c8c64dSAndroid Build Coastguard Worker 17*90c8c64dSAndroid Build Coastguard Worker package com.example.android.cardreader; 18*90c8c64dSAndroid Build Coastguard Worker 19*90c8c64dSAndroid Build Coastguard Worker import android.app.Activity; 20*90c8c64dSAndroid Build Coastguard Worker import android.nfc.NfcAdapter; 21*90c8c64dSAndroid Build Coastguard Worker import android.os.Bundle; 22*90c8c64dSAndroid Build Coastguard Worker import android.support.v4.app.Fragment; 23*90c8c64dSAndroid Build Coastguard Worker import android.view.LayoutInflater; 24*90c8c64dSAndroid Build Coastguard Worker import android.view.View; 25*90c8c64dSAndroid Build Coastguard Worker import android.view.ViewGroup; 26*90c8c64dSAndroid Build Coastguard Worker import android.widget.TextView; 27*90c8c64dSAndroid Build Coastguard Worker 28*90c8c64dSAndroid Build Coastguard Worker import com.example.android.common.logger.Log; 29*90c8c64dSAndroid Build Coastguard Worker 30*90c8c64dSAndroid Build Coastguard Worker /** 31*90c8c64dSAndroid Build Coastguard Worker * Generic UI for sample discovery. 32*90c8c64dSAndroid Build Coastguard Worker */ 33*90c8c64dSAndroid Build Coastguard Worker public class CardReaderFragment extends Fragment implements LoyaltyCardReader.AccountCallback { 34*90c8c64dSAndroid Build Coastguard Worker 35*90c8c64dSAndroid Build Coastguard Worker public static final String TAG = "CardReaderFragment"; 36*90c8c64dSAndroid Build Coastguard Worker // Recommend NfcAdapter flags for reading from other Android devices. Indicates that this 37*90c8c64dSAndroid Build Coastguard Worker // activity is interested in NFC-A devices (including other Android devices), and that the 38*90c8c64dSAndroid Build Coastguard Worker // system should not check for the presence of NDEF-formatted data (e.g. Android Beam). 39*90c8c64dSAndroid Build Coastguard Worker public static int READER_FLAGS = 40*90c8c64dSAndroid Build Coastguard Worker NfcAdapter.FLAG_READER_NFC_A | NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK; 41*90c8c64dSAndroid Build Coastguard Worker public LoyaltyCardReader mLoyaltyCardReader; 42*90c8c64dSAndroid Build Coastguard Worker private TextView mAccountField; 43*90c8c64dSAndroid Build Coastguard Worker 44*90c8c64dSAndroid Build Coastguard Worker /** Called when sample is created. Displays generic UI with welcome text. */ 45*90c8c64dSAndroid Build Coastguard Worker @Override onCreate(Bundle savedInstanceState)46*90c8c64dSAndroid Build Coastguard Worker public void onCreate(Bundle savedInstanceState) { 47*90c8c64dSAndroid Build Coastguard Worker super.onCreate(savedInstanceState); 48*90c8c64dSAndroid Build Coastguard Worker } 49*90c8c64dSAndroid Build Coastguard Worker 50*90c8c64dSAndroid Build Coastguard Worker @Override onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)51*90c8c64dSAndroid Build Coastguard Worker public View onCreateView(LayoutInflater inflater, ViewGroup container, 52*90c8c64dSAndroid Build Coastguard Worker Bundle savedInstanceState) { 53*90c8c64dSAndroid Build Coastguard Worker // Inflate the layout for this fragment 54*90c8c64dSAndroid Build Coastguard Worker View v = inflater.inflate(R.layout.main_fragment, container, false); 55*90c8c64dSAndroid Build Coastguard Worker if (v != null) { 56*90c8c64dSAndroid Build Coastguard Worker mAccountField = (TextView) v.findViewById(R.id.card_account_field); 57*90c8c64dSAndroid Build Coastguard Worker mAccountField.setText("Waiting..."); 58*90c8c64dSAndroid Build Coastguard Worker 59*90c8c64dSAndroid Build Coastguard Worker mLoyaltyCardReader = new LoyaltyCardReader(this); 60*90c8c64dSAndroid Build Coastguard Worker 61*90c8c64dSAndroid Build Coastguard Worker // Disable Android Beam and register our card reader callback 62*90c8c64dSAndroid Build Coastguard Worker enableReaderMode(); 63*90c8c64dSAndroid Build Coastguard Worker } 64*90c8c64dSAndroid Build Coastguard Worker 65*90c8c64dSAndroid Build Coastguard Worker return v; 66*90c8c64dSAndroid Build Coastguard Worker } 67*90c8c64dSAndroid Build Coastguard Worker 68*90c8c64dSAndroid Build Coastguard Worker @Override onPause()69*90c8c64dSAndroid Build Coastguard Worker public void onPause() { 70*90c8c64dSAndroid Build Coastguard Worker super.onPause(); 71*90c8c64dSAndroid Build Coastguard Worker disableReaderMode(); 72*90c8c64dSAndroid Build Coastguard Worker } 73*90c8c64dSAndroid Build Coastguard Worker 74*90c8c64dSAndroid Build Coastguard Worker @Override onResume()75*90c8c64dSAndroid Build Coastguard Worker public void onResume() { 76*90c8c64dSAndroid Build Coastguard Worker super.onResume(); 77*90c8c64dSAndroid Build Coastguard Worker enableReaderMode(); 78*90c8c64dSAndroid Build Coastguard Worker } 79*90c8c64dSAndroid Build Coastguard Worker enableReaderMode()80*90c8c64dSAndroid Build Coastguard Worker private void enableReaderMode() { 81*90c8c64dSAndroid Build Coastguard Worker Log.i(TAG, "Enabling reader mode"); 82*90c8c64dSAndroid Build Coastguard Worker Activity activity = getActivity(); 83*90c8c64dSAndroid Build Coastguard Worker NfcAdapter nfc = NfcAdapter.getDefaultAdapter(activity); 84*90c8c64dSAndroid Build Coastguard Worker if (nfc != null) { 85*90c8c64dSAndroid Build Coastguard Worker nfc.enableReaderMode(activity, mLoyaltyCardReader, READER_FLAGS, null); 86*90c8c64dSAndroid Build Coastguard Worker } 87*90c8c64dSAndroid Build Coastguard Worker } 88*90c8c64dSAndroid Build Coastguard Worker disableReaderMode()89*90c8c64dSAndroid Build Coastguard Worker private void disableReaderMode() { 90*90c8c64dSAndroid Build Coastguard Worker Log.i(TAG, "Disabling reader mode"); 91*90c8c64dSAndroid Build Coastguard Worker Activity activity = getActivity(); 92*90c8c64dSAndroid Build Coastguard Worker NfcAdapter nfc = NfcAdapter.getDefaultAdapter(activity); 93*90c8c64dSAndroid Build Coastguard Worker if (nfc != null) { 94*90c8c64dSAndroid Build Coastguard Worker nfc.disableReaderMode(activity); 95*90c8c64dSAndroid Build Coastguard Worker } 96*90c8c64dSAndroid Build Coastguard Worker } 97*90c8c64dSAndroid Build Coastguard Worker 98*90c8c64dSAndroid Build Coastguard Worker @Override onAccountReceived(final String account)99*90c8c64dSAndroid Build Coastguard Worker public void onAccountReceived(final String account) { 100*90c8c64dSAndroid Build Coastguard Worker // This callback is run on a background thread, but updates to UI elements must be performed 101*90c8c64dSAndroid Build Coastguard Worker // on the UI thread. 102*90c8c64dSAndroid Build Coastguard Worker getActivity().runOnUiThread(new Runnable() { 103*90c8c64dSAndroid Build Coastguard Worker @Override 104*90c8c64dSAndroid Build Coastguard Worker public void run() { 105*90c8c64dSAndroid Build Coastguard Worker mAccountField.setText(account); 106*90c8c64dSAndroid Build Coastguard Worker } 107*90c8c64dSAndroid Build Coastguard Worker }); 108*90c8c64dSAndroid Build Coastguard Worker } 109*90c8c64dSAndroid Build Coastguard Worker } 110