增加平板界面配置,更新主页面
This commit is contained in:
@@ -209,8 +209,8 @@ object PreferKey {
|
||||
|
||||
const val delayBookLoadEnable = "delayBookLoadEnable"
|
||||
const val sharedElementEnterTransitionEnable = "sharedElementEnterTransitionEnable"
|
||||
|
||||
const val bookshelfLayoutGridLandscape = "bookshelfLayoutGridLandscape"
|
||||
|
||||
const val bookshelfLayoutGridPortrait = "bookshelfLayoutGridPortrait"
|
||||
|
||||
const val tabletInterface = "tabletInterface"
|
||||
}
|
||||
|
||||
@@ -808,5 +808,11 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
|
||||
appCtx.putPrefBoolean(PreferKey.mangaVolumeKeyPage, value)
|
||||
}
|
||||
|
||||
var tabletInterface
|
||||
get() = appCtx.getPrefString(PreferKey.tabletInterface, "auto")
|
||||
set(value) {
|
||||
appCtx.putPrefString(PreferKey.tabletInterface, value)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -158,6 +158,10 @@ class ThemeConfigFragment : PreferenceFragmentCompat(),
|
||||
PreferKey.bgImageN -> {
|
||||
upPreferenceSummary(key, getPrefString(key))
|
||||
}
|
||||
|
||||
PreferKey.tabletInterface -> {
|
||||
recreateActivities()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -5,12 +5,16 @@ package io.legato.kazusa.ui.main
|
||||
import android.content.res.Configuration
|
||||
import android.os.Bundle
|
||||
import android.text.format.DateUtils
|
||||
import android.view.Gravity
|
||||
import android.view.MenuItem
|
||||
import android.view.MotionEvent
|
||||
import android.view.ViewGroup
|
||||
import android.widget.FrameLayout
|
||||
import android.widget.ImageView
|
||||
import androidx.activity.addCallback
|
||||
import androidx.activity.viewModels
|
||||
import androidx.core.view.get
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.core.view.postDelayed
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.FragmentManager
|
||||
@@ -18,6 +22,7 @@ import androidx.fragment.app.FragmentStatePagerAdapter
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.viewpager.widget.ViewPager
|
||||
import com.google.android.material.bottomnavigation.BottomNavigationView
|
||||
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
|
||||
import com.google.android.material.navigation.NavigationBarView
|
||||
import io.legato.kazusa.BuildConfig
|
||||
import io.legato.kazusa.R
|
||||
@@ -35,6 +40,7 @@ import io.legato.kazusa.help.storage.Backup
|
||||
import io.legato.kazusa.lib.dialogs.alert
|
||||
import io.legato.kazusa.service.BaseReadAloudService
|
||||
import io.legato.kazusa.ui.about.CrashLogsDialog
|
||||
import io.legato.kazusa.ui.book.search.SearchActivity
|
||||
import io.legato.kazusa.ui.main.bookshelf.BaseBookshelfFragment
|
||||
import io.legato.kazusa.ui.main.bookshelf.books.BookshelfFragment1
|
||||
import io.legato.kazusa.ui.main.bookshelf.books.BookshelfFragment2
|
||||
@@ -44,9 +50,9 @@ import io.legato.kazusa.ui.main.my.MyFragment
|
||||
import io.legato.kazusa.ui.main.rss.RssFragment
|
||||
import io.legato.kazusa.ui.welcome.WelcomeActivity
|
||||
import io.legato.kazusa.ui.widget.dialog.TextDialog
|
||||
import io.legato.kazusa.utils.dpToPx
|
||||
import io.legato.kazusa.utils.gone
|
||||
import io.legato.kazusa.utils.hideSoftInput
|
||||
import io.legato.kazusa.utils.isCreated
|
||||
import io.legato.kazusa.utils.observeEvent
|
||||
import io.legato.kazusa.utils.setNavigationBarColorAuto
|
||||
import io.legato.kazusa.utils.shouldHideSoftInput
|
||||
@@ -107,6 +113,10 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
|
||||
return
|
||||
}
|
||||
|
||||
if (savedInstanceState != null) {
|
||||
pagePosition = savedInstanceState.getInt("currentPagePosition", 0)
|
||||
}
|
||||
|
||||
onBackPressedDispatcher.addCallback(this) {
|
||||
if (pagePosition != 0) {
|
||||
binding.viewPagerMain.currentItem = 0
|
||||
@@ -133,6 +143,7 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
|
||||
upBottomMenu()
|
||||
initView()
|
||||
upHomePage()
|
||||
bindNavigationListener()
|
||||
}
|
||||
|
||||
override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
|
||||
@@ -212,12 +223,6 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
|
||||
viewPagerMain.offscreenPageLimit = 3
|
||||
viewPagerMain.adapter = adapter
|
||||
viewPagerMain.addOnPageChangeListener(PageChangeCallback())
|
||||
getNavigationBarView().apply {
|
||||
setOnItemSelectedListener { onNavigationItemSelected(it) }
|
||||
setOnItemReselectedListener { onNavigationItemReselected(it) }
|
||||
}
|
||||
|
||||
|
||||
window.setNavigationBarColorAuto(themeColor(com.google.android.material.R.attr.colorSurfaceContainer))
|
||||
}
|
||||
|
||||
@@ -287,6 +292,7 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
|
||||
|
||||
override fun onSaveInstanceState(outState: Bundle) {
|
||||
super.onSaveInstanceState(outState)
|
||||
outState.putInt("currentPagePosition", pagePosition)
|
||||
if (AppConfig.autoRefreshBook) {
|
||||
outState.putBoolean("isAutoRefreshedBook", true)
|
||||
}
|
||||
@@ -333,18 +339,33 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
|
||||
}
|
||||
|
||||
private fun getNavigationBarView(): NavigationBarView {
|
||||
return findViewById(
|
||||
if (resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT)
|
||||
R.id.bottom_navigation_view
|
||||
else
|
||||
R.id.navigation_rail_view
|
||||
)
|
||||
val tabletInterface = AppConfig.tabletInterface
|
||||
val orientation = resources.configuration.orientation
|
||||
val smallestWidthDp = resources.configuration.smallestScreenWidthDp
|
||||
|
||||
val useRail = when (tabletInterface) {
|
||||
"always" -> true
|
||||
"landscape" -> orientation == Configuration.ORIENTATION_LANDSCAPE
|
||||
"off" -> false
|
||||
"auto" -> smallestWidthDp >= 600
|
||||
else -> false
|
||||
}
|
||||
|
||||
// 控制显隐
|
||||
binding.navigationRailView.isVisible = useRail
|
||||
binding.bottomNavigationView.isVisible = !useRail
|
||||
|
||||
return if (useRail) binding.navigationRailView else binding.bottomNavigationView
|
||||
}
|
||||
|
||||
|
||||
private fun upBottomMenu() {
|
||||
val menu = getNavigationBarView().menu
|
||||
val navView = getNavigationBarView()
|
||||
val menu = navView.menu
|
||||
|
||||
menu.findItem(R.id.menu_discovery).isVisible = AppConfig.showDiscovery
|
||||
menu.findItem(R.id.menu_rss).isVisible = AppConfig.showRSS
|
||||
|
||||
var index = 0
|
||||
if (AppConfig.showDiscovery) {
|
||||
index++
|
||||
@@ -357,9 +378,65 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
|
||||
index++
|
||||
realPositions[index] = idMy
|
||||
bottomMenuCount = index + 1
|
||||
|
||||
adapter.notifyDataSetChanged()
|
||||
if (AppConfig.showBottomView) getNavigationBarView().visible()
|
||||
else binding.bottomNavigationView?.gone()
|
||||
|
||||
if (AppConfig.showBottomView) {
|
||||
navView.visible()
|
||||
} else {
|
||||
binding.bottomNavigationView.gone()
|
||||
binding.navigationRailView.gone()
|
||||
}
|
||||
|
||||
val efab =
|
||||
binding.navigationRailView.headerView?.findViewById<ExtendedFloatingActionButton>(R.id.nav_fab)
|
||||
efab?.let { it.isExtended = false }
|
||||
|
||||
val lp =
|
||||
binding.navigationRailView.headerView?.let { it.layoutParams as FrameLayout.LayoutParams }
|
||||
lp!!.gravity = Gravity.START
|
||||
|
||||
binding.navigationRailView.headerView?.setPadding(
|
||||
12.dpToPx(),
|
||||
12.dpToPx(),
|
||||
12.dpToPx(),
|
||||
12.dpToPx()
|
||||
)
|
||||
|
||||
binding.navigationRailView.headerView?.findViewById<ExtendedFloatingActionButton>(R.id.nav_fab)
|
||||
?.setOnClickListener {
|
||||
startActivity<SearchActivity>()
|
||||
}
|
||||
binding.navigationRailView.headerView?.findViewById<ImageView>(R.id.nav_botton)
|
||||
?.setOnClickListener {
|
||||
efab?.let { it1 ->
|
||||
if (it1.isExtended) {
|
||||
efab.isExtended = false
|
||||
binding.navigationRailView.collapse()
|
||||
} else {
|
||||
efab.isExtended = true
|
||||
binding.navigationRailView.expand()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun bindNavigationListener() {
|
||||
val navView = getNavigationBarView()
|
||||
navView.setOnItemSelectedListener { onNavigationItemSelected(it) }
|
||||
navView.setOnItemReselectedListener { onNavigationItemReselected(it) }
|
||||
binding.viewPagerMain.post {
|
||||
binding.viewPagerMain.setCurrentItem(pagePosition, false)
|
||||
getNavigationBarView().menu[pagePosition].isChecked = true
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateNavigationRailFab(position: Int) {
|
||||
binding.navigationRailView.headerView?.gone()
|
||||
val fragmentId = getFragmentId(position)
|
||||
if (fragmentId == idBookshelf1 || fragmentId == idBookshelf2 || fragmentId == idBookshelf3) {
|
||||
binding.navigationRailView.headerView?.visible()
|
||||
}
|
||||
}
|
||||
|
||||
private fun upHomePage() {
|
||||
@@ -397,7 +474,9 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
|
||||
|
||||
override fun onPageSelected(position: Int) {
|
||||
pagePosition = position
|
||||
getNavigationBarView().menu[realPositions[position]].isChecked = true
|
||||
val navView = getNavigationBarView()
|
||||
navView.menu[realPositions[position]].isChecked = true
|
||||
updateNavigationRailFab(position)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -443,11 +522,7 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
|
||||
}
|
||||
|
||||
override fun instantiateItem(container: ViewGroup, position: Int): Any {
|
||||
var fragment = super.instantiateItem(container, position) as Fragment
|
||||
if (fragment.isCreated && getItemPosition(fragment) == POSITION_NONE) {
|
||||
destroyItem(container, position, fragment)
|
||||
fragment = super.instantiateItem(container, position) as Fragment
|
||||
}
|
||||
val fragment = super.instantiateItem(container, position) as Fragment
|
||||
fragmentMap[getId(position)] = fragment
|
||||
return fragment
|
||||
}
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<com.google.android.material.navigationrail.NavigationRailView
|
||||
android:id="@+id/navigation_rail_view"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:background="?attr/colorSurfaceContainer"
|
||||
app:menuGravity="center"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:menu="@menu/main_bnv" />
|
||||
|
||||
<androidx.viewpager.widget.ViewPager
|
||||
android:id="@+id/view_pager_main"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@id/navigation_rail_view"
|
||||
app:layout_constraintEnd_toEndOf="parent" />
|
||||
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -7,11 +7,11 @@
|
||||
|
||||
<androidx.viewpager.widget.ViewPager
|
||||
android:id="@+id/view_pager_main"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
app:layout_constraintBottom_toTopOf="@id/bottom_navigation_view"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@id/navigation_rail_view"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:ignore="SpeakableTextPresentCheck" />
|
||||
|
||||
@@ -20,9 +20,23 @@
|
||||
android:id="@+id/bottom_navigation_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="visible"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:menu="@menu/main_bnv" />
|
||||
|
||||
<com.google.android.material.navigationrail.NavigationRailView
|
||||
android:id="@+id/navigation_rail_view"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:background="?attr/colorSurfaceContainer"
|
||||
android:visibility="visible"
|
||||
app:headerLayout="@layout/navigation_rail_fab"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:menu="@menu/main_bnv"
|
||||
app:menuGravity="center" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/navigation_rail_fab"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="top|start"
|
||||
android:clipChildren="false"
|
||||
android:clipToPadding="false"
|
||||
android:orientation="vertical">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/nav_botton"
|
||||
android:layout_width="56dp"
|
||||
android:layout_height="56dp"
|
||||
android:scaleType="center"
|
||||
android:src="@drawable/ic_menu" />
|
||||
|
||||
<com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
|
||||
android:id="@+id/nav_fab"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/search"
|
||||
app:icon="@drawable/ic_search" />
|
||||
|
||||
</LinearLayout>
|
||||
@@ -124,5 +124,11 @@
|
||||
<item>@string/bookshelf_px_5</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="tabletInterface">
|
||||
<item>自动</item>
|
||||
<item>总是</item>
|
||||
<item>横屏时</item>
|
||||
<item>关闭</item>
|
||||
</string-array>
|
||||
|
||||
</resources>
|
||||
@@ -1242,4 +1242,5 @@
|
||||
<string name="system_media_control_compatibility_change">系统媒体控件兼容性更改</string>
|
||||
<string name="system_media_control_compatibility_change_summary">当锁屏不显示系统媒体控件时可以尝试开启,比如 OneUI 7.0或 OriginOS 等</string>
|
||||
<string name="read_aloud_pause_resume">朗读暂停/继续</string>
|
||||
<string name="tabletInterface">平板界面</string>
|
||||
</resources>
|
||||
|
||||
@@ -64,4 +64,11 @@
|
||||
<item>en</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="tabletInterface_value">
|
||||
<item>auto</item>
|
||||
<item>always</item>
|
||||
<item>landscape</item>
|
||||
<item>off</item>
|
||||
</string-array>
|
||||
|
||||
</resources>
|
||||
@@ -152,6 +152,13 @@
|
||||
<item>English</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="tabletInterface">
|
||||
<item>Auto</item>
|
||||
<item>Always</item>
|
||||
<item>In_Landscape_Mode</item>
|
||||
<item>Off</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="rule_type">
|
||||
<item>BookSource</item>
|
||||
<item>RssSource</item>
|
||||
|
||||
@@ -1247,4 +1247,5 @@
|
||||
<string name="system_media_control_compatibility_change_summary">当锁屏不显示系统媒体控件时可以尝试开启,比如 OneUI 7.0或 OriginOS 等</string>
|
||||
<string name="read_aloud_pause_resume">朗读暂停/继续</string>
|
||||
<string name="play_mode">播放模式</string>
|
||||
<string name="tabletInterface">平板界面</string>
|
||||
</resources>
|
||||
|
||||
@@ -40,6 +40,13 @@
|
||||
app:iconSpaceReserved="false"
|
||||
app:icons="@array/icons" />
|
||||
|
||||
<io.legato.kazusa.lib.prefs.NameListPreference
|
||||
android:defaultValue="auto"
|
||||
android:key="tabletInterface"
|
||||
android:title="@string/tabletInterface"
|
||||
app:entries="@array/tabletInterface"
|
||||
app:entryValues="@array/tabletInterface_value" />
|
||||
|
||||
<io.legato.kazusa.lib.prefs.Preference
|
||||
android:key="welcomeStyle"
|
||||
android:title="@string/welcome_style"
|
||||
|
||||
Reference in New Issue
Block a user