Allow selecting default tab, disable For You Page & add quick exit

This commit is contained in:
Rahul Kumar Patel
2021-04-04 02:12:10 +05:30
parent 002a018993
commit e8ce479269
10 changed files with 195 additions and 66 deletions

View File

@@ -155,7 +155,6 @@ class MainActivity : BaseActivity() {
val backGroundColor = getStyledAttributeColor(android.R.attr.colorBackground)
bottomNavigationView.setBackgroundColor(ColorUtils.setAlphaComponent(backGroundColor, 245))
bottomNavigationView.setOnNavigationItemSelectedListener { item ->
if (item.itemId == bottomNavigationView.selectedItemId)
return@setOnNavigationItemSelectedListener false
@@ -173,6 +172,17 @@ class MainActivity : BaseActivity() {
}
}
}
val defaultTab = Preferences.getInteger(this, Preferences.PREFERENCE_DEFAULT_SELECTED_TAB)
val graph = navController.graph
when (defaultTab) {
0 -> graph.startDestination = R.id.navigation_apps
1 -> graph.startDestination = R.id.navigation_games
2 -> graph.startDestination = R.id.navigation_updates
}
navController.graph = graph
}
private fun attachDrawer() {
@@ -226,11 +236,15 @@ class MainActivity : BaseActivity() {
if (B.drawerLayout.isDrawerOpen(GravityCompat.START)) {
B.drawerLayout.close()
} else if (!navController.navigateUp()) {
if (lastBackPressed + 1000 > System.currentTimeMillis()) {
if (Preferences.getBoolean(this, Preferences.PREFERENCE_QUICK_EXIT)) {
super.onBackPressed()
} else {
lastBackPressed = System.currentTimeMillis()
Toast.makeText(this, "Click twice to exit", Toast.LENGTH_SHORT).show()
if (lastBackPressed + 1000 > System.currentTimeMillis()) {
super.onBackPressed()
} else {
lastBackPressed = System.currentTimeMillis()
Toast.makeText(this, "Click twice to exit", Toast.LENGTH_SHORT).show()
}
}
}
}

View File

@@ -32,6 +32,9 @@ object Preferences {
const val PREFERENCE_INSTALLER_ID = "PREFERENCE_INSTALLER_ID"
const val PREFERENCE_THEME_TYPE = "PREFERENCE_THEME_TYPE"
const val PREFERENCE_THEME_ACCENT = "PREFERENCE_THEME_ACCENT"
const val PREFERENCE_DEFAULT_SELECTED_TAB = "PREFERENCE_DEFAULT_SELECTED_TAB"
const val PREFERENCE_QUICK_EXIT = "PREFERENCE_QUICK_EXIT"
const val PREFERENCE_FOR_YOU = "PREFERENCE_FOR_YOU"
const val PREFERENCE_INTRO = "PREFERENCE_INTRO"
const val PREFERENCE_FILTER_GOOGLE = "PREFERENCE_FILTER_GOOGLE"

View File

@@ -31,6 +31,7 @@ import com.aurora.gplayapi.data.models.AuthData
import com.aurora.store.R
import com.aurora.store.data.providers.AuthProvider
import com.aurora.store.databinding.FragmentAppsGamesBinding
import com.aurora.store.util.Preferences
import com.aurora.store.view.ui.commons.CategoryFragment
import com.aurora.store.view.ui.commons.EditorChoiceFragment
import com.aurora.store.view.ui.commons.ForYouFragment
@@ -65,42 +66,67 @@ class AppsContainerFragment : Fragment() {
}
private fun setupViewPager() {
B.pager.adapter = ViewPagerAdapter(childFragmentManager, lifecycle, authData.isAnonymous)
val isForYouEnabled = Preferences.getBoolean(
requireContext(),
Preferences.PREFERENCE_FOR_YOU
)
val isGoogleAccount = !authData.isAnonymous
B.pager.adapter = ViewPagerAdapter(
childFragmentManager,
lifecycle,
isGoogleAccount,
isForYouEnabled
)
B.pager.isUserInputEnabled = false //Disable viewpager scroll to avoid scroll conflicts
TabLayoutMediator(B.tabLayout, B.pager, true) { tab: TabLayout.Tab, position: Int ->
when (position) {
0 -> tab.text = getString(R.string.tab_for_you)
1 -> tab.text = getString(R.string.tab_top_charts)
2 -> tab.text = getString(R.string.tab_categories)
3 -> tab.text = getString(R.string.tab_editor_choice)
else -> {
}
val tabTitles: MutableList<String> = mutableListOf<String>().apply {
if (isForYouEnabled) {
add(getString(R.string.tab_for_you))
}
add(getString(R.string.tab_top_charts))
add(getString(R.string.tab_categories))
if (isGoogleAccount) {
add(getString(R.string.tab_editor_choice))
}
}
TabLayoutMediator(B.tabLayout, B.pager, true) { tab: TabLayout.Tab, position: Int ->
tab.text = tabTitles[position]
}.attach()
}
internal class ViewPagerAdapter(
fragment: FragmentManager,
lifecycle: Lifecycle,
private val isAnonymous: Boolean
private val isGoogleAccount: Boolean,
private val isForYouEnabled: Boolean
) :
FragmentStateAdapter(fragment, lifecycle) {
override fun createFragment(position: Int): Fragment {
return when (position) {
0 -> ForYouFragment.newInstance(0)
1 -> TopChartContainerFragment()
2 -> CategoryFragment.newInstance(0)
3 -> EditorChoiceFragment.newInstance(0)
else -> Fragment()
private val tabFragments: MutableList<Fragment> = mutableListOf<Fragment>().apply {
if (isForYouEnabled) {
add(ForYouFragment.newInstance(0))
}
add(TopChartContainerFragment())
add(CategoryFragment.newInstance(0))
if (isGoogleAccount) {
add(EditorChoiceFragment.newInstance(0))
}
}
override fun createFragment(position: Int): Fragment {
return tabFragments[position]
}
override fun getItemCount(): Int {
return if (isAnonymous)
3
else
4
return tabFragments.size
}
}
}

View File

@@ -32,6 +32,7 @@ import com.aurora.gplayapi.data.models.AuthData
import com.aurora.store.R
import com.aurora.store.data.providers.AuthProvider
import com.aurora.store.databinding.FragmentTopChartBinding
import com.aurora.store.view.ui.games.TopChartFragment
class TopChartContainerFragment : Fragment() {
@@ -87,18 +88,19 @@ class TopChartContainerFragment : Fragment() {
internal class ViewPagerAdapter(fragment: FragmentManager, lifecycle: Lifecycle) :
FragmentStateAdapter(fragment, lifecycle) {
private val tabFragments: MutableList<TopChartFragment> = mutableListOf(
TopChartFragment.newInstance(0, 0),
TopChartFragment.newInstance(0, 1),
TopChartFragment.newInstance(0, 2),
TopChartFragment.newInstance(0, 3)
)
override fun createFragment(position: Int): Fragment {
return when (position) {
0 -> TopChartFragment.newInstance(0, 0)
1 -> TopChartFragment.newInstance(0, 1)
2 -> TopChartFragment.newInstance(0, 2)
3 -> TopChartFragment.newInstance(0, 3)
else -> Fragment()
}
return tabFragments[position]
}
override fun getItemCount(): Int {
return 4
return tabFragments.size
}
}
}

View File

@@ -31,8 +31,8 @@ import com.aurora.gplayapi.data.models.AuthData
import com.aurora.store.R
import com.aurora.store.data.providers.AuthProvider
import com.aurora.store.databinding.FragmentAppsGamesBinding
import com.aurora.store.util.Preferences
import com.aurora.store.view.ui.commons.CategoryFragment
import com.aurora.store.view.ui.commons.EarlyAccessFragment
import com.aurora.store.view.ui.commons.EditorChoiceFragment
import com.aurora.store.view.ui.commons.ForYouFragment
import com.google.android.material.tabs.TabLayout
@@ -66,44 +66,66 @@ class GamesContainerFragment : Fragment() {
}
private fun setupViewPager() {
B.pager.adapter = ViewPagerAdapter(childFragmentManager, lifecycle, authData.isAnonymous)
val isForYouEnabled = Preferences.getBoolean(
requireContext(),
Preferences.PREFERENCE_FOR_YOU
)
val isGoogleAccount = !authData.isAnonymous
B.pager.adapter = ViewPagerAdapter(
childFragmentManager,
lifecycle,
isGoogleAccount,
isForYouEnabled
)
B.pager.isUserInputEnabled = false
TabLayoutMediator(B.tabLayout, B.pager, true) { tab: TabLayout.Tab, position: Int ->
when (position) {
0 -> tab.text = "For you"
1 -> tab.text = "Top charts"
2 -> tab.text = "Categories"
3 -> tab.text = "Early access"
4 -> tab.text = "Editor choice"
else -> {
}
val tabTitles: MutableList<String> = mutableListOf<String>().apply {
if (isForYouEnabled) {
add(getString(R.string.tab_for_you))
}
add(getString(R.string.tab_top_charts))
add(getString(R.string.tab_categories))
if (isGoogleAccount) {
add(getString(R.string.tab_editor_choice))
}
}
TabLayoutMediator(B.tabLayout, B.pager, true) { tab: TabLayout.Tab, position: Int ->
tab.text = tabTitles[position]
}.attach()
}
internal class ViewPagerAdapter(
fragment: FragmentManager,
lifecycle: Lifecycle,
private val isAnonymous: Boolean
private val isGoogleAccount: Boolean,
private val isForYouEnabled: Boolean
) :
FragmentStateAdapter(fragment, lifecycle) {
override fun createFragment(position: Int): Fragment {
return when (position) {
0 -> ForYouFragment.newInstance(1)
1 -> TopChartContainerFragment()
2 -> CategoryFragment.newInstance(1)
3 -> EarlyAccessFragment.newInstance(1)
4 -> EditorChoiceFragment.newInstance(1)
else -> Fragment()
private val tabFragments: MutableList<Fragment> = mutableListOf<Fragment>().apply {
if (isForYouEnabled) {
add(ForYouFragment.newInstance(1))
}
add(TopChartContainerFragment())
add(CategoryFragment.newInstance(1))
if (isGoogleAccount) {
add(EditorChoiceFragment.newInstance(1))
}
}
override fun createFragment(position: Int): Fragment {
return tabFragments[position]
}
override fun getItemCount(): Int {
return if (isAnonymous)
3
else
5
return tabFragments.size
}
}
}

View File

@@ -87,18 +87,20 @@ class TopChartContainerFragment : Fragment() {
internal class ViewPagerAdapter(fragment: FragmentManager, lifecycle: Lifecycle) :
FragmentStateAdapter(fragment, lifecycle) {
private val tabFragments: MutableList<TopChartFragment> = mutableListOf(
TopChartFragment.newInstance(1, 0),
TopChartFragment.newInstance(1, 1),
TopChartFragment.newInstance(1, 2),
TopChartFragment.newInstance(1, 3)
)
override fun createFragment(position: Int): Fragment {
return when (position) {
0 -> TopChartFragment.newInstance(1, 0)
1 -> TopChartFragment.newInstance(1, 1)
2 -> TopChartFragment.newInstance(1, 2)
3 -> TopChartFragment.newInstance(1, 3)
else -> Fragment()
}
return tabFragments[position]
}
override fun getItemCount(): Int {
return 4
return tabFragments.size
}
}
}

View File

@@ -32,13 +32,16 @@ import com.aurora.store.databinding.ActivityOnboardingBinding
import com.aurora.store.util.Preferences
import com.aurora.store.util.Preferences.PREFERENCE_AUTO_DELETE
import com.aurora.store.util.Preferences.PREFERENCE_DEFAULT
import com.aurora.store.util.Preferences.PREFERENCE_DEFAULT_SELECTED_TAB
import com.aurora.store.util.Preferences.PREFERENCE_DOWNLOAD_ACTIVE
import com.aurora.store.util.Preferences.PREFERENCE_DOWNLOAD_EXTERNAL
import com.aurora.store.util.Preferences.PREFERENCE_FILTER_FDROID
import com.aurora.store.util.Preferences.PREFERENCE_FILTER_GOOGLE
import com.aurora.store.util.Preferences.PREFERENCE_FOR_YOU
import com.aurora.store.util.Preferences.PREFERENCE_INSECURE_ANONYMOUS
import com.aurora.store.util.Preferences.PREFERENCE_INSTALLER_ID
import com.aurora.store.util.Preferences.PREFERENCE_INTRO
import com.aurora.store.util.Preferences.PREFERENCE_QUICK_EXIT
import com.aurora.store.util.Preferences.PREFERENCE_THEME_ACCENT
import com.aurora.store.util.Preferences.PREFERENCE_THEME_TYPE
import com.aurora.store.util.save
@@ -159,9 +162,12 @@ class OnboardingActivity : BaseActivity() {
/*Network*/
save(PREFERENCE_INSECURE_ANONYMOUS, false)
/*Theme*/
/*Customization*/
save(PREFERENCE_THEME_TYPE, 0)
save(PREFERENCE_THEME_ACCENT, 0)
save(PREFERENCE_DEFAULT_SELECTED_TAB, 0)
save(PREFERENCE_QUICK_EXIT, false)
save(PREFERENCE_FOR_YOU, true)
/*Installer*/
save(PREFERENCE_AUTO_DELETE, true)