ui: fix binding issues

Use viewLifecycleOwner for all fragments that rely on databinding. This
should solve some possible memory leaks, as viewLifecycleOwner is tied
to the lifecycle of the fragment views instead of the fragments them
selves.
This commit is contained in:
OxygenCobalt 2021-08-01 17:59:12 -06:00
parent 66be3da7e3
commit d50d2f0b1e
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
12 changed files with 20 additions and 14 deletions

View file

@ -57,7 +57,7 @@
android:roundIcon="@mipmap/ic_launcher_round" />
<receiver
android:name=".widget.MinimalWidgetProvider"
android:name=".widgets.MinimalWidgetProvider"
android:exported="false"
android:enabled="@bool/widgets_supported">

View file

@ -57,7 +57,7 @@ class MainFragment : Fragment() {
// --- UI SETUP ---
binding.lifecycleOwner = this
binding.lifecycleOwner = viewLifecycleOwner
// Speed up the slide-in effect on the controls view, solely to improve the UX
// and maybe hide the problem where the main view will snap-shrink before the compact

View file

@ -53,7 +53,7 @@ class AlbumDetailFragment : DetailFragment() {
// --- UI SETUP ---
binding.lifecycleOwner = this
binding.lifecycleOwner = viewLifecycleOwner
setupToolbar(R.menu.menu_album_detail) { itemId ->
if (itemId == R.id.action_queue_add) {

View file

@ -65,7 +65,7 @@ class ArtistDetailFragment : DetailFragment() {
// --- UI SETUP ---
binding.lifecycleOwner = this
binding.lifecycleOwner = viewLifecycleOwner
setupToolbar()
setupRecycler(detailAdapter) { pos ->

View file

@ -53,7 +53,7 @@ class GenreDetailFragment : DetailFragment() {
// --- UI SETUP ---
binding.lifecycleOwner = this
binding.lifecycleOwner = viewLifecycleOwner
setupToolbar()
setupRecycler(detailAdapter) { pos ->

View file

@ -43,6 +43,8 @@ class LibraryFragment : Fragment() {
// --- UI SETUP ---
binding.lifecycleOwner = viewLifecycleOwner
binding.libraryToolbar.apply {
menu.findItem(libraryModel.sortMode.toMenuId()).isChecked = true

View file

@ -37,6 +37,7 @@ class LoadingFragment : Fragment() {
// --- UI SETUP ---
binding.lifecycleOwner = viewLifecycleOwner
binding.loadingModel = loadingModel
// --- VIEWMODEL SETUP ---

View file

@ -44,6 +44,8 @@ class QueueFragment : Fragment() {
// --- UI SETUP ---
binding.lifecycleOwner = viewLifecycleOwner
binding.queueToolbar.setNavigationOnClickListener {
findNavController().navigateUp()
}

View file

@ -42,8 +42,8 @@ import org.oxycblt.auxio.playback.state.LoopMode
import org.oxycblt.auxio.playback.state.PlaybackStateManager
import org.oxycblt.auxio.settings.SettingsManager
import org.oxycblt.auxio.ui.getSystemServiceSafe
import org.oxycblt.auxio.widget.BaseWidget
import org.oxycblt.auxio.widget.MinimalWidgetProvider
import org.oxycblt.auxio.widgets.BaseWidget
import org.oxycblt.auxio.widgets.MinimalWidgetProvider
/**
* A service that manages the system-side aspects of playback, such as:

View file

@ -51,6 +51,8 @@ class SearchFragment : Fragment() {
// --- UI SETUP --
binding.lifecycleOwner = viewLifecycleOwner
binding.searchToolbar.apply {
menu.findItem(searchModel.filterMode.toId()).isChecked = true

View file

@ -1,4 +1,4 @@
package org.oxycblt.auxio.widget
package org.oxycblt.auxio.widgets
import android.app.PendingIntent
import android.appwidget.AppWidgetManager
@ -11,7 +11,6 @@ import android.widget.RemoteViews
import androidx.annotation.LayoutRes
import org.oxycblt.auxio.BuildConfig
import org.oxycblt.auxio.MainActivity
import org.oxycblt.auxio.R
import org.oxycblt.auxio.logD
import org.oxycblt.auxio.playback.state.PlaybackStateManager
@ -96,7 +95,7 @@ abstract class BaseWidget : AppWidgetProvider() {
val ids = getAppWidgetIds(ComponentName(context, this::class.java))
if (ids.isNotEmpty()) {
// Existing widgets found, update thoughs
// Existing widgets found, update those
ids.forEach { id ->
updateAppWidget(id, views)
}

View file

@ -1,4 +1,4 @@
package org.oxycblt.auxio.widget
package org.oxycblt.auxio.widgets
import android.content.Context
import android.os.Build
@ -9,9 +9,6 @@ import org.oxycblt.auxio.coil.loadBitmap
import org.oxycblt.auxio.logD
import org.oxycblt.auxio.playback.state.PlaybackStateManager
// Workaround to make studio shut up about perfectly valid layouts somehow
// being invalid for remote views.
/**
* The minimal widget. This widget only shows the album, song name, and artist without any
* controls. Because you know. Minimalism.
@ -67,6 +64,9 @@ class MinimalWidgetProvider : BaseWidget() {
companion object {
const val TYPE = 0xA0D0
// Workaround to make studio shut up about perfectly valid layouts somehow
// being invalid for remote views.
const val LAYOUT = R.layout.widget_minimal
fun new(): MinimalWidgetProvider? {