Skip to content

Commit 43a49c3

Browse files
author
Yaroslav Sudnik
authored
Merge pull request #73 from fs/task/graphql-support
Task/graphql support
2 parents 36308f3 + c213111 commit 43a49c3

60 files changed

Lines changed: 376 additions & 1118 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.circleci/config.yml

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ references:
3030
command: |
3131
sh secrets/decrypt-keys.sh
3232
33+
download_schema: &download_schema
34+
run:
35+
name: Downloading GraphQL schema
36+
command: |
37+
sh secrets/download-graphql-schema.sh
38+
3339
android_config: &android_config
3440
working_directory: *workspace
3541
docker:
@@ -40,7 +46,7 @@ references:
4046
- echo y | android update sdk --no-ui --all --filter "build-tools-23.0.2"
4147
environment:
4248
TERM: dumb
43-
_JAVA_OPTIONS: "-Xmx2048m -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap"
49+
_JAVA_OPTIONS: "-Xmx2048m -XX:+UnlockExperimentalVMOptions"
4450
GRADLE_OPTS: '-Dorg.gradle.jvmargs="-Xmx2048m"'
4551

4652
jobs:
@@ -49,6 +55,7 @@ jobs:
4955
steps:
5056
- checkout
5157
- *decrypt
58+
- *download_schema
5259
- *restore_cache
5360
- run:
5461
name: Download dependencies
@@ -148,4 +155,4 @@ workflows:
148155
requires:
149156
- linter
150157
- detekt
151-
- test_unit
158+
- test_unit

.gitignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,4 +60,7 @@ fastlane/readme.md
6060

6161
# Secret keys
6262
secrets/keys.properties
63-
app/fabric.properties
63+
64+
# GraphQL schema and Apollo generated schema file
65+
schema.json
66+
schema.json.graphql

app/build.gradle

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
apply plugin: 'com.android.application'
2+
apply plugin: 'com.google.gms.google-services'
23
apply plugin: 'kotlin-android'
34
apply plugin: 'kotlin-android-extensions'
45
apply plugin: 'kotlin-kapt'
5-
apply plugin: 'io.fabric'
6+
apply plugin: 'com.google.firebase.crashlytics'
67
apply plugin: "de.mannodermaus.android-junit5"
78
apply plugin: 'com.antonchaynikov.oneclickpublish'
9+
apply plugin: 'com.apollographql.apollo'
810

911
def props = new Properties()
1012
def secretFile = rootProject.file("secrets/keys.properties")
@@ -14,7 +16,6 @@ if (secretFile.exists())
1416
detekt {
1517
toolVersion = "$versions.detekt"
1618
input = files("src/main/java")
17-
filters = ".*/resources/.*,.*/build/.*"
1819
config = files("../default-detekt-config.yml")
1920
}
2021

