diff options
| author | Harsh Shandilya <me@msfjarvis.dev> | 2022-01-09 17:50:22 +0530 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-01-09 17:50:22 +0530 |
| commit | 35155e55841bc87b2c0e0dc577e1433041b44bc5 (patch) | |
| tree | c9cf58da55e5876b4fe5676a415b9299881e83ef /app/src/main/java/dev/msfjarvis/aps/util | |
| parent | 1738879fb3ba1b2c2d0ca7933c861bf99ae32535 (diff) | |
| download | HardenedPass-35155e55841bc87b2c0e0dc577e1433041b44bc5.tar.gz HardenedPass-35155e55841bc87b2c0e0dc577e1433041b44bc5.zip | |
Make PGPainless backend feature flag runtime configurable (#1654)
* Make feature flags runtime configurable
* Add a settings entry for PGPainless feature flag
* Add changelog entry
Diffstat (limited to 'app/src/main/java/dev/msfjarvis/aps/util')
5 files changed, 82 insertions, 8 deletions
diff --git a/app/src/main/java/dev/msfjarvis/aps/util/autofill/Api30AutofillResponseBuilder.kt b/app/src/main/java/dev/msfjarvis/aps/util/autofill/Api30AutofillResponseBuilder.kt index fd8faa7f..22f2db85 100644 --- a/app/src/main/java/dev/msfjarvis/aps/util/autofill/Api30AutofillResponseBuilder.kt +++ b/app/src/main/java/dev/msfjarvis/aps/util/autofill/Api30AutofillResponseBuilder.kt @@ -19,13 +19,17 @@ import com.github.androidpasswordstore.autofillparser.AutofillAction import com.github.androidpasswordstore.autofillparser.FillableForm import com.github.androidpasswordstore.autofillparser.fillWith import com.github.michaelbull.result.fold +import dagger.assisted.Assisted +import dagger.assisted.AssistedFactory +import dagger.assisted.AssistedInject import dev.msfjarvis.aps.autofill.oreo.ui.AutofillSmsActivity import dev.msfjarvis.aps.ui.autofill.AutofillDecryptActivity import dev.msfjarvis.aps.ui.autofill.AutofillDecryptActivityV2 import dev.msfjarvis.aps.ui.autofill.AutofillFilterView import dev.msfjarvis.aps.ui.autofill.AutofillPublisherChangedActivity import dev.msfjarvis.aps.ui.autofill.AutofillSaveActivity -import dev.msfjarvis.aps.util.FeatureFlags +import dev.msfjarvis.aps.util.features.Feature +import dev.msfjarvis.aps.util.features.Features import java.io.File import logcat.LogPriority.ERROR import logcat.asLog @@ -33,7 +37,17 @@ import logcat.logcat /** Implements [AutofillResponseBuilder]'s methods for API 30 and above */ @RequiresApi(Build.VERSION_CODES.R) -class Api30AutofillResponseBuilder(form: FillableForm) { +class Api30AutofillResponseBuilder +@AssistedInject +constructor( + @Assisted form: FillableForm, + private val features: Features, +) { + + @AssistedFactory + interface Factory { + fun create(form: FillableForm): Api30AutofillResponseBuilder + } private val formOrigin = form.formOrigin private val scenario = form.scenario @@ -73,7 +87,7 @@ class Api30AutofillResponseBuilder(form: FillableForm) { if (!scenario.hasFieldsToFillOn(AutofillAction.Match)) return null val metadata = makeFillMatchMetadata(context, file) val intentSender = - if (FeatureFlags.ENABLE_PGP_V2_BACKEND) { + if (features.isEnabled(Feature.EnablePGPainlessBackend)) { AutofillDecryptActivityV2.makeDecryptFileIntentSender(file, context) } else { AutofillDecryptActivity.makeDecryptFileIntentSender(file, context) diff --git a/app/src/main/java/dev/msfjarvis/aps/util/autofill/AutofillResponseBuilder.kt b/app/src/main/java/dev/msfjarvis/aps/util/autofill/AutofillResponseBuilder.kt index 723347f2..5c1c91d6 100644 --- a/app/src/main/java/dev/msfjarvis/aps/util/autofill/AutofillResponseBuilder.kt +++ b/app/src/main/java/dev/msfjarvis/aps/util/autofill/AutofillResponseBuilder.kt @@ -19,20 +19,34 @@ import com.github.androidpasswordstore.autofillparser.Credentials import com.github.androidpasswordstore.autofillparser.FillableForm import com.github.androidpasswordstore.autofillparser.fillWith import com.github.michaelbull.result.fold +import dagger.assisted.Assisted +import dagger.assisted.AssistedFactory +import dagger.assisted.AssistedInject import dev.msfjarvis.aps.autofill.oreo.ui.AutofillSmsActivity import dev.msfjarvis.aps.ui.autofill.AutofillDecryptActivity import dev.msfjarvis.aps.ui.autofill.AutofillDecryptActivityV2 import dev.msfjarvis.aps.ui.autofill.AutofillFilterView import dev.msfjarvis.aps.ui.autofill.AutofillPublisherChangedActivity import dev.msfjarvis.aps.ui.autofill.AutofillSaveActivity -import dev.msfjarvis.aps.util.FeatureFlags +import dev.msfjarvis.aps.util.features.Feature +import dev.msfjarvis.aps.util.features.Features import java.io.File import logcat.LogPriority.ERROR import logcat.asLog import logcat.logcat @RequiresApi(Build.VERSION_CODES.O) -class AutofillResponseBuilder(form: FillableForm) { +class AutofillResponseBuilder +@AssistedInject +constructor( + @Assisted form: FillableForm, + private val features: Features, +) { + + @AssistedFactory + interface Factory { + fun create(form: FillableForm): AutofillResponseBuilder + } private val formOrigin = form.formOrigin private val scenario = form.scenario @@ -61,7 +75,7 @@ class AutofillResponseBuilder(form: FillableForm) { if (!scenario.hasFieldsToFillOn(AutofillAction.Match)) return null val metadata = makeFillMatchMetadata(context, file) val intentSender = - if (FeatureFlags.ENABLE_PGP_V2_BACKEND) { + if (features.isEnabled(Feature.EnablePGPainlessBackend)) { AutofillDecryptActivityV2.makeDecryptFileIntentSender(file, context) } else { AutofillDecryptActivity.makeDecryptFileIntentSender(file, context) diff --git a/app/src/main/java/dev/msfjarvis/aps/util/features/Feature.kt b/app/src/main/java/dev/msfjarvis/aps/util/features/Feature.kt new file mode 100644 index 00000000..7ae2e642 --- /dev/null +++ b/app/src/main/java/dev/msfjarvis/aps/util/features/Feature.kt @@ -0,0 +1,18 @@ +/* + * Copyright © 2014-2022 The Android Password Store Authors. All Rights Reserved. + * SPDX-License-Identifier: GPL-3.0-only + */ + +package dev.msfjarvis.aps.util.features + +/** List of all feature flags for the app. */ +enum class Feature( + /** Default value for the flag. */ + val defaultValue: Boolean, + /** Key to retrieve the current value for the flag. */ + val configKey: String, +) { + + /** Opt into the new PGP backend powered by the PGPainless library. */ + EnablePGPainlessBackend(false, "enable_pgp_v2_backend"), +} diff --git a/app/src/main/java/dev/msfjarvis/aps/util/features/Features.kt b/app/src/main/java/dev/msfjarvis/aps/util/features/Features.kt new file mode 100644 index 00000000..39b2c3a8 --- /dev/null +++ b/app/src/main/java/dev/msfjarvis/aps/util/features/Features.kt @@ -0,0 +1,21 @@ +/* + * Copyright © 2014-2022 The Android Password Store Authors. All Rights Reserved. + * SPDX-License-Identifier: GPL-3.0-only + */ + +package dev.msfjarvis.aps.util.features + +import android.content.SharedPreferences +import dev.msfjarvis.aps.injection.prefs.SettingsPreferences +import javax.inject.Inject + +class Features +@Inject +constructor( + @SettingsPreferences private val preferences: SharedPreferences, +) { + + fun isEnabled(feature: Feature): Boolean { + return preferences.getBoolean(feature.configKey, feature.defaultValue) + } +} diff --git a/app/src/main/java/dev/msfjarvis/aps/util/services/OreoAutofillService.kt b/app/src/main/java/dev/msfjarvis/aps/util/services/OreoAutofillService.kt index a52caff0..7b804f3e 100644 --- a/app/src/main/java/dev/msfjarvis/aps/util/services/OreoAutofillService.kt +++ b/app/src/main/java/dev/msfjarvis/aps/util/services/OreoAutofillService.kt @@ -23,6 +23,7 @@ import com.github.androidpasswordstore.autofillparser.cachePublicSuffixList import com.github.androidpasswordstore.autofillparser.passwordValue import com.github.androidpasswordstore.autofillparser.recoverNodes import com.github.androidpasswordstore.autofillparser.usernameValue +import dagger.hilt.android.AndroidEntryPoint import dev.msfjarvis.aps.BuildConfig import dev.msfjarvis.aps.R import dev.msfjarvis.aps.ui.autofill.AutofillSaveActivity @@ -32,10 +33,12 @@ import dev.msfjarvis.aps.util.extensions.getString import dev.msfjarvis.aps.util.extensions.hasFlag import dev.msfjarvis.aps.util.extensions.sharedPrefs import dev.msfjarvis.aps.util.settings.PreferenceKeys +import javax.inject.Inject import logcat.LogPriority.ERROR import logcat.logcat @RequiresApi(Build.VERSION_CODES.O) +@AndroidEntryPoint class OreoAutofillService : AutofillService() { companion object { @@ -55,6 +58,9 @@ class OreoAutofillService : AutofillService() { private const val DISABLE_AUTOFILL_DURATION_MS = 1000 * 60 * 60 * 24L } + @Inject lateinit var api30ResponseBuilderFactory: Api30AutofillResponseBuilder.Factory + @Inject lateinit var responseBuilderFactory: AutofillResponseBuilder.Factory + override fun onCreate() { super.onCreate() cachePublicSuffixList(applicationContext) @@ -97,10 +103,11 @@ class OreoAutofillService : AutofillService() { return } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { - Api30AutofillResponseBuilder(formToFill) + api30ResponseBuilderFactory + .create(formToFill) .fillCredentials(this, request.inlineSuggestionsRequest, callback) } else { - AutofillResponseBuilder(formToFill).fillCredentials(this, callback) + responseBuilderFactory.create(formToFill).fillCredentials(this, callback) } } |
