Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b521b0e6 authored by Alejandro Nijamkin's avatar Alejandro Nijamkin Committed by Ale Nijamkin
Browse files

Fixes crash when returning to lock screen tab (1/2).

Moves to the proven Factory inner class method.

Fix: 265708431
Test: manually verified that the crash no longer occurs.
Change-Id: I3b5b0ab321fc42b150b1d729e475c63c37a43cfd
parent 2e5508ce
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -4,7 +4,6 @@ import android.os.Bundle;

import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.AbstractSavedStateViewModelFactory;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.ViewModelProvider;

@@ -43,13 +42,13 @@ public final class DefaultCustomizationSections implements CustomizationSections
    private final KeyguardQuickAffordancePickerInteractor mKeyguardQuickAffordancePickerInteractor;
    private final KeyguardQuickAffordancePickerViewModel.Factory
            mKeyguardQuickAffordancePickerViewModelFactory;
    private final AbstractSavedStateViewModelFactory mNotificationSectionViewModelFactory;
    private final NotificationSectionViewModel.Factory mNotificationSectionViewModelFactory;

    public DefaultCustomizationSections(
            KeyguardQuickAffordancePickerInteractor keyguardQuickAffordancePickerInteractor,
            KeyguardQuickAffordancePickerViewModel.Factory
                    keyguardQuickAffordancePickerViewModelFactory,
            AbstractSavedStateViewModelFactory notificationSectionViewModelFactory) {
            NotificationSectionViewModel.Factory notificationSectionViewModelFactory) {
        mKeyguardQuickAffordancePickerInteractor = keyguardQuickAffordancePickerInteractor;
        mKeyguardQuickAffordancePickerViewModelFactory =
                keyguardQuickAffordancePickerViewModelFactory;
+12 −3
Original line number Diff line number Diff line
@@ -81,15 +81,14 @@ open class ThemePickerInjector : WallpaperPicker2Injector(), CustomizationInject
    private var clockRegistry: ClockRegistry? = null
    private var pluginManager: PluginManager? = null
    private var notificationsInteractor: NotificationsInteractor? = null
    private var notificationSectionViewModelFactory: NotificationSectionViewModel.Factory? = null

    override fun getCustomizationSections(activity: ComponentActivity): CustomizationSections {
        return customizationSections
            ?: DefaultCustomizationSections(
                    getKeyguardQuickAffordancePickerInteractor(activity),
                    getKeyguardQuickAffordancePickerViewModelFactory(activity),
                    NotificationSectionViewModel.newFactory(
                        owner = activity,
                        defaultArgs = null,
                    NotificationSectionViewModel.Factory(
                        interactor = getNotificationsInteractor(activity),
                    ),
                )
@@ -191,6 +190,16 @@ open class ThemePickerInjector : WallpaperPicker2Injector(), CustomizationInject
                .also { keyguardQuickAffordancePickerViewModelFactory = it }
    }

    fun getNotificationSectionViewModelFactory(
        context: Context,
    ): NotificationSectionViewModel.Factory {
        return notificationSectionViewModelFactory
            ?: NotificationSectionViewModel.Factory(
                    interactor = getNotificationsInteractor(context),
                )
                .also { notificationSectionViewModelFactory = it }
    }

    private fun getKeyguardQuickAffordancePickerInteractorImpl(
        context: Context
    ): KeyguardQuickAffordancePickerInteractor {
+11 −24
Original line number Diff line number Diff line
@@ -17,14 +17,11 @@

package com.android.customization.picker.notifications.ui.viewmodel

import android.os.Bundle
import androidx.annotation.StringRes
import androidx.annotation.VisibleForTesting
import androidx.lifecycle.AbstractSavedStateViewModelFactory
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope
import androidx.savedstate.SavedStateRegistryOwner
import com.android.customization.picker.notifications.domain.interactor.NotificationsInteractor
import com.android.wallpaper.R
import kotlinx.coroutines.flow.Flow
@@ -57,20 +54,11 @@ constructor(
        viewModelScope.launch { interactor.toggleShowNotificationsOnLockScreenEnabled() }
    }

    companion object {
        @JvmStatic
        fun newFactory(
            owner: SavedStateRegistryOwner,
            defaultArgs: Bundle? = null,
            interactor: NotificationsInteractor,
        ): AbstractSavedStateViewModelFactory =
            object : AbstractSavedStateViewModelFactory(owner, defaultArgs) {
    class Factory(
        private val interactor: NotificationsInteractor,
    ) : ViewModelProvider.Factory {
        @Suppress("UNCHECKED_CAST")
                override fun <T : ViewModel> create(
                    key: String,
                    modelClass: Class<T>,
                    handle: SavedStateHandle,
                ): T {
        override fun <T : ViewModel> create(modelClass: Class<T>): T {
            return NotificationSectionViewModel(
                interactor = interactor,
            )
@@ -78,4 +66,3 @@ constructor(
        }
    }
}
}