From c67937815c785c06c014e9b7d145c0e488b8db43 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Sat, 17 Jan 2026 13:25:53 -0600 Subject: [PATCH] Replace Firebase Analytics with PostHog --- app/build.gradle.kts | 8 +- .../java/org/tasks/analytics/Firebase.kt | 12 ++ app/src/googleplay/AndroidManifest.xml | 16 -- .../java/org/tasks/analytics/Firebase.kt | 86 ++++++-- .../todoroo/astrid/activity/MainActivity.kt | 36 +++- .../astrid/activity/TaskListFragment.kt | 1 + .../astrid/provider/Astrid2TaskProvider.kt | 2 +- .../activities/FilterSettingsActivity.kt | 1 + .../tasks/activities/TagSettingsActivity.kt | 1 + .../org/tasks/backup/TasksJsonImporter.kt | 11 +- .../BaseCaldavCalendarSettingsActivity.kt | 1 + .../tasks/dialogs/SortSettingsViewModel.kt | 31 +++ .../tasks/location/LocationPickerActivity.kt | 4 +- .../org/tasks/preferences/BasePreferences.kt | 8 + .../org/tasks/preferences/MainPreferences.kt | 6 + .../tasks/provider/TasksContentProvider.kt | 2 +- .../tasks/widget/ShortcutConfigActivity.kt | 3 + app/src/main/res/values/keys.xml | 15 ++ deps_googleplay.txt | 203 +++++++----------- deps_wear.txt | 171 ++++++--------- fastlane/Fastfile | 3 +- gradle/libs.versions.toml | 2 +- .../org/tasks/preferences/TasksPreferences.kt | 1 + wear/build.gradle.kts | 10 +- wear/src/main/java/org/tasks/WatchApp.kt | 17 ++ 25 files changed, 368 insertions(+), 283 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 434c42dc4..107b48e52 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -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) diff --git a/app/src/generic/java/org/tasks/analytics/Firebase.kt b/app/src/generic/java/org/tasks/analytics/Firebase.kt index e9f6932ce..dccec68c1 100644 --- a/app/src/generic/java/org/tasks/analytics/Firebase.kt +++ b/app/src/generic/java/org/tasks/analytics/Firebase.kt @@ -22,6 +22,18 @@ class Firebase @Inject constructor( Timber.d("${context.getString(event)} -> $params") } + fun logEventOnce(event: Int, vararg params: Pair) { + logEvent(event, *params) + } + + fun logEventOncePerDay(event: Int, vararg params: Pair) { + logEvent(event, *params) + } + + fun logEventForNewUsers(event: Int, vararg params: Pair) { + logEvent(event, *params) + } + fun addTask(source: String) = logEvent(R.string.event_add_task, R.string.param_type to source) diff --git a/app/src/googleplay/AndroidManifest.xml b/app/src/googleplay/AndroidManifest.xml index deb06d4a4..59639512d 100644 --- a/app/src/googleplay/AndroidManifest.xml +++ b/app/src/googleplay/AndroidManifest.xml @@ -10,22 +10,6 @@ android:name="firebase_crashlytics_collection_enabled" android:value="false"/> - - - - - - - - diff --git a/app/src/googleplay/java/org/tasks/analytics/Firebase.kt b/app/src/googleplay/java/org/tasks/analytics/Firebase.kt index 470ef1e0e..543d6df6a 100644 --- a/app/src/googleplay/java/org/tasks/analytics/Firebase.kt +++ b/app/src/googleplay/java/org/tasks/analytics/Firebase.kt @@ -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() fun logEvent(@StringRes event: Int, vararg p: Pair) { 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) { + if (loggedOnceEvents.add(event)) { + logEvent(event, *p) + } + } + + fun logEventOncePerDay(@StringRes event: Int, vararg p: Pair) { + 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) { + 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 } -} \ No newline at end of file + + companion object { + private const val POSTHOG_HOST = "https://us.i.posthog.com" + } +} diff --git a/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt b/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt index b51bf15fd..8bee0e340 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt +++ b/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt @@ -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 { + 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 { + LaunchedEffect(Unit) { + firebase.logEvent(R.string.event_screen_add_account) + } val addAccountViewModel: AddAccountViewModel = hiltViewModel() val microsoftVM: MicrosoftSignInViewModel = hiltViewModel() val syncLauncher = diff --git a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt index e11bcc9cd..2477026ac 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt +++ b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt @@ -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 diff --git a/app/src/main/java/com/todoroo/astrid/provider/Astrid2TaskProvider.kt b/app/src/main/java/com/todoroo/astrid/provider/Astrid2TaskProvider.kt index 9fec633e7..3bbc18c4b 100644 --- a/app/src/main/java/com/todoroo/astrid/provider/Astrid2TaskProvider.kt +++ b/app/src/main/java/com/todoroo/astrid/provider/Astrid2TaskProvider.kt @@ -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) { diff --git a/app/src/main/java/org/tasks/activities/FilterSettingsActivity.kt b/app/src/main/java/org/tasks/activities/FilterSettingsActivity.kt index b1d79e3bb..f51691f3d 100644 --- a/app/src/main/java/org/tasks/activities/FilterSettingsActivity.kt +++ b/app/src/main/java/org/tasks/activities/FilterSettingsActivity.kt @@ -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) } diff --git a/app/src/main/java/org/tasks/activities/TagSettingsActivity.kt b/app/src/main/java/org/tasks/activities/TagSettingsActivity.kt index dd72526da..513033d86 100644 --- a/app/src/main/java/org/tasks/activities/TagSettingsActivity.kt +++ b/app/src/main/java/org/tasks/activities/TagSettingsActivity.kt @@ -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, diff --git a/app/src/main/java/org/tasks/backup/TasksJsonImporter.kt b/app/src/main/java/org/tasks/backup/TasksJsonImporter.kt index 33d342e87..a1dfbe61d 100644 --- a/app/src/main/java/org/tasks/backup/TasksJsonImporter.kt +++ b/app/src/main/java/org/tasks/backup/TasksJsonImporter.kt @@ -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 diff --git a/app/src/main/java/org/tasks/caldav/BaseCaldavCalendarSettingsActivity.kt b/app/src/main/java/org/tasks/caldav/BaseCaldavCalendarSettingsActivity.kt index 38567cb3f..9cb659b77 100644 --- a/app/src/main/java/org/tasks/caldav/BaseCaldavCalendarSettingsActivity.kt +++ b/app/src/main/java/org/tasks/caldav/BaseCaldavCalendarSettingsActivity.kt @@ -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( diff --git a/app/src/main/java/org/tasks/dialogs/SortSettingsViewModel.kt b/app/src/main/java/org/tasks/dialogs/SortSettingsViewModel.kt index a67e42f7c..afb298716 100644 --- a/app/src/main/java/org/tasks/dialogs/SortSettingsViewModel.kt +++ b/app/src/main/java/org/tasks/dialogs/SortSettingsViewModel.kt @@ -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" + } } diff --git a/app/src/main/java/org/tasks/location/LocationPickerActivity.kt b/app/src/main/java/org/tasks/location/LocationPickerActivity.kt index 59cfd9930..34c0cc298 100644 --- a/app/src/main/java/org/tasks/location/LocationPickerActivity.kt +++ b/app/src/main/java/org/tasks/location/LocationPickerActivity.kt @@ -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() diff --git a/app/src/main/java/org/tasks/preferences/BasePreferences.kt b/app/src/main/java/org/tasks/preferences/BasePreferences.kt index 12c2d4330..7c93fe940 100644 --- a/app/src/main/java/org/tasks/preferences/BasePreferences.kt +++ b/app/src/main/java/org/tasks/preferences/BasePreferences.kt @@ -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) diff --git a/app/src/main/java/org/tasks/preferences/MainPreferences.kt b/app/src/main/java/org/tasks/preferences/MainPreferences.kt index 1a9d2aa98..f1e1e153a 100644 --- a/app/src/main/java/org/tasks/preferences/MainPreferences.kt +++ b/app/src/main/java/org/tasks/preferences/MainPreferences.kt @@ -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() diff --git a/app/src/main/java/org/tasks/provider/TasksContentProvider.kt b/app/src/main/java/org/tasks/provider/TasksContentProvider.kt index 6defdfdd0..07d02eae4 100644 --- a/app/src/main/java/org/tasks/provider/TasksContentProvider.kt +++ b/app/src/main/java/org/tasks/provider/TasksContentProvider.kt @@ -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) diff --git a/app/src/main/java/org/tasks/widget/ShortcutConfigActivity.kt b/app/src/main/java/org/tasks/widget/ShortcutConfigActivity.kt index 4c0d512c7..d42eec0a1 100644 --- a/app/src/main/java/org/tasks/widget/ShortcutConfigActivity.kt +++ b/app/src/main/java/org/tasks/widget/ShortcutConfigActivity.kt @@ -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() } diff --git a/app/src/main/res/values/keys.xml b/app/src/main/res/values/keys.xml index 7048d0568..2bd2b582f 100644 --- a/app/src/main/res/values/keys.xml +++ b/app/src/main/res/values/keys.xml @@ -427,7 +427,22 @@ onboarding_sync accept_tos accept_tos_update + onboarding_complete + screen_settings + create_tag + create_filter + create_place + create_list + search + sort_change + screen_welcome + screen_add_account + settings_navigation + import_backup_failed type + screen + error + value picker_mode_date picker_mode_time markdown diff --git a/deps_googleplay.txt b/deps_googleplay.txt index 4ef98c625..25727d8b6 100644 --- a/deps_googleplay.txt +++ b/deps_googleplay.txt @@ -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 diff --git a/deps_wear.txt b/deps_wear.txt index 19c082a33..88004781a 100644 --- a/deps_wear.txt +++ b/deps_wear.txt @@ -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 (*) diff --git a/fastlane/Fastfile b/fastlane/Fastfile index fc27ed9ed..7f0e6d060 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -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 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d4ec26b5c..97738d015 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -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" } diff --git a/kmp/src/commonMain/kotlin/org/tasks/preferences/TasksPreferences.kt b/kmp/src/commonMain/kotlin/org/tasks/preferences/TasksPreferences.kt index 7330472bd..1d2491e83 100644 --- a/kmp/src/commonMain/kotlin/org/tasks/preferences/TasksPreferences.kt +++ b/kmp/src/commonMain/kotlin/org/tasks/preferences/TasksPreferences.kt @@ -27,5 +27,6 @@ class TasksPreferences(private val dataStore: DataStore) { 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") } } \ No newline at end of file diff --git a/wear/build.gradle.kts b/wear/build.gradle.kts index 651efb92d..e5d250412 100644 --- a/wear/build.gradle.kts +++ b/wear/build.gradle.kts @@ -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) diff --git a/wear/src/main/java/org/tasks/WatchApp.kt b/wear/src/main/java/org/tasks/WatchApp.kt index 087daa12e..6b50cf7d3 100644 --- a/wear/src/main/java/org/tasks/WatchApp.kt +++ b/wear/src/main/java/org/tasks/WatchApp.kt @@ -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" } }