summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/com/android/dialer/CallDetailActivity.java93
1 files changed, 71 insertions, 22 deletions
diff --git a/src/com/android/dialer/CallDetailActivity.java b/src/com/android/dialer/CallDetailActivity.java
index b0c8e6821..2b16a983b 100644
--- a/src/com/android/dialer/CallDetailActivity.java
+++ b/src/com/android/dialer/CallDetailActivity.java
@@ -17,11 +17,13 @@
package com.android.dialer;
import android.app.Activity;
+import android.app.LoaderManager.LoaderCallbacks;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
+import android.content.Loader;
import android.content.res.Resources;
import android.database.Cursor;
import android.graphics.drawable.Drawable;
@@ -30,9 +32,10 @@ import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.CallLog;
import android.provider.CallLog.Calls;
-import android.provider.Contacts.Intents.Insert;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.DisplayNameSources;
+import android.provider.ContactsContract.Intents.Insert;
import android.provider.VoicemailContract.Voicemails;
import android.telephony.PhoneNumberUtils;
import android.telephony.TelephonyManager;
@@ -54,6 +57,8 @@ import com.android.contacts.common.ContactPhotoManager;
import com.android.contacts.common.CallUtil;
import com.android.contacts.common.ClipboardUtils;
import com.android.contacts.common.GeoUtil;
+import com.android.contacts.common.model.Contact;
+import com.android.contacts.common.model.ContactLoader;
import com.android.contacts.common.util.UriUtils;
import com.android.dialer.BackScrollManager.ScrollableHeader;
import com.android.dialer.calllog.CallDetailHistoryAdapter;
@@ -80,6 +85,9 @@ import java.util.List;
public class CallDetailActivity extends Activity implements ProximitySensorAware {
private static final String TAG = "CallDetail";
+ private static final int LOADER_ID = 0;
+ private static final String BUNDLE_CONTACT_URI_EXTRA = "contact_uri_extra";
+
private static final char LEFT_TO_RIGHT_EMBEDDING = '\u202A';
private static final char POP_DIRECTIONAL_FORMATTING = '\u202C';
@@ -252,6 +260,35 @@ public class CallDetailActivity extends Activity implements ProximitySensorAware
}
};
+ private final LoaderCallbacks<Contact> mLoaderCallbacks = new LoaderCallbacks<Contact>() {
+ @Override
+ public void onLoaderReset(Loader<Contact> loader) {
+ }
+
+ @Override
+ public void onLoadFinished(Loader<Contact> loader, Contact data) {
+ final Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
+ intent.setType(Contacts.CONTENT_ITEM_TYPE);
+ if (data.getDisplayNameSource() >= DisplayNameSources.ORGANIZATION) {
+ intent.putExtra(Insert.NAME, data.getDisplayName());
+ }
+ intent.putExtra(Insert.DATA, data.getContentValues());
+ bindContactPhotoAction(intent, R.drawable.ic_add_contact_holo_dark,
+ getString(R.string.description_add_contact));
+ }
+
+ @Override
+ public Loader<Contact> onCreateLoader(int id, Bundle args) {
+ final Uri contactUri = args.getParcelable(BUNDLE_CONTACT_URI_EXTRA);
+ if (contactUri == null) {
+ Log.wtf(TAG, "No contact lookup uri provided.");
+ }
+ return new ContactLoader(CallDetailActivity.this, contactUri,
+ false /* loadGroupMetaData */, false /* loadInvitableAccountTypes */,
+ false /* postViewNotification */, true /* computeFormattedPhoneNumber */);
+ }
+ };
+
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
@@ -461,6 +498,13 @@ public class CallDetailActivity extends Activity implements ProximitySensorAware
mainActionIcon = R.drawable.ic_contacts_holo_dark;
mainActionDescription =
getString(R.string.description_view_contact, nameOrNumber);
+ } else if (UriUtils.isEncodedContactUri(contactUri)) {
+ final Bundle bundle = new Bundle(1);
+ bundle.putParcelable(BUNDLE_CONTACT_URI_EXTRA, contactUri);
+ getLoaderManager().initLoader(LOADER_ID, bundle, mLoaderCallbacks);
+ mainActionIntent = null;
+ mainActionIcon = R.drawable.ic_add_contact_holo_dark;
+ mainActionDescription = getString(R.string.description_add_contact);
} else if (isVoicemailNumber) {
mainActionIntent = null;
mainActionIcon = 0;
@@ -485,32 +529,14 @@ public class CallDetailActivity extends Activity implements ProximitySensorAware
mainActionIcon = R.drawable.ic_add_contact_holo_dark;
mainActionDescription = getString(R.string.description_add_contact);
} else {
- // If we cannot call the number, when we probably cannot add it as a contact either.
- // This is usually the case of private, unknown, or payphone numbers.
+ // If we cannot call the number, when we probably cannot add it as a contact
+ // either. This is usually the case of private, unknown, or payphone numbers.
mainActionIntent = null;
mainActionIcon = 0;
mainActionDescription = null;
}
- if (mainActionIntent == null) {
- mMainActionView.setVisibility(View.INVISIBLE);
- mMainActionPushLayerView.setVisibility(View.GONE);
- mHeaderTextView.setVisibility(View.INVISIBLE);
- mHeaderOverlayView.setVisibility(View.INVISIBLE);
- } else {
- mMainActionView.setVisibility(View.VISIBLE);
- mMainActionView.setImageResource(mainActionIcon);
- mMainActionPushLayerView.setVisibility(View.VISIBLE);
- mMainActionPushLayerView.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- startActivity(mainActionIntent);
- }
- });
- mMainActionPushLayerView.setContentDescription(mainActionDescription);
- mHeaderTextView.setVisibility(View.VISIBLE);
- mHeaderOverlayView.setVisibility(View.VISIBLE);
- }
+ bindContactPhotoAction(mainActionIntent, mainActionIcon, mainActionDescription);
// This action allows to call the number that places the call.
if (canPlaceCallsTo) {
@@ -597,6 +623,29 @@ public class CallDetailActivity extends Activity implements ProximitySensorAware
mAsyncTaskExecutor.submit(Tasks.UPDATE_PHONE_CALL_DETAILS, new UpdateContactDetailsTask());
}
+ private void bindContactPhotoAction(final Intent actionIntent, int actionIcon,
+ String actionDescription) {
+ if (actionIntent == null) {
+ mMainActionView.setVisibility(View.INVISIBLE);
+ mMainActionPushLayerView.setVisibility(View.GONE);
+ mHeaderTextView.setVisibility(View.INVISIBLE);
+ mHeaderOverlayView.setVisibility(View.INVISIBLE);
+ } else {
+ mMainActionView.setVisibility(View.VISIBLE);
+ mMainActionView.setImageResource(actionIcon);
+ mMainActionPushLayerView.setVisibility(View.VISIBLE);
+ mMainActionPushLayerView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ startActivity(actionIntent);
+ }
+ });
+ mMainActionPushLayerView.setContentDescription(actionDescription);
+ mHeaderTextView.setVisibility(View.VISIBLE);
+ mHeaderOverlayView.setVisibility(View.VISIBLE);
+ }
+ }
+
/** Return the phone call details for a given call log URI. */
private PhoneCallDetails getPhoneCallDetailsForUri(Uri callUri) {
ContentResolver resolver = getContentResolver();