Skip to content

Commit

Permalink
Merge pull request #3 from kamaravichow/Kotlin-rewrite
Browse files Browse the repository at this point in the history
Kotlin rewrite
  • Loading branch information
kamaravichow committed Sep 30, 2021
2 parents 45ff355 + c12eb69 commit 20087a8
Show file tree
Hide file tree
Showing 13 changed files with 235 additions and 286 deletions.
6 changes: 6 additions & 0 deletions app/build.gradle
@@ -1,6 +1,7 @@
plugins {
id 'com.android.application'
}
apply plugin: 'kotlin-android'

android {
compileSdk 30
Expand Down Expand Up @@ -41,4 +42,9 @@ dependencies {
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
implementation "androidx.core:core-ktx:+"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}
repositories {
mavenCentral()
}
2 changes: 2 additions & 0 deletions build.gradle
@@ -1,11 +1,13 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.6.0-M1'
repositories {
google()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:4.2.2"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
Expand Down
9 changes: 9 additions & 0 deletions lib/build.gradle
Expand Up @@ -2,6 +2,7 @@ plugins {
id 'com.android.library'
id 'maven-publish'
}
apply plugin: 'kotlin-android'


task androidSourcesJar(type: Jar) {
Expand Down Expand Up @@ -50,7 +51,15 @@ dependencies {
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

implementation "androidx.core:core-ktx:1.6.0"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1'

testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

}
repositories {
mavenCentral()
}
105 changes: 0 additions & 105 deletions lib/src/main/java/me/aravi/libraries/iplib/IPLib.java

This file was deleted.

100 changes: 100 additions & 0 deletions lib/src/main/java/me/aravi/libraries/iplib/IPLib.kt
@@ -0,0 +1,100 @@
package me.aravi.libraries.iplib

import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import me.aravi.libraries.iplib.api.GeoLocatorAPI
import me.aravi.libraries.iplib.listeners.OnIPResponse
import me.aravi.libraries.iplib.model.IPInfo
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response

class IPLib private constructor() {
/**
* GeoLocator api call happens here
* NOTE : THIS RUNS ON MAIN THREAD
*
* @param listener
*/
fun ipLookup(listener: OnIPResponse) {
val lookup: Call<IPInfo> = GeoLocatorAPI.apiService!!.lookup()
lookup.enqueue(object : Callback<IPInfo?> {
override fun onResponse(call: Call<IPInfo?>, response: Response<IPInfo?>) {
if (response.isSuccessful) {
listener.onSuccess(response.body())
} else {
listener.onError(response.message(), response.code())
}
}

override fun onFailure(call: Call<IPInfo?>, t: Throwable) {
listener.onError(t.message, 1024)
}
})
}

/**
* Ip Lookup with Ip Address
*
* @param ipAddress
* @param listener
*/
fun ipLookupWith(ipAddress: String?, listener: OnIPResponse) {
val lookup: Call<IPInfo> = GeoLocatorAPI.apiService!!.lookupFor(ipAddress)
lookup.enqueue(object : Callback<IPInfo?> {
override fun onResponse(call: Call<IPInfo?>, response: Response<IPInfo?>) {
if (response.isSuccessful) {
listener.onSuccess(response.body())
} else {
listener.onError(response.message(), response.code())
}
}

override fun onFailure(call: Call<IPInfo?>, t: Throwable) {
listener.onError(t.message, 1024)
}
})
}

/**
* This is same as the other method
* this happens in IO CoroutineScope
*
* @param listener
*/
fun ipLookupAsync(listener: OnIPResponse) {
CoroutineScope(Dispatchers.IO).launch {
ipLookup(listener)
}
}

/**
* Gets ip info
* this happens in IO CoroutineScope
* @param ipAddress
* @param listener
*/
fun ipLookupWithIpAsync(ipAddress: String?, listener: OnIPResponse) {
CoroutineScope(Dispatchers.IO).launch {
ipLookupWith(ipAddress, listener)
}
}

companion object {
/**
* Creates a new instance of iplib
*
* @return
*/
@JvmStatic
var instance: IPLib? = null
get() {
if (field == null) {
field = IPLib()
}
return field
}
private set
}
}
15 changes: 0 additions & 15 deletions lib/src/main/java/me/aravi/libraries/iplib/api/Endpoints.java

This file was deleted.

14 changes: 14 additions & 0 deletions lib/src/main/java/me/aravi/libraries/iplib/api/Endpoints.kt
@@ -0,0 +1,14 @@
package me.aravi.libraries.iplib.api

import me.aravi.libraries.iplib.model.IPInfo
import retrofit2.Call
import retrofit2.http.GET
import retrofit2.http.Path

interface Endpoints {
@GET("json/")
fun lookup(): Call<IPInfo>

@GET("json/{ip}")
fun lookupFor(@Path("ip") ip: String?): Call<IPInfo>
}
45 changes: 0 additions & 45 deletions lib/src/main/java/me/aravi/libraries/iplib/api/GeoLocatorAPI.java

This file was deleted.

46 changes: 46 additions & 0 deletions lib/src/main/java/me/aravi/libraries/iplib/api/GeoLocatorAPI.kt
@@ -0,0 +1,46 @@
package me.aravi.libraries.iplib.api

import retrofit2.http.GET
import me.aravi.libraries.iplib.model.IPInfo
import me.aravi.libraries.iplib.api.Endpoints
import me.aravi.libraries.iplib.api.GeoLocatorAPI
import com.google.gson.Gson
import com.google.gson.GsonBuilder
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import androidx.annotation.Keep
import me.aravi.libraries.iplib.listeners.OnIPResponse
import android.os.AsyncTask
import me.aravi.libraries.iplib.IPLib

class GeoLocatorAPI private constructor() {
val service: Endpoints?
get() {
if (apiService == null) {
val gson = GsonBuilder()
.setLenient()
.create()
val retrofit = Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create(gson))
.build()
apiService = retrofit.create(Endpoints::class.java)
}
return apiService
}

companion object {
private val TAG = GeoLocatorAPI::class.java.simpleName
const val url = "https://geolocation-db.com/"
var apiService: Endpoints? = null
var instance: GeoLocatorAPI? = null
get() {
if (field == null) {
field = GeoLocatorAPI()
}
field!!.service
return field
}
private set
}
}

0 comments on commit 20087a8

Please sign in to comment.