Loading app/build.gradle +1 −0 Original line number Diff line number Diff line Loading @@ -281,6 +281,7 @@ dependencies { // ez-vcard to parse/generate vCards api("com.googlecode.ez-vcard:ez-vcard:0.12.0") implementation 'foundation.e.featureflags.flags:featureflags:1.0-91153f49' // for tests androidTestImplementation "com.google.dagger:hilt-android-testing:${versions.hilt}" Loading app/src/main/AndroidManifest.xml +10 −0 Original line number Diff line number Diff line Loading @@ -781,6 +781,16 @@ android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/debug_paths" /> </provider> <meta-data android:name="foundation.e.featureflags.opt_in" android:value="true" /> <meta-data android:name="foundation.e.featureflags.app_enabled" android:value="true" /> <meta-data android:name="foundation.e.featureflags.features" android:resource="@xml/feature_flags" /> </application> <!-- package visiblity – which apps do we need to see? --> Loading app/src/main/kotlin/at/bitfire/davdroid/App.kt +41 −0 Original line number Diff line number Diff line Loading @@ -5,7 +5,9 @@ package at.bitfire.davdroid import android.app.Application import android.content.ComponentName import android.content.Context import android.content.pm.PackageManager import android.net.Uri import android.os.StrictMode import androidx.appcompat.content.res.AppCompatResources Loading @@ -14,11 +16,13 @@ import androidx.hilt.work.HiltWorkerFactory import androidx.work.Configuration import at.bitfire.davdroid.log.Logger import at.bitfire.davdroid.syncadapter.AccountsUpdatedListener import at.bitfire.davdroid.syncadapter.MurenaPasswordSyncAdapterService import at.bitfire.davdroid.syncadapter.SyncUtils import at.bitfire.davdroid.ui.DebugInfoActivity import at.bitfire.davdroid.ui.NotificationUtils import at.bitfire.davdroid.ui.UiUtils import dagger.hilt.android.HiltAndroidApp import foundation.e.featureflags.flags.FeatureFlags import foundation.e.lib.telemetry.Telemetry import java.util.logging.Level import javax.inject.Inject Loading Loading @@ -72,6 +76,7 @@ class App: Application(), Thread.UncaughtExceptionHandler, Configuration.Provide override fun onCreate() { super.onCreate() Logger.initialize(this) updateMurenaPasswordSyncAdapterState() // Allow enabling telemetry only for release builds. if (!BuildConfig.DEBUG) { Loading Loading @@ -116,6 +121,42 @@ class App: Application(), Thread.UncaughtExceptionHandler, Configuration.Provide } } private fun updateMurenaPasswordSyncAdapterState() { val flags = FeatureFlags.forCurrentApp(this) val passwordsEnabled = flags.isFeatureEnabled("passwords") val component = ComponentName(this, MurenaPasswordSyncAdapterService::class.java) if (isComponentCurrentlyEnabled(component) == passwordsEnabled) { return } setComponentState(component, passwordsEnabled) } private fun isComponentCurrentlyEnabled(component: ComponentName): Boolean { return when (packageManager.getComponentEnabledSetting(component)) { PackageManager.COMPONENT_ENABLED_STATE_ENABLED -> true PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER, PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED -> false else -> true } } private fun setComponentState(component: ComponentName, enable: Boolean) { val newState = if (enable) { PackageManager.COMPONENT_ENABLED_STATE_ENABLED } else { PackageManager.COMPONENT_ENABLED_STATE_DISABLED } packageManager.setComponentEnabledSetting( component, newState, PackageManager.DONT_KILL_APP ) } override fun uncaughtException(t: Thread, e: Throwable) { Logger.log.log(Level.SEVERE, "Unhandled exception!", e) Loading app/src/main/res/xml/feature_flags.xml 0 → 100644 +4 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <features> <feature key="passwords" title="Passwords support" /> </features> build.gradle +3 −0 Original line number Diff line number Diff line Loading @@ -53,5 +53,8 @@ allprojects { // AppIntro, dav4jvm maven { url "https://jitpack.io" } maven { url 'https://gitlab.e.foundation/api/v4/groups/9/-/packages/maven'} maven { url 'https://gitlab.e.foundation/api/v4/projects/3592/packages/maven' } } } Loading
app/build.gradle +1 −0 Original line number Diff line number Diff line Loading @@ -281,6 +281,7 @@ dependencies { // ez-vcard to parse/generate vCards api("com.googlecode.ez-vcard:ez-vcard:0.12.0") implementation 'foundation.e.featureflags.flags:featureflags:1.0-91153f49' // for tests androidTestImplementation "com.google.dagger:hilt-android-testing:${versions.hilt}" Loading
app/src/main/AndroidManifest.xml +10 −0 Original line number Diff line number Diff line Loading @@ -781,6 +781,16 @@ android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/debug_paths" /> </provider> <meta-data android:name="foundation.e.featureflags.opt_in" android:value="true" /> <meta-data android:name="foundation.e.featureflags.app_enabled" android:value="true" /> <meta-data android:name="foundation.e.featureflags.features" android:resource="@xml/feature_flags" /> </application> <!-- package visiblity – which apps do we need to see? --> Loading
app/src/main/kotlin/at/bitfire/davdroid/App.kt +41 −0 Original line number Diff line number Diff line Loading @@ -5,7 +5,9 @@ package at.bitfire.davdroid import android.app.Application import android.content.ComponentName import android.content.Context import android.content.pm.PackageManager import android.net.Uri import android.os.StrictMode import androidx.appcompat.content.res.AppCompatResources Loading @@ -14,11 +16,13 @@ import androidx.hilt.work.HiltWorkerFactory import androidx.work.Configuration import at.bitfire.davdroid.log.Logger import at.bitfire.davdroid.syncadapter.AccountsUpdatedListener import at.bitfire.davdroid.syncadapter.MurenaPasswordSyncAdapterService import at.bitfire.davdroid.syncadapter.SyncUtils import at.bitfire.davdroid.ui.DebugInfoActivity import at.bitfire.davdroid.ui.NotificationUtils import at.bitfire.davdroid.ui.UiUtils import dagger.hilt.android.HiltAndroidApp import foundation.e.featureflags.flags.FeatureFlags import foundation.e.lib.telemetry.Telemetry import java.util.logging.Level import javax.inject.Inject Loading Loading @@ -72,6 +76,7 @@ class App: Application(), Thread.UncaughtExceptionHandler, Configuration.Provide override fun onCreate() { super.onCreate() Logger.initialize(this) updateMurenaPasswordSyncAdapterState() // Allow enabling telemetry only for release builds. if (!BuildConfig.DEBUG) { Loading Loading @@ -116,6 +121,42 @@ class App: Application(), Thread.UncaughtExceptionHandler, Configuration.Provide } } private fun updateMurenaPasswordSyncAdapterState() { val flags = FeatureFlags.forCurrentApp(this) val passwordsEnabled = flags.isFeatureEnabled("passwords") val component = ComponentName(this, MurenaPasswordSyncAdapterService::class.java) if (isComponentCurrentlyEnabled(component) == passwordsEnabled) { return } setComponentState(component, passwordsEnabled) } private fun isComponentCurrentlyEnabled(component: ComponentName): Boolean { return when (packageManager.getComponentEnabledSetting(component)) { PackageManager.COMPONENT_ENABLED_STATE_ENABLED -> true PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER, PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED -> false else -> true } } private fun setComponentState(component: ComponentName, enable: Boolean) { val newState = if (enable) { PackageManager.COMPONENT_ENABLED_STATE_ENABLED } else { PackageManager.COMPONENT_ENABLED_STATE_DISABLED } packageManager.setComponentEnabledSetting( component, newState, PackageManager.DONT_KILL_APP ) } override fun uncaughtException(t: Thread, e: Throwable) { Logger.log.log(Level.SEVERE, "Unhandled exception!", e) Loading
app/src/main/res/xml/feature_flags.xml 0 → 100644 +4 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <features> <feature key="passwords" title="Passwords support" /> </features>
build.gradle +3 −0 Original line number Diff line number Diff line Loading @@ -53,5 +53,8 @@ allprojects { // AppIntro, dav4jvm maven { url "https://jitpack.io" } maven { url 'https://gitlab.e.foundation/api/v4/groups/9/-/packages/maven'} maven { url 'https://gitlab.e.foundation/api/v4/projects/3592/packages/maven' } } }