Skip to content

Commit 6b15ce9

Browse files
committed
feat: work on top app bar
1 parent 953a503 commit 6b15ce9

20 files changed

+914
-207
lines changed

.idea/deploymentTargetSelector.xml

+3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/inspectionProfiles/Project_Default.xml

+9
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/build.gradle.kts

+2
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ dependencies {
6161
implementation(libs.androidx.ui.graphics)
6262
implementation(libs.androidx.ui.tooling.preview)
6363
implementation(libs.androidx.material3)
64+
implementation(libs.androidx.ui.text.google.fonts)
6465
testImplementation(libs.junit)
6566
androidTestImplementation(libs.androidx.junit)
6667
androidTestImplementation(libs.androidx.espresso.core)
@@ -81,4 +82,5 @@ dependencies {
8182
implementation("androidx.room:room-ktx:$room_version")
8283

8384
implementation("com.github.jeziellago:compose-markdown:0.5.0")
85+
implementation("me.onebone:toolbar-compose:2.3.5")
8486
}

app/src/main/AndroidManifest.xml

+4
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
33
xmlns:tools="http://schemas.android.com/tools" >
44

5+
<uses-permission android:name="android.permission.INTERNET" />
6+
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
7+
58
<application
9+
android:name=".MemoBoardApplication"
610
android:allowBackup="true"
711
android:dataExtractionRules="@xml/data_extraction_rules"
812
android:fullBackupContent="@xml/backup_rules"
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,134 @@
11
package com.example.memoboard
22

3-
import androidx.compose.runtime.Composable
3+
import androidx.compose.animation.animateContentSize
4+
import androidx.compose.animation.core.Spring
5+
import androidx.compose.animation.core.spring
6+
import androidx.compose.foundation.clickable
7+
import androidx.compose.foundation.layout.Arrangement
8+
import androidx.compose.foundation.layout.Column
9+
import androidx.compose.foundation.layout.Row
10+
import androidx.compose.foundation.layout.fillMaxWidth
11+
import androidx.compose.foundation.layout.padding
12+
import androidx.compose.foundation.layout.width
13+
import androidx.compose.foundation.shape.RoundedCornerShape
14+
import androidx.compose.material3.ButtonDefaults
15+
import androidx.compose.material3.Card
16+
import androidx.compose.material3.CardDefaults
17+
import androidx.compose.material3.ExperimentalMaterial3Api
18+
import androidx.compose.material3.MaterialTheme
19+
import androidx.compose.material3.OutlinedCard
420
import androidx.compose.material3.Text
5-
21+
import androidx.compose.material3.TextButton
22+
import androidx.compose.runtime.Composable
23+
import androidx.compose.runtime.getValue
24+
import androidx.compose.runtime.mutableStateOf
25+
import androidx.compose.runtime.remember
26+
import androidx.compose.runtime.setValue
27+
import androidx.compose.ui.Alignment
28+
import androidx.compose.ui.Modifier
29+
import androidx.compose.ui.tooling.preview.Preview
30+
import androidx.compose.ui.unit.dp
631
import androidx.navigation.NavHostController
732
import androidx.navigation.compose.rememberNavController
833
import com.example.memoboard.ui.home.HomeScreen
34+
import com.example.memoboard.ui.theme.MemoBoardTheme
935

1036
@Composable
1137
fun MemoBoardScreen(navController: NavHostController = rememberNavController()) {
1238
HomeScreen()
1339
}
40+
41+
@OptIn(ExperimentalMaterial3Api::class)
42+
@Composable
43+
fun MemoBoardTopAppBar(
44+
title: String,
45+
canNavigateBack: Boolean,
46+
navigateUp: () -> Unit = {},
47+
titleClickedActionName: String = "",
48+
titleClickedAction: () -> Unit = {},
49+
modifier: Modifier = Modifier
50+
) {
51+
var titleClicked by remember {
52+
mutableStateOf(true)
53+
}
54+
55+
Row(
56+
modifier = Modifier
57+
.fillMaxWidth()
58+
.animateContentSize(
59+
animationSpec = spring(
60+
dampingRatio = Spring.DampingRatioMediumBouncy,
61+
stiffness = Spring.StiffnessMediumLow
62+
)
63+
),
64+
horizontalArrangement = Arrangement.Center
65+
) {
66+
OutlinedCard(
67+
modifier = modifier
68+
.width(240.dp),
69+
shape = RoundedCornerShape(16.dp),
70+
) {
71+
Column(
72+
horizontalAlignment = Alignment.CenterHorizontally
73+
) {
74+
Row(
75+
modifier = Modifier.fillMaxWidth(),
76+
horizontalArrangement = Arrangement.Center,
77+
verticalAlignment = Alignment.CenterVertically
78+
) {
79+
TextButton(
80+
enabled = titleClickedActionName != "",
81+
onClick = { titleClicked = !titleClicked },
82+
colors = ButtonDefaults.buttonColors(
83+
// Match with Card
84+
containerColor = CardDefaults.outlinedCardColors().containerColor,
85+
contentColor = CardDefaults.outlinedCardColors().contentColor,
86+
disabledContainerColor = CardDefaults.outlinedCardColors().containerColor,
87+
disabledContentColor = CardDefaults.outlinedCardColors().contentColor,
88+
)
89+
) {
90+
Text(
91+
text = title,
92+
style = MaterialTheme.typography.titleMedium,
93+
)
94+
}
95+
}
96+
97+
if (titleClicked) {
98+
Card(
99+
shape = RoundedCornerShape(8.dp),
100+
modifier = Modifier
101+
.width(200.dp)
102+
.padding(bottom = 8.dp)
103+
.clickable(
104+
onClick = titleClickedAction
105+
)
106+
) {
107+
Row(
108+
modifier = Modifier
109+
.fillMaxWidth(),
110+
horizontalArrangement = Arrangement.Start
111+
) {
112+
Text(
113+
modifier = Modifier.padding(start = 16.dp, top = 4.dp, bottom = 4.dp),
114+
text = titleClickedActionName,
115+
style = MaterialTheme.typography.bodyLarge,
116+
)
117+
}
118+
}
119+
}
120+
}
121+
}
122+
}
123+
}
124+
125+
@Composable
126+
@Preview
127+
fun MemoBoardTopAppBarPreview() {
128+
MemoBoardTheme {
129+
MemoBoardTopAppBar(
130+
title = "Hello World",
131+
canNavigateBack = false
132+
)
133+
}
134+
}

app/src/main/java/com/example/memoboard/config/AppContainer.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ interface AppContainer {
1313

1414
class AppDataContainer(private val context: Context) : AppContainer {
1515
override val sectionRepository: SectionRepository by lazy {
16-
// DBSectionRepository(MemoDatabase.getDatabase(context).sectionDao())
16+
// DBSectionRepository(MemoDatabase.getDatabase(context).sectionDao())
1717
LocalSectionRepository(LocalSectionProvider)
1818
}
1919
}
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,21 @@
11
package com.example.memoboard.config
22

3-
class ViewModelProvider {
3+
import androidx.lifecycle.ViewModelProvider
4+
import androidx.lifecycle.viewmodel.CreationExtras
5+
import androidx.lifecycle.viewmodel.initializer
6+
import androidx.lifecycle.viewmodel.viewModelFactory
7+
import com.example.memoboard.MemoBoardApplication
8+
import com.example.memoboard.ui.home.HomeViewModel
9+
10+
object ViewModelProvider {
11+
val Factory = viewModelFactory {
12+
initializer {
13+
HomeViewModel(
14+
memoBoardApplication().container.sectionRepository
15+
)
16+
}
17+
}
418
}
19+
20+
fun CreationExtras.memoBoardApplication(): MemoBoardApplication =
21+
(this[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY] as MemoBoardApplication)

0 commit comments

Comments
 (0)