Added hiding tabs (#183)

This commit is contained in:
Agnieszka C
2021-10-09 10:38:45 +02:00
parent ea9c0eb2d1
commit 4426d42fe9
8 changed files with 207 additions and 27 deletions

View File

@ -84,7 +84,8 @@ class MainActivity : SimpleActivity() {
}
if (!isSearchOpen) {
refreshItems()
hideTabs()
refreshItems(true)
}
checkShortcuts()
@ -93,8 +94,8 @@ class MainActivity : SimpleActivity() {
}, 2000)
}
override fun onDestroy() {
super.onDestroy()
override fun onPause() {
super.onPause()
config.lastUsedViewPagerPage = viewpager.currentItem
}
@ -258,12 +259,6 @@ class MainActivity : SimpleActivity() {
}
)
main_tabs_holder.removeAllTabs()
tabsList.forEachIndexed { index, value ->
val tab = main_tabs_holder.newTab().setIcon(getTabIcon(index))
main_tabs_holder.addTab(tab, index, getDefaultTab() == index)
}
// selecting the proper tab sometimes glitches, add an extra selector to make sure we have it right
main_tabs_holder.onGlobalLayout {
Handler().postDelayed({
@ -289,6 +284,30 @@ class MainActivity : SimpleActivity() {
}
}
private fun hideTabs() {
val selectedTabIndex = main_tabs_holder.selectedTabPosition
viewpager.adapter = null
main_tabs_holder.removeAllTabs()
var skippedTabs = 0
var isAnySelected = false
tabsList.forEachIndexed { index, value ->
if (config.showTabs and value == 0) {
skippedTabs++
} else {
val tab = main_tabs_holder.newTab().setIcon(getTabIcon(index))
val wasAlreadySelected = selectedTabIndex > -1 && selectedTabIndex == index - skippedTabs
val shouldSelect = !isAnySelected && wasAlreadySelected
if (shouldSelect) {
isAnySelected = true
}
main_tabs_holder.addTab(tab, index - skippedTabs, shouldSelect)
}
}
if (!isAnySelected) {
main_tabs_holder.selectTab(main_tabs_holder.getTabAt(getDefaultTab()))
}
}
private fun getTabIcon(position: Int): Drawable {
val drawableId = when (position) {
0 -> R.drawable.ic_person_vector
@ -299,14 +318,14 @@ class MainActivity : SimpleActivity() {
return resources.getColoredDrawableWithColor(drawableId, config.textColor)
}
private fun refreshItems() {
private fun refreshItems(openLastTab: Boolean = false) {
if (isDestroyed || isFinishing) {
return
}
if (viewpager.adapter == null) {
viewpager.adapter = ViewPagerAdapter(this)
viewpager.currentItem = getDefaultTab()
viewpager.currentItem = if (openLastTab) main_tabs_holder.selectedTabPosition else getDefaultTab()
viewpager.onGlobalLayout {
refreshFragments()
}
@ -327,20 +346,40 @@ class MainActivity : SimpleActivity() {
recents_fragment?.refreshItems()
}
private fun getAllFragments() = arrayListOf(contacts_fragment, favorites_fragment, recents_fragment).toMutableList() as ArrayList<MyViewPagerFragment?>
private fun getAllFragments(): ArrayList<MyViewPagerFragment> {
val showTabs = config.showTabs
val fragments = arrayListOf<MyViewPagerFragment>()
private fun getCurrentFragment(): MyViewPagerFragment? = when (viewpager.currentItem) {
0 -> contacts_fragment
1 -> favorites_fragment
else -> recents_fragment
if (showTabs and TAB_CONTACTS > 0) {
fragments.add(contacts_fragment)
}
if (showTabs and TAB_FAVORITES > 0) {
fragments.add(favorites_fragment)
}
if (showTabs and TAB_CALL_HISTORY > 0) {
fragments.add(recents_fragment)
}
return fragments
}
private fun getCurrentFragment(): MyViewPagerFragment? = getAllFragments().getOrNull(viewpager.currentItem)
private fun getDefaultTab(): Int {
val showTabsMask = config.showTabs
return when (config.defaultTab) {
TAB_LAST_USED -> config.lastUsedViewPagerPage
TAB_LAST_USED -> if (config.lastUsedViewPagerPage < main_tabs_holder.tabCount) config.lastUsedViewPagerPage else 0
TAB_CONTACTS -> 0
TAB_FAVORITES -> 1
else -> 2
TAB_FAVORITES -> if (showTabsMask and TAB_CONTACTS > 0) 1 else 0
else -> {
if (showTabsMask and TAB_CONTACTS > 0) {
if (showTabsMask and TAB_FAVORITES > 0) 2 else 1
} else {
if (showTabsMask and TAB_FAVORITES > 0) 1 else 0
}
}
}
}

View File

@ -12,6 +12,7 @@ import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.*
import com.simplemobiletools.commons.models.RadioItem
import com.simplemobiletools.dialer.R
import com.simplemobiletools.dialer.dialogs.ManageVisibleTabsDialog
import com.simplemobiletools.dialer.extensions.config
import kotlinx.android.synthetic.main.activity_settings.*
import java.util.*
@ -32,6 +33,7 @@ class SettingsActivity : SimpleActivity() {
setupManageSpeedDial()
setupChangeDateTimeFormat()
setupFontSize()
setupManageShownTabs()
setupDefaultTab()
setupDialPadOpen()
setupGroupSubsequentCalls()
@ -113,6 +115,12 @@ class SettingsActivity : SimpleActivity() {
}
}
private fun setupManageShownTabs() {
settings_manage_tabs_holder.setOnClickListener {
ManageVisibleTabsDialog(this)
}
}
private fun setupDefaultTab() {
settings_default_tab.text = getDefaultTabText()
settings_default_tab_holder.setOnClickListener {

View File

@ -3,8 +3,12 @@ package com.simplemobiletools.dialer.adapters
import android.view.View
import android.view.ViewGroup
import androidx.viewpager.widget.PagerAdapter
import com.simplemobiletools.commons.helpers.TAB_CALL_HISTORY
import com.simplemobiletools.commons.helpers.TAB_CONTACTS
import com.simplemobiletools.commons.helpers.TAB_FAVORITES
import com.simplemobiletools.dialer.R
import com.simplemobiletools.dialer.activities.SimpleActivity
import com.simplemobiletools.dialer.extensions.config
import com.simplemobiletools.dialer.fragments.MyViewPagerFragment
class ViewPagerAdapter(val activity: SimpleActivity) : PagerAdapter() {
@ -30,10 +34,20 @@ class ViewPagerAdapter(val activity: SimpleActivity) : PagerAdapter() {
override fun isViewFromObject(view: View, item: Any) = view == item
private fun getFragment(position: Int): Int {
return when (position) {
0 -> R.layout.fragment_contacts
1 -> R.layout.fragment_favorites
else -> R.layout.fragment_recents
val showTabs = activity.config.showTabs
val fragments = arrayListOf<Int>()
if (showTabs and TAB_CONTACTS > 0) {
fragments.add(R.layout.fragment_contacts)
}
if (showTabs and TAB_FAVORITES > 0) {
fragments.add(R.layout.fragment_favorites)
}
if (showTabs and TAB_CALL_HISTORY > 0) {
fragments.add(R.layout.fragment_recents)
}
return if (position < fragments.size) fragments[position] else fragments.last()
}
}

View File

@ -0,0 +1,47 @@
package com.simplemobiletools.dialer.dialogs
import androidx.appcompat.app.AlertDialog
import com.simplemobiletools.commons.activities.BaseSimpleActivity
import com.simplemobiletools.commons.extensions.setupDialogStuff
import com.simplemobiletools.commons.helpers.TAB_CONTACTS
import com.simplemobiletools.commons.helpers.TAB_FAVORITES
import com.simplemobiletools.commons.helpers.TAB_CALL_HISTORY
import com.simplemobiletools.commons.views.MyAppCompatCheckbox
import com.simplemobiletools.dialer.R
import com.simplemobiletools.dialer.extensions.config
class ManageVisibleTabsDialog(val activity: BaseSimpleActivity) {
private var view = activity.layoutInflater.inflate(R.layout.dialog_manage_visible_tabs, null)
private val tabs = LinkedHashMap<Int, Int>()
init {
tabs.apply {
put(TAB_CONTACTS, R.id.manage_visible_tabs_contacts)
put(TAB_FAVORITES, R.id.manage_visible_tabs_favorites)
put(TAB_CALL_HISTORY, R.id.manage_visible_tabs_call_history)
}
val showTabs = activity.config.showTabs
for ((key, value) in tabs) {
view.findViewById<MyAppCompatCheckbox>(value).isChecked = showTabs and key != 0
}
AlertDialog.Builder(activity)
.setPositiveButton(R.string.ok) { dialog, which -> dialogConfirmed() }
.setNegativeButton(R.string.cancel, null)
.create().apply {
activity.setupDialogStuff(view, this)
}
}
private fun dialogConfirmed() {
var result = 0
for ((key, value) in tabs) {
if (view.findViewById<MyAppCompatCheckbox>(value).isChecked) {
result += key
}
}
activity.config.showTabs = result
}
}

View File

@ -51,4 +51,8 @@ class Config(context: Context) : BaseConfig(context) {
var disableProximitySensor: Boolean
get() = prefs.getBoolean(DISABLE_PROXIMITY_SENSOR, false)
set(disableProximitySensor) = prefs.edit().putBoolean(DISABLE_PROXIMITY_SENSOR, disableProximitySensor).apply()
var showTabs: Int
get() = prefs.getInt(SHOW_TABS, ALL_TABS_MASK)
set(showTabs) = prefs.edit().putInt(SHOW_TABS, showTabs).apply()
}

View File

@ -1,17 +1,20 @@
package com.simplemobiletools.dialer.helpers
import com.simplemobiletools.commons.helpers.TAB_CONTACTS
import com.simplemobiletools.commons.helpers.TAB_FAVORITES
import com.simplemobiletools.commons.helpers.TAB_CALL_HISTORY
// shared prefs
const val SPEED_DIAL = "speed_dial"
const val REMEMBER_SIM_PREFIX = "remember_sim_"
const val GROUP_SUBSEQUENT_CALLS = "group_subsequent_calls"
const val OPEN_DIAL_PAD_AT_LAUNCH = "open_dial_pad_at_launch"
const val DISABLE_PROXIMITY_SENSOR = "disable_proximity_sensor"
const val SHOW_TABS = "show_tabs"
const val CONTACTS_TAB_MASK = 1
const val FAVORITES_TAB_MASK = 2
const val RECENTS_TAB_MASK = 4
const val ALL_TABS_MASK = TAB_CONTACTS or TAB_FAVORITES or TAB_CALL_HISTORY
val tabsList = arrayListOf(CONTACTS_TAB_MASK, FAVORITES_TAB_MASK, RECENTS_TAB_MASK)
val tabsList = arrayListOf(TAB_CONTACTS, TAB_FAVORITES, TAB_CALL_HISTORY)
private const val PATH = "com.simplemobiletools.dialer.action."
const val ACCEPT_CALL = PATH + "accept_call"