mirror of
https://github.com/SimpleMobileTools/Simple-Dialer.git
synced 2025-06-05 21:49:23 +02:00
populating the main viewpager and top tabs
This commit is contained in:
@ -37,4 +37,5 @@ android {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation 'com.simplemobiletools:commons:5.27.9'
|
implementation 'com.simplemobiletools:commons:5.27.9'
|
||||||
|
implementation 'com.github.tibbi:IndicatorFastScroll:08f512858a'
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,16 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
package="com.simplemobiletools.dialer"
|
package="com.simplemobiletools.dialer"
|
||||||
android:installLocation="auto">
|
android:installLocation="auto">
|
||||||
|
|
||||||
|
<uses-permission android:name="android.permission.READ_CONTACTS"/>
|
||||||
|
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
|
||||||
|
|
||||||
|
<uses-permission
|
||||||
|
android:name="android.permission.USE_FINGERPRINT"
|
||||||
|
tools:node="remove" />
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:name=".App"
|
android:name=".App"
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
@ -36,7 +44,7 @@
|
|||||||
<activity
|
<activity
|
||||||
android:name="com.simplemobiletools.commons.activities.CustomizationActivity"
|
android:name="com.simplemobiletools.commons.activities.CustomizationActivity"
|
||||||
android:label="@string/customize_colors"
|
android:label="@string/customize_colors"
|
||||||
android:parentActivityName=".activities.SettingsActivity"/>
|
android:parentActivityName=".activities.SettingsActivity" />
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name="com.simplemobiletools.commons.activities.FAQActivity"
|
android:name="com.simplemobiletools.commons.activities.FAQActivity"
|
||||||
@ -46,7 +54,7 @@
|
|||||||
<activity
|
<activity
|
||||||
android:name=".activities.SettingsActivity"
|
android:name=".activities.SettingsActivity"
|
||||||
android:label="@string/settings"
|
android:label="@string/settings"
|
||||||
android:parentActivityName=".activities.MainActivity"/>
|
android:parentActivityName=".activities.MainActivity" />
|
||||||
|
|
||||||
</application>
|
</application>
|
||||||
</manifest>
|
</manifest>
|
||||||
|
@ -1,20 +1,36 @@
|
|||||||
package com.simplemobiletools.dialer.activities
|
package com.simplemobiletools.dialer.activities
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
import android.graphics.drawable.ColorDrawable
|
||||||
|
import android.graphics.drawable.Drawable
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.os.Handler
|
||||||
import android.view.Menu
|
import android.view.Menu
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import com.simplemobiletools.commons.extensions.appLaunched
|
import androidx.viewpager.widget.ViewPager
|
||||||
|
import com.simplemobiletools.commons.extensions.*
|
||||||
|
import com.simplemobiletools.commons.helpers.PERMISSION_GET_ACCOUNTS
|
||||||
|
import com.simplemobiletools.commons.helpers.PERMISSION_READ_CONTACTS
|
||||||
import com.simplemobiletools.commons.models.FAQItem
|
import com.simplemobiletools.commons.models.FAQItem
|
||||||
import com.simplemobiletools.dialer.BuildConfig
|
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.extensions.config
|
||||||
|
import com.simplemobiletools.dialer.helpers.ALL_TABS_MASK
|
||||||
|
import com.simplemobiletools.dialer.helpers.tabsList
|
||||||
|
import kotlinx.android.synthetic.main.activity_main.*
|
||||||
|
import kotlinx.android.synthetic.main.fragment_contacts.*
|
||||||
|
|
||||||
class MainActivity : SimpleActivity() {
|
class MainActivity : SimpleActivity() {
|
||||||
|
private var isGettingContacts = false
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(R.layout.activity_main)
|
setContentView(R.layout.activity_main)
|
||||||
appLaunched(BuildConfig.APPLICATION_ID)
|
appLaunched(BuildConfig.APPLICATION_ID)
|
||||||
|
|
||||||
|
setupTabColors()
|
||||||
|
checkContactPermissions()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||||
@ -32,6 +48,102 @@ class MainActivity : SimpleActivity() {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun checkContactPermissions() {
|
||||||
|
handlePermission(PERMISSION_READ_CONTACTS) {
|
||||||
|
if (it) {
|
||||||
|
handlePermission(PERMISSION_GET_ACCOUNTS) {
|
||||||
|
initFragments()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
initFragments()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setupTabColors() {
|
||||||
|
val lastUsedPage = config.lastUsedViewPagerPage
|
||||||
|
main_tabs_holder.apply {
|
||||||
|
background = ColorDrawable(config.backgroundColor)
|
||||||
|
setSelectedTabIndicatorColor(getAdjustedPrimaryColor())
|
||||||
|
getTabAt(lastUsedPage)?.select()
|
||||||
|
getTabAt(lastUsedPage)?.icon?.applyColorFilter(getAdjustedPrimaryColor())
|
||||||
|
|
||||||
|
getInactiveTabIndexes(lastUsedPage).forEach {
|
||||||
|
getTabAt(it)?.icon?.applyColorFilter(config.textColor)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getInactiveTabIndexes(activeIndex: Int) = (0 until tabsList.size).filter { it != activeIndex }
|
||||||
|
|
||||||
|
private fun initFragments() {
|
||||||
|
viewpager.offscreenPageLimit = tabsList.size - 1
|
||||||
|
viewpager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
|
||||||
|
override fun onPageScrollStateChanged(state: Int) {}
|
||||||
|
|
||||||
|
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}
|
||||||
|
|
||||||
|
override fun onPageSelected(position: Int) {
|
||||||
|
main_tabs_holder.getTabAt(position)?.select()
|
||||||
|
getAllFragments().forEach {
|
||||||
|
it?.finishActMode()
|
||||||
|
}
|
||||||
|
invalidateOptionsMenu()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
viewpager.onGlobalLayout {
|
||||||
|
refreshContacts(ALL_TABS_MASK)
|
||||||
|
}
|
||||||
|
|
||||||
|
main_tabs_holder.onTabSelectionChanged(
|
||||||
|
tabUnselectedAction = {
|
||||||
|
it.icon?.applyColorFilter(config.textColor)
|
||||||
|
},
|
||||||
|
tabSelectedAction = {
|
||||||
|
viewpager.currentItem = it.position
|
||||||
|
it.icon?.applyColorFilter(getAdjustedPrimaryColor())
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
main_tabs_holder.removeAllTabs()
|
||||||
|
tabsList.forEachIndexed { index, value ->
|
||||||
|
val tab = main_tabs_holder.newTab().setIcon(getTabIcon(index))
|
||||||
|
main_tabs_holder.addTab(tab, index, config.lastUsedViewPagerPage == index)
|
||||||
|
}
|
||||||
|
|
||||||
|
// selecting the proper tab sometimes glitches, add an extra selector to make sure we have it right
|
||||||
|
main_tabs_holder.onGlobalLayout {
|
||||||
|
Handler().postDelayed({
|
||||||
|
main_tabs_holder.getTabAt(config.lastUsedViewPagerPage)?.select()
|
||||||
|
invalidateOptionsMenu()
|
||||||
|
}, 100L)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getTabIcon(position: Int): Drawable {
|
||||||
|
val drawableId = when (position) {
|
||||||
|
else -> R.drawable.ic_person_vector
|
||||||
|
}
|
||||||
|
|
||||||
|
return resources.getColoredDrawableWithColor(drawableId, config.textColor)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun refreshContacts(refreshTabsMask: Int) {
|
||||||
|
if (isDestroyed || isFinishing || isGettingContacts) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
isGettingContacts = true
|
||||||
|
|
||||||
|
if (viewpager.adapter == null) {
|
||||||
|
viewpager.adapter = ViewPagerAdapter(this)
|
||||||
|
viewpager.currentItem = config.lastUsedViewPagerPage
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getAllFragments() = arrayListOf(contacts_fragment)
|
||||||
|
|
||||||
private fun launchAbout() {
|
private fun launchAbout() {
|
||||||
val licenses = 0
|
val licenses = 0
|
||||||
|
|
||||||
|
@ -0,0 +1,35 @@
|
|||||||
|
package com.simplemobiletools.dialer.adapters
|
||||||
|
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import androidx.viewpager.widget.PagerAdapter
|
||||||
|
import com.simplemobiletools.dialer.R
|
||||||
|
import com.simplemobiletools.dialer.activities.SimpleActivity
|
||||||
|
import com.simplemobiletools.dialer.fragments.MyViewPagerFragment
|
||||||
|
|
||||||
|
class ViewPagerAdapter(val activity: SimpleActivity) : PagerAdapter() {
|
||||||
|
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
|
||||||
|
return view
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun destroyItem(container: ViewGroup, position: Int, item: Any) {
|
||||||
|
container.removeView(item as View)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getCount() = 1
|
||||||
|
|
||||||
|
override fun isViewFromObject(view: View, item: Any) = view == item
|
||||||
|
|
||||||
|
private fun getFragment(position: Int): Int {
|
||||||
|
return R.layout.fragment_contacts
|
||||||
|
}
|
||||||
|
}
|
@ -3,6 +3,7 @@ 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 androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||||
|
import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter
|
||||||
import com.simplemobiletools.commons.extensions.underlineText
|
import com.simplemobiletools.commons.extensions.underlineText
|
||||||
import com.simplemobiletools.dialer.activities.SimpleActivity
|
import com.simplemobiletools.dialer.activities.SimpleActivity
|
||||||
import com.simplemobiletools.dialer.extensions.config
|
import com.simplemobiletools.dialer.extensions.config
|
||||||
@ -25,4 +26,8 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
|
|||||||
fragment_placeholder_2?.underlineText()
|
fragment_placeholder_2?.underlineText()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun finishActMode() {
|
||||||
|
(fragment_list.adapter as? MyRecyclerViewAdapter)?.finishActMode()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1 +1,8 @@
|
|||||||
package com.simplemobiletools.dialer.helpers
|
package com.simplemobiletools.dialer.helpers
|
||||||
|
|
||||||
|
const val CONTACTS_TAB_MASK = 1
|
||||||
|
const val FAVORITES_TAB_MASK = 2
|
||||||
|
const val HISTORY_TAB_MASK = 4
|
||||||
|
const val ALL_TABS_MASK = CONTACTS_TAB_MASK or FAVORITES_TAB_MASK or HISTORY_TAB_MASK
|
||||||
|
|
||||||
|
val tabsList = arrayListOf(CONTACTS_TAB_MASK)
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<com.simplemobiletools.contacts.pro.fragments.ContactsFragment
|
<com.simplemobiletools.dialer.fragments.ContactsFragment xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:id="@+id/contacts_fragment"
|
android:id="@+id/contacts_fragment"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<include layout="@layout/fragment_letters_layout"/>
|
<include layout="@layout/fragment_letters_layout" />
|
||||||
|
|
||||||
</com.simplemobiletools.contacts.pro.fragments.ContactsFragment>
|
</com.simplemobiletools.dialer.fragments.ContactsFragment>
|
||||||
|
Reference in New Issue
Block a user