Skip to content

Commit

Permalink
Merge branch 'develop' of https://github.com/BCSDLab/JJBAKSA-ANDROID
Browse files Browse the repository at this point in the history
…into feature/#7-Get-kakao-login-token

� Conflicts:
�	app/src/main/java/com/jjbaksa/jjbaksa/JjbaksaApp.kt
�	app/src/main/java/com/jjbaksa/jjbaksa/di/RepositoryModule.kt
  • Loading branch information
imseongwoo committed Sep 19, 2022
2 parents 3ebd1de + 6a73366 commit 2a13750
Show file tree
Hide file tree
Showing 29 changed files with 469 additions and 8 deletions.
3 changes: 3 additions & 0 deletions .github/workflows/pr_builder.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ jobs:
java-version: '11'
distribution: 'temurin'
cache: gradle

- name: Add google-services.json
run: echo '${{ secrets.GOOGLE_SERVICES_JSON }}' > ./app/google-services.json

- name: Grant execute permission for gradlew
run: chmod +x gradlew
Expand Down
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ captures/
*.keystore

# Google Services (e.g. APIs or Firebase)
# google-services.json
google-services.json

# Android Patch
gen-external-apklibs
Expand Down
10 changes: 10 additions & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ plugins {
kotlin("kapt")
id("dagger.hilt.android.plugin")
id("org.jlleitschuh.gradle.ktlint") version "10.3.0"
id("com.google.gms.google-services")
}

android {
Expand Down Expand Up @@ -96,6 +97,15 @@ dependencies {
implementation(gson)
implementation(retrofit2)
implementation(retrofit2Converter)
implementation(roomRuntime)
implementation(roomKtx)
annotationProcessor(roomCompiler)
kapt(roomKapComplier)
}
FirebaseDependencies.run {
implementation(platform(FirebaseDependencies.firebaseBom))
implementation(FirebaseDependencies.firebaseAnalytics)
implementation(FirebaseDependencies.firebaseAuth)
}
}

Expand Down
27 changes: 27 additions & 0 deletions app/src/main/java/com/jjbaksa/jjbaksa/JjbaksaApp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,39 @@ package com.jjbaksa.jjbaksa

import android.app.Application
import com.kakao.sdk.common.KakaoSdk
import android.content.Context
import android.content.pm.ApplicationInfo
import android.content.pm.PackageManager
import dagger.hilt.android.HiltAndroidApp

@HiltAndroidApp
class JjbaksaApp : Application() {
val appContext: Context = this
val isDebug
get() = isDebug(appContext)

override fun onCreate() {
super.onCreate()
KakaoSdk.init(this, BuildConfig.kakao_native_app_key)
}

/**
* 디버그모드인지 확인하는 함수
*/
private fun isDebug(context: Context): Boolean {
var debuggable = false
val pm: PackageManager = context.packageManager
try {
val appinfo = pm.getApplicationInfo(context.packageName, 0)
debuggable = 0 != appinfo.flags and ApplicationInfo.FLAG_DEBUGGABLE
} catch (e: PackageManager.NameNotFoundException) {
}

return debuggable
}
companion object {
lateinit var instance: JjbaksaApp
private set
}
}

30 changes: 30 additions & 0 deletions app/src/main/java/com/jjbaksa/jjbaksa/di/DataBaseModule.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.jjbaksa.jjbaksa.di

import android.content.Context
import androidx.room.Room
import com.jjbaksa.data.database.AppDatabase
import com.jjbaksa.data.database.UserDao
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton

@Module
@InstallIn(SingletonComponent::class)
object DataBaseModule {
@Provides
@Singleton
fun provideRoomDataBase(@ApplicationContext context: Context): AppDatabase {
return Room
.databaseBuilder(context, AppDatabase::class.java, "MyExoPlayer.db")
.allowMainThreadQueries()
.build()
}
@Provides
@Singleton
fun provideVideoDao(appDatabase: AppDatabase): UserDao {
return appDatabase.userDao()
}
}
27 changes: 27 additions & 0 deletions app/src/main/java/com/jjbaksa/jjbaksa/di/DataSourceModule.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.jjbaksa.jjbaksa.di

import com.jjbaksa.data.api.AuthApi
import com.jjbaksa.data.api.NoAuthApi
import com.jjbaksa.data.database.UserDao
import com.jjbaksa.data.datasource.local.UserLocalDataSource
import com.jjbaksa.data.datasource.remote.UserRemoteDataSource
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton

