更新搜索和个人信息页UI

- 搜索页和发现页背景颜色更新为灰色
- 搜索页搜索框背景颜色更新为白色
-
 个人信息页添加返回按钮
- 个人信息页背景图片增加默认图片
This commit is contained in:
2024-09-06 20:08:51 +08:00
parent eba9ca62ac
commit fb66ccd318
4 changed files with 83 additions and 84 deletions

View File

@@ -1,6 +1,13 @@
package com.aiosman.riderpro
import android.Manifest
import android.app.NotificationChannel
import android.app.NotificationManager
import android.content.Context
import android.content.pm.PackageManager
import android.os.Build
import android.os.Bundle
import android.util.Log
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
@@ -8,37 +15,17 @@ import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.animation.AnimatedContentScope
import androidx.compose.animation.ExperimentalSharedTransitionApi
import androidx.compose.animation.SharedTransitionScope
import androidx.compose.animation.animateColorAsState
import androidx.compose.animation.core.tween
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.navigationBars
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.statusBarsPadding
import androidx.compose.material3.Icon
import androidx.compose.material3.NavigationBar
import androidx.compose.material3.NavigationBarItem
import androidx.compose.material3.NavigationBarItemColors
import androidx.compose.material3.Scaffold
import androidx.compose.runtime.Composable
import androidx.compose.runtime.compositionLocalOf
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.dp
import androidx.core.content.ContextCompat
import androidx.core.view.WindowCompat
import androidx.lifecycle.ProcessLifecycleOwner
import androidx.lifecycle.viewModelScope
import androidx.navigation.NavHostController
import androidx.navigation.compose.currentBackStackEntryAsState
import com.aiosman.riderpro.data.AccountService
import com.aiosman.riderpro.data.AccountServiceImpl
import com.aiosman.riderpro.ui.Navigation
import com.aiosman.riderpro.ui.NavigationRoute
import com.aiosman.riderpro.ui.index.NavigationItem
import com.google.accompanist.systemuicontroller.rememberSystemUiController
import com.aiosman.riderpro.ui.post.PostViewModel
import com.google.android.libraries.places.api.Places
import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.analytics.ktx.analytics
@@ -46,21 +33,6 @@ import com.google.firebase.ktx.Firebase
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import android.Manifest
import android.app.NotificationChannel
import android.app.NotificationManager
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Build
import android.util.Log
import android.widget.Toast
import androidx.lifecycle.ProcessLifecycleOwner
import androidx.lifecycle.viewModelScope
import androidx.navigation.findNavController
import com.aiosman.riderpro.ui.post.PostViewModel
import com.google.android.gms.tasks.OnCompleteListener
import com.google.firebase.messaging.FirebaseMessaging
class MainActivity : ComponentActivity() {
// Firebase Analytics
@@ -174,10 +146,6 @@ class MainActivity : ComponentActivity() {
notificationManager.createNotificationChannel(channel)
}
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
}
}
val LocalNavController = compositionLocalOf<NavHostController> {

View File

@@ -1,6 +1,5 @@
package com.aiosman.riderpro.ui.index.tabs.search
import android.graphics.drawable.VectorDrawable
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
@@ -21,9 +20,6 @@ import androidx.compose.foundation.layout.systemBars
import androidx.compose.foundation.lazy.grid.GridCells
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.BasicTextField
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.ExperimentalMaterialApi
import androidx.compose.material.Icon
import androidx.compose.material.Text
@@ -37,7 +33,6 @@ import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@@ -45,8 +40,6 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
@@ -80,20 +73,25 @@ fun DiscoverScreen() {
Column(
modifier = Modifier
.background(Color.White)
.fillMaxSize()
.background(Color(0xFFF0F2F5))
.pullRefresh(state)
.padding(bottom = navigationBarPaddings)
) {
Spacer(modifier = Modifier.height(statusBarPaddingValues.calculateTopPadding()))
SearchButton(
modifier = Modifier
.fillMaxWidth()
.padding(top = 16.dp, start = 24.dp, end = 24.dp),
Column(
modifier = Modifier.fillMaxWidth()
) {
navController.navigate(NavigationRoute.Search.route)
Spacer(modifier = Modifier.height(statusBarPaddingValues.calculateTopPadding()))
SearchButton(
modifier = Modifier
.fillMaxWidth()
.padding(top = 16.dp, start = 24.dp, end = 24.dp),
) {
navController.navigate(NavigationRoute.Search.route)
}
}
Box(
modifier = Modifier
.fillMaxWidth()
@@ -115,7 +113,6 @@ fun SearchButton(
Box(
modifier = modifier
.clip(shape = RoundedCornerShape(8.dp))
.background(Color(0xFFEEEEEE))
.padding(horizontal = 16.dp, vertical = 8.dp)
.noRippleClickable {

View File

@@ -86,26 +86,31 @@ fun SearchScreen() {
Column(
modifier = Modifier
.background(Color.White)
.fillMaxSize()
.background(Color(0xFFF0F2F5))
.padding(bottom = navigationBarPaddings)
) {
Spacer(modifier = Modifier.height(statusBarPaddingValues.calculateTopPadding()))
SearchInput(
modifier = Modifier
.fillMaxWidth()
.padding(top = 16.dp, start = 24.dp, end = 24.dp),
text = model.searchText,
onTextChange = {
model.searchText = it
},
onSearch = {
model.search()
// hide ime
keyboardController?.hide() // Hide the keyboard
},
focusRequester = focusRequester
)
Column(
modifier = Modifier.fillMaxWidth().background(Color.White).padding(bottom = 10.dp)
) {
Spacer(modifier = Modifier.height(statusBarPaddingValues.calculateTopPadding()))
SearchInput(
modifier = Modifier
.fillMaxWidth()
.padding(top = 16.dp, start = 24.dp, end = 24.dp),
text = model.searchText,
onTextChange = {
model.searchText = it
},
onSearch = {
model.search()
// hide ime
keyboardController?.hide() // Hide the keyboard
},
focusRequester = focusRequester
)
}
if (model.showResult) {
Spacer(modifier = Modifier.padding(8.dp))

View File

@@ -4,10 +4,14 @@ import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
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.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material.ExperimentalMaterialApi
import androidx.compose.material.pullrefresh.PullRefreshIndicator
@@ -19,17 +23,21 @@ import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.paging.compose.collectAsLazyPagingItems
import com.aiosman.riderpro.LocalNavController
import com.aiosman.riderpro.R
import com.aiosman.riderpro.exp.viewModelFactory
import com.aiosman.riderpro.ui.composables.CustomAsyncImage
import com.aiosman.riderpro.ui.composables.StatusBarSpacer
import com.aiosman.riderpro.ui.index.tabs.profile.MomentPostUnit
import com.aiosman.riderpro.ui.index.tabs.profile.UserInformation
import com.aiosman.riderpro.ui.modifiers.noRippleClickable
import kotlinx.coroutines.launch
@OptIn(ExperimentalMaterialApi::class)
@@ -43,6 +51,7 @@ fun AccountProfile(id: String) {
val state = rememberPullRefreshState(model.refreshing, onRefresh = {
model.loadProfile(id, pullRefresh = true)
})
val navController = LocalNavController.current
LaunchedEffect(Unit) {
model.loadProfile(id)
}
@@ -62,33 +71,53 @@ fun AccountProfile(id: String) {
Box(
modifier = Modifier
.fillMaxWidth()
.height(400.dp)
) {
if (model.profile == null) {
Spacer(modifier = Modifier.height(400.dp))
} else {
if (model.profile != null) {
val banner = model.profile?.banner
if (banner != null) {
CustomAsyncImage(
LocalContext.current,
banner,
modifier = Modifier
.fillMaxWidth()
.height(400.dp),
modifier = Modifier.fillMaxSize(),
contentDescription = "",
contentScale = ContentScale.Crop
)
} else {
Image(
painter = painterResource(id = R.drawable.rider_pro_moment_demo_2),
modifier = Modifier
.fillMaxWidth()
.height(400.dp),
modifier = Modifier.fillMaxSize(),
contentDescription = "",
contentScale = ContentScale.Crop
)
}
}
Box(
modifier = Modifier.fillMaxWidth()
) {
Column(
modifier = Modifier.fillMaxWidth()
) {
StatusBarSpacer()
Row(
modifier = Modifier.padding(vertical = 10.dp, horizontal = 18.dp)
) {
Image(
painter = painterResource(id = R.drawable.rider_pro_nav_back),
contentDescription = "",
modifier = Modifier
.size(24.dp)
.noRippleClickable {
navController.popBackStack()
},
colorFilter = ColorFilter.tint(Color.White)
)
}
}
}
}
Spacer(modifier = Modifier.height(32.dp))