Skip to content

Commit 72f81e5

Browse files
committed
version 3
1 parent 694d187 commit 72f81e5

15 files changed

+123
-92
lines changed

.idea/compiler.xml

+3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/gradle.xml

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/misc.xml

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/build.gradle

+5-5
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@ apply plugin: 'kotlin-android'
33
apply plugin: 'kotlin-android-extensions'
44

55
android {
6-
compileSdkVersion 29
7-
buildToolsVersion "29.0.2"
6+
compileSdkVersion 30
7+
buildToolsVersion "30.0.2"
88

99
defaultConfig {
1010
applicationId "com.idirin.idceptor"
1111
minSdkVersion 16
12-
targetSdkVersion 29
13-
versionCode 2
14-
versionName "0.0.2"
12+
targetSdkVersion 30
13+
versionCode 3
14+
versionName "0.0.3"
1515

1616
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
1717
}

build.gradle

+6
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@ allprojects {
2727
}
2828
}
2929

30+
ext {
31+
targetSdkVersion = 30
32+
minSdkVersion = 16
33+
buildToolsVersion = '30.0.2'
34+
}
35+
3036
task clean(type: Delete) {
3137
delete rootProject.buildDir
3238
}

idceptor/build.gradle

+12-5
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ group='com.idirin.idceptor'
88
version='0.0.1'
99

1010
android {
11-
compileSdkVersion 29
12-
buildToolsVersion "29.0.2"
11+
compileSdkVersion 30
12+
buildToolsVersion "30.0.2"
1313

1414
defaultConfig {
1515
minSdkVersion 16
16-
targetSdkVersion 29
16+
targetSdkVersion 30
1717
versionCode 1
1818
versionName "1.0"
1919

@@ -32,6 +32,13 @@ android {
3232
release {
3333
minifyEnabled false
3434
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
35+
36+
buildConfigField 'String', 'REST_ENDPOINT', '"https://data.lasercateyes.com/api/"'
37+
buildConfigField 'String', 'CLIENT_ID', '"8D0B85DF-E212-4126-9C3A-AC4EEB98B0B1"'
38+
}
39+
debug {
40+
buildConfigField 'String', 'REST_ENDPOINT', '"https://data-beta.lasercateyes.com/api/"'
41+
buildConfigField 'String', 'CLIENT_ID', '"424F5699-9FBA-4161-AE79-49839455E04A"'
3542
}
3643
}
3744

@@ -49,8 +56,8 @@ dependencies {
4956
kapt "androidx.room:room-compiler:2.2.5"
5057

5158
//Koin
52-
implementation "org.koin:koin-core:2.0.1"
53-
implementation "org.koin:koin-android:2.0.1"
59+
implementation "org.koin:koin-core:2.1.1"
60+
implementation "org.koin:koin-android:2.1.1"
5461

5562
//Interceptor
5663
implementation "com.squareup.okhttp3:okhttp:3.11.0"

idceptor/src/main/java/com/idirin/idceptor/IDCeptor.kt

+2-20
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,7 @@ import okhttp3.internal.http.HttpHeaders
1515
import okio.Buffer
1616
import okio.BufferedSource
1717
import org.koin.android.ext.koin.androidContext
18-
import org.koin.core.context.GlobalContext
19-
import org.koin.core.context.loadKoinModules
20-
import org.koin.core.context.startKoin
21-
import org.koin.core.context.unloadKoinModules
18+
import org.koin.core.context.*
2219
import java.nio.charset.Charset
2320
import java.nio.charset.UnsupportedCharsetException
2421
import java.util.*
@@ -30,7 +27,7 @@ class IDCeptor(private val application: Application, apiKey: String): Intercepto
3027
IDCeptor.apiKey = apiKey
3128

3229
val modules = listOf(idApiModule, idDbModule, idPrefModule, idConcurrencyModule)
33-
if (GlobalContext.getOrNull() == null) {
30+
if (KoinContextHandler.getOrNull() == null) {
3431
startKoin {
3532
androidContext(application)
3633
modules(modules)
@@ -44,24 +41,9 @@ class IDCeptor(private val application: Application, apiKey: String): Intercepto
4441
}
4542

4643
companion object {
47-
private val DEFAULT_RETENTION: Period = Period.ONE_WEEK
4844
private val UTF8 = Charset.forName("UTF-8")
4945

5046
lateinit var apiKey: String
51-
52-
enum class Period {
53-
/** Retain data for the last hour. */
54-
ONE_HOUR,
55-
56-
/** Retain data for the last day. */
57-
ONE_DAY,
58-
59-
/** Retain data for the last week. */
60-
ONE_WEEK,
61-
62-
/** Retain data forever. */
63-
FOREVER
64-
}
6547
}
6648

6749
private val maxContentLength = 250000L

idceptor/src/main/java/com/idirin/idceptor/di/ApiModule.kt

-12
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,7 @@ import com.idirin.idceptor.IDCeptor
77
import com.idirin.idceptor.network.AlgClientIdInterceptor
88
import com.idirin.idceptor.network.IdApiInterface
99
import com.idirin.idceptor.network.IdTypeAdapterDate
10-
import com.idirin.idceptor.utils.DeviceUtil
11-
import com.idirin.idceptor.utils.USER_AGENT
1210
import okhttp3.Cache
13-
import okhttp3.Interceptor
1411
import okhttp3.logging.HttpLoggingInterceptor
1512
import org.koin.android.ext.koin.androidApplication
1613
import org.koin.core.module.Module
@@ -34,20 +31,11 @@ inline fun <reified T> getApi(application: Application, apiKey: String): T {
3431
val cacheSize: Long = 10 * 1024 * 1024 //10mb cache size
3532
val cache = Cache(application.cacheDir, cacheSize)
3633

37-
val userAgentInterceptor = Interceptor { chain ->
38-
val request = chain.request()
39-
val requestWithUserAgent = request.newBuilder()
40-
.header(USER_AGENT, DeviceUtil.userAgent)
41-
.build()
42-
chain.proceed(requestWithUserAgent)
43-
}
44-
4534
val okHttpClient = okhttp3.OkHttpClient.Builder()
4635
.connectTimeout(BuildConfig.CONNECTION_TIMEOUT.toLong(), TimeUnit.MILLISECONDS)
4736
.readTimeout(BuildConfig.CONNECTION_TIMEOUT.toLong(), TimeUnit.MILLISECONDS)
4837
.writeTimeout(BuildConfig.CONNECTION_UPLOAD_TIMEOUT.toLong(), TimeUnit.MILLISECONDS)
4938
.cache(cache)
50-
.addInterceptor(userAgentInterceptor)
5139
.addInterceptor(AlgClientIdInterceptor(apiKey))
5240

5341
if (BuildConfig.DEBUG) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.idirin.idceptor.models.network
2+
3+
data class AppInitRequest(
4+
val operatingSystem: String,
5+
val name: String?,
6+
val environment: String?,
7+
val version: String,
8+
val buildNumber: String,
9+
val device: DeviceModel
10+
)
11+
12+
data class DeviceModel(
13+
val name: String,
14+
val userFriendlyName: String,
15+
val uuid: String,
16+
val operatingSystem: String,
17+
val osVersion: String
18+
)
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,22 @@
11
package com.idirin.idceptor.models.network
22

33
import com.idirin.idceptor.utils.AppUtil
4-
import com.idirin.idceptor.utils.DeviceUtil
54
import java.util.*
65

7-
86
data class PostApiRequest(
9-
val applicationId: String = AppUtil.appId,
10-
val connectionId: String,
11-
val deviceId: String = DeviceUtil.deviceId,
12-
val requestPackage: RequestPackageModel? = null,
13-
val responsePackage: ResponsePackageModel? = null,
14-
val sender: String? = null,
15-
val tags: List<String>? = null,
16-
val text: String? = null
7+
val connectionId: String,
8+
val deviceUUID: String = AppUtil.getDeviceId(),
9+
val requestPackage: RequestPackageModel? = null,
10+
val responsePackage: ResponsePackageModel? = null,
11+
val sender: String? = null,
12+
val tags: List<String>? = null,
13+
val text: String? = null
1714
)
1815

1916
data class RequestPackageModel(
2017
val id: String,
2118
val body: String? = null,
22-
val header: String,
19+
val headers: List<String>,
2320
val methodType: String,
2421
val timeStamp: Date,
2522
val url: String
@@ -28,7 +25,7 @@ data class RequestPackageModel(
2825
data class ResponsePackageModel(
2926
val id: String,
3027
val body: String?,
31-
val header: String,
28+
val headers: List<String>,
3229
val statusCode: Int,
3330
val timeStamp: Date
3431
)

idceptor/src/main/java/com/idirin/idceptor/network/AlgClientIdInterceptor.kt

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.idirin.idceptor.network
22

3+
import com.idirin.idceptor.BuildConfig
4+
import com.idirin.idceptor.utils.AppUtil.getDeviceId
35
import okhttp3.Interceptor
46
import okhttp3.Response
57
import org.koin.core.KoinComponent
@@ -10,16 +12,16 @@ import java.io.IOException
1012
* idirin on 01.04.2020...
1113
*/
1214

13-
class AlgClientIdInterceptor(private val apiKey: String) : Interceptor, KoinComponent {
14-
15-
//private const val client_secret = "424F5699-9FBA-4161-AE79-49839455E04A"
15+
class AlgClientIdInterceptor(private val appKey: String) : Interceptor, KoinComponent {
1616

1717
@Throws(IOException::class)
1818
override fun intercept(chain: Interceptor.Chain): Response {
1919
val original = chain.request()
2020

2121
val request = original.newBuilder()
22-
.addHeader("Alg-Client-Id", apiKey)
22+
.addHeader("Alg-Client-Id", BuildConfig.CLIENT_ID)
23+
.addHeader("Alg-App-Key", appKey)
24+
.addHeader("Alg-Device-UUId", getDeviceId())
2325
.method(original.method(), original.body())
2426
.build()
2527

idceptor/src/main/java/com/idirin/idceptor/network/IdApiInterface.kt

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.idirin.idceptor.network
22

3+
import com.idirin.idceptor.models.network.AppInitRequest
34
import com.idirin.idceptor.models.network.PostApiRequest
45
import kotlinx.coroutines.Deferred
56
import okhttp3.ResponseBody
@@ -13,12 +14,12 @@ import retrofit2.http.*
1314

1415
interface IdApiInterface {
1516

16-
@POST("Data/Test")
17+
@POST("Data/SendPackage")
1718
fun postApi(@Body request: PostApiRequest): Call<ResponseBody>
1819

1920

20-
21-
21+
@PUT("App/UpdateSubApp")
22+
fun initApp(@Body request: AppInitRequest): Call<ResponseBody>
2223

2324

2425
}

idceptor/src/main/java/com/idirin/idceptor/network/UploadHelper.kt

+26-23
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
package com.idirin.idceptor.network
22

3-
import com.google.gson.Gson
3+
import android.app.Application
4+
import android.os.Build
45
import com.idirin.idceptor.db.DbHelper
56
import com.idirin.idceptor.models.HttpTransaction
67
import com.idirin.idceptor.models.isRequest
7-
import com.idirin.idceptor.models.network.PostApiRequest
8-
import com.idirin.idceptor.models.network.RequestPackageModel
9-
import com.idirin.idceptor.models.network.ResponsePackageModel
10-
import com.idirin.idceptor.utils.AppUtil
11-
import com.idirin.idceptor.utils.DeviceUtil
8+
import com.idirin.idceptor.models.network.*
9+
import com.idirin.idceptor.utils.*
10+
import com.idirin.idceptor.utils.AppUtil.getDeviceId
1211
import kotlinx.coroutines.*
1312
import org.koin.core.KoinComponent
1413
import org.koin.core.inject
@@ -18,19 +17,18 @@ import java.util.concurrent.atomic.AtomicBoolean
1817

1918
object UploadHelper: KoinComponent {
2019

20+
private val app: Application by inject()
2121
private val api: IdApiInterface by inject()
2222
private val scope: CoroutineScope by inject()
2323
private val syncThread: ExecutorCoroutineDispatcher by inject()
2424

2525
private var isRequesting: AtomicBoolean = AtomicBoolean(true)
2626

27-
private val gson by lazy { Gson() }
28-
2927
private const val RETRY_DELAY = 60_000L
3028

3129
fun init() {
3230
isRequesting.set(true)
33-
postDeviceInfo()
31+
postAppInfo()
3432
DbHelper.clean()
3533

3634
scope.launch(Dispatchers.Main) {
@@ -67,13 +65,11 @@ object UploadHelper: KoinComponent {
6765
val uploadTime = System.currentTimeMillis()
6866
val request = PostApiRequest(
6967
connectionId = transaction.transactionId,
70-
applicationId = AppUtil.appId,
71-
deviceId = DeviceUtil.deviceId,
7268
requestPackage = RequestPackageModel(
7369
id = transaction.transactionId,
7470
timeStamp = transaction.requestDate!!,
7571
url = transaction.url!!,
76-
header = gson.toJson(transaction.getRequestHeaders()),
72+
headers = transaction.getRequestHeaders().map { "${it.name} - ${it.value}" },
7773
body = transaction.requestBody,
7874
methodType = transaction.method!!
7975
),
@@ -85,7 +81,7 @@ object UploadHelper: KoinComponent {
8581
id = transaction.transactionId,
8682
timeStamp = transaction.responseDate!!,
8783
statusCode = transaction.responseCode!!,
88-
header = gson.toJson(transaction.getResponseHeaders()),
84+
headers = transaction.getResponseHeaders().map { "${it.name} - ${it.value}" },
8985
body = transaction.responseBody
9086
)
9187
}
@@ -104,17 +100,24 @@ object UploadHelper: KoinComponent {
104100

105101
private fun postAppInfo() {
106102
coroutine(async = {
107-
// TODO post AppInfo
108-
// api.postApi(request).await()
109-
upload()
110-
})
111-
}
112103

113-
private fun postDeviceInfo() {
114-
coroutine(async = {
115-
// TODO post Device Info
116-
// api.postApi(request).await()
117-
postAppInfo()
104+
val request = AppInitRequest(
105+
operatingSystem = "Android",
106+
name = "",
107+
environment = "",
108+
version = getVersionName(app),
109+
buildNumber = getVersionCode(app).toString(),
110+
device = DeviceModel(
111+
name = Build.MODEL,
112+
userFriendlyName = Build.PRODUCT,
113+
operatingSystem = "Android",
114+
uuid = getDeviceId(),
115+
osVersion = Build.VERSION.SDK_INT.toString()
116+
)
117+
)
118+
119+
api.initApp(request).await()
120+
upload()
118121
})
119122
}
120123

0 commit comments

Comments
 (0)