Modify QuickContact options menu
am: 58a1ac2d41
Change-Id: I463db2e72943416227150fd0df217ae2699e2c88
diff --git a/res/menu/quickcontact.xml b/res/menu/quickcontact.xml
index a0cbdbb..4d00a67 100644
--- a/res/menu/quickcontact.xml
+++ b/res/menu/quickcontact.xml
@@ -47,6 +47,14 @@
android:title="@string/menu_create_contact_shortcut" />
<item
+ android:id="@+id/menu_set_ringtone"
+ android:title="@string/menu_set_ring_tone" />
+
+ <item
+ android:id="@+id/menu_send_to_voicemail"
+ android:title="@string/menu_redirect_calls_to_vm"/>
+
+ <item
android:id="@+id/menu_help"
android:title="@string/menu_help" />
</menu>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index cd953ec..2b72d32 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -91,7 +91,7 @@
<string name="menu_change_photo">Change photo</string>
<!-- Menu item used to create a contact shortcut when viewing contact details. [CHAR LIMIT=30] -->
- <string name="menu_create_contact_shortcut">Place on Home screen</string>
+ <string name="menu_create_contact_shortcut">Create shortcut</string>
<!-- Menu item used to call a specific contact when viewing the details of that contact. -->
<string name="menu_call">Call contact</string>
@@ -208,11 +208,14 @@
<!-- Activity title indicating contacts are from a specific account [CHAR LIMIT=15] -->
<string name="title_from_other_accounts">From <xliff:g id="account">%s</xliff:g></string>
- <!-- Menu item that opens the Options activity for a given contact [CHAR LIMIT=15] -->
+ <!-- Menu item to set ring tone for a given contact [CHAR LIMIT=15] -->
<string name="menu_set_ring_tone">Set ringtone</string>
- <!-- Menu item that opens the Options activity for a given contact [CHAR LIMIT=30] -->
- <string name="menu_redirect_calls_to_vm">All calls to voicemail</string>
+ <!-- Menu item to route all calls from a given contact to voice mail [CHAR LIMIT=30] -->
+ <string name="menu_redirect_calls_to_vm">Route to voicemail</string>
+
+ <!-- Menu item to unroute all calls from a given contact to voice mail [CHAR LIMIT=30] -->
+ <string name="menu_unredirect_calls_to_vm">Unroute to voicemail</string>
<!-- Warning dialog contents after users select to delete a ReadOnly contact. [CHAR LIMIT=NONE] -->
<string name="readOnlyContactWarning">Contacts from your read-only accounts cannot be deleted, but they can be hidden.</string>
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 87c339a..f69f2ec 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -42,6 +42,7 @@
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
+import android.media.RingtoneManager;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
@@ -163,6 +164,7 @@
import com.android.contacts.editor.AggregationSuggestionEngine.Suggestion;
import com.android.contacts.editor.ContactEditorFragment;
import com.android.contacts.editor.EditorIntents;
+import com.android.contacts.editor.EditorUiUtils;
import com.android.contacts.editor.SplitContactConfirmationDialogFragment;
import com.android.contacts.interactions.CalendarInteractionsLoader;
import com.android.contacts.interactions.CallLogInteractionsLoader;
@@ -233,12 +235,19 @@
private static final String KEY_PREVIOUS_CONTACT_ID = "previous_contact_id";
private static final String KEY_SUGGESTIONS_AUTO_SELECTED = "suggestions_auto_seleted";
+ private static final String KEY_SEND_TO_VOICE_MAIL_STATE = "sendToVoicemailState";
+ private static final String KEY_ARE_PHONE_OPTIONS_CHANGEABLE = "arePhoneOptionsChangable";
+ private static final String KEY_CUSTOM_RINGTONE = "customRingtone";
+
private static final int ANIMATION_STATUS_BAR_COLOR_CHANGE_DURATION = 150;
private static final int REQUEST_CODE_CONTACT_EDITOR_ACTIVITY = 1;
private static final int SCRIM_COLOR = Color.argb(0xC8, 0, 0, 0);
private static final int REQUEST_CODE_CONTACT_SELECTION_ACTIVITY = 2;
private static final String MIMETYPE_SMS = "vnd.android-dir/mms-sms";
private static final int REQUEST_CODE_JOIN = 3;
+ private static final int REQUEST_CODE_PICK_RINGTONE = 4;
+
+ private static final int CURRENT_API_VERSION = android.os.Build.VERSION.SDK_INT;
/** This is the Intent action to install a shortcut in the launcher. */
private static final String ACTION_INSTALL_SHORTCUT =
@@ -246,6 +255,11 @@
public static final String ACTION_SPLIT_COMPLETED = "splitCompleted";
+ // Phone specific option menu items
+ private boolean mSendToVoicemailState;
+ private boolean mArePhoneOptionsChangable;
+ private String mCustomRingtone;
+
@SuppressWarnings("deprecation")
private static final String LEGACY_AUTHORITY = android.provider.Contacts.AUTHORITY;
@@ -953,6 +967,12 @@
mIsRecreatedInstance = savedInstanceState != null;
if (mIsRecreatedInstance) {
mPreviousContactId = savedInstanceState.getLong(KEY_PREVIOUS_CONTACT_ID);
+
+ // Phone specific options menus
+ mSendToVoicemailState = savedInstanceState.getBoolean(KEY_SEND_TO_VOICE_MAIL_STATE);
+ mArePhoneOptionsChangable =
+ savedInstanceState.getBoolean(KEY_ARE_PHONE_OPTIONS_CHANGEABLE);
+ mCustomRingtone = savedInstanceState.getString(KEY_CUSTOM_RINGTONE);
}
mShouldLog = true;
@@ -1191,9 +1211,20 @@
if (data != null) {
joinAggregate(ContentUris.parseId(data.getData()));
}
+ } else if (requestCode == REQUEST_CODE_PICK_RINGTONE && data != null) {
+ final Uri pickedUri = data.getParcelableExtra(
+ RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
+ onRingtonePicked(pickedUri);
}
}
+ private void onRingtonePicked(Uri pickedUri) {
+ mCustomRingtone = EditorUiUtils.getRingtoneStringFromUri(pickedUri, CURRENT_API_VERSION);
+ Intent intent = ContactSaveService.createSetRingtone(
+ this, mLookupUri, mCustomRingtone);
+ this.startService(intent);
+ }
+
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
@@ -1215,6 +1246,11 @@
KEY_SUGGESTIONS_AUTO_SELECTED, mSuggestionsShouldAutoSelected);
savedInstanceState.putSerializable(
KEY_SELECTED_SUGGESTION_CONTACTS, mSelectedAggregationIds);
+
+ // Phone specific options
+ savedInstanceState.putBoolean(KEY_SEND_TO_VOICE_MAIL_STATE, mSendToVoicemailState);
+ savedInstanceState.putBoolean(KEY_ARE_PHONE_OPTIONS_CHANGEABLE, mArePhoneOptionsChangable);
+ savedInstanceState.putString(KEY_CUSTOM_RINGTONE, mCustomRingtone);
}
private void processIntent(Intent intent) {
@@ -1350,6 +1386,7 @@
}
mContactType = newContactType;
+ setStateForPhoneMenuItems(mContactData);
invalidateOptionsMenu();
Trace.endSection();
@@ -2972,6 +3009,15 @@
return receivers != null && receivers.size() > 0;
}
+ private void setStateForPhoneMenuItems(Contact contact) {
+ if (contact != null) {
+ mSendToVoicemailState = contact.isSendToVoicemail();
+ mCustomRingtone = contact.getCustomRingtone();
+ mArePhoneOptionsChangable = isContactEditable()
+ && PhoneCapabilityTester.isPhone(this);
+ }
+ }
+
@Override
public boolean onCreateOptionsMenu(Menu menu) {
final MenuInflater inflater = getMenuInflater();
@@ -3018,6 +3064,17 @@
final MenuItem shortcutMenuItem = menu.findItem(R.id.menu_create_contact_shortcut);
shortcutMenuItem.setVisible(isShortcutCreatable());
+ // Hide telephony-related settings (ringtone, send to voicemail)
+ // if we don't have a telephone
+ final MenuItem ringToneMenuItem = menu.findItem(R.id.menu_set_ringtone);
+ ringToneMenuItem.setVisible(!mContactData.isUserProfile() && mArePhoneOptionsChangable);
+
+ final MenuItem sendToVoiceMailMenuItem = menu.findItem(R.id.menu_send_to_voicemail);
+ sendToVoiceMailMenuItem.setVisible(!mContactData.isUserProfile()
+ && mArePhoneOptionsChangable);
+ sendToVoiceMailMenuItem.setTitle(mSendToVoicemailState
+ ? R.string.menu_unredirect_calls_to_vm : R.string.menu_redirect_calls_to_vm);
+
final MenuItem helpMenu = menu.findItem(R.id.menu_help);
helpMenu.setVisible(HelpUtils.isHelpAndFeedbackAvailable());
@@ -3136,6 +3193,19 @@
createLauncherShortcutWithContact();
}
return true;
+ case R.id.menu_set_ringtone:
+ doPickRingtone();
+ return true;
+ case R.id.menu_send_to_voicemail:
+ // Update state and save
+ mSendToVoicemailState = !mSendToVoicemailState;
+ item.setTitle(mSendToVoicemailState
+ ? R.string.menu_unredirect_calls_to_vm
+ : R.string.menu_redirect_calls_to_vm);
+ final Intent intent = ContactSaveService.createSetSendToVoicemail(
+ this, mLookupUri, mSendToVoicemailState);
+ this.startService(intent);
+ return true;
case R.id.menu_help:
Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
ActionType.HELP, /* thirdPartyAction */ null);
@@ -3195,4 +3265,27 @@
ContactSaveService.startService(this, intent,
ContactEditorActivity.ContactEditor.SaveMode.SPLIT);
}
+
+ private void doPickRingtone() {
+ final Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
+ // Allow user to pick 'Default'
+ intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
+ // Show only ringtones
+ intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE);
+ // Allow the user to pick a silent ringtone
+ intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true);
+
+ final Uri ringtoneUri = EditorUiUtils.getRingtoneUriFromString(mCustomRingtone,
+ CURRENT_API_VERSION);
+
+ // Put checkmark next to the current ringtone for this contact
+ intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, ringtoneUri);
+
+ // Launch!
+ try {
+ startActivityForResult(intent, REQUEST_CODE_PICK_RINGTONE);
+ } catch (ActivityNotFoundException ex) {
+ Toast.makeText(this, R.string.missing_app, Toast.LENGTH_SHORT).show();
+ }
+ }
}