Skip to content

Commit baa1d68

Browse files
authored
Merge pull request #336 from miapuffia/implement-contact-details-everywhere
Implemented contact details everywhere
2 parents 0e25328 + 46f03ff commit baa1d68

9 files changed

Lines changed: 109 additions & 27 deletions

File tree

app/src/main/kotlin/org/fossify/phone/activities/DialpadActivity.kt

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -291,14 +291,17 @@ class DialpadActivity : SimpleActivity() {
291291
activity = this,
292292
contacts = filtered,
293293
recyclerView = binding.dialpadList,
294-
highlightText = text
295-
) {
296-
val contact = it as Contact
297-
startCallWithConfirmationCheck(contact.getPrimaryNumber() ?: return@ContactsAdapter, contact.getNameToDisplay())
298-
Handler().postDelayed({
299-
binding.dialpadInput.setText("")
300-
}, 1000)
301-
}.apply {
294+
highlightText = text,
295+
itemClick = {
296+
val contact = it as Contact
297+
startCallWithConfirmationCheck(contact.getPrimaryNumber() ?: return@ContactsAdapter, contact.getNameToDisplay())
298+
Handler().postDelayed({
299+
binding.dialpadInput.setText("")
300+
}, 1000)
301+
},
302+
profileIconClick = {
303+
startContactDetailsIntent(it as Contact)
304+
}).apply {
302305
binding.dialpadList.adapter = this
303306
}
304307

app/src/main/kotlin/org/fossify/phone/adapters/ContactsAdapter.kt

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ class ContactsAdapter(
4747
private val showDeleteButton: Boolean = true,
4848
private val enableDrag: Boolean = false,
4949
private val allowLongClick: Boolean = true,
50-
itemClick: (Any) -> Unit
50+
itemClick: (Any) -> Unit,
51+
val profileIconClick: ((Any) -> Unit)? = null
5152
) : MyRecyclerViewAdapter(activity, recyclerView, itemClick),
5253
ItemTouchHelperContract, MyRecyclerView.MyZoomListener {
5354

@@ -363,6 +364,25 @@ class ContactsAdapter(
363364
binding.apply {
364365
root.setupViewBackground(activity)
365366
itemContactFrame.isSelected = selectedKeys.contains(contact.rawId)
367+
368+
itemContactImage.apply {
369+
if (profileIconClick != null) {
370+
setBackgroundResource(R.drawable.selector_clickable_circle)
371+
372+
setOnClickListener {
373+
if (!actModeCallback.isSelectable) {
374+
profileIconClick.invoke(contact)
375+
} else {
376+
holder.viewClicked(contact)
377+
}
378+
}
379+
setOnLongClickListener {
380+
holder.viewLongClicked()
381+
true
382+
}
383+
}
384+
}
385+
366386
itemContactName.apply {
367387
setTextColor(textColor)
368388
setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize)

app/src/main/kotlin/org/fossify/phone/adapters/RecentCallsAdapter.kt

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ class RecentCallsAdapter(
3838
private val showOverflowMenu: Boolean,
3939
private val itemDelete: (List<RecentCall>) -> Unit = {},
4040
itemClick: (Any) -> Unit,
41+
val profileIconClick: ((Any) -> Unit)? = null
4142
) : MyRecyclerViewListAdapter<CallLogItem>(activity, recyclerView, RecentCallsDiffCallback(), itemClick) {
4243

4344
private lateinit var outgoingCallIcon: Drawable
@@ -434,7 +435,8 @@ class RecentCallsAdapter(
434435

435436
val currentFontSize = fontSize
436437
itemRecentsHolder.isSelected = selectedKeys.contains(call.id)
437-
val name = findContactByCall(call)?.getNameToDisplay() ?: call.name
438+
val matchingContact = findContactByCall(call)
439+
val name = matchingContact?.getNameToDisplay() ?: call.name
438440
val formatPhoneNumbers = activity.config.formatPhoneNumbers
439441
var nameToShow = if (name == call.phoneNumber && formatPhoneNumbers) {
440442
SpannableString(name.formatPhoneNumber())
@@ -500,6 +502,24 @@ class RecentCallsAdapter(
500502

501503
SimpleContactsHelper(root.context).loadContactImage(call.photoUri, itemRecentsImage, call.name)
502504

505+
itemRecentsImage.apply {
506+
if (profileIconClick != null) {
507+
setBackgroundResource(R.drawable.selector_clickable_circle)
508+
509+
setOnClickListener {
510+
if (!actModeCallback.isSelectable) {
511+
profileIconClick.invoke(call)
512+
} else {
513+
viewClicked(call)
514+
}
515+
}
516+
setOnLongClickListener {
517+
viewLongClicked()
518+
true
519+
}
520+
}
521+
}
522+
503523
val drawable = when (call.type) {
504524
Calls.OUTGOING_TYPE -> outgoingCallIcon
505525
Calls.MISSED_TYPE -> incomingMissedCallIcon

app/src/main/kotlin/org/fossify/phone/dialogs/SelectContactDialog.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@ class SelectContactDialog(val activity: SimpleActivity, val contacts: List<Conta
2929
setupLetterFastScroller(contacts)
3030
configureSearchView()
3131

32-
selectContactList.adapter = ContactsAdapter(activity, contacts.toMutableList(), selectContactList, allowLongClick = false) {
32+
selectContactList.adapter = ContactsAdapter(activity, contacts.toMutableList(), selectContactList, allowLongClick = false, itemClick = {
3333
callback(it as Contact)
3434
dialog?.dismiss()
35-
}
35+
})
3636
}
3737

3838
activity.getAlertDialogBuilder()

app/src/main/kotlin/org/fossify/phone/fragments/ContactsFragment.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -111,11 +111,10 @@ class ContactsFragment(context: Context, attributeSet: AttributeSet) : MyViewPag
111111
activity = activity as SimpleActivity,
112112
contacts = contacts,
113113
recyclerView = binding.fragmentList,
114-
refreshItemsListener = this
115-
) {
116-
val contact = it as Contact
117-
activity?.startContactDetailsIntent(contact)
118-
}.apply {
114+
refreshItemsListener = this,
115+
itemClick = {
116+
activity?.startContactDetailsIntent(it as Contact)
117+
}).apply {
119118
binding.fragmentList.adapter = this
120119
}
121120

app/src/main/kotlin/org/fossify/phone/fragments/FavoritesFragment.kt

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import org.fossify.phone.databinding.FragmentFavoritesBinding
1717
import org.fossify.phone.databinding.FragmentLettersLayoutBinding
1818
import org.fossify.phone.extensions.config
1919
import org.fossify.phone.extensions.setupWithContacts
20+
import org.fossify.phone.extensions.startContactDetailsIntent
2021
import org.fossify.phone.interfaces.RefreshItemsListener
2122

2223
class FavoritesFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment<MyViewPagerFragment.LettersInnerBinding>(context, attributeSet),
@@ -112,19 +113,22 @@ class FavoritesFragment(context: Context, attributeSet: AttributeSet) : MyViewPa
112113
viewType = viewType,
113114
showDeleteButton = false,
114115
enableDrag = true,
115-
) { contact ->
116-
if (context.config.showCallConfirmation) {
117-
CallConfirmationDialog(activity as SimpleActivity, (contact as Contact).getNameToDisplay()) {
116+
itemClick = { it ->
117+
if (context.config.showCallConfirmation) {
118+
CallConfirmationDialog(activity as SimpleActivity, (it as Contact).getNameToDisplay()) {
119+
activity?.apply {
120+
initiateCall(it) { launchCallIntent(it) }
121+
}
122+
}
123+
} else {
118124
activity?.apply {
119-
initiateCall(contact) { launchCallIntent(it) }
125+
initiateCall(it as Contact) { launchCallIntent(it) }
120126
}
121127
}
122-
} else {
123-
activity?.apply {
124-
initiateCall(contact as Contact) { launchCallIntent(it) }
125-
}
126-
}
127-
}.apply {
128+
},
129+
profileIconClick = {
130+
activity?.startContactDetailsIntent(it as Contact)
131+
}).apply {
128132
binding.fragmentList.adapter = this
129133

130134
onDragEndListener = {

app/src/main/kotlin/org/fossify/phone/fragments/RecentsFragment.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@ import org.fossify.commons.helpers.*
77
import org.fossify.commons.models.contacts.Contact
88
import org.fossify.commons.views.MyRecyclerView
99
import org.fossify.phone.R
10+
import org.fossify.phone.activities.MainActivity
1011
import org.fossify.phone.activities.SimpleActivity
1112
import org.fossify.phone.adapters.RecentCallsAdapter
1213
import org.fossify.phone.databinding.FragmentRecentsBinding
1314
import org.fossify.phone.extensions.config
1415
import org.fossify.phone.extensions.startCallWithConfirmationCheck
16+
import org.fossify.phone.extensions.startContactDetailsIntent
1517
import org.fossify.phone.helpers.RecentsHelper
1618
import org.fossify.phone.interfaces.RefreshItemsListener
1719
import org.fossify.phone.models.CallLogItem
@@ -146,6 +148,12 @@ class RecentsFragment(
146148
itemClick = {
147149
val recentCall = it as RecentCall
148150
activity?.startCallWithConfirmationCheck(recentCall.phoneNumber, recentCall.name)
151+
},
152+
profileIconClick = {
153+
val contact = findContactByCall(it as RecentCall)
154+
if (contact != null) {
155+
activity?.startContactDetailsIntent(contact)
156+
}
149157
}
150158
)
151159

@@ -278,4 +286,8 @@ class RecentsFragment(
278286

279287
return callLog
280288
}
289+
290+
private fun findContactByCall(recentCall: RecentCall): Contact? {
291+
return (activity as MainActivity).cachedContacts.find { it.name == recentCall.name && it.doesHavePhoneNumber(recentCall.phoneNumber) }
292+
}
281293
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:color="@color/activated_item_foreground">
4+
<item android:id="@android:id/mask">
5+
<shape android:shape="oval">
6+
<solid android:color="@android:color/white" />
7+
</shape>
8+
</item>
9+
</ripple>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<!-- this handles the background of clickable items at long pressing, like an SMS conversation -->
3+
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
4+
<item>
5+
<selector>
6+
<item
7+
android:state_selected="true" >
8+
<shape android:shape="oval">
9+
<solid android:drawable="@color/activated_item_foreground" />
10+
</shape>
11+
</item>
12+
<item android:drawable="@drawable/ripple_selector_background_circle" />
13+
</selector>
14+
</item>
15+
</layer-list>

0 commit comments

Comments
 (0)