@Module
@InstallIn(SingletonComponent::class)
object DataSourceModule {
@Provides
@Singleton
fun provideUserRemoteDataSource(authApi: AuthApi, noAuthApi: NoAuthApi): UserRemoteDataSource {
return UserRemoteDataSource(authApi, noAuthApi)
}
@Provides
@Singleton
fun provideLocalDataSource(userDao: UserDao): UserLocalDataSource {
return UserLocalDataSource(userDao)
}
}
186 changes: 186 additions & 0 deletions app/src/main/java/com/jjbaksa/jjbaksa/di/NetworkModule.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,186 @@
package com.jjbaksa.jjbaksa.di

import com.jjbaksa.data.BASE_URL
import com.jjbaksa.data.api.AuthApi
import com.jjbaksa.data.api.NoAuthApi
import com.jjbaksa.jjbaksa.JjbaksaApp
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import okhttp3.Interceptor
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import java.util.concurrent.TimeUnit
import javax.inject.Qualifier
import javax.inject.Singleton

@Qualifier
@Retention(AnnotationRetention.BINARY)
annotation class AUTH

@Qualifier
@Retention(AnnotationRetention.BINARY)
annotation class NOAUTH

@Qualifier
@Retention(AnnotationRetention.BINARY)
annotation class REFRESH

@Module
@InstallIn(SingletonComponent::class)
object NetworkModule {
private val httpLoggingInterceptor = HttpLoggingInterceptor().apply {
level = if (JjbaksaApp.instance.isDebug) {
HttpLoggingInterceptor.Level.BODY
} else {
HttpLoggingInterceptor.Level.HEADERS
}
}

@AUTH
@Provides
@Singleton
fun provideAuthInterceptor(): Interceptor {
return Interceptor { chain: Interceptor.Chain ->
// val accessToken //todo 추후 ACCESS TOKEN 추가
val newRequest: Request = chain.request().newBuilder()
// .addHeader("Authorization", "Bearer $accessToken")
.build()
chain.proceed(newRequest)
}
}
// TODO 추후 Refresh 추가
/*
@AUTH
@Provides
@Singleton
fun provideTokenAuthenticator(@REFRESH refreshRetrofit: Retrofit): TokenAuthenticator {
return TokenAuthenticator(
KoalaApp.instance.applicationContext,
refreshRetrofit
)
}
*/
// TODO 추후 Refresh 추가
/*
@REFRESH
@Provides
@Singleton
fun provideRefreshInterceptor(): Interceptor {
return Interceptor { chain: Interceptor.Chain ->
val refreshToken = Hawk.get(REFRESH_TOKEN, "")
val newRequest: Request = chain.request().newBuilder()
.addHeader("RefreshToken", "Bearer $refreshToken")
.build()
chain.proceed(newRequest)
}
}
*/

@NOAUTH
@Provides
@Singleton
fun provideNoAuthOkHttpClient(): OkHttpClient {
return OkHttpClient.Builder().apply {
connectTimeout(10, TimeUnit.SECONDS)
readTimeout(30, TimeUnit.SECONDS)
writeTimeout(15, TimeUnit.SECONDS)
addInterceptor(httpLoggingInterceptor)
}.build()
}
// TODO 추후 Refresh 추가
/*
@AUTH
@Provides
@Singleton
fun provideAuthOkHttpClient(
@AUTH authInterceptor: Interceptor,
@AUTH tokenAuthenticator: TokenAuthenticator
): OkHttpClient {
return OkHttpClient.Builder().apply {
connectTimeout(10, TimeUnit.SECONDS)
readTimeout(30, TimeUnit.SECONDS)
writeTimeout(15, TimeUnit.SECONDS)
addInterceptor(httpLoggingInterceptor)
addInterceptor(authInterceptor)
authenticator(tokenAuthenticator)
}.build()
}
*/

@REFRESH
@Provides
@Singleton
fun provideRefreshOkHttpClient(
@REFRESH refreshAuthInterceptor: Interceptor
): OkHttpClient {
return OkHttpClient.Builder().apply {
connectTimeout(10, TimeUnit.SECONDS)
readTimeout(30, TimeUnit.SECONDS)
writeTimeout(15, TimeUnit.SECONDS)
addInterceptor(httpLoggingInterceptor)
addInterceptor(refreshAuthInterceptor)
}.build()
}

@NOAUTH
@Provides
@Singleton
fun provideNoAuthRetrofit(@NOAUTH okHttpClient: OkHttpClient): Retrofit {
return Retrofit.Builder()
.client(okHttpClient)
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
}

@AUTH
@Provides
@Singleton
fun provideAuthRetrofit(@AUTH okHttpClient: OkHttpClient): Retrofit {
return Retrofit.Builder()
.client(okHttpClient)
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
}

@REFRESH
@Provides
@Singleton
fun provideRefreshRetrofit(@REFRESH okHttpClient: OkHttpClient): Retrofit {
return Retrofit.Builder()
.client(okHttpClient)
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
}

@NOAUTH
@Provides
@Singleton
fun provideNoAuthApi(@NOAUTH retrofit: Retrofit): NoAuthApi {
return retrofit.create(NoAuthApi::class.java)
}

@AUTH
@Provides
@Singleton
fun provideAuthApi(@AUTH retrofit: Retrofit): AuthApi {
return retrofit.create(AuthApi::class.java)
}

@REFRESH
@Provides
@Singleton
fun provideRefreshApi(@REFRESH retrofit: Retrofit): AuthApi {
return retrofit.create(AuthApi::class.java)
}
}
19 changes: 16 additions & 3 deletions app/src/main/java/com/jjbaksa/jjbaksa/di/RepositoryModule.kt
Original file line number Diff line number Diff line change
@@ -1,19 +1,32 @@
package com.jjbaksa.jjbaksa.di

