Skip to content

Commit ca682ae

Browse files
authored
[Autofill] Introduce autofill feature
2 parents a074a6d + dc0dc5e commit ca682ae

223 files changed

Lines changed: 6084 additions & 1580 deletions

File tree

Some content is hidden

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

app/build.gradle.kts

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
44

55
plugins {
66
alias(libs.plugins.android.application)
7-
alias(libs.plugins.androidx.room)
87
alias(libs.plugins.kotlin.parcelize)
98
alias(libs.plugins.kotlin.android)
109
alias(libs.plugins.kotlin.compose)
@@ -64,11 +63,13 @@ android {
6463

6564
kotlin {
6665
compilerOptions {
66+
freeCompilerArgs.add("-Xcontext-parameters")
6767
jvmTarget = JvmTarget.JVM_17
6868
}
6969
}
7070

7171
dependencies {
72+
implementation(libs.okhttp)
7273

7374
// Koin DI
7475
implementation(project.dependencies.platform(libs.koin.bom))
@@ -77,14 +78,7 @@ dependencies {
7778
implementation(libs.koin.annotations)
7879
ksp(libs.koin.ksp.compiler)
7980

80-
// Room
81-
implementation(libs.androidx.room.runtime)
82-
implementation(libs.androidx.room.ktx)
83-
ksp(libs.androidx.room.compiler)
84-
85-
// Automation
86-
implementation(projects.automation)
87-
ksp(projects.automationProcessor)
81+
implementation(projects.core.item)
8882

8983
// Datastore
9084
implementation(libs.androidx.datastore)
@@ -96,6 +90,8 @@ dependencies {
9690
implementation(libs.offrange.passgen)
9791
implementation(libs.argon2kt)
9892

93+
implementation(libs.androidx.autofill)
94+
9995
// Use GMS ML Kit for barcode scanning on the Play Store to minimize app size; use ZXing for F-Droid builds.
10096
"playStoreImplementation"(libs.gms.mlkit.barcode.scanning)
10197
"fdroidImplementation"(libs.zxing.barcode.scanning)
@@ -153,12 +149,4 @@ protobuf {
153149
composeCompiler {
154150
reportsDestination = layout.buildDirectory.dir("compose_compiler")
155151
metricsDestination = layout.buildDirectory.dir("compose_compiler")
156-
}
157-
158-
room {
159-
schemaDirectory("$projectDir/schemas")
160-
}
161-
162-
ksp {
163-
arg("automation.packageName", "de.davis.keygo.generated")
164152
}

app/src/main/AndroidManifest.xml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,24 @@
4343
android:scheme="otpauth" />
4444
</intent-filter>
4545
</activity>
46+
47+
<service
48+
android:name=".autofill.presentation.KeyGoAutofillService"
49+
android:exported="true"
50+
android:permission="android.permission.BIND_AUTOFILL_SERVICE">
51+
<meta-data
52+
android:name="android.autofill"
53+
android:resource="@xml/keygo_autofill_service" />
54+
<intent-filter>
55+
<action android:name="android.service.autofill.AutofillService" />
56+
</intent-filter>
57+
</service>
58+
59+
<activity
60+
android:name=".autofill.presentation.activity.AutofillActivity"
61+
android:excludeFromRecents="true"
62+
android:exported="false"
63+
android:theme="@style/Theme.KeyGo.Auth.Transparent" />
4664
</application>
4765

4866
</manifest>
Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
package de.davis.keygo.app
22

33
import android.app.Application
4+
import de.davis.keygo.app.di.init
5+
import org.koin.core.context.startKoin
46

5-
class KeyGoApplication : Application()
7+
class KeyGoApplication : Application() {
8+
9+
override fun onCreate() {
10+
super.onCreate()
11+
startKoin {
12+
init(this@KeyGoApplication)
13+
}
14+
}
15+
}

app/src/main/kotlin/de/davis/keygo/app/di/Koin.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ package de.davis.keygo.app.di
22

33
import android.content.Context
44
import de.davis.keygo.auth.di.AuthModule
5-
import de.davis.keygo.core.data.local.datasource.KeyGoDatabase
5+
import de.davis.keygo.autofill.di.AutofillModule
66
import de.davis.keygo.core.di.CoreModule
7+
import de.davis.keygo.core.item.data.local.datasource.ItemDatabase
8+
import de.davis.keygo.core.util.di.CoreUtilModule
79
import de.davis.keygo.dashboard.di.DashboardModule
810
import de.davis.keygo.item.di.ItemModule
911
import de.davis.keygo.migration.create_access.di.MigrationCreateAccessModule
@@ -17,12 +19,14 @@ fun KoinApplication.init(androidContext: Context) {
1719

1820
// modules
1921
modules(
20-
KeyGoDatabase.koinModule,
22+
ItemDatabase.koinModule,
2123
CoreModule.module,
24+
CoreUtilModule.module,
2225
AuthModule.module,
2326
DashboardModule.module,
2427
ItemModule.module,
2528
TotpModule.module,
29+
AutofillModule.module,
2630

2731
MigrationCreateAccessModule.module
2832
)

app/src/main/kotlin/de/davis/keygo/auth/data/repository/KeyDerivationRepositoryImpl.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ package de.davis.keygo.auth.data.repository
33
import com.lambdapioneer.argon2kt.Argon2Kt
44
import com.lambdapioneer.argon2kt.Argon2Mode
55
import com.lambdapioneer.argon2kt.Argon2Version
6-
import de.davis.keygo.auth.domain.model.CryptographyError
76
import de.davis.keygo.auth.domain.repository.KeyDerivationRepository
8-
import de.davis.keygo.core.domain.Result
7+
import de.davis.keygo.core.identity.common.domain.model.CryptographyError
8+
import de.davis.keygo.core.util.Result
99
import org.koin.core.annotation.Single
1010

1111
@Single
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package de.davis.keygo.auth.data.repository
2+
3+
import androidx.datastore.core.DataStore
4+
import de.davis.keygo.auth.data.local.model.ProtoPasswordKeyData
5+
import de.davis.keygo.auth.data.mapper.toDomain
6+
import de.davis.keygo.auth.data.mapper.toProto
7+
import de.davis.keygo.auth.domain.model.PasswordWrappedKeyData
8+
import de.davis.keygo.core.di.annotation.PasswordQualifier
9+
import de.davis.keygo.core.identity.common.data.repository.DefaultWrappedKeyRepository
10+
import de.davis.keygo.core.identity.common.domain.repository.WrappedKeyRepository
11+
import org.koin.core.annotation.Single
12+
13+
@Suppress("FunctionName")
14+
@Single(binds = [WrappedKeyRepository::class])
15+
@PasswordQualifier
16+
fun PasswordWrappedKeyRepositoryImpl(@PasswordQualifier dataStore: DataStore<ProtoPasswordKeyData>) =
17+
DefaultWrappedKeyRepository(
18+
dataStore = dataStore,
19+
toDomain = ProtoPasswordKeyData::toDomain,
20+
toProto = PasswordWrappedKeyData::toProto,
21+
defaultInstance = ProtoPasswordKeyData::getDefaultInstance
22+
)

app/src/main/kotlin/de/davis/keygo/auth/di/AuthModule.kt

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@ package de.davis.keygo.auth.di
33
import android.content.Context
44
import androidx.datastore.dataStore
55
import com.lambdapioneer.argon2kt.Argon2Kt
6-
import de.davis.keygo.auth.data.local.model.ProtoBiometricKeyData
76
import de.davis.keygo.auth.data.local.model.ProtoPasswordKeyData
8-
import de.davis.keygo.auth.di.annotation.BiometricQualifier
97
import de.davis.keygo.core.di.DefaultProtoSerializer
108
import de.davis.keygo.core.di.annotation.PasswordQualifier
119
import org.koin.core.annotation.ComponentScan
@@ -24,24 +22,11 @@ object AuthModule {
2422
)
2523
)
2624

27-
private val Context.protoBiometricKeyDataStore by dataStore(
28-
"biometric_key_data.pb",
29-
DefaultProtoSerializer(
30-
defaultInstance = ProtoBiometricKeyData.getDefaultInstance(),
31-
parser = ProtoBiometricKeyData.parser()
32-
)
33-
)
34-
3525
@Single
3626
internal fun provideArgon2Kt() = Argon2Kt()
3727

3828
@Single
3929
@PasswordQualifier
4030
internal fun provideProtoPasswordKeyDataStore(context: Context) =
4131
context.protoPasswordKeyDataStore
42-
43-
@Single
44-
@BiometricQualifier
45-
internal fun provideProtoBiometricKeyDataStore(context: Context) =
46-
context.protoBiometricKeyDataStore
4732
}

app/src/main/kotlin/de/davis/keygo/auth/domain/model/BiometricRequest.kt

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

app/src/main/kotlin/de/davis/keygo/auth/domain/model/BiometricResult.kt

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

app/src/main/kotlin/de/davis/keygo/auth/domain/repository/BiometricAvailabilityRepository.kt

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

0 commit comments

Comments
 (0)