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" />
+
+
+
+