Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,13 @@ abstract class BasePreferenceFragment(
return insets.consumeAllSystemBarsInsets()
}

override fun onStart() {
super.onStart()
setTitle(if (titleId != 0) getString(titleId) else null)
}

override fun onResume() {
super.onResume()
setTitle(if (titleId != 0) getString(titleId) else null)
arguments?.getString(SettingsActivity.ARG_PREF_KEY)?.let {
focusPreference(it)
arguments?.remove(SettingsActivity.ARG_PREF_KEY)
Expand Down
45 changes: 41 additions & 4 deletions app/src/main/kotlin/org/draken/usagi/settings/SettingsActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import android.content.Intent
import android.os.Bundle
import android.view.View
import android.view.ViewGroup
import android.view.animation.DecelerateInterpolator
import androidx.activity.viewModels
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.isVisible
Expand All @@ -15,7 +16,9 @@ import androidx.fragment.app.FragmentTransaction
import androidx.fragment.app.commit
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import androidx.transition.Fade
import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.motion.MotionUtils
import dagger.hilt.android.AndroidEntryPoint
import org.draken.usagi.R
import org.draken.usagi.backups.ui.periodical.PeriodicalBackupSettingsFragment
Expand All @@ -40,6 +43,7 @@ import org.draken.usagi.settings.sources.SourcesSettingsFragment
import org.draken.usagi.settings.sources.manage.SourcesManageFragment
import org.draken.usagi.settings.tracker.TrackerSettingsFragment
import org.draken.usagi.settings.userdata.BackupsSettingsFragment
import com.google.android.material.R as materialR

@AndroidEntryPoint
class SettingsActivity :
Expand All @@ -57,8 +61,22 @@ class SettingsActivity :
androidx.fragment.app.FragmentManager.OnBackStackChangedListener {
invalidateOptionsMenu()
}
private val transitionsCallback =
object : androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks() {
override fun onFragmentPreCreated(
fm: androidx.fragment.app.FragmentManager,
f: Fragment,
savedInstanceState: Bundle?,
) {
// Transitions aren't saved with the fragment.
if (savedInstanceState != null && f.id == R.id.container) {
f.setPageTransitions()
}
}
}

override fun onCreate(savedInstanceState: Bundle?) {
supportFragmentManager.registerFragmentLifecycleCallbacks(transitionsCallback, false)
super.onCreate(savedInstanceState)
setContentView(ActivitySettingsBinding.inflate(layoutInflater))
setDisplayHomeAsUp(isEnabled = true, showUpAsClose = false)
Expand All @@ -79,6 +97,7 @@ class SettingsActivity :
}

override fun onDestroy() {
supportFragmentManager.unregisterFragmentLifecycleCallbacks(transitionsCallback)
supportFragmentManager.removeOnBackStackChangedListener(backStackListener)
super.onDestroy()
}
Expand Down Expand Up @@ -126,17 +145,35 @@ class SettingsActivity :
isFromRoot: Boolean,
) {
viewModel.discardSearch()
val hasFragment = supportFragmentManager.findFragmentById(R.id.container) != null
val currentFragment = supportFragmentManager.findFragmentById(R.id.container)
val fragment = supportFragmentManager.fragmentFactory.instantiate(classLoader, fragmentClass.name)
fragment.arguments = args
fragment.setPageTransitions()
currentFragment?.setPageTransitions()
supportFragmentManager.commit {
setReorderingAllowed(true)
replace(R.id.container, fragmentClass, args)
setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
if (!isMasterDetails || (hasFragment && !isFromRoot)) {
replace(R.id.container, fragment)
if (!isMasterDetails || (currentFragment != null && !isFromRoot)) {
addToBackStack(null)
}
}
}

// Not setTransition(): its Animators flash the old page when a predictive back gesture is committed.
private fun Fragment.setPageTransitions() {
val context = this@SettingsActivity
val duration = MotionUtils.resolveThemeDuration(context, materialR.attr.motionDurationShort2, 100).toLong()
// Mostly done before the finger is lifted: androidx.transition ends the gesture with a slow spring.
val easing =
MotionUtils.resolveThemeInterpolator(
context,
materialR.attr.motionEasingEmphasizedDecelerateInterpolator,
DecelerateInterpolator(),
)
enterTransition = Fade().setDuration(duration).setInterpolator(easing)
exitTransition = Fade().setDuration(duration).setInterpolator(easing)
}

private fun toggleSearchMode(isEnabled: Boolean) {
viewBinding.containerSearch.isVisible = isEnabled
val searchFragment = supportFragmentManager.findFragmentById(R.id.container_search)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@ class ChangelogFragment : BaseFragment<FragmentChangelogBinding>() {
}
}

override fun onResume() {
super.onResume()
override fun onStart() {
super.onStart()
(activity as? SettingsActivity)?.setSectionTitle(getString(R.string.changelog))
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,8 @@ class NavConfigFragment :
return insets.consumeAllSystemBarsInsets()
}

override fun onResume() {
super.onResume()
override fun onStart() {
super.onStart()
(activity as? SettingsActivity)?.setSectionTitle(getString(R.string.main_screen_sections))
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,15 @@ class SourceSettingsFragment :
@Inject
lateinit var extRuntime: ExtRuntime

override fun onResume() {
super.onResume()
override fun onStart() {
super.onStart()
context?.let { ctx ->
setTitle(viewModel.source.resolve().getTitle(ctx))
}
}

override fun onResume() {
super.onResume()
viewModel.onResume()
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,8 +109,8 @@ class SourcesManageFragment :
return insets.consumeAllSystemBarsInsets()
}

override fun onResume() {
super.onResume()
override fun onStart() {
super.onStart()
(activity as? SettingsActivity)?.setSectionTitle(getString(R.string.manage_sources))
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -146,9 +146,13 @@ class PluginsManageFragment :
.build()
}

override fun onStart() {
super.onStart()
(activity as? SettingsActivity)?.setSectionTitle(getString(R.string.manage_plugins))
}

override fun onResume() {
super.onResume()
(activity as? SettingsActivity)?.setSectionTitle(getString(R.string.manage_plugins))
viewModel.runAutoUpdate()
viewModel.refresh()
}
Expand Down
Loading