diff --git a/Habitica/res/layout-w600dp/activity_main.xml b/Habitica/res/layout-w600dp/activity_main.xml index db8f64a91..632ab85cf 100644 --- a/Habitica/res/layout-w600dp/activity_main.xml +++ b/Habitica/res/layout-w600dp/activity_main.xml @@ -1,16 +1,12 @@ - - - - - + diff --git a/Habitica/res/layout/activity_main_content.xml b/Habitica/res/layout/activity_main_content.xml index 3203655ea..ee891de3e 100644 --- a/Habitica/res/layout/activity_main_content.xml +++ b/Habitica/res/layout/activity_main_content.xml @@ -143,4 +143,4 @@ android:layout_alignParentStart="true" android:layout_alignParentEnd="true" /> - \ No newline at end of file + diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ArmoireActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ArmoireActivity.kt index ce5e624a1..ee22e69cc 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ArmoireActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ArmoireActivity.kt @@ -197,10 +197,10 @@ class ArmoireActivity : BaseActivity() { } private fun giveUserArmoire(): Boolean { - if (hasUsedExtraAmoire) { + if (hasUsedExtraArmoire) { return false } - hasUsedExtraAmoire = true + hasUsedExtraArmoire = true binding.iconWrapper.post { binding.iconView.bitmap = null Animations.circularHide(binding.iconWrapper) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt index 9b2350e90..932c8f3aa 100755 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt @@ -13,6 +13,7 @@ import android.view.KeyEvent import android.view.MenuItem import android.view.View import android.view.ViewGroup +import android.view.ViewParent import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.viewModels import androidx.annotation.RequiresApi @@ -235,63 +236,64 @@ open class MainActivity : BaseActivity(), SnackbarActivity { userQuestStatus = it } } + val drawerLayout = findViewById(R.id.drawer_layout) + if (drawerLayout is DrawerLayout) { + drawerFragment = + supportFragmentManager.findFragmentById(R.id.navigation_drawer) as? NavigationDrawerFragment + drawerFragment?.setUp(R.id.navigation_drawer, drawerLayout, notificationsViewModel) - val drawerLayout = findViewById(R.id.drawer_layout) - drawerFragment = - supportFragmentManager.findFragmentById(R.id.navigation_drawer) as? NavigationDrawerFragment - drawerFragment?.setUp(R.id.navigation_drawer, drawerLayout, notificationsViewModel) + drawerToggle = + object : ActionBarDrawerToggle( + this, + drawerLayout, + R.string.navigation_drawer_open, + R.string.navigation_drawer_close, + ) {} + // Set the drawer toggle as the DrawerListener + drawerToggle?.let { drawerLayout.addDrawerListener(it) } + drawerLayout.addDrawerListener( + object : DrawerLayout.DrawerListener { + private var isOpeningDrawer: Boolean? = null - drawerToggle = - object : ActionBarDrawerToggle( - this, - drawerLayout, - R.string.navigation_drawer_open, - R.string.navigation_drawer_close, - ) {} - // Set the drawer toggle as the DrawerListener - drawerToggle?.let { drawerLayout.addDrawerListener(it) } - drawerLayout.addDrawerListener( - object : DrawerLayout.DrawerListener { - private var isOpeningDrawer: Boolean? = null - - override fun onDrawerSlide( - drawerView: View, - slideOffset: Float, - ) { - if (!isUsingNightModeResources()) { - if (slideOffset < 0.5f && isOpeningDrawer == null) { - window.updateStatusBarColor(getThemeColor(R.attr.colorPrimaryDark), false) - isOpeningDrawer = true - } else if (slideOffset > 0.5f && isOpeningDrawer == null) { - window.updateStatusBarColor( - getThemeColor(R.attr.headerBackgroundColor), - true, - ) - isOpeningDrawer = false + override fun onDrawerSlide( + drawerView: View, + slideOffset: Float, + ) { + if (!isUsingNightModeResources()) { + if (slideOffset < 0.5f && isOpeningDrawer == null) { + window.updateStatusBarColor(getThemeColor(R.attr.colorPrimaryDark), false) + isOpeningDrawer = true + } else if (slideOffset > 0.5f && isOpeningDrawer == null) { + window.updateStatusBarColor( + getThemeColor(R.attr.headerBackgroundColor), + true, + ) + isOpeningDrawer = false + } } } - } - override fun onDrawerOpened(drawerView: View) { - hideKeyboard() - if (!isUsingNightModeResources()) { - window.updateStatusBarColor(getThemeColor(R.attr.colorPrimaryDark), false) + override fun onDrawerOpened(drawerView: View) { + hideKeyboard() + if (!isUsingNightModeResources()) { + window.updateStatusBarColor(getThemeColor(R.attr.colorPrimaryDark), false) + } + isOpeningDrawer = null + drawerFragment?.updatePromo() } - isOpeningDrawer = null - drawerFragment?.updatePromo() - } - override fun onDrawerClosed(drawerView: View) { - if (!isUsingNightModeResources()) { - window.updateStatusBarColor(getThemeColor(R.attr.headerBackgroundColor), true) + override fun onDrawerClosed(drawerView: View) { + if (!isUsingNightModeResources()) { + window.updateStatusBarColor(getThemeColor(R.attr.headerBackgroundColor), true) + } + isOpeningDrawer = null } - isOpeningDrawer = null - } - override fun onDrawerStateChanged(newState: Int) { - } - }, - ) + override fun onDrawerStateChanged(newState: Int) { + } + }, + ) + } supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setHomeButtonEnabled(true) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/ComposeAvatarCustomizationFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/ComposeAvatarCustomizationFragment.kt index a9f669e7d..749adfe18 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/ComposeAvatarCustomizationFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/ComposeAvatarCustomizationFragment.kt @@ -19,6 +19,7 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding @@ -34,12 +35,16 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.livedata.observeAsState import androidx.compose.runtime.mutableStateListOf import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.platform.LocalConfiguration +import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.ViewCompositionStrategy import androidx.compose.ui.platform.rememberNestedScrollInteropConnection import androidx.compose.ui.res.colorResource @@ -466,9 +471,6 @@ private fun AvatarCustomizationView( activeCustomization: String?, onSelect: (Customization) -> Unit, ) { - val nestedScrollInterop = rememberNestedScrollInteropConnection() - val totalWidth = LocalConfiguration.current.screenWidthDp.dp - val horizontalPadding = (totalWidth - (84.dp * 3)) / 2 Column(horizontalAlignment = Alignment.CenterHorizontally) { Column(horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier.background(colorResource(R.color.window_background))) { ComposableAvatarView( @@ -486,12 +488,22 @@ private fun AvatarCustomizationView( .height(22.dp), ) } + val nestedScrollInterop = rememberNestedScrollInteropConnection() + val screenWidth = LocalConfiguration.current.screenWidthDp.dp + var gridWidth by remember { mutableStateOf(screenWidth) } + val horizontalPadding = (gridWidth - (84.dp * 3)) / 2 + val density = LocalDensity.current LazyVerticalGrid( columns = GridCells.Adaptive(76.dp), horizontalArrangement = Arrangement.Center, contentPadding = PaddingValues(horizontal = horizontalPadding), modifier = Modifier + .onGloballyPositioned { + gridWidth = with(density) { + it.size.width.toDp() + } + } .nestedScroll(nestedScrollInterop) .background(colorResource(R.color.content_background)), ) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/ComposeAvatarEquipmentFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/ComposeAvatarEquipmentFragment.kt index e361a18bb..e331ca2ec 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/ComposeAvatarEquipmentFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/ComposeAvatarEquipmentFragment.kt @@ -28,12 +28,16 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.livedata.observeAsState import androidx.compose.runtime.mutableStateListOf import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.platform.LocalConfiguration +import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.ViewCompositionStrategy import androidx.compose.ui.platform.rememberNestedScrollInteropConnection import androidx.compose.ui.res.colorResource @@ -218,9 +222,6 @@ private fun AvatarEquipmentView( activeCustomization: String?, onSelect: (Equipment) -> Unit, ) { - val nestedScrollInterop = rememberNestedScrollInteropConnection() - val totalWidth = LocalConfiguration.current.screenWidthDp.dp - val horizontalPadding = (totalWidth - (84.dp * 3)) / 2 Column(horizontalAlignment = Alignment.CenterHorizontally) { Column(horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier.background(colorResource(R.color.window_background))) { ComposableAvatarView( @@ -238,12 +239,22 @@ private fun AvatarEquipmentView( .height(22.dp), ) } + val nestedScrollInterop = rememberNestedScrollInteropConnection() + val screenWidth = LocalConfiguration.current.screenWidthDp.dp + var gridWidth by remember { mutableStateOf(screenWidth) } + val horizontalPadding = (gridWidth - (84.dp * 3)) / 2 + val density = LocalDensity.current LazyVerticalGrid( columns = GridCells.Adaptive(76.dp), horizontalArrangement = Arrangement.Center, contentPadding = PaddingValues(horizontal = horizontalPadding), modifier = Modifier + .onGloballyPositioned { + gridWidth = with(density) { + it.size.width.toDp() + } + } .nestedScroll(nestedScrollInterop) .background(colorResource(R.color.content_background)), ) {