summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--res/values/ids.xml20
-rw-r--r--src/com/android/dialer/calllog/CallLogAdapter.java73
2 files changed, 92 insertions, 1 deletions
diff --git a/res/values/ids.xml b/res/values/ids.xml
new file mode 100644
index 000000000..e2f0ff593
--- /dev/null
+++ b/res/values/ids.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<resources>
+ <item type="id" name="context_menu_copy_to_clipboard" />
+ <item type="id" name="context_menu_edit_before_call" />
+</resources>
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;