commit 267ed3e06a8d0307779cb3e0e425410fdec4face Author: SalatielGenol Date: Thu Dec 15 09:20:48 2022 +0100 Estructura inicial diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..878c2cd --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +*.iml +.gradle +/local.properties +.idea +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..335e90d --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,71 @@ +plugins { + id 'com.android.application' + id 'org.jetbrains.kotlin.android' +} + +android { + namespace 'es.genol.genol_salatiel_ex1tdist' + compileSdk 33 + + defaultConfig { + applicationId "es.genol.genol_salatiel_ex1tdist" + minSdk 24 + targetSdk 33 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + vectorDrawables { + useSupportLibrary true + } + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = '1.8' + } + buildFeatures { + compose true + } + composeOptions { + kotlinCompilerExtensionVersion '1.1.1' + } + packagingOptions { + resources { + excludes += '/META-INF/{AL2.0,LGPL2.1}' + } + } +} + +dependencies { + + implementation 'androidx.core:core-ktx:1.9.0' + implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1' + implementation 'androidx.activity:activity-compose:1.6.1' + //noinspection GradleDependency + implementation "androidx.compose.ui:ui:$compose_ui_version" + //noinspection GradleDependency + implementation "androidx.compose.ui:ui-tooling-preview:$compose_ui_version" + implementation 'androidx.compose.material:material:1.3.1' + implementation "androidx.navigation:navigation-compose:2.5.3" + implementation "io.coil-kt:coil-compose:2.2.2" + + testImplementation 'junit:junit:4.13.2' + androidTestImplementation 'androidx.test.ext:junit:1.1.4' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0' + //noinspection GradleDependency + androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_ui_version" + //noinspection GradleDependency + debugImplementation "androidx.compose.ui:ui-tooling:$compose_ui_version" + //noinspection GradleDependency + debugImplementation "androidx.compose.ui:ui-test-manifest:$compose_ui_version" +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/app/src/androidTest/java/es/genol/genol_salatiel_ex1tdist/ExampleInstrumentedTest.kt b/app/src/androidTest/java/es/genol/genol_salatiel_ex1tdist/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..9b7f18b --- /dev/null +++ b/app/src/androidTest/java/es/genol/genol_salatiel_ex1tdist/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package es.genol.genol_salatiel_ex1tdist + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("es.genol.genol_salatiel_ex1tdist", appContext.packageName) + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..555ddfe --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/es/genol/genol_salatiel_ex1tdist/MainActivity.kt b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/MainActivity.kt new file mode 100644 index 0000000..314b5c2 --- /dev/null +++ b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/MainActivity.kt @@ -0,0 +1,18 @@ +package es.genol.genol_salatiel_ex1tdist + +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import es.genol.genol_salatiel_ex1tdist.ui.screens.Navigation +import es.genol.genol_salatiel_ex1tdist.ui.theme.Genol_Salatiel_ex1tDistTheme + +class MainActivity : ComponentActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContent { + Genol_Salatiel_ex1tDistTheme { + Navigation() + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejemplosCodigo/Arragements.kt b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejemplosCodigo/Arragements.kt new file mode 100644 index 0000000..27af75d --- /dev/null +++ b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejemplosCodigo/Arragements.kt @@ -0,0 +1,106 @@ +package es.genol.genol_salatiel_ex1tdist.ejemplosCodigo + +import android.annotation.SuppressLint +import androidx.compose.foundation.layout.* +import androidx.compose.material.Button +import androidx.compose.material.Scaffold +import androidx.compose.material.Text +import androidx.compose.material.TopAppBar +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.BiasAlignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview + +/* +Para poder ejecutar la funcion composable directamente desde aqui, sin ejecutar la aplicacion +entera se necesita poner la etiqueta preview y cambiar el atributo exported a true en su +elemento de AndroidManifest.xml +*/ + +@SuppressLint("UnusedMaterialScaffoldPaddingParameter") +@Preview +@Composable +fun EjemploArragementScaffoldSimple(){ + /* + Scaffold puede tener barra superior y barra inferior entre otras cosas, para ello hay que + pasarle las funciones composable adecuadas como argumento en la llamada. + */ + Scaffold(topBar = { + TopAppBar( + title = { Text(text = "My Application") }) + }){ + Column( + modifier = Modifier + .fillMaxSize() + .padding(it), + verticalArrangement = Arrangement.SpaceEvenly + ) { + Row( + modifier = Modifier + .fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + /* + SpaceEvenly divide el espacio que hay entre los elemento a partes iguales, + por lo que quedan simetricos + */ + horizontalArrangement = Arrangement.SpaceEvenly + ) { + Button(onClick = { /*TODO*/ }) { Text(text = "BUTTON") } + Text(text = "S.Evenly") + } + Row( + modifier = Modifier + .fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + /* + SpaceBetween divide el espacio disponible entre los elementos, pero fijando + los extremos al limite del espacio disponible + */ + horizontalArrangement = Arrangement.SpaceBetween + ) { + Button(onClick = { /*TODO*/ }) { Text(text = "BUTTON") } + Text(text = "S.Between") + } + Row( + modifier = Modifier + .fillMaxWidth(), + verticalAlignment = Alignment.Bottom, + /* + Center deja los elementos en bloque centrados dentro del espacio disponible + */ + horizontalArrangement = Arrangement.Center + ) { + Button(onClick = { /*TODO*/ }) { Text(text = "BUTTON") } + Text(text = "Center") + } + /* + BiasAlignment permite definir un desplazamiento de un bloque de elementos, aceptando + valores decimales entre -1 y 1, donde el 0 seria el centro del espacio disponible. + + Se puede definir dentro de un alignment o de un arrangement + */ + /*Column( + modifier = Modifier + .fillMaxWidth(), + horizontalAlignment = BiasAlignment.Horizontal(-0.5f) + ) {*/ + Row(modifier = Modifier + .fillMaxWidth(), + horizontalArrangement = Arrangement.aligned(BiasAlignment.Horizontal(-0.5f))) { + Button(onClick = { /*TODO*/ }) { Text(text = "BUTTON") } + Text(text = "Bias") + } + Row( + modifier = Modifier + .fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween + ) { + Button(onClick = { /*TODO*/ }) { Text(text = "BUTTON") } + Text(text = "S.Between con un Spacer a 0dp") + Spacer(Modifier) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejemplosCodigo/Orientation.kt b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejemplosCodigo/Orientation.kt new file mode 100644 index 0000000..d3dbcd5 --- /dev/null +++ b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejemplosCodigo/Orientation.kt @@ -0,0 +1,204 @@ +package es.genol.genol_salatiel_ex1tdist.ejemplosCodigo + + +import android.content.res.Configuration +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.clickable +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.layout.* +import androidx.compose.material.ContentAlpha +import androidx.compose.material.Icon +import androidx.compose.material.LocalContentAlpha +import androidx.compose.material.Text +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.rounded.* +import androidx.compose.material.ripple.rememberRipple +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalConfiguration +import androidx.compose.ui.semantics.Role +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp + +@Preview +@Composable +fun EjemploPortraitLandScape(){ + /* + Para controlar la composicion de los elementos en pantalla en funcion de la orientacion del + dispositivo se puede usar la propiedad orientation de la configuracion local. + */ + when (LocalConfiguration.current.orientation) { + Configuration.ORIENTATION_PORTRAIT -> { + P4Portrait() + } + Configuration.ORIENTATION_LANDSCAPE -> { + P4Landscape() + } + else -> { + /* TODO() */ + } + } +} + +@Composable +fun P4Portrait(){ + Column( + modifier = Modifier.fillMaxSize(), + verticalArrangement = Arrangement.SpaceBetween, + ) { + Row(modifier = Modifier + .weight(0.07f) + .background(Color.Green) + .fillMaxWidth() + .padding(horizontal = 10.dp), + horizontalArrangement = Arrangement.SpaceBetween + ) { + IconosSuperiores(modifier = Modifier + .fillMaxHeight() + .aspectRatio(0.5f)) + } + Column(modifier = Modifier + .weight(0.76f) + .background(Color.Cyan) + .fillMaxWidth(), + verticalArrangement = Arrangement.SpaceEvenly) { + ContenidoCentral(orientation = "Portrait") + } + Row(modifier = Modifier + .weight(0.07f) + .background(Color.Yellow) + .fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceEvenly) { + IconosInferiores(modifier = Modifier + .fillMaxHeight() + .aspectRatio(0.7f)) + } + } +} + +@Composable +fun P4Landscape(){ + Row(modifier = Modifier.fillMaxSize()) { + Box(modifier = Modifier + .weight(0.07f) + .fillMaxHeight() + .background(Color.Green), + contentAlignment = Alignment.Center) { + Column(modifier = Modifier + .fillMaxHeight(0.6f), + verticalArrangement = Arrangement.SpaceAround) { + IconosInferiores(modifier = Modifier + .fillMaxWidth() + .aspectRatio(1.7f)) + } + + Column(modifier = Modifier + .fillMaxHeight() + .padding(vertical = 10.dp), + verticalArrangement = Arrangement.SpaceBetween) { + IconosSuperiores(modifier = Modifier + .fillMaxWidth() + .aspectRatio(1.7f)) + } + } + Column(modifier = Modifier + .weight(0.93f) + .fillMaxSize() + .background(Color.Cyan), + verticalArrangement = Arrangement.SpaceEvenly) { + ContenidoCentral(orientation = "Landscape") + } + } +} + +@Composable +fun IconosSuperiores(modifier: Modifier = Modifier){ + Icon(Icons.Rounded.Menu, contentDescription = "+Accesibilidad", modifier) + Icon(Icons.Rounded.Settings, contentDescription = "+Accesibilidad", modifier) +} + +@Composable +fun IconosInferiores(modifier: Modifier = Modifier){ + Icon(Icons.Rounded.Add, contentDescription = "+Accesibilidad", modifier) + Icon(Icons.Rounded.PlayArrow, contentDescription = "+Accesibilidad", modifier) + MyIconButton(onClick = { /*TODO*/ }) { + Icon(Icons.Rounded.Person, contentDescription = "+Accesibilidad", modifier) + } +} + +@Composable +fun ContenidoCentral(orientation: String){ + var numero = 1 + when(orientation) { + "Portrait" -> { + repeat(times = 3) { + Row(Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceEvenly) { + repeat(times = 2) { + Box( + Modifier + .clickable { /* TODO() */ } + .size(150.dp) + .border(width = 1.dp, color = Color.Black), + contentAlignment = Alignment.Center, + ) { + TextoBoxes(numero = numero++) + } + } + } + } + } + "Landscape" -> { + repeat(times = 6) { + Row(modifier = Modifier + .padding(start = 15.dp, end = 10.dp) + .border(width = 1.dp, color = Color.Black)) { + Box( + modifier = Modifier + .clickable { /* TODO() */ } + .fillMaxWidth() + .height(45.dp), + contentAlignment = Alignment.Center + ) { + TextoBoxes(numero = numero++) + } + } + } + } + } +} + +@Composable +private fun TextoBoxes(numero: Int){ + Text(text = numero.toString()) +} +/* +En espera de entender la sobrecarga de elementos de las funciones de la api he copiado +el codigo del IconButton para quitarle el contentalign +*/ +@Composable +fun MyIconButton( + onClick: () -> Unit, + modifier: Modifier = Modifier, + enabled: Boolean = true, + interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, + content: @Composable () -> Unit +){ + Box( + modifier = modifier + .clickable( + onClick = onClick, + enabled = enabled, + role = Role.Button, + interactionSource = interactionSource, + indication = rememberRipple(bounded = false, radius = 24.dp) + ) + ) { + val contentAlpha = if (enabled) LocalContentAlpha.current else ContentAlpha.disabled + CompositionLocalProvider(LocalContentAlpha provides contentAlpha, content = content) + } +} \ No newline at end of file diff --git a/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejemplosCodigo/Scaffold.kt b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejemplosCodigo/Scaffold.kt new file mode 100644 index 0000000..de07de6 --- /dev/null +++ b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejemplosCodigo/Scaffold.kt @@ -0,0 +1,57 @@ +package es.genol.genol_salatiel_ex1tdist.ejemplosCodigo + + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.material.* +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Add +import androidx.compose.material.icons.rounded.Menu +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview + +@Preview +@Composable +fun EjemploScaffoldCompleto(){ + Scaffold( + topBar = { TopAppBar(title = {Text(text = "ScaffoldApp")}, + navigationIcon = { IconoMenu() } + )}, + bottomBar = { + IconosBottomBar() + }) { + Box( + modifier = Modifier + .fillMaxSize() + .padding(it), + contentAlignment = Alignment.Center + ){ + Text(text = "Home Screen") + } + } +} + +@Composable +fun IconoMenu(){ + IconButton(onClick = { /*TODO*/ }) { + Icon(Icons.Rounded.Menu, contentDescription = null) + } +} + +@Composable +fun IconosBottomBar(){ + BottomAppBar { + BottomNavigation { + repeat(2){ + BottomNavigationItem( + selected = false, + onClick = { /* TODO() */ }, + icon = { Icon(Icons.Default.Add, contentDescription = null) } + ) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejemplosCodigo/Textos.kt b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejemplosCodigo/Textos.kt new file mode 100644 index 0000000..c5a17a5 --- /dev/null +++ b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejemplosCodigo/Textos.kt @@ -0,0 +1,148 @@ +package es.genol.genol_salatiel_ex1tdist.ejemplosCodigo + +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.material.Icon +import androidx.compose.material.Text +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Email +import androidx.compose.material.icons.filled.Home +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.layout.ContentScale +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.font.FontStyle +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import coil.compose.AsyncImage +import es.genol.genol_salatiel_ex1tdist.R + +@Preview(showSystemUi = true) +@Composable +fun TextosOrganizados(){ + LazyColumn(modifier = Modifier.padding(10.dp)) { + item { ListadoTextos() } + } +} + +/* +En esta funcion composable se puede ver como se anida el contenido que se le pasa por +parametro. +*/ + +@Composable +fun ContenedorContenido( + modifier: Modifier = Modifier, + alineacion: Alignment = Alignment.TopStart, + content: @Composable (() -> Unit)? = null){ + Box(modifier = Modifier + .height(100.dp) + .fillMaxWidth() + .border(1.dp, Color.Gray) + .then(modifier), + contentAlignment = alineacion) { + if (content != null){ + content() + } + } + /* + Esto de meter un spacer es una chapuza, hay que revisar bien como funciona + */ + Spacer(modifier = Modifier.height(10.dp)) +} + +@Composable +fun ListadoTextos(){ + //Texto centrado mediante ocupacion de toda la linea y la propiedad textAlign + ContenedorContenido { + Text( + modifier = Modifier + .fillMaxWidth() + .background(Color.Gray), + text = "Texto centrado", + textAlign = TextAlign.Center, + ) + } + + //Texto centrado mediante la alineacion de contenido del composable padre (Box) + ContenedorContenido( + alineacion = Alignment.TopCenter + ) { + Text( + modifier = Modifier.background(Color.Gray), + text = "Texto centrado", + ) + } + + //Texto con cambios de estilo !!OJO al tamaño del texto que va en SP y no en DP + ContenedorContenido( + alineacion = Alignment.Center + ) { + Text( + modifier = Modifier.background(Color.Gray), + text = "Texto centrado", + fontSize = 36.sp, + fontStyle = FontStyle.Italic, + fontWeight = FontWeight.ExtraBold, + ) + } + + //Utilizacion de iconos + ContenedorContenido { + Box(modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.BottomEnd){ + Icon( + imageVector = Icons.Default.Email, + contentDescription = null, + modifier = Modifier.size(70.dp), + tint = Color.Red, + ) + } + Box(modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.TopStart) { + Icon( + imageVector = Icons.Default.Home, + contentDescription = null, + ) + } + } + + //Utilizacion de imagenes cargadas desde dispositivo + ContenedorContenido( + alineacion = Alignment.TopEnd + ) { + Image( + painter = painterResource(id = R.drawable.kirby), + modifier = Modifier.height(75.dp), + //contentScale = ContentScale.Crop, + contentDescription = null, + ) + } + + /* + Utilizacion de imagenes cargadas provenientes de internet + Para ello se necesita añadir una libreria al build.gradle: + - implementation("io.coil-kt:coil-compose:2.2.2") + + Y el permiso de uso de internet en el AndroidManifest.xml + - + */ + ContenedorContenido( + alineacion = Alignment.BottomStart + ) { + AsyncImage( + model = "https://images-assets.nasa.gov/image/PIA25590/PIA25590~medium.jpg", + //model = "https://www.genol.es/avatar_cuadrado_xbytes.jpg", + contentScale = ContentScale.Crop, + contentDescription = null, + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejercicios/Ejercicio1.kt b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejercicios/Ejercicio1.kt new file mode 100644 index 0000000..5309260 --- /dev/null +++ b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejercicios/Ejercicio1.kt @@ -0,0 +1,14 @@ +package es.genol.genol_salatiel_ex1tdist.ejercicios + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview + +@Preview +@Composable +fun Ejercicio1(){ + +} \ No newline at end of file diff --git a/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejercicios/Ejercicio2.kt b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejercicios/Ejercicio2.kt new file mode 100644 index 0000000..7984a4a --- /dev/null +++ b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejercicios/Ejercicio2.kt @@ -0,0 +1,10 @@ +package es.genol.genol_salatiel_ex1tdist.ejercicios + +import androidx.compose.runtime.Composable +import androidx.compose.ui.tooling.preview.Preview + +@Preview +@Composable +fun Ejercicio2(){ + +} \ No newline at end of file diff --git a/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejercicios/Ejercicio3.kt b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejercicios/Ejercicio3.kt new file mode 100644 index 0000000..a67e327 --- /dev/null +++ b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejercicios/Ejercicio3.kt @@ -0,0 +1,10 @@ +package es.genol.genol_salatiel_ex1tdist.ejercicios + +import androidx.compose.runtime.Composable +import androidx.compose.ui.tooling.preview.Preview + +@Preview +@Composable +fun Ejercicio3(){ + +} \ No newline at end of file diff --git a/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejercicios/Ejercicio4.kt b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejercicios/Ejercicio4.kt new file mode 100644 index 0000000..373fda4 --- /dev/null +++ b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejercicios/Ejercicio4.kt @@ -0,0 +1,10 @@ +package es.genol.genol_salatiel_ex1tdist.ejercicios + +import androidx.compose.runtime.Composable +import androidx.compose.ui.tooling.preview.Preview + +@Preview +@Composable +fun Ejercicio4(){ + +} \ No newline at end of file diff --git a/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejercicios/Ejercicio5.kt b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejercicios/Ejercicio5.kt new file mode 100644 index 0000000..c5138a8 --- /dev/null +++ b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejercicios/Ejercicio5.kt @@ -0,0 +1,10 @@ +package es.genol.genol_salatiel_ex1tdist.ejercicios + +import androidx.compose.runtime.Composable +import androidx.compose.ui.tooling.preview.Preview + +@Preview +@Composable +fun Ejercicio5(){ + +} \ No newline at end of file diff --git a/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejercicios/Ejercicio6.kt b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejercicios/Ejercicio6.kt new file mode 100644 index 0000000..fbc1490 --- /dev/null +++ b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejercicios/Ejercicio6.kt @@ -0,0 +1,10 @@ +package es.genol.genol_salatiel_ex1tdist.ejercicios + +import androidx.compose.runtime.Composable +import androidx.compose.ui.tooling.preview.Preview + +@Preview +@Composable +fun Ejercicio6(){ + +} \ No newline at end of file diff --git a/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejercicios/Ejercicio7.kt b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejercicios/Ejercicio7.kt new file mode 100644 index 0000000..eb56217 --- /dev/null +++ b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ejercicios/Ejercicio7.kt @@ -0,0 +1,10 @@ +package es.genol.genol_salatiel_ex1tdist.ejercicios + +import androidx.compose.runtime.Composable +import androidx.compose.ui.tooling.preview.Preview + +@Preview +@Composable +fun Ejercicio7(){ + +} \ No newline at end of file diff --git a/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ui/screens/MenuScreen.kt b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ui/screens/MenuScreen.kt new file mode 100644 index 0000000..95dd22e --- /dev/null +++ b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ui/screens/MenuScreen.kt @@ -0,0 +1,72 @@ +package es.genol.genol_salatiel_ex1tdist.ui.screens + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.Button +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.navigation.NavController + +/* +Cada una de estas funciones va a implementar una pantalla diferente, con su propia composicion +de elementos y distribucion especifica +*/ + +@Composable +fun MenuScreen(navController: NavController){ +/* +Esta es la pantalla principal, la cual alberga un menu con las llamadas a las distintas screens +*/ + Column(modifier = Modifier.fillMaxSize()) { + Row( + Modifier + .background(MaterialTheme.colors.primary) + .weight(0.07f) + .fillMaxSize(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.Center, + ) { + Text(text = "Menú de navegación principal con NavHost", color = MaterialTheme.colors.onSecondary) + } + Row( + modifier = Modifier + .background(MaterialTheme.colors.background) + .weight(1f) + .fillMaxSize(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.Center, + ) { + Column(modifier = Modifier.verticalScroll(rememberScrollState()), horizontalAlignment = Alignment.CenterHorizontally) { + Button(onClick = {navController.navigate(route = Ejercicios.Ejercicio1.ruta)}) { + Text(text = "Ejercicio 1") + } + Button(onClick = {navController.navigate(route = Ejercicios.Ejercicio2.ruta)}) { + Text(text = "Ejercicio 2") + } + Button(onClick = {navController.navigate(route = Ejercicios.Ejercicio3.ruta)}) { + Text(text = "Ejercicio 3") + } + Button(onClick = {navController.navigate(route = Ejercicios.Ejercicio4.ruta)}) { + Text(text = "Ejercicio 4") + } + Button(onClick = {navController.navigate(route = Ejercicios.Ejercicio5.ruta)}) { + Text(text = "Ejercicio 5") + } + Button(onClick = {navController.navigate(route = Ejercicios.Ejercicio6.ruta)}) { + Text(text = "Ejercicio 6") + } + Button(onClick = {navController.navigate(route = Ejercicios.Ejercicio7.ruta)}) { + Text(text = "Ejercicio 7") + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ui/screens/Navigation.kt b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ui/screens/Navigation.kt new file mode 100644 index 0000000..2155d4a --- /dev/null +++ b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ui/screens/Navigation.kt @@ -0,0 +1,36 @@ +package es.genol.genol_salatiel_ex1tdist.ui.screens + +import androidx.compose.runtime.Composable +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.navigation.compose.rememberNavController +import es.genol.genol_salatiel_ex1tdist.ejercicios.* + +@Composable +fun Navigation(){ + val navController = rememberNavController() + NavHost(navController, startDestination = UiScreens.MenuScreen.ruta){ + composable(route = UiScreens.MenuScreen.ruta) { MenuScreen(navController) } + composable(route = Ejercicios.Ejercicio1.ruta) { Ejercicio1() } + composable(route = Ejercicios.Ejercicio2.ruta) { Ejercicio2() } + composable(route = Ejercicios.Ejercicio3.ruta) { Ejercicio3() } + composable(route = Ejercicios.Ejercicio4.ruta) { Ejercicio4() } + composable(route = Ejercicios.Ejercicio5.ruta) { Ejercicio5() } + composable(route = Ejercicios.Ejercicio6.ruta) { Ejercicio6() } + composable(route = Ejercicios.Ejercicio7.ruta) { Ejercicio7() } + } +} + +sealed class UiScreens(val ruta: String){ + object MenuScreen: UiScreens("MenuScreen") +} + +sealed class Ejercicios(val ruta: String){ + object Ejercicio1: Ejercicios("Ejercicio1") + object Ejercicio2: Ejercicios("Ejercicio2") + object Ejercicio3: Ejercicios("Ejercicio3") + object Ejercicio4: Ejercicios("Ejercicio4") + object Ejercicio5: Ejercicios("Ejercicio5") + object Ejercicio6: Ejercicios("Ejercicio6") + object Ejercicio7: Ejercicios("Ejercicio7") +} \ No newline at end of file diff --git a/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ui/theme/Color.kt b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ui/theme/Color.kt new file mode 100644 index 0000000..e4069ab --- /dev/null +++ b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ui/theme/Color.kt @@ -0,0 +1,12 @@ +package es.genol.genol_salatiel_ex1tdist.ui.theme + +import androidx.compose.ui.graphics.Color + +val Purple700 = Color(0xFF3700B3) +val Teal200 = Color(0xFF03DAC5) +val Yellow = Color(0xFFE4D77C) +val RedWine = Color(0xFF7E212B) +val PantoneLightGray = Color(0xFFD9D7C8) +val PantoneSloganDarkGray = Color(0xFF40444F) +val PantoneProcessBlue = Color(0xFF0085CA) +val PantoneClassicGreen = Color(0xFF009F53) \ No newline at end of file diff --git a/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ui/theme/Shape.kt b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ui/theme/Shape.kt new file mode 100644 index 0000000..5229a33 --- /dev/null +++ b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ui/theme/Shape.kt @@ -0,0 +1,11 @@ +package es.genol.genol_salatiel_ex1tdist.ui.theme + +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.Shapes +import androidx.compose.ui.unit.dp + +val Shapes = Shapes( + small = RoundedCornerShape(4.dp), + medium = RoundedCornerShape(4.dp), + large = RoundedCornerShape(0.dp) +) \ No newline at end of file diff --git a/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ui/theme/Theme.kt b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ui/theme/Theme.kt new file mode 100644 index 0000000..8a5250f --- /dev/null +++ b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ui/theme/Theme.kt @@ -0,0 +1,58 @@ +package es.genol.genol_salatiel_ex1tdist.ui.theme + +import android.annotation.SuppressLint +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.material.MaterialTheme +import androidx.compose.material.darkColors +import androidx.compose.material.lightColors +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.Color + +@SuppressLint("ConflictingOnColor") +private val DarkColorPalette = darkColors( + primary = RedWine, + primaryVariant = Purple700, + secondary = Teal200, + background = PantoneSloganDarkGray, + surface = RedWine, + onPrimary = PantoneClassicGreen, + onSecondary = Color.White, +) + +private val LightColorPalette = lightColors( + primary = Yellow, + primaryVariant = Purple700, + secondary = Teal200, + background = PantoneLightGray, + surface = PantoneLightGray, + onPrimary = PantoneProcessBlue, + onSecondary = Color.Black, + + /* Other default colors to override + background = Color.White, + surface = Color.White, + onPrimary = Color.White, + onSecondary = Color.Black, + onBackground = Color.Black, + onSurface = Color.Black, + */ +) + +@Composable +fun Genol_Salatiel_ex1tDistTheme( + darkTheme: Boolean = isSystemInDarkTheme(), + content: @Composable () -> Unit +) { + val colors = if (darkTheme) { + DarkColorPalette + } else { + LightColorPalette + } + + MaterialTheme( + colors = colors, + typography = Typography, + shapes = Shapes, + content = content + ) +} \ No newline at end of file diff --git a/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ui/theme/Type.kt b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ui/theme/Type.kt new file mode 100644 index 0000000..6b35949 --- /dev/null +++ b/app/src/main/java/es/genol/genol_salatiel_ex1tdist/ui/theme/Type.kt @@ -0,0 +1,28 @@ +package es.genol.genol_salatiel_ex1tdist.ui.theme + +import androidx.compose.material.Typography +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.sp + +// Set of Material typography styles to start with +val Typography = Typography( + body1 = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 16.sp + ) + /* Other default text styles to override + button = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.W500, + fontSize = 14.sp + ), + caption = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 12.sp + ) + */ +) \ No newline at end of file diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-v24/kirby.png b/app/src/main/res/drawable-v24/kirby.png new file mode 100644 index 0000000..d2003b3 Binary files /dev/null and b/app/src/main/res/drawable-v24/kirby.png differ diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..eca70cf --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..eca70cf --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 0000000..c209e78 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 0000000..b2dfe3d Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/app/src/main/res/mipmap-mdpi/ic_launcher.webp new file mode 100644 index 0000000..4f0f1d6 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp new file mode 100644 index 0000000..62b611d Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 0000000..948a307 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..1b9a695 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp new file mode 100644 index 0000000..28d4b77 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..9287f50 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp new file mode 100644 index 0000000..aa7d642 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..9126ae3 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..f8c6127 --- /dev/null +++ b/app/src/main/res/values/colors.xml @@ -0,0 +1,10 @@ + + + #FFBB86FC + #FF6200EE + #FF3700B3 + #FF03DAC5 + #FF018786 + #FF000000 + #FFFFFFFF + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..6575c9b --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + Genol_Salatiel_ex1tDist + \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml new file mode 100644 index 0000000..90c8542 --- /dev/null +++ b/app/src/main/res/values/themes.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/backup_rules.xml b/app/src/main/res/xml/backup_rules.xml new file mode 100644 index 0000000..fa0f996 --- /dev/null +++ b/app/src/main/res/xml/backup_rules.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/data_extraction_rules.xml b/app/src/main/res/xml/data_extraction_rules.xml new file mode 100644 index 0000000..9ee9997 --- /dev/null +++ b/app/src/main/res/xml/data_extraction_rules.xml @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/test/java/es/genol/genol_salatiel_ex1tdist/ExampleUnitTest.kt b/app/src/test/java/es/genol/genol_salatiel_ex1tdist/ExampleUnitTest.kt new file mode 100644 index 0000000..dcdf85e --- /dev/null +++ b/app/src/test/java/es/genol/genol_salatiel_ex1tdist/ExampleUnitTest.kt @@ -0,0 +1,17 @@ +package es.genol.genol_salatiel_ex1tdist + +import org.junit.Test + +import org.junit.Assert.* + +/** + * Example local unit test, which will execute on the development machine (host). + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +class ExampleUnitTest { + @Test + fun addition_isCorrect() { + assertEquals(4, 2 + 2) + } +} \ No newline at end of file diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..15dff9e --- /dev/null +++ b/build.gradle @@ -0,0 +1,10 @@ +buildscript { + ext { + compose_ui_version = '1.1.1' + } +}// Top-level build file where you can add configuration options common to all sub-projects/modules. +plugins { + id 'com.android.application' version '7.3.1' apply false + id 'com.android.library' version '7.3.1' apply false + id 'org.jetbrains.kotlin.android' version '1.6.10' apply false +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..3c5031e --- /dev/null +++ b/gradle.properties @@ -0,0 +1,23 @@ +# Project-wide Gradle settings. +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app's APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true +# Kotlin code style for this project: "official" or "obsolete": +kotlin.code.style=official +# Enables namespacing of each library's R class so that its R class includes only the +# resources declared in the library itself and none from the library's dependencies, +# thereby reducing the size of the R class for that library +android.nonTransitiveRClass=true \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..e708b1c Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..da63959 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Tue Dec 13 22:49:53 CET 2022 +distributionBase=GRADLE_USER_HOME +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip +distributionPath=wrapper/dists +zipStorePath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..4f906e0 --- /dev/null +++ b/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..107acd3 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..c2d6c10 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,16 @@ +pluginManagement { + repositories { + gradlePluginPortal() + google() + mavenCentral() + } +} +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + } +} +rootProject.name = "Genol_Salatiel_ex1tDist" +include ':app'