From 36826185b83a8a9e170f5bc3cef55ddabd288d3c Mon Sep 17 00:00:00 2001 From: sim Date: Fri, 26 Sep 2025 16:12:11 +0200 Subject: [PATCH] Lint --- .editorconfig | 1 + app/build.gradle.kts | 1 - .../sunup/activities/MainActivity.kt | 2 +- .../sunup/activities/MainViewModel.kt | 21 ++++++---------- .../sunup/activities/SettingsViewModel.kt | 14 ++++------- .../sunup/activities/ThemeViewModel.kt | 25 +++++++++++++++++++ .../sunup/activities/ViewModelFactory.kt | 10 ++++---- .../sunup/activities/ui/MainScreen.kt | 3 +-- .../sunup/activities/ui/SettingsScreen.kt | 9 ++++--- .../sunup/activities/ui/SettingsState.kt | 2 +- .../sunup/activities/ui/theme/Theme.kt | 3 +-- .../distributor/sunup/api/ApiUrlCandidate.kt | 2 +- .../distributor/sunup/api/ServerConnection.kt | 12 +++++++-- gradle/libs.versions.toml | 2 -- 14 files changed, 64 insertions(+), 43 deletions(-) create mode 100644 app/src/main/java/org/unifiedpush/distributor/sunup/activities/ThemeViewModel.kt diff --git a/.editorconfig b/.editorconfig index 8fc62ad..7f49a45 100644 --- a/.editorconfig +++ b/.editorconfig @@ -3,3 +3,4 @@ ktlint_code_style = android_studio ktlint_function_naming_ignore_when_annotated_with=Composable max_line_length = 140 ktlint_class_signature_rule_force_multiline_when_parameter_count_greater_or_equal_than=3 +ktlint_function_signature_rule_force_multiline_when_parameter_count_greater_or_equal_than=3 diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 992f0b4..989103e 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -89,7 +89,6 @@ dependencies { implementation(libs.androidx.material3.android) implementation(libs.kotlinx.serialization.json) implementation(libs.androidx.ui.tooling.preview.android) - implementation(libs.androidx.navigation.runtime.ktx) implementation(libs.androidx.navigation.compose) debugImplementation(libs.androidx.ui.tooling) } diff --git a/app/src/main/java/org/unifiedpush/distributor/sunup/activities/MainActivity.kt b/app/src/main/java/org/unifiedpush/distributor/sunup/activities/MainActivity.kt index 7137b6a..6f8e267 100644 --- a/app/src/main/java/org/unifiedpush/distributor/sunup/activities/MainActivity.kt +++ b/app/src/main/java/org/unifiedpush/distributor/sunup/activities/MainActivity.kt @@ -12,8 +12,8 @@ import kotlinx.coroutines.Job import kotlinx.coroutines.launch import org.unifiedpush.distributor.sunup.EventBus import org.unifiedpush.distributor.sunup.Migrations +import org.unifiedpush.distributor.sunup.activities.ThemeViewModel import org.unifiedpush.distributor.sunup.activities.ui.App -import org.unifiedpush.distributor.sunup.activities.ui.ThemeViewModel import org.unifiedpush.distributor.sunup.activities.ui.theme.AppTheme import org.unifiedpush.distributor.sunup.services.RestartWorker import org.unifiedpush.distributor.sunup.utils.TAG diff --git a/app/src/main/java/org/unifiedpush/distributor/sunup/activities/MainViewModel.kt b/app/src/main/java/org/unifiedpush/distributor/sunup/activities/MainViewModel.kt index b9d028b..a74229a 100644 --- a/app/src/main/java/org/unifiedpush/distributor/sunup/activities/MainViewModel.kt +++ b/app/src/main/java/org/unifiedpush/distributor/sunup/activities/MainViewModel.kt @@ -20,6 +20,14 @@ class MainViewModel( val registrationsViewModel: RegistrationsViewModel, val application: Application? = null ) : ViewModel() { + constructor(application: Application) : this( + mainUiState = MainUiState(), + batteryOptimisationViewModel = BatteryOptimisationViewModel(application), + registrationsViewModel = RegistrationsViewModel( + getRegistrationListState(application) + ), + application + ) var mainUiState by mutableStateOf(mainUiState) private set @@ -78,17 +86,4 @@ class MainViewModel( fun restartService() { publishAction(AppAction(AppAction.Action.RestartService)) } - - companion object { - fun from(application: Application): MainViewModel { - return MainViewModel( - mainUiState = MainUiState(), - batteryOptimisationViewModel = BatteryOptimisationViewModel(application), - registrationsViewModel = RegistrationsViewModel( - getRegistrationListState(application) - ), - application - ) - } - } } diff --git a/app/src/main/java/org/unifiedpush/distributor/sunup/activities/SettingsViewModel.kt b/app/src/main/java/org/unifiedpush/distributor/sunup/activities/SettingsViewModel.kt index 90fe44b..baf65fa 100644 --- a/app/src/main/java/org/unifiedpush/distributor/sunup/activities/SettingsViewModel.kt +++ b/app/src/main/java/org/unifiedpush/distributor/sunup/activities/SettingsViewModel.kt @@ -7,17 +7,14 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import java.net.URL import kotlinx.coroutines.launch import org.unifiedpush.distributor.sunup.AppStore import org.unifiedpush.distributor.sunup.BuildConfig import org.unifiedpush.distributor.sunup.activities.ui.SettingsState import org.unifiedpush.distributor.sunup.utils.TAG -import java.net.URL -class SettingsViewModel( - state: SettingsState, - val application: Application? = null -): ViewModel() { +class SettingsViewModel(state: SettingsState, val application: Application? = null) : ViewModel() { constructor(application: Application) : this( SettingsState.from(application), application @@ -26,10 +23,9 @@ class SettingsViewModel( var state by mutableStateOf(state) private set - fun toggleChangeServer() { viewModelScope.launch { - state = state.copy(showChangeServerDialog = !state.showChangeServerDialog,) + state = state.copy(showChangeServerDialog = !state.showChangeServerDialog) } } @@ -52,7 +48,7 @@ class SettingsViewModel( URL(url) state = state.copy( currentApiUrl = url, - showChangeServerDialog = false, + showChangeServerDialog = false ) publishAction(AppAction(AppAction.Action.NewPushServer(url))) } catch (e: Exception) { @@ -75,4 +71,4 @@ class SettingsViewModel( publishAction(AppAction(AppAction.Action.ShowToasts(state.showToasts))) } } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/unifiedpush/distributor/sunup/activities/ThemeViewModel.kt b/app/src/main/java/org/unifiedpush/distributor/sunup/activities/ThemeViewModel.kt new file mode 100644 index 0000000..ad4263d --- /dev/null +++ b/app/src/main/java/org/unifiedpush/distributor/sunup/activities/ThemeViewModel.kt @@ -0,0 +1,25 @@ +package org.unifiedpush.distributor.sunup.activities + +import android.app.Application +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import kotlinx.coroutines.launch +import org.unifiedpush.distributor.sunup.AppStore + +class ThemeViewModel(val application: Application? = null) : ViewModel() { + var dynamicColors by mutableStateOf( + application?.let { AppStore(it).dynamicColors } ?: false + ) + + fun toggleDynamicColors() { + viewModelScope.launch { + dynamicColors = !dynamicColors + application?.run { + AppStore(this).dynamicColors = dynamicColors + } + } + } +} diff --git a/app/src/main/java/org/unifiedpush/distributor/sunup/activities/ViewModelFactory.kt b/app/src/main/java/org/unifiedpush/distributor/sunup/activities/ViewModelFactory.kt index b79f04b..c3ed93b 100644 --- a/app/src/main/java/org/unifiedpush/distributor/sunup/activities/ViewModelFactory.kt +++ b/app/src/main/java/org/unifiedpush/distributor/sunup/activities/ViewModelFactory.kt @@ -8,13 +8,13 @@ import org.unifiedpush.android.distributor.ui.compose.BatteryOptimisationViewMod import org.unifiedpush.android.distributor.ui.compose.previewRegistrationsViewModel import org.unifiedpush.android.distributor.ui.compose.state.DistribMigrationState import org.unifiedpush.distributor.sunup.BuildConfig +import org.unifiedpush.distributor.sunup.activities.ThemeViewModel import org.unifiedpush.distributor.sunup.activities.ui.MainUiState import org.unifiedpush.distributor.sunup.activities.ui.SettingsState -import org.unifiedpush.distributor.sunup.activities.ui.ThemeViewModel class ViewModelFactory(val application: Application) : ViewModelProvider.Factory { override fun create(modelClass: Class): T = when { - modelClass.isAssignableFrom(MainViewModel::class.java) -> MainViewModel.from(application) + modelClass.isAssignableFrom(MainViewModel::class.java) -> MainViewModel(application) modelClass.isAssignableFrom(SettingsViewModel::class.java) -> SettingsViewModel( application ) @@ -36,9 +36,9 @@ class PreviewFactory(val context: Context) : ViewModelProvider.Factory { modelClass.isAssignableFrom(SettingsViewModel::class.java) -> { SettingsViewModel( SettingsState( - BuildConfig.DEFAULT_API_URL, + BuildConfig.DEFAULT_API_URL, false - ), + ) ) } modelClass.isAssignableFrom(ThemeViewModel::class.java) -> ThemeViewModel() @@ -47,4 +47,4 @@ class PreviewFactory(val context: Context) : ViewModelProvider.Factory { } else -> throw IllegalArgumentException("Unknown ViewModel class") } as T -} \ No newline at end of file +} diff --git a/app/src/main/java/org/unifiedpush/distributor/sunup/activities/ui/MainScreen.kt b/app/src/main/java/org/unifiedpush/distributor/sunup/activities/ui/MainScreen.kt index f58d7dc..25eb8b8 100644 --- a/app/src/main/java/org/unifiedpush/distributor/sunup/activities/ui/MainScreen.kt +++ b/app/src/main/java/org/unifiedpush/distributor/sunup/activities/ui/MainScreen.kt @@ -34,8 +34,8 @@ import androidx.lifecycle.Lifecycle import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.lifecycle.repeatOnLifecycle import androidx.lifecycle.viewmodel.compose.viewModel -import org.unifiedpush.android.distributor.ui.compose.AppBar import org.unifiedpush.android.distributor.ui.R as LibR +import org.unifiedpush.android.distributor.ui.compose.AppBar import org.unifiedpush.android.distributor.ui.compose.CardDisableBatteryOptimisation import org.unifiedpush.android.distributor.ui.compose.CardDisabledForMigration import org.unifiedpush.android.distributor.ui.compose.DistribMigrationUi @@ -67,7 +67,6 @@ fun MainAppBarOrSelection(viewModel: MainViewModel, onGoToSettings: () -> Unit) } } - @OptIn(ExperimentalMaterial3Api::class) @Composable fun MainAppBar(viewModel: MainViewModel, onGoToSettings: () -> Unit) { diff --git a/app/src/main/java/org/unifiedpush/distributor/sunup/activities/ui/SettingsScreen.kt b/app/src/main/java/org/unifiedpush/distributor/sunup/activities/ui/SettingsScreen.kt index dbe0b98..b244661 100644 --- a/app/src/main/java/org/unifiedpush/distributor/sunup/activities/ui/SettingsScreen.kt +++ b/app/src/main/java/org/unifiedpush/distributor/sunup/activities/ui/SettingsScreen.kt @@ -25,6 +25,7 @@ import androidx.lifecycle.Lifecycle import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.lifecycle.repeatOnLifecycle import androidx.lifecycle.viewmodel.compose.viewModel +import org.unifiedpush.android.distributor.ui.R as LibR import org.unifiedpush.android.distributor.ui.compose.AboutHeading import org.unifiedpush.android.distributor.ui.compose.DistribMigrationUi import org.unifiedpush.android.distributor.ui.compose.Heading @@ -34,8 +35,8 @@ import org.unifiedpush.distributor.sunup.R import org.unifiedpush.distributor.sunup.activities.DistribMigrationViewModel import org.unifiedpush.distributor.sunup.activities.PreviewFactory import org.unifiedpush.distributor.sunup.activities.SettingsViewModel +import org.unifiedpush.distributor.sunup.activities.ThemeViewModel import org.unifiedpush.distributor.sunup.activities.UiAction -import org.unifiedpush.android.distributor.ui.R as LibR @Composable fun SettingsScreen( @@ -92,7 +93,7 @@ fun SettingsScreen( } ) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S ) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { Preference( stringResource(LibR.string.dynamic_colors), stringResource(LibR.string.clicklabel_dynamic_colors), @@ -162,7 +163,7 @@ fun Preference( warning: Boolean = false, onSelect: () -> Unit ) { - Row ( + Row( Modifier.clickable( true, onclickLabel, @@ -207,4 +208,4 @@ fun PreviewSettingsScreen() { val themeVM = viewModel(factory = factory) val migrationVM = viewModel(factory = factory) SettingsScreen(settVM, themeVM, migrationVM) -} \ No newline at end of file +} diff --git a/app/src/main/java/org/unifiedpush/distributor/sunup/activities/ui/SettingsState.kt b/app/src/main/java/org/unifiedpush/distributor/sunup/activities/ui/SettingsState.kt index d412797..963db32 100644 --- a/app/src/main/java/org/unifiedpush/distributor/sunup/activities/ui/SettingsState.kt +++ b/app/src/main/java/org/unifiedpush/distributor/sunup/activities/ui/SettingsState.kt @@ -18,4 +18,4 @@ data class SettingsState( ) } } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/unifiedpush/distributor/sunup/activities/ui/theme/Theme.kt b/app/src/main/java/org/unifiedpush/distributor/sunup/activities/ui/theme/Theme.kt index d8a5f54..61a889b 100644 --- a/app/src/main/java/org/unifiedpush/distributor/sunup/activities/ui/theme/Theme.kt +++ b/app/src/main/java/org/unifiedpush/distributor/sunup/activities/ui/theme/Theme.kt @@ -261,8 +261,7 @@ fun AppTheme( // Dynamic color is available on Android 12+ dynamicColor: Boolean = false, content: - @Composable() - () -> Unit + @Composable () -> Unit ) { val colorScheme = when { dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { diff --git a/app/src/main/java/org/unifiedpush/distributor/sunup/api/ApiUrlCandidate.kt b/app/src/main/java/org/unifiedpush/distributor/sunup/api/ApiUrlCandidate.kt index 7110358..8f22d07 100644 --- a/app/src/main/java/org/unifiedpush/distributor/sunup/api/ApiUrlCandidate.kt +++ b/app/src/main/java/org/unifiedpush/distributor/sunup/api/ApiUrlCandidate.kt @@ -1,10 +1,10 @@ package org.unifiedpush.distributor.sunup.api import android.content.Context +import java.util.concurrent.atomic.AtomicReference import org.unifiedpush.distributor.sunup.DatabaseFactory import org.unifiedpush.distributor.sunup.services.RestartWorker import org.unifiedpush.distributor.sunup.services.SourceManager -import java.util.concurrent.atomic.AtomicReference /** * Candidate for a new API url diff --git a/app/src/main/java/org/unifiedpush/distributor/sunup/api/ServerConnection.kt b/app/src/main/java/org/unifiedpush/distributor/sunup/api/ServerConnection.kt index 086c0e2..b70d85e 100644 --- a/app/src/main/java/org/unifiedpush/distributor/sunup/api/ServerConnection.kt +++ b/app/src/main/java/org/unifiedpush/distributor/sunup/api/ServerConnection.kt @@ -159,7 +159,11 @@ class ServerConnection(private val context: Context, private val releaseLock: () Distributor.deleteChannelFromServer(context, message.channelID) } - override fun onClosed(webSocket: WebSocket, code: Int, reason: String) { + override fun onClosed( + webSocket: WebSocket, + code: Int, + reason: String + ) { Log.d(TAG, "onClosed: $webSocket") webSocket.cancel() releaseLock() @@ -168,7 +172,11 @@ class ServerConnection(private val context: Context, private val releaseLock: () } } - override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) { + override fun onFailure( + webSocket: WebSocket, + t: Throwable, + response: Response? + ) { Log.d(TAG, "onFailure: An error occurred: $t") response?.let { Log.d(TAG, "onFailure: ${it.code}") diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index bfe6446..8e841bd 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,7 +13,6 @@ material3Android = "1.3.2" okhttp = "5.1.0" uiTooling = "1.9.1" runtimeAndroid = "1.9.1" -navigationRuntimeKtx = "2.9.4" navigationCompose = "2.9.4" [libraries] @@ -31,7 +30,6 @@ kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serializa ktlint-gradle = { module = "org.jlleitschuh.gradle:ktlint-gradle", version.ref = "ktlint"} okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" } androidx-runtime-android = { group = "androidx.compose.runtime", name = "runtime-android", version.ref = "runtimeAndroid" } -androidx-navigation-runtime-ktx = { group = "androidx.navigation", name = "navigation-runtime-ktx", version.ref = "navigationRuntimeKtx" } androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigationCompose" } [plugins]