Use CALL_ORIGIN flag
CALL_ORIGIN flag allows Phone app know where the phone call
request comes from.
TESTED:
incoming calls
-> go back to calllog
outgoing calls
- make a phone call from dialpad -> go back to dialpad
- make a phone call from favorite -> go back to favorite
- make a phone call from calllog -> go to calllog
- make a phone call from call detail -> go to calllog
- make a phone call from People UI -> go to calllog
- make a phone call from dialpad and launch Phone UI
again during the phone call -> go to calllog
- make a phone call from contact card (reached via
phone favorite) -> go to calllog
- make a phone call from favorite and add another
person to the phone call via in-call ui
-> go back to "favorite" (undetermined behavior actually)
- make a phone call from dialpad or favorite, bail out the
in-call UI. Have the recipient hang up the call.
Then have an incoming call again. Hang up the second phone
call.
-> go to calllog
Must be after I4d5f825f7d5109c6ff8c27b6e53a31ca9e6b832f
Bug: 5360106
Change-Id: I7b88b245e82e96e150937ee53029d397a28a9b2d
diff --git a/src/com/android/contacts/activities/DialtactsActivity.java b/src/com/android/contacts/activities/DialtactsActivity.java
index 50d6f17..baa4b4b 100644
--- a/src/com/android/contacts/activities/DialtactsActivity.java
+++ b/src/com/android/contacts/activities/DialtactsActivity.java
@@ -84,6 +84,13 @@
"com.android.phone.CallFeaturesSetting";
/**
+ * Copied from PhoneApp. See comments in Phone app for more detail.
+ */
+ public static final String EXTRA_CALL_ORIGIN = "com.android.phone.CALL_ORIGIN";
+ public static final String CALL_ORIGIN_DIALTACTS =
+ "com.android.contacts.activities.DialtactsActivity";
+
+ /**
* Just for backward compatibility. Should behave as same as {@link Intent#ACTION_DIAL}.
*/
private static final String ACTION_TOUCH_DIALER = "com.android.phone.action.TOUCH_DIALER";
@@ -697,7 +704,8 @@
@Override
public void onContactSelected(Uri contactUri) {
PhoneNumberInteraction.startInteractionForPhoneCall(
- DialtactsActivity.this, contactUri);
+ DialtactsActivity.this, contactUri,
+ CALL_ORIGIN_DIALTACTS);
}
};
diff --git a/src/com/android/contacts/dialpad/DialpadFragment.java b/src/com/android/contacts/dialpad/DialpadFragment.java
index e9fbbbb..d1c5868 100644
--- a/src/com/android/contacts/dialpad/DialpadFragment.java
+++ b/src/com/android/contacts/dialpad/DialpadFragment.java
@@ -899,7 +899,12 @@
// Clear the digits just in case.
mDigits.getText().clear();
} else {
- startActivity(newDialNumberIntent(number));
+ final Intent intent = newDialNumberIntent(number);
+ if (getActivity() instanceof DialtactsActivity) {
+ intent.putExtra(DialtactsActivity.EXTRA_CALL_ORIGIN,
+ DialtactsActivity.CALL_ORIGIN_DIALTACTS);
+ }
+ startActivity(intent);
mDigits.getText().clear(); // TODO: Fix bug 1745781
getActivity().finish();
}
diff --git a/src/com/android/contacts/interactions/PhoneNumberInteraction.java b/src/com/android/contacts/interactions/PhoneNumberInteraction.java
index a42456c..d10ec06 100644
--- a/src/com/android/contacts/interactions/PhoneNumberInteraction.java
+++ b/src/com/android/contacts/interactions/PhoneNumberInteraction.java
@@ -21,14 +21,11 @@
import com.android.contacts.ContactSaveService;
import com.android.contacts.ContactsUtils;
import com.android.contacts.R;
+import com.android.contacts.activities.DialtactsActivity;
import com.android.contacts.model.AccountType;
import com.android.contacts.model.AccountType.StringInflater;
import com.android.contacts.model.AccountTypeManager;
import com.android.contacts.model.DataKind;
-import com.android.i18n.phonenumbers.NumberParseException;
-import com.android.i18n.phonenumbers.PhoneNumberUtil;
-import com.android.i18n.phonenumbers.PhoneNumberUtil.MatchType;
-import com.android.i18n.phonenumbers.Phonenumber.PhoneNumber;
import com.google.common.annotations.VisibleForTesting;
import android.app.Activity;
@@ -53,7 +50,6 @@
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.RawContacts;
-import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -197,17 +193,21 @@
private static final String ARG_PHONE_LIST = "phoneList";
private static final String ARG_INTERACTION_TYPE = "interactionType";
+ private static final String ARG_CALL_ORIGIN = "callOrigin";
private InteractionType mInteractionType;
private ListAdapter mPhonesAdapter;
private List<PhoneItem> mPhoneList;
+ private String mCallOrigin;
public static void show(FragmentManager fragmentManager,
- ArrayList<PhoneItem> phoneList, InteractionType interactionType) {
+ ArrayList<PhoneItem> phoneList, InteractionType interactionType,
+ String callOrigin) {
PhoneDisambiguationDialogFragment fragment = new PhoneDisambiguationDialogFragment();
Bundle bundle = new Bundle();
bundle.putParcelableArrayList(ARG_PHONE_LIST, phoneList);
bundle.putSerializable(ARG_INTERACTION_TYPE, interactionType);
+ bundle.putString(ARG_CALL_ORIGIN, callOrigin);
fragment.setArguments(bundle);
fragment.show(fragmentManager, TAG);
}
@@ -218,6 +218,8 @@
mPhoneList = getArguments().getParcelableArrayList(ARG_PHONE_LIST);
mInteractionType =
(InteractionType) getArguments().getSerializable(ARG_INTERACTION_TYPE);
+ mCallOrigin = getArguments().getString(ARG_CALL_ORIGIN);
+
mPhonesAdapter = new PhoneItemAdapter(activity, mPhoneList, mInteractionType);
final LayoutInflater inflater = activity.getLayoutInflater();
final View setPrimaryView = inflater.inflate(R.layout.set_primary_checkbox, null);
@@ -242,7 +244,7 @@
}
PhoneNumberInteraction.performAction(getActivity(), phoneItem.phoneNumber,
- mInteractionType);
+ mInteractionType, mCallOrigin);
} else {
dialog.dismiss();
}
@@ -266,22 +268,31 @@
private final OnDismissListener mDismissListener;
private final InteractionType mInteractionType;
+ private final String mCallOrigin;
+
private CursorLoader mLoader;
@VisibleForTesting
/* package */ PhoneNumberInteraction(Context context, InteractionType interactionType,
DialogInterface.OnDismissListener dismissListener) {
+ this(context, interactionType, dismissListener, null);
+ }
+
+ private PhoneNumberInteraction(Context context, InteractionType interactionType,
+ DialogInterface.OnDismissListener dismissListener, String callOrigin) {
mContext = context;
mInteractionType = interactionType;
mDismissListener = dismissListener;
+ mCallOrigin = callOrigin;
}
private void performAction(String phoneNumber) {
- PhoneNumberInteraction.performAction(mContext, phoneNumber, mInteractionType);
+ PhoneNumberInteraction.performAction(mContext, phoneNumber, mInteractionType, mCallOrigin);
}
private static void performAction(
- Context context, String phoneNumber, InteractionType interactionType) {
+ Context context, String phoneNumber, InteractionType interactionType,
+ String callOrigin) {
Intent intent;
switch (interactionType) {
case SMS:
@@ -291,6 +302,9 @@
default:
intent = new Intent(
Intent.ACTION_CALL_PRIVILEGED, Uri.fromParts("tel", phoneNumber, null));
+ if (callOrigin != null) {
+ intent.putExtra(DialtactsActivity.EXTRA_CALL_ORIGIN, callOrigin);
+ }
break;
}
context.startActivity(intent);
@@ -402,6 +416,17 @@
}
/**
+ * @param callOrigin If non null, {@link DialtactsActivity#EXTRA_CALL_ORIGIN} will be
+ * appended to the Intent initiating phone call. See comments in Phone package (PhoneApp)
+ * for more detail.
+ */
+ public static void startInteractionForPhoneCall(Activity activity, Uri uri,
+ String callOrigin) {
+ (new PhoneNumberInteraction(activity, InteractionType.PHONE_CALL, null, callOrigin))
+ .startInteraction(uri);
+ }
+
+ /**
* Start text messaging (a.k.a SMS) action using given contact Uri. If there are multiple
* candidates for the phone call, dialog is automatically shown and the user is asked to choose
* one.
@@ -422,6 +447,6 @@
@VisibleForTesting
/* package */ void showDisambiguationDialog(ArrayList<PhoneItem> phoneList) {
PhoneDisambiguationDialogFragment.show(((Activity)mContext).getFragmentManager(),
- phoneList, mInteractionType);
+ phoneList, mInteractionType, mCallOrigin);
}
}