Options Menu layout changes

Show correct buttons for each tab
Show correct buttons for contact viewer and editor
Removed ContactOptions activity and now showing ringtone picker
directly.
Removed all "contact options" from XMLs.

Bug: 5062002

Change-Id: Ic52eaacdc5d9b5aab55fde37181c6ad6d7154b74
diff --git a/src/com/android/contacts/ContactLoader.java b/src/com/android/contacts/ContactLoader.java
index 4078598..e759efe 100644
--- a/src/com/android/contacts/ContactLoader.java
+++ b/src/com/android/contacts/ContactLoader.java
@@ -126,6 +126,8 @@
 
         private boolean mLoadingPhoto;
         private byte[] mPhotoBinaryData;
+        private boolean mSendToVoicemail;
+        private String mCustomRingtone;
 
         /**
          * Constructor for case "no contact found". This must only be used for the
@@ -150,6 +152,8 @@
             mStarred = false;
             mPresence = null;
             mInvitableAccountTypes = null;
+            mSendToVoicemail = false;
+            mCustomRingtone = null;
         }
 
         /**
@@ -158,7 +162,7 @@
         private Result(Uri uri, Uri lookupUri, long directoryId, String lookupKey, long id,
                 long nameRawContactId, int displayNameSource, long photoId, String photoUri,
                 String displayName, String altDisplayName, String phoneticName, boolean starred,
-                Integer presence) {
+                Integer presence, boolean sendToVoicemail, String customRingtone) {
             mLookupUri = lookupUri;
             mUri = uri;
             mDirectoryId = directoryId;
@@ -177,6 +181,8 @@
             mStarred = starred;
             mPresence = presence;
             mInvitableAccountTypes = Lists.newArrayList();
+            mSendToVoicemail = sendToVoicemail;
+            mCustomRingtone = customRingtone;
         }
 
         private Result(Result from) {
@@ -209,6 +215,8 @@
 
             mLoadingPhoto = from.mLoadingPhoto;
             mPhotoBinaryData = from.mPhotoBinaryData;
+            mSendToVoicemail = from.mSendToVoicemail;
+            mCustomRingtone = from.mCustomRingtone;
         }
 
         /**
@@ -378,6 +386,14 @@
         public List<GroupMetaData> getGroupMetaData() {
             return mGroups;
         }
+
+        public boolean isSendToVoicemail() {
+            return mSendToVoicemail;
+        }
+
+        public String getCustomRingtone() {
+            return mCustomRingtone;
+        }
     }
 
     /**
@@ -451,6 +467,8 @@
                 Data.STATUS_TIMESTAMP,
 
                 Contacts.PHOTO_URI,
+                Contacts.SEND_TO_VOICEMAIL,
+                Contacts.CUSTOM_RINGTONE,
         };
 
         public final static int NAME_RAW_CONTACT_ID = 0;
@@ -518,6 +536,8 @@
         public final static int STATUS_TIMESTAMP = 58;
 
         public final static int PHOTO_URI = 59;
+        public final static int SEND_TO_VOICEMAIL = 60;
+        public final static int CUSTOM_RINGTONE = 61;
     }
 
     /**
@@ -773,6 +793,8 @@
             final Integer presence = cursor.isNull(ContactQuery.CONTACT_PRESENCE)
                     ? null
                     : cursor.getInt(ContactQuery.CONTACT_PRESENCE);
+            final boolean sendToVoicemail = cursor.getInt(ContactQuery.SEND_TO_VOICEMAIL) == 1;
+            final String customRingtone = cursor.getString(ContactQuery.CUSTOM_RINGTONE);
 
             Uri lookupUri;
             if (directoryId == Directory.DEFAULT || directoryId == Directory.LOCAL_INVISIBLE) {
@@ -784,7 +806,8 @@
 
             return new Result(contactUri, lookupUri, directoryId, lookupKey, contactId,
                     nameRawContactId, displayNameSource, photoId, photoUri, displayName,
-                    altDisplayName, phoneticName, starred, presence);
+                    altDisplayName, phoneticName, starred, presence, sendToVoicemail,
+                    customRingtone);
         }
 
         /**
diff --git a/src/com/android/contacts/ContactOptionsActivity.java b/src/com/android/contacts/ContactOptionsActivity.java
deleted file mode 100644
index dd7387f..0000000
--- a/src/com/android/contacts/ContactOptionsActivity.java
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * Copyright (C) 2009 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.
- */
-
-package com.android.contacts;
-
-import com.android.contacts.activities.PeopleActivity;
-
-import android.app.ActionBar;
-import android.app.Activity;
-import android.content.ContentValues;
-import android.content.Intent;
-import android.database.Cursor;
-import android.media.Ringtone;
-import android.media.RingtoneManager;
-import android.net.Uri;
-import android.os.Bundle;
-import android.provider.ContactsContract.Contacts;
-import android.util.Log;
-import android.view.MenuItem;
-import android.view.View;
-import android.widget.CheckBox;
-import android.widget.TextView;
-
-/**
- * An activity for selecting options for a given contact: custom ringtone and send-to-voicemail.
- */
-public class ContactOptionsActivity extends Activity implements View.OnClickListener {
-
-    private static final String TAG = "ContactOptionsActivity";
-
-    private static final String[] AGGREGATES_PROJECTION = new String[] {
-            Contacts.CUSTOM_RINGTONE, Contacts.SEND_TO_VOICEMAIL
-    };
-
-    private static final int COL_CUSTOM_RINGTONE = 0;
-    private static final int COL_SEND_TO_VOICEMAIL = 1;
-
-    /** The launch code when picking a ringtone */
-    private static final int RINGTONE_PICKED = 3023;
-
-    private String mCustomRingtone;
-    private boolean mSendToVoicemail;
-    private TextView mRingtoneTitle;
-    private CheckBox mSendToVoicemailCheckbox;
-
-    private Uri mLookupUri;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        mLookupUri = getIntent().getData();
-
-        setContentView(R.layout.contact_options);
-
-        View ringtoneLayout = findViewById(R.id.ringtone);
-        ringtoneLayout.setFocusable(true);
-        ringtoneLayout.setOnClickListener(this);
-        TextView label = (TextView)findViewById(R.id.label);
-        label.setText(getString(R.string.label_ringtone));
-
-        mRingtoneTitle = (TextView)ringtoneLayout.findViewById(R.id.data);
-
-        View sendToVoicemailLayout = findViewById(R.id.voicemail);
-        sendToVoicemailLayout.setOnClickListener(this);
-        label = (TextView)sendToVoicemailLayout.findViewById(R.id.label);
-        label.setText(getString(R.string.actionIncomingCall));
-
-        ActionBar actionBar =  getActionBar();
-        if (actionBar != null) {
-            actionBar.setDisplayHomeAsUpEnabled(true);
-        }
-
-        mSendToVoicemailCheckbox = (CheckBox)sendToVoicemailLayout.findViewById(R.id.checkbox);
-    }
-
-    @Override
-    protected void onResume() {
-        super.onResume();
-
-        if (!loadData()) {
-            finish();
-        }
-
-        updateView();
-    }
-
-    private void updateView() {
-        if (mCustomRingtone == null) {
-            mRingtoneTitle.setText(getString(R.string.default_ringtone));
-        } else {
-            Uri ringtoneUri = Uri.parse(mCustomRingtone);
-            Ringtone ringtone = RingtoneManager.getRingtone(this, ringtoneUri);
-            if (ringtone == null) {
-                Log.w(TAG, "ringtone's URI doesn't resolve to a Ringtone");
-                return;
-            }
-            mRingtoneTitle.setText(ringtone.getTitle(this));
-        }
-
-        mSendToVoicemailCheckbox.setChecked(mSendToVoicemail);
-    }
-
-    public void onClick(View v) {
-        switch (v.getId()) {
-            case R.id.ringtone: {
-                doPickRingtone();
-                break;
-            }
-            case R.id.voicemail: {
-                doToggleSendToVoicemail();
-                break;
-            }
-        }
-    }
-
-    private void doPickRingtone() {
-
-        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);
-        // Don't show 'Silent'
-        intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
-
-        Uri ringtoneUri;
-        if (mCustomRingtone != null) {
-            ringtoneUri = Uri.parse(mCustomRingtone);
-        } else {
-            // Otherwise pick default ringtone Uri so that something is selected.
-            ringtoneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
-        }
-
-        // Put checkmark next to the current ringtone for this contact
-        intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, ringtoneUri);
-
-        // Launch!
-        startActivityForResult(intent, RINGTONE_PICKED);
-    }
-
-    @Override
-    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-        if (resultCode != RESULT_OK) {
-            return;
-        }
-
-        switch (requestCode) {
-            case RINGTONE_PICKED: {
-                Uri pickedUri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
-                handleRingtonePicked(pickedUri);
-                break;
-            }
-        }
-    }
-
-    private void handleRingtonePicked(Uri pickedUri) {
-        if (pickedUri == null || RingtoneManager.isDefault(pickedUri)) {
-            mCustomRingtone = null;
-        } else {
-            mCustomRingtone = pickedUri.toString();
-        }
-        saveData();
-        updateView();
-    }
-
-    private void doToggleSendToVoicemail() {
-        mSendToVoicemailCheckbox.toggle();
-        mSendToVoicemail = mSendToVoicemailCheckbox.isChecked();
-        saveData();
-        updateView();
-    }
-
-    private boolean loadData() {
-        Cursor c =
-                getContentResolver().query(mLookupUri, AGGREGATES_PROJECTION, null, null, null);
-        try {
-            if (!c.moveToFirst()) {
-                return false;
-            }
-
-            mCustomRingtone = c.getString(COL_CUSTOM_RINGTONE);
-            mSendToVoicemail = c.getInt(COL_SEND_TO_VOICEMAIL) != 0;
-
-        } finally {
-            c.close();
-        }
-        return true;
-    }
-
-    private void saveData() {
-        ContentValues values = new ContentValues(2);
-        values.put(Contacts.CUSTOM_RINGTONE, mCustomRingtone);
-        values.put(Contacts.SEND_TO_VOICEMAIL, mSendToVoicemail);
-        getContentResolver().update(mLookupUri, values, null, null);
-    }
-
-    @Override
-    public void startSearch(String initialQuery, boolean selectInitialQuery, Bundle appSearchData,
-            boolean globalSearch) {
-        if (globalSearch) {
-            super.startSearch(initialQuery, selectInitialQuery, appSearchData, globalSearch);
-        } else {
-            ContactsSearchManager.startSearch(this, initialQuery);
-        }
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-
-        switch (item.getItemId()) {
-            case android.R.id.home:
-                Intent intent = new Intent(this, PeopleActivity.class);
-                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-                startActivity(intent);
-                finish();
-                return true;
-            default:
-                break;
-        }
-        return super.onOptionsItemSelected(item);
-    }
-}
-
-
diff --git a/src/com/android/contacts/ContactSaveService.java b/src/com/android/contacts/ContactSaveService.java
index 775009e..e2ab6b0 100644
--- a/src/com/android/contacts/ContactSaveService.java
+++ b/src/com/android/contacts/ContactSaveService.java
@@ -98,6 +98,12 @@
     public static final String EXTRA_CONTACT_ID2 = "contactId2";
     public static final String EXTRA_CONTACT_WRITABLE = "contactWritable";
 
