Get rid of SlidingPaneLayout in settings
This commit is contained in:
@@ -9,10 +9,10 @@ import androidx.core.view.updatePadding
|
|||||||
import androidx.preference.PreferenceFragmentCompat
|
import androidx.preference.PreferenceFragmentCompat
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
import org.koitharu.kotatsu.R
|
||||||
import org.koitharu.kotatsu.core.prefs.AppSettings
|
import org.koitharu.kotatsu.core.prefs.AppSettings
|
||||||
import org.koitharu.kotatsu.core.ui.util.RecyclerViewOwner
|
import org.koitharu.kotatsu.core.ui.util.RecyclerViewOwner
|
||||||
import org.koitharu.kotatsu.core.ui.util.WindowInsetsDelegate
|
import org.koitharu.kotatsu.core.ui.util.WindowInsetsDelegate
|
||||||
import org.koitharu.kotatsu.settings.SettingsHeadersFragment
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@Suppress("LeakingThis")
|
@Suppress("LeakingThis")
|
||||||
@@ -56,9 +56,11 @@ abstract class BasePreferenceFragment(@StringRes private val titleId: Int) :
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("UsePropertyAccessSyntax")
|
|
||||||
protected fun setTitle(title: CharSequence) {
|
protected fun setTitle(title: CharSequence) {
|
||||||
(parentFragment as? SettingsHeadersFragment)?.setTitle(title)
|
activity?.let {
|
||||||
?: activity?.setTitle(title)
|
if (!it.resources.getBoolean(R.bool.is_tablet)) {
|
||||||
|
it.title = title
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,9 @@ import android.content.Intent
|
|||||||
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.ViewGroup.MarginLayoutParams
|
||||||
import androidx.core.graphics.Insets
|
import androidx.core.graphics.Insets
|
||||||
|
import androidx.core.view.updateLayoutParams
|
||||||
import androidx.core.view.updatePadding
|
import androidx.core.view.updatePadding
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.FragmentManager
|
import androidx.fragment.app.FragmentManager
|
||||||
@@ -43,10 +45,18 @@ class SettingsActivity :
|
|||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(ActivitySettingsBinding.inflate(layoutInflater))
|
setContentView(ActivitySettingsBinding.inflate(layoutInflater))
|
||||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||||
|
val isMasterDetails = viewBinding.containerMaster != null
|
||||||
if (supportFragmentManager.findFragmentById(R.id.container) == null) {
|
val fm = supportFragmentManager
|
||||||
|
val currentFragment = fm.findFragmentById(R.id.container)
|
||||||
|
if (currentFragment == null || (isMasterDetails && currentFragment is RootSettingsFragment)) {
|
||||||
openDefaultFragment()
|
openDefaultFragment()
|
||||||
}
|
}
|
||||||
|
if (isMasterDetails && fm.findFragmentById(R.id.container_master) == null) {
|
||||||
|
supportFragmentManager.commit {
|
||||||
|
setReorderingAllowed(true)
|
||||||
|
replace(R.id.container_master, RootSettingsFragment())
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onTitleChanged(title: CharSequence?, color: Int) {
|
override fun onTitleChanged(title: CharSequence?, color: Int) {
|
||||||
@@ -90,7 +100,6 @@ class SettingsActivity :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("DEPRECATION")
|
|
||||||
override fun onPreferenceStartFragment(
|
override fun onPreferenceStartFragment(
|
||||||
caller: PreferenceFragmentCompat,
|
caller: PreferenceFragmentCompat,
|
||||||
pref: Preference,
|
pref: Preference,
|
||||||
@@ -98,32 +107,35 @@ class SettingsActivity :
|
|||||||
val fm = supportFragmentManager
|
val fm = supportFragmentManager
|
||||||
val fragment = fm.fragmentFactory.instantiate(classLoader, pref.fragment ?: return false)
|
val fragment = fm.fragmentFactory.instantiate(classLoader, pref.fragment ?: return false)
|
||||||
fragment.arguments = pref.extras
|
fragment.arguments = pref.extras
|
||||||
fragment.setTargetFragment(caller, 0)
|
openFragment(fragment, isFromRoot = caller is RootSettingsFragment)
|
||||||
openFragment(fragment)
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onWindowInsetsChanged(insets: Insets) {
|
override fun onWindowInsetsChanged(insets: Insets) {
|
||||||
viewBinding.appbar.updatePadding(
|
viewBinding.root.updatePadding(
|
||||||
left = insets.left,
|
|
||||||
right = insets.right,
|
|
||||||
)
|
|
||||||
viewBinding.container.updatePadding(
|
|
||||||
left = insets.left,
|
left = insets.left,
|
||||||
right = insets.right,
|
right = insets.right,
|
||||||
)
|
)
|
||||||
|
viewBinding.cardDetails?.updateLayoutParams<MarginLayoutParams> {
|
||||||
|
bottomMargin = marginStart + insets.bottom
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun openFragment(fragment: Fragment) {
|
fun openFragment(fragment: Fragment, isFromRoot: Boolean) {
|
||||||
|
val hasFragment = supportFragmentManager.findFragmentById(R.id.container) != null
|
||||||
|
val isMasterDetail = viewBinding.containerMaster != null
|
||||||
supportFragmentManager.commit {
|
supportFragmentManager.commit {
|
||||||
setReorderingAllowed(true)
|
setReorderingAllowed(true)
|
||||||
replace(R.id.container, fragment)
|
replace(R.id.container, fragment)
|
||||||
setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
|
setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
|
||||||
addToBackStack(null)
|
if (!isMasterDetail || (hasFragment && !isFromRoot)) {
|
||||||
|
addToBackStack(null)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun openDefaultFragment() {
|
private fun openDefaultFragment() {
|
||||||
|
val hasMaster = viewBinding.containerMaster != null
|
||||||
val fragment = when (intent?.action) {
|
val fragment = when (intent?.action) {
|
||||||
ACTION_READER -> ReaderSettingsFragment()
|
ACTION_READER -> ReaderSettingsFragment()
|
||||||
ACTION_SUGGESTIONS -> SuggestionsSettingsFragment()
|
ACTION_SUGGESTIONS -> SuggestionsSettingsFragment()
|
||||||
@@ -138,12 +150,12 @@ class SettingsActivity :
|
|||||||
when (intent.data?.host) {
|
when (intent.data?.host) {
|
||||||
HOST_ABOUT -> AboutSettingsFragment()
|
HOST_ABOUT -> AboutSettingsFragment()
|
||||||
HOST_SYNC_SETTINGS -> SyncSettingsFragment()
|
HOST_SYNC_SETTINGS -> SyncSettingsFragment()
|
||||||
else -> SettingsHeadersFragment()
|
else -> null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> SettingsHeadersFragment()
|
else -> null
|
||||||
}
|
} ?: if (hasMaster) AppearanceSettingsFragment() else RootSettingsFragment()
|
||||||
supportFragmentManager.commit {
|
supportFragmentManager.commit {
|
||||||
setReorderingAllowed(true)
|
setReorderingAllowed(true)
|
||||||
replace(R.id.container, fragment)
|
replace(R.id.container, fragment)
|
||||||
|
|||||||
@@ -1,49 +0,0 @@
|
|||||||
package org.koitharu.kotatsu.settings
|
|
||||||
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.view.View
|
|
||||||
import androidx.fragment.app.Fragment
|
|
||||||
import androidx.fragment.app.FragmentTransaction
|
|
||||||
import androidx.fragment.app.commit
|
|
||||||
import androidx.preference.PreferenceFragmentCompat
|
|
||||||
import androidx.preference.PreferenceHeaderFragmentCompat
|
|
||||||
import androidx.slidingpanelayout.widget.SlidingPaneLayout
|
|
||||||
import org.koitharu.kotatsu.R
|
|
||||||
|
|
||||||
class SettingsHeadersFragment : PreferenceHeaderFragmentCompat(), SlidingPaneLayout.PanelSlideListener {
|
|
||||||
|
|
||||||
private var currentTitle: CharSequence? = null
|
|
||||||
|
|
||||||
override fun onCreatePreferenceHeader(): PreferenceFragmentCompat = RootSettingsFragment()
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
|
||||||
super.onViewCreated(view, savedInstanceState)
|
|
||||||
slidingPaneLayout.addPanelSlideListener(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onPanelSlide(panel: View, slideOffset: Float) = Unit
|
|
||||||
|
|
||||||
override fun onPanelOpened(panel: View) {
|
|
||||||
activity?.title = currentTitle ?: getString(R.string.settings)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onPanelClosed(panel: View) {
|
|
||||||
activity?.setTitle(R.string.settings)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun setTitle(title: CharSequence?) {
|
|
||||||
currentTitle = title
|
|
||||||
if (slidingPaneLayout.width != 0 && slidingPaneLayout.isOpen) {
|
|
||||||
activity?.title = title
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun openFragment(fragment: Fragment) {
|
|
||||||
childFragmentManager.commit {
|
|
||||||
setReorderingAllowed(true)
|
|
||||||
replace(androidx.preference.R.id.preferences_detail, fragment)
|
|
||||||
setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
|
|
||||||
addToBackStack(null)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -26,7 +26,6 @@ import org.koitharu.kotatsu.core.util.ext.observeEvent
|
|||||||
import org.koitharu.kotatsu.databinding.FragmentSettingsSourcesBinding
|
import org.koitharu.kotatsu.databinding.FragmentSettingsSourcesBinding
|
||||||
import org.koitharu.kotatsu.main.ui.owners.AppBarOwner
|
import org.koitharu.kotatsu.main.ui.owners.AppBarOwner
|
||||||
import org.koitharu.kotatsu.settings.SettingsActivity
|
import org.koitharu.kotatsu.settings.SettingsActivity
|
||||||
import org.koitharu.kotatsu.settings.SettingsHeadersFragment
|
|
||||||
import org.koitharu.kotatsu.settings.SourceSettingsFragment
|
import org.koitharu.kotatsu.settings.SourceSettingsFragment
|
||||||
import org.koitharu.kotatsu.settings.sources.adapter.SourceConfigAdapter
|
import org.koitharu.kotatsu.settings.sources.adapter.SourceConfigAdapter
|
||||||
import org.koitharu.kotatsu.settings.sources.adapter.SourceConfigListener
|
import org.koitharu.kotatsu.settings.sources.adapter.SourceConfigListener
|
||||||
@@ -90,8 +89,7 @@ class SourcesListFragment :
|
|||||||
|
|
||||||
override fun onItemSettingsClick(item: SourceConfigItem.SourceItem) {
|
override fun onItemSettingsClick(item: SourceConfigItem.SourceItem) {
|
||||||
val fragment = SourceSettingsFragment.newInstance(item.source)
|
val fragment = SourceSettingsFragment.newInstance(item.source)
|
||||||
(parentFragment as? SettingsHeadersFragment)?.openFragment(fragment)
|
(activity as? SettingsActivity)?.openFragment(fragment, false)
|
||||||
?: (activity as? SettingsActivity)?.openFragment(fragment)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onItemEnabledChanged(item: SourceConfigItem.SourceItem, isEnabled: Boolean) {
|
override fun onItemEnabledChanged(item: SourceConfigItem.SourceItem, isEnabled: Boolean) {
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent">
|
||||||
android:orientation="vertical">
|
|
||||||
|
|
||||||
<com.google.android.material.appbar.AppBarLayout
|
<com.google.android.material.appbar.AppBarLayout
|
||||||
android:id="@+id/appbar"
|
android:id="@+id/appbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:elevation="0dp"
|
||||||
android:fitsSystemWindows="true"
|
android:fitsSystemWindows="true"
|
||||||
app:elevation="@dimen/design_appbar_elevation"
|
app:elevation="0dp"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
@@ -25,8 +25,36 @@
|
|||||||
</com.google.android.material.appbar.AppBarLayout>
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
|
||||||
<androidx.fragment.app.FragmentContainerView
|
<androidx.fragment.app.FragmentContainerView
|
||||||
android:id="@id/container"
|
android:id="@+id/container_master"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent" />
|
android:layout_height="0dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toStartOf="@id/card_details"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/appbar"
|
||||||
|
app:layout_constraintWidth_max="400dp"
|
||||||
|
app:layout_constraintWidth_min="320dp"
|
||||||
|
app:layout_constraintWidth_percent="0.35" />
|
||||||
|
|
||||||
</LinearLayout>
|
<com.google.android.material.card.MaterialCardView
|
||||||
|
android:id="@+id/card_details"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:layout_marginStart="@dimen/side_card_offset"
|
||||||
|
android:layout_marginTop="2dp"
|
||||||
|
android:layout_marginEnd="@dimen/side_card_offset"
|
||||||
|
android:layout_marginBottom="@dimen/side_card_offset"
|
||||||
|
app:cardBackgroundColor="?colorBackgroundFloating"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toEndOf="@id/container_master"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/appbar">
|
||||||
|
|
||||||
|
<androidx.fragment.app.FragmentContainerView
|
||||||
|
android:id="@+id/container"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent" />
|
||||||
|
|
||||||
|
</com.google.android.material.card.MaterialCardView>
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|||||||
@@ -13,8 +13,9 @@
|
|||||||
|
|
||||||
<com.google.android.material.appbar.CollapsingToolbarLayout
|
<com.google.android.material.appbar.CollapsingToolbarLayout
|
||||||
android:id="@+id/collapsingToolbarLayout"
|
android:id="@+id/collapsingToolbarLayout"
|
||||||
|
style="?collapsingToolbarLayoutMediumStyle"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/collapsingToolbarLayoutMediumSize"
|
android:layout_height="?collapsingToolbarLayoutMediumSize"
|
||||||
app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
|
app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
|
||||||
app:toolbarId="@id/toolbar">
|
app:toolbarId="@id/toolbar">
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user