Settings: Dynamically update Top App Bar title to match open Fragment

This commit is contained in:
Patryk Michalik
2021-03-01 20:59:57 +01:00
parent bd451993c7
commit 48003fa119
6 changed files with 29 additions and 6 deletions
@@ -14,6 +14,7 @@
android:layout_height="wrap_content">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/top_app_bar"
android:layout_width="match_parent"
android:layout_height="56dp"
app:title="Settings" />
@@ -5,7 +5,11 @@ import androidx.preference.PreferenceFragmentCompat
import com.android.launcher3.LauncherFiles
import com.google.android.material.transition.MaterialSharedAxis
open class BasePreferenceFragment(var preferenceResource: Int, var isTopLevelFragment: Boolean = false) : PreferenceFragmentCompat() {
interface TitledFragment {
val title: String
}
abstract class BasePreferenceFragment(var preferenceResource: Int, var isTopLevelFragment: Boolean = false) : PreferenceFragmentCompat(), TitledFragment {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(preferenceResource, rootKey)
@@ -2,4 +2,7 @@ package ch.deletescape.lawnchair.settings
import com.android.launcher3.R
class GeneralSettingsFragment : BasePreferenceFragment(R.xml.general_settings)
class GeneralSettingsFragment : BasePreferenceFragment(R.xml.general_settings) {
override val title: String
get() = "General"
}
@@ -2,4 +2,7 @@ package ch.deletescape.lawnchair.settings
import com.android.launcher3.R
class HomeScreenSettingsFragment : BasePreferenceFragment(R.xml.home_screen_settings)
class HomeScreenSettingsFragment : BasePreferenceFragment(R.xml.home_screen_settings) {
override val title: String
get() = "Home Screen"
}
@@ -1,20 +1,29 @@
package ch.deletescape.lawnchair.settings
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import com.android.launcher3.R
import com.google.android.material.appbar.MaterialToolbar
// TODO: Migrate missing code from ch.deletescape.settings.ui.SettingsActivity.
class SettingsActivity : AppCompatActivity(), PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
private lateinit var topAppBar: MaterialToolbar
private val fragmentListener = object: FragmentManager.FragmentLifecycleCallbacks() {
override fun onFragmentViewCreated(fm: FragmentManager, fragment: Fragment, v: View, savedInstanceState: Bundle?) {
topAppBar.title = (fragment as? TitledFragment)?.title
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.settings_activity)
topAppBar = findViewById(R.id.top_app_bar)
supportFragmentManager.registerFragmentLifecycleCallbacks(fragmentListener, false)
supportFragmentManager
.beginTransaction()
.replace(R.id.content, SettingsFragment())
@@ -4,4 +4,7 @@ import com.android.launcher3.R
// TODO: Migrate missing code from ch.deletescape.settings.ui.SettingsActivity.
class SettingsFragment : BasePreferenceFragment(R.xml.settings, true)
class SettingsFragment : BasePreferenceFragment(R.xml.settings, true) {
override val title: String
get() = "Settings"
}