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 6f10a401..c675ddb3 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt @@ -37,6 +37,7 @@ import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.fragment_contacts.* import kotlinx.android.synthetic.main.fragment_favorites.* import kotlinx.android.synthetic.main.fragment_groups.* +import kotlinx.android.synthetic.main.fragment_recents.* import java.io.FileOutputStream class MainActivity : SimpleActivity(), RefreshContactsListener { @@ -168,7 +169,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { val currentPage = viewpager?.currentItem menu.apply { findItem(R.id.search).isVisible = currentPage != LOCATION_GROUPS_TAB - findItem(R.id.sort).isVisible = currentPage != LOCATION_GROUPS_TAB + findItem(R.id.sort).isVisible = currentPage != LOCATION_GROUPS_TAB && currentPage != LOCATION_RECENTS_TAB findItem(R.id.filter).isVisible = currentPage != LOCATION_GROUPS_TAB } setupSearch(menu) @@ -278,7 +279,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { private fun initFragments() { refreshContacts(ALL_TABS_MASK) - viewpager.offscreenPageLimit = 2 + viewpager.offscreenPageLimit = 3 viewpager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { override fun onPageScrollStateChanged(state: Int) { if (isSearchOpen) { @@ -328,13 +329,14 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { } } - main_tabs_holder.beVisibleIf(skippedTabs < 2) + main_tabs_holder.beVisibleIf(skippedTabs < 3) invalidateOptionsMenu() } private fun getTabIcon(position: Int) = resources.getDrawable(when (position) { LOCATION_CONTACTS_TAB -> R.drawable.ic_person LOCATION_FAVORITES_TAB -> R.drawable.ic_star_on + LOCATION_RECENTS_TAB -> R.drawable.ic_clock else -> R.drawable.ic_group }) @@ -465,6 +467,10 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { favorites_fragment?.refreshContacts(it) } + if (refreshTabsMask and RECENTS_TAB_MASK != 0) { + recents_fragment?.refreshContacts(it) + } + if (refreshTabsMask and GROUPS_TAB_MASK != 0) { if (refreshTabsMask == GROUPS_TAB_MASK) { groups_fragment.skipHashComparing = true 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 4ef918b3..5a61132d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/ViewPagerAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/ViewPagerAdapter.kt @@ -7,9 +7,7 @@ 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.helpers.* import com.simplemobiletools.contacts.models.Contact class ViewPagerAdapter(val activity: MainActivity, val contacts: ArrayList) : PagerAdapter() { @@ -36,26 +34,23 @@ class ViewPagerAdapter(val activity: MainActivity, val contacts: ArrayList { - 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 + val fragments = arrayListOf() + if (showTabs and CONTACTS_TAB_MASK != 0) { + fragments.add(R.layout.fragment_contacts) } + + if (showTabs and FAVORITES_TAB_MASK != 0) { + fragments.add(R.layout.fragment_favorites) + } + + if (showTabs and RECENTS_TAB_MASK != 0) { + fragments.add(R.layout.fragment_recents) + } + + if (showTabs and GROUPS_TAB_MASK != 0) { + fragments.add(R.layout.fragment_groups) + } + + return fragments[position] } } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/dialogs/ManageVisibleTabsDialog.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/dialogs/ManageVisibleTabsDialog.kt index 788b2f23..241c62cf 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/dialogs/ManageVisibleTabsDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/dialogs/ManageVisibleTabsDialog.kt @@ -6,10 +6,7 @@ import com.simplemobiletools.commons.extensions.setupDialogStuff import com.simplemobiletools.commons.views.MyAppCompatCheckbox import com.simplemobiletools.contacts.R import com.simplemobiletools.contacts.extensions.config -import com.simplemobiletools.contacts.helpers.ALL_TABS_MASK -import com.simplemobiletools.contacts.helpers.CONTACTS_TAB_MASK -import com.simplemobiletools.contacts.helpers.FAVORITES_TAB_MASK -import com.simplemobiletools.contacts.helpers.GROUPS_TAB_MASK +import com.simplemobiletools.contacts.helpers.* class ManageVisibleTabsDialog(val activity: BaseSimpleActivity) { private var view = activity.layoutInflater.inflate(R.layout.dialog_manage_visible_tabs, null) @@ -19,6 +16,7 @@ class ManageVisibleTabsDialog(val activity: BaseSimpleActivity) { tabs.apply { put(CONTACTS_TAB_MASK, R.id.manage_visible_tabs_contacts) put(FAVORITES_TAB_MASK, R.id.manage_visible_tabs_favorites) + put(RECENTS_TAB_MASK, R.id.manage_visible_tabs_recents) put(GROUPS_TAB_MASK, R.id.manage_visible_tabs_groups) } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/MyViewPagerFragment.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/MyViewPagerFragment.kt index defca5ad..378e3640 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/MyViewPagerFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/MyViewPagerFragment.kt @@ -47,12 +47,16 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) fragment_placeholder_2.underlineText() updateViewStuff() - if (this is FavoritesFragment) { - fragment_placeholder.text = activity.getString(R.string.no_favorites) - fragment_placeholder_2.text = activity.getString(R.string.add_favorites) - } else if (this is GroupsFragment) { - fragment_placeholder.text = activity.getString(R.string.no_group_created) - fragment_placeholder_2.text = activity.getString(R.string.create_group) + when { + this is FavoritesFragment -> { + fragment_placeholder.text = activity.getString(R.string.no_favorites) + fragment_placeholder_2.text = activity.getString(R.string.add_favorites) + } + this is GroupsFragment -> { + fragment_placeholder.text = activity.getString(R.string.no_group_created) + fragment_placeholder_2.text = activity.getString(R.string.create_group) + } + this is RecentsFragment -> fragment_fab.beGone() } } } @@ -88,6 +92,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) fun refreshContacts(contacts: ArrayList) { if ((config.showTabs and CONTACTS_TAB_MASK == 0 && this is ContactsFragment) || (config.showTabs and FAVORITES_TAB_MASK == 0 && this is FavoritesFragment) || + (config.showTabs and RECENTS_TAB_MASK == 0 && this is RecentsFragment) || (config.showTabs and GROUPS_TAB_MASK == 0 && this is GroupsFragment)) { return } @@ -105,6 +110,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) val filtered = when { this is GroupsFragment -> contacts this is FavoritesFragment -> contacts.filter { it.starred == 1 } as ArrayList + this is RecentsFragment -> ArrayList() else -> { val contactSources = activity!!.getVisibleContactSources() contacts.filter { contactSources.contains(it.source) } as ArrayList @@ -170,7 +176,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) } private fun setupContactsFavoritesAdapter(contacts: ArrayList) { - fragment_placeholder_2.beVisibleIf(contacts.isEmpty()) + fragment_placeholder_2.beVisibleIf(contacts.isEmpty() && this !is RecentsFragment) fragment_placeholder.beVisibleIf(contacts.isEmpty()) fragment_list.beVisibleIf(contacts.isNotEmpty()) diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/RecentsFragment.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/RecentsFragment.kt new file mode 100644 index 00000000..791d4db0 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/RecentsFragment.kt @@ -0,0 +1,14 @@ +package com.simplemobiletools.contacts.fragments + +import android.content.Context +import android.util.AttributeSet + +class RecentsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet) { + override fun fabClicked() { + finishActMode() + } + + override fun placeholderClicked() { + + } +} 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 a9bf3b56..f1395a13 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Constants.kt @@ -24,16 +24,19 @@ const val FIRST_GROUP_ID = 10000 const val LOCATION_CONTACTS_TAB = 0 const val LOCATION_FAVORITES_TAB = 1 -const val LOCATION_GROUPS_TAB = 2 -const val LOCATION_GROUP_CONTACTS = 3 +const val LOCATION_RECENTS_TAB = 2 +const val LOCATION_GROUPS_TAB = 3 +const val LOCATION_GROUP_CONTACTS = 4 const val CONTACTS_TAB_MASK = 1 const val FAVORITES_TAB_MASK = 2 -const val GROUPS_TAB_MASK = 4 -const val ALL_TABS_MASK = 7 +const val RECENTS_TAB_MASK = 4 +const val GROUPS_TAB_MASK = 8 +const val ALL_TABS_MASK = 15 val tabsList = arrayListOf(CONTACTS_TAB_MASK, FAVORITES_TAB_MASK, + RECENTS_TAB_MASK, GROUPS_TAB_MASK ) diff --git a/app/src/main/res/drawable-hdpi/ic_clock.png b/app/src/main/res/drawable-hdpi/ic_clock.png new file mode 100644 index 00000000..43b00e0a Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_clock.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_clock.png b/app/src/main/res/drawable-xhdpi/ic_clock.png new file mode 100644 index 00000000..9d64be88 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_clock.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_clock.png b/app/src/main/res/drawable-xxhdpi/ic_clock.png new file mode 100644 index 00000000..a29eea53 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_clock.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_clock.png b/app/src/main/res/drawable-xxxhdpi/ic_clock.png new file mode 100644 index 00000000..bfd0dc3e Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_clock.png differ diff --git a/app/src/main/res/layout/dialog_manage_visible_tabs.xml b/app/src/main/res/layout/dialog_manage_visible_tabs.xml index 65e8978c..e690b1dc 100644 --- a/app/src/main/res/layout/dialog_manage_visible_tabs.xml +++ b/app/src/main/res/layout/dialog_manage_visible_tabs.xml @@ -30,6 +30,14 @@ android:paddingTop="@dimen/activity_margin" android:text="@string/favorites"/> + + + + + + +