Skip to content

Commit 4726866

Browse files
committed
feat: new components for profile
1 parent ff09348 commit 4726866

File tree

6 files changed

+128
-15
lines changed

6 files changed

+128
-15
lines changed

core/designsystem/src/main/kotlin/com/espressodev/gptmap/core/designsystem/GmIcons.kt

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,37 @@
11
package com.espressodev.gptmap.core.designsystem
22

33
import androidx.compose.material.icons.Icons
4-
import androidx.compose.material.icons.filled.BrowseGallery
54
import androidx.compose.material.icons.filled.Camera
65
import androidx.compose.material.icons.filled.Clear
76
import androidx.compose.material.icons.filled.Done
7+
import androidx.compose.material.icons.filled.Edit
88
import androidx.compose.material.icons.filled.Favorite
99
import androidx.compose.material.icons.filled.Fingerprint
1010
import androidx.compose.material.icons.filled.Image
1111
import androidx.compose.material.icons.filled.ImageSearch
1212
import androidx.compose.material.icons.filled.Person
1313
import androidx.compose.material.icons.filled.Screenshot
1414
import androidx.compose.material.icons.filled.Search
15-
import androidx.compose.material.icons.filled.Send
1615
import androidx.compose.material.icons.filled.Title
17-
import androidx.compose.material.icons.filled.TravelExplore
16+
import androidx.compose.material.icons.outlined.AccountCircle
1817
import androidx.compose.material.icons.outlined.ArrowBack
18+
import androidx.compose.material.icons.outlined.ArrowForwardIos
19+
import androidx.compose.material.icons.outlined.ArrowRight
1920
import androidx.compose.material.icons.outlined.Cancel
2021
import androidx.compose.material.icons.outlined.Email
2122
import androidx.compose.material.icons.outlined.Face
2223
import androidx.compose.material.icons.outlined.FavoriteBorder
24+
import androidx.compose.material.icons.outlined.Info
2325
import androidx.compose.material.icons.outlined.LocationCity
2426
import androidx.compose.material.icons.outlined.Lock
27+
import androidx.compose.material.icons.outlined.Logout
2528
import androidx.compose.material.icons.outlined.MarkEmailUnread
2629
import androidx.compose.material.icons.outlined.MyLocation
30+
import androidx.compose.material.icons.outlined.NavigateNext
2731
import androidx.compose.material.icons.outlined.Visibility
2832
import androidx.compose.material.icons.outlined.VisibilityOff
2933