@@ -30,7 +31,7 @@ android {
3031
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
3132
testInstrumentationRunnerArgument "runnerBuilder",
3233
"de.mannodermaus.junit5.AndroidJUnit5Builder"
33-
buildConfigField 'String', 'BASE_URL', "\"https://api.com\""
34+
buildConfigField 'String', 'BASE_URL', "\"https://rails-base-graphql-api.herokuapp.com/graphql\""
3435

3536
oneClickPublish {
3637
branchNames = ["master"] // branch names from which you can deploy, master by default
@@ -81,21 +82,32 @@ android {
8182
sourceCompatibility 1.8
8283
targetCompatibility 1.8
8384
}
85+
kotlinOptions {
86+
jvmTarget = '1.8'
87+
freeCompilerArgs = ['-Xjvm-default=enable',
88+
"-Xuse-experimental=kotlinx.coroutines.ExperimentalCoroutinesApi",
89+
"-Xuse-experimental=kotlinx.coroutines.ObsoleteCoroutinesApi"]
90+
}
8491
androidExtensions {
8592
experimental = true
8693
}
8794
}
8895

96+
apollo {
97+
generateKotlinModels.set(true)
98+
}
99+
89100
repositories {
90101
maven { url = uri("https://dl.bintray.com/kodein-framework/Kodein-DI") }
91102
}
92103

93104
dependencies {
94105
implementation fileTree(dir: 'libs', include: ['*.jar'])
95106
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$versions.kotlin"
107+
implementation 'com.google.code.gson:gson:2.8.6'
96108

97109
implementation androidLibs
98-
implementation retrofitLibs
110+
implementation apolloLibs
99111
implementation coroutinesLibs
100112
implementation kodeinLibs
101113
implementation roomLibs
@@ -104,10 +116,9 @@ dependencies {
104116
testImplementation unitTestLibs
105117
androidTestImplementation androidTestsLibs
106118

107-
//Crashlytics
108-
implementation('com.crashlytics.sdk.android:crashlytics:2.10.1@aar') {
109-
transitive = true
110-
}
119+
implementation platform('com.google.firebase:firebase-bom:25.12.0')
120+
implementation 'com.google.firebase:firebase-crashlytics-ktx'
121+
implementation 'com.google.firebase:firebase-analytics-ktx'
111122

112123
testRuntimeOnly "org.jetbrains.kotlin:kotlin-reflect:$versions.kotlin"
113124
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"name": "GraphQL Schema",
3+
"extensions": {
4+
"endpoints": {
5+
"Base": {
6+
"url": "https://rails-base-graphql-api.herokuapp.com/graphql",
7+
"schemaPath": "com/flatstack/android/schema.json",
8+
"headers": {
9+
"user-agent": "JS GraphQL"
10+
},
11+
"introspect": false
12+
}
13+
}
14+
}
15+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
fragment UserGqlFragment on User {
2+
firstName
3+
lastName
4+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
mutation Login($email: String!, $password: String!) {
2+
signin(email: $email, password: $password) {
3+
accessToken
4+
}
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
query GetUser {
2+
me {
3+
...UserGqlFragment
4+
}
5+
}
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
package com.flatstack.android
22

33
import android.app.Application
4-
import com.crashlytics.android.Crashlytics
54
import com.flatstack.android.di.initKodein
6-
import io.fabric.sdk.android.Fabric
5+
import com.google.firebase.FirebaseApp
76
import org.kodein.di.KodeinAware
87

98
class App : Application(), KodeinAware {
109
override val kodein = initKodein(this)
1110

1211
override fun onCreate() {
1312
super.onCreate()
14-
Fabric.with(this, Crashlytics())
13+
FirebaseApp.initializeApp(this)
1514
}
1615
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.flatstack.android.di.modules
2+
3+
import com.flatstack.android.profile.AuthorizationModel
4+
import kotlinx.coroutines.runBlocking
5+
import okhttp3.Interceptor
6+
import okhttp3.Response
7+
8+
class AuthorizationInterceptor(private val authorizationModel: AuthorizationModel) : Interceptor {
9+
10+
override fun intercept(chain: Interceptor.Chain): Response {
11+
var request = chain.request()
12+
13+
request = request.newBuilder()
14+
.addHeader(AUTH_HEADER, getAccessToken())
15+
.build()
16+
17+
return chain.proceed(request)
18+
}
19+
20+
private fun getAccessToken(): String = runBlocking { "Bearer ${authorizationModel.getToken()}" }
21+
22+
companion object {
23+
const val AUTH_HEADER: String = "Authorization"
24+
}
25+
}

app/src/main/java/com/flatstack/android/di/modules/appModule.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.flatstack.android.di.modules
22

33
import com.flatstack.android.Router
4+
import com.flatstack.android.login.LoginMapper
45
import com.flatstack.android.model.network.errors.ErrorHandler
56
import com.flatstack.android.util.StringResource
67
import org.kodein.di.Kodein
@@ -10,6 +11,7 @@ import org.kodein.di.generic.singleton
1011

1112
val appModule = Kodein.Module(name = "appModule") {
1213
bind<StringResource>() with singleton { StringResource(instance()) }
13-
bind<ErrorHandler>() with singleton { ErrorHandler(instance(), instance(), instance(), instance()) }
14+
bind<ErrorHandler>() with singleton { ErrorHandler(instance(), instance(), instance()) }
1415
bind<Router>() with singleton { Router(instance()) }
16+
bind<LoginMapper>() with singleton { LoginMapper() }
1517
}

0 commit comments

Comments
 (0)