diff --git a/app/build.gradle b/app/build.gradle index c59039bd..46209bcd 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -57,7 +57,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.33.28' + implementation 'com.simplemobiletools:commons:5.33.30' implementation 'joda-time:joda-time:2.10.1' implementation 'com.googlecode.ez-vcard:ez-vcard:0.10.5' implementation 'com.github.tibbi:IndicatorFastScroll:08f512858a' diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/ContactActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/ContactActivity.kt index 4d80f512..8ebdf39f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/ContactActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/ContactActivity.kt @@ -30,6 +30,7 @@ import com.simplemobiletools.contacts.pro.models.Contact import java.util.* abstract class ContactActivity : SimpleActivity() { + protected val PICK_RINGTONE_INTENT_ID = 1000 protected var contact: Contact? = null protected var currentContactPhotoPath = "" diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/EditContactActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/EditContactActivity.kt index 60be1956..a3efcd8c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/EditContactActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/EditContactActivity.kt @@ -5,8 +5,8 @@ import android.content.ClipData import android.content.ContentValues import android.content.Intent import android.graphics.Bitmap -import android.graphics.Color -import android.graphics.drawable.ColorDrawable +import android.media.AudioManager +import android.media.RingtoneManager import android.net.Uri import android.os.Bundle import android.provider.ContactsContract.CommonDataKinds @@ -20,6 +20,7 @@ import android.widget.ImageView import android.widget.RelativeLayout import android.widget.TextView import com.simplemobiletools.commons.dialogs.RadioGroupDialog +import com.simplemobiletools.commons.dialogs.SelectAlarmSoundDialog import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.commons.models.RadioItem @@ -184,6 +185,7 @@ class EditContactActivity : ContactActivity() { } setupTypePickers() + setupRingtone() if (contact!!.photoUri.isEmpty() && contact!!.photo == null) { showPhotoPlaceholder(contact_photo) @@ -194,7 +196,7 @@ class EditContactActivity : ContactActivity() { val textColor = config.textColor arrayOf(contact_name_image, contact_numbers_image, contact_emails_image, contact_addresses_image, contact_ims_image, contact_events_image, - contact_notes_image, contact_organization_image, contact_websites_image, contact_groups_image, contact_source_image).forEach { + contact_notes_image, contact_ringtone_image, contact_organization_image, contact_websites_image, contact_groups_image, contact_source_image).forEach { it.applyColorFilter(textColor) } @@ -380,6 +382,10 @@ class EditContactActivity : ContactActivity() { val areNotesVisible = showFields and SHOW_NOTES_FIELD != 0 contact_notes.beVisibleIf(areNotesVisible) contact_notes_image.beVisibleIf(areNotesVisible) + + val isRingtoneVisible = showFields and SHOW_RINGTONE_FIELD != 0 + contact_ringtone.beVisibleIf(isRingtoneVisible) + contact_ringtone_image.beVisibleIf(isRingtoneVisible) } private fun setupEditContact() { @@ -480,6 +486,27 @@ class EditContactActivity : ContactActivity() { contact_notes.setText(contact!!.notes) } + private fun setupRingtone() { + contact_ringtone.setOnClickListener { + val currentRingtone = contact!!.ringtone ?: getDefaultAlarmSound(RingtoneManager.TYPE_RINGTONE).uri + SelectAlarmSoundDialog(this, currentRingtone, AudioManager.STREAM_RING, PICK_RINGTONE_INTENT_ID, RingtoneManager.TYPE_RINGTONE, true, + onAlarmPicked = { + contact!!.ringtone = it?.uri + contact_ringtone.text = it?.title + }, onAlarmSoundDeleted = {} + ) + } + + val ringtone = contact!!.ringtone + if (ringtone != null && ringtone.isNotEmpty()) { + val contactRingtone = RingtoneManager.getRingtone(this, Uri.parse(ringtone)) + contact_ringtone.text = contactRingtone.getTitle(this) + } else { + val default = getDefaultAlarmSound(RingtoneManager.TYPE_RINGTONE) + contact_ringtone.text = default.title + } + } + private fun setupOrganization() { contact_organization_company.setText(contact!!.organization.company) contact_organization_job_position.setText(contact!!.organization.jobPosition) diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/ViewContactActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/ViewContactActivity.kt index b87819c5..077eeeb5 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/ViewContactActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/ViewContactActivity.kt @@ -570,13 +570,21 @@ class ViewContactActivity : ContactActivity() { } private fun setupRingtone() { - val ringtone = contact!!.ringtone - if (ringtone != null && ringtone.isNotEmpty() && showFields and SHOW_RINGTONE != 0) { - val contactRingtone = RingtoneManager.getRingtone(this, Uri.parse(ringtone)) - contact_ringtone.text = contactRingtone.getTitle(this) + if (showFields and SHOW_RINGTONE_FIELD != 0) { contact_ringtone_image.beVisible() contact_ringtone.beVisible() - contact_ringtone.setOnClickListener { } + + val ringtone = contact!!.ringtone + if (ringtone != null && ringtone.isNotEmpty()) { + val contactRingtone = RingtoneManager.getRingtone(this, Uri.parse(ringtone)) + val ringtoneTitle = contactRingtone.getTitle(this) + contact_ringtone.text = ringtoneTitle + } else { + val default = getDefaultAlarmSound(RingtoneManager.TYPE_RINGTONE) + contact_ringtone.text = default.title + } + + contact_ringtone.copyOnLongClick(contact_ringtone.text.toString()) } else { contact_ringtone_image.beGone() contact_ringtone.beGone() diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/ManageVisibleFieldsDialog.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/ManageVisibleFieldsDialog.kt index 5dc4af12..3bcb36e1 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/ManageVisibleFieldsDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/ManageVisibleFieldsDialog.kt @@ -30,7 +30,7 @@ class ManageVisibleFieldsDialog(val activity: BaseSimpleActivity) { put(SHOW_WEBSITES_FIELD, R.id.manage_visible_fields_websites) put(SHOW_GROUPS_FIELD, R.id.manage_visible_fields_groups) put(SHOW_CONTACT_SOURCE_FIELD, R.id.manage_visible_fields_contact_source) - put(SHOW_RINGTONE, R.id.manage_ringtone) + put(SHOW_RINGTONE_FIELD, R.id.manage_ringtone) } val showContactFields = activity.config.showContactFields diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Constants.kt index 3d5f4aaf..1edc2b9c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Constants.kt @@ -93,7 +93,7 @@ const val SHOW_CONTACT_SOURCE_FIELD = 4096 const val SHOW_WEBSITES_FIELD = 8192 const val SHOW_NICKNAME_FIELD = 16384 const val SHOW_IMS_FIELD = 32768 -const val SHOW_RINGTONE = 65536 +const val SHOW_RINGTONE_FIELD = 65536 const val DEFAULT_EMAIL_TYPE = CommonDataKinds.Email.TYPE_HOME const val DEFAULT_PHONE_NUMBER_TYPE = CommonDataKinds.Phone.TYPE_MOBILE diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/ContactsHelper.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/ContactsHelper.kt index e26afa4a..d180804e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/ContactsHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/ContactsHelper.kt @@ -1070,11 +1070,12 @@ class ContactsHelper(val context: Context) { } } - // favorite + // favorite, ringtone try { val uri = Uri.withAppendedPath(Contacts.CONTENT_URI, contact.contactId.toString()) - val contentValues = ContentValues(1) + val contentValues = ContentValues(2) contentValues.put(Contacts.STARRED, contact.starred) + contentValues.put(Contacts.CUSTOM_RINGTONE, contact.ringtone) context.contentResolver.update(uri, contentValues, null, null) } catch (e: Exception) { context.showErrorToast(e) @@ -1336,12 +1337,13 @@ class ContactsHelper(val context: Context) { addFullSizePhoto(rawId, fullSizePhotoData) } - // favorite + // favorite, ringtone val userId = getRealContactId(rawId) - if (userId != 0 && contact.starred == 1) { + if (userId != 0) { val uri = Uri.withAppendedPath(Contacts.CONTENT_URI, userId.toString()) - val contentValues = ContentValues(1) + val contentValues = ContentValues(2) contentValues.put(Contacts.STARRED, contact.starred) + contentValues.put(Contacts.CUSTOM_RINGTONE, contact.ringtone) context.contentResolver.update(uri, contentValues, null, null) } diff --git a/app/src/main/res/layout/activity_edit_contact.xml b/app/src/main/res/layout/activity_edit_contact.xml index eabe713f..e67be2cd 100644 --- a/app/src/main/res/layout/activity_edit_contact.xml +++ b/app/src/main/res/layout/activity_edit_contact.xml @@ -384,6 +384,31 @@ android:textCursorDrawable="@null" android:textSize="@dimen/bigger_text_size" /> + + + +