mirror of
https://github.com/SimpleMobileTools/Simple-Dialer.git
synced 2025-06-05 21:49:23 +02:00
updating Recents + adding handling for placeholders
This commit is contained in:
@ -17,12 +17,10 @@ import com.simplemobiletools.dialer.BuildConfig
|
|||||||
import com.simplemobiletools.dialer.R
|
import com.simplemobiletools.dialer.R
|
||||||
import com.simplemobiletools.dialer.adapters.ViewPagerAdapter
|
import com.simplemobiletools.dialer.adapters.ViewPagerAdapter
|
||||||
import com.simplemobiletools.dialer.extensions.config
|
import com.simplemobiletools.dialer.extensions.config
|
||||||
import com.simplemobiletools.dialer.helpers.ALL_TABS_MASK
|
import com.simplemobiletools.dialer.helpers.*
|
||||||
import com.simplemobiletools.dialer.helpers.CONTACTS_TAB_MASK
|
|
||||||
import com.simplemobiletools.dialer.helpers.RECENTS_TAB_MASK
|
|
||||||
import com.simplemobiletools.dialer.helpers.tabsList
|
|
||||||
import kotlinx.android.synthetic.main.activity_main.*
|
import kotlinx.android.synthetic.main.activity_main.*
|
||||||
import kotlinx.android.synthetic.main.fragment_contacts.*
|
import kotlinx.android.synthetic.main.fragment_contacts.*
|
||||||
|
import kotlinx.android.synthetic.main.fragment_recents.*
|
||||||
|
|
||||||
class MainActivity : SimpleActivity() {
|
class MainActivity : SimpleActivity() {
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
@ -150,7 +148,11 @@ class MainActivity : SimpleActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (refreshTabsMask and RECENTS_TAB_MASK != 0) {
|
if (refreshTabsMask and RECENTS_TAB_MASK != 0) {
|
||||||
|
RecentsHelper(this).getRecentCalls { recents ->
|
||||||
|
runOnUiThread {
|
||||||
|
recents_fragment.updateRecents(recents)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,5 +2,58 @@ package com.simplemobiletools.dialer.fragments
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
|
import com.reddit.indicatorfastscroll.FastScrollItemIndicator
|
||||||
|
import com.simplemobiletools.commons.extensions.*
|
||||||
|
import com.simplemobiletools.commons.models.SimpleContact
|
||||||
|
import com.simplemobiletools.dialer.activities.SimpleActivity
|
||||||
|
import com.simplemobiletools.dialer.adapters.ContactsAdapter
|
||||||
|
import com.simplemobiletools.dialer.extensions.config
|
||||||
|
import kotlinx.android.synthetic.main.fragment_letters_layout.view.*
|
||||||
|
import kotlinx.android.synthetic.main.fragment_recents.view.*
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
class ContactsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet)
|
class ContactsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet) {
|
||||||
|
override fun setupFragment() {
|
||||||
|
fragment_placeholder_2.apply {
|
||||||
|
setTextColor(context.config.primaryColor)
|
||||||
|
underlineText()
|
||||||
|
setOnClickListener {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
letter_fastscroller.textColor = context.config.textColor.getColorStateList()
|
||||||
|
letter_fastscroller_thumb.setupWithFastScroller(letter_fastscroller)
|
||||||
|
letter_fastscroller_thumb.textColor = context.config.primaryColor.getContrastColor()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun refreshContacts(contacts: ArrayList<SimpleContact>) {
|
||||||
|
setupLetterFastscroller(contacts)
|
||||||
|
if (contacts.isEmpty()) {
|
||||||
|
fragment_placeholder.beVisible()
|
||||||
|
fragment_placeholder_2.beVisible()
|
||||||
|
fragment_list.beGone()
|
||||||
|
} else {
|
||||||
|
fragment_placeholder.beGone()
|
||||||
|
fragment_placeholder_2.beGone()
|
||||||
|
fragment_list.beVisible()
|
||||||
|
ContactsAdapter(activity as SimpleActivity, contacts, fragment_list, null) {
|
||||||
|
|
||||||
|
}.apply {
|
||||||
|
fragment_list.adapter = this
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setupLetterFastscroller(contacts: ArrayList<SimpleContact>) {
|
||||||
|
letter_fastscroller.setupWithRecyclerView(fragment_list, { position ->
|
||||||
|
try {
|
||||||
|
val name = contacts[position].name
|
||||||
|
val character = if (name.isNotEmpty()) name.substring(0, 1) else ""
|
||||||
|
FastScrollItemIndicator.Text(character.toUpperCase(Locale.getDefault()))
|
||||||
|
} catch (e: Exception) {
|
||||||
|
FastScrollItemIndicator.Text("")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -2,26 +2,16 @@ package com.simplemobiletools.dialer.fragments
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import androidx.coordinatorlayout.widget.CoordinatorLayout
|
import android.widget.RelativeLayout
|
||||||
import com.reddit.indicatorfastscroll.FastScrollItemIndicator
|
|
||||||
import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter
|
import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter
|
||||||
import com.simplemobiletools.commons.extensions.getColorStateList
|
|
||||||
import com.simplemobiletools.commons.extensions.getContrastColor
|
|
||||||
import com.simplemobiletools.commons.extensions.underlineText
|
|
||||||
import com.simplemobiletools.commons.models.SimpleContact
|
|
||||||
import com.simplemobiletools.dialer.activities.SimpleActivity
|
import com.simplemobiletools.dialer.activities.SimpleActivity
|
||||||
import com.simplemobiletools.dialer.adapters.ContactsAdapter
|
|
||||||
import com.simplemobiletools.dialer.extensions.config
|
import com.simplemobiletools.dialer.extensions.config
|
||||||
import com.simplemobiletools.dialer.helpers.Config
|
import com.simplemobiletools.dialer.helpers.Config
|
||||||
import kotlinx.android.synthetic.main.fragment_letters_layout.view.*
|
import kotlinx.android.synthetic.main.fragment_letters_layout.view.*
|
||||||
import java.util.*
|
|
||||||
import kotlin.collections.ArrayList
|
|
||||||
|
|
||||||
abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) : CoordinatorLayout(context, attributeSet) {
|
abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) : RelativeLayout(context, attributeSet) {
|
||||||
protected var activity: SimpleActivity? = null
|
protected var activity: SimpleActivity? = null
|
||||||
protected var allContacts = ArrayList<SimpleContact>()
|
|
||||||
|
|
||||||
private var lastHashCode = 0
|
|
||||||
private lateinit var config: Config
|
private lateinit var config: Config
|
||||||
|
|
||||||
fun setupFragment(activity: SimpleActivity) {
|
fun setupFragment(activity: SimpleActivity) {
|
||||||
@ -29,7 +19,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
|
|||||||
if (this.activity == null) {
|
if (this.activity == null) {
|
||||||
this.activity = activity
|
this.activity = activity
|
||||||
|
|
||||||
fragment_placeholder_2?.underlineText()
|
setupFragment()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -37,28 +27,5 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
|
|||||||
(fragment_list.adapter as? MyRecyclerViewAdapter)?.finishActMode()
|
(fragment_list.adapter as? MyRecyclerViewAdapter)?.finishActMode()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun refreshContacts(contacts: ArrayList<SimpleContact>) {
|
abstract fun setupFragment()
|
||||||
ContactsAdapter(activity as SimpleActivity, contacts, fragment_list, null) {
|
|
||||||
|
|
||||||
}.apply {
|
|
||||||
fragment_list.adapter = this
|
|
||||||
}
|
|
||||||
|
|
||||||
letter_fastscroller.textColor = config.textColor.getColorStateList()
|
|
||||||
setupLetterFastscroller(contacts)
|
|
||||||
letter_fastscroller_thumb.setupWithFastScroller(letter_fastscroller)
|
|
||||||
letter_fastscroller_thumb.textColor = config.primaryColor.getContrastColor()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setupLetterFastscroller(contacts: ArrayList<SimpleContact>) {
|
|
||||||
letter_fastscroller.setupWithRecyclerView(fragment_list, { position ->
|
|
||||||
try {
|
|
||||||
val name = contacts[position].name
|
|
||||||
val character = if (name.isNotEmpty()) name.substring(0, 1) else ""
|
|
||||||
FastScrollItemIndicator.Text(character.toUpperCase(Locale.getDefault()))
|
|
||||||
} catch (e: Exception) {
|
|
||||||
FastScrollItemIndicator.Text("")
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -2,5 +2,41 @@ package com.simplemobiletools.dialer.fragments
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
|
import com.simplemobiletools.commons.extensions.*
|
||||||
|
import com.simplemobiletools.commons.helpers.PERMISSION_READ_CALL_LOG
|
||||||
|
import com.simplemobiletools.dialer.R
|
||||||
|
import com.simplemobiletools.dialer.extensions.config
|
||||||
|
import com.simplemobiletools.dialer.models.RecentCall
|
||||||
|
import kotlinx.android.synthetic.main.fragment_recents.view.*
|
||||||
|
|
||||||
class RecentsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet)
|
class RecentsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet) {
|
||||||
|
override fun setupFragment() {
|
||||||
|
val placeholderResId = if (context.hasPermission(PERMISSION_READ_CALL_LOG)) {
|
||||||
|
R.string.no_previous_calls
|
||||||
|
} else {
|
||||||
|
R.string.could_not_access_the_call_history
|
||||||
|
}
|
||||||
|
|
||||||
|
recents_placeholder.text = context.getString(placeholderResId)
|
||||||
|
|
||||||
|
recents_placeholder_2.apply {
|
||||||
|
setTextColor(context.config.primaryColor)
|
||||||
|
underlineText()
|
||||||
|
setOnClickListener {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun updateRecents(recents: ArrayList<RecentCall>) {
|
||||||
|
if (recents.isEmpty()) {
|
||||||
|
recents_placeholder.beVisible()
|
||||||
|
recents_placeholder_2.beVisibleIf(!context.hasPermission(PERMISSION_READ_CALL_LOG))
|
||||||
|
recents_list.beGone()
|
||||||
|
} else {
|
||||||
|
recents_placeholder.beGone()
|
||||||
|
recents_placeholder_2.beGone()
|
||||||
|
recents_list.beVisible()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -0,0 +1,14 @@
|
|||||||
|
package com.simplemobiletools.dialer.helpers
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||||
|
import com.simplemobiletools.dialer.models.RecentCall
|
||||||
|
|
||||||
|
class RecentsHelper(val context: Context) {
|
||||||
|
fun getRecentCalls(callback: (ArrayList<RecentCall>) -> Unit) {
|
||||||
|
ensureBackgroundThread {
|
||||||
|
val recents = ArrayList<RecentCall>()
|
||||||
|
callback(recents)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +0,0 @@
|
|||||||
package com.simplemobiletools.dialer.models
|
|
||||||
|
|
||||||
data class Organization(var company: String, var jobPosition: String) {
|
|
||||||
fun isEmpty() = company.isEmpty() && jobPosition.isEmpty()
|
|
||||||
|
|
||||||
fun isNotEmpty() = !isEmpty()
|
|
||||||
}
|
|
@ -1,3 +0,0 @@
|
|||||||
package com.simplemobiletools.dialer.models
|
|
||||||
|
|
||||||
data class PhoneNumber(var value: String, var type: Int, var label: String, var normalizedNumber: String?)
|
|
@ -0,0 +1,3 @@
|
|||||||
|
package com.simplemobiletools.dialer.models
|
||||||
|
|
||||||
|
data class RecentCall(var phoneNumber: String, var name: String, var startTS: Int, var duration: Int, var type: Int)
|
@ -31,7 +31,7 @@
|
|||||||
android:background="?attr/selectableItemBackground"
|
android:background="?attr/selectableItemBackground"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:padding="@dimen/activity_margin"
|
android:padding="@dimen/activity_margin"
|
||||||
android:text="@string/change_filter"
|
android:text="@string/create_new"
|
||||||
android:textSize="@dimen/bigger_text_size"
|
android:textSize="@dimen/bigger_text_size"
|
||||||
android:visibility="gone" />
|
android:visibility="gone" />
|
||||||
|
|
||||||
@ -66,6 +66,8 @@
|
|||||||
android:id="@+id/fragment_fab"
|
android:id="@+id/fragment_fab"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentEnd="true"
|
||||||
|
android:layout_alignParentBottom="true"
|
||||||
android:layout_gravity="bottom|end"
|
android:layout_gravity="bottom|end"
|
||||||
android:layout_margin="@dimen/activity_margin"
|
android:layout_margin="@dimen/activity_margin"
|
||||||
android:src="@drawable/ic_plus_vector" />
|
android:src="@drawable/ic_plus_vector" />
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
android:id="@+id/recents_placeholder_2"
|
android:id="@+id/recents_placeholder_2"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_below="@+id/fragment_placeholder"
|
android:layout_below="@+id/recents_placeholder"
|
||||||
android:layout_centerHorizontal="true"
|
android:layout_centerHorizontal="true"
|
||||||
android:background="?attr/selectableItemBackground"
|
android:background="?attr/selectableItemBackground"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
|
Reference in New Issue
Block a user