diff --git a/app/build.gradle b/app/build.gradle index 4bf4f41d..071698b2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -45,7 +45,7 @@ ext { } dependencies { - implementation 'com.simplemobiletools:commons:4.5.12' + implementation 'com.simplemobiletools:commons:4.5.14' implementation 'joda-time:joda-time:2.9.9' implementation 'com.facebook.stetho:stetho:1.5.0' diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt index 353571bf..a59f39ce 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt @@ -45,6 +45,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { private var werePermissionsHandled = false private var isFirstResume = true private var isGettingContacts = false + private var handledShowTabs = 0 private var storedTextColor = 0 private var storedBackgroundColor = 0 @@ -53,6 +54,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { private var storedShowPhoneNumbers = false private var storedStartNameWithSurname = false private var storedFilterDuplicates = true + private var storedShowTabs = 0 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -92,6 +94,10 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { return } + if (storedShowTabs != config.showTabs) { + viewpager.adapter = null + } + val configShowContactThumbnails = config.showContactThumbnails if (storedShowContactThumbnails != configShowContactThumbnails) { getAllFragments().forEach { @@ -191,6 +197,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { storedShowPhoneNumbers = showPhoneNumbers storedStartNameWithSurname = startNameWithSurname storedFilterDuplicates = filterDuplicates + storedShowTabs = showTabs } } @@ -235,6 +242,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { } private fun setupTabColors() { + handledShowTabs = config.showTabs val lastUsedPage = config.lastUsedViewPagerPage main_tabs_holder.apply { background = ColorDrawable(config.backgroundColor) @@ -250,10 +258,10 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { private fun storeLocalAccountData() { if (config.localAccountType == "-1") { - ContactsHelper(this).getContactSources { + ContactsHelper(this).getContactSources { sources -> var localAccountType = "" var localAccountName = "" - it.forEach { + sources.forEach { if (localAccountTypes.contains(it.type)) { localAccountType = it.type localAccountName = it.name @@ -309,6 +317,60 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { tryImportContactsFromFile(intent.data) intent.data = null } + + val showTabs = config.showTabs + val indexesToRemove = ArrayList() + tabsList.forEachIndexed { index, value -> + if (showTabs and value == 0) { + if (main_tabs_holder?.getTabAt(index) != null) { + indexesToRemove.add(index) + } + } + } + + indexesToRemove.reversed().forEach { + main_tabs_holder.removeTabAt(it) + } + + tabsList.forEachIndexed { index, value -> + if (showTabs and value != 0 && handledShowTabs and value == 0) { + main_tabs_holder.addTab(main_tabs_holder.newTab().setIcon(getTabIcon(value)), getTabPosition(value, showTabs)) + } + } + + handledShowTabs = config.showTabs + } + + private fun getTabIcon(position: Int) = resources.getDrawable(when (position) { + CONTACTS_TAB_MASK -> R.drawable.ic_person + FAVORITES_TAB_MASK -> R.drawable.ic_star_on + else -> R.drawable.ic_group + }) + + private fun getTabPosition(value: Int, showTabs: Int): Int { + return when (value) { + CONTACTS_TAB_MASK -> 0 + FAVORITES_TAB_MASK -> { + if (showTabs and CONTACTS_TAB_MASK != 0) { + 1 + } else { + 0 + } + } + else -> { + if (showTabs and CONTACTS_TAB_MASK != 0) { + if (showTabs and FAVORITES_TAB_MASK != 0) { + 2 + } else { + 1 + } + } else if (showTabs and FAVORITES_TAB_MASK != 0) { + 1 + } else { + 0 + } + } + } } private fun showSortingDialog() { @@ -383,13 +445,13 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { FilePickerDialog(this, pickFile = false, showFAB = true) { ExportContactsDialog(this, it) { file, contactSources -> Thread { - ContactsHelper(this).getContacts { - val contacts = it.filter { contactSources.contains(it.source) } + ContactsHelper(this).getContacts { allContacts -> + val contacts = allContacts.filter { contactSources.contains(it.source) } if (contacts.isEmpty()) { toast(R.string.no_entries_for_exporting) } else { - VcfExporter().exportContacts(this, file, contacts as ArrayList, true) { - toast(when (it) { + VcfExporter().exportContacts(this, file, contacts as ArrayList, true) { result -> + toast(when (result) { VcfExporter.ExportResult.EXPORT_OK -> R.string.exporting_successful VcfExporter.ExportResult.EXPORT_PARTIAL -> R.string.exporting_some_entries_failed else -> R.string.exporting_failed diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/ViewPagerAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/ViewPagerAdapter.kt index beb17f42..4ef918b3 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/ViewPagerAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/ViewPagerAdapter.kt @@ -5,15 +5,21 @@ import android.view.View import android.view.ViewGroup import com.simplemobiletools.contacts.R import com.simplemobiletools.contacts.activities.MainActivity +import com.simplemobiletools.contacts.extensions.config import com.simplemobiletools.contacts.fragments.MyViewPagerFragment +import com.simplemobiletools.contacts.helpers.CONTACTS_TAB_MASK +import com.simplemobiletools.contacts.helpers.FAVORITES_TAB_MASK +import com.simplemobiletools.contacts.helpers.tabsList import com.simplemobiletools.contacts.models.Contact class ViewPagerAdapter(val activity: MainActivity, val contacts: ArrayList) : PagerAdapter() { + val showTabs = activity.config.showTabs override fun instantiateItem(container: ViewGroup, position: Int): Any { val layout = getFragment(position) val view = activity.layoutInflater.inflate(layout, container, false) container.addView(view) + (view as MyViewPagerFragment).apply { setupFragment(activity) refreshContacts(contacts) @@ -25,12 +31,31 @@ class ViewPagerAdapter(val activity: MainActivity, val contacts: ArrayList R.layout.fragment_contacts - 1 -> R.layout.fragment_favorites - else -> R.layout.fragment_groups + private fun getFragment(position: Int): Int { + return when (position) { + 0 -> { + when { + showTabs and CONTACTS_TAB_MASK != 0 -> R.layout.fragment_contacts + showTabs and FAVORITES_TAB_MASK != 0 -> R.layout.fragment_favorites + else -> R.layout.fragment_groups + } + } + 1 -> { + if (showTabs and CONTACTS_TAB_MASK != 0) { + if (showTabs and FAVORITES_TAB_MASK != 0) { + R.layout.fragment_favorites + } else { + R.layout.fragment_groups + } + } else { + R.layout.fragment_groups + } + } + else -> R.layout.fragment_groups + } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Constants.kt index eb14c935..9dd91933 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Constants.kt @@ -31,6 +31,11 @@ const val FAVORITES_TAB_MASK = 2 const val GROUPS_TAB_MASK = 4 const val ALL_TABS_MASK = 7 +val tabsList = arrayListOf(CONTACTS_TAB_MASK, + FAVORITES_TAB_MASK, + GROUPS_TAB_MASK +) + // contact photo changes const val PHOTO_ADDED = 1 const val PHOTO_REMOVED = 2 diff --git a/build.gradle b/build.gradle index 94d76296..939d19d8 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.2.51' + ext.kotlin_version = '1.2.60' repositories { google()