feat: sync app height with animated keyboard height

Signed-off-by: Infi <wingit@geist.ga>
This commit is contained in:
Infi 2023-06-06 02:42:56 +02:00
parent 8d143dffd1
commit a7d586c4f9
23 changed files with 101 additions and 105 deletions

View File

@ -34,6 +34,7 @@
<activity
android:name=".activities.MainActivity"
android:exported="true"
android:windowSoftInputMode="adjustResize"
android:theme="@style/Theme.Revolt">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

View File

@ -1,7 +1,6 @@
package chat.revolt.activities
import android.os.Bundle
import android.util.Log
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.background
@ -44,6 +43,7 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.core.view.WindowCompat
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.compose.viewModel
@ -69,7 +69,7 @@ class InviteActivity : ComponentActivity() {
val inviteCode = intent.data?.lastPathSegment
Log.d("InviteActivity", "Invite code: $inviteCode")
WindowCompat.setDecorFitsSystemWindows(window, false)
setContent {
InviteScreen(

View File

@ -14,6 +14,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.IntOffset
import androidx.core.view.WindowCompat
import androidx.fragment.app.FragmentActivity
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
@ -24,7 +25,6 @@ import chat.revolt.api.settings.GlobalState
import chat.revolt.screens.SplashScreen
import chat.revolt.screens.about.AboutScreen
import chat.revolt.screens.about.AttributionScreen
import chat.revolt.screens.about.PlaceholderScreen
import chat.revolt.screens.chat.ChatRouterScreen
import chat.revolt.screens.chat.dialogs.FeedbackDialog
import chat.revolt.screens.login.LoginGreetingScreen
@ -51,6 +51,8 @@ class MainActivity : FragmentActivity() {
options.release = BuildConfig.VERSION_NAME
}
WindowCompat.setDecorFitsSystemWindows(window, false)
setContent {
AppEntrypoint()
}
@ -130,7 +132,6 @@ fun AppEntrypoint() {
composable("about") { AboutScreen(navController) }
composable("about/oss") { AttributionScreen(navController) }
composable("about/placeholder") { PlaceholderScreen(navController) }
}
}
}

View File

@ -39,6 +39,7 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.viewinterop.AndroidView
import androidx.core.view.WindowCompat
import chat.revolt.R
import chat.revolt.api.REVOLT_FILES
import chat.revolt.api.RevoltHttp
@ -69,6 +70,8 @@ class ImageViewActivity : ComponentActivity() {
return
}
WindowCompat.setDecorFitsSystemWindows(window, false)
setContent {
ImageViewScreen(resource = autumnResource, onClose = { finish() })
}

View File

@ -40,6 +40,7 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.viewinterop.AndroidView
import androidx.core.view.WindowCompat
import androidx.media3.common.MediaItem
import androidx.media3.exoplayer.ExoPlayer
import androidx.media3.ui.PlayerView
@ -72,6 +73,8 @@ class VideoViewActivity : ComponentActivity() {
return
}
WindowCompat.setDecorFitsSystemWindows(window, false)
setContent {
VideoViewScreen(resource = autumnResource, onClose = { finish() })
}

View File

@ -2,8 +2,18 @@ package chat.revolt.screens.about
import android.os.Build
import android.widget.Toast
import androidx.compose.foundation.layout.*
import androidx.compose.material3.*
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.safeDrawingPadding
import androidx.compose.material3.ElevatedButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.runtime.State
import androidx.compose.runtime.mutableStateOf
@ -129,8 +139,8 @@ fun AboutScreen(
Column(
modifier = Modifier
.fillMaxWidth()
.fillMaxHeight(),
.fillMaxSize()
.safeDrawingPadding(),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
@ -170,12 +180,12 @@ fun AboutScreen(
Column(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 20.dp, vertical = 30.dp)
.padding(horizontal = 20.dp, vertical = 30.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
ElevatedButton(
onClick = { navController.navigate("about/oss") },
modifier = Modifier
.fillMaxWidth()
.testTag("view_oss_attribution")
) {
Text(text = stringResource(id = R.string.oss_attribution))

View File

@ -2,6 +2,7 @@ package chat.revolt.screens.about
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.safeDrawingPadding
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
@ -14,7 +15,10 @@ import com.mikepenz.aboutlibraries.ui.compose.LibraryDefaults
@Composable
fun AttributionScreen(navController: NavController) {
Column() {
Column(
modifier = Modifier
.safeDrawingPadding()
) {
PageHeader(
text = stringResource(R.string.oss_attribution),
showBackButton = true,

View File

@ -1,80 +0,0 @@
package chat.revolt.screens.about
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.navigation.NavController
import chat.revolt.R
@Composable
fun PlaceholderScreen(
navController: NavController
) {
Column(
modifier = Modifier
.fillMaxWidth()
.fillMaxHeight(),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
Column(
modifier = Modifier
.fillMaxWidth()
.fillMaxHeight()
.weight(1f),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(
text = stringResource(R.string.comingsoon_heading),
style = MaterialTheme.typography.displaySmall.copy(
fontSize = 30.sp,
fontWeight = FontWeight.Black,
textAlign = TextAlign.Center
),
modifier = Modifier
.padding(horizontal = 20.dp, vertical = 10.dp)
.fillMaxWidth(),
)
Text(
text = stringResource(R.string.comingsoon_body),
color = MaterialTheme.colorScheme.onBackground.copy(
alpha = 0.5f
),
textAlign = TextAlign.Center,
modifier = Modifier
.padding(horizontal = 20.dp, vertical = 10.dp)
.fillMaxWidth()
)
}
Column(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 20.dp, vertical = 30.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
Button(
onClick = { navController.popBackStack() },
modifier = Modifier.fillMaxWidth()
) {
Text(text = stringResource(R.string.back))
}
}
}
}

View File

@ -1,6 +1,7 @@
package chat.revolt.screens.chat.views
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.safeDrawingPadding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Close
import androidx.compose.runtime.Composable
@ -35,7 +36,9 @@ class HomeScreenViewModel @Inject constructor(
@Composable
fun HomeScreen(navController: NavController, viewModel: HomeScreenViewModel = hiltViewModel()) {
Column {
Column(
modifier = Modifier.safeDrawingPadding()
) {
PageHeader(text = stringResource(id = R.string.home))
LinkOnHome(

View File

@ -14,7 +14,9 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.imePadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.safeDrawingPadding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.rememberLazyListState
@ -184,7 +186,11 @@ fun ChannelScreen(
return
}
Column {
Column(
modifier = Modifier
.imePadding()
.safeDrawingPadding()
) {
ChannelHeader(
channel = channel,
onChannelClick = {

View File

@ -11,6 +11,7 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.safeDrawingPadding
import androidx.compose.foundation.layout.width
import androidx.compose.material3.Button
import androidx.compose.material3.ElevatedButton
@ -47,7 +48,8 @@ fun LoginGreetingScreen(navController: NavController) {
Column(
modifier = Modifier
.fillMaxSize()
.padding(vertical = 20.dp, horizontal = 0.dp),
.padding(vertical = 20.dp, horizontal = 0.dp)
.safeDrawingPadding(),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {

View File

@ -1,6 +1,7 @@
package chat.revolt.screens.login
import android.util.Log
import android.widget.Toast
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
@ -8,7 +9,9 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.imePadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.safeDrawingPadding
import androidx.compose.foundation.layout.width
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
@ -21,6 +24,7 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
@ -137,6 +141,8 @@ fun LoginScreen(
navController: NavController,
viewModel: LoginViewModel = hiltViewModel()
) {
val context = LocalContext.current
LaunchedEffect(viewModel.navigateTo) {
when (viewModel.navigateTo) {
"mfa" -> {
@ -169,7 +175,9 @@ fun LoginScreen(
Column(
modifier = Modifier
.fillMaxSize()
.padding(20.dp),
.padding(20.dp)
.imePadding()
.safeDrawingPadding(),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
@ -213,7 +221,13 @@ fun LoginScreen(
AnyLink(
text = stringResource(R.string.password_forgot),
action = { navController.navigate("about/placeholder") },
action = {
Toast.makeText(
context,
context.getString(R.string.comingsoon_toast),
Toast.LENGTH_SHORT
).show()
},
modifier = Modifier.padding(vertical = 7.dp)
)
@ -245,7 +259,13 @@ fun LoginScreen(
AnyLink(
text = stringResource(R.string.resend_verification),
action = { navController.navigate("about/placeholder") },
action = {
Toast.makeText(
context,
context.getString(R.string.comingsoon_toast),
Toast.LENGTH_SHORT
).show()
},
modifier = Modifier
.padding(vertical = 7.dp)
.testTag("resend_verification_link")

View File

@ -5,7 +5,9 @@ import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.imePadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.safeDrawingPadding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Button
@ -150,7 +152,9 @@ fun MfaScreen(
Column(
modifier = Modifier
.fillMaxSize()
.padding(20.dp),
.padding(20.dp)
.imePadding()
.safeDrawingPadding(),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {

View File

@ -7,6 +7,7 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.safeDrawingPadding
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
@ -62,7 +63,8 @@ fun OnboardingScreen(navController: NavController) {
Column(
modifier = Modifier
.fillMaxSize()
.padding(20.dp),
.padding(20.dp)
.safeDrawingPadding(),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {

View File

@ -8,7 +8,9 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.imePadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.safeDrawingPadding
import androidx.compose.foundation.layout.width
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
@ -108,7 +110,9 @@ fun RegisterDetailsScreen(
Column(
modifier = Modifier
.fillMaxSize()
.padding(20.dp),
.padding(20.dp)
.imePadding()
.safeDrawingPadding(),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {

View File

@ -9,6 +9,7 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.safeDrawingPadding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.material3.Button
@ -32,7 +33,8 @@ fun RegisterGreetingScreen(navController: NavController) {
Column(
modifier = Modifier
.fillMaxSize()
.padding(20.dp),
.padding(20.dp)
.safeDrawingPadding(),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {

View File

@ -10,6 +10,7 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.safeDrawingPadding
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
@ -32,7 +33,8 @@ fun RegisterVerifyScreen(navController: NavController, email: String) {
Column(
modifier = Modifier
.fillMaxSize()
.padding(20.dp),
.padding(20.dp)
.safeDrawingPadding(),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {

View File

@ -5,6 +5,7 @@ import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.safeDrawingPadding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.MaterialTheme
@ -56,6 +57,7 @@ fun AppearanceSettingsScreen(
Column(
modifier = Modifier
.fillMaxSize()
.safeDrawingPadding()
) {
PageHeader(
text = stringResource(id = R.string.settings_appearance),

View File

@ -5,6 +5,7 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.safeDrawingPadding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.ElevatedButton
@ -47,6 +48,7 @@ fun DebugSettingsScreen(
Column(
modifier = Modifier
.fillMaxSize()
.safeDrawingPadding()
) {
PageHeader(
text = "Debug",

View File

@ -4,6 +4,7 @@ import android.widget.Toast
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.safeDrawingPadding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
@ -33,6 +34,7 @@ fun SettingsScreen(
Column(
modifier = Modifier
.fillMaxSize()
.safeDrawingPadding()
) {
PageHeader(
text = stringResource(id = R.string.settings),

View File

@ -2,6 +2,8 @@
<resources>
<style name="Theme.Revolt" parent="Theme.AppCompat.DayNight.NoActionBar">
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:navigationBarColor">@android:color/transparent</item>
<item name="android:windowSplashScreenBackground">@color/background</item>
<item name="android:windowSplashScreenAnimatedIcon">@drawable/ic_launcher_foreground</item>
</style>

View File

@ -74,8 +74,6 @@
<string name="app_full_name">Revolt on Android</string>
<string name="oss_attribution">OSS Attribution</string>
<string name="comingsoon_heading">Gah, you found me!</string>
<string name="comingsoon_body">The feature you are trying to access is not ready yet, but we are steadily working on polishing it to perfection..</string>
<string name="comingsoon_toast">Sorry, this feature is not ready yet.</string>
<string name="typing_blank" translatable="false"><!-- this is a hack to prevent the typing indicator from showing typing_several when it's animating away --></string>

View File

@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.Revolt" parent="Theme.AppCompat.DayNight.NoActionBar" />
<style name="Theme.Revolt" parent="Theme.AppCompat.DayNight.NoActionBar">
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:navigationBarColor">@android:color/transparent</item>
</style>
</resources>