UI Changes for Analytics and Crashlytics

This commit is contained in:
Roshan Varughese 2024-09-18 09:21:29 +12:00
parent 380787a310
commit faff22c9e9
4 changed files with 44 additions and 1 deletions

View File

@ -34,15 +34,21 @@ import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.lifecycle.compose.LocalLifecycleOwner
import eu.kanade.presentation.util.rememberRequestPackageInstallsPermissionState import eu.kanade.presentation.util.rememberRequestPackageInstallsPermissionState
import eu.kanade.tachiyomi.core.security.SecurityPreferences
import eu.kanade.tachiyomi.util.system.launchRequestPackageInstallsPermission import eu.kanade.tachiyomi.util.system.launchRequestPackageInstallsPermission
import tachiyomi.i18n.MR import tachiyomi.i18n.MR
import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.i18n.stringResource
import tachiyomi.presentation.core.util.secondaryItemAlpha import tachiyomi.presentation.core.util.secondaryItemAlpha
import uy.kohesive.injekt.injectLazy
internal class PermissionStep : OnboardingStep { internal class PermissionStep : OnboardingStep {
private val securityPreferences: SecurityPreferences by injectLazy()
private var notificationGranted by mutableStateOf(false) private var notificationGranted by mutableStateOf(false)
private var batteryGranted by mutableStateOf(false) private var batteryGranted by mutableStateOf(false)
private var allowCrashLogs by mutableStateOf(false)
private var allowAnalytics by mutableStateOf(false)
override val isComplete: Boolean = true override val isComplete: Boolean = true
@ -109,6 +115,28 @@ internal class PermissionStep : OnboardingStep {
context.startActivity(intent) context.startActivity(intent)
}, },
) )
PermissionItem(
title = "Send crash logs",//i18n later
subtitle = "Send anonymised crash logs to the developers",
granted = allowCrashLogs,
onButtonClick = {
// Toggle the granted state
allowCrashLogs = !allowCrashLogs
securityPreferences.crashlytics().set(allowCrashLogs)
}
)
PermissionItem(
title = "Allow analytics",//i18n later
subtitle = "Send anonymized usage data to improve app features.",
granted = allowAnalytics,
onButtonClick = {
// Toggle the granted state
allowAnalytics = !allowAnalytics
securityPreferences.analytics().set(allowAnalytics)
}
)
} }
} }
@ -140,7 +168,6 @@ internal class PermissionStep : OnboardingStep {
supportingContent = { Text(text = subtitle) }, supportingContent = { Text(text = subtitle) },
trailingContent = { trailingContent = {
OutlinedButton( OutlinedButton(
enabled = !granted,
onClick = onButtonClick, onClick = onButtonClick,
) { ) {
if (granted) { if (granted) {

View File

@ -65,6 +65,14 @@ object SettingsSecurityScreen : SearchableSettings {
) )
}, },
), ),
Preference.PreferenceItem.SwitchPreference(
pref = securityPreferences.crashlytics(),
title = "Allow sharing crash logs with devs",
),
Preference.PreferenceItem.SwitchPreference(
pref = securityPreferences.analytics(),
title = "Allow sharing analytics data",
),
Preference.PreferenceItem.SwitchPreference( Preference.PreferenceItem.SwitchPreference(
pref = securityPreferences.hideNotificationContent(), pref = securityPreferences.hideNotificationContent(),
title = stringResource(MR.strings.hide_notification_content), title = stringResource(MR.strings.hide_notification_content),

View File

@ -21,11 +21,13 @@ import coil3.network.okhttp.OkHttpNetworkFetcherFactory
import coil3.request.allowRgb565 import coil3.request.allowRgb565
import coil3.request.crossfade import coil3.request.crossfade
import coil3.util.DebugLogger import coil3.util.DebugLogger
//import com.google.firebase.crashlytics.FirebaseCrashlytics
import dev.mihon.injekt.patchInjekt import dev.mihon.injekt.patchInjekt
import eu.kanade.domain.DomainModule import eu.kanade.domain.DomainModule
import eu.kanade.domain.base.BasePreferences import eu.kanade.domain.base.BasePreferences
import eu.kanade.domain.ui.UiPreferences import eu.kanade.domain.ui.UiPreferences
import eu.kanade.domain.ui.model.setAppCompatDelegateThemeMode import eu.kanade.domain.ui.model.setAppCompatDelegateThemeMode
import eu.kanade.tachiyomi.core.security.SecurityPreferences
import eu.kanade.tachiyomi.crash.CrashActivity import eu.kanade.tachiyomi.crash.CrashActivity
import eu.kanade.tachiyomi.crash.GlobalExceptionHandler import eu.kanade.tachiyomi.crash.GlobalExceptionHandler
import eu.kanade.tachiyomi.data.coil.BufferedSourceFetcher import eu.kanade.tachiyomi.data.coil.BufferedSourceFetcher
@ -67,6 +69,7 @@ import java.security.Security
class App : Application(), DefaultLifecycleObserver, SingletonImageLoader.Factory { class App : Application(), DefaultLifecycleObserver, SingletonImageLoader.Factory {
private val basePreferences: BasePreferences by injectLazy() private val basePreferences: BasePreferences by injectLazy()
private val securityPreferences: SecurityPreferences by injectLazy()
private val networkPreferences: NetworkPreferences by injectLazy() private val networkPreferences: NetworkPreferences by injectLazy()
private val disableIncognitoReceiver = DisableIncognitoReceiver() private val disableIncognitoReceiver = DisableIncognitoReceiver()
@ -75,6 +78,7 @@ class App : Application(), DefaultLifecycleObserver, SingletonImageLoader.Factor
override fun onCreate() { override fun onCreate() {
super<Application>.onCreate() super<Application>.onCreate()
patchInjekt() patchInjekt()
//FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(securityPreferences.crashlytics().get())
GlobalExceptionHandler.initialize(applicationContext, CrashActivity::class.java) GlobalExceptionHandler.initialize(applicationContext, CrashActivity::class.java)

View File

@ -18,6 +18,10 @@ class SecurityPreferences(
fun hideNotificationContent() = preferenceStore.getBoolean("hide_notification_content", false) fun hideNotificationContent() = preferenceStore.getBoolean("hide_notification_content", false)
fun crashlytics() = preferenceStore.getBoolean("crashlytics", false)
fun analytics() = preferenceStore.getBoolean("analytics", false)
/** /**
* For app lock. Will be set when there is a pending timed lock. * For app lock. Will be set when there is a pending timed lock.
* Otherwise this pref should be deleted. * Otherwise this pref should be deleted.