Skip to content

Commit 35f9152

Browse files
authored
Merge pull request #10 from icerockdev/develop
Release 0.3.0
2 parents 311147d + aefbed9 commit 35f9152

File tree

25 files changed

+245
-244
lines changed

25 files changed

+245
-244
lines changed

.github/workflows/compilation-check.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,4 @@ jobs:
1717
with:
1818
java-version: 1.8
1919
- name: Check build
20-
run: ./gradlew -PlibraryPublish :geo:publishToMavenLocal
20+
run: ./gradlew build publishToMavenLocal

.github/workflows/publish.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@ jobs:
1515
with:
1616
java-version: 1.8
1717
- name: Publish
18-
run: ./gradlew -PlibraryPublish :geo:publishAllPublicationsToBintrayRepository -DBINTRAY_USER=${{ secrets.BINTRAY_USER }} -DBINTRAY_KEY=${{ secrets.BINTRAY_KEY }}
18+
run: ./gradlew publishAllPublicationsToBintrayRepository -DBINTRAY_USER=${{ secrets.BINTRAY_USER }} -DBINTRAY_KEY=${{ secrets.BINTRAY_KEY }}

README.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
![moko-mvvm](https://user-images.githubusercontent.com/5010169/71337878-0e0d0f80-2580-11ea-8ac5-69a132334960.png)
2-
[![GitHub license](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg?style=flat)](http://www.apache.org/licenses/LICENSE-2.0) [![Download](https://api.bintray.com/packages/icerockdev/moko/moko-geo/images/download.svg) ](https://bintray.com/icerockdev/moko/moko-geo/_latestVersion) ![kotlin-version](https://img.shields.io/badge/kotlin-1.3.70-orange)
2+
[![GitHub license](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg?style=flat)](http://www.apache.org/licenses/LICENSE-2.0) [![Download](https://api.bintray.com/packages/icerockdev/moko/moko-geo/images/download.svg) ](https://bintray.com/icerockdev/moko/moko-geo/_latestVersion) ![kotlin-version](https://img.shields.io/badge/kotlin-1.4.0-orange)
33

44
# Mobile Kotlin geolocation module
55
This is a Kotlin Multiplatform library that provides geolocation to common code.
@@ -11,15 +11,15 @@ This is a Kotlin Multiplatform library that provides geolocation to common code.
1111
- [Installation](#installation)
1212
- [Usage](#usage)
1313
- [Samples](#samples)
14-
- [Set Up Locally](#setup-locally)
14+
- [Set Up Locally](#set-up-locally)
1515
- [Contributing](#contributing)
1616
- [License](#license)
1717

1818
## Features
1919
- **Geolocation tracking** - track user geolocation from common code;
2020

2121
## Requirements
22-
- Gradle version 5.6.4+
22+
- Gradle version 6.0+
2323
- Android API 16+
2424
- iOS version 9.0+
2525

@@ -29,6 +29,8 @@ This is a Kotlin Multiplatform library that provides geolocation to common code.
2929
- 0.1.1
3030
- kotlin 1.3.70
3131
- 0.2.0
32+
- kotlin 1.4.0
33+
- 0.3.0
3234

3335
## Installation
3436
root build.gradle
@@ -43,7 +45,7 @@ allprojects {
4345
project build.gradle
4446
```groovy
4547
dependencies {
46-
commonMainApi("dev.icerock.moko:geo:0.2.0")
48+
commonMainApi("dev.icerock.moko:geo:0.3.0")
4749
androidMainImplementation("com.google.android.gms:play-services-location:17.0.0")
4850
}
4951
```
@@ -100,8 +102,7 @@ Please see more examples in the [sample directory](sample).
100102

101103
## Set Up Locally
102104
- The [geo directory](geo) contains the `geo` library;
103-
- In [sample directory](sample) contains sample apps for Android and iOS; plus the mpp-library connected to the apps;
104-
- For local testing use the `./publishToMavenLocal.sh` script - so that sample apps use the locally published version.
105+
- In [sample directory](sample) contains sample apps for Android and iOS; plus the mpp-library connected to the apps.
105106

106107
## Contributing
107108
All development (both new features and bug fixes) is performed in the `develop` branch. This way `master` always contains the sources of the most recently released version. Please send PRs with bug fixes to the `develop` branch. Documentation fixes in the markdown files are an exception to this rule. They are updated directly in `master`.

build.gradle.kts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44

55
allprojects {
66
repositories {
7-
mavenLocal()
8-
97
google()
108
jcenter()
119

@@ -14,8 +12,16 @@ allprojects {
1412
maven { url = uri("https://dl.bintray.com/icerockdev/moko") }
1513
}
1614

17-
// workaround for https://youtrack.jetbrains.com/issue/KT-27170
18-
configurations.create("compileClasspath")
15+
plugins.withId(Deps.Plugins.androidLibrary.id) {
16+
configure<com.android.build.gradle.LibraryExtension> {
17+
compileSdkVersion(Deps.Android.compileSdk)
18+
19+
defaultConfig {
20+
minSdkVersion(Deps.Android.minSdk)
21+
targetSdkVersion(Deps.Android.targetSdk)
22+
}
23+
}
24+
}
1925
}
2026

2127
tasks.register("clean", Delete::class).configure {

buildSrc/build.gradle.kts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
*/
44

55
plugins {
6-
`kotlin-dsl`
6+
id("org.jetbrains.kotlin.jvm") version("1.4.0")
77
}
88

99
repositories {
@@ -16,11 +16,7 @@ repositories {
1616
}
1717

1818
dependencies {
19-
implementation("dev.icerock:mobile-multiplatform:0.6.0")
20-
implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.70")
21-
implementation("com.android.tools.build:gradle:3.6.1")
22-
}
23-
24-
kotlinDslPluginOptions {
25-
experimentalWarning.set(false)
19+
implementation("dev.icerock:mobile-multiplatform:0.7.0")
20+
implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.0")
21+
implementation("com.android.tools.build:gradle:4.0.1")
2622
}

buildSrc/src/main/kotlin/Deps.kt

Lines changed: 65 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,75 @@
11
object Deps {
2+
private const val kotlinVersion = "1.4.0"
3+
4+
private const val androidAppCompatVersion = "1.1.0"
5+
private const val materialDesignVersion = "1.0.0"
6+
private const val androidLifecycleVersion = "2.1.0"
7+
private const val androidCoreTestingVersion = "2.1.0"
8+
private const val playServicesLocationVersion = "16.0.0"
9+
10+
private const val detektVersion = "1.7.4"
11+
12+
private const val coroutinesVersion = "1.3.9"
13+
private const val mokoParcelizeVersion = "0.4.0"
14+
private const val mokoPermissionsVersion = "0.6.0"
15+
private const val mokoMvvmVersion = "0.8.0"
16+
const val mokoGeoVersion = "0.3.0"
17+
18+
object Android {
19+
const val compileSdk = 28
20+
const val targetSdk = 28
21+
const val minSdk = 16
22+
}
23+
24+
object Plugins {
25+
val androidApplication = GradlePlugin(id = "com.android.application")
26+
val androidLibrary = GradlePlugin(id = "com.android.library")
27+
val kotlinJvm = GradlePlugin(id = "org.jetbrains.kotlin.jvm")
28+
val kotlinMultiplatform = GradlePlugin(id = "org.jetbrains.kotlin.multiplatform")
29+
val kotlinKapt = GradlePlugin(id = "kotlin-kapt")
30+
val kotlinAndroid = GradlePlugin(id = "kotlin-android")
31+
val kotlinAndroidExtensions = GradlePlugin(id = "kotlin-android-extensions")
32+
val kotlinSerialization = GradlePlugin(id = "kotlin-serialization")
33+
val mavenPublish = GradlePlugin(id = "org.gradle.maven-publish")
34+
35+
val mobileMultiplatform = GradlePlugin(id = "dev.icerock.mobile.multiplatform")
36+
val iosFramework = GradlePlugin(id = "dev.icerock.mobile.multiplatform.ios-framework")
37+
38+
val detekt = GradlePlugin(
39+
id = "io.gitlab.arturbosch.detekt",
40+
version = detektVersion
41+
)
42+
}
43+
244
object Libs {
345
object Android {
4-
val kotlinStdLib = AndroidLibrary(
5-
name = "org.jetbrains.kotlin:kotlin-stdlib:${Versions.kotlin}"
6-
)
7-
val appCompat = AndroidLibrary(
8-
name = "androidx.appcompat:appcompat:${Versions.Libs.Android.appCompat}"
9-
)
10-
val material = AndroidLibrary(
11-
name = "com.google.android.material:material:${Versions.Libs.Android.material}"
12-
)
13-
val lifecycle = AndroidLibrary(
14-
name = "androidx.lifecycle:lifecycle-extensions:${Versions.Libs.Android.lifecycle}"
15-
)
16-
val playServicesLocation = AndroidLibrary(
17-
name = "com.google.android.gms:play-services-location:${Versions.Libs.Android.playServicesLocation}"
18-
)
46+
const val appCompat = "androidx.appcompat:appcompat:$androidAppCompatVersion"
47+
const val material = "com.google.android.material:material:$materialDesignVersion"
48+
const val lifecycle = "androidx.lifecycle:lifecycle-extensions:$androidLifecycleVersion"
49+
const val coroutines =
50+
"org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion"
51+
const val playServicesLocation =
52+
"com.google.android.gms:play-services-location:$playServicesLocationVersion"
1953
}
2054

2155
object MultiPlatform {
22-
val kotlinStdLib = MultiPlatformLibrary(
23-
android = Android.kotlinStdLib.name,
24-
common = "org.jetbrains.kotlin:kotlin-stdlib-common:${Versions.kotlin}"
25-
)
26-
val coroutines = MultiPlatformLibrary(
27-
android = "org.jetbrains.kotlinx:kotlinx-coroutines-android:${Versions.Libs.MultiPlatform.coroutines}",
28-
common = "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:${Versions.Libs.MultiPlatform.coroutines}",
29-
ios = "org.jetbrains.kotlinx:kotlinx-coroutines-core-native:${Versions.Libs.MultiPlatform.coroutines}"
30-
)
31-
val mokoGeo = MultiPlatformLibrary(
32-
common = "dev.icerock.moko:geo:${Versions.Libs.MultiPlatform.mokoGeo}",
33-
iosX64 = "dev.icerock.moko:geo-iosx64:${Versions.Libs.MultiPlatform.mokoGeo}",
34-
iosArm64 = "dev.icerock.moko:geo-iosarm64:${Versions.Libs.MultiPlatform.mokoGeo}"
35-
)
36-
val mokoParcelize = MultiPlatformLibrary(
37-
common = "dev.icerock.moko:parcelize:${Versions.Libs.MultiPlatform.mokoParcelize}",
38-
iosX64 = "dev.icerock.moko:parcelize-iosx64:${Versions.Libs.MultiPlatform.mokoParcelize}",
39-
iosArm64 = "dev.icerock.moko:parcelize-iosarm64:${Versions.Libs.MultiPlatform.mokoParcelize}"
40-
)
56+
const val coroutines =
57+
"org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion"
58+
const val mokoParcelize = "dev.icerock.moko:parcelize:$mokoParcelizeVersion"
4159
val mokoPermissions = MultiPlatformLibrary(
42-
common = "dev.icerock.moko:permissions:${Versions.Libs.MultiPlatform.mokoPermissions}",
43-
iosX64 = "dev.icerock.moko:permissions-iosx64:${Versions.Libs.MultiPlatform.mokoPermissions}",
44-
iosArm64 = "dev.icerock.moko:permissions-iosarm64:${Versions.Libs.MultiPlatform.mokoPermissions}"
45-
)
46-
val mokoMvvm = MultiPlatformLibrary(
47-
common = "dev.icerock.moko:mvvm:${Versions.Libs.MultiPlatform.mokoMvvm}",
48-
iosX64 = "dev.icerock.moko:mvvm-iosx64:${Versions.Libs.MultiPlatform.mokoMvvm}",
49-
iosArm64 = "dev.icerock.moko:mvvm-iosarm64:${Versions.Libs.MultiPlatform.mokoMvvm}"
60+
common = "dev.icerock.moko:permissions:$mokoPermissionsVersion",
61+
iosX64 = "dev.icerock.moko:permissions-iosx64:$mokoPermissionsVersion",
62+
iosArm64 = "dev.icerock.moko:permissions-iosarm64:$mokoPermissionsVersion"
5063
)
64+
const val mokoMvvm = "dev.icerock.moko:mvvm:$mokoMvvmVersion"
65+
const val mokoGeo = "dev.icerock.moko:geo:$mokoGeoVersion"
66+
}
67+
68+
object Tests {
69+
const val kotlinTestJUnit =
70+
"org.jetbrains.kotlin:kotlin-test-junit:$kotlinVersion"
71+
const val androidCoreTesting =
72+
"androidx.arch.core:core-testing:$androidCoreTestingVersion"
5173
}
5274
}
53-
}
75+
}

buildSrc/src/main/kotlin/Versions.kt

Lines changed: 0 additions & 26 deletions
This file was deleted.

geo/build.gradle.kts

Lines changed: 13 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,36 +3,26 @@
33
*/
44

55
plugins {
6-
id("com.android.library")
7-
id("org.jetbrains.kotlin.multiplatform")
8-
id("kotlin-kapt")
9-
id("kotlin-android-extensions")
10-
id("dev.icerock.mobile.multiplatform")
11-
id("maven-publish")
6+
plugin(Deps.Plugins.androidLibrary)
7+
plugin(Deps.Plugins.kotlinMultiplatform)
8+
plugin(Deps.Plugins.kotlinKapt)
9+
plugin(Deps.Plugins.kotlinAndroidExtensions)
10+
plugin(Deps.Plugins.mobileMultiplatform)
11+
plugin(Deps.Plugins.mavenPublish)
1212
}
1313

1414
group = "dev.icerock.moko"
15-
version = Versions.Libs.MultiPlatform.mokoGeo
16-
17-
android {
18-
compileSdkVersion(Versions.Android.compileSdk)
19-
20-
defaultConfig {
21-
minSdkVersion(Versions.Android.minSdk)
22-
targetSdkVersion(Versions.Android.targetSdk)
23-
}
24-
}
15+
version = Deps.mokoGeoVersion
2516

2617
dependencies {
27-
mppLibrary(Deps.Libs.MultiPlatform.kotlinStdLib)
28-
mppLibrary(Deps.Libs.MultiPlatform.coroutines)
18+
commonMainImplementation(Deps.Libs.MultiPlatform.coroutines)
2919

30-
mppLibrary(Deps.Libs.MultiPlatform.mokoParcelize)
31-
mppLibrary(Deps.Libs.MultiPlatform.mokoPermissions)
20+
commonMainImplementation(Deps.Libs.MultiPlatform.mokoParcelize)
21+
commonMainImplementation(Deps.Libs.MultiPlatform.mokoPermissions.common)
3222

33-
androidLibrary(Deps.Libs.Android.appCompat)
34-
androidLibrary(Deps.Libs.Android.lifecycle)
35-
androidLibrary(Deps.Libs.Android.playServicesLocation)
23+
androidMainImplementation(Deps.Libs.Android.appCompat)
24+
androidMainImplementation(Deps.Libs.Android.lifecycle)
25+
androidMainImplementation(Deps.Libs.Android.playServicesLocation)
3626
}
3727

3828
publishing {

geo/src/iosArm64Main

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
iosMain
1+
iosX64Main

geo/src/iosMain/kotlin/dev/icerock/moko/geo/LocationTracker.kt

Lines changed: 6 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -6,35 +6,31 @@ package dev.icerock.moko.geo
66

77
import dev.icerock.moko.permissions.Permission
88
import dev.icerock.moko.permissions.PermissionsController
9-
import kotlinx.cinterop.useContents
109
import kotlinx.coroutines.CoroutineScope
1110
import kotlinx.coroutines.channels.Channel
1211
import kotlinx.coroutines.channels.awaitClose
1312
import kotlinx.coroutines.flow.Flow
1413
import kotlinx.coroutines.flow.channelFlow
1514
import kotlinx.coroutines.isActive
1615
import kotlinx.coroutines.launch
17-
import platform.CoreLocation.CLLocation
1816
import platform.CoreLocation.CLLocationAccuracy
1917
import platform.CoreLocation.CLLocationManager
20-
import platform.CoreLocation.CLLocationManagerDelegateProtocol
2118
import platform.CoreLocation.kCLLocationAccuracyBest
22-
import platform.Foundation.NSError
23-
import platform.Foundation.NSLog
24-
import platform.darwin.NSObject
25-
import kotlin.native.ref.WeakReference
2619

2720
actual class LocationTracker(
2821
actual val permissionsController: PermissionsController,
2922
accuracy: CLLocationAccuracy = kCLLocationAccuracyBest
3023
) {
31-
private val tracker = Tracker(this)
24+
private val locationsChannel = Channel<LatLng>(Channel.BUFFERED)
25+
private val trackerScope = CoroutineScope(UIDispatcher())
26+
private val tracker = Tracker(
27+
locationsChannel = locationsChannel,
28+
scope = trackerScope
29+
)
3230
private val locationManager = CLLocationManager().apply {
3331
delegate = tracker
3432
desiredAccuracy = accuracy
3533
}
36-
private val locationsChannel = Channel<LatLng>(Channel.BUFFERED)
37-
private val trackerScope = CoroutineScope(UIDispatcher())
3834

3935
actual suspend fun startTracking() {
4036
permissionsController.providePermission(Permission.LOCATION)
@@ -60,32 +56,4 @@ actual class LocationTracker(
6056
awaitClose { job.cancel() }
6157
}
6258
}
63-
64-
private class Tracker(
65-
locationTracker: LocationTracker
66-
) : NSObject(), CLLocationManagerDelegateProtocol {
67-
private val locationTracker = WeakReference(locationTracker)
68-
69-
override fun locationManager(manager: CLLocationManager, didUpdateLocations: List<*>) {
70-
val locations = didUpdateLocations as List<CLLocation>
71-
val locationTracker = locationTracker.get() ?: return
72-
val trackerScope = locationTracker.trackerScope
73-
val locationsChannel = locationTracker.locationsChannel
74-
75-
locations.forEach { location ->
76-
val latLng = location.coordinate().useContents {
77-
LatLng(
78-
latitude = latitude,
79-
longitude = longitude
80-
)
81-
}
82-
trackerScope.launch { locationsChannel.send(latLng) }
83-
}
84-
}
85-
86-
override fun locationManager(manager: CLLocationManager, didFailWithError: NSError) {
87-
NSLog("$this fail with $didFailWithError")
88-
}
89-
}
9059
}
91-

0 commit comments

Comments
 (0)