updating Recents + adding handling for placeholders

This commit is contained in:
tibbi
2020-05-07 22:50:19 +02:00
parent dc20b20037
commit e604a3e88b
10 changed files with 123 additions and 56 deletions

View File

@ -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)
}
}
} }
} }

View File

@ -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("")
}
})
}
}

View File

@ -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("")
}
})
}
} }

View File

@ -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()
}
}
}

View File

@ -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)
}
}
}

View File

@ -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()
}

View File

@ -1,3 +0,0 @@
package com.simplemobiletools.dialer.models
data class PhoneNumber(var value: String, var type: Int, var label: String, var normalizedNumber: String?)

View File

@ -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)

View File

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

View File

@ -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"