@@ -29,6 +29,8 @@ import androidx.compose.material3.Card
2929import androidx.compose.material3.CardDefaults
3030import androidx.compose.material3.CircularProgressIndicator
3131import androidx.compose.material3.Icon
32+ import androidx.compose.material3.ListItem
33+ import androidx.compose.material3.ListItemDefaults
3234import androidx.compose.material3.MaterialTheme
3335import androidx.compose.material3.Text
3436import androidx.compose.material3.TextButton
@@ -37,6 +39,7 @@ import androidx.compose.ui.Alignment
3739import androidx.compose.ui.Modifier
3840import androidx.compose.ui.platform.LocalHapticFeedback
3941import androidx.compose.ui.unit.dp
42+ import com.sameerasw.airsync.R
4043import com.sameerasw.airsync.domain.model.DeviceInfo
4144import com.sameerasw.airsync.domain.model.UiState
4245import com.sameerasw.airsync.presentation.ui.components.cards.ClipboardFeaturesCard
@@ -48,7 +51,7 @@ import com.sameerasw.airsync.presentation.ui.components.cards.MediaSyncCard
4851import com.sameerasw.airsync.presentation.ui.components.cards.NotificationSyncCard
4952import com.sameerasw.airsync.presentation.ui.components.cards.PermissionsCard
5053import com.sameerasw.airsync.presentation.ui.components.cards.QuickSettingsTilesCard
51- import com.sameerasw.airsync.presentation.ui.components.cards.SendNowPlayingCard
54+ import com.sameerasw.airsync.presentation.ui.components.cards.IconToggleItem
5255import com.sameerasw.airsync.presentation.ui.components.cards.SmartspacerCard
5356import com.sameerasw.airsync.presentation.viewmodel.AirSyncViewModel
5457import com.sameerasw.airsync.utils.HapticUtil
@@ -116,46 +119,16 @@ fun SettingsView(
116119 PermissionsCard (missingPermissionsCount = uiState.missingPermissions.size)
117120
118121 // Help and guides card
119- Card (
120- modifier = Modifier
121- .fillMaxWidth()
122- .clickable {
123- HapticUtil .performClick(haptics)
124- onShowHelp()
125- },
126- shape = MaterialTheme .shapes.extraSmall,
127- colors = CardDefaults .cardColors(
128- containerColor = MaterialTheme .colorScheme.surfaceContainerHighest
129- )
130- ) {
131- Row (
132- modifier = Modifier
133- .fillMaxWidth()
134- .padding(16 .dp),
135- horizontalArrangement = Arrangement .SpaceBetween ,
136- verticalAlignment = Alignment .CenterVertically
137- ) {
138- Column (modifier = Modifier .weight(1f )) {
139- Text (
140- androidx.compose.ui.res.stringResource(com.sameerasw.airsync.R .string.label_help_guides),
141- style = MaterialTheme .typography.titleMedium,
142- color = MaterialTheme .colorScheme.onSurface
143- )
144- Text (
145- androidx.compose.ui.res.stringResource(com.sameerasw.airsync.R .string.subtitle_help_guides),
146- style = MaterialTheme .typography.bodySmall,
147- color = MaterialTheme .colorScheme.onSurface.copy(alpha = 0.7f )
148- )
149- }
150-
151- Icon (
152- painter = androidx.compose.ui.res.painterResource(id = com.sameerasw.airsync.R .drawable.rounded_keyboard_arrow_right_24),
153- contentDescription = " Open help" ,
154- modifier = Modifier .size(24 .dp),
155- tint = MaterialTheme .colorScheme.onSurface
156- )
122+ com.sameerasw.airsync.presentation.ui.components.cards.IconToggleItem (
123+ iconRes = com.sameerasw.airsync.R .drawable.rounded_info_24,
124+ title = androidx.compose.ui.res.stringResource(com.sameerasw.airsync.R .string.label_help_guides),
125+ description = androidx.compose.ui.res.stringResource(com.sameerasw.airsync.R .string.subtitle_help_guides),
126+ showToggle = false ,
127+ onClick = {
128+ HapticUtil .performClick(haptics)
129+ onShowHelp()
157130 }
158- }
131+ )
159132
160133 QuickSettingsTilesCard (
161134 isConnectionTileAdded = com.sameerasw.airsync.utils.QuickSettingsUtil .isQSTileAdded(
@@ -165,10 +138,6 @@ fun SettingsView(
165138 isClipboardTileAdded = com.sameerasw.airsync.utils.QuickSettingsUtil .isQSTileAdded(
166139 context,
167140 com.sameerasw.airsync.service.ClipboardTileService ::class .java
168- ),
169- isQuickShareTileAdded = com.sameerasw.airsync.utils.QuickSettingsUtil .isQSTileAdded(
170- context,
171-
172141 )
173142 )
174143 }
@@ -182,13 +151,9 @@ fun SettingsView(
182151 onDefaultTabChange = { tab -> viewModel.setDefaultTab(tab) }
183152 )
184153
185- SendNowPlayingCard (
186- isSendNowPlayingEnabled = uiState.isBlurSettingEnabled,
187- onToggleSendNowPlaying = { enabled: Boolean ->
188- viewModel.setUseBlurEnabled(enabled, context)
189- },
154+ IconToggleItem (
190155 title = androidx.compose.ui.res.stringResource(com.sameerasw.airsync.R .string.label_use_blur),
191- subtitle = when {
156+ description = when {
192157 com.sameerasw.airsync.utils.DeviceInfoUtil .isBlurProblematicDevice() ->
193158 androidx.compose.ui.res.stringResource(com.sameerasw.airsync.R .string.subtitle_blur_disabled_samsung)
194159
@@ -197,25 +162,32 @@ fun SettingsView(
197162
198163 else -> androidx.compose.ui.res.stringResource(com.sameerasw.airsync.R .string.subtitle_use_blur)
199164 },
165+ iconRes = R .drawable.rounded_blur_on_24,
166+ isChecked = uiState.isBlurSettingEnabled,
167+ onCheckedChange = { enabled: Boolean ->
168+ viewModel.setUseBlurEnabled(enabled, context)
169+ },
200170 enabled = ! com.sameerasw.airsync.utils.DeviceInfoUtil .isBlurProblematicDevice()
201171 )
202172
203- SendNowPlayingCard (
204- isSendNowPlayingEnabled = uiState.isPitchBlackThemeEnabled,
205- onToggleSendNowPlaying = { enabled: Boolean ->
206- viewModel.setPitchBlackThemeEnabled(enabled)
207- },
173+ IconToggleItem (
208174 title = androidx.compose.ui.res.stringResource(com.sameerasw.airsync.R .string.label_pitch_black_theme),
209- subtitle = androidx.compose.ui.res.stringResource(com.sameerasw.airsync.R .string.subtitle_pitch_black_theme)
175+ description = androidx.compose.ui.res.stringResource(com.sameerasw.airsync.R .string.subtitle_pitch_black_theme),
176+ iconRes = R .drawable.rounded_dark_mode_24,
177+ isChecked = uiState.isPitchBlackThemeEnabled,
178+ onCheckedChange = { enabled: Boolean ->
179+ viewModel.setPitchBlackThemeEnabled(enabled)
180+ }
210181 )
211182
212- SendNowPlayingCard (
213- isSendNowPlayingEnabled = uiState.isSentryReportingEnabled,
214- onToggleSendNowPlaying = { enabled: Boolean ->
215- viewModel.setSentryReportingEnabled(enabled)
216- },
183+ IconToggleItem (
217184 title = androidx.compose.ui.res.stringResource(com.sameerasw.airsync.R .string.label_error_reporting),
218- subtitle = androidx.compose.ui.res.stringResource(com.sameerasw.airsync.R .string.subtitle_error_reporting)
185+ description = androidx.compose.ui.res.stringResource(com.sameerasw.airsync.R .string.subtitle_error_reporting),
186+ iconRes = R .drawable.rounded_bug_report_24,
187+ isChecked = uiState.isSentryReportingEnabled,
188+ onCheckedChange = { enabled: Boolean ->
189+ viewModel.setSentryReportingEnabled(enabled)
190+ }
219191 )
220192 }
221193 }
@@ -261,13 +233,14 @@ fun SettingsView(
261233 }
262234 )
263235
264- SendNowPlayingCard (
265- isSendNowPlayingEnabled = uiState.isQuickShareEnabled,
266- onToggleSendNowPlaying = { enabled: Boolean ->
267- viewModel.setQuickShareEnabled(context, enabled)
268- },
236+ IconToggleItem (
269237 title = " Quick Share" ,
270- subtitle = " Allow receiving files from nearby devices"
238+ description = " Allow receiving files from nearby devices" ,
239+ iconRes = R .drawable.quick_share,
240+ isChecked = uiState.isQuickShareEnabled,
241+ onCheckedChange = { enabled: Boolean ->
242+ viewModel.setQuickShareEnabled(context, enabled)
243+ }
271244 )
272245 }
273246 }
@@ -292,51 +265,45 @@ fun SettingsView(
292265 }
293266
294267 if (isEssentialsInstalled) {
295- SendNowPlayingCard (
296- isSendNowPlayingEnabled = uiState.isEssentialsConnectionEnabled,
297- onToggleSendNowPlaying = { enabled: Boolean ->
298- viewModel.setEssentialsConnectionEnabled(enabled)
299- },
268+ IconToggleItem (
300269 title = androidx.compose.ui.res.stringResource(com.sameerasw.airsync.R .string.connect_to_essentials),
301- subtitle = androidx.compose.ui.res.stringResource(com.sameerasw.airsync.R .string.connect_to_essentials_summary)
270+ description = androidx.compose.ui.res.stringResource(com.sameerasw.airsync.R .string.connect_to_essentials_summary),
271+ iconRes = R .drawable.essentials_icon,
272+ isChecked = uiState.isEssentialsConnectionEnabled,
273+ onCheckedChange = { enabled: Boolean ->
274+ viewModel.setEssentialsConnectionEnabled(enabled)
275+ }
302276 )
303277 } else {
304- Card (
305- modifier = Modifier .fillMaxWidth(),
306- shape = MaterialTheme .shapes.extraSmall,
307- colors = CardDefaults .cardColors(
308- containerColor = MaterialTheme .colorScheme.surfaceContainerHighest
309- )
310- ) {
311- androidx.compose.material3.ListItem (
312- colors = androidx.compose.material3.ListItemDefaults .colors(
313- containerColor = androidx.compose.ui.graphics.Color .Transparent
314- ),
315- headlineContent = { Text (androidx.compose.ui.res.stringResource(com.sameerasw.airsync.R .string.download_essentials)) },
316- supportingContent = {
317- Text (
318- androidx.compose.ui.res.stringResource(
319- com.sameerasw.airsync.R .string.download_essentials_summary
320- )
278+ ListItem (
279+ colors = ListItemDefaults .colors(
280+ containerColor = androidx.compose.ui.graphics.Color .Transparent
281+ ),
282+ headlineContent = { Text (androidx.compose.ui.res.stringResource(com.sameerasw.airsync.R .string.download_essentials)) },
283+ supportingContent = {
284+ Text (
285+ androidx.compose.ui.res.stringResource(
286+ com.sameerasw.airsync.R .string.download_essentials_summary
321287 )
322- },
323- trailingContent = {
324- Button (
325- onClick = {
326- val intent = android.content.Intent (
327- android.content.Intent .ACTION_VIEW ,
328- android.net.Uri .parse(" https://github.com/sameerasw/essentials/releases/latest" )
329- )
330- intent.flags =
331- android.content.Intent .FLAG_ACTIVITY_NEW_TASK
332- context.startActivity(intent)
333- }
334- ) {
335- Text (" Download" )
288+ )
289+ },
290+ trailingContent = {
291+ Button (
292+ onClick = {
293+ HapticUtil .performClick(haptics)
294+ val intent = android.content.Intent (
295+ android.content.Intent .ACTION_VIEW ,
296+ android.net.Uri .parse(" https://github.com/sameerasw/essentials/releases/latest" )
297+ )
298+ intent.flags =
299+ android.content.Intent .FLAG_ACTIVITY_NEW_TASK
300+ context.startActivity(intent)
336301 }
302+ ) {
303+ Text (" Download" )
337304 }
338- )
339- }
305+ }
306+ )
340307 }
341308 }
342309 }
0 commit comments