import com.jjbaksa.data.datasource.local.UserLocalDataSource
import com.jjbaksa.data.datasource.remote.UserRemoteDataSource
import com.jjbaksa.domain.repository.UserRepository
import com.jjbaksa.data.repository.UserRepositoryImpl
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import android.content.Context
import com.jjbaksa.jjbaksa.HandleKakaoLoginUseCase
import com.jjbaksa.jjbaksa.KakaoLoginRepository
import com.jjbaksa.jjbaksa.KakaoLoginRepositoryImpl
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton

@Module
@InstallIn(SingletonComponent::class)
object RepositoryModule {
@Singleton
@Provides
fun provideUserRepository(
userRemoteDataSource: UserRemoteDataSource,
userLocalDataSource: UserLocalDataSource
): UserRepository {
return UserRepositoryImpl(userRemoteDataSource, userLocalDataSource)
}
}

@Singleton
@Provides
Expand Down
3 changes: 3 additions & 0 deletions app/src/main/java/com/jjbaksa/jjbaksa/di/UseCaseModule.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package com.jjbaksa.jjbaksa.di

object UseCaseModule
1 change: 1 addition & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ plugins {
id("com.android.library") version "7.2.0" apply false
id("org.jetbrains.kotlin.android") version "1.7.10" apply false
id("org.jetbrains.kotlin.jvm") version "1.6.10" apply false
id("com.google.gms.google-services") version "4.3.13" apply false
}

tasks.register("clean", Delete::class) {
Expand Down
11 changes: 10 additions & 1 deletion buildSrc/src/main/java/Dependencies.kt
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,17 @@ object ThirdPartyDependencies {
const val retrofit2Converter =
"com.squareup.retrofit2:converter-gson:${Versions.retrofit2Version}"
const val timber = "com.jakewharton.timber:timber:${Versions.timberVersion}"
const val roomRuntime = "androidx.room:room-runtime:${Versions.roomVersion}"
const val roomKtx = "androidx.room:room-ktx:${Versions.roomVersion}"
const val roomCompiler = "androidx.room:room-compiler:${Versions.roomVersion}"
const val roomKapComplier = "androidx.room:room-compiler:${Versions.roomVersion}"
}
object FirebaseDependencies {
const val firebaseBom = "com.google.firebase:firebase-bom:${Versions.firebaseBomVersion}"
const val firebaseAnalytics = "com.google.firebase:firebase-analytics-ktx"
const val firebaseAuth = "com.google.firebase:firebase-auth-ktx"
}

object ClassPathPlugins {
const val hilt = "com.google.dagger:hilt-android-gradle-plugin:${Versions.hiltVersion}"
}
}
Loading

0 comments on commit 2a13750

Please sign in to comment.