+    public static final String ACTION_SET_SEND_TO_VOICEMAIL = "sendToVoicemail";
+    public static final String EXTRA_SEND_TO_VOICEMAIL_FLAG = "sendToVoicemailFlag";
+
+    public static final String ACTION_SET_RINGTONE = "setRingtone";
+    public static final String EXTRA_CUSTOM_RINGTONE = "customRingtone";
+
     private static final HashSet<String> ALLOWED_DATA_COLUMNS = Sets.newHashSet(
         Data.MIMETYPE,
         Data.IS_PRIMARY,
@@ -185,6 +191,10 @@
             deleteContact(intent);
         } else if (ACTION_JOIN_CONTACTS.equals(action)) {
             joinContacts(intent);
+        } else if (ACTION_SET_SEND_TO_VOICEMAIL.equals(action)) {
+            setSendToVoicemail(intent);
+        } else if (ACTION_SET_RINGTONE.equals(action)) {
+            setRingtone(intent);
         }
     }
 
@@ -382,6 +392,7 @@
      * @param callbackActivity is the activity to send the callback intent to
      * @param callbackAction is the intent action for the callback intent
      */
+
     public static Intent createNewGroupIntent(Context context, Account account,
             String label, long[] rawContactsToAdd, Class<?> callbackActivity,
             String callbackAction) {
@@ -657,6 +668,57 @@
     }
 
     /**
+     * Creates an intent that can be sent to this service to set the redirect to voicemail.
+     */
+    public static Intent createSetSendToVoicemail(Context context, Uri contactUri,
+            boolean value) {
+        Intent serviceIntent = new Intent(context, ContactSaveService.class);
+        serviceIntent.setAction(ContactSaveService.ACTION_SET_SEND_TO_VOICEMAIL);
+        serviceIntent.putExtra(ContactSaveService.EXTRA_CONTACT_URI, contactUri);
+        serviceIntent.putExtra(ContactSaveService.EXTRA_SEND_TO_VOICEMAIL_FLAG, value);
+
+        return serviceIntent;
+    }
+
+    private void setSendToVoicemail(Intent intent) {
+        Uri contactUri = intent.getParcelableExtra(EXTRA_CONTACT_URI);
+        boolean value = intent.getBooleanExtra(EXTRA_SEND_TO_VOICEMAIL_FLAG, false);
+        if (contactUri == null) {
+            Log.e(TAG, "Invalid arguments for setRedirectToVoicemail");
+            return;
+        }
+
+        final ContentValues values = new ContentValues(1);
+        values.put(Contacts.SEND_TO_VOICEMAIL, value);
+        getContentResolver().update(contactUri, values, null, null);
+    }
+
+    /**
+     * Creates an intent that can be sent to this service to save the contact's ringtone.
+     */
+    public static Intent createSetRingtone(Context context, Uri contactUri,
+            String value) {
+        Intent serviceIntent = new Intent(context, ContactSaveService.class);
+        serviceIntent.setAction(ContactSaveService.ACTION_SET_RINGTONE);
+        serviceIntent.putExtra(ContactSaveService.EXTRA_CONTACT_URI, contactUri);
+        serviceIntent.putExtra(ContactSaveService.EXTRA_CUSTOM_RINGTONE, value);
+
+        return serviceIntent;
+    }
+
+    private void setRingtone(Intent intent) {
+        Uri contactUri = intent.getParcelableExtra(EXTRA_CONTACT_URI);
+        String value = intent.getStringExtra(EXTRA_CUSTOM_RINGTONE);
+        if (contactUri == null) {
+            Log.e(TAG, "Invalid arguments for setRingtone");
+            return;
+        }
+        ContentValues values = new ContentValues(1);
+        values.put(Contacts.CUSTOM_RINGTONE, value);
+        getContentResolver().update(contactUri, values, null, null);
+    }
+
+    /**
      * Creates an intent that sets the selected data item as super primary (default)
      */
     public static Intent createSetSuperPrimaryIntent(Context context, long dataId) {
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 579c833..0560a20 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -1244,14 +1244,18 @@
         if (mActionBarAdapter.isSearchMode()) {
             addContactMenu.setVisible(false);
             addGroupMenu.setVisible(false);
+            contactsFilterMenu.setVisible(false);
         } else {
             switch (mActionBarAdapter.getCurrentTab()) {
                 case FAVORITES:
-                    // TODO: Fall through until we determine what the menu items should be for
-                    // this tab
+                    addContactMenu.setVisible(false);
+                    addGroupMenu.setVisible(false);
+                    contactsFilterMenu.setVisible(false);
+                    break;
                 case ALL:
                     addContactMenu.setVisible(true);
                     addGroupMenu.setVisible(false);
+                    contactsFilterMenu.setVisible(true);
                     break;
                 case GROUPS:
                     // Do not display the "new group" button if no accounts are available
@@ -1261,6 +1265,7 @@
                         addGroupMenu.setVisible(false);
                     }
                     addContactMenu.setVisible(false);
+                    contactsFilterMenu.setVisible(false);
                     break;
             }
         }
@@ -1270,9 +1275,6 @@
             searchMenu.setVisible(!mActionBarAdapter.isSearchMode());
         }
 
-        if (contactsFilterMenu != null) {
-            contactsFilterMenu.setVisible(!mActionBarAdapter.isSearchMode());
-        }
 
         MenuItem settings = menu.findItem(R.id.menu_settings);
         if (settings != null) {
diff --git a/src/com/android/contacts/detail/ContactLoaderFragment.java b/src/com/android/contacts/detail/ContactLoaderFragment.java
index daa6012..f8cbb24 100644
--- a/src/com/android/contacts/detail/ContactLoaderFragment.java
+++ b/src/com/android/contacts/detail/ContactLoaderFragment.java
@@ -17,8 +17,9 @@
 package com.android.contacts.detail;
 
 import com.android.contacts.ContactLoader;
-import com.android.contacts.ContactOptionsActivity;
+import com.android.contacts.ContactSaveService;
 import com.android.contacts.R;
+import com.android.contacts.activities.ContactDetailActivity;
 import com.android.contacts.activities.ContactDetailActivity.FragmentKeyListener;
 import com.android.contacts.util.PhoneCapabilityTester;
 import com.android.internal.util.Objects;
@@ -28,9 +29,11 @@
 import android.app.LoaderManager;
 import android.app.LoaderManager.LoaderCallbacks;
 import android.content.ActivityNotFoundException;
+import android.content.ContentValues;
 import android.content.Context;
 import android.content.Intent;
 import android.content.Loader;
+import android.media.RingtoneManager;
 import android.net.Uri;
 import android.os.Bundle;
 import android.provider.ContactsContract.Contacts;
@@ -52,9 +55,15 @@
 
     private static final String TAG = ContactLoaderFragment.class.getSimpleName();
 
+    /** The launch code when picking a ringtone */
+    private static final int REQUEST_CODE_PICK_RINGTONE = 1;
+
+
     private boolean mOptionsMenuOptions;
     private boolean mOptionsMenuEditable;
     private boolean mOptionsMenuShareable;
+    private boolean mSendToVoicemailState;
+    private String mCustomRingtone;
 
     /**
      * This is a listener to the {@link ContactLoaderFragment} and will be notified when the
@@ -194,6 +203,8 @@
                     mListener.onDetailsLoaded(mContactData);
                 }
             }
+            // Make sure the options menu is setup correctly with the loaded data.
+            getActivity().invalidateOptionsMenu();
         }
 
         @Override
@@ -222,11 +233,22 @@
         mOptionsMenuOptions = isContactOptionsChangeEnabled();
         mOptionsMenuEditable = isContactEditable();
         mOptionsMenuShareable = isContactShareable();
+        if (mContactData != null) {
+            mSendToVoicemailState = mContactData.isSendToVoicemail();
+            mCustomRingtone = mContactData.getCustomRingtone();
+        }
 
-        // Options only shows telephony-related settings (ringtone, send to voicemail).
-        // ==> Hide if we don't have a telephone
-        final MenuItem optionsMenu = menu.findItem(R.id.menu_options);
-        optionsMenu.setVisible(mOptionsMenuOptions);
+        // Hide telephony-related settings (ringtone, send to voicemail)
+        // if we don't have a telephone
+        final MenuItem optionsSendToVoicemail = menu.findItem(R.id.menu_send_to_voicemail);
+        if (optionsSendToVoicemail != null) {
+            optionsSendToVoicemail.setChecked(mSendToVoicemailState);
+            optionsSendToVoicemail.setVisible(mOptionsMenuOptions);
+        }
+        final MenuItem optionsRingtone = menu.findItem(R.id.menu_set_ringtone);
+        if (optionsRingtone != null) {
+            optionsRingtone.setVisible(mOptionsMenuOptions);
+        }
 
         final MenuItem editMenu = menu.findItem(R.id.menu_edit);
         editMenu.setVisible(mOptionsMenuEditable);
@@ -262,11 +284,9 @@
                 if (mListener != null) mListener.onDeleteRequested(mLookupUri);
                 return true;
             }
-            case R.id.menu_options: {
+            case R.id.menu_set_ringtone: {
                 if (mContactData == null) return false;
-                final Intent intent = new Intent(mContext, ContactOptionsActivity.class);
-                intent.setData(mContactData.getLookupUri());
-                mContext.startActivity(intent);
+                doPickRingtone();
                 return true;
             }
             case R.id.menu_share: {
@@ -290,6 +310,15 @@
                 }
                 return true;
             }
+            case R.id.menu_send_to_voicemail: {
+                // Update state and save
+                mSendToVoicemailState = !mSendToVoicemailState;
+                item.setChecked(mSendToVoicemailState);
+                Intent intent = ContactSaveService.createSetSendToVoicemail(
+                        mContext, mLookupUri, mSendToVoicemailState);
+                mContext.startService(intent);
+                return true;
+            }
         }
         return false;
     }
@@ -304,4 +333,55 @@
         }
         return false;
     }
+
+    private void doPickRingtone() {
+
+        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);
+        // Don't show 'Silent'
+        intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
+
+        Uri ringtoneUri;
+        if (mCustomRingtone != null) {
+            ringtoneUri = Uri.parse(mCustomRingtone);
+        } else {
+            // Otherwise pick default ringtone Uri so that something is selected.
+            ringtoneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
+        }
+
+        // Put checkmark next to the current ringtone for this contact
+        intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, ringtoneUri);
+
+        // Launch!
+        startActivityForResult(intent, REQUEST_CODE_PICK_RINGTONE);
+    }
+
+    @Override
+    public void onActivityResult(int requestCode, int resultCode, Intent data) {
+        if (resultCode != Activity.RESULT_OK) {
+            return;
+        }
+
+        switch (requestCode) {
+            case REQUEST_CODE_PICK_RINGTONE: {
+                Uri pickedUri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
+                handleRingtonePicked(pickedUri);
+                break;
+            }
+        }
+    }
+
+    private void handleRingtonePicked(Uri pickedUri) {
+        if (pickedUri == null || RingtoneManager.isDefault(pickedUri)) {
+            mCustomRingtone = null;
+        } else {
+            mCustomRingtone = pickedUri.toString();
+        }
+        Intent intent = ContactSaveService.createSetRingtone(
+                mContext, mLookupUri, mCustomRingtone);
+        mContext.startService(intent);
+    }
 }