Skip to content

Commit 6f53beb

Browse files
committed
Create base module architecture
- `data` - `repository` - `network` - `ui` - `di`
1 parent c1dd80a commit 6f53beb

File tree

26 files changed

+432
-18
lines changed

26 files changed

+432
-18
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.adyen.android.assignment
2+
3+
import android.app.Application
4+
import dagger.hilt.android.HiltAndroidApp
5+
6+
@HiltAndroidApp
7+
class AdyenApplication : Application() {
8+
override fun onCreate() {
9+
super.onCreate()
10+
}
11+
}

app/src/main/java/com/adyen/android/assignment/api/model/Category.kt renamed to app/src/main/java/com/adyen/android/assignment/data/remote/model/Category.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.adyen.android.assignment.api.model
1+
package com.adyen.android.assignment.data.remote.model
22

33
data class Category(
44
val icon: Icon,

app/src/main/java/com/adyen/android/assignment/api/model/GeoCode.kt renamed to app/src/main/java/com/adyen/android/assignment/data/remote/model/GeoCode.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.adyen.android.assignment.api.model
1+
package com.adyen.android.assignment.data.remote.model
22

33
data class GeoCode(
44
val main: Main

app/src/main/java/com/adyen/android/assignment/api/model/Icon.kt renamed to app/src/main/java/com/adyen/android/assignment/data/remote/model/Icon.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.adyen.android.assignment.api.model
1+
package com.adyen.android.assignment.data.remote.model
22

33
data class Icon(
44
val prefix: String,

app/src/main/java/com/adyen/android/assignment/api/model/Location.kt renamed to app/src/main/java/com/adyen/android/assignment/data/remote/model/Location.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.adyen.android.assignment.api.model
1+
package com.adyen.android.assignment.data.remote.model
22

33
data class Location(
44
val address: String,

app/src/main/java/com/adyen/android/assignment/api/model/ResponseWrapper.kt renamed to app/src/main/java/com/adyen/android/assignment/data/remote/model/ResponseWrapper.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.adyen.android.assignment.api.model
1+
package com.adyen.android.assignment.data.remote.model
22

33
data class ResponseWrapper(
44
val results: List<Result>?,

app/src/main/java/com/adyen/android/assignment/api/model/Result.kt renamed to app/src/main/java/com/adyen/android/assignment/data/remote/model/Result.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.adyen.android.assignment.api.model
1+
package com.adyen.android.assignment.data.remote.model
22

33
data class Result(
44
val categories: List<Category>,
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package com.adyen.android.assignment.di
2+
3+
import android.content.Context
4+
import com.adyen.android.assignment.BuildConfig
5+
import com.adyen.android.assignment.network.service.PlacesService
6+
import com.adyen.android.assignment.network.util.AppCallAdapterFactory
7+
import com.google.gson.Gson
8+
import com.google.gson.GsonBuilder
9+
import dagger.Module
10+
import dagger.Provides
11+
import dagger.hilt.InstallIn
12+
import dagger.hilt.android.qualifiers.ApplicationContext
13+
import dagger.hilt.components.SingletonComponent
14+
import okhttp3.Cache
15+
import okhttp3.OkHttpClient
16+
import okhttp3.logging.HttpLoggingInterceptor
17+
import retrofit2.Retrofit
18+
import retrofit2.converter.gson.GsonConverterFactory
19+
import java.util.concurrent.TimeUnit
20+
import javax.inject.Singleton
21+
22+
@Module
23+
@InstallIn(SingletonComponent::class)
24+
object RemoteModule {
25+
26+
@Provides
27+
@Singleton
28+
fun providesService(retrofit: Retrofit): PlacesService =
29+
retrofit.create(PlacesService::class.java)
30+
31+
@Provides
32+
@Singleton
33+
fun providesRetrofit(
34+
gsonConverterFactory: GsonConverterFactory,
35+
appCallAdapterFactory: AppCallAdapterFactory,
36+
): Retrofit {
37+
val interceptorDebug = HttpLoggingInterceptor()
38+
if (BuildConfig.DEBUG)
39+
interceptorDebug.level = HttpLoggingInterceptor.Level.BODY
40+
41+
val client = OkHttpClient.Builder()
42+
.connectTimeout(20, TimeUnit.SECONDS)
43+
.readTimeout(20, TimeUnit.SECONDS)
44+
.addInterceptor { chain ->
45+
val request = chain.request()
46+
.newBuilder()
47+
.build()
48+
chain.proceed(request)
49+
}
50+
.addInterceptor(interceptorDebug)
51+
.build()
52+
53+
return Retrofit.Builder()
54+
.baseUrl(BuildConfig.FOURSQUARE_BASE_URL)
55+
.addCallAdapterFactory(appCallAdapterFactory)
56+
.addConverterFactory(gsonConverterFactory)
57+
.client(client)
58+
.build()
59+
}
60+
61+
@Provides
62+
@Singleton
63+
fun providesOkhttpCache(@ApplicationContext context: Context): Cache {
64+
val cacheSize = 10 * 1024 * 1024
65+
return Cache(context.cacheDir, cacheSize.toLong())
66+
}
67+
68+
@Provides
69+
@Singleton
70+
fun providesGson(): Gson {
71+
return GsonBuilder().setLenient().create()
72+
}
73+
74+
@Provides
75+
@Singleton
76+
fun providesGsonConverterFactory(gson: Gson): GsonConverterFactory {
77+
return GsonConverterFactory.create(gson)
78+
}
79+
80+
@Provides
81+
@Singleton
82+
fun providesAppCallAdapterFactory(): AppCallAdapterFactory {
83+
return AppCallAdapterFactory()
84+
}
85+
}

app/src/main/java/com/adyen/android/assignment/api/PlacesQueryBuilder.kt renamed to app/src/main/java/com/adyen/android/assignment/network/querybuilder/PlacesQueryBuilder.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.adyen.android.assignment.api
1+
package com.adyen.android.assignment.network.querybuilder
22

33
import java.text.SimpleDateFormat
44
import java.util.Date

app/src/main/java/com/adyen/android/assignment/api/VenueRecommendationsQueryBuilder.kt renamed to app/src/main/java/com/adyen/android/assignment/network/querybuilder/VenueRecommendationsQueryBuilder.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.adyen.android.assignment.api
1+
package com.adyen.android.assignment.network.querybuilder
22

33
class VenueRecommendationsQueryBuilder : PlacesQueryBuilder() {
44
private var latitudeLongitude: String? = null

0 commit comments

Comments
 (0)