Fixed NfcAdapter init and getTechnology().

- GetTechnology() used a binary search, but the array was linked to another
  array (extras) which was not sorted. So made it linear.
- The tag technologies were instantiated with a null NfcAdapter.

Change-Id: Iae15169a89155c3a5c9f81824f809d6010ebac01
diff --git a/core/java/android/nfc/Tag.java b/core/java/android/nfc/Tag.java
index c3f0893..938e6a7 100644
--- a/core/java/android/nfc/Tag.java
+++ b/core/java/android/nfc/Tag.java
@@ -71,7 +71,6 @@
         }
         mId = id;
         mTechList = Arrays.copyOf(techList, techList.length);
-        Arrays.sort(mTechList);
         // Ensure mTechExtras is as long as mTechList
         mTechExtras = Arrays.copyOf(techListExtras, techList.length);
         mServiceHandle = serviceHandle;
@@ -122,13 +121,19 @@
      * Returns the technology, or null if not present
      */
     public TagTechnology getTechnology(int tech) {
-        int pos = Arrays.binarySearch(mTechList, tech);
+        int pos = -1;
+        for (int idx = 0; idx < mTechList.length; idx++) {
+          if (mTechList[idx] == tech) {
+              pos = idx;
+              break;
+          }
+        }
         if (pos < 0) {
             return null;
         }
 
         Bundle extras = mTechExtras[pos];
-        NfcAdapter adapter = null;
+        NfcAdapter adapter = NfcAdapter.getDefaultAdapter();
         try {
             switch (tech) {
                 case TagTechnology.NFC_A: {
@@ -230,4 +235,4 @@
             return new Tag[size];
         }
     };
-}
\ No newline at end of file
+}
diff --git a/core/java/android/nfc/technology/BasicTagTechnology.java b/core/java/android/nfc/technology/BasicTagTechnology.java
index cb586d5..6b281b9 100644
--- a/core/java/android/nfc/technology/BasicTagTechnology.java
+++ b/core/java/android/nfc/technology/BasicTagTechnology.java
@@ -63,7 +63,11 @@
 
         mAdapter = adapter;
         mService = mAdapter.getService();
-        mTagService = mService.getNfcTagInterface();
+        try {
+          mTagService = mService.getNfcTagInterface();
+        } catch (RemoteException e) {
+            attemptDeadServiceRecovery(e);
+        }
         mTag = tag;
         mSelectedTechnology = tech;
     }