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,6 +236,9 @@ class MainActivity : BaseActivity() {
if (B.drawerLayout.isDrawerOpen(GravityCompat.START)) {
B.drawerLayout.close()
} else if (!navController.navigateUp()) {
if (Preferences.getBoolean(this, Preferences.PREFERENCE_QUICK_EXIT)) {
super.onBackPressed()
} else {
if (lastBackPressed + 1000 > System.currentTimeMillis()) {
super.onBackPressed()
} else {
@@ -234,6 +247,7 @@ class MainActivity : BaseActivity() {
}
}
}
}
private fun checkExternalStorageAccessPermission() = runWithPermissions(
Manifest.permission.READ_EXTERNAL_STORAGE,

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
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 ->
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 -> {
}
}
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
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 ->
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 -> {
}
}
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)

View File

@@ -159,4 +159,17 @@
<item>@string/about_telegram_summary</item>
<item>@string/about_fdroid_summary</item>
</string-array>
<string-array name="pref_default_tab">
<item>@string/title_apps</item>
<item>@string/title_games</item>
<item>@string/title_updates</item>
</string-array>
<string-array name="pref_default_tab_values">
<item>0</item>
<item>1</item>
<item>2</item>
</string-array>
</resources>

View File

@@ -257,6 +257,8 @@
<string name="pref_abandon_session">"Force clear installation sessions"</string>
<string name="pref_abandon_session_desc">"Clear abandon or pending installation sessions"</string>
<string name="pref_app_download">"Downloads"</string>
<string name="pref_common_advance">"Advance"</string>
<string name="pref_common_extra">"Extras"</string>
<string name="pref_dialog_to_apply_restart">"This setting will be applied after you restart the app"</string>
<string name="pref_downloader_active_summary">"Maximum number of active downloads"</string>
<string name="pref_downloader_active_title">"Active download"</string>
@@ -290,6 +292,12 @@
<string name="pref_ui_theme_system">"Follow System"</string>
<string name="pref_ui_theme_title">"Theme"</string>
<string name="pref_ui_title">"Customization"</string>
<string name="pref_ui_layout">"Layout"</string>
<string name="pref_ui_layout_tab">"Select default tab"</string>
<string name="pref_ui_quick_exit">"Quick exit"</string>
<string name="pref_ui_quick_exit_desc">"Exit app on single back action"</string>
<string name="pref_ui_no_for_you">"For You Pages"</string>
<string name="pref_ui_no_for_you_desc">"Display For You Pages on home screen"</string>
<string name="purchase_failed">"Download Failed"</string>
<string name="purchase_invalid">"App not purchased"</string>
<string name="purchase_unsupported">"App not supported"</string>

View File

@@ -36,4 +36,37 @@
app:key="PREFERENCE_THEME_ACCENT"
app:title="@string/pref_ui_accent_title"
app:useSimpleSummaryProvider="true" />
<PreferenceCategory
app:iconSpaceReserved="false"
app:singleLineTitle="false"
app:title="@string/pref_ui_layout" />
<com.aurora.store.view.custom.preference.AuroraListPreference
app:defaultValue="0"
app:entries="@array/pref_default_tab"
app:entryValues="@array/pref_default_tab_values"
app:iconSpaceReserved="false"
app:key="PREFERENCE_DEFAULT_SELECTED_TAB"
app:title="@string/pref_ui_layout_tab"
app:useSimpleSummaryProvider="true" />
<PreferenceCategory
app:iconSpaceReserved="false"
app:singleLineTitle="false"
app:title="@string/pref_common_extra" />
<SwitchPreferenceCompat
app:defaultValue="false"
app:iconSpaceReserved="false"
app:key="PREFERENCE_QUICK_EXIT"
app:summary="@string/pref_ui_quick_exit_desc"
app:title="@string/pref_ui_quick_exit" />
<SwitchPreferenceCompat
app:defaultValue="true"
app:iconSpaceReserved="false"
app:key="PREFERENCE_FOR_YOU"
app:summary="@string/pref_ui_no_for_you_desc"
app:title="@string/pref_ui_no_for_you" />
</androidx.preference.PreferenceScreen>