Add NFC support into QC
Modified NfcHandler to be more generic. Didn't bother
updating the ContactDetailLayoutController to use the
modified NfcHandler, since ContactDetailLayoutController
is completely dead code.
Bug: 15911911
Change-Id: I91f294f1576cba02e68cb442d26dcf8d87c8a735
diff --git a/src/com/android/contacts/NfcHandler.java b/src/com/android/contacts/NfcHandler.java
index 3cd4b08..07b3f06 100644
--- a/src/com/android/contacts/NfcHandler.java
+++ b/src/com/android/contacts/NfcHandler.java
@@ -18,6 +18,7 @@
import android.app.Activity;
import android.content.ContentResolver;
+import android.content.Context;
import android.net.Uri;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
@@ -27,8 +28,6 @@
import android.provider.ContactsContract.Profile;
import android.util.Log;
-import com.android.contacts.detail.ContactDetailFragment;
-
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -45,27 +44,28 @@
private static final String TAG = "ContactNfcHandler";
private static final String PROFILE_LOOKUP_KEY = "profile";
- private final ContactDetailFragment mContactFragment;
+ private final Context mContext;
+ private final Uri mContactUri;
- public static void register(Activity activity, ContactDetailFragment contactFragment) {
+ /* Register NFC handler. This should be called in activities' onCreate(), or similar methods */
+ public static void register(Activity activity, Uri contactUri) {
NfcAdapter adapter = NfcAdapter.getDefaultAdapter(activity.getApplicationContext());
if (adapter == null) {
return; // NFC not available on this device
}
- adapter.setNdefPushMessageCallback(new NfcHandler(contactFragment), activity);
+ adapter.setNdefPushMessageCallback(new NfcHandler(activity, contactUri), activity);
}
- public NfcHandler(ContactDetailFragment contactFragment) {
- mContactFragment = contactFragment;
+ public NfcHandler(Context context, Uri contactUri) {
+ mContext = context;
+ mContactUri = contactUri;
}
@Override
public NdefMessage createNdefMessage(NfcEvent event) {
- // Get the current contact URI
- Uri contactUri = mContactFragment.getUri();
- ContentResolver resolver = mContactFragment.getActivity().getContentResolver();
- if (contactUri != null) {
- final String lookupKey = Uri.encode(contactUri.getPathSegments().get(2));
+ ContentResolver resolver = mContext.getContentResolver();
+ if (mContactUri != null) {
+ final String lookupKey = Uri.encode(mContactUri.getPathSegments().get(2));
final Uri shareUri;
// TODO find out where to get this constant from, or find another way
// of determining this.
diff --git a/src/com/android/contacts/detail/ContactDetailLayoutController.java b/src/com/android/contacts/detail/ContactDetailLayoutController.java
index 098d950..d563baf 100644
--- a/src/com/android/contacts/detail/ContactDetailLayoutController.java
+++ b/src/com/android/contacts/detail/ContactDetailLayoutController.java
@@ -23,7 +23,6 @@
import android.view.View;
import android.view.ViewPropertyAnimator;
-import com.android.contacts.NfcHandler;
import com.android.contacts.R.id;
import com.android.contacts.activities.ContactDetailActivity.FragmentKeyListener;
import com.android.contacts.common.model.Contact;
@@ -73,7 +72,6 @@
.findFragmentById(id.contact_detail_about_fragment);
mDetailFragment.setListener(mContactDetailFragmentListener);
- NfcHandler.register(mActivity, mDetailFragment);
if (savedState != null) {
mContactUri = savedState.getParcelable(KEY_CONTACT_URI);
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 5b1fa10..bc7dc1f 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -80,6 +80,7 @@
import com.android.contacts.ContactSaveService;
import com.android.contacts.ContactsActivity;
+import com.android.contacts.NfcHandler;
import com.android.contacts.R;
import com.android.contacts.common.CallUtil;
import com.android.contacts.common.Collapser;
@@ -627,6 +628,8 @@
getLoaderManager().destroyLoader(interactionLoaderId);
}
}
+
+ NfcHandler.register(this, mLookupUri);
}
private void runEntranceAnimation() {
@@ -1474,6 +1477,7 @@
return uri;
}
}
+
private void shareContact() {
final String lookupKey = mContactData.getLookupKey();
Uri shareUri = Uri.withAppendedPath(Contacts.CONTENT_VCARD_URI, lookupKey);