Allow selecting default tab, disable For You Page & add quick exit
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user