From 466b7c2384819311cefc176c42a1945be07e5d54 Mon Sep 17 00:00:00 2001 From: MM20 <15646950+MM2-0@users.noreply.github.com> Date: Thu, 12 May 2022 19:59:45 +0200 Subject: [PATCH] Fix PullDownScaffold IME behavior --- .../launcher2/ui/launcher/LauncherActivity.kt | 82 +++++++++++-------- .../launcher2/ui/launcher/PagerScaffold.kt | 9 +- .../launcher2/ui/launcher/PullDownScaffold.kt | 1 + 3 files changed, 53 insertions(+), 39 deletions(-) diff --git a/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherActivity.kt b/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherActivity.kt index 3f8a5823..74190e35 100644 --- a/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherActivity.kt +++ b/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherActivity.kt @@ -10,6 +10,7 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.imePadding import androidx.compose.foundation.layout.systemBarsPadding +import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.livedata.observeAsState @@ -23,6 +24,7 @@ import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.bottomsheets.BottomSheet import com.afollestad.materialdialogs.callbacks.onDismiss import com.afollestad.materialdialogs.customview.customView +import com.android.launcher3.GestureNavContract import com.google.accompanist.systemuicontroller.rememberSystemUiController import de.mm20.launcher2.icons.DynamicIconController import de.mm20.launcher2.ui.R @@ -31,6 +33,8 @@ import de.mm20.launcher2.ui.base.ProvideSettings import de.mm20.launcher2.ui.component.NavBarEffects import de.mm20.launcher2.ui.launcher.modals.EditFavoritesView import de.mm20.launcher2.ui.launcher.modals.HiddenItemsSheet +import de.mm20.launcher2.ui.launcher.transitions.HomeTransitionManager +import de.mm20.launcher2.ui.launcher.transitions.LocalHomeTransitionManager import de.mm20.launcher2.ui.theme.LauncherTheme import org.koin.android.ext.android.inject @@ -39,6 +43,8 @@ class LauncherActivity : BaseActivity() { private val viewModel: LauncherActivityVM by viewModels() + private val homeTransitionManager = HomeTransitionManager() + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -47,44 +53,47 @@ class LauncherActivity : BaseActivity() { viewModel.setDarkMode(resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES) setContent { - LauncherTheme { - ProvideSettings { - val lightStatus by viewModel.lightStatusBar.observeAsState(false) - val lightNav by viewModel.lightNavBar.observeAsState(false) - val hideStatus by viewModel.hideStatusBar.observeAsState(false) - val hideNav by viewModel.hideNavBar.observeAsState(false) - val dimBackground by viewModel.dimBackground.observeAsState(false) + CompositionLocalProvider( + LocalHomeTransitionManager provides homeTransitionManager + ) { + LauncherTheme { + ProvideSettings { + val lightStatus by viewModel.lightStatusBar.observeAsState(false) + val lightNav by viewModel.lightNavBar.observeAsState(false) + val hideStatus by viewModel.hideStatusBar.observeAsState(false) + val hideNav by viewModel.hideNavBar.observeAsState(false) + val dimBackground by viewModel.dimBackground.observeAsState(false) - val systemUiController = rememberSystemUiController() + val systemUiController = rememberSystemUiController() - LaunchedEffect(hideStatus) { - systemUiController.isStatusBarVisible = !hideStatus - } - LaunchedEffect(hideNav) { - systemUiController.isNavigationBarVisible = !hideNav - } + LaunchedEffect(hideStatus) { + systemUiController.isStatusBarVisible = !hideStatus + } + LaunchedEffect(hideNav) { + systemUiController.isNavigationBarVisible = !hideNav + } - Box( - modifier = Modifier - .fillMaxSize() - .background(if (dimBackground) Color.Black.copy(alpha = 0.30f) else Color.Transparent), - contentAlignment = Alignment.BottomCenter - ) { - NavBarEffects(modifier = Modifier.fillMaxSize()) - PagerScaffold( + Box( modifier = Modifier .fillMaxSize() - .systemBarsPadding() - .imePadding(), - darkStatusBarIcons = lightStatus, - darkNavBarIcons = lightNav, - ) - } - val showHiddenItems by viewModel.isHiddenItemsShown.observeAsState(false) - if (showHiddenItems) { - HiddenItemsSheet(onDismiss = { - viewModel.hideHiddenItems() - }) + .background(if (dimBackground) Color.Black.copy(alpha = 0.30f) else Color.Transparent), + contentAlignment = Alignment.BottomCenter + ) { + NavBarEffects(modifier = Modifier.fillMaxSize()) + PagerScaffold( + modifier = Modifier + .fillMaxSize() + .systemBarsPadding(), + darkStatusBarIcons = lightStatus, + darkNavBarIcons = lightNav, + ) + } + val showHiddenItems by viewModel.isHiddenItemsShown.observeAsState(false) + if (showHiddenItems) { + HiddenItemsSheet(onDismiss = { + viewModel.hideHiddenItems() + }) + } } } } @@ -135,6 +144,11 @@ class LauncherActivity : BaseActivity() { override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) - onBackPressed() + val navContract = intent?.let { GestureNavContract.fromIntent(it) } + if (navContract != null) { + homeTransitionManager.resolve(navContract) + } else { + onBackPressed() + } } } \ No newline at end of file diff --git a/ui/src/main/java/de/mm20/launcher2/ui/launcher/PagerScaffold.kt b/ui/src/main/java/de/mm20/launcher2/ui/launcher/PagerScaffold.kt index e07d8586..09644d7e 100644 --- a/ui/src/main/java/de/mm20/launcher2/ui/launcher/PagerScaffold.kt +++ b/ui/src/main/java/de/mm20/launcher2/ui/launcher/PagerScaffold.kt @@ -7,10 +7,7 @@ import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.core.animateDpAsState import androidx.compose.animation.slideIn import androidx.compose.animation.slideOut -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.offset -import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons @@ -157,7 +154,8 @@ fun PagerScaffold( size = it } .verticalScroll(searchScrollState, reverseScrolling = true) - .padding(start = 8.dp, end = 8.dp, top = 8.dp, bottom = 56.dp) + .imePadding() + .padding(start = 8.dp, end = 8.dp, top = 8.dp, bottom = 64.dp) .padding(bottom = webSearchPadding), reverse = true, ) @@ -223,6 +221,7 @@ fun PagerScaffold( modifier = Modifier .align(Alignment.BottomCenter) .padding(start = 8.dp, end = 8.dp, bottom = 8.dp) + .imePadding() .offset(y = widgetEditModeOffset), level = searchBarLevel, focused = focusSearchBar, onFocusChange = { if (it) viewModel.openSearch() diff --git a/ui/src/main/java/de/mm20/launcher2/ui/launcher/PullDownScaffold.kt b/ui/src/main/java/de/mm20/launcher2/ui/launcher/PullDownScaffold.kt index abdefa36..50dbde26 100644 --- a/ui/src/main/java/de/mm20/launcher2/ui/launcher/PullDownScaffold.kt +++ b/ui/src/main/java/de/mm20/launcher2/ui/launcher/PullDownScaffold.kt @@ -235,6 +235,7 @@ fun PullDownScaffold( .padding(8.dp) .padding(top = 56.dp) .padding(top = webSearchPadding) + .imePadding() ) }