From 8dcd610811f385760df76f732827771f9480c62f Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 11 May 2020 12:20:38 +0200 Subject: [PATCH] update fragments when necessary --- .../dialer/activities/MainActivity.kt | 30 +++++++++++-------- .../dialer/adapters/ContactsAdapter.kt | 1 - .../dialer/adapters/RecentCallsAdapter.kt | 8 +++++ .../dialer/fragments/ContactsFragment.kt | 18 +++++++---- .../dialer/fragments/MyViewPagerFragment.kt | 4 ++- .../dialer/fragments/RecentsFragment.kt | 15 +++++++--- .../dialer/helpers/Constants.kt | 1 - 7 files changed, 51 insertions(+), 26 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/MainActivity.kt index 7824d445..77753acf 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/MainActivity.kt @@ -15,7 +15,8 @@ import com.simplemobiletools.dialer.BuildConfig import com.simplemobiletools.dialer.R import com.simplemobiletools.dialer.adapters.ViewPagerAdapter import com.simplemobiletools.dialer.extensions.config -import com.simplemobiletools.dialer.helpers.* +import com.simplemobiletools.dialer.helpers.RecentsHelper +import com.simplemobiletools.dialer.helpers.tabsList import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.fragment_contacts.* import kotlinx.android.synthetic.main.fragment_recents.* @@ -23,6 +24,7 @@ import kotlinx.android.synthetic.main.fragment_recents.* class MainActivity : SimpleActivity() { private var storedTextColor = 0 private var storedPrimaryColor = 0 + private var wasFragmentInit = false override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -67,6 +69,10 @@ class MainActivity : SimpleActivity() { it?.primaryColorChanged(configPrimaryColor) } } + + if (wasFragmentInit) { + refreshItems() + } } override fun onPause() { @@ -154,7 +160,7 @@ class MainActivity : SimpleActivity() { }) viewpager.onGlobalLayout { - refreshItems(ALL_TABS_MASK) + refreshItems() } main_tabs_holder.onTabSelectionChanged( @@ -186,6 +192,8 @@ class MainActivity : SimpleActivity() { startActivity(this) } } + + wasFragmentInit = true } private fun getTabIcon(position: Int): Drawable { @@ -197,7 +205,7 @@ class MainActivity : SimpleActivity() { return resources.getColoredDrawableWithColor(drawableId, config.textColor) } - fun refreshItems(refreshTabsMask: Int) { + private fun refreshItems() { if (isDestroyed || isFinishing) { return } @@ -207,19 +215,15 @@ class MainActivity : SimpleActivity() { viewpager.currentItem = config.lastUsedViewPagerPage } - if (refreshTabsMask and CONTACTS_TAB_MASK != 0) { - SimpleContactsHelper(this).getAvailableContacts { contacts -> - runOnUiThread { - contacts_fragment.refreshContacts(contacts) - } + SimpleContactsHelper(this).getAvailableContacts { contacts -> + runOnUiThread { + contacts_fragment.refreshContacts(contacts) } } - if (refreshTabsMask and RECENTS_TAB_MASK != 0) { - RecentsHelper(this).getRecentCalls { recents -> - runOnUiThread { - recents_fragment.updateRecents(recents) - } + RecentsHelper(this).getRecentCalls { recents -> + runOnUiThread { + recents_fragment.updateRecents(recents) } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/ContactsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/ContactsAdapter.kt index 1453597f..e5967c37 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/ContactsAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/ContactsAdapter.kt @@ -66,7 +66,6 @@ class ContactsAdapter(activity: SimpleActivity, var contacts: ArrayList) { + if (newItems.hashCode() != recentCalls.hashCode()) { + recentCalls = newItems.clone() as ArrayList + notifyDataSetChanged() + finishActMode() + } + } + private fun setupView(view: View, call: RecentCall) { view.apply { item_recents_name.apply { diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/ContactsFragment.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/ContactsFragment.kt index 519341ba..07a4ede2 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/ContactsFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/ContactsFragment.kt @@ -81,12 +81,18 @@ class ContactsFragment(context: Context, attributeSet: AttributeSet) : MyViewPag fragment_placeholder.beGone() fragment_placeholder_2.beGone() fragment_list.beVisible() - ContactsAdapter(activity as SimpleActivity, contacts, fragment_list) { - val lookupKey = SimpleContactsHelper(activity!!).getContactLookupKey((it as SimpleContact).rawId.toString()) - val publicUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey) - activity!!.launchViewContactIntent(publicUri) - }.apply { - fragment_list.adapter = this + + val currAdapter = fragment_list.adapter + if (currAdapter == null) { + ContactsAdapter(activity as SimpleActivity, contacts, fragment_list) { + val lookupKey = SimpleContactsHelper(activity!!).getContactLookupKey((it as SimpleContact).rawId.toString()) + val publicUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey) + activity!!.launchViewContactIntent(publicUri) + }.apply { + fragment_list.adapter = this + } + } else { + (currAdapter as ContactsAdapter).updateItems(contacts) } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/MyViewPagerFragment.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/MyViewPagerFragment.kt index 812ba7b7..6ef3c170 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/MyViewPagerFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/MyViewPagerFragment.kt @@ -8,6 +8,7 @@ import com.simplemobiletools.dialer.activities.SimpleActivity import com.simplemobiletools.dialer.extensions.config import com.simplemobiletools.dialer.helpers.Config import kotlinx.android.synthetic.main.fragment_letters_layout.view.* +import kotlinx.android.synthetic.main.fragment_recents.view.* abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) : RelativeLayout(context, attributeSet) { protected var activity: SimpleActivity? = null @@ -24,7 +25,8 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) } fun finishActMode() { - (fragment_list.adapter as? MyRecyclerViewAdapter)?.finishActMode() + (fragment_list?.adapter as? MyRecyclerViewAdapter)?.finishActMode() + (recents_list?.adapter as? MyRecyclerViewAdapter)?.finishActMode() } abstract fun setupFragment() diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/RecentsFragment.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/RecentsFragment.kt index 284d8956..530933e0 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/RecentsFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/RecentsFragment.kt @@ -6,6 +6,7 @@ import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.PERMISSION_READ_CALL_LOG import com.simplemobiletools.dialer.R import com.simplemobiletools.dialer.activities.SimpleActivity +import com.simplemobiletools.dialer.adapters.ContactsAdapter import com.simplemobiletools.dialer.adapters.RecentCallsAdapter import com.simplemobiletools.dialer.extensions.config import com.simplemobiletools.dialer.helpers.RecentsHelper @@ -48,10 +49,16 @@ class RecentsFragment(context: Context, attributeSet: AttributeSet) : MyViewPage recents_placeholder.beGone() recents_placeholder_2.beGone() recents_list.beVisible() - RecentCallsAdapter(activity as SimpleActivity, recents, recents_list) { - activity?.launchCallIntent((it as RecentCall).phoneNumber) - }.apply { - recents_list.adapter = this + + val currAdapter = recents_list.adapter + if (currAdapter == null) { + RecentCallsAdapter(activity as SimpleActivity, recents, recents_list) { + activity?.launchCallIntent((it as RecentCall).phoneNumber) + }.apply { + recents_list.adapter = this + } + } else { + (currAdapter as RecentCallsAdapter).updateItems(recents) } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/Constants.kt index 9f75833a..9c9e4743 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/Constants.kt @@ -7,7 +7,6 @@ const val REMEMBER_SIM_PREFIX = "remember_sim_" const val CONTACTS_TAB_MASK = 1 const val FAVORITES_TAB_MASK = 2 const val RECENTS_TAB_MASK = 4 -const val ALL_TABS_MASK = CONTACTS_TAB_MASK or FAVORITES_TAB_MASK or RECENTS_TAB_MASK val tabsList = arrayListOf(CONTACTS_TAB_MASK, RECENTS_TAB_MASK)