Skip to content

Commit acf5f84

Browse files
committed
added audit changes
1 parent 30e67db commit acf5f84

File tree

17 files changed

+98
-390
lines changed

17 files changed

+98
-390
lines changed

app/src/main/AndroidManifest.xml

-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
<activity
1616
android:name=".MainActivity"
1717
android:exported="true"
18-
android:label="@string/app_name"
1918
android:theme="@style/AppTheme">
2019
<intent-filter>
2120
<action android:name="android.intent.action.MAIN" />

app/src/main/java/com/esri/arcgismaps/kotlin/sampleviewer/MainActivity.kt

-16
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,14 @@ import android.os.Bundle
44
import androidx.activity.ComponentActivity
55
import androidx.activity.compose.setContent
66
import androidx.activity.enableEdgeToEdge
7-
import androidx.compose.foundation.isSystemInDarkTheme
87
import androidx.compose.material3.MaterialTheme
98
import androidx.compose.material3.Surface
109
import androidx.compose.runtime.LaunchedEffect
11-
import androidx.compose.runtime.SideEffect
12-
import androidx.compose.ui.graphics.Color
1310
import androidx.compose.ui.platform.LocalContext
1411
import androidx.lifecycle.lifecycleScope
1512
import com.esri.arcgismaps.kotlin.sampleviewer.model.DefaultSampleInfoRepository
1613
import com.esri.arcgismaps.kotlin.sampleviewer.navigation.NavGraph
1714
import com.esri.arcgismaps.kotlin.sampleviewer.ui.theme.SampleAppTheme
18-
import com.google.accompanist.systemuicontroller.rememberSystemUiController
19-
import kotlinx.coroutines.MainScope
2015
import kotlinx.coroutines.launch
2116

2217
class MainActivity : ComponentActivity() {
@@ -25,24 +20,13 @@ class MainActivity : ComponentActivity() {
2520
enableEdgeToEdge()
2621
setContent {
2722
setContent {
28-
2923
val context = LocalContext.current
3024
LaunchedEffect(Unit) {
3125
lifecycleScope.launch {
3226
DefaultSampleInfoRepository.load(context)
3327
}
3428
}
3529

36-
// Control color of navigation bar when user changes theme
37-
val isSystemInDarkMode = isSystemInDarkTheme()
38-
val systemUiController = rememberSystemUiController()
39-
SideEffect {
40-
systemUiController.setNavigationBarColor(
41-
color = if (isSystemInDarkMode) Color.Black else Color.White,
42-
darkIcons = true
43-
)
44-
}
45-
4630
SampleAppTheme {
4731
Surface(color = MaterialTheme.colorScheme.background) { NavGraph() }
4832
}

app/src/main/java/com/esri/arcgismaps/kotlin/sampleviewer/model/room/AppDatabase.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ abstract class AppDatabase : RoomDatabase() {
2727
val instance = Room.databaseBuilder(
2828
context.applicationContext,
2929
AppDatabase::class.java,
30-
"app_database"
30+
"arcgis_maps_kotlin_samples_database"
3131
).build()
3232
INSTANCE = instance
3333
instance
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,6 @@
11
package com.esri.arcgismaps.kotlin.sampleviewer.navigation
22

3-
import androidx.compose.animation.AnimatedVisibility
4-
import androidx.compose.animation.core.MutableTransitionState
5-
import androidx.compose.animation.fadeIn
6-
import androidx.compose.animation.fadeOut
7-
import androidx.compose.animation.slideInVertically
8-
import androidx.compose.animation.slideOutVertically
93
import androidx.compose.runtime.Composable
10-
import androidx.compose.runtime.remember
11-
import androidx.compose.ui.Modifier
124
import androidx.navigation.NavType
135
import androidx.navigation.compose.NavHost
146
import androidx.navigation.compose.composable
@@ -46,8 +38,9 @@ fun NavGraph() {
4638
route = "${R.string.sampleList_section}/category={category}",
4739
arguments = listOf(navArgument("category") { type = NavType.StringType })
4840
) { backStackEntry ->
49-
val categoryNavEntry = backStackEntry.arguments?.getString("category") ?: ""
50-
SampleListScreen(categoryNavEntry, navController)
41+
val categoryNavEntry = backStackEntry.arguments?.getString("category")
42+
if (!categoryNavEntry.isNullOrEmpty())
43+
SampleListScreen(categoryNavEntry, navController)
5144
}
5245

5346
composable(
@@ -57,48 +50,31 @@ fun NavGraph() {
5750
navArgument("sampleName") { type = NavType.StringType }
5851
)
5952
) { backStackEntry ->
60-
val optionPositionNavEntry = backStackEntry.arguments?.getInt("optionPosition") ?: 0
61-
val sampleNameNavEntry = backStackEntry.arguments?.getString("sampleName") ?: ""
62-
CodePagerScreen(
63-
onBackPressed = { navController.popBackStack() },
64-
optionPosition = optionPositionNavEntry,
65-
sampleName = sampleNameNavEntry
66-
)
53+
val optionPositionNavEntry = backStackEntry.arguments?.getInt("optionPosition")
54+
val sampleNameNavEntry = backStackEntry.arguments?.getString("sampleName")
55+
56+
if (optionPositionNavEntry != null && !sampleNameNavEntry.isNullOrEmpty())
57+
CodePagerScreen(
58+
onBackPressed = { navController.popBackStack() },
59+
optionPosition = optionPositionNavEntry,
60+
sampleName = sampleNameNavEntry
61+
)
6762
}
6863

6964
composable(R.string.search_section.toString()) {
70-
EnterAnimation {
71-
SearchScreen(
72-
navController = navController)
73-
}
65+
SearchScreen(navController = navController)
7466
}
7567

7668
composable(
7769
route = "${R.string.searchResults_section}/query={query}",
7870
arguments = listOf(navArgument("query") { type = NavType.StringType })
7971
) { backStackEntry ->
80-
val queryNavEntry = backStackEntry.arguments?.getString("query") ?: ""
81-
SearchResults(
82-
searchQuery = queryNavEntry,
83-
navController = navController)
72+
val queryNavEntry = backStackEntry.arguments?.getString("query")
73+
if (!queryNavEntry.isNullOrEmpty())
74+
SearchResults(
75+
searchQuery = queryNavEntry,
76+
navController = navController
77+
)
8478
}
8579
}
8680
}
87-
88-
@Composable
89-
fun EnterAnimation(content: @Composable () -> Unit) {
90-
val transitionState = remember { MutableTransitionState(false) }
91-
transitionState.targetState = true
92-
AnimatedVisibility(
93-
visibleState = transitionState,
94-
enter = slideInVertically(
95-
initialOffsetY = { fullHeight -> fullHeight } // slide in from the bottom
96-
) + fadeIn(initialAlpha = 0.3f), // fade-in effect
97-
exit = slideOutVertically(
98-
targetOffsetY = { fullHeight -> fullHeight } // slide out to the bottom
99-
) + fadeOut(), // fade-out effect
100-
modifier = Modifier
101-
) {
102-
content()
103-
}
104-
}

app/src/main/java/com/esri/arcgismaps/kotlin/sampleviewer/ui/components/CategoryCard.kt

+4-4
Original file line numberDiff line numberDiff line change
@@ -54,15 +54,15 @@ fun CardItem(
5454
Column(
5555
modifier = Modifier.fillMaxSize(),
5656
horizontalAlignment = Alignment.CenterHorizontally,
57-
verticalArrangement = Arrangement.Center
57+
verticalArrangement = Arrangement.spacedBy(12.dp,Alignment.CenterVertically)
5858
) {
5959
IconWithBackgroundCircle(category)
6060
Text(
6161
text = category.title.text,
6262
color = Color.White,
6363
textAlign = TextAlign.Center,
6464
modifier = Modifier.wrapContentSize(Alignment.Center),
65-
fontSize = MaterialTheme.typography.bodyMedium.fontSize
65+
style = MaterialTheme.typography.titleMedium
6666
)
6767
}
6868
}
@@ -74,7 +74,7 @@ private fun IconWithBackgroundCircle(item: Category) {
7474
Box(
7575
Modifier
7676
.background(
77-
Color.Black,
77+
Color.Black.copy(alpha = 0.8f),
7878
shape = CircleShape
7979
)
8080
.padding(8.dp)
@@ -100,7 +100,7 @@ private fun BackgroundImageBox(item: Category) {
100100
Box(
101101
modifier = Modifier
102102
.fillMaxSize()
103-
.background(Color.Black.copy(alpha = 0.4f))
103+
.background(Color.Black.copy(alpha = 0.6f))
104104
)
105105
}
106106

app/src/main/java/com/esri/arcgismaps/kotlin/sampleviewer/ui/components/SampleCard.kt

+23-35
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package com.esri.arcgismaps.kotlin.sampleviewer.ui.components
22

33
import android.content.res.Configuration
44
import androidx.compose.animation.AnimatedVisibility
5-
import androidx.compose.animation.core.tween
65
import androidx.compose.animation.expandVertically
76
import androidx.compose.animation.shrinkVertically
87
import androidx.compose.foundation.background
@@ -11,11 +10,9 @@ import androidx.compose.foundation.layout.Arrangement
1110
import androidx.compose.foundation.layout.Column
1211
import androidx.compose.foundation.layout.IntrinsicSize
1312
import androidx.compose.foundation.layout.Row
14-
import androidx.compose.foundation.layout.Spacer
1513
import androidx.compose.foundation.layout.fillMaxWidth
1614
import androidx.compose.foundation.layout.height
1715
import androidx.compose.foundation.layout.padding
18-
import androidx.compose.foundation.layout.width
1916
import androidx.compose.material.icons.Icons
2017
import androidx.compose.material.icons.filled.Info
2118
import androidx.compose.material.icons.filled.MoreVert
@@ -62,6 +59,7 @@ fun SampleCardItem(
6259
TitleAndIconsRow(sample, dropdownSampleItems)
6360
}
6461
}
62+
6563
@OptIn(ExperimentalMaterial3Api::class)
6664
@Composable
6765
private fun TitleAndIconsRow(
@@ -77,16 +75,20 @@ private fun TitleAndIconsRow(
7775
modifier = Modifier
7876
.fillMaxWidth()
7977
.background(MaterialTheme.colorScheme.surfaceContainer)
80-
.padding(horizontal = 8.dp),
78+
.padding(start = 16.dp)
8179
) {
82-
Text(
83-
text = sample.metadata.title,
80+
Column(
8481
modifier = Modifier
8582
.weight(1f)
86-
.padding(vertical = 16.dp),
87-
fontSize = MaterialTheme.typography.bodyMedium.fontSize,
88-
color = MaterialTheme.colorScheme.onSurface
89-
)
83+
.padding(vertical = 16.dp)
84+
) {
85+
Text(
86+
text = sample.metadata.title,
87+
style = MaterialTheme.typography.bodyLarge,
88+
color = MaterialTheme.colorScheme.onSurface
89+
)
90+
ExpandedDescriptionAnimation(expandedDescription, sample)
91+
}
9092

9193
IconButton(onClick = { expandedDescription = !expandedDescription }) {
9294
Icon(
@@ -97,9 +99,7 @@ private fun TitleAndIconsRow(
9799
}
98100

99101
Column {
100-
IconButton(
101-
onClick = { expandedMenu = !expandedMenu },
102-
) {
102+
IconButton(onClick = { expandedMenu = !expandedMenu }) {
103103
Icon(
104104
imageVector = Icons.Filled.MoreVert,
105105
contentDescription = "More options",
@@ -111,23 +111,23 @@ private fun TitleAndIconsRow(
111111
.height(IntrinsicSize.Max)
112112
.background(MaterialTheme.colorScheme.surfaceContainer),
113113
expanded = expandedMenu,
114-
onDismissRequest = { expandedMenu = false },
114+
onDismissRequest = { expandedMenu = false }
115115
) {
116116
dropdownSampleItems.forEach { option ->
117117
DropdownMenuItem(
118118
text = {
119119
Row(
120120
verticalAlignment = Alignment.CenterVertically,
121-
horizontalArrangement = Arrangement.Start,
122-
modifier = Modifier
123-
.padding(horizontal = 8.dp, vertical = 8.dp),
121+
horizontalArrangement = Arrangement.spacedBy(
122+
space = 8.dp,
123+
alignment = Alignment.CenterHorizontally
124+
)
124125
) {
125126
Icon(
126127
painter = painterResource(id = option.icon),
127128
contentDescription = null,
128129
tint = MaterialTheme.colorScheme.onSurface
129130
)
130-
Spacer(modifier = Modifier.width(8.dp))
131131
Text(
132132
text = option.title,
133133
style = MaterialTheme.typography.bodyMedium,
@@ -136,7 +136,7 @@ private fun TitleAndIconsRow(
136136
}
137137
},
138138
onClick = {
139-
expandedMenu = option.title.lowercase() == "favorite" || option.title.lowercase() == "unfavorite"
139+
expandedMenu = option.title.lowercase().contains("favorite")
140140
option.onClick()
141141
},
142142
contentPadding = ExposedDropdownMenuDefaults.ItemContentPadding,
@@ -145,8 +145,6 @@ private fun TitleAndIconsRow(
145145
}
146146
}
147147
}
148-
149-
ExpandedDescriptionAnimation(expandedDescription, sample)
150148
}
151149

152150
@Composable
@@ -157,23 +155,17 @@ private fun ExpandedDescriptionAnimation(
157155
AnimatedVisibility(
158156
visible = expandedDescription,
159157
enter = expandVertically(),
160-
exit = shrinkVertically(
161-
animationSpec = tween(
162-
durationMillis = 1000
163-
)
164-
)
158+
exit = shrinkVertically()
165159
) {
166160
Row(
167161
verticalAlignment = Alignment.CenterVertically,
168162
horizontalArrangement = Arrangement.Start,
169-
modifier = Modifier
170-
.fillMaxWidth()
171-
.padding(start = 8.dp, bottom = 8.dp, end = 32.dp)
163+
modifier = Modifier.fillMaxWidth().padding(vertical = 8.dp)
172164
) {
173165
Text(
174166
text = sample.metadata.description,
175167
textAlign = TextAlign.Start,
176-
fontSize = MaterialTheme.typography.bodyMedium.fontSize,
168+
style = MaterialTheme.typography.bodyMedium,
177169
color = Color.Gray,
178170
)
179171
}
@@ -189,11 +181,7 @@ fun PreviewSampleCardItem() {
189181
SampleCardItem(
190182
Sample(
191183
name = "Analyze hotspots",
192-
codeFiles = listOf(
193-
CodeFile(
194-
"", ""
195-
)
196-
),
184+
codeFiles = listOf(CodeFile("", "")),
197185
url = "",
198186
readMe = "",
199187
screenshotURL = "",

app/src/main/java/com/esri/arcgismaps/kotlin/sampleviewer/ui/components/SampleViewerTopAppBar.kt

+8-16
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.esri.arcgismaps.kotlin.sampleviewer.ui.components
22

3-
import android.content.Context
43
import androidx.compose.material.icons.Icons
54
import androidx.compose.material.icons.automirrored.outlined.ArrowBack
65
import androidx.compose.material3.ExperimentalMaterial3Api
@@ -10,40 +9,33 @@ import androidx.compose.material3.MaterialTheme
109
import androidx.compose.material3.Text
1110
import androidx.compose.material3.TopAppBar
1211
import androidx.compose.material3.TopAppBarDefaults
13-
import androidx.compose.material3.rememberTopAppBarState
1412
import androidx.compose.runtime.Composable
15-
import androidx.navigation.NavController
13+
import androidx.compose.ui.res.stringResource
1614
import com.esri.arcgismaps.kotlin.sampleviewer.R
1715

1816
@Composable
1917
@OptIn(ExperimentalMaterial3Api::class)
2018
fun SampleViewerTopAppBar(
21-
navController: NavController,
22-
title: String,
23-
context: Context
19+
onBackPressed: () -> Unit,
20+
title: String
2421
) {
25-
26-
val scrollBehavior =
27-
TopAppBarDefaults.exitUntilCollapsedScrollBehavior(rememberTopAppBarState())
2822
TopAppBar(
2923
title = {
3024
Text(
3125
text = title,
32-
color = MaterialTheme.colorScheme.onPrimary,
3326
style = MaterialTheme.typography.titleLarge
3427
)
3528
},
3629
colors = TopAppBarDefaults.topAppBarColors(
37-
containerColor = MaterialTheme.colorScheme.primary,
30+
containerColor = MaterialTheme.colorScheme.primaryContainer,
31+
titleContentColor = MaterialTheme.colorScheme.onPrimaryContainer,
32+
navigationIconContentColor = MaterialTheme.colorScheme.onPrimaryContainer
3833
),
39-
scrollBehavior = scrollBehavior,
4034
navigationIcon = {
41-
IconButton(onClick = { navController.popBackStack() })
42-
{
35+
IconButton(onClick = onBackPressed) {
4336
Icon(
4437
imageVector = Icons.AutoMirrored.Outlined.ArrowBack,
45-
contentDescription = context.getString(R.string.backButton),
46-
tint = MaterialTheme.colorScheme.onPrimary
38+
contentDescription = stringResource(R.string.backButton)
4739
)
4840
}
4941
}

0 commit comments

Comments
 (0)