Loading src/com/android/contacts/editor/ContactEditorBaseFragment.java +5 −18 Original line number Diff line number Diff line Loading @@ -148,6 +148,8 @@ abstract public class ContactEditorBaseFragment extends Fragment implements protected static final int REQUEST_CODE_ACCOUNTS_CHANGED = 1; protected static final int REQUEST_CODE_PICK_RINGTONE = 2; private static final int CURRENT_API_VERSION = android.os.Build.VERSION.SDK_INT; /** * An intent extra that forces the editor to add the edited contact * to the default group (e.g. "My Contacts"). Loading Loading @@ -678,13 +680,7 @@ abstract public class ContactEditorBaseFragment extends Fragment implements } private void onRingtonePicked(Uri pickedUri) { if (pickedUri == null) { mCustomRingtone = ""; // silent ringtone } else if (RingtoneManager.isDefault(pickedUri)){ mCustomRingtone = null; // default ringtone } else { mCustomRingtone = pickedUri.toString(); } mCustomRingtone = EditorUiUtils.getRingtoneStringFromUri(pickedUri, CURRENT_API_VERSION); Intent intent = ContactSaveService.createSetRingtone( mContext, mLookupUri, mCustomRingtone); mContext.startService(intent); Loading Loading @@ -879,17 +875,8 @@ abstract public class ContactEditorBaseFragment extends Fragment implements // Allow the user to pick a silent ringtone intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true); final Uri ringtoneUri; if (mCustomRingtone != null) { if ("".equals(mCustomRingtone)) { // select silent ringtone in RingtonePickerActivity ringtoneUri = null; } else { ringtoneUri = Uri.parse(mCustomRingtone); } } else { // Otherwise pick default ringtone Uri so that something is selected. ringtoneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE); } 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); Loading src/com/android/contacts/editor/EditorUiUtils.java +30 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,9 @@ import android.provider.ContactsContract.CommonDataKinds.Relation; import android.provider.ContactsContract.CommonDataKinds.SipAddress; import android.provider.ContactsContract.CommonDataKinds.StructuredPostal; import android.provider.ContactsContract.CommonDataKinds.Website; import android.media.RingtoneManager; import android.net.Uri; import android.os.Build; import android.text.TextUtils; import android.util.Pair; import com.android.contacts.R; Loading Loading @@ -189,4 +192,31 @@ public class EditorUiUtils { return null; } } /** * Returns a ringtone string based on the ringtone URI and version #. */ public static String getRingtoneStringFromUri(Uri pickedUri, int currentVersion) { if (isNewerThanM(currentVersion)) { if (pickedUri == null) return ""; // silent ringtone if (RingtoneManager.isDefault(pickedUri)) return null; // default ringtone } if (pickedUri == null || RingtoneManager.isDefault(pickedUri)) return null; return pickedUri.toString(); } /** * Returns a ringtone URI, based on the string and version #. */ public static Uri getRingtoneUriFromString(String str, int currentVersion) { if (str != null) { if (isNewerThanM(currentVersion) && TextUtils.isEmpty(str)) return null; return Uri.parse(str); } return RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE); } private static boolean isNewerThanM(int currentVersion) { return currentVersion > Build.VERSION_CODES.M; } } tests/src/com/android/contacts/editor/EditorUiUtilsTest.java +43 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,10 @@ import com.android.contacts.common.model.account.AccountType; import com.android.contacts.common.model.account.GoogleAccountType; import android.content.Context; import android.media.RingtoneManager; import android.net.Uri; import android.os.Build; import android.provider.Settings; import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.SmallTest; import android.util.Pair; Loading @@ -37,6 +41,8 @@ public class EditorUiUtilsTest extends AndroidTestCase { private static final String GOOGLE_ACCOUNT_NAME = "somebody@gmail.com"; private static final String GOOGLE_DISPLAY_LABEL = "Google"; private static final String RINGTONE = "content://media/external/audio/media/31"; private static final class MockAccountType extends AccountType { private final String mDisplayLabel; Loading Loading @@ -140,4 +146,41 @@ public class EditorUiUtilsTest extends AndroidTestCase { getContext().getString(R.string.account_phone)), pair.second); // "Phone-only, unsynced contact" } public void testGetRingtongStrFromUri_lessThanOrEqualsToM() { final int currentVersion = Build.VERSION_CODES.M; assertNull(EditorUiUtils.getRingtoneStringFromUri(null, currentVersion)); assertNull(EditorUiUtils.getRingtoneStringFromUri(Settings.System.DEFAULT_RINGTONE_URI, currentVersion)); assertEquals(RINGTONE, EditorUiUtils.getRingtoneStringFromUri(Uri.parse(RINGTONE), currentVersion)); } public void testGetRingtongStrFromUri_nOrGreater() { final int currentVersion = Build.VERSION_CODES.M + 1; assertEquals("", EditorUiUtils.getRingtoneStringFromUri(null, currentVersion)); assertNull(EditorUiUtils.getRingtoneStringFromUri(Settings.System.DEFAULT_RINGTONE_URI, currentVersion)); assertEquals(RINGTONE, EditorUiUtils.getRingtoneStringFromUri(Uri.parse(RINGTONE), currentVersion)); } public void testGetRingtongUriFromStr_lessThanOrEqualsToM() { final int currentVersion = Build.VERSION_CODES.M; assertEquals(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE), EditorUiUtils .getRingtoneUriFromString(null, currentVersion)); assertEquals(Uri.parse(""), EditorUiUtils.getRingtoneUriFromString("", currentVersion)); assertEquals(Uri.parse(RINGTONE), EditorUiUtils.getRingtoneUriFromString(RINGTONE, currentVersion)); } public void testGetRingtongUriFromStr_nOrGreater() { final int currentVersion = Build.VERSION_CODES.M + 1; assertEquals(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE), EditorUiUtils .getRingtoneUriFromString(null, currentVersion)); assertNull(EditorUiUtils.getRingtoneUriFromString("", currentVersion)); assertEquals(Uri.parse(RINGTONE), EditorUiUtils.getRingtoneUriFromString(RINGTONE, currentVersion)); } } Loading
src/com/android/contacts/editor/ContactEditorBaseFragment.java +5 −18 Original line number Diff line number Diff line Loading @@ -148,6 +148,8 @@ abstract public class ContactEditorBaseFragment extends Fragment implements protected static final int REQUEST_CODE_ACCOUNTS_CHANGED = 1; protected static final int REQUEST_CODE_PICK_RINGTONE = 2; private static final int CURRENT_API_VERSION = android.os.Build.VERSION.SDK_INT; /** * An intent extra that forces the editor to add the edited contact * to the default group (e.g. "My Contacts"). Loading Loading @@ -678,13 +680,7 @@ abstract public class ContactEditorBaseFragment extends Fragment implements } private void onRingtonePicked(Uri pickedUri) { if (pickedUri == null) { mCustomRingtone = ""; // silent ringtone } else if (RingtoneManager.isDefault(pickedUri)){ mCustomRingtone = null; // default ringtone } else { mCustomRingtone = pickedUri.toString(); } mCustomRingtone = EditorUiUtils.getRingtoneStringFromUri(pickedUri, CURRENT_API_VERSION); Intent intent = ContactSaveService.createSetRingtone( mContext, mLookupUri, mCustomRingtone); mContext.startService(intent); Loading Loading @@ -879,17 +875,8 @@ abstract public class ContactEditorBaseFragment extends Fragment implements // Allow the user to pick a silent ringtone intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true); final Uri ringtoneUri; if (mCustomRingtone != null) { if ("".equals(mCustomRingtone)) { // select silent ringtone in RingtonePickerActivity ringtoneUri = null; } else { ringtoneUri = Uri.parse(mCustomRingtone); } } else { // Otherwise pick default ringtone Uri so that something is selected. ringtoneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE); } 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); Loading
src/com/android/contacts/editor/EditorUiUtils.java +30 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,9 @@ import android.provider.ContactsContract.CommonDataKinds.Relation; import android.provider.ContactsContract.CommonDataKinds.SipAddress; import android.provider.ContactsContract.CommonDataKinds.StructuredPostal; import android.provider.ContactsContract.CommonDataKinds.Website; import android.media.RingtoneManager; import android.net.Uri; import android.os.Build; import android.text.TextUtils; import android.util.Pair; import com.android.contacts.R; Loading Loading @@ -189,4 +192,31 @@ public class EditorUiUtils { return null; } } /** * Returns a ringtone string based on the ringtone URI and version #. */ public static String getRingtoneStringFromUri(Uri pickedUri, int currentVersion) { if (isNewerThanM(currentVersion)) { if (pickedUri == null) return ""; // silent ringtone if (RingtoneManager.isDefault(pickedUri)) return null; // default ringtone } if (pickedUri == null || RingtoneManager.isDefault(pickedUri)) return null; return pickedUri.toString(); } /** * Returns a ringtone URI, based on the string and version #. */ public static Uri getRingtoneUriFromString(String str, int currentVersion) { if (str != null) { if (isNewerThanM(currentVersion) && TextUtils.isEmpty(str)) return null; return Uri.parse(str); } return RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE); } private static boolean isNewerThanM(int currentVersion) { return currentVersion > Build.VERSION_CODES.M; } }
tests/src/com/android/contacts/editor/EditorUiUtilsTest.java +43 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,10 @@ import com.android.contacts.common.model.account.AccountType; import com.android.contacts.common.model.account.GoogleAccountType; import android.content.Context; import android.media.RingtoneManager; import android.net.Uri; import android.os.Build; import android.provider.Settings; import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.SmallTest; import android.util.Pair; Loading @@ -37,6 +41,8 @@ public class EditorUiUtilsTest extends AndroidTestCase { private static final String GOOGLE_ACCOUNT_NAME = "somebody@gmail.com"; private static final String GOOGLE_DISPLAY_LABEL = "Google"; private static final String RINGTONE = "content://media/external/audio/media/31"; private static final class MockAccountType extends AccountType { private final String mDisplayLabel; Loading Loading @@ -140,4 +146,41 @@ public class EditorUiUtilsTest extends AndroidTestCase { getContext().getString(R.string.account_phone)), pair.second); // "Phone-only, unsynced contact" } public void testGetRingtongStrFromUri_lessThanOrEqualsToM() { final int currentVersion = Build.VERSION_CODES.M; assertNull(EditorUiUtils.getRingtoneStringFromUri(null, currentVersion)); assertNull(EditorUiUtils.getRingtoneStringFromUri(Settings.System.DEFAULT_RINGTONE_URI, currentVersion)); assertEquals(RINGTONE, EditorUiUtils.getRingtoneStringFromUri(Uri.parse(RINGTONE), currentVersion)); } public void testGetRingtongStrFromUri_nOrGreater() { final int currentVersion = Build.VERSION_CODES.M + 1; assertEquals("", EditorUiUtils.getRingtoneStringFromUri(null, currentVersion)); assertNull(EditorUiUtils.getRingtoneStringFromUri(Settings.System.DEFAULT_RINGTONE_URI, currentVersion)); assertEquals(RINGTONE, EditorUiUtils.getRingtoneStringFromUri(Uri.parse(RINGTONE), currentVersion)); } public void testGetRingtongUriFromStr_lessThanOrEqualsToM() { final int currentVersion = Build.VERSION_CODES.M; assertEquals(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE), EditorUiUtils .getRingtoneUriFromString(null, currentVersion)); assertEquals(Uri.parse(""), EditorUiUtils.getRingtoneUriFromString("", currentVersion)); assertEquals(Uri.parse(RINGTONE), EditorUiUtils.getRingtoneUriFromString(RINGTONE, currentVersion)); } public void testGetRingtongUriFromStr_nOrGreater() { final int currentVersion = Build.VERSION_CODES.M + 1; assertEquals(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE), EditorUiUtils .getRingtoneUriFromString(null, currentVersion)); assertNull(EditorUiUtils.getRingtoneUriFromString("", currentVersion)); assertEquals(Uri.parse(RINGTONE), EditorUiUtils.getRingtoneUriFromString(RINGTONE, currentVersion)); } }