From 7536ae76ad22a41aed195c9b800f8ebbe2fa0cd7 Mon Sep 17 00:00:00 2001 From: MM20 <15646950+MM2-0@users.noreply.github.com> Date: Sun, 11 Jan 2026 14:38:16 +0100 Subject: [PATCH] Don't reset the launcher if the feed was open on pause --- .../mm20/launcher2/ui/launcher/SharedLauncherActivity.kt | 4 +--- .../mm20/launcher2/ui/launcher/scaffold/FeedComponent.kt | 7 +++---- .../launcher2/ui/launcher/scaffold/LauncherScaffold.kt | 4 +++- .../launcher2/ui/launcher/scaffold/ScaffoldComponent.kt | 6 ++++++ 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/SharedLauncherActivity.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/SharedLauncherActivity.kt index afde17d07..1f1b4cad6 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/SharedLauncherActivity.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/SharedLauncherActivity.kt @@ -6,7 +6,6 @@ import android.content.pm.ActivityInfo import android.content.res.Configuration import android.content.res.Resources import android.os.Bundle -import android.view.WindowManager import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge import androidx.activity.viewModels @@ -273,7 +272,6 @@ abstract class SharedLauncherActivity( openKeyboard = searchBarAutofocus, ) val widgetComponent by lazy { WidgetsComponent } - val feedComponent by lazy { FeedComponent(this@SharedLauncherActivity) } fun getScaffoldGesture( action: GestureAction?, @@ -327,7 +325,7 @@ abstract class SharedLauncherActivity( ) is GestureAction.Feed -> ScaffoldGesture( - component = FeedComponent(this@SharedLauncherActivity), + component = FeedComponent, animation = if (gesture.orientation == null) ScaffoldAnimation.ZoomIn else ScaffoldAnimation.Push, ) diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/scaffold/FeedComponent.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/scaffold/FeedComponent.kt index 90b3ea1bf..53897f1b5 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/scaffold/FeedComponent.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/scaffold/FeedComponent.kt @@ -1,7 +1,6 @@ package de.mm20.launcher2.ui.launcher.scaffold import android.annotation.SuppressLint -import android.content.Context import androidx.activity.compose.LocalActivity import androidx.appcompat.app.AppCompatActivity import androidx.compose.foundation.layout.Arrangement @@ -37,15 +36,15 @@ import kotlinx.coroutines.flow.flowOf import org.koin.core.component.KoinComponent import org.koin.core.component.inject -internal class FeedComponent( - private val context: Context, -) : ScaffoldComponent(), KoinComponent { +internal object FeedComponent : ScaffoldComponent(), KoinComponent { private val feedSettings: FeedSettings by inject() private val feedService: FeedService by inject() override val permanent: Boolean = true + override val survivesPause: Boolean = true + private var state = mutableIntStateOf(0) @Composable diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/scaffold/LauncherScaffold.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/scaffold/LauncherScaffold.kt index 161b2fb3e..4163065a6 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/scaffold/LauncherScaffold.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/scaffold/LauncherScaffold.kt @@ -1243,7 +1243,9 @@ internal fun LauncherScaffold( } } else if (activity.pauseTime > 0L && System.currentTimeMillis() - activity.pauseTime > 5000L) { if (!state.isLocked) { - state.reset() + if (state.currentComponent?.survivesPause != true) { + state.reset() + } searchVM.reset() } } diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/scaffold/ScaffoldComponent.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/scaffold/ScaffoldComponent.kt index d69ee39e1..fc113de25 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/scaffold/ScaffoldComponent.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/scaffold/ScaffoldComponent.kt @@ -46,6 +46,12 @@ internal abstract class ScaffoldComponent { */ open val hasIme: Boolean = false + /** + * If true, the component stays open when the launcher is resumed. If false, the launcher resets + * to its default position. + */ + open val survivesPause = false + /** * Whether the component is scrolled all the way up * null, if the component does not provide content