diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 23a89bbb6ca829a47211d20c8b11960088ea4950..b617266ab6a61e3df316b4496b5649099b08a491 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -5,6 +5,7 @@ <option name="linkedExternalProjectsSettings"> <GradleProjectSettings> <option name="testRunner" value="PLATFORM" /> + <option name="disableWrapperSourceDistributionNotification" value="true" /> <option name="distributionType" value="DEFAULT_WRAPPED" /> <option name="externalProjectPath" value="$PROJECT_DIR$" /> <option name="gradleJvm" value="1.8" /> diff --git a/app/build.gradle b/app/build.gradle index e54929db1dfb64705c6fd7dcee8da1e326aedc79..dacfffbdac50de8adb948c4e6689af532fa8a3f8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,6 +1,7 @@ plugins { id 'com.android.application' id 'kotlin-android' + id 'org.jetbrains.kotlin.plugin.serialization' version '1.3.72' // vérifier que votre version de kotlin est la même } android { @@ -28,7 +29,7 @@ android { targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { - jvmTarget = '1.8' + jvmTarget = JavaVersion.VERSION_1_8.toString() } } @@ -47,4 +48,26 @@ dependencies { androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0' + // AndroidX - KTX + implementation 'androidx.preference:preference-ktx:1.1.1' + implementation 'androidx.activity:activity-ktx:1.2.0-beta01' + implementation 'androidx.fragment:fragment-ktx:1.3.0-beta01' + implementation 'androidx.core:core-ktx:1.3.2' + + // Retrofit + implementation 'com.squareup.retrofit2:retrofit:2.9.0' + implementation 'com.squareup.okhttp3:logging-interceptor:4.9.0' + + // KotlinX Serialization + implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.0.1" + implementation 'com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.8.0' + + // Coroutines + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9" + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9" + + // Lifecycle + implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" + implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.2.0" + implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0" } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8f40618e6b0a9b18cace0f38ca53d55e9ec41c06..9e0e412e2919ca1228258d45c6b8fda38472dcc9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.clemhaowen.dm_td2"> - + <uses-permission android:name="android.permission.INTERNET" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" diff --git a/app/src/main/java/com/clemhaowen/dm_td2/network/Api.kt b/app/src/main/java/com/clemhaowen/dm_td2/network/Api.kt new file mode 100644 index 0000000000000000000000000000000000000000..cfb6b24553d3a9abeafcb1c752e53e493115bfce --- /dev/null +++ b/app/src/main/java/com/clemhaowen/dm_td2/network/Api.kt @@ -0,0 +1,47 @@ +package com.clemhaowen.dm_td2.network + +import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory +import kotlinx.serialization.json.Json +import okhttp3.MediaType.Companion.toMediaType +import okhttp3.OkHttpClient +import retrofit2.Retrofit + +object Api { + // constantes qui serviront à faire les requêtes + private const val BASE_URL = "https://android-tasks-api.herokuapp.com/api/" + private const val TOKEN = "eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoyOTAsImV4cCI6MTYzODg4NTIyMX0.NSGoVvI5U18v4xMHB-_SDFArkT-Exz8S-aXp1ptqNb4" + + // on construit une instance de parseur de JSON: + private val jsonSerializer = Json { + ignoreUnknownKeys = true + coerceInputValues = true + } + + // instance de convertisseur qui parse le JSON renvoyé par le serveur: + private val converterFactory = + jsonSerializer.asConverterFactory("application/json".toMediaType()) + + // client HTTP + private val okHttpClient by lazy { + OkHttpClient.Builder() + .addInterceptor { chain -> + // intercepteur qui ajoute le `header` d'authentification avec votre token: + val newRequest = chain.request().newBuilder() + .addHeader("Authorization", "Bearer $TOKEN") + .build() + chain.proceed(newRequest) + } + .build() + } + + // permettra d'implémenter les services que nous allons créer: + private val retrofit = Retrofit.Builder() + .baseUrl(BASE_URL) + .client(okHttpClient) + .addConverterFactory(converterFactory) + .build() + + val userService: UserService by lazy { + retrofit.create(UserService::class.java) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/clemhaowen/dm_td2/network/UserInfo.kt b/app/src/main/java/com/clemhaowen/dm_td2/network/UserInfo.kt new file mode 100644 index 0000000000000000000000000000000000000000..aa416ff46088ea288a31914e0a4120faa68d0886 --- /dev/null +++ b/app/src/main/java/com/clemhaowen/dm_td2/network/UserInfo.kt @@ -0,0 +1,14 @@ +package com.clemhaowen.dm_td2.network + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class UserInfo ( + @SerialName("email") + val email: String, + @SerialName("firstname") + val firstName: String, + @SerialName("lastname") + val lastName: String +) \ No newline at end of file diff --git a/app/src/main/java/com/clemhaowen/dm_td2/network/UserService.kt b/app/src/main/java/com/clemhaowen/dm_td2/network/UserService.kt new file mode 100644 index 0000000000000000000000000000000000000000..df3803f8ca9eec7f0189d23a2426100e400c7e3a --- /dev/null +++ b/app/src/main/java/com/clemhaowen/dm_td2/network/UserService.kt @@ -0,0 +1,9 @@ +package com.clemhaowen.dm_td2.network + +import retrofit2.Response +import retrofit2.http.GET + +interface UserService { + @GET("users/info") + suspend fun getInfo(): Response<UserInfo> +} \ No newline at end of file