am 911b14d1: Merge "Reorganize Intent utilities, add send SMS intent." into mnc-dev
* commit '911b14d120a7066951d38c06fc31b6ce3b5ff1d0':
Reorganize Intent utilities, add send SMS intent.
diff --git a/res/layout/call_log_list_item_actions.xml b/res/layout/call_log_list_item_actions.xml
index a10b47f..d3e18be 100644
--- a/res/layout/call_log_list_item_actions.xml
+++ b/res/layout/call_log_list_item_actions.xml
@@ -80,6 +80,20 @@
</LinearLayout>
<LinearLayout
+ android:id="@+id/send_message_action"
+ style="@style/CallLogActionStyle">
+
+ <ImageView
+ style="@style/CallLogActionIconStyle"
+ android:src="@drawable/ic_textsms_24dp" />
+
+ <TextView
+ style="@style/CallLogActionTextStyle"
+ android:text="@string/call_log_action_send_message" />
+
+ </LinearLayout>
+
+ <LinearLayout
android:id="@+id/details_action"
style="@style/CallLogActionStyle">
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 79c441d..2e236a6 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -550,6 +550,11 @@
[CHAR LIMIT=30] -->
<string name="call_log_action_voicemail">LISTEN</string>
+ <!-- Button text for a button displayed underneath an entry in the call log, which opens up a
+ messaging app to send a SMS to the number represented by the call log entry.
+ [CHAR LIMIT=50] -->
+ <string name="call_log_action_send_message">Send Message</string>
+
<!-- Button text for the button displayed underneath an entry in the call log.
Tapping navigates the user to the call details screen where the user can view details for
the call log entry. [CHAR LIMIT=50] -->
diff --git a/src/com/android/dialer/CallDetailActivity.java b/src/com/android/dialer/CallDetailActivity.java
index 0a295c4..735d6eb 100644
--- a/src/com/android/dialer/CallDetailActivity.java
+++ b/src/com/android/dialer/CallDetailActivity.java
@@ -64,7 +64,7 @@
import com.android.dialer.calllog.PhoneNumberUtilsWrapper;
import com.android.dialer.util.AsyncTaskExecutor;
import com.android.dialer.util.AsyncTaskExecutors;
-import com.android.dialer.util.CallIntentUtil;
+import com.android.dialer.util.IntentUtil;
import com.android.dialer.util.DialerUtils;
import com.android.dialer.util.TelecomUtil;
import com.android.dialer.voicemail.VoicemailPlaybackFragment;
@@ -323,8 +323,9 @@
getSystemService(Context.TELEPHONY_SERVICE);
if (tm.getCallState() == TelephonyManager.CALL_STATE_IDLE) {
DialerUtils.startActivityWithErrorToast(this,
- CallIntentUtil.getCallIntent(Uri.fromParts(PhoneAccount.SCHEME_TEL,
- mNumber, null)), R.string.call_not_available);
+ IntentUtil.getCallIntent(
+ Uri.fromParts(PhoneAccount.SCHEME_TEL, mNumber, null)),
+ R.string.call_not_available);
return true;
}
}
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index cccc06e..25828e5 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -29,7 +29,6 @@
import android.net.Uri;
import android.os.Bundle;
import android.os.Trace;
-import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Intents;
import android.speech.RecognizerIntent;
import android.support.v4.view.ViewPager;
@@ -82,7 +81,7 @@
import com.android.dialer.list.SmartDialSearchFragment;
import com.android.dialer.list.SpeedDialFragment;
import com.android.dialer.settings.DialerSettingsActivity;
-import com.android.dialer.util.CallIntentUtil;
+import com.android.dialer.util.IntentUtil;
import com.android.dialer.util.DialerUtils;
import com.android.dialer.widget.ActionBarController;
import com.android.dialer.widget.SearchEditTextLayout;
@@ -587,7 +586,10 @@
switch (view.getId()) {
case R.id.floating_action_button:
if (mListsFragment.getTabPosition() == ListsFragment.TAB_INDEX_ALL_CONTACTS) {
- sendAddNewContactIntent();
+ DialerUtils.startActivityWithErrorToast(
+ this,
+ IntentUtil.getNewContactIntent(),
+ R.string.add_contact_not_available);
} else if (!mIsDialpadShown) {
mInCallDialpadUp = false;
showDialpadFragment(true);
@@ -622,7 +624,10 @@
startActivity(intent);
break;
case R.id.menu_add_contact:
- sendAddNewContactIntent();
+ DialerUtils.startActivityWithErrorToast(
+ this,
+ IntentUtil.getNewContactIntent(),
+ R.string.add_contact_not_available);
break;
case R.id.menu_import_export:
// We hard-code the "contactsAreAvailable" argument because doing it properly would
@@ -1082,38 +1087,6 @@
return getTelecomManager().isInCall();
}
- public static Intent getAddNumberToContactIntent(CharSequence text) {
- return getAddToContactIntent(null /* name */, text /* phoneNumber */,
- -1 /* phoneNumberType */);
- }
-
- public static Intent getAddToContactIntent(CharSequence name, CharSequence phoneNumber,
- int phoneNumberType) {
- Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
- intent.putExtra(Intents.Insert.PHONE, phoneNumber);
- // Only include the name and phone type extras if they are specified (the method
- // getAddNumberToContactIntent does not use them).
- if (name != null) {
- intent.putExtra(Intents.Insert.NAME, name);
- }
- if (phoneNumberType != -1) {
- intent.putExtra(Intents.Insert.PHONE_TYPE, phoneNumberType);
- }
- intent.setType(Contacts.CONTENT_ITEM_TYPE);
- return intent;
- }
-
- private void sendAddNewContactIntent() {
- try {
- startActivity(new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI));
- } catch (ActivityNotFoundException e) {
- Toast toast = Toast.makeText(this,
- R.string.add_contact_not_available,
- Toast.LENGTH_SHORT);
- toast.show();
- }
- }
-
private boolean canIntentBeHandled(Intent intent) {
final PackageManager packageManager = getPackageManager();
final List<ResolveInfo> resolveInfo = packageManager.queryIntentActivities(intent,
@@ -1171,8 +1144,8 @@
@Override
public void onCallNumberDirectly(String phoneNumber, boolean isVideoCall) {
Intent intent = isVideoCall ?
- CallIntentUtil.getVideoCallIntent(phoneNumber, getCallOrigin()) :
- CallIntentUtil.getCallIntent(phoneNumber, getCallOrigin());
+ IntentUtil.getVideoCallIntent(phoneNumber, getCallOrigin()) :
+ IntentUtil.getCallIntent(phoneNumber, getCallOrigin());
DialerUtils.startActivityWithErrorToast(this, intent);
mClearSearchOnPause = true;
}
diff --git a/src/com/android/dialer/calllog/CallLogListItemViewHolder.java b/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
index 4fa6561..72cbdba 100644
--- a/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
+++ b/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
@@ -72,6 +72,7 @@
public View voicemailButtonView;
public View createNewContactButtonView;
public View addToExistingContactButtonView;
+ public View sendMessageView;
public View detailsButtonView;
public View reportButtonView;
@@ -218,35 +219,26 @@
ViewStub stub = (ViewStub) rootView.findViewById(R.id.call_log_entry_actions_stub);
if (stub != null) {
actionsView = (ViewGroup) stub.inflate();
- }
- if (videoCallButtonView == null) {
videoCallButtonView = actionsView.findViewById(R.id.video_call_action);
videoCallButtonView.setOnClickListener(mActionListener);
- }
- if (voicemailButtonView == null) {
voicemailButtonView = actionsView.findViewById(R.id.voicemail_action);
voicemailButtonView.setOnClickListener(mActionListener);
- }
- if (createNewContactButtonView == null) {
createNewContactButtonView = actionsView.findViewById(R.id.create_new_contact_action);
createNewContactButtonView.setOnClickListener(mActionListener);
- }
- if (addToExistingContactButtonView == null) {
addToExistingContactButtonView =
actionsView.findViewById(R.id.add_to_existing_contact_action);
addToExistingContactButtonView.setOnClickListener(mActionListener);
- }
- if (detailsButtonView == null) {
+ sendMessageView = actionsView.findViewById(R.id.send_message_action);
+ sendMessageView.setOnClickListener(mActionListener);
+
detailsButtonView = actionsView.findViewById(R.id.details_action);
detailsButtonView.setOnClickListener(mActionListener);
- }
- if (reportButtonView == null) {
reportButtonView = actionsView.findViewById(R.id.report_action);
reportButtonView.setOnClickListener(new View.OnClickListener() {
@Override
@@ -344,6 +336,8 @@
addToExistingContactButtonView.setVisibility(View.GONE);
}
+ sendMessageView.setTag(IntentProvider.getSendSmsIntentProvider(number));
+
mCallLogListItemHelper.setActionContentDescriptions(this);
}
diff --git a/src/com/android/dialer/calllog/IntentProvider.java b/src/com/android/dialer/calllog/IntentProvider.java
index 9f5150a..d7a35e8 100644
--- a/src/com/android/dialer/calllog/IntentProvider.java
+++ b/src/com/android/dialer/calllog/IntentProvider.java
@@ -30,7 +30,7 @@
import com.android.dialer.CallDetailActivity;
import com.android.dialer.DialtactsActivity;
import com.android.dialer.PhoneCallDetails;
-import com.android.dialer.util.CallIntentUtil;
+import com.android.dialer.util.IntentUtil;
import com.android.dialer.util.TelecomUtil;
import java.util.ArrayList;
@@ -55,7 +55,7 @@
return new IntentProvider() {
@Override
public Intent getIntent(Context context) {
- return CallIntentUtil.getCallIntent(number, accountHandle);
+ return IntentUtil.getCallIntent(number, accountHandle);
}
};
}
@@ -69,7 +69,7 @@
return new IntentProvider() {
@Override
public Intent getIntent(Context context) {
- return CallIntentUtil.getVideoCallIntent(number, accountHandle);
+ return IntentUtil.getVideoCallIntent(number, accountHandle);
}
};
}
@@ -78,7 +78,7 @@
return new IntentProvider() {
@Override
public Intent getIntent(Context context) {
- return CallIntentUtil.getVoicemailIntent();
+ return IntentUtil.getVoicemailIntent();
}
};
}
@@ -101,6 +101,15 @@
};
}
+ public static IntentProvider getSendSmsIntentProvider(final String number) {
+ return new IntentProvider() {
+ @Override
+ public Intent getIntent(Context context) {
+ return IntentUtil.getSendSmsIntent(number);
+ }
+ };
+ }
+
/**
* Retrieves the call details intent provider for an entry in the call log.
*
@@ -157,11 +166,9 @@
// Note: This code mirrors code in Contacts/QuickContactsActivity.
final Intent intent;
if (isNewContact) {
- intent = new Intent(
- Intent.ACTION_INSERT, ContactsContract.Contacts.CONTENT_URI);
+ intent = IntentUtil.getNewContactIntent();
} else {
- intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
- intent.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE);
+ intent = IntentUtil.getAddToExistingContactIntent();
}
ArrayList<ContentValues> values = contactToSave.getContentValues();
@@ -198,14 +205,9 @@
} else {
// If no lookup uri is provided, rely on the available phone number and name.
if (isNewContact) {
- return DialtactsActivity.getAddToContactIntent(name, number, numberType);
+ return IntentUtil.getNewContactIntent(name, number, numberType);
} else {
- Intent intent = new Intent(
- Intent.ACTION_INSERT, ContactsContract.Contacts.CONTENT_URI);
- intent.putExtra(ContactsContract.Intents.Insert.NAME, name);
- intent.putExtra(ContactsContract.Intents.Insert.PHONE, number);
- intent.putExtra(ContactsContract.Intents.Insert.PHONE_TYPE, numberType);
- return intent;
+ return IntentUtil.getAddToExistingContactIntent(name, number, numberType);
}
}
}
diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index 6a66eb3..229af38 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -78,7 +78,7 @@
import com.android.dialer.R;
import com.android.dialer.SpecialCharSequenceMgr;
import com.android.dialer.calllog.PhoneAccountUtils;
-import com.android.dialer.util.CallIntentUtil;
+import com.android.dialer.util.IntentUtil;
import com.android.dialer.util.DialerUtils;
import com.android.phone.common.CallLogAsync;
import com.android.phone.common.HapticFeedback;
@@ -1001,8 +1001,7 @@
}
public void callVoicemail() {
- DialerUtils.startActivityWithErrorToast(getActivity(), CallIntentUtil
- .getVoicemailIntent());
+ DialerUtils.startActivityWithErrorToast(getActivity(), IntentUtil.getVoicemailIntent());
hideAndClearDialpad(false);
}
@@ -1098,7 +1097,7 @@
// Clear the digits just in case.
clearDialpad();
} else {
- final Intent intent = CallIntentUtil.getCallIntent(number,
+ final Intent intent = IntentUtil.getCallIntent(number,
(getActivity() instanceof DialtactsActivity ?
((DialtactsActivity) getActivity()).getCallOrigin() : null));
DialerUtils.startActivityWithErrorToast(getActivity(), intent);
@@ -1616,7 +1615,7 @@
}
private Intent newFlashIntent() {
- final Intent intent = CallIntentUtil.getCallIntent(EMPTY_NUMBER);
+ final Intent intent = IntentUtil.getCallIntent(EMPTY_NUMBER);
intent.putExtra(EXTRA_SEND_EMPTY_FLASH, true);
return intent;
}
diff --git a/src/com/android/dialer/interactions/PhoneNumberInteraction.java b/src/com/android/dialer/interactions/PhoneNumberInteraction.java
index 8d6de71..8455f24 100644
--- a/src/com/android/dialer/interactions/PhoneNumberInteraction.java
+++ b/src/com/android/dialer/interactions/PhoneNumberInteraction.java
@@ -52,7 +52,7 @@
import com.android.contacts.common.util.ContactDisplayUtils;
import com.android.dialer.R;
import com.android.dialer.contact.ContactUpdateService;
-import com.android.dialer.util.CallIntentUtil;
+import com.android.dialer.util.IntentUtil;
import com.android.dialer.util.DialerUtils;
import com.google.common.annotations.VisibleForTesting;
@@ -322,7 +322,7 @@
Intent.ACTION_SENDTO, Uri.fromParts("sms", phoneNumber, null));
break;
default:
- intent = CallIntentUtil.getCallIntent(phoneNumber, callOrigin);
+ intent = IntentUtil.getCallIntent(phoneNumber, callOrigin);
break;
}
DialerUtils.startActivityWithErrorToast(context, intent);
diff --git a/src/com/android/dialer/list/SearchFragment.java b/src/com/android/dialer/list/SearchFragment.java
index 73127a2..c314478 100644
--- a/src/com/android/dialer/list/SearchFragment.java
+++ b/src/com/android/dialer/list/SearchFragment.java
@@ -40,14 +40,13 @@
import com.android.contacts.common.util.ViewUtil;
import com.android.contacts.commonbind.analytics.AnalyticsUtil;
import com.android.dialer.dialpad.DialpadFragment.ErrorDialogFragment;
-import com.android.dialer.DialtactsActivity;
import com.android.dialer.R;
import com.android.dialer.util.DialerUtils;
+import com.android.dialer.util.IntentUtil;
import com.android.phone.common.animation.AnimUtils;
public class SearchFragment extends PhoneNumberPickerFragment {
private static final String TAG = SearchFragment.class.getSimpleName();
- private static final String SMS_URI_PREFIX = "sms:";
private OnListFragmentScrolledListener mActivityScrollListener;
@@ -216,7 +215,7 @@
super.onItemClick(position, id);
break;
case DialerPhoneNumberListAdapter.SHORTCUT_DIRECT_CALL:
- number = adapter.getQueryString();
+ number = adapter.getQueryString();
listener = getOnPhoneNumberPickerListener();
if (listener != null && !checkForProhibitedPhoneNumber(number)) {
listener.onCallNumberDirectly(number);
@@ -225,26 +224,23 @@
case DialerPhoneNumberListAdapter.SHORTCUT_CREATE_NEW_CONTACT:
number = TextUtils.isEmpty(mAddToContactNumber) ?
adapter.getFormattedQueryString() : mAddToContactNumber;
- intent = new Intent(Intent.ACTION_INSERT, ContactsContract.Contacts.CONTENT_URI);
- intent.putExtra(ContactsContract.Intents.Insert.PHONE, number);
- intent.putExtra(ContactsContract.Intents.Insert.PHONE_TYPE,
- ContactsContract.CommonDataKinds.Phone.TYPE_MAIN);
+ intent = IntentUtil.getNewContactIntent(number);
DialerUtils.startActivityWithErrorToast(getActivity(), intent);
break;
case DialerPhoneNumberListAdapter.SHORTCUT_ADD_TO_EXISTING_CONTACT:
number = TextUtils.isEmpty(mAddToContactNumber) ?
adapter.getFormattedQueryString() : mAddToContactNumber;
- intent = DialtactsActivity.getAddNumberToContactIntent(number);
+ intent = IntentUtil.getAddToExistingContactIntent(number);
DialerUtils.startActivityWithErrorToast(getActivity(), intent,
R.string.add_contact_not_available);
break;
case DialerPhoneNumberListAdapter.SHORTCUT_SEND_SMS_MESSAGE:
- intent = new Intent(
- Intent.ACTION_VIEW, Uri.parse(SMS_URI_PREFIX + getQueryString()));
+ number = adapter.getFormattedQueryString();
+ intent = IntentUtil.getSendSmsIntent(number);
DialerUtils.startActivityWithErrorToast(getActivity(), intent);
break;
case DialerPhoneNumberListAdapter.SHORTCUT_MAKE_VIDEO_CALL:
- number = adapter.getQueryString();
+ number = adapter.getQueryString();
listener = getOnPhoneNumberPickerListener();
if (listener != null && !checkForProhibitedPhoneNumber(number)) {
listener.onCallNumberDirectly(number, true /* isVideoCall */);
diff --git a/src/com/android/dialer/util/DialerUtils.java b/src/com/android/dialer/util/DialerUtils.java
index 3899b37..a04719a 100644
--- a/src/com/android/dialer/util/DialerUtils.java
+++ b/src/com/android/dialer/util/DialerUtils.java
@@ -71,7 +71,7 @@
*/
public static void startActivityWithErrorToast(Context context, Intent intent, int msgId) {
try {
- if ((CallIntentUtil.CALL_ACTION.equals(intent.getAction())
+ if ((IntentUtil.CALL_ACTION.equals(intent.getAction())
&& context instanceof Activity)) {
// All dialer-initiated calls should pass the touch point to the InCallUI
Point touchPoint = TouchPointManager.getInstance().getPoint();
diff --git a/src/com/android/dialer/util/CallIntentUtil.java b/src/com/android/dialer/util/IntentUtil.java
similarity index 69%
rename from src/com/android/dialer/util/CallIntentUtil.java
rename to src/com/android/dialer/util/IntentUtil.java
index fac26f7..263d3cd 100644
--- a/src/com/android/dialer/util/CallIntentUtil.java
+++ b/src/com/android/dialer/util/IntentUtil.java
@@ -18,6 +18,7 @@
import android.content.Intent;
import android.net.Uri;
+import android.provider.ContactsContract;
import android.telecom.PhoneAccount;
import android.telecom.PhoneAccountHandle;
import android.telecom.TelecomManager;
@@ -27,11 +28,12 @@
import com.android.phone.common.PhoneConstants;
/**
- * Utilities for creation of {@link Intent#ACTION_CALL} intents.
+ * Utilities for creation of intents in Dialer, such as {@link Intent#ACTION_CALL}.
*/
-public class CallIntentUtil {
+public class IntentUtil {
public static final String CALL_ACTION = Intent.ACTION_CALL;
+ private static final String SMS_URI_PREFIX = "sms:";
/**
* Return an Intent for making a phone call. Scheme (e.g. tel, sip) will be determined
@@ -141,4 +143,59 @@
return intent;
}
+
+ public static Intent getSendSmsIntent(CharSequence phoneNumber) {
+ return new Intent(Intent.ACTION_VIEW, Uri.parse(SMS_URI_PREFIX + phoneNumber));
+ }
+
+ public static Intent getNewContactIntent() {
+ return new Intent(Intent.ACTION_INSERT, ContactsContract.Contacts.CONTENT_URI);
+ }
+
+ public static Intent getNewContactIntent(CharSequence phoneNumber) {
+ return getNewContactIntent(
+ null /* name */,
+ phoneNumber /* phoneNumber */,
+ -1 /* phoneNumberType */);
+ }
+
+ public static Intent getNewContactIntent(
+ CharSequence name, CharSequence phoneNumber, int phoneNumberType) {
+ Intent intent = getNewContactIntent();
+ populateContactIntent(intent, name, phoneNumber, phoneNumberType);
+ return intent;
+ }
+
+ public static Intent getAddToExistingContactIntent() {
+ Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
+ intent.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE);
+ return intent;
+ }
+
+ public static Intent getAddToExistingContactIntent(CharSequence phoneNumber) {
+ return getAddToExistingContactIntent(
+ null /* name */,
+ phoneNumber /* phoneNumber */,
+ -1 /* phoneNumberType */);
+ }
+
+ public static Intent getAddToExistingContactIntent(
+ CharSequence name, CharSequence phoneNumber, int phoneNumberType) {
+ Intent intent = getAddToExistingContactIntent();
+ populateContactIntent(intent, name, phoneNumber, phoneNumberType);
+ return intent;
+ }
+
+ private static void populateContactIntent(
+ Intent intent, CharSequence name, CharSequence phoneNumber, int phoneNumberType) {
+ if (phoneNumber != null) {
+ intent.putExtra(ContactsContract.Intents.Insert.PHONE, phoneNumber);
+ }
+ if (name != null) {
+ intent.putExtra(ContactsContract.Intents.Insert.NAME, name);
+ }
+ if (phoneNumberType != -1) {
+ intent.putExtra(ContactsContract.Intents.Insert.PHONE_TYPE, phoneNumberType);
+ }
+ }
}
diff --git a/tests/src/com/android/dialer/util/TestConstants.java b/tests/src/com/android/dialer/util/TestConstants.java
index 8ebf7f1..a3dd051 100644
--- a/tests/src/com/android/dialer/util/TestConstants.java
+++ b/tests/src/com/android/dialer/util/TestConstants.java
@@ -1,5 +1,5 @@
package com.android.dialer.util;
public class TestConstants {
- public static final String CALL_INTENT_ACTION = CallIntentUtil.CALL_ACTION;
+ public static final String CALL_INTENT_ACTION = IntentUtil.CALL_ACTION;
}