3034
object GmIcons {
31-
val TravelExploreDefault = Icons.Default.TravelExplore
3235
val ClearDefault = Icons.Default.Clear
3336
val SearchDefault = Icons.Default.Search
3437
val FavouriteOutlined = Icons.Outlined.FavoriteBorder
@@ -41,6 +44,7 @@ object GmIcons {
4144
val EmailOutlined = Icons.Outlined.Email
4245
val MarkEmailUnreadOutlined = Icons.Outlined.MarkEmailUnread
4346
val ArrowBackOutlined = Icons.Outlined.ArrowBack
47+
val ArrowRightDefault = Icons.Outlined.ArrowForwardIos
4448
val FingerPrintFilled = Icons.Filled.Fingerprint
4549
val LocationCityOutlined = Icons.Outlined.LocationCity
4650
val MyLocationOutlined = Icons.Outlined.MyLocation
@@ -49,7 +53,11 @@ object GmIcons {
4953
val ScreenshotDefault = Icons.Default.Screenshot
5054
val ImageSearchDefault = Icons.Default.ImageSearch
5155
val TitleDefault = Icons.Default.Title
52-
val SendDefault = Icons.Default.Send
5356
val GalleryDefault = Icons.Default.Image
5457
val PersonDefault = Icons.Default.Person
58+
val AccountCircleOutlined = Icons.Outlined.AccountCircle
59+
val EditDefault = Icons.Default.Edit
60+
val InfoOutlined = Icons.Outlined.Info
61+
val LogoutOutlined = Icons.Outlined.Logout
62+
val NavigateNextDefault = Icons.Outlined.NavigateNext
5563
}

core/designsystem/src/main/kotlin/com/espressodev/gptmap/core/designsystem/component/Button.kt

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,26 +7,36 @@ import androidx.compose.animation.core.VectorConverter
77
import androidx.compose.animation.core.spring
88
import androidx.compose.foundation.Image
99
import androidx.compose.foundation.gestures.detectDragGestures
10+
import androidx.compose.foundation.interaction.MutableInteractionSource
1011
import androidx.compose.foundation.layout.PaddingValues
1112
import androidx.compose.foundation.layout.Spacer
1213
import androidx.compose.foundation.layout.defaultMinSize
1314
import androidx.compose.foundation.layout.offset
15+
import androidx.compose.foundation.layout.padding
1416
import androidx.compose.foundation.layout.size
1517
import androidx.compose.foundation.layout.width
18+
import androidx.compose.foundation.shape.CircleShape
1619
import androidx.compose.foundation.shape.RoundedCornerShape
1720
import androidx.compose.material3.Button
1821
import androidx.compose.material3.ElevatedButton
1922
import androidx.compose.material3.ExtendedFloatingActionButton
23+
import androidx.compose.material3.FilledTonalIconButton
2024
import androidx.compose.material3.FloatingActionButton
2125
import androidx.compose.material3.Icon
26+
import androidx.compose.material3.IconButtonColors
27+
import androidx.compose.material3.IconButtonDefaults
2228
import androidx.compose.material3.MaterialTheme
29+
import androidx.compose.material3.Surface
2330
import androidx.compose.material3.Text
2431
import androidx.compose.runtime.Composable
32+
import androidx.compose.runtime.ReadOnlyComposable
2533
import androidx.compose.runtime.remember
2634
import androidx.compose.runtime.rememberCoroutineScope
2735
import androidx.compose.ui.ExperimentalComposeUiApi
2836
import androidx.compose.ui.Modifier
37+
import androidx.compose.ui.draw.clip
2938
import androidx.compose.ui.geometry.Offset
39+
import androidx.compose.ui.graphics.Color
3040
import androidx.compose.ui.graphics.Shape
3141
import androidx.compose.ui.graphics.vector.ImageVector
3242
import androidx.compose.ui.input.pointer.pointerInput
@@ -109,6 +119,26 @@ fun DefaultButton(
109119
}
110120
}
111121

122+
@Composable
123+
fun GmTonalIconButton(
124+
icon: ImageVector,
125+
modifier: Modifier = Modifier,
126+
color: Color = MaterialTheme.colorScheme.primaryContainer
127+
) {
128+
Surface(
129+
modifier = modifier
130+
.size(40.dp)
131+
.clip(CircleShape),
132+
color = color
133+
) {
134+
Icon(
135+
imageVector = icon,
136+
contentDescription = null,
137+
modifier = Modifier.padding(6.dp)
138+
)
139+
}
140+
}
141+
112142
@Composable
113143
fun GmDraggableButton(icon: ImageVector, modifier: Modifier = Modifier, onClick: () -> Unit = {}) {
114144
val localDensity = LocalDensity.current
@@ -202,6 +232,7 @@ fun SquareButton(
202232
modifier = Modifier.size(32.dp)
203233
)
204234
}
235+
205236
is IconType.Vector -> {
206237
Icon(
207238
imageVector = icon.imageVector,

core/designsystem/src/main/kotlin/com/espressodev/gptmap/core/designsystem/component/ProgressIndicator.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,6 @@ fun LottieAnimationView(
6060

6161
@Preview
6262
@Composable
63-
fun LottieAnimationParentPreview() {
63+
private fun LottieAnimationParentPreview() {
6464
LottieAnimationView(AppRaw.earth_orbit)
6565
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package com.espressodev.gptmap.core.designsystem.component
2+
3+
import androidx.compose.animation.core.LinearEasing
4+
import androidx.compose.animation.core.animateFloat
5+
import androidx.compose.animation.core.infiniteRepeatable
6+
import androidx.compose.animation.core.rememberInfiniteTransition
7+
import androidx.compose.animation.core.tween
8+
import androidx.compose.foundation.layout.Box
9+
import androidx.compose.foundation.layout.fillMaxSize
10+
import androidx.compose.foundation.layout.padding
11+
import androidx.compose.foundation.shape.CircleShape
12+
import androidx.compose.material3.MaterialTheme
13+
import androidx.compose.material3.Surface
14+
import androidx.compose.material3.Text
15+
import androidx.compose.runtime.Composable
16+
import androidx.compose.ui.Alignment
17+
import androidx.compose.ui.Modifier
18+
import androidx.compose.ui.draw.clip
19+
import androidx.compose.ui.draw.drawBehind
20+
import androidx.compose.ui.graphics.Brush
21+
import androidx.compose.ui.graphics.Color
22+
import androidx.compose.ui.graphics.drawscope.Stroke
23+
import androidx.compose.ui.graphics.drawscope.rotate
24+
import androidx.compose.ui.unit.dp
25+
26+
@Composable
27+
private fun shimmerColors(): Array<out Pair<Float, Color>> {
28+
return arrayOf(
29+
0.0f to MaterialTheme.colorScheme.primaryContainer,
30+
0.4f to MaterialTheme.colorScheme.primary,
31+
1f to MaterialTheme.colorScheme.primaryContainer
32+
)
33+
}
34+
35+
@Composable
36+
fun LetterInCircle(
37+
letter: Char,
38+
modifier: Modifier = Modifier,
39+
color: Color = MaterialTheme.colorScheme.primaryContainer
40+
) {
41+
val infiniteTransition = rememberInfiniteTransition(label = "Infinity Transition")
42+
val rotationAnimation = infiniteTransition.animateFloat(
43+
initialValue = 0f,
44+
targetValue = 360f,
45+
animationSpec = infiniteRepeatable(tween(3000, easing = LinearEasing)),
46+
label = "Rotation Animation"
47+
)
48+
val colors = shimmerColors()
49+
Surface(
50+
modifier = modifier
51+
.drawBehind {
52+
rotate(rotationAnimation.value) {
53+
drawCircle(
54+
Brush.horizontalGradient(colorStops = colors),
55+
style = Stroke(4.dp.toPx())
56+
)
57+
}
58+
}
59+
.padding(2.dp)
60+
.clip(CircleShape),
61+
color = color
62+
) {
63+
Box(
64+
contentAlignment = Alignment.Center,
65+
modifier = Modifier.fillMaxSize()
66+
) {
67+
Text(text = letter.uppercase(), style = MaterialTheme.typography.displayLarge)
68+
}
69+
}
70+
}

core/designsystem/src/main/kotlin/com/espressodev/gptmap/core/designsystem/component/TopAppBar.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,23 +25,23 @@ import com.espressodev.gptmap.core.designsystem.R.string as AppText
2525
@OptIn(ExperimentalMaterial3Api::class)
2626
@Composable
2727
fun GmTopAppBar(
28-
textType: TextType,
28+
text: TextType,
2929
icon: IconType,
3030
onBackClick: () -> Unit,
3131
modifier: Modifier = Modifier,
3232
scrollBehavior: TopAppBarScrollBehavior? = null,
3333
) {
34-
val text = when (textType) {
35-
is TextType.Res -> stringResource(id = textType.textId)
36-
is TextType.Text -> textType.text
34+
val value = when (text) {
35+
is TextType.Res -> stringResource(id = text.textId)
36+
is TextType.Text -> text.text
3737
}
3838
TopAppBar(
3939
modifier = modifier,
4040
scrollBehavior = scrollBehavior,
4141
title = {
4242
Box(modifier = Modifier.fillMaxWidth(), contentAlignment = Alignment.Center) {
4343
Text(
44-
text = text,
44+
text = value,
4545
fontWeight = FontWeight.Medium,
4646
maxLines = 1,
4747
overflow = TextOverflow.Ellipsis
@@ -62,15 +62,15 @@ fun GmTopAppBar(
6262
Icon(
6363
painter = painterResource(id = icon.painterId),
6464
contentDescription = null,
65-
modifier = Modifier.padding(end = 8.dp),
65+
modifier = Modifier.padding(end = 12.dp),
6666
)
6767
}
6868

6969
is IconType.Vector -> {
7070
Icon(
7171
imageVector = icon.imageVector,
7272
contentDescription = null,
73-
modifier = Modifier.padding(end = 8.dp),
73+
modifier = Modifier.padding(end = 12.dp),
7474
)
7575
}
7676
}

core/designsystem/src/main/res/values/strings.xml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242
<string name="send">Send</string>
4343
<string name="message">Message</string>
4444
<string name="screenshot_gallery">Screenshot Gallery</string>
45+
<string name="edit">Edit</string>
46+
<string name="logout">Logout</string>
4547

4648

4749
<!-- Map -->
@@ -50,7 +52,7 @@
5052
<string name="street_view">Street View</string>
5153
<string name="add_favourite">Add to Favourite</string>
5254
<string name="discovering_your_dream_place">Discovering your dream place…</string>
53-
<string name="info">Info</string>
55+
<string name="info">Information</string>
5456
<string name="back_to_info">Back to Info</string>
5557
<string name="explore_with_ai">Explore more with AI</string>
5658

@@ -93,7 +95,9 @@
9395
<!-- Street View -->
9496
<string name="street_view_loading_header">Preparing an immersive Street View experience for you!</string>
9597

96-
9798
<!-- Favourite -->
9899
<string name="favourite">Favourite</string>
100+
101+
<!-- Profile -->
102+
<string name="profile_top_bar_header">Profile</string>
99103
</resources>

0 commit comments

Comments
 (0)