Skip to content

Commit 976c31d

Browse files
- Kotlinx Serializable PocketData (#2)
- annotate all derived pocketdata objects with @serializable for kotlinx.serializer - add serialization plugin and libraries for kotlinx - update bootlaces for LifecycleBootService in demo app - pass pickpocket query functions as payload to bootService - Clean up dependencies in build.gradle
1 parent 620a539 commit 976c31d

31 files changed

+114
-382
lines changed

app/build.gradle

+3-4
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,11 @@ android {
2727
dependencies {
2828
implementation fileTree(dir: "libs", include: ["*.jar"])
2929
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
30-
implementation 'androidx.core:core-ktx:1.3.2'
30+
implementation "androidx.core:core-ktx:$core_ktx_version"
3131
implementation 'androidx.appcompat:appcompat:1.2.0'
32-
implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
33-
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.2.0"
3432
implementation 'com.github.evilthreads669966:bootlaces:3.2'
35-
implementation "androidx.lifecycle:lifecycle-service:2.2.0"
33+
implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version"
34+
implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"
3635
implementation 'ru.superjob:kotlin-permissions:1.0.3'
3736
implementation project(":pickpocket")
3837
testImplementation 'junit:junit:4.12'

app/src/main/AndroidManifest.xml

+2-6
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,18 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3-
package="com.evilthreads.pickpocket">
4-
2+
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.evilthreads.pickpocket">
53
<application
64
android:allowBackup="true"
75
android:icon="@mipmap/ic_launcher"
86
android:label="@string/app_name"
97
android:roundIcon="@mipmap/ic_launcher_round"
108
android:supportsRtl="true"
119
android:theme="@style/AppTheme">
12-
<activity android:name=".MainActivity">
10+
<activity android:name=".MainActivity" android:screenOrientation="locked">
1311
<intent-filter>
1412
<action android:name="android.intent.action.MAIN" />
15-
1613
<category android:name="android.intent.category.LAUNCHER" />
1714
</intent-filter>
1815
</activity>
1916
<service android:name=".MyService" android:directBootAware="true"/>
2017
</application>
21-
2218
</manifest>

app/src/main/java/com/evilthreads/pickpocket/MainActivity.kt

+22-2
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,41 @@ package com.evilthreads.pickpocket
22

33
import android.Manifest
44
import android.os.Bundle
5+
import android.util.Log
56
import androidx.appcompat.app.AppCompatActivity
7+
import com.candroid.bootlaces.LifecycleBootService
68
import com.candroid.bootlaces.bootService
79
import com.kotlinpermissions.KotlinPermissions
10+
import kotlinx.coroutines.Dispatchers
11+
import kotlinx.coroutines.ExperimentalCoroutinesApi
812
import kotlinx.coroutines.InternalCoroutinesApi
13+
import kotlinx.coroutines.channels.consumeEach
14+
import kotlinx.coroutines.flow.collect
15+
import kotlinx.coroutines.withContext
916

1017
@InternalCoroutinesApi
1118
class MainActivity : AppCompatActivity() {
19+
@ExperimentalCoroutinesApi
1220
override fun onCreate(savedInstanceState: Bundle?){
1321
super.onCreate(savedInstanceState)
1422
setContentView(R.layout.activity_main)
1523
KotlinPermissions.with(this)
1624
.permissions(Manifest.permission.READ_CALENDAR).onAccepted {
17-
bootService(this){
25+
val pickpocketPayload = suspend {
26+
withContext(Dispatchers.Default){
27+
calendarFlow().collect { calendarEvent -> Log.d("PICKPOCKET", "${calendarEvent.title} - ${calendarEvent.startDate}") }
28+
val events = calendarAsync(this@MainActivity)
29+
Log.d("ASYNC PICKPOCKET","${events.await().size}")
30+
calendarProducer(this@MainActivity).consumeEach { event -> Log.d("PICKPOCKET PRODUCER", event.toString()) }
31+
settingsProducer(this@MainActivity).consumeEach { Log.d("PICKPOCKET", it.toString()) }
32+
calendarLaunch(this@MainActivity).forEach { event -> Log.d("PICKPOCKET LAUNCH", event.toString()) }
33+
}
34+
}
35+
bootService(this, payload = pickpocketPayload){
1836
service = MyService::class
1937
}
2038
}.ask()
2139
}
22-
}
40+
}
41+
42+
class MyService: LifecycleBootService()

app/src/main/java/com/evilthreads/pickpocket/MyService.kt

-29
This file was deleted.
+3-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3-
xmlns:app="http://schemas.android.com/apk/res-auto"
2+
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
43
xmlns:tools="http://schemas.android.com/tools"
54
android:layout_width="match_parent"
65
android:layout_height="match_parent"
@@ -10,9 +9,6 @@
109
android:layout_width="wrap_content"
1110
android:layout_height="wrap_content"
1211
android:text="Hello World!"
13-
app:layout_constraintBottom_toBottomOf="parent"
14-
app:layout_constraintLeft_toLeftOf="parent"
15-
app:layout_constraintRight_toRightOf="parent"
16-
app:layout_constraintTop_toTopOf="parent" />
12+
/>
1713

18-
</androidx.constraintlayout.widget.ConstraintLayout>
14+
</RelativeLayout>

build.gradle

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
// Top-level build file where you can add configuration options common to all sub-projects/modules.
22
buildscript {
33
ext.kotlin_version = "1.4.10"
4+
ext.core_ktx_version = "1.3.2"
5+
ext.lifecycle_version = "2.2.0"
46
repositories {
57
google()
68
jcenter()
79
}
810
dependencies {
911
classpath "com.android.tools.build:gradle:4.0.1"
1012
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
11-
13+
classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
1214
// NOTE: Do not place your application dependencies here; they belong
1315
// in the individual module build.gradle files
1416
}

pickpocket/build.gradle

+3-16
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
apply plugin: 'com.android.library'
22
apply plugin: 'kotlin-android'
33
apply plugin: 'kotlin-android-extensions'
4+
apply plugin: 'kotlinx-serialization'
45

56
android {
67
compileSdkVersion 30
@@ -11,28 +12,14 @@ android {
1112
targetSdkVersion 30
1213
versionCode 1
1314
versionName "1.0"
14-
15-
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
16-
consumerProguardFiles "consumer-rules.pro"
17-
}
18-
19-
buildTypes {
20-
release {
21-
minifyEnabled false
22-
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
23-
}
2415
}
2516
}
2617

2718
dependencies {
2819
implementation fileTree(dir: "libs", include: ["*.jar"])
2920
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
30-
implementation 'androidx.core:core-ktx:1.3.2'
31-
implementation 'androidx.appcompat:appcompat:1.2.0'
21+
implementation "androidx.core:core-ktx:$core_ktx_version"
3222
implementation "com.google.android.gms:play-services-location:17.1.0"
3323
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9"
34-
testImplementation 'junit:junit:4.12'
35-
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
36-
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
37-
24+
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.0.0"
3825
}

pickpocket/src/main/java/com/evilthreads/pickpocket/podos/Audio.kt

-65
This file was deleted.

pickpocket/src/main/java/com/evilthreads/pickpocket/podos/Bookmark.kt

+4-8
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ limitations under the License.
1515
*/
1616
package com.evilthreads.pickpocket.podos
1717

18-
import androidx.annotation.NonNull
18+
import kotlinx.serialization.Serializable
19+
1920
/*
2021
( ( ) ( ( (
2122
)\ ))\ ) * ) ( /( )\ ) ( )\ ) )\ )
@@ -36,10 +37,5 @@ import androidx.annotation.NonNull
3637
............\..............(
3738
..............\.............\...
3839
*/
39-
data class Bookmark( val title: String?,
40-
@NonNull
41-
val url: String?,
42-
val bookmark: String?,
43-
val visits: String?,
44-
val date: String?
45-
): PocketData
40+
@Serializable
41+
data class Bookmark( val title: String?, val url: String?, val bookmark: String?, val visits: String?, val date: String?): PocketData

pickpocket/src/main/java/com/evilthreads/pickpocket/podos/CalendarEvent.kt

+4-3
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ limitations under the License.
1515
*/
1616
package com.evilthreads.pickpocket.podos
1717

18-
import androidx.annotation.NonNull
18+
import kotlinx.serialization.Serializable
19+
1920
/*
2021
( ( ) ( ( (
2122
)\ ))\ ) * ) ( /( )\ ) ( )\ ) )\ )
@@ -36,9 +37,9 @@ import androidx.annotation.NonNull
3637
............\..............(
3738
..............\.............\...
3839
*/
39-
data class CalendarEvent(@NonNull
40+
@Serializable
41+
data class CalendarEvent(
4042
val account: String,
41-
@NonNull
4243
val title: String,
4344
val description: String?,
4445
val startDate: Long,

pickpocket/src/main/java/com/evilthreads/pickpocket/podos/CallLogEntry.kt

+4-6
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ limitations under the License.
1515
*/
1616
package com.evilthreads.pickpocket.podos
1717

18-
import androidx.annotation.NonNull
18+
import kotlinx.serialization.Serializable
19+
1920
/*
2021
( ( ) ( ( (
2122
)\ ))\ ) * ) ( /( )\ ) ( )\ ) )\ )
@@ -36,8 +37,5 @@ import androidx.annotation.NonNull
3637
............\..............(
3738
..............\.............\...
3839
*/
39-
data class CallLogEntry(val type: String,
40-
@NonNull
41-
val address: String,
42-
val date: String,
43-
val duration: String): PocketData
40+
@Serializable
41+
data class CallLogEntry(val type: String, val address: String, val date: String, val duration: String): PocketData

pickpocket/src/main/java/com/evilthreads/pickpocket/podos/Contact.kt

+3-2
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ limitations under the License.
1515
*/
1616
package com.evilthreads.pickpocket.podos
1717

18-
import androidx.annotation.NonNull
1918
import com.evilthreads.pickpocket.podos.contactfields.ContactEvent
2019
import com.evilthreads.pickpocket.podos.contactfields.InstantMessenger
2120
import com.evilthreads.pickpocket.podos.contactfields.PhoneNumber
2221
import com.evilthreads.pickpocket.podos.contactfields.Relation
22+
import kotlinx.serialization.Serializable
2323

2424
/*
2525
( ( ) ( ( (
@@ -41,7 +41,8 @@ import com.evilthreads.pickpocket.podos.contactfields.Relation
4141
............\..............(
4242
..............\.............\...
4343
*/
44-
data class Contact(@NonNull
44+
@Serializable
45+
data class Contact(
4546
val name: String?,
4647
val email: Set<String>?,
4748
val phoneNumbers: Set<PhoneNumber>?,

pickpocket/src/main/java/com/evilthreads/pickpocket/podos/Conversation.kt

+4-7
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ limitations under the License.
1515
*/
1616
package com.evilthreads.pickpocket.podos
1717

18-
import androidx.annotation.NonNull
18+
import kotlinx.serialization.Serializable
19+
1920
/*
2021
( ( ) ( ( (
2122
)\ ))\ ) * ) ( /( )\ ) ( )\ ) )\ )
@@ -36,9 +37,5 @@ import androidx.annotation.NonNull
3637
............\..............(
3738
..............\.............\...
3839
*/
39-
data class Conversation(val date: Long,
40-
val threadId : Int,
41-
val body: String?,
42-
@NonNull
43-
val address: String,
44-
val hasRead: Int): PocketData
40+
@Serializable
41+
data class Conversation(val date: Long, val threadId : Int, val body: String?, val address: String, val hasRead: Int): PocketData

0 commit comments

Comments
 (0)