| // Copyright 2015 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package io.v.android.apps.account_manager; |
| |
| import android.app.Activity; |
| import android.content.Intent; |
| import android.nfc.NdefMessage; |
| import android.nfc.NdefRecord; |
| import android.nfc.NfcAdapter; |
| import android.os.Parcelable; |
| import android.widget.Toast; |
| |
| import io.v.android.v23.V; |
| import io.v.v23.security.Blessings; |
| import io.v.v23.verror.VException; |
| import io.v.v23.vom.VomUtil; |
| |
| /** |
| * NfcBlesseeRecvActivity Receives Android-beamed blessings sent by another account manager in |
| * response to a previous request by NfcBlesseeSendActivity. |
| */ |
| public class NfcBlesseeRecvActivity extends Activity { |
| public static final String TAG = "NfcBleseeRecvActivity"; |
| |
| @Override |
| public void onResume() { |
| super.onResume(); |
| V.init(this); |
| |
| // Check to see that the activity started due to a beam, and process the obtained blessings. |
| if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) { |
| processIntent(getIntent()); |
| } |
| } |
| |
| private void processIntent(Intent intent) { |
| // Retrieve the blessings that were beamed by the remote end. |
| Parcelable[] rawMessages = intent.getParcelableArrayExtra( |
| NfcAdapter.EXTRA_NDEF_MESSAGES); |
| if (rawMessages == null || rawMessages.length == 0) { |
| Toast.makeText(this, "Did not receive blessing(s).", Toast.LENGTH_LONG).show(); |
| return; |
| } |
| NdefMessage message = (NdefMessage) rawMessages[0]; |
| NdefRecord[] records = message.getRecords(); |
| if (records == null || records.length == 0) { |
| Toast.makeText(this, "Did not receive blessing(s).", Toast.LENGTH_LONG).show(); |
| return; |
| } |
| byte[] blessingsVom = records[0].getPayload(); |
| try{ |
| Blessings blessings = (Blessings) VomUtil.decode(blessingsVom, Blessings.class); |
| // TODO(sjayanti): Should get pattern from user. |
| // TODO(sjayanti): Should eventually validate received blessings in some way. |
| Intent i = new Intent(); |
| i.setPackage("io.v.android.apps.account_manager"); |
| i.setClassName("io.v.android.apps.account_manager", |
| "io.v.android.apps.account_manager.StoreBlessingsActivity"); |
| i.setAction("io.v.android.apps.account_manager.STORE"); |
| i.putExtra(StoreBlessingsActivity.BLESSINGS, blessings); |
| startActivity(i); |
| } catch (VException e) { |
| String msg = "Couldn't Retrieve Blessings: " + e; |
| android.util.Log.e(TAG, msg); |
| Toast.makeText(this, msg, Toast.LENGTH_LONG).show(); |
| } |
| } |
| } |