add viewpager tab fragments

This commit is contained in:
tibbi 2018-02-28 12:50:52 +01:00
parent 7bd4296d64
commit a64b1903cd
9 changed files with 158 additions and 3 deletions

View File

@ -41,7 +41,7 @@ android {
} }
dependencies { dependencies {
implementation 'com.simplemobiletools:commons:3.13.17' implementation 'com.simplemobiletools:commons:3.13.20'
} }
Properties props = new Properties() Properties props = new Properties()

View File

@ -1,24 +1,32 @@
package com.simplemobiletools.clock.activities package com.simplemobiletools.clock.activities
import android.content.Intent import android.content.Intent
import android.graphics.drawable.ColorDrawable
import android.os.Bundle import android.os.Bundle
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.view.WindowManager import android.view.WindowManager
import com.simplemobiletools.clock.BuildConfig import com.simplemobiletools.clock.BuildConfig
import com.simplemobiletools.clock.R import com.simplemobiletools.clock.R
import com.simplemobiletools.clock.adapters.ViewPagerAdapter
import com.simplemobiletools.clock.extensions.config import com.simplemobiletools.clock.extensions.config
import com.simplemobiletools.commons.extensions.restartActivity import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.LICENSE_KOTLIN import com.simplemobiletools.commons.helpers.LICENSE_KOTLIN
import com.simplemobiletools.commons.models.FAQItem import com.simplemobiletools.commons.models.FAQItem
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : SimpleActivity() { class MainActivity : SimpleActivity() {
private var storedUseEnglish = false private var storedUseEnglish = false
private var storedTextColor = 0
private var storedBackgroundColor = 0
private var storedPrimaryColor = 0
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()
storeStateVariables() storeStateVariables()
initFragments()
} }
override fun onResume() { override fun onResume() {
@ -28,6 +36,24 @@ class MainActivity : SimpleActivity() {
return return
} }
val configTextColor = config.textColor
if (storedTextColor != configTextColor) {
getInactiveTabIndexes(viewpager.currentItem).forEach {
main_tabs_holder.getTabAt(it)?.icon?.applyColorFilter(configTextColor)
}
}
val configBackgroundColor = config.backgroundColor
if (storedBackgroundColor != configBackgroundColor) {
main_tabs_holder.background = ColorDrawable(configBackgroundColor)
}
val configPrimaryColor = config.primaryColor
if (storedPrimaryColor != configPrimaryColor) {
main_tabs_holder.setSelectedTabIndicatorColor(getAdjustedPrimaryColor())
main_tabs_holder.getTabAt(viewpager.currentItem)?.icon?.applyColorFilter(getAdjustedPrimaryColor())
}
if (config.preventPhoneFromSleeping) { if (config.preventPhoneFromSleeping) {
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
} }
@ -41,6 +67,11 @@ class MainActivity : SimpleActivity() {
} }
} }
override fun onDestroy() {
super.onDestroy()
config.lastUsedViewPagerPage = viewpager.currentItem
}
override fun onCreateOptionsMenu(menu: Menu): Boolean { override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.menu, menu) menuInflater.inflate(R.menu.menu, menu)
return true return true
@ -56,8 +87,51 @@ class MainActivity : SimpleActivity() {
} }
private fun storeStateVariables() { private fun storeStateVariables() {
storedUseEnglish = config.useEnglish config.apply {
storedTextColor = textColor
storedBackgroundColor = backgroundColor
storedPrimaryColor = primaryColor
storedUseEnglish = useEnglish
} }
}
private fun initFragments() {
viewpager.adapter = ViewPagerAdapter(this)
viewpager.onPageChangeListener {
main_tabs_holder.getTabAt(it)?.select()
}
viewpager.currentItem = config.lastUsedViewPagerPage
main_tabs_holder.onTabSelectionChanged(
tabUnselectedAction = {
it.icon?.applyColorFilter(config.textColor)
},
tabSelectedAction = {
viewpager.currentItem = it.position
it.icon?.applyColorFilter(getAdjustedPrimaryColor())
}
)
setupTabColors()
}
private fun setupTabColors() {
val lastUsedPage = config.lastUsedViewPagerPage
main_tabs_holder.apply {
background = ColorDrawable(config.backgroundColor)
setSelectedTabIndicatorColor(getAdjustedPrimaryColor())
getTabAt(lastUsedPage)?.apply {
select()
icon?.applyColorFilter(getAdjustedPrimaryColor())
}
getInactiveTabIndexes(lastUsedPage).forEach {
getTabAt(it)?.icon?.applyColorFilter(config.textColor)
}
}
}
private fun getInactiveTabIndexes(activeIndex: Int) = arrayListOf(0, 1, 2).filter { it != activeIndex }
private fun launchSettings() { private fun launchSettings() {
startActivity(Intent(applicationContext, SettingsActivity::class.java)) startActivity(Intent(applicationContext, SettingsActivity::class.java))

View File

@ -0,0 +1,30 @@
package com.simplemobiletools.clock.adapters
import android.support.v4.view.PagerAdapter
import android.view.View
import android.view.ViewGroup
import com.simplemobiletools.clock.R
import com.simplemobiletools.clock.activities.SimpleActivity
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)
return view
}
override fun destroyItem(container: ViewGroup, position: Int, item: Any) {
container.removeView(item as View)
}
override fun getCount() = 3
override fun isViewFromObject(view: View, item: Any) = view == item
private fun getFragment(position: Int) = when (position) {
0 -> R.layout.fragment_clock
1 -> R.layout.fragment_alarm
else -> R.layout.fragment_stopwatch
}
}

View File

@ -0,0 +1,9 @@
package com.simplemobiletools.clock.fragments
import android.content.Context
import android.util.AttributeSet
import android.widget.RelativeLayout
class AlarmFragment(context: Context, attributeSet: AttributeSet) : RelativeLayout(context, attributeSet) {
}

View File

@ -0,0 +1,9 @@
package com.simplemobiletools.clock.fragments
import android.content.Context
import android.util.AttributeSet
import android.widget.RelativeLayout
class ClockFragment(context: Context, attributeSet: AttributeSet) : RelativeLayout(context, attributeSet) {
}

View File

@ -0,0 +1,9 @@
package com.simplemobiletools.clock.fragments
import android.content.Context
import android.util.AttributeSet
import android.widget.RelativeLayout
class StopwatchkFragment(context: Context, attributeSet: AttributeSet) : RelativeLayout(context, attributeSet) {
}

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<com.simplemobiletools.clock.fragments.AlarmFragment
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/alarm_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.simplemobiletools.clock.fragments.AlarmFragment>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<com.simplemobiletools.clock.fragments.ClockFragment
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/clock_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.simplemobiletools.clock.fragments.ClockFragment>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<com.simplemobiletools.clock.fragments.StopwatchkFragment
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/stopwatch_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.simplemobiletools.clock.fragments.StopwatchkFragment>