mirror of
https://github.com/SimpleMobileTools/Simple-Dialer.git
synced 2025-03-27 16:50:16 +01:00
adding an initial Recents adapter
This commit is contained in:
parent
62264ae044
commit
73c939b435
@ -9,14 +9,13 @@ import com.bumptech.glide.Glide
|
|||||||
import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter
|
import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter
|
||||||
import com.simplemobiletools.commons.helpers.ContactsHelper
|
import com.simplemobiletools.commons.helpers.ContactsHelper
|
||||||
import com.simplemobiletools.commons.models.SimpleContact
|
import com.simplemobiletools.commons.models.SimpleContact
|
||||||
import com.simplemobiletools.commons.views.FastScroller
|
|
||||||
import com.simplemobiletools.commons.views.MyRecyclerView
|
import com.simplemobiletools.commons.views.MyRecyclerView
|
||||||
import com.simplemobiletools.dialer.R
|
import com.simplemobiletools.dialer.R
|
||||||
import com.simplemobiletools.dialer.activities.SimpleActivity
|
import com.simplemobiletools.dialer.activities.SimpleActivity
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class ContactsAdapter(activity: SimpleActivity, var contacts: ArrayList<SimpleContact>, recyclerView: MyRecyclerView, fastScroller: FastScroller?,
|
class ContactsAdapter(activity: SimpleActivity, var contacts: ArrayList<SimpleContact>, recyclerView: MyRecyclerView, itemClick: (Any) -> Unit) :
|
||||||
itemClick: (Any) -> Unit) : MyRecyclerViewAdapter(activity, recyclerView, fastScroller, itemClick) {
|
MyRecyclerViewAdapter(activity, recyclerView, null, itemClick) {
|
||||||
|
|
||||||
override fun getActionMenuId() = 0
|
override fun getActionMenuId() = 0
|
||||||
|
|
||||||
|
@ -0,0 +1,63 @@
|
|||||||
|
package com.simplemobiletools.dialer.adapters
|
||||||
|
|
||||||
|
import android.view.Menu
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import com.bumptech.glide.Glide
|
||||||
|
import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter
|
||||||
|
import com.simplemobiletools.commons.helpers.ContactsHelper
|
||||||
|
import com.simplemobiletools.commons.views.MyRecyclerView
|
||||||
|
import com.simplemobiletools.dialer.R
|
||||||
|
import com.simplemobiletools.dialer.activities.SimpleActivity
|
||||||
|
import com.simplemobiletools.dialer.models.RecentCall
|
||||||
|
import kotlinx.android.synthetic.main.item_recent_call.view.*
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
class RecentCallsAdapter(activity: SimpleActivity, var recentCalls: ArrayList<RecentCall>, recyclerView: MyRecyclerView, itemClick: (Any) -> Unit) :
|
||||||
|
MyRecyclerViewAdapter(activity, recyclerView, null, itemClick) {
|
||||||
|
|
||||||
|
override fun getActionMenuId() = 0
|
||||||
|
|
||||||
|
override fun prepareActionMode(menu: Menu) {}
|
||||||
|
|
||||||
|
override fun actionItemPressed(id: Int) {}
|
||||||
|
|
||||||
|
override fun getSelectableItemCount() = recentCalls.size
|
||||||
|
|
||||||
|
override fun getIsItemSelectable(position: Int) = true
|
||||||
|
|
||||||
|
override fun getItemSelectionKey(position: Int) = recentCalls.getOrNull(position)?.id
|
||||||
|
|
||||||
|
override fun getItemKeyPosition(key: Int) = recentCalls.indexOfFirst { it.id == key }
|
||||||
|
|
||||||
|
override fun onActionModeCreated() {}
|
||||||
|
|
||||||
|
override fun onActionModeDestroyed() {}
|
||||||
|
|
||||||
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = createViewHolder(R.layout.item_recent_call, parent)
|
||||||
|
|
||||||
|
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
||||||
|
val recentCall = recentCalls[position]
|
||||||
|
holder.bindView(recentCall, true, false) { itemView, layoutPosition ->
|
||||||
|
setupView(itemView, recentCall)
|
||||||
|
}
|
||||||
|
bindViewHolder(holder)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getItemCount() = recentCalls.size
|
||||||
|
|
||||||
|
override fun onViewRecycled(holder: ViewHolder) {
|
||||||
|
super.onViewRecycled(holder)
|
||||||
|
if (!activity.isDestroyed && !activity.isFinishing) {
|
||||||
|
Glide.with(activity).clear(holder.itemView.item_recents_image)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setupView(view: View, call: RecentCall) {
|
||||||
|
view.apply {
|
||||||
|
item_recents_name.text = call.name
|
||||||
|
|
||||||
|
ContactsHelper(context).loadContactImage(call.photoUri, findViewById(R.id.item_recents_image), call.name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -54,7 +54,7 @@ class ContactsFragment(context: Context, attributeSet: AttributeSet) : MyViewPag
|
|||||||
fragment_placeholder.beGone()
|
fragment_placeholder.beGone()
|
||||||
fragment_placeholder_2.beGone()
|
fragment_placeholder_2.beGone()
|
||||||
fragment_list.beVisible()
|
fragment_list.beVisible()
|
||||||
ContactsAdapter(activity as SimpleActivity, contacts, fragment_list, null) {
|
ContactsAdapter(activity as SimpleActivity, contacts, fragment_list) {
|
||||||
|
|
||||||
}.apply {
|
}.apply {
|
||||||
fragment_list.adapter = this
|
fragment_list.adapter = this
|
||||||
|
@ -5,6 +5,8 @@ import android.util.AttributeSet
|
|||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
import com.simplemobiletools.commons.helpers.PERMISSION_READ_CALL_LOG
|
import com.simplemobiletools.commons.helpers.PERMISSION_READ_CALL_LOG
|
||||||
import com.simplemobiletools.dialer.R
|
import com.simplemobiletools.dialer.R
|
||||||
|
import com.simplemobiletools.dialer.activities.SimpleActivity
|
||||||
|
import com.simplemobiletools.dialer.adapters.RecentCallsAdapter
|
||||||
import com.simplemobiletools.dialer.extensions.config
|
import com.simplemobiletools.dialer.extensions.config
|
||||||
import com.simplemobiletools.dialer.helpers.RecentsHelper
|
import com.simplemobiletools.dialer.helpers.RecentsHelper
|
||||||
import com.simplemobiletools.dialer.models.RecentCall
|
import com.simplemobiletools.dialer.models.RecentCall
|
||||||
@ -37,6 +39,11 @@ class RecentsFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
|
|||||||
recents_placeholder.beGone()
|
recents_placeholder.beGone()
|
||||||
recents_placeholder_2.beGone()
|
recents_placeholder_2.beGone()
|
||||||
recents_list.beVisible()
|
recents_list.beVisible()
|
||||||
|
RecentCallsAdapter(activity as SimpleActivity, recents, recents_list) {
|
||||||
|
|
||||||
|
}.apply {
|
||||||
|
recents_list.adapter = this
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ import com.simplemobiletools.commons.helpers.PERMISSION_READ_CALL_LOG
|
|||||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||||
import com.simplemobiletools.dialer.models.RecentCall
|
import com.simplemobiletools.dialer.models.RecentCall
|
||||||
|
|
||||||
class RecentsHelper(val context: Context) {
|
class RecentsHelper(private val context: Context) {
|
||||||
@SuppressLint("MissingPermission")
|
@SuppressLint("MissingPermission")
|
||||||
fun getRecentCalls(callback: (ArrayList<RecentCall>) -> Unit) {
|
fun getRecentCalls(callback: (ArrayList<RecentCall>) -> Unit) {
|
||||||
ensureBackgroundThread {
|
ensureBackgroundThread {
|
||||||
@ -23,6 +23,7 @@ class RecentsHelper(val context: Context) {
|
|||||||
Calls._ID,
|
Calls._ID,
|
||||||
Calls.NUMBER,
|
Calls.NUMBER,
|
||||||
Calls.CACHED_NAME,
|
Calls.CACHED_NAME,
|
||||||
|
Calls.CACHED_PHOTO_URI,
|
||||||
Calls.DATE,
|
Calls.DATE,
|
||||||
Calls.DURATION,
|
Calls.DURATION,
|
||||||
Calls.TYPE
|
Calls.TYPE
|
||||||
@ -34,10 +35,11 @@ class RecentsHelper(val context: Context) {
|
|||||||
val id = cursor.getIntValue(Calls._ID)
|
val id = cursor.getIntValue(Calls._ID)
|
||||||
val number = cursor.getStringValue(Calls.NUMBER)
|
val number = cursor.getStringValue(Calls.NUMBER)
|
||||||
val name = cursor.getStringValue(Calls.CACHED_NAME) ?: number
|
val name = cursor.getStringValue(Calls.CACHED_NAME) ?: number
|
||||||
|
val photoUri = cursor.getStringValue(Calls.CACHED_PHOTO_URI) ?: ""
|
||||||
val startTS = (cursor.getLongValue(Calls.DATE) / 1000L).toInt()
|
val startTS = (cursor.getLongValue(Calls.DATE) / 1000L).toInt()
|
||||||
val duration = cursor.getIntValue(Calls.DURATION)
|
val duration = cursor.getIntValue(Calls.DURATION)
|
||||||
val type = cursor.getIntValue(Calls.TYPE)
|
val type = cursor.getIntValue(Calls.TYPE)
|
||||||
val recentCall = RecentCall(id, number, name, startTS, duration, type)
|
val recentCall = RecentCall(id, number, name, photoUri, startTS, duration, type)
|
||||||
recentCalls.add(recentCall)
|
recentCalls.add(recentCall)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
package com.simplemobiletools.dialer.models
|
package com.simplemobiletools.dialer.models
|
||||||
|
|
||||||
data class RecentCall(var id: Int, var phoneNumber: String, var name: String, var startTS: Int, var duration: Int, var type: Int)
|
data class RecentCall(var id: Int, var phoneNumber: String, var name: String, var photoUri: String, var startTS: Int, var duration: Int, var type: Int)
|
||||||
|
46
app/src/main/res/layout/item_recent_call.xml
Normal file
46
app/src/main/res/layout/item_recent_call.xml
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:id="@+id/item_recents_frame"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:clickable="true"
|
||||||
|
android:focusable="true"
|
||||||
|
android:foreground="@drawable/selector">
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:id="@+id/item_recents_holder"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:minHeight="@dimen/min_row_height"
|
||||||
|
android:paddingStart="@dimen/tiny_margin"
|
||||||
|
android:paddingTop="@dimen/medium_margin"
|
||||||
|
android:paddingEnd="@dimen/activity_margin"
|
||||||
|
android:paddingBottom="@dimen/medium_margin">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/item_recents_image"
|
||||||
|
android:layout_width="@dimen/normal_icon_size"
|
||||||
|
android:layout_height="@dimen/normal_icon_size"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:layout_marginStart="@dimen/small_margin"
|
||||||
|
android:padding="@dimen/tiny_margin"
|
||||||
|
android:src="@drawable/ic_person_vector" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/item_recents_name"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:layout_toEndOf="@+id/item_recents_image"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:paddingStart="@dimen/medium_margin"
|
||||||
|
android:paddingEnd="@dimen/activity_margin"
|
||||||
|
android:textSize="@dimen/bigger_text_size"
|
||||||
|
tools:text="John Doe" />
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
</FrameLayout>
|
Loading…
x
Reference in New Issue
Block a user