summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorYorke Lee <yorkelee@google.com>2015-06-23 09:24:34 -0700
committerYorke Lee <yorkelee@google.com>2015-06-29 18:16:03 -0700
commit82d30284d32d2e563661ad0a1465c1b9bf501a9f (patch)
tree0db8ba74c759be15668f015089c2dc8e6c11207f /src
parent9f12d3c7fd9d75a6bf31f24bfb61bbe2c7b18f0a (diff)
Add long press actions to call log
When a call log entry is long pressed, show a context menu that provides the following actions: 1) Copy to clipboard 2) Edit number before call Bug: 21453814 Change-Id: I796cffbec39847fd9c61891063217b15cb298479
Diffstat (limited to 'src')
-rw-r--r--src/com/android/dialer/calllog/CallLogAdapter.java73
1 files changed, 72 insertions, 1 deletions
diff --git a/src/com/android/dialer/calllog/CallLogAdapter.java b/src/com/android/dialer/calllog/CallLogAdapter.java
index bb776d29e..83e55944f 100644
--- a/src/com/android/dialer/calllog/CallLogAdapter.java
+++ b/src/com/android/dialer/calllog/CallLogAdapter.java
@@ -33,18 +33,27 @@ import android.telecom.PhoneAccountHandle;
import android.telephony.PhoneNumberUtils;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
+import android.util.Log;
+import android.view.ContextMenu;
import android.view.LayoutInflater;
+import android.view.MenuItem;
+import android.view.MenuItem.OnMenuItemClickListener;
import android.view.View;
import android.view.View.AccessibilityDelegate;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
+import android.view.ContextMenu.ContextMenuInfo;
import android.view.accessibility.AccessibilityEvent;
+import com.android.contacts.common.CallUtil;
+import com.android.contacts.common.ClipboardUtils;
import com.android.contacts.common.util.PermissionsUtil;
+import com.android.dialer.DialtactsActivity;
import com.android.dialer.PhoneCallDetails;
import com.android.dialer.R;
import com.android.dialer.contactinfo.ContactInfoCache;
import com.android.dialer.contactinfo.ContactInfoCache.OnContactInfoChangedListener;
+import com.android.dialer.util.DialerUtils;
import com.android.dialer.util.PhoneNumberUtil;
import com.android.dialer.voicemail.VoicemailPlaybackPresenter;
@@ -138,7 +147,6 @@ public class CallLogAdapter extends GroupingListAdapter
@Override
public void onClick(View v) {
CallLogListItemViewHolder viewHolder = (CallLogListItemViewHolder) v.getTag();
-
if (viewHolder == null) {
return;
}
@@ -185,6 +193,68 @@ public class CallLogAdapter extends GroupingListAdapter
}
};
+ /**
+ * Listener that is triggered to populate the context menu with actions to perform on the call's
+ * number, when the call log entry is long pressed.
+ */
+ private final View.OnCreateContextMenuListener mOnCreateContextMenuListener =
+ new View.OnCreateContextMenuListener() {
+ @Override
+ public void onCreateContextMenu(ContextMenu menu, View v,
+ ContextMenuInfo menuInfo) {
+ final CallLogListItemViewHolder vh =
+ (CallLogListItemViewHolder) v.getTag();
+ if (TextUtils.isEmpty(vh.number)) {
+ return;
+ }
+
+ menu.setHeaderTitle(vh.number);
+
+ final MenuItem copyItem = menu.add(
+ ContextMenu.NONE,
+ R.id.context_menu_copy_to_clipboard,
+ ContextMenu.NONE,
+ R.string.copy_text);
+
+ copyItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
+ @Override
+ public boolean onMenuItemClick(MenuItem item) {
+ ClipboardUtils.copyText(CallLogAdapter.this.mContext, null,
+ vh.number, true);
+ return true;
+ }
+ });
+
+ // The edit number before call does not show up if any of the conditions apply:
+ // 1) Number cannot be called
+ // 2) Number is the voicemail number
+ // 3) Number is a SIP address
+
+ if (!PhoneNumberUtil.canPlaceCallsTo(vh.number, vh.numberPresentation)
+ || mTelecomCallLogCache.isVoicemailNumber(vh.accountHandle, vh.number)
+ || PhoneNumberUtil.isSipNumber(vh.number)) {
+ return;
+ }
+
+ final MenuItem editItem = menu.add(
+ ContextMenu.NONE,
+ R.id.context_menu_edit_before_call,
+ ContextMenu.NONE,
+ R.string.recentCalls_editNumberBeforeCall);
+
+ editItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
+ @Override
+ public boolean onMenuItemClick(MenuItem item) {
+ final Intent intent = new Intent(Intent.ACTION_DIAL,
+ CallUtil.getCallUri(vh.number));
+ intent.setClass(mContext, DialtactsActivity.class);
+ DialerUtils.startActivityWithErrorToast(mContext, intent);
+ return true;
+ }
+ });
+ }
+ };
+
private void expandViewHolderActions(CallLogListItemViewHolder viewHolder) {
// If another item is expanded, notify it that it has changed. Its actions will be
// hidden when it is re-binded because we change mCurrentlyExpandedPosition below.
@@ -369,6 +439,7 @@ public class CallLogAdapter extends GroupingListAdapter
viewHolder.callLogEntryView.setTag(viewHolder);
viewHolder.callLogEntryView.setAccessibilityDelegate(mAccessibilityDelegate);
+ viewHolder.primaryActionView.setOnCreateContextMenuListener(mOnCreateContextMenuListener);
viewHolder.primaryActionView.setTag(viewHolder);
return viewHolder;