Initial commit

This commit is contained in:
2024-07-24 13:17:25 +02:00
commit 0e15203725
197 changed files with 5944 additions and 0 deletions

1
core/ui/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
build/

20
core/ui/build.gradle.kts Normal file
View File

@ -0,0 +1,20 @@
@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed
plugins {
alias(libs.plugins.convention.android.library)
alias(libs.plugins.convention.compose)
}
android {
namespace = "dev.adriankuta.pixabay.core.ui"
buildFeatures {
buildConfig = true
}
}
dependencies {
implementation(libs.androidx.ui)
implementation(libs.androidx.ui.graphics)
implementation(libs.androidx.ui.tooling.preview)
implementation(libs.androidx.material3)
debugImplementation(libs.androidx.ui.tooling)
}

View File

@ -0,0 +1,40 @@
package dev.adriankuta.pixabay.core.ui
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.width
import androidx.compose.material3.OutlinedButton
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
@Composable
fun ErrorMessage(
message: String,
onClickRetry: () -> Unit,
modifier: Modifier = Modifier
) {
Row(modifier = modifier, verticalAlignment = Alignment.CenterVertically) {
Text(message, color = Color.Red, modifier = Modifier.weight(1f))
Spacer(Modifier.width(8.dp))
OutlinedButton(
onClick = onClickRetry,
) {
Text(stringResource(R.string.retry), color = Color.Red)
}
}
}
@Preview(
showBackground = true,
backgroundColor = 0xFFFFFF
)
@Composable
internal fun ErrorMessagePreview() {
ErrorMessage("Something went wrong!", {})
}

View File

@ -0,0 +1,18 @@
package dev.adriankuta.pixabay.core.ui
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@Composable
fun Loading(modifier: Modifier = Modifier) {
Box(
contentAlignment = Alignment.Center,
modifier = modifier.fillMaxSize()
) {
CircularProgressIndicator()
}
}

View File

@ -0,0 +1,44 @@
@file:OptIn(ExperimentalMaterial3Api::class)
package dev.adriankuta.pixabay.core.ui
import androidx.compose.foundation.shape.AbsoluteRoundedCornerShape
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Text
import androidx.compose.material3.TextField
import androidx.compose.material3.TextFieldDefaults
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview
@Composable
fun SearchField(
query: String,
onQueryChange: (String) -> Unit,
modifier: Modifier = Modifier,
hint: String? = null
) {
TextField(
value = query,
onValueChange = onQueryChange,
modifier = modifier,
placeholder = {
if (hint != null) {
Text(text = hint)
}
},
colors = TextFieldDefaults.colors(
focusedIndicatorColor = Color.Transparent,
unfocusedIndicatorColor = Color.Transparent,
disabledIndicatorColor = Color.Transparent
),
shape = AbsoluteRoundedCornerShape(50)
)
}
@Preview
@Composable
internal fun SearchFieldPreview() {
SearchField(query = "Cats", onQueryChange = {})
}

View File

@ -0,0 +1,26 @@
package dev.adriankuta.pixabay.core.ui
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.width
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
@Composable
fun StatsItem(
icon: @Composable () -> Unit,
text: String,
modifier: Modifier = Modifier
) {
Row(
modifier,
verticalAlignment = Alignment.CenterVertically
) {
icon()
Spacer(Modifier.width(4.dp))
Text(text)
}
}

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:pathData="M280,560h400q17,0 28.5,-11.5T720,520q0,-17 -11.5,-28.5T680,480L280,480q-17,0 -28.5,11.5T240,520q0,17 11.5,28.5T280,560ZM280,440h400q17,0 28.5,-11.5T720,400q0,-17 -11.5,-28.5T680,360L280,360q-17,0 -28.5,11.5T240,400q0,17 11.5,28.5T280,440ZM280,320h400q17,0 28.5,-11.5T720,280q0,-17 -11.5,-28.5T680,240L280,240q-17,0 -28.5,11.5T240,280q0,17 11.5,28.5T280,320ZM160,720q-33,0 -56.5,-23.5T80,640v-480q0,-33 23.5,-56.5T160,80h640q33,0 56.5,23.5T880,160v623q0,27 -24.5,37.5T812,812l-92,-92L160,720ZM754,640 L800,685v-525L160,160v480h594ZM160,640v-480,480Z"
android:fillColor="#5f6368"/>
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:pathData="M480,623q-8,0 -15,-2.5t-13,-8.5L308,468q-12,-12 -11.5,-28t11.5,-28q12,-12 28.5,-12.5T365,411l75,75v-286q0,-17 11.5,-28.5T480,160q17,0 28.5,11.5T520,200v286l75,-75q12,-12 28.5,-11.5T652,412q11,12 11.5,28T652,468L508,612q-6,6 -13,8.5t-15,2.5ZM240,800q-33,0 -56.5,-23.5T160,720v-80q0,-17 11.5,-28.5T200,600q17,0 28.5,11.5T240,640v80h480v-80q0,-17 11.5,-28.5T760,600q17,0 28.5,11.5T800,640v80q0,33 -23.5,56.5T720,800L240,800Z"
android:fillColor="#5f6368"/>
</vector>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="retry">Retry</string>
<string name="something_went_wrong">Something went wrong!</string>
</resources>