Replace Firebase Analytics with PostHog

pull/3782/merge
Alex Baker 3 days ago
parent a3c663a45b
commit c67937815c

@ -88,9 +88,11 @@ android {
}
val tasks_mapbox_key_debug: String? by project
val tasks_google_key_debug: String? by project
val tasks_posthog_key: String? by project
val tasks_caldav_url: String? by project
resValue("string", "mapbox_key", tasks_mapbox_key_debug ?: "")
resValue("string", "google_key", tasks_google_key_debug ?: "")
resValue("string", "posthog_key", tasks_posthog_key ?: "")
resValue("string", "tasks_caldav_url", tasks_caldav_url ?: "https://caldav.tasks.org")
resValue("string", "tasks_nominatim_url", tasks_caldav_url ?: "https://nominatim.tasks.org")
resValue("string", "tasks_places_url", tasks_caldav_url ?: "https://places.tasks.org")
@ -99,8 +101,10 @@ android {
release {
val tasks_mapbox_key: String? by project
val tasks_google_key: String? by project
val tasks_posthog_key: String? by project
resValue("string", "mapbox_key", tasks_mapbox_key ?: "")
resValue("string", "google_key", tasks_google_key ?: "")
resValue("string", "posthog_key", tasks_posthog_key ?: "")
isMinifyEnabled = true
proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard.pro")
signingConfig = signingConfigs.getByName("release")
@ -256,9 +260,7 @@ dependencies {
googleplayImplementation(platform(libs.firebase))
googleplayImplementation(libs.firebase.crashlytics)
googleplayImplementation(libs.firebase.analytics) {
exclude("com.google.android.gms", "play-services-ads-identifier")
}
googleplayImplementation(libs.posthog.android)
googleplayImplementation(libs.firebase.config.ktx)
googleplayImplementation(libs.play.services.location)
googleplayImplementation(libs.play.services.maps)

@ -22,6 +22,18 @@ class Firebase @Inject constructor(
Timber.d("${context.getString(event)} -> $params")
}
fun logEventOnce(event: Int, vararg params: Pair<Int, Any>) {
logEvent(event, *params)
}
fun logEventOncePerDay(event: Int, vararg params: Pair<Int, Any>) {
logEvent(event, *params)
}
fun logEventForNewUsers(event: Int, vararg params: Pair<Int, Any>) {
logEvent(event, *params)
}
fun addTask(source: String) =
logEvent(R.string.event_add_task, R.string.param_type to source)

@ -10,22 +10,6 @@
android:name="firebase_crashlytics_collection_enabled"
android:value="false"/>
<meta-data
android:name="firebase_analytics_collection_enabled"
android:value="false"/>
<meta-data
android:name="google_analytics_adid_collection_enabled"
android:value="false" />
<meta-data
android:name="google_analytics_ssaid_collection_enabled"
android:value="false" />
<meta-data
android:name="google_analytics_default_allow_ad_personalization_signals"
android:value="false" />
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/google_key" />

@ -1,17 +1,20 @@
package org.tasks.analytics
import android.content.Context
import android.os.Bundle
import androidx.annotation.StringRes
import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.crashlytics.FirebaseCrashlytics
import com.google.firebase.remoteconfig.FirebaseRemoteConfig
import com.google.firebase.remoteconfig.ktx.remoteConfigSettings
import com.posthog.PostHog
import com.posthog.android.PostHogAndroid
import com.posthog.android.PostHogAndroidConfig
import dagger.hilt.android.qualifiers.ApplicationContext
import org.tasks.BuildConfig
import org.tasks.R
import org.tasks.jobs.WorkManager
import org.tasks.preferences.Preferences
import org.tasks.time.DateTimeUtils2.currentTimeMillis
import org.tasks.time.startOfDay
import timber.log.Timber
import java.util.concurrent.TimeUnit
import javax.inject.Inject
@ -31,14 +34,25 @@ class Firebase @Inject constructor(
null
}
}
private val analytics by lazy {
if (preferences.isTrackingEnabled) {
FirebaseAnalytics.getInstance(context).apply {
setAnalyticsCollectionEnabled(true)
}
private val posthogEnabled: Boolean by lazy {
val apiKey = context.getString(R.string.posthog_key)
if (preferences.isTrackingEnabled && apiKey.isNotBlank()) {
PostHogAndroid.setup(
context,
PostHogAndroidConfig(
apiKey = apiKey,
host = POSTHOG_HOST
).apply {
sessionReplay = BuildConfig.DEBUG
sessionReplayConfig.maskAllTextInputs = true
sessionReplayConfig.maskAllImages = false
sessionReplayConfig.screenshot = true
}
)
true
} else {
null
false
}
}
@ -77,24 +91,48 @@ class Firebase @Inject constructor(
}
fun addTask(source: String) =
logEvent(R.string.event_add_task, R.string.param_type to source)
logEventForNewUsers(R.string.event_add_task, R.string.param_type to source)
fun completeTask(source: String) =
logEvent(R.string.event_complete_task, R.string.param_type to source)
logEventForNewUsers(R.string.event_complete_task, R.string.param_type to source)
private val loggedOnceEvents = mutableSetOf<Int>()
fun logEvent(@StringRes event: Int, vararg p: Pair<Int, Any>) {
val eventName = context.getString(event)
Timber.d("$eventName -> $p")
analytics?.logEvent(eventName, Bundle().apply {
p.forEach {
val key = context.getString(it.first)
when (it.second::class) {
String::class -> putString(key, it.second as String)
Boolean::class -> putBoolean(key, it.second as Boolean)
else -> Timber.e("Unhandled param: $it")
}
}
})
if (posthogEnabled) {
PostHog.capture(
event = eventName,
properties = p.associate { context.getString(it.first) to it.second }
)
}
}
fun logEventOnce(@StringRes event: Int, vararg p: Pair<Int, Any>) {
if (loggedOnceEvents.add(event)) {
logEvent(event, *p)
}
}
fun logEventOncePerDay(@StringRes event: Int, vararg p: Pair<Int, Any>) {
val eventName = context.getString(event)
val prefKey = "last_logged_$eventName"
val today = currentTimeMillis().startOfDay()
val lastLogged = preferences.getLong(prefKey, 0L)
if (lastLogged < today) {
preferences.setLong(prefKey, today)
logEvent(event, *p)
}
}
fun logEventForNewUsers(@StringRes event: Int, vararg p: Pair<Int, Any>) {
val installDate = preferences.installDate
// Only track for users installed within last 30 days
// installDate of 0 means very old user (pre-tracking) - skip them
if (installDate > 0 && currentTimeMillis() - installDate < TimeUnit.DAYS.toMillis(30)) {
logEvent(event, *p)
}
}
private val installCooldown: Boolean
@ -118,4 +156,8 @@ class Firebase @Inject constructor(
?.takeIf { it >= default }
?: default
}
}
companion object {
private const val POSTHOG_HOST = "https://us.i.posthog.com"
}
}

@ -29,7 +29,10 @@ import androidx.compose.material3.adaptive.navigation.rememberListDetailPaneScaf
import androidx.compose.material3.rememberDrawerState
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
import androidx.compose.ui.unit.dp
import androidx.core.content.IntentCompat.getParcelableExtra
@ -155,14 +158,33 @@ class MainActivity : AppCompatActivity() {
tasksPreferences.set(TasksPreferences.acceptedTosVersion, version)
}
var wasInOnboarding by rememberSaveable { mutableStateOf(false) }
LaunchedEffect(hasAccount) {
Timber.d("hasAccount=$hasAccount")
when (hasAccount) {
false -> navController.navigate(WelcomeDestination) {
popUpTo(0) { inclusive = true }
false -> {
wasInOnboarding = true
navController.navigate(WelcomeDestination) {
popUpTo(0) { inclusive = true }
}
}
true -> navController.navigate(HomeDestination) {
popUpTo(0) { inclusive = true }
true -> {
if (wasInOnboarding) {
val hasLogged = tasksPreferences.get(
TasksPreferences.hasLoggedOnboardingComplete,
false
)
if (!hasLogged) {
firebase.logEvent(R.string.event_onboarding_complete)
tasksPreferences.set(
TasksPreferences.hasLoggedOnboardingComplete,
true
)
}
}
navController.navigate(HomeDestination) {
popUpTo(0) { inclusive = true }
}
}
else -> {}
}
@ -174,6 +196,9 @@ class MainActivity : AppCompatActivity() {
startDestination = HomeDestination,
) {
composable<WelcomeDestination> {
LaunchedEffect(Unit) {
firebase.logEvent(R.string.event_screen_welcome)
}
val addAccountViewModel: AddAccountViewModel = hiltViewModel()
val importBackupLauncher =
rememberLauncherForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
@ -220,6 +245,9 @@ class MainActivity : AppCompatActivity() {
)
}
composable<AddAccountDestination> {
LaunchedEffect(Unit) {
firebase.logEvent(R.string.event_screen_add_account)
}
val addAccountViewModel: AddAccountViewModel = hiltViewModel()
val microsoftVM: MicrosoftSignInViewModel = hiltViewModel()
val syncLauncher =

@ -870,6 +870,7 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
}
override fun onMenuItemActionExpand(item: MenuItem): Boolean {
firebase.logEvent(R.string.event_search)
search.setOnQueryTextListener(this)
listViewModel.setSearchQuery("")
return true

@ -149,7 +149,7 @@ class Astrid2TaskProvider : ContentProvider() {
private val tasks: Cursor
get() {
val hilt = hilt()
hilt.firebase.logEvent(R.string.event_astrid2taskprovider)
hilt.firebase.logEventOncePerDay(R.string.event_astrid2taskprovider)
val tasks = hilt.contentProviderDao.getAstrid2TaskProviderTasks()
val ret = MatrixCursor(TASK_FIELD_LIST)
for (task in tasks) {

@ -125,6 +125,7 @@ class FilterSettingsActivity : BaseListSettingsActivity() {
f = f.copy(
id = filterDao.insert(f)
)
firebase.logEvent(R.string.event_create_filter)
} else {
filterDao.update(f)
}

@ -88,6 +88,7 @@ class TagSettingsActivity : BaseListSettingsActivity() {
)
.let { it.copy(id = tagDataDao.insert(it)) }
.let {
firebase.logEvent(R.string.event_create_tag)
refreshBroadcaster.broadcastRefresh()
setResult(
Activity.RESULT_OK,

@ -21,6 +21,7 @@ import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.R
import org.tasks.analytics.Firebase
import org.tasks.caldav.VtodoCache
import org.tasks.data.GoogleTaskAccount
import org.tasks.data.GoogleTaskList
@ -76,6 +77,7 @@ class TasksJsonImporter @Inject constructor(
private val taskListMetadataDao: TaskListMetadataDao,
private val vtodoCache: VtodoCache,
private val filterCriteriaProvider: FilterCriteriaProvider,
private val firebase: Firebase,
) {
private val result = ImportResult()
@ -107,8 +109,15 @@ class TasksJsonImporter @Inject constructor(
}
Timber.d("Updating parents")
caldavDao.updateParents()
} catch (e: IOException) {
} catch (e: Exception) {
Timber.e(e)
firebase.logEvent(
R.string.event_import_backup_failed,
R.string.param_error to e.javaClass.simpleName
)
if (e !is IOException) {
throw e
}
}
refreshBroadcaster.broadcastRefresh()
result

@ -131,6 +131,7 @@ abstract class BaseCaldavCalendarSettingsActivity : BaseListSettingsActivity() {
icon = baseViewModel.icon,
)
caldavDao.insert(caldavCalendar)
firebase.logEvent(R.string.event_create_list)
setResult(
Activity.RESULT_OK,
Intent().putExtra(

@ -9,6 +9,8 @@ import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.update
import org.tasks.R
import org.tasks.analytics.Firebase
import org.tasks.dialogs.SortSettingsActivity.Companion.WIDGET_NONE
import org.tasks.preferences.Preferences
import org.tasks.tasklist.SectionedDataSource.Companion.HEADER_COMPLETED
@ -20,6 +22,7 @@ class SortSettingsViewModel @Inject constructor(
@ApplicationContext context: Context,
savedStateHandle: SavedStateHandle,
private val appPreferences: Preferences,
private val firebase: Firebase,
): ViewModel() {
data class ViewState(
val manualSort: Boolean,
@ -41,6 +44,14 @@ class SortSettingsViewModel @Inject constructor(
?.let { WidgetPreferences(context, appPreferences, it) }
?: appPreferences
private fun trackSortChange(setting: String, value: Any) {
firebase.logEvent(
R.string.event_sort_change,
R.string.param_type to setting,
R.string.param_value to value.toString()
)
}
private val initialState = ViewState(
manualSort = preferences.isManualSort,
astridSort = preferences.isAstridSort,
@ -86,6 +97,7 @@ class SortSettingsViewModel @Inject constructor(
if (preferences.groupMode == groupMode) {
return
}
trackSortChange("group", groupMode.toSortName())
if (groupMode != SortHelper.GROUP_NONE) {
preferences.isManualSort = false
preferences.isAstridSort = false
@ -128,6 +140,7 @@ class SortSettingsViewModel @Inject constructor(
}
fun setSortMode(sortMode: Int) {
trackSortChange("sort", sortMode.toSortName())
preferences.isManualSort = false
preferences.isAstridSort = false
preferences.sortMode = sortMode
@ -148,6 +161,7 @@ class SortSettingsViewModel @Inject constructor(
}
fun setSubtaskMode(subtaskMode: Int) {
trackSortChange("subtask", subtaskMode.toSortName())
preferences.subtaskMode = subtaskMode
val ascending = when (subtaskMode) {
SortHelper.SORT_MODIFIED,
@ -164,6 +178,7 @@ class SortSettingsViewModel @Inject constructor(
}
fun setManual(value: Boolean) {
trackSortChange("sort", "manual")
preferences.isManualSort = value
if (value) {
preferences.groupMode = SortHelper.GROUP_NONE
@ -177,6 +192,7 @@ class SortSettingsViewModel @Inject constructor(
}
fun setAstrid(value: Boolean) {
trackSortChange("sort", "astrid")
preferences.isAstridSort = value
if (value) {
preferences.groupMode = SortHelper.GROUP_NONE
@ -195,4 +211,19 @@ class SortSettingsViewModel @Inject constructor(
val changedGroup: Boolean
get() = initialState.groupMode != _viewState.value.groupMode
private fun Int.toSortName(): String = when (this) {
SortHelper.GROUP_NONE -> "none"
SortHelper.SORT_ALPHA -> "alpha"
SortHelper.SORT_DUE -> "due"
SortHelper.SORT_IMPORTANCE -> "importance"
SortHelper.SORT_MODIFIED -> "modified"
SortHelper.SORT_CREATED -> "created"
SortHelper.SORT_START -> "start"
SortHelper.SORT_LIST -> "list"
SortHelper.SORT_COMPLETED -> "completed"
SortHelper.SORT_MANUAL -> "manual"
SortHelper.SORT_AUTO -> "auto"
else -> "unknown"
}
}

@ -292,7 +292,9 @@ class LocationPickerActivity : AppCompatActivity(), Toolbar.OnMenuItemClickListe
place.latitude.toLikeString(),
place.longitude.toLikeString()
)
?: place.copy(id = locationDao.insert(place))
?: place.copy(id = locationDao.insert(place)).also {
firebase.logEvent(R.string.event_create_place)
}
}
setResult(Activity.RESULT_OK, Intent().putExtra(EXTRA_PLACE, place as Parcelable?))
finish()

@ -13,15 +13,19 @@ import androidx.fragment.app.Fragment
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import org.tasks.R
import org.tasks.analytics.Firebase
import org.tasks.databinding.ActivityPreferencesBinding
import org.tasks.injection.InjectingPreferenceFragment
import org.tasks.injection.ThemedInjectingAppCompatActivity
import javax.inject.Inject
private const val EXTRA_TITLE = "extra_title"
abstract class BasePreferences : ThemedInjectingAppCompatActivity(),
PreferenceFragmentCompat.OnPreferenceStartFragmentCallback, Toolbar.OnMenuItemClickListener {
@Inject lateinit var firebase: Firebase
lateinit var toolbar: Toolbar
var menu: Int = 0
@ -110,6 +114,10 @@ abstract class BasePreferences : ThemedInjectingAppCompatActivity(),
fragment: Fragment,
title: CharSequence
): Boolean {
firebase.logEvent(
R.string.event_settings_navigation,
R.string.param_screen to title.toString()
)
fragment.setTargetFragment(caller, 0)
supportFragmentManager.beginTransaction()
.replace(R.id.settings, fragment)

@ -4,6 +4,7 @@ import android.app.Activity
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.os.Bundle
import androidx.activity.viewModels
import androidx.lifecycle.lifecycleScope
import androidx.preference.PreferenceFragmentCompat
@ -32,6 +33,11 @@ class MainPreferences : BasePreferences() {
private val viewModel: PreferencesViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
firebase.logEvent(R.string.event_screen_settings)
}
override fun getRootTitle() = R.string.TLA_menu_settings
override fun getRootPreference() = MainSettingsFragment()

@ -36,7 +36,7 @@ class TasksContentProvider : ContentProvider() {
val hilt = hilt()
return when (URI_MATCHER.match(uri)) {
URI_TODO_AGENDA -> {
hilt.firebase.logEvent(R.string.event_todoagenda)
hilt.firebase.logEventOncePerDay(R.string.event_todoagenda)
hilt.contentProviderDao.rawQuery(
SupportSQLiteQueryBuilder
.builder(TODO_AGENDA_TABLES)

@ -18,6 +18,7 @@ import com.google.android.material.textfield.TextInputEditText
import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R
import org.tasks.Strings.isNullOrEmpty
import org.tasks.analytics.Firebase
import org.tasks.compose.FilterSelectionActivity.Companion.launch
import org.tasks.compose.FilterSelectionActivity.Companion.registerForFilterPickerResult
import org.tasks.data.UUIDHelper
@ -36,6 +37,7 @@ import javax.inject.Inject
@AndroidEntryPoint
class ShortcutConfigActivity : ThemedInjectingAppCompatActivity(), ColorPalettePicker.ColorPickedCallback {
@Inject lateinit var defaultFilterProvider: DefaultFilterProvider
@Inject lateinit var firebase: Firebase
private lateinit var toolbar: Toolbar
private lateinit var shortcutList: TextInputEditText
@ -151,6 +153,7 @@ class ShortcutConfigActivity : ThemedInjectingAppCompatActivity(), ColorPaletteP
.build(),
null,
)
firebase.logEvent(R.string.event_create_shortcut, R.string.param_type to "shortcut_config")
finish()
}

@ -427,7 +427,22 @@
<string name="event_onboarding_sync">onboarding_sync</string>
<string name="event_accept_tos">accept_tos</string>
<string name="event_accept_tos_update">accept_tos_update</string>
<string name="event_onboarding_complete">onboarding_complete</string>
<string name="event_screen_settings">screen_settings</string>
<string name="event_create_tag">create_tag</string>
<string name="event_create_filter">create_filter</string>
<string name="event_create_place">create_place</string>
<string name="event_create_list">create_list</string>
<string name="event_search">search</string>
<string name="event_sort_change">sort_change</string>
<string name="event_screen_welcome">screen_welcome</string>
<string name="event_screen_add_account">screen_add_account</string>
<string name="event_settings_navigation">settings_navigation</string>
<string name="event_import_backup_failed">import_backup_failed</string>
<string name="param_type">type</string>
<string name="param_screen">screen</string>
<string name="param_error">error</string>
<string name="param_value">value</string>
<string name="p_picker_mode_date">picker_mode_date</string>
<string name="p_picker_mode_time">picker_mode_time</string>
<string name="p_markdown">markdown</string>

@ -74,6 +74,7 @@
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:2.1.0 -> 2.2.21 (*)
+| +--- org.jspecify:jspecify:1.0.0
+| +--- androidx.lifecycle:lifecycle-common:2.10.0 (c)
+| +--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| +--- androidx.lifecycle:lifecycle-livedata:2.10.0 (c)
+| +--- androidx.lifecycle:lifecycle-livedata-core:2.10.0 (c)
+| +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
@ -86,8 +87,7 @@
+| +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.10.0 (c)
+| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.10.0 (c)
+| +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| +--- org.jetbrains.androidx.lifecycle:lifecycle-runtime:2.9.5 -> 2.9.6 (c)
+| \--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| \--- org.jetbrains.androidx.lifecycle:lifecycle-runtime:2.9.5 -> 2.9.6 (c)
++--- androidx.databinding:databinding-adapters:8.13.2
+| +--- androidx.databinding:databinding-runtime:8.13.2 (*)
+| \--- androidx.databinding:databinding-common:8.13.2
@ -125,6 +125,7 @@
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.2.21 (*)
+| | | +--- org.jspecify:jspecify:1.0.0
+| | | +--- androidx.lifecycle:lifecycle-common:2.10.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-livedata:2.10.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.10.0 (c)
@ -136,12 +137,12 @@
+| | | +--- androidx.lifecycle:lifecycle-viewmodel:2.10.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.10.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.10.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| | | \--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0
+| | | +--- androidx.lifecycle:lifecycle-livedata-core:2.10.0 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.2.21 (*)
+| | | +--- androidx.lifecycle:lifecycle-common:2.10.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-livedata:2.10.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-livedata-core:2.10.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.10.0 (c)
@ -153,12 +154,12 @@
+| | | +--- androidx.lifecycle:lifecycle-viewmodel:2.10.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.10.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.10.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| | | \--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.2.21 (*)
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 -> 1.10.2 (*)
+| | +--- org.jspecify:jspecify:1.0.0
+| | +--- androidx.lifecycle:lifecycle-common:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-core:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.10.0 (c)
@ -170,14 +171,14 @@
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| | \--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| +--- androidx.lifecycle:lifecycle-process:2.6.1 -> 2.10.0
+| | +--- androidx.annotation:annotation:1.9.1 (*)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.10.0 (*)
+| | +--- androidx.startup:startup-runtime:1.1.1 -> 1.2.0 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.2.21 (*)
+| | +--- androidx.lifecycle:lifecycle-common:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-core:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
@ -189,12 +190,12 @@
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| | \--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| +--- androidx.lifecycle:lifecycle-service:2.6.1 -> 2.10.0
+| | +--- androidx.lifecycle:lifecycle-runtime:2.10.0 (*)
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.2.21 (*)
+| | +--- androidx.lifecycle:lifecycle-common:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-core:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
@ -206,8 +207,7 @@
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| | \--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| \--- androidx.lifecycle:lifecycle-viewmodel:2.6.1 -> 2.10.0
+| \--- androidx.lifecycle:lifecycle-viewmodel-android:2.10.0
+| +--- androidx.annotation:annotation:1.9.1 (*)
@ -216,6 +216,7 @@
+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0 -> 1.10.2 (*)
+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 -> 1.10.2 (*)
+| +--- androidx.lifecycle:lifecycle-common:2.10.0 (c)
+| +--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| +--- androidx.lifecycle:lifecycle-livedata:2.10.0 (c)
+| +--- androidx.lifecycle:lifecycle-livedata-core:2.10.0 (c)
+| +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
@ -228,10 +229,8 @@
+| +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.10.0 (c)
+| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.10.0 (c)
+| +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| +--- org.jetbrains.androidx.lifecycle:lifecycle-viewmodel:2.9.5 -> 2.9.6 (c)
+| \--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| \--- org.jetbrains.androidx.lifecycle:lifecycle-viewmodel:2.9.5 -> 2.9.6 (c)
++--- com.google.firebase:firebase-bom:33.16.0
+| +--- com.google.firebase:firebase-analytics:22.5.0 (c)
+| +--- com.google.firebase:firebase-config-ktx:22.1.2 (c)
+| +--- com.google.firebase:firebase-crashlytics:19.4.4 (c)
+| +--- com.google.firebase:firebase-config:22.1.2 (c)
@ -537,77 +536,41 @@
+| +--- com.google.android.datatransport:transport-backend-cct:3.3.0 (*)
+| +--- com.google.android.datatransport:transport-runtime:3.3.0 (*)
+| \--- androidx.annotation:annotation:1.5.0 -> 1.9.1 (*)
++--- com.google.firebase:firebase-analytics -> 22.5.0
+| +--- com.google.android.gms:play-services-measurement:22.5.0
+| | +--- androidx.collection:collection:1.0.0 -> 1.5.0 (*)
+| | +--- androidx.legacy:legacy-support-core-utils:1.0.0
+| | | +--- androidx.annotation:annotation:1.0.0 -> 1.9.1 (*)
+| | | +--- androidx.core:core:1.0.0 -> 1.16.0 (*)
+| | | +--- androidx.documentfile:documentfile:1.0.0
+| | | | \--- androidx.annotation:annotation:1.0.0 -> 1.9.1 (*)
+| | | +--- androidx.loader:loader:1.0.0 (*)
+| | | +--- androidx.localbroadcastmanager:localbroadcastmanager:1.0.0
+| | | | \--- androidx.annotation:annotation:1.0.0 -> 1.9.1 (*)
+| | | \--- androidx.print:print:1.0.0
+| | | \--- androidx.annotation:annotation:1.0.0 -> 1.9.1 (*)
+| | +--- com.google.android.gms:play-services-basement:18.5.0 -> 18.8.0 (*)
+| | +--- com.google.android.gms:play-services-measurement-base:22.5.0
+| | | \--- com.google.android.gms:play-services-basement:18.5.0 -> 18.8.0 (*)
+| | +--- com.google.android.gms:play-services-measurement-impl:22.5.0
+| | | +--- androidx.collection:collection:1.0.0 -> 1.5.0 (*)
+| | | +--- androidx.core:core:1.9.0 -> 1.16.0 (*)
+| | | +--- androidx.privacysandbox.ads:ads-adservices:1.1.0-beta11
+| | | | +--- androidx.annotation:annotation:1.8.1 -> 1.9.1 (*)
+| | | | +--- androidx.core:core-ktx:1.8.0 -> 1.16.0 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.2.21 (*)
+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.10.2 (*)
+| | | | \--- androidx.privacysandbox.ads:ads-adservices-java:1.1.0-beta11 (c)
+| | | +--- androidx.privacysandbox.ads:ads-adservices-java:1.1.0-beta11
+| | | | +--- androidx.annotation:annotation:1.8.1 -> 1.9.1 (*)
+| | | | +--- androidx.concurrent:concurrent-futures:1.1.0 (*)
+| | | | +--- androidx.core:core-ktx:1.8.0 -> 1.16.0 (*)
+| | | | +--- androidx.privacysandbox.ads:ads-adservices:1.1.0-beta11 (*)
+| | | | +--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.2.21 (*)
+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.10.2 (*)
+| | | | \--- androidx.privacysandbox.ads:ads-adservices:1.1.0-beta11 (c)
+| | | +--- com.google.android.gms:play-services-base:18.5.0 -> 18.8.0
+| | | | +--- androidx.collection:collection:1.0.0 -> 1.5.0 (*)
+| | | | +--- androidx.core:core:1.9.0 -> 1.16.0 (*)
+| | | | +--- androidx.fragment:fragment:1.1.0 -> 1.8.9 (*)
+| | | | +--- com.google.android.gms:play-services-basement:18.8.0 (*)
+| | | | \--- com.google.android.gms:play-services-tasks:18.4.0 (*)
+| | | +--- com.google.android.gms:play-services-basement:18.5.0 -> 18.8.0 (*)
+| | | +--- com.google.android.gms:play-services-measurement-base:22.5.0 (*)
+| | | +--- com.google.android.gms:play-services-stats:17.0.2
+| | | | +--- androidx.legacy:legacy-support-core-utils:1.0.0 (*)
+| | | | \--- com.google.android.gms:play-services-basement:18.0.0 -> 18.8.0 (*)
+| | | +--- com.google.android.gms:play-services-tasks:18.2.0 -> 18.4.0 (*)
+| | | \--- com.google.guava:guava:31.1-android -> 33.4.0-android
+| | | +--- com.google.guava:failureaccess:1.0.2
+| | | \--- com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
+| | +--- com.google.android.gms:play-services-measurement-sdk-api:22.5.0
+| | | +--- com.google.android.gms:play-services-basement:18.5.0 -> 18.8.0 (*)
+| | | \--- com.google.android.gms:play-services-measurement-base:22.5.0 (*)
+| | \--- com.google.android.gms:play-services-stats:17.0.2 (*)
+| +--- com.google.android.gms:play-services-measurement-api:22.5.0
+| | +--- com.google.android.gms:play-services-basement:18.5.0 -> 18.8.0 (*)
+| | +--- com.google.android.gms:play-services-measurement-base:22.5.0 (*)
+| | +--- com.google.android.gms:play-services-measurement-sdk-api:22.5.0 (*)
+| | +--- com.google.android.gms:play-services-tasks:18.2.0 -> 18.4.0 (*)
+| | +--- com.google.firebase:firebase-common:21.0.0 (*)
+| | +--- com.google.firebase:firebase-common-ktx:21.0.0 (*)
+| | +--- com.google.firebase:firebase-components:18.0.0 (*)
+| | +--- com.google.firebase:firebase-installations:17.0.1 -> 18.0.0 (*)
+| | +--- com.google.firebase:firebase-installations-interop:17.0.0 -> 17.2.0 (*)
+| | +--- com.google.firebase:firebase-measurement-connector:19.0.0 -> 20.0.1 (*)
+| | +--- com.google.guava:guava:31.1-android -> 33.4.0-android (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.8.0 -> 2.2.21 (*)
+| \--- com.google.android.gms:play-services-measurement-sdk:22.5.0
+| +--- androidx.collection:collection:1.0.0 -> 1.5.0 (*)
+| +--- com.google.android.gms:play-services-basement:18.5.0 -> 18.8.0 (*)
+| +--- com.google.android.gms:play-services-measurement-base:22.5.0 (*)
+| \--- com.google.android.gms:play-services-measurement-impl:22.5.0 (*)
++--- com.posthog:posthog-android:3.28.0
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.22 -> 2.2.20 (*)
+| +--- androidx.lifecycle:lifecycle-process:2.6.2 -> 2.10.0 (*)
+| +--- androidx.lifecycle:lifecycle-common-java8:2.6.2 -> 2.10.0
+| | +--- androidx.annotation:annotation:1.8.1 -> 1.9.1 (*)
+| | +--- androidx.lifecycle:lifecycle-common:2.10.0 (*)
+| | +--- androidx.lifecycle:lifecycle-common:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-core:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-process:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime-compose:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-service:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.10.0 (c)
+| | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| +--- androidx.core:core:1.5.0 -> 1.16.0 (*)
+| +--- com.squareup.curtains:curtains:1.2.5
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.4.21 -> 2.2.21 (*)
+| \--- com.posthog:posthog:6.0.0
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.22 -> 2.2.20 (*)
+| +--- com.google.code.gson:gson:2.10.1 -> 2.12.1
+| +--- com.squareup.okhttp3:okhttp-bom:4.11.0
+| | +--- com.squareup.okhttp3:okhttp:4.11.0 -> 5.3.2 (c)
+| | \--- com.squareup.okhttp3:logging-interceptor:4.11.0 (c)
+| \--- com.squareup.okhttp3:okhttp -> 5.3.2
+| \--- com.squareup.okhttp3:okhttp-android:5.3.2
+| +--- androidx.annotation:annotation:1.9.1 (*)
+| +--- androidx.startup:startup-runtime:1.2.0 (*)
+| +--- com.squareup.okio:okio:3.16.4 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:2.2.21 (*)
++--- com.google.firebase:firebase-config-ktx -> 22.1.2
+| +--- com.google.firebase:firebase-config:22.1.2
+| | +--- com.google.firebase:firebase-config-interop:16.0.1 (*)
@ -632,7 +595,12 @@
+| +--- com.google.firebase:firebase-components:18.0.0 (*)
+| \--- com.google.firebase:firebase-installations-interop:17.1.0 -> 17.2.0 (*)
++--- com.google.android.gms:play-services-location:21.3.0
+| +--- com.google.android.gms:play-services-base:18.5.0 -> 18.8.0 (*)
+| +--- com.google.android.gms:play-services-base:18.5.0 -> 18.8.0
+| | +--- androidx.collection:collection:1.0.0 -> 1.5.0 (*)
+| | +--- androidx.core:core:1.9.0 -> 1.16.0 (*)
+| | +--- androidx.fragment:fragment:1.1.0 -> 1.8.9 (*)
+| | +--- com.google.android.gms:play-services-basement:18.8.0 (*)
+| | \--- com.google.android.gms:play-services-tasks:18.4.0 (*)
+| +--- com.google.android.gms:play-services-basement:18.4.0 -> 18.8.0 (*)
+| +--- com.google.android.gms:play-services-tasks:18.2.0 -> 18.4.0 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib:1.9.0 -> 2.2.21 (*)
@ -769,7 +737,9 @@
+| +--- com.google.android.horologist:horologist-datalayer:0.7.15 (*)
+| +--- io.grpc:grpc-protobuf-lite:1.73.0
+| | +--- io.grpc:grpc-api:1.73.0
+| | | \--- com.google.guava:guava:33.3.1-android -> 33.4.0-android (*)
+| | | \--- com.google.guava:guava:33.3.1-android -> 33.4.0-android
+| | | +--- com.google.guava:failureaccess:1.0.2
+| | | \--- com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
+| | +--- com.google.protobuf:protobuf-javalite:3.25.5 -> 4.33.2
+| | \--- com.google.guava:guava:33.3.1-android -> 33.4.0-android (*)
+| +--- io.grpc:grpc-kotlin-stub:1.4.3 -> 1.5.0
@ -998,6 +968,7 @@
+| | | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.2.21 (*)
+| | | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0 -> 1.10.2 (*)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-common:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
@ -1009,8 +980,7 @@
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-service:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| | | | | | | | | \--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | | | | | | | | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| | | | | | | | +--- androidx.savedstate:savedstate-ktx:1.2.1 -> 1.4.0
+| | | | | | | | | +--- androidx.savedstate:savedstate:1.4.0 (*)
+| | | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.2.21 (*)
@ -1050,6 +1020,7 @@
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.10.0 (*)
+| | | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.2.21 (*)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-common:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
@ -1062,8 +1033,7 @@
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| | | | | | | | | +--- org.jetbrains.androidx.lifecycle:lifecycle-runtime-compose:2.9.5 -> 2.9.6 (c)
+| | | | | | | | | \--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | | | | | | | | \--- org.jetbrains.androidx.lifecycle:lifecycle-runtime-compose:2.9.5 -> 2.9.6 (c)
+| | | | | | | | +--- androidx.savedstate:savedstate-compose:1.3.2 -> 1.4.0
+| | | | | | | | | \--- androidx.savedstate:savedstate-compose-android:1.4.0
+| | | | | | | | | +--- androidx.annotation:annotation:1.9.1 (*)
@ -1177,7 +1147,16 @@
+| | | | | | | | +--- androidx.dynamicanimation:dynamicanimation:1.0.0
+| | | | | | | | | +--- androidx.core:core:1.0.0 -> 1.16.0 (*)
+| | | | | | | | | +--- androidx.collection:collection:1.0.0 -> 1.5.0 (*)
+| | | | | | | | | \--- androidx.legacy:legacy-support-core-utils:1.0.0 (*)
+| | | | | | | | | \--- androidx.legacy:legacy-support-core-utils:1.0.0
+| | | | | | | | | +--- androidx.annotation:annotation:1.0.0 -> 1.9.1 (*)
+| | | | | | | | | +--- androidx.core:core:1.0.0 -> 1.16.0 (*)
+| | | | | | | | | +--- androidx.documentfile:documentfile:1.0.0
+| | | | | | | | | | \--- androidx.annotation:annotation:1.0.0 -> 1.9.1 (*)
+| | | | | | | | | +--- androidx.loader:loader:1.0.0 (*)
+| | | | | | | | | +--- androidx.localbroadcastmanager:localbroadcastmanager:1.0.0
+| | | | | | | | | | \--- androidx.annotation:annotation:1.0.0 -> 1.9.1 (*)
+| | | | | | | | | \--- androidx.print:print:1.0.0
+| | | | | | | | | \--- androidx.annotation:annotation:1.0.0 -> 1.9.1 (*)
+| | | | | | | | \--- org.jspecify:jspecify:1.0.0
+| | | | | | | +--- androidx.window:window:1.5.0
+| | | | | | | | +--- androidx.annotation:annotation:1.8.1 -> 1.9.1 (*)
@ -1391,23 +1370,7 @@
+| | | +--- androidx.compose.ui:ui:1.8.2 -> 1.10.0 (*)
+| | | +--- androidx.compose.ui:ui-text:1.8.1 -> 1.10.0 (*)
+| | | +--- androidx.compose.ui:ui-util:1.8.1 -> 1.10.0 (*)
+| | | +--- androidx.lifecycle:lifecycle-common-java8:2.6.1 -> 2.10.0
+| | | | +--- androidx.annotation:annotation:1.8.1 -> 1.9.1 (*)
+| | | | +--- androidx.lifecycle:lifecycle-common:2.10.0 (*)
+| | | | +--- androidx.lifecycle:lifecycle-common:2.10.0 (c)
+| | | | +--- androidx.lifecycle:lifecycle-livedata:2.10.0 (c)
+| | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.10.0 (c)
+| | | | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
+| | | | +--- androidx.lifecycle:lifecycle-livedata-ktx:2.10.0 (c)
+| | | | +--- androidx.lifecycle:lifecycle-process:2.10.0 (c)
+| | | | +--- androidx.lifecycle:lifecycle-runtime:2.10.0 (c)
+| | | | +--- androidx.lifecycle:lifecycle-runtime-compose:2.10.0 (c)
+| | | | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.10.0 (c)
+| | | | +--- androidx.lifecycle:lifecycle-service:2.10.0 (c)
+| | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.10.0 (c)
+| | | | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.10.0 (c)
+| | | | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.10.0 (c)
+| | | | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-common-java8:2.6.1 -> 2.10.0 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.2.21 (*)
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.2.21 (c)
+| | +--- org.jetbrains.compose.animation:animation-core:1.9.1 -> 1.9.3 (*)
@ -1465,6 +1428,7 @@
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.2.21 (*)
+| | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 -> 1.9.0 (*)
+| | +--- androidx.lifecycle:lifecycle-common:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-core:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
@ -1476,8 +1440,7 @@
+| | +--- androidx.lifecycle:lifecycle-service:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| | \--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| +--- co.touchlab:kermit:2.0.8 (*)
+| +--- org.jetbrains.kotlinx:kotlinx-datetime:0.6.2 (*)
+| +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.4.0
@ -1596,12 +1559,7 @@
++--- com.github.bitfireAT:dav4jvm:2.2.1
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.20 -> 2.2.20 (*)
+| +--- org.apache.commons:commons-lang3:3.8.1 -> 3.12.0
+| \--- com.squareup.okhttp3:okhttp:4.10.0 -> 5.3.2
+| \--- com.squareup.okhttp3:okhttp-android:5.3.2
+| +--- androidx.annotation:annotation:1.9.1 (*)
+| +--- androidx.startup:startup-runtime:1.2.0 (*)
+| +--- com.squareup.okio:okio:3.16.4 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:2.2.21 (*)
+| \--- com.squareup.okhttp3:okhttp:4.10.0 -> 5.3.2 (*)
++--- com.github.tasks:ical4android:fcb0311ca7
+| +--- org.jetbrains.kotlin:kotlin-stdlib:2.1.20 -> 2.2.21 (*)
+| +--- androidx.core:core-ktx:1.16.0 (*)
@ -1640,6 +1598,7 @@
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.2.21 (*)
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 -> 1.10.2 (*)
+| | +--- androidx.lifecycle:lifecycle-common:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-core:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
@ -1651,8 +1610,7 @@
+| | +--- androidx.lifecycle:lifecycle-viewmodel:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| | \--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1 -> 2.10.0 (*)
+| +--- com.google.android.material:material:1.6.0 -> 1.12.0
+| | +--- org.jetbrains.kotlin:kotlin-bom:1.8.22
@ -1893,8 +1851,9 @@
+| \--- androidx.work:work-runtime:2.11.0 (c)
++--- com.etebase:client:2.3.2
+| +--- androidx.annotation:annotation:1.1.0 -> 1.9.1 (*)
+| \--- com.squareup.okhttp3:logging-interceptor:3.12.1
+| \--- com.squareup.okhttp3:okhttp:3.12.1 -> 5.3.2 (*)
+| \--- com.squareup.okhttp3:logging-interceptor:3.12.1 -> 4.11.0
+| +--- com.squareup.okhttp3:okhttp:4.11.0 -> 5.3.2 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.10 -> 2.2.20 (*)
++--- com.github.jheld:colorpicker:a0c2fd2125
+| \--- androidx.appcompat:appcompat:1.1.0 -> 1.7.1 (*)
++--- net.openid:appauth:0.11.1

@ -99,6 +99,7 @@
+| | | | | | | | | | | | +--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | | | | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata:2.10.0 (c)
+| | | | | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.10.0 (c)
+| | | | | | | | | | | | +--- androidx.lifecycle:lifecycle-process:2.10.0 (c)
+| | | | | | | | | | | | +--- androidx.lifecycle:lifecycle-runtime:2.10.0 (c)
+| | | | | | | | | | | | +--- androidx.lifecycle:lifecycle-runtime-compose:2.10.0 (c)
+| | | | | | | | | | | | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.10.0 (c)
@ -108,8 +109,7 @@
+| | | | | | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.10.0 (c)
+| | | | | | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| | | | | | | | | | | | +--- org.jetbrains.androidx.lifecycle:lifecycle-common:2.9.5 -> 2.9.6 (c)
+| | | | | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
+| | | | | | | | | | | | \--- androidx.lifecycle:lifecycle-process:2.10.0 (c)
+| | | | | | | | | | | | \--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
+| | | | | | | | | | | +--- androidx.profileinstaller:profileinstaller:1.4.0
+| | | | | | | | | | | | +--- androidx.annotation:annotation:1.8.1 -> 1.9.1 (*)
+| | | | | | | | | | | | +--- androidx.concurrent:concurrent-futures:1.1.0 -> 1.3.0 (*)
@ -125,6 +125,7 @@
+| | | | | | | | | | | +--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | | | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata:2.10.0 (c)
+| | | | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.10.0 (c)
+| | | | | | | | | | | +--- androidx.lifecycle:lifecycle-process:2.10.0 (c)
+| | | | | | | | | | | +--- androidx.lifecycle:lifecycle-runtime-compose:2.10.0 (c)
+| | | | | | | | | | | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.10.0 (c)
+| | | | | | | | | | | +--- androidx.lifecycle:lifecycle-service:2.10.0 (c)
@ -133,8 +134,7 @@
+| | | | | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.10.0 (c)
+| | | | | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| | | | | | | | | | | +--- org.jetbrains.androidx.lifecycle:lifecycle-runtime:2.9.5 -> 2.9.6 (c)
+| | | | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
+| | | | | | | | | | | \--- androidx.lifecycle:lifecycle-process:2.10.0 (c)
+| | | | | | | | | | | \--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
+| | | | | | | | | | +--- androidx.tracing:tracing:1.2.0 (*)
+| | | | | | | | | | +--- androidx.versionedparcelable:versionedparcelable:1.1.1
+| | | | | | | | | | | +--- androidx.annotation:annotation:1.1.0 -> 1.9.1 (*)
@ -160,6 +160,7 @@
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-process:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-runtime:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-runtime-compose:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.10.0 (c)
@ -168,8 +169,7 @@
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| | | | | | | | | +--- org.jetbrains.androidx.lifecycle:lifecycle-viewmodel:2.9.5 -> 2.9.6 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
+| | | | | | | | | \--- androidx.lifecycle:lifecycle-process:2.10.0 (c)
+| | | | | | | | | \--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.1 -> 2.10.0
+| | | | | | | | | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate-android:2.10.0
+| | | | | | | | | +--- androidx.annotation:annotation:1.9.1 (*)
@ -182,7 +182,9 @@
+| | | | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.2.21 (*)
+| | | | | | | | | | +--- org.jspecify:jspecify:1.0.0
+| | | | | | | | | | +--- androidx.lifecycle:lifecycle-common:2.10.0 (c)
+| | | | | | | | | | +--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata:2.10.0 (c)
+| | | | | | | | | | +--- androidx.lifecycle:lifecycle-process:2.10.0 (c)
+| | | | | | | | | | +--- androidx.lifecycle:lifecycle-runtime:2.10.0 (c)
+| | | | | | | | | | +--- androidx.lifecycle:lifecycle-runtime-compose:2.10.0 (c)
+| | | | | | | | | | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.10.0 (c)
@ -191,9 +193,7 @@
+| | | | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.10.0 (c)
+| | | | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.10.0 (c)
+| | | | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| | | | | | | | | | +--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
+| | | | | | | | | | \--- androidx.lifecycle:lifecycle-process:2.10.0 (c)
+| | | | | | | | | | \--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.10.0 (*)
+| | | | | | | | | +--- androidx.savedstate:savedstate:1.4.0
+| | | | | | | | | | \--- androidx.savedstate:savedstate-android:1.4.0
@ -224,6 +224,7 @@
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-process:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-runtime:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-runtime-compose:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.10.0 (c)
@ -232,8 +233,7 @@
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.10.0 (c)
+| | | | | | | | | +--- org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-savedstate:2.9.5 -> 2.9.6 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
+| | | | | | | | | \--- androidx.lifecycle:lifecycle-process:2.10.0 (c)
+| | | | | | | | | \--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
+| | | | | | | | +--- androidx.navigationevent:navigationevent:1.0.1
+| | | | | | | | | \--- androidx.navigationevent:navigationevent-android:1.0.1
+| | | | | | | | | +--- androidx.annotation:annotation:1.9.1 (*)
@ -261,6 +261,7 @@
+| | | | | | | | +--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-livedata:2.10.0 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.10.0 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-process:2.10.0 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-runtime:2.10.0 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-runtime-compose:2.10.0 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-service:2.10.0 (c)
@ -268,14 +269,15 @@
+| | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.10.0 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.10.0 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
+| | | | | | | | \--- androidx.lifecycle:lifecycle-process:2.10.0 (c)
+| | | | | | | | \--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
+| | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1 -> 2.10.0
+| | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.10.0 (*)
+| | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.2.21 (*)
+| | | | | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0 -> 1.10.2 (*)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-common:2.10.0 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.10.0 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-process:2.10.0 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-runtime:2.10.0 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-runtime-compose:2.10.0 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.10.0 (c)
@ -284,9 +286,7 @@
+| | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.10.0 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-livedata:2.10.0 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
+| | | | | | | | \--- androidx.lifecycle:lifecycle-process:2.10.0 (c)
+| | | | | | | | \--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
+| | | | | | | +--- androidx.savedstate:savedstate-ktx:1.2.1 -> 1.4.0
+| | | | | | | | +--- androidx.savedstate:savedstate:1.4.0 (*)
+| | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.2.21 (*)
@ -319,6 +319,7 @@
+| | | | | | | | +--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-livedata:2.10.0 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.10.0 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-process:2.10.0 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-runtime:2.10.0 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.10.0 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-service:2.10.0 (c)
@ -327,8 +328,7 @@
+| | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.10.0 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| | | | | | | | +--- org.jetbrains.androidx.lifecycle:lifecycle-runtime-compose:2.9.5 -> 2.9.6 (c)
+| | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
+| | | | | | | | \--- androidx.lifecycle:lifecycle-process:2.10.0 (c)
+| | | | | | | | \--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
+| | | | | | | +--- androidx.savedstate:savedstate-compose:1.3.3 -> 1.4.0
+| | | | | | | | \--- androidx.savedstate:savedstate-compose-android:1.4.0
+| | | | | | | | +--- androidx.annotation:annotation:1.9.1 (*)
@ -433,9 +433,7 @@
+| | | | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.2.21 (*)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-common:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-runtime:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-runtime-compose:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.10.0 (c)
@ -443,7 +441,9 @@
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.10.0 (c)
+| | | | | | | | | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| | | | | | | | | +--- androidx.lifecycle:lifecycle-livedata:2.10.0 (c)
+| | | | | | | | | \--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
+| | | | | | | | +--- androidx.startup:startup-runtime:1.0.0 -> 1.1.1 (*)
+| | | | | | | | \--- androidx.emoji2:emoji2-views-helper:1.4.0 (c)
+| | | | | | | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.2.21 (*)
@ -681,7 +681,7 @@
+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2 (*)
+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.10.2 (*)
+| | | +--- com.google.android.gms:play-services-tasks:16.0.1 -> 18.2.0
+| | | | \--- com.google.android.gms:play-services-basement:18.4.0 -> 18.5.0
+| | | | \--- com.google.android.gms:play-services-basement:18.4.0
+| | | | +--- androidx.collection:collection:1.0.0 -> 1.5.0 (*)
+| | | | +--- androidx.core:core:1.2.0 -> 1.16.0 (*)
+| | | | \--- androidx.fragment:fragment:1.1.0 -> 1.5.4
@ -723,6 +723,7 @@
+| | | | | | +--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | | | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.10.0 (c)
+| | | | | | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
+| | | | | | +--- androidx.lifecycle:lifecycle-process:2.10.0 (c)
+| | | | | | +--- androidx.lifecycle:lifecycle-runtime:2.10.0 (c)
+| | | | | | +--- androidx.lifecycle:lifecycle-runtime-compose:2.10.0 (c)
+| | | | | | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.10.0 (c)
@ -730,8 +731,7 @@
+| | | | | | +--- androidx.lifecycle:lifecycle-viewmodel:2.10.0 (c)
+| | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.10.0 (c)
+| | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.10.0 (c)
+| | | | | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| | | | | | \--- androidx.lifecycle:lifecycle-process:2.10.0 (c)
+| | | | | | \--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| | | | | \--- androidx.lifecycle:lifecycle-viewmodel:2.0.0 -> 2.10.0 (*)
+| | | | +--- androidx.savedstate:savedstate:1.2.0 -> 1.4.0 (*)
+| | | | +--- androidx.viewpager:viewpager:1.0.0
@ -747,7 +747,9 @@
+| | | +--- androidx.lifecycle:lifecycle-runtime:2.10.0 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.2.21 (*)
+| | | +--- androidx.lifecycle:lifecycle-common:2.10.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-livedata-core:2.10.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-process:2.10.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-runtime:2.10.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-runtime-compose:2.10.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.10.0 (c)
@ -756,9 +758,7 @@
+| | | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.10.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-livedata:2.10.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
+| | | \--- androidx.lifecycle:lifecycle-process:2.10.0 (c)
+| | | \--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
+| | +--- com.google.android.horologist:horologist-annotations:0.7.15
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.2.0 -> 2.2.21 (*)
+| | +--- com.google.android.gms:play-services-wearable:19.0.0
@ -767,9 +767,9 @@
+| | | | +--- androidx.collection:collection:1.0.0 -> 1.5.0 (*)
+| | | | +--- androidx.core:core:1.2.0 -> 1.16.0 (*)
+| | | | +--- androidx.fragment:fragment:1.0.0 -> 1.5.4 (*)
+| | | | +--- com.google.android.gms:play-services-basement:18.4.0 -> 18.5.0 (*)
+| | | | +--- com.google.android.gms:play-services-basement:18.4.0 (*)
+| | | | \--- com.google.android.gms:play-services-tasks:18.2.0 (*)
+| | | +--- com.google.android.gms:play-services-basement:18.4.0 -> 18.5.0 (*)
+| | | +--- com.google.android.gms:play-services-basement:18.4.0 (*)
+| | | \--- com.google.android.gms:play-services-tasks:18.2.0 (*)
+| | +--- androidx.datastore:datastore-preferences:1.1.7 -> 1.2.0
+| | | \--- androidx.datastore:datastore-preferences-android:1.2.0
@ -863,7 +863,7 @@
+| | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1 -> 1.10.2 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.2.21 (c)
+| | | \--- androidx.concurrent:concurrent-futures:1.3.0 (c)
+| | +--- com.google.android.gms:play-services-basement:17.0.0 -> 18.5.0 (*)
+| | +--- com.google.android.gms:play-services-basement:17.0.0 -> 18.4.0 (*)
+| | +--- com.google.android.gms:play-services-wearable:17.1.0 -> 19.0.0 (*)
+| | +--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.2.21 (*)
@ -986,9 +986,8 @@
+| | | | +--- androidx.annotation:annotation:1.8.1 -> 1.9.1 (*)
+| | | | +--- androidx.lifecycle:lifecycle-common:2.10.0 (*)
+| | | | +--- androidx.lifecycle:lifecycle-common:2.10.0 (c)
+| | | | +--- androidx.lifecycle:lifecycle-livedata:2.10.0 (c)
+| | | | +--- androidx.lifecycle:lifecycle-livedata-core:2.10.0 (c)
+| | | | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
+| | | | +--- androidx.lifecycle:lifecycle-process:2.10.0 (c)
+| | | | +--- androidx.lifecycle:lifecycle-runtime:2.10.0 (c)
+| | | | +--- androidx.lifecycle:lifecycle-runtime-compose:2.10.0 (c)
+| | | | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.10.0 (c)
@ -997,7 +996,8 @@
+| | | | +--- androidx.lifecycle:lifecycle-viewmodel-compose:2.10.0 (c)
+| | | | +--- androidx.lifecycle:lifecycle-viewmodel-ktx:2.10.0 (c)
+| | | | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| | | | \--- androidx.lifecycle:lifecycle-process:2.10.0 (c)
+| | | | +--- androidx.lifecycle:lifecycle-livedata:2.10.0 (c)
+| | | | \--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib -> 2.2.21 (*)
+| | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.2.21 (c)
+| | +--- org.jetbrains.compose.animation:animation-core:1.9.1 -> 1.9.3 (*)
@ -1055,6 +1055,8 @@
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.2.21 (*)
+| | +--- org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3 -> 1.8.1 (*)
+| | +--- androidx.lifecycle:lifecycle-common:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-process:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime-compose:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-runtime-ktx:2.10.0 (c)
@ -1064,9 +1066,7 @@
+| | +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-core:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-common-java8:2.10.0 (c)
+| | +--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
+| | \--- androidx.lifecycle:lifecycle-process:2.10.0 (c)
+| | \--- androidx.lifecycle:lifecycle-livedata-core-ktx:2.10.0 (c)
+| +--- co.touchlab:kermit:2.0.8 (*)
+| +--- org.jetbrains.kotlinx:kotlinx-datetime:0.6.2 (*)
+| +--- org.jetbrains.kotlinx:kotlinx-collections-immutable:0.4.0
@ -1093,7 +1093,6 @@
+| \--- androidx.compose.ui:ui-tooling-preview-android:1.9.5 (*)
++--- androidx.compose.material:material-icons-extended -> 1.7.8 (*)
++--- com.google.firebase:firebase-bom:33.16.0
+| +--- com.google.firebase:firebase-analytics:22.5.0 (c)
+| +--- com.google.firebase:firebase-crashlytics:19.4.4 (c)
+| +--- com.google.firebase:firebase-common:21.0.0 (c)
+| +--- com.google.firebase:firebase-common-ktx:21.0.0 (c)
@ -1112,7 +1111,7 @@
+| | | +--- androidx.annotation:annotation:1.5.0 -> 1.9.1 (*)
+| | | +--- androidx.concurrent:concurrent-futures:1.1.0 -> 1.3.0 (*)
+| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.2.21 (*)
+| | | +--- com.google.android.gms:play-services-basement:18.3.0 -> 18.5.0 (*)
+| | | +--- com.google.android.gms:play-services-basement:18.3.0 -> 18.4.0 (*)
+| | | \--- com.google.android.gms:play-services-tasks:18.1.0 -> 18.2.0 (*)
+| | +--- com.google.firebase:firebase-common-ktx:21.0.0
+| | | +--- com.google.firebase:firebase-common:21.0.0 (*)
@ -1178,77 +1177,28 @@
+| +--- com.google.firebase:firebase-installations:18.0.0 (*)
+| +--- com.google.firebase:firebase-installations-interop:17.2.0 (*)
+| +--- com.google.firebase:firebase-measurement-connector:20.0.1
+| | +--- com.google.android.gms:play-services-basement:18.0.0 -> 18.5.0 (*)
+| | +--- com.google.android.gms:play-services-basement:18.0.0 -> 18.4.0 (*)
+| | \--- com.google.firebase:firebase-annotations:16.0.0 -> 16.2.0 (*)
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.22 -> 1.9.0 (*)
+| +--- com.google.android.datatransport:transport-api:3.2.0 (*)
+| +--- com.google.android.datatransport:transport-backend-cct:3.3.0 (*)
+| +--- com.google.android.datatransport:transport-runtime:3.3.0 (*)
+| \--- androidx.annotation:annotation:1.5.0 -> 1.9.1 (*)
++--- com.google.firebase:firebase-analytics -> 22.5.0
+| +--- com.google.android.gms:play-services-measurement:22.5.0
+| | +--- androidx.collection:collection:1.0.0 -> 1.5.0 (*)
+| | +--- androidx.legacy:legacy-support-core-utils:1.0.0
+| | | +--- androidx.annotation:annotation:1.0.0 -> 1.9.1 (*)
+| | | +--- androidx.core:core:1.0.0 -> 1.16.0 (*)
+| | | +--- androidx.documentfile:documentfile:1.0.0
+| | | | \--- androidx.annotation:annotation:1.0.0 -> 1.9.1 (*)
+| | | +--- androidx.loader:loader:1.0.0 (*)
+| | | +--- androidx.localbroadcastmanager:localbroadcastmanager:1.0.0
+| | | | \--- androidx.annotation:annotation:1.0.0 -> 1.9.1 (*)
+| | | \--- androidx.print:print:1.0.0
+| | | \--- androidx.annotation:annotation:1.0.0 -> 1.9.1 (*)
+| | +--- com.google.android.gms:play-services-basement:18.5.0 (*)
+| | +--- com.google.android.gms:play-services-measurement-base:22.5.0
+| | | \--- com.google.android.gms:play-services-basement:18.5.0 (*)
+| | +--- com.google.android.gms:play-services-measurement-impl:22.5.0
+| | | +--- androidx.collection:collection:1.0.0 -> 1.5.0 (*)
+| | | +--- androidx.core:core:1.9.0 -> 1.16.0 (*)
+| | | +--- androidx.privacysandbox.ads:ads-adservices:1.1.0-beta11
+| | | | +--- androidx.annotation:annotation:1.8.1 -> 1.9.1 (*)
+| | | | +--- androidx.core:core-ktx:1.8.0 -> 1.16.0 (*)
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.2.21 (*)
+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.10.2 (*)
+| | | | \--- androidx.privacysandbox.ads:ads-adservices-java:1.1.0-beta11 (c)
+| | | +--- androidx.privacysandbox.ads:ads-adservices-java:1.1.0-beta11
+| | | | +--- androidx.annotation:annotation:1.8.1 -> 1.9.1 (*)
+| | | | +--- androidx.concurrent:concurrent-futures:1.1.0 -> 1.3.0 (*)
+| | | | +--- androidx.core:core-ktx:1.8.0 -> 1.16.0 (*)
+| | | | +--- androidx.privacysandbox.ads:ads-adservices:1.1.0-beta11 (*)
+| | | | +--- com.google.guava:listenablefuture:1.0 -> 9999.0-empty-to-avoid-conflict-with-guava
+| | | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.2.21 (*)
+| | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3 -> 1.10.2 (*)
+| | | | \--- androidx.privacysandbox.ads:ads-adservices:1.1.0-beta11 (c)
+| | | +--- com.google.android.gms:play-services-base:18.5.0 (*)
+| | | +--- com.google.android.gms:play-services-basement:18.5.0 (*)
+| | | +--- com.google.android.gms:play-services-measurement-base:22.5.0 (*)
+| | | +--- com.google.android.gms:play-services-stats:17.0.2
+| | | | +--- androidx.legacy:legacy-support-core-utils:1.0.0 (*)
+| | | | \--- com.google.android.gms:play-services-basement:18.0.0 -> 18.5.0 (*)
+| | | +--- com.google.android.gms:play-services-tasks:18.2.0 (*)
+| | | \--- com.google.guava:guava:31.1-android -> 33.3.1-android (*)
+| | +--- com.google.android.gms:play-services-measurement-sdk-api:22.5.0
+| | | +--- com.google.android.gms:play-services-basement:18.5.0 (*)
+| | | \--- com.google.android.gms:play-services-measurement-base:22.5.0 (*)
+| | \--- com.google.android.gms:play-services-stats:17.0.2 (*)
+| +--- com.google.android.gms:play-services-measurement-api:22.5.0
+| | +--- com.google.android.gms:play-services-basement:18.5.0 (*)
+| | +--- com.google.android.gms:play-services-measurement-base:22.5.0 (*)
+| | +--- com.google.android.gms:play-services-measurement-sdk-api:22.5.0 (*)
+| | +--- com.google.android.gms:play-services-tasks:18.2.0 (*)
+| | +--- com.google.firebase:firebase-common:21.0.0 (*)
+| | +--- com.google.firebase:firebase-common-ktx:21.0.0 (*)
+| | +--- com.google.firebase:firebase-components:18.0.0 (*)
+| | +--- com.google.firebase:firebase-installations:17.0.1 -> 18.0.0 (*)
+| | +--- com.google.firebase:firebase-installations-interop:17.0.0 -> 17.2.0 (*)
+| | +--- com.google.firebase:firebase-measurement-connector:19.0.0 -> 20.0.1 (*)
+| | +--- com.google.guava:guava:31.1-android -> 33.3.1-android (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.8.0 -> 2.2.21 (*)
+| \--- com.google.android.gms:play-services-measurement-sdk:22.5.0
+| +--- androidx.collection:collection:1.0.0 -> 1.5.0 (*)
+| +--- com.google.android.gms:play-services-basement:18.5.0 (*)
+| +--- com.google.android.gms:play-services-measurement-base:22.5.0 (*)
+| \--- com.google.android.gms:play-services-measurement-impl:22.5.0 (*)
++--- com.posthog:posthog-android:3.28.0
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.22 -> 1.9.0 (*)
+| +--- androidx.lifecycle:lifecycle-process:2.6.2 -> 2.10.0 (*)
+| +--- androidx.lifecycle:lifecycle-common-java8:2.6.2 -> 2.10.0 (*)
+| +--- androidx.core:core:1.5.0 -> 1.16.0 (*)
+| +--- com.squareup.curtains:curtains:1.2.5
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:1.4.21 -> 2.2.21 (*)
+| \--- com.posthog:posthog:6.0.0
+| +--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.22 -> 1.9.0 (*)
+| +--- com.google.code.gson:gson:2.10.1 -> 2.11.0 (*)
+| +--- com.squareup.okhttp3:okhttp-bom:4.11.0
+| | \--- com.squareup.okhttp3:okhttp:4.11.0 -> 4.12.0 (c)
+| \--- com.squareup.okhttp3:okhttp -> 4.12.0
+| +--- com.squareup.okio:okio:3.6.0 -> 3.9.1 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.21 -> 1.9.0 (*)
++--- androidx.wear.compose:compose-material:1.5.6
+| +--- androidx.compose.animation:animation:1.8.0 -> 1.9.5 (*)
+| +--- androidx.compose.foundation:foundation:1.8.0 -> 1.9.5 (*)
@ -1511,7 +1461,16 @@
+| | +--- androidx.dynamicanimation:dynamicanimation:1.0.0
+| | | +--- androidx.core:core:1.0.0 -> 1.16.0 (*)
+| | | +--- androidx.collection:collection:1.0.0 -> 1.5.0 (*)
+| | | \--- androidx.legacy:legacy-support-core-utils:1.0.0 (*)
+| | | \--- androidx.legacy:legacy-support-core-utils:1.0.0
+| | | +--- androidx.annotation:annotation:1.0.0 -> 1.9.1 (*)
+| | | +--- androidx.core:core:1.0.0 -> 1.16.0 (*)
+| | | +--- androidx.documentfile:documentfile:1.0.0
+| | | | \--- androidx.annotation:annotation:1.0.0 -> 1.9.1 (*)
+| | | +--- androidx.loader:loader:1.0.0 (*)
+| | | +--- androidx.localbroadcastmanager:localbroadcastmanager:1.0.0
+| | | | \--- androidx.annotation:annotation:1.0.0 -> 1.9.1 (*)
+| | | \--- androidx.print:print:1.0.0
+| | | \--- androidx.annotation:annotation:1.0.0 -> 1.9.1 (*)
+| | +--- androidx.fragment:fragment:1.2.4 -> 1.5.4 (*)
+| | +--- androidx.lifecycle:lifecycle-runtime:2.5.1 -> 2.10.0 (*)
+| | +--- androidx.recyclerview:recyclerview:1.1.0
@ -1578,9 +1537,7 @@
+| | | | | +--- androidx.lifecycle:lifecycle-runtime:2.7.0 -> 2.10.0 (*)
+| | | | | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 -> 1.10.2 (*)
+| | | | | +--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 -> 2.2.21 (*)
+| | | | | +--- com.squareup.okhttp3:okhttp:4.12.0
+| | | | | | +--- com.squareup.okio:okio:3.6.0 -> 3.9.1 (*)
+| | | | | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.21 -> 1.9.0 (*)
+| | | | | +--- com.squareup.okhttp3:okhttp:4.12.0 (*)
+| | | | | \--- com.squareup.okio:okio:3.9.0 -> 3.9.1 (*)
+| | | | +--- androidx.compose.foundation:foundation:1.6.8 -> 1.9.5 (*)
+| | | | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.0 -> 2.2.21 (*)

@ -65,7 +65,8 @@ platform :android do
"tasksStorePassword": ENV["KEY_STORE_PASSWORD"],
"tasksKeyPassword": ENV["KEY_PASSWORD"],
"tasks_mapbox_key": ENV["MAPBOX_KEY"],
"tasks_google_key": ENV["GOOGLE_KEY"]
"tasks_google_key": ENV["GOOGLE_KEY"],
"tasks_posthog_key": ENV["POSTHOG_KEY"]
}
)
end

@ -120,7 +120,6 @@ dmfs-rfc5545-datetime = { module = "org.dmfs:rfc5545-datetime", version = "0.2.4
etebase = { module = "com.etebase:client", version.ref = "etebase" }
firebase = { module = "com.google.firebase:firebase-bom", version.ref = "firebase" }
firebase-config-ktx = { module = "com.google.firebase:firebase-config-ktx" }
firebase-analytics = { module = "com.google.firebase:firebase-analytics" }
firebase-crashlytics = { module = "com.google.firebase:firebase-crashlytics" }
firebase-crashlytics-gradle = { module = "com.google.firebase:firebase-crashlytics-gradle", version.ref = "firebase-crashlytics-gradle" }
google-oauth2 = { module = "com.google.auth:google-auth-library-oauth2-http", version.ref = "google-oauth2" }
@ -173,6 +172,7 @@ play-review = { module = "com.google.android.play:review-ktx", version = "2.0.2"
play-services-maps = { module = "com.google.android.gms:play-services-maps", version.ref = "play-services-maps" }
play-services-location = { module = "com.google.android.gms:play-services-location", version.ref = "play-services-location" }
play-services-oss-licenses = { module = "com.google.android.gms:play-services-oss-licenses", version.ref = "play-services-oss-licenses" }
posthog-android = { module = "com.posthog:posthog-android", version = "3.28.0" }
shortcut-badger = { module = "me.leolin:ShortcutBadger", version.ref = "shortcut-badger" }
timber = { module = "com.jakewharton.timber:timber", version.ref = "timber" }
xpp3 = { module = "org.ogce:xpp3", version.ref = "xpp3" }

@ -27,5 +27,6 @@ class TasksPreferences(private val dataStore: DataStore<Preferences>) {
val collapseDebug = booleanPreferencesKey("drawer_collapse_debug")
val collapsePlaces = booleanPreferencesKey("drawer_collapse_places")
val acceptedTosVersion = intPreferencesKey("accepted_tos_version")
val hasLoggedOnboardingComplete = booleanPreferencesKey("has_logged_onboarding_complete")
}
}

@ -34,7 +34,13 @@ android {
}
buildTypes {
debug {
val tasks_posthog_key: String? by project
resValue("string", "posthog_key", tasks_posthog_key ?: "")
}
release {
val tasks_posthog_key: String? by project
resValue("string", "posthog_key", tasks_posthog_key ?: "")
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
@ -74,9 +80,7 @@ dependencies {
implementation(libs.androidx.material.icons.extended)
implementation(platform(libs.firebase))
implementation(libs.firebase.crashlytics)
implementation(libs.firebase.analytics) {
exclude("com.google.android.gms", "play-services-ads-identifier")
}
implementation(libs.posthog.android)
implementation(libs.wear.compose.material)
implementation(libs.wear.compose.foundation)
implementation(libs.wear.compose.navigation)

@ -1,6 +1,8 @@
package org.tasks
import android.app.Application
import com.posthog.android.PostHogAndroid
import com.posthog.android.PostHogAndroidConfig
import timber.log.Timber
class WatchApp : Application() {
@ -10,5 +12,20 @@ class WatchApp : Application() {
if (BuildConfig.DEBUG) {
Timber.plant(Timber.DebugTree())
}
val posthogKey = getString(R.string.posthog_key)
if (posthogKey.isNotBlank()) {
PostHogAndroid.setup(
this,
PostHogAndroidConfig(
apiKey = posthogKey,
host = POSTHOG_HOST,
)
)
}
}
companion object {
private const val POSTHOG_HOST = "https://us.i.posthog.com"
}
}

Loading…
Cancel
Save