Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cc964757 authored by Mohammed Althaf T's avatar Mohammed Althaf T 😊
Browse files

add flag guard

parent c169d334
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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}"
+10 −0
Original line number Diff line number Diff line
@@ -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? -->
+41 −0
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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) {
@@ -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)

+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>
+3 −0
Original line number Diff line number Diff line
@@ -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'
        }
    }
}