diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/tracing/ui/settings/SettingsTracingFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/tracing/ui/settings/SettingsTracingFragment.kt index bc08e9d60a4b95f3d7a5ae90c1c3e1a7dcaca571..3c2da3aa538b007d7881ed8f4e521e02460f50af 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/tracing/ui/settings/SettingsTracingFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/tracing/ui/settings/SettingsTracingFragment.kt @@ -46,14 +46,13 @@ class SettingsTracingFragment : Fragment(R.layout.fragment_settings_tracing), Au vm.tracingSettingsState.observe2(this) { state -> binding.settingsTracingState = state - binding.settingsTracingSwitchRow.settingsSwitchRow.apply { + binding.switchRow.apply { when (state) { TracingSettingsState.BluetoothDisabled, TracingSettingsState.LocationDisabled -> setOnClickListener(null) TracingSettingsState.TracingInactive, TracingSettingsState.TracingActive -> setOnClickListener { - val switch = binding.settingsTracingSwitchRow.settingsSwitchRowSwitch - onTracingToggled(!switch.isChecked) + onTracingToggled(!binding.switchRow.isChecked) } } } @@ -73,7 +72,7 @@ class SettingsTracingFragment : Fragment(R.layout.fragment_settings_tracing), Au } vm.isTracingSwitchChecked.observe2(this) { checked -> - binding.settingsTracingSwitchRow.settingsSwitchRowSwitch.isChecked = checked + binding.switchRow.setChecked(checked) } vm.ensErrorEvents.observe2(this) { error -> @@ -98,12 +97,6 @@ class SettingsTracingFragment : Fragment(R.layout.fragment_settings_tracing), Au popBackStack() } - val switch = binding.settingsTracingSwitchRow.settingsSwitchRowSwitch - switch.setOnCheckedChangeListener { view, isChecked -> - if (!view.isPressed) return@setOnCheckedChangeListener - onTracingToggled(isChecked) - } - val bluetooth = binding.settingsTracingStatusBluetooth.tracingStatusCardButton bluetooth.setOnClickListener { ExternalActionHelper.toMainSettings(requireContext()) @@ -121,7 +114,10 @@ class SettingsTracingFragment : Fragment(R.layout.fragment_settings_tracing), Au } private fun onTracingToggled(isChecked: Boolean) { - vm.onTracingToggled(isChecked) + if (isChecked) + vm.turnTracingOn() + else + vm.turnTracingOff() } private fun navigateToInteroperability() { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/tracing/ui/settings/SettingsTracingFragmentViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/tracing/ui/settings/SettingsTracingFragmentViewModel.kt index d8eedf1c334362173e74a94fbc781f09acff7a8b..3ec86a0a71c21b36e1b2abb6f63d27f99f56b2ef 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/tracing/ui/settings/SettingsTracingFragmentViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/tracing/ui/settings/SettingsTracingFragmentViewModel.kt @@ -104,19 +104,9 @@ class SettingsTracingFragmentViewModel @AssistedInject constructor( } ) - fun onTracingToggled(isChecked: Boolean) { + fun turnTracingOn() { try { - if (isChecked) { - tracingPermissionHelper.startTracing() - } else { - isTracingSwitchChecked.postValue(false) - launch { - if (InternalExposureNotificationClient.asyncIsEnabled()) { - InternalExposureNotificationClient.asyncStop() - exposureWindowRiskWorkScheduler.setPeriodicRiskCalculation(enabled = false) - } - } - } + tracingPermissionHelper.startTracing() } catch (exception: Exception) { exception.report( ExceptionCategory.EXPOSURENOTIFICATION, @@ -126,6 +116,24 @@ class SettingsTracingFragmentViewModel @AssistedInject constructor( } } + fun turnTracingOff() { + isTracingSwitchChecked.postValue(false) + launch { + try { + if (InternalExposureNotificationClient.asyncIsEnabled()) { + InternalExposureNotificationClient.asyncStop() + exposureWindowRiskWorkScheduler.setPeriodicRiskCalculation(enabled = false) + } + } catch (exception: Exception) { + exception.report( + ExceptionCategory.EXPOSURENOTIFICATION, + SettingsTracingFragment.TAG, + null + ) + } + } + } + fun handleActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { tracingPermissionHelper.handleActivityResult(requestCode, resultCode, data) } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/analytics/SettingsPrivacyPreservingAnalyticsFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/analytics/SettingsPrivacyPreservingAnalyticsFragment.kt index 9c0d4b5d188f42f20294cd4dea86f2c3a11c44f0..1613ba258ef82499d699259d0592dab2ea57f958 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/analytics/SettingsPrivacyPreservingAnalyticsFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/analytics/SettingsPrivacyPreservingAnalyticsFragment.kt @@ -29,7 +29,7 @@ class SettingsPrivacyPreservingAnalyticsFragment : super.onViewCreated(view, savedInstanceState) binding.apply { - settingsPpaHeader.headerButtonBack.buttonIcon.setOnClickListener { + settingsPpaHeader.setNavigationOnClickListener { popBackStack() } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/notifications/NotificationSettingsFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/notifications/NotificationSettingsFragment.kt index 38572c8ceb7966ed2fc29bd74e82239049356488..bd9eac9b26b758bca23ed18cc867bd19a15fc84b 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/notifications/NotificationSettingsFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/notifications/NotificationSettingsFragment.kt @@ -6,10 +6,10 @@ import android.view.accessibility.AccessibilityEvent import androidx.fragment.app.Fragment import de.rki.coronawarnapp.R import de.rki.coronawarnapp.databinding.FragmentSettingsNotificationsBinding -import de.rki.coronawarnapp.ui.main.MainActivity import de.rki.coronawarnapp.util.ExternalActionHelper import de.rki.coronawarnapp.util.di.AutoInject import de.rki.coronawarnapp.util.ui.observe2 +import de.rki.coronawarnapp.util.ui.popBackStack import de.rki.coronawarnapp.util.ui.viewBindingLazy import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactoryProvider import de.rki.coronawarnapp.util.viewmodel.cwaViewModels @@ -43,49 +43,16 @@ class NotificationSettingsFragment : } private fun setButtonOnClickListener() { - // Notifications about risk status - val updateRiskNotificationSwitch = - binding.settingsSwitchRowNotificationsRisk.settingsSwitchRowSwitch - // Additional click target to toggle switch - val updateRiskNotificationRow = - binding.settingsSwitchRowNotificationsRisk.settingsSwitchRow - // Notifications about test status - val updateTestNotificationSwitch = - binding.settingsSwitchRowNotificationsTest.settingsSwitchRowSwitch - // Additional click target to toggle switch - val updateTestNotificationRow = - binding.settingsSwitchRowNotificationsTest.settingsSwitchRow - // Settings - val settingsRow = binding.settingsNotificationsCard.tracingStatusCardButton - val goBack = - binding.settingsNotificationsHeader.headerButtonBack.buttonIcon - // Update Risk - updateRiskNotificationSwitch.setOnCheckedChangeListener { view, _ -> - // Make sure that listener is called by user interaction - if (!view.isPressed) return@setOnCheckedChangeListener - + binding.settingsSwitchRowNotificationsRisk.setOnClickListener { vm.toggleNotificationsRiskEnabled() } - // Additional click target to toggle switch - updateRiskNotificationRow.setOnClickListener { - if (updateRiskNotificationRow.isEnabled) vm.toggleNotificationsRiskEnabled() - } - // Update Test - updateTestNotificationSwitch.setOnCheckedChangeListener { view, _ -> - // Make sure that listener is called by user interaction - if (!view.isPressed) return@setOnCheckedChangeListener - + binding.settingsSwitchRowNotificationsTest.setOnClickListener { vm.toggleNotificationsTestEnabled() } - // Additional click target to toggle switch - updateTestNotificationRow.setOnClickListener { - if (updateTestNotificationRow.isEnabled) vm.toggleNotificationsTestEnabled() - } - goBack.setOnClickListener { - (activity as MainActivity).goBack() + binding.settingsNotificationsHeader.setNavigationOnClickListener { + popBackStack() } - // System Settings - settingsRow.setOnClickListener { + binding.settingsNotificationsCard.tracingStatusCardButton.setOnClickListener { ExternalActionHelper.toNotifications(requireContext()) } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/yourconsent/SubmissionYourConsentFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/yourconsent/SubmissionYourConsentFragment.kt index 093eddf09783b70c5be5db58d9b7e09a2fc7687b..4a7463b4d99504fe70f1d397840088db8efb1816 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/yourconsent/SubmissionYourConsentFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/yourconsent/SubmissionYourConsentFragment.kt @@ -37,13 +37,15 @@ class SubmissionYourConsentFragment : Fragment(R.layout.fragment_submission_your super.onViewCreated(view, savedInstanceState) vm.consent.observe2(this) { - binding.submissionYourConsentSwitch.status = it - binding.submissionYourConsentSwitch.statusText = getString( - if (it) { - R.string.submission_your_consent_switch_status_on - } else { - R.string.submission_your_consent_switch_status_off - } + binding.submissionYourConsentSwitch.setChecked(it) + binding.submissionYourConsentSwitch.setSubtitle( + getString( + if (it) { + R.string.submission_your_consent_switch_status_on + } else { + R.string.submission_your_consent_switch_status_off + } + ) ) } @@ -63,11 +65,7 @@ class SubmissionYourConsentFragment : Fragment(R.layout.fragment_submission_your binding.apply { submissionYourConsentTitle.headerButtonBack.buttonIcon.setOnClickListener { vm.goBack() } - submissionYourConsentSwitch.settingsSwitchRowSwitch.setOnCheckedChangeListener { view, _ -> - if (!view.isPressed) return@setOnCheckedChangeListener - vm.switchConsent() - } - submissionYourConsentSwitch.settingsSwitchRow.setOnClickListener { vm.switchConsent() } + submissionYourConsentSwitch.setOnClickListener { vm.switchConsent() } submissionYourConsentAgreementDetailsText.setOnClickListener { vm.goLegal() } submissionYourConsentAgreementShareSymptomsText.setText( diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ui/views/MoreInformationView.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/MoreInformationView.kt similarity index 99% rename from Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ui/views/MoreInformationView.kt rename to Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/MoreInformationView.kt index 10871bb410845252a2a70bf8d28b8c198583ce51..89c4cafbdd1fce3d8a208424517f2b3b29e67536 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ui/views/MoreInformationView.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/MoreInformationView.kt @@ -1,4 +1,4 @@ -package de.rki.coronawarnapp.util.ui.views +package de.rki.coronawarnapp.ui.view import android.content.Context import android.util.AttributeSet diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/SwitchRowView.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/SwitchRowView.kt new file mode 100644 index 0000000000000000000000000000000000000000..901d0b0705b8a04a4539ec335c90f50c89dbd63e --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/SwitchRowView.kt @@ -0,0 +1,43 @@ +package de.rki.coronawarnapp.ui.view + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.widget.TextView +import androidx.constraintlayout.widget.ConstraintLayout +import com.google.android.material.switchmaterial.SwitchMaterial +import de.rki.coronawarnapp.R + +class SwitchRowView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : ConstraintLayout(context, attrs, defStyleAttr) { + + private val switch by lazy { findViewById<SwitchMaterial>(R.id.switch_view) } + private val title by lazy { findViewById<TextView>(R.id.switch_title) } + private val subtitleView by lazy { findViewById<TextView>(R.id.switch_subtitle) } + + init { + LayoutInflater.from(context).inflate(R.layout.switch_row, this, true) + } + + fun setChecked(turnedOn: Boolean?) { + switch.isChecked = turnedOn ?: false + } + + fun setTitle(text: String?) { + title.text = text + } + + fun setSubtitle(text: String?) { + subtitleView.text = text + } + + fun setSwitchEnabled(isEnabled: Boolean?) { + switch.isEnabled = isEnabled ?: false + } + + val isChecked: Boolean + get() = switch.isChecked +} diff --git a/Corona-Warn-App/src/main/res/layout/bugreporting_debuglog_fragment.xml b/Corona-Warn-App/src/main/res/layout/bugreporting_debuglog_fragment.xml index 497d4491be0c86e6c0b32196ba1d18c9b0817be6..e0d43d04f557e4124a255dbc1fb046f6e983a5fb 100644 --- a/Corona-Warn-App/src/main/res/layout/bugreporting_debuglog_fragment.xml +++ b/Corona-Warn-App/src/main/res/layout/bugreporting_debuglog_fragment.xml @@ -61,7 +61,7 @@ android:layout_marginVertical="24dp" android:focusable="true" /> - <de.rki.coronawarnapp.util.ui.views.MoreInformationView + <de.rki.coronawarnapp.ui.view.MoreInformationView android:id="@+id/debug_log_history_container" android:layout_width="match_parent" android:layout_height="wrap_content" @@ -73,7 +73,7 @@ app:titleText="@string/debugging_debuglog_id_history_title" tools:visibility="visible" /> - <de.rki.coronawarnapp.util.ui.views.MoreInformationView + <de.rki.coronawarnapp.ui.view.MoreInformationView android:id="@+id/debug_log_privacy_information" android:layout_width="match_parent" android:layout_height="wrap_content" diff --git a/Corona-Warn-App/src/main/res/layout/bugreporting_debuglog_upload_fragment.xml b/Corona-Warn-App/src/main/res/layout/bugreporting_debuglog_upload_fragment.xml index 33a772ec011e4cef6115a68f58f0d2f4cd5b9960..c5b191c1283b1102487f4ab76407a21e53a44e24 100644 --- a/Corona-Warn-App/src/main/res/layout/bugreporting_debuglog_upload_fragment.xml +++ b/Corona-Warn-App/src/main/res/layout/bugreporting_debuglog_upload_fragment.xml @@ -64,7 +64,7 @@ android:layout_marginVertical="24dp" android:focusable="true" /> - <de.rki.coronawarnapp.util.ui.views.MoreInformationView + <de.rki.coronawarnapp.ui.view.MoreInformationView android:id="@+id/debug_log_privacy_information" android:layout_marginHorizontal="24dp" android:layout_width="match_parent" diff --git a/Corona-Warn-App/src/main/res/layout/fragment_settings_notifications.xml b/Corona-Warn-App/src/main/res/layout/fragment_settings_notifications.xml index f97962270f1d8305cd082be0e9b76bbf5ce632c0..0b3690fb5d0b773ac7cc44431c31f72153670082 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_settings_notifications.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_settings_notifications.xml @@ -17,16 +17,15 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - <include + <com.google.android.material.appbar.MaterialToolbar android:id="@+id/settings_notifications_header" - layout="@layout/include_header" + style="@style/CWAToolbar.BackArrow" android:layout_width="0dp" android:layout_height="wrap_content" - app:icon="@{@drawable/ic_back}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" - app:title="@{@string/settings_notifications_title}" /> + app:title="@string/settings_notifications_title" /> <ScrollView android:layout_width="0dp" @@ -57,36 +56,49 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> - <include + <de.rki.coronawarnapp.ui.view.SwitchRowView android:id="@+id/settings_switch_row_notifications_risk" - layout="@layout/include_settings_switch_row" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_small" gone="@{state != null && !state.isNotificationsEnabled}" - app:enabled="@{true}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/settings_notifications_header_details" - app:showDivider="@{true}" - app:status="@{state.isNotificationsRiskEnabled}" - app:statusText="@{state.getRiskNotificationStatusText(context)}" - app:subtitle="@{@string/settings_notifications_subtitle_update_risk}" /> - - <include + app:checked="@{state.isNotificationsRiskEnabled}" + app:subtitle="@{state.getRiskNotificationStatusText(context)}" + app:switchEnabled="@{true}" + app:title="@{@string/settings_notifications_subtitle_update_risk}" /> + + <View + android:id="@+id/divider" + android:layout_width="match_parent" + android:layout_height="@dimen/card_divider" + android:layout_marginHorizontal="@dimen/spacing_normal" + android:background="@color/colorHairline" + app:layout_constraintTop_toBottomOf="@id/settings_switch_row_notifications_risk" /> + + <de.rki.coronawarnapp.ui.view.SwitchRowView android:id="@+id/settings_switch_row_notifications_test" - layout="@layout/include_settings_switch_row" android:layout_width="0dp" android:layout_height="wrap_content" + android:layout_marginTop="@dimen/spacing_small" gone="@{ state != null && !state.isNotificationsEnabled}" - app:enabled="@{true}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/settings_switch_row_notifications_risk" - app:showDivider="@{true}" - app:status="@{state.isNotificationsTestEnabled}" - app:statusText="@{state.getTestNotificationStatusText(context)}" - app:subtitle="@{@string/settings_notifications_subtitle_update_test}" /> + app:checked="@{state.isNotificationsTestEnabled}" + app:subtitle="@{state.getTestNotificationStatusText(context)}" + app:switchEnabled="@{true}" + app:title="@{@string/settings_notifications_subtitle_update_test}" /> + + <View + android:id="@+id/divider2" + android:layout_width="match_parent" + android:layout_height="@dimen/card_divider" + android:layout_marginHorizontal="@dimen/spacing_normal" + android:background="@color/colorHairline" + app:layout_constraintTop_toBottomOf="@id/settings_switch_row_notifications_test" /> <include android:id="@+id/settings_notifications_card" @@ -125,4 +137,4 @@ </androidx.constraintlayout.widget.ConstraintLayout> -</layout> \ No newline at end of file +</layout> diff --git a/Corona-Warn-App/src/main/res/layout/fragment_settings_privacy_preserving_analytics.xml b/Corona-Warn-App/src/main/res/layout/fragment_settings_privacy_preserving_analytics.xml index 0ecb4d8fc07dd6031e7e5d97930e8db5764540fd..eec2f250912951aac825936469576328b904fe19 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_settings_privacy_preserving_analytics.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_settings_privacy_preserving_analytics.xml @@ -10,18 +10,15 @@ android:fillViewport="true" android:focusable="true"> - <include + <com.google.android.material.appbar.MaterialToolbar android:id="@+id/settings_ppa_header" - layout="@layout/include_header" - android:layout_width="0dp" + style="@style/CWAToolbar.BackArrow" + android:layout_width="match_parent" android:layout_height="wrap_content" - android:contentDescription="@string/settings_background_priority_title" - android:focusable="true" - app:icon="@{@drawable/ic_back}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" - app:title="@{@string/settings_privacy_preserving_analytics_title}" /> + app:title="@string/settings_privacy_preserving_analytics_title" /> <ScrollView android:id="@+id/scrollview" @@ -64,9 +61,9 @@ android:text="@string/onboarding_ppa_body" app:layout_constraintEnd_toEndOf="@id/body_end" app:layout_constraintStart_toStartOf="@id/body_start" - app:layout_constraintTop_toBottomOf="@+id/onboarding_illustration" /> + app:layout_constraintTop_toBottomOf="@id/onboarding_illustration" /> - <de.rki.coronawarnapp.util.ui.views.MoreInformationView + <de.rki.coronawarnapp.ui.view.MoreInformationView android:id="@id/settings_ppa_switch_row" android:layout_width="0dp" android:layout_height="wrap_content" @@ -83,7 +80,7 @@ app:toggleOffText="@string/settings_off" app:toggleOnText="@string/settings_on" /> - <de.rki.coronawarnapp.util.ui.views.MoreInformationView + <de.rki.coronawarnapp.ui.view.MoreInformationView android:id="@id/federal_state_row" android:layout_width="0dp" android:layout_height="wrap_content" @@ -96,7 +93,7 @@ app:subtitleText="@string/onboarding_ppa_state_title" app:titleText="@string/onboarding_ppa_state_title" /> - <de.rki.coronawarnapp.util.ui.views.MoreInformationView + <de.rki.coronawarnapp.ui.view.MoreInformationView android:id="@id/district_row" android:layout_width="0dp" android:layout_height="wrap_content" @@ -105,11 +102,11 @@ app:isTopDividerVisible="false" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/federal_state_row" + app:layout_constraintTop_toBottomOf="@id/federal_state_row" app:subtitleText="@string/onboarding_ppa_district_title" app:titleText="@string/onboarding_ppa_district_title" /> - <de.rki.coronawarnapp.util.ui.views.MoreInformationView + <de.rki.coronawarnapp.ui.view.MoreInformationView android:id="@id/age_group_row" android:layout_width="0dp" android:layout_height="wrap_content" @@ -129,9 +126,9 @@ android:layout_height="wrap_content" android:layout_marginTop="32dp" android:orientation="vertical" - app:layout_constraintEnd_toStartOf="@+id/guideline_card_end" - app:layout_constraintStart_toStartOf="@+id/guideline_card_start" - app:layout_constraintTop_toBottomOf="@+id/age_group_row"> + app:layout_constraintEnd_toStartOf="@id/guideline_card_end" + app:layout_constraintStart_toStartOf="@id/guideline_card_start" + app:layout_constraintTop_toBottomOf="@id/age_group_row"> <TextView android:id="@id/legal_title" @@ -215,7 +212,7 @@ android:text="@string/ppa_onboarding_privacy_information_point_sixteen" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="@id/bullet_point_consent" - app:layout_constraintTop_toBottomOf="@+id/legal_point_identity" /> + app:layout_constraintTop_toBottomOf="@id/legal_point_identity" /> <androidx.appcompat.widget.AppCompatImageView android:id="@id/bullet_point_sixteen" @@ -229,7 +226,7 @@ </androidx.constraintlayout.widget.ConstraintLayout> - <de.rki.coronawarnapp.util.ui.views.MoreInformationView + <de.rki.coronawarnapp.ui.view.MoreInformationView android:id="@id/more_info_row" android:layout_width="0dp" android:layout_height="wrap_content" @@ -238,7 +235,7 @@ android:focusable="true" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/consent_layout" + app:layout_constraintTop_toBottomOf="@id/consent_layout" app:titleText="@string/onboarding_ppa_more_info_title" /> <androidx.constraintlayout.widget.Guideline diff --git a/Corona-Warn-App/src/main/res/layout/fragment_settings_tracing.xml b/Corona-Warn-App/src/main/res/layout/fragment_settings_tracing.xml index 95ba2919e5222e310134520cb6fb1d7e250f2d40..6037070b77a23cfa09b5ac62975d615227b9eec6 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_settings_tracing.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_settings_tracing.xml @@ -77,20 +77,25 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/illustration" /> - <include - android:id="@+id/settings_tracing_switch_row" - layout="@layout/include_settings_switch_row" + <de.rki.coronawarnapp.ui.view.SwitchRowView + android:id="@+id/switch_row" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginTop="@dimen/spacing_normal" - app:enabled="@{settingsTracingState.isTracingSwitchEnabled()}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/information_details_header_headline" - app:showDivider="@{true}" - app:status="@{settingsTracingState.isTracingSwitchChecked()}" - app:statusText="@{settingsTracingState.getTracingStatusText(context)}" - app:subtitle="@{@string/settings_tracing_title}" /> + app:checked="@{settingsTracingState.isTracingSwitchChecked()}" + app:subtitle="@{settingsTracingState.getTracingStatusText(context)}" + app:switchEnabled="@{settingsTracingState.isTracingSwitchEnabled()}" + app:title="@{@string/settings_tracing_title}" /> + + <View + android:id="@+id/divider" + android:layout_width="match_parent" + android:layout_height="@dimen/card_divider" + android:layout_marginHorizontal="@dimen/spacing_normal" + android:background="@color/colorHairline" + app:layout_constraintTop_toBottomOf="@+id/switch_row" /> <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/settingsInteroperabilityRow" @@ -101,7 +106,7 @@ android:background="?android:selectableItemBackground" app:layout_constraintStart_toStartOf="@id/guideline_start" app:layout_constraintEnd_toStartOf="@id/guideline_end" - app:layout_constraintTop_toBottomOf="@id/settings_tracing_switch_row"> + app:layout_constraintTop_toBottomOf="@id/switch_row"> <androidx.appcompat.widget.AppCompatImageView android:id="@+id/flag_eu" diff --git a/Corona-Warn-App/src/main/res/layout/fragment_submission_your_consent.xml b/Corona-Warn-App/src/main/res/layout/fragment_submission_your_consent.xml index 6afea3003ca30db6bce0e8f2d62bbe96c696d352..20ee30c8264574e6cb9bedc72c0e2314a4026fb9 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_submission_your_consent.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_submission_your_consent.xml @@ -37,18 +37,24 @@ android:layout_height="wrap_content" android:focusable="true"> - <include + <de.rki.coronawarnapp.ui.view.SwitchRowView android:id="@+id/submission_your_consent_switch" - layout="@layout/include_settings_switch_row" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_small" - app:enabled="@{true}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" - app:showDivider="@{true}" - app:subtitle="@{@string/submission_your_consent_switch_subtitle}" /> + app:switchEnabled="@{true}" + app:title="@{@string/submission_your_consent_switch_subtitle}" /> + + <View + android:id="@+id/divider" + android:layout_width="match_parent" + android:layout_height="@dimen/card_divider" + android:layout_marginHorizontal="@dimen/spacing_normal" + android:background="@color/colorHairline" + app:layout_constraintTop_toBottomOf="@id/submission_your_consent_switch" /> <TextView android:id="@+id/submission_your_consent_about_text" @@ -59,7 +65,7 @@ android:text="@string/submission_your_consent_about_agreement" app:layout_constraintEnd_toEndOf="@id/guideline_end" app:layout_constraintStart_toStartOf="@id/guideline_start" - app:layout_constraintTop_toBottomOf="@+id/submission_your_consent_switch" /> + app:layout_constraintTop_toBottomOf="@id/submission_your_consent_switch" /> <LinearLayout android:id="@+id/submission_your_consent_agreement_card" @@ -69,9 +75,9 @@ android:layout_marginTop="@dimen/spacing_medium" android:focusable="true" android:orientation="vertical" - app:layout_constraintEnd_toStartOf="@+id/guideline_card_end" - app:layout_constraintStart_toStartOf="@+id/guideline_card_start" - app:layout_constraintTop_toBottomOf="@+id/submission_your_consent_about_text"> + app:layout_constraintEnd_toStartOf="@id/guideline_card_end" + app:layout_constraintStart_toStartOf="@id/guideline_card_start" + app:layout_constraintTop_toBottomOf="@id/submission_your_consent_about_text"> <TextView android:id="@+id/submission_your_consent_agreement_title" @@ -81,7 +87,7 @@ android:layout_marginEnd="@dimen/spacing_small" android:accessibilityHeading="true" android:contentDescription="@string/submission_your_consent_agreement_title" - android:text="@string/submission_your_consent_agreement_title"/> + android:text="@string/submission_your_consent_agreement_title" /> <TextView android:id="@+id/submission_your_consent_agreement_share_test_results_text" @@ -114,8 +120,8 @@ android:layout_marginTop="@dimen/spacing_medium" android:background="@color/colorHairline" app:layout_constraintEnd_toEndOf="@+id/guideline_end" - app:layout_constraintStart_toStartOf="@+id/guideline_start" - app:layout_constraintTop_toBottomOf="@+id/submission_your_consent_agreement_card" /> + app:layout_constraintStart_toStartOf="@id/guideline_start" + app:layout_constraintTop_toBottomOf="@id/submission_your_consent_agreement_card" /> <TextView android:id="@+id/submission_your_consent_agreement_details_text" @@ -128,7 +134,7 @@ android:text="@string/submission_your_consent_agreement_details" app:layout_constraintEnd_toEndOf="@id/guideline_end" app:layout_constraintStart_toStartOf="@id/guideline_start" - app:layout_constraintTop_toBottomOf="@+id/submission_your_consent_agreement_details_divider_top" /> + app:layout_constraintTop_toBottomOf="@id/submission_your_consent_agreement_details_divider_top" /> <View android:id="@+id/submission_your_consent_agreement_details_divider_bottom" @@ -136,8 +142,8 @@ android:layout_height="@dimen/card_divider" android:background="@color/colorHairline" app:layout_constraintEnd_toEndOf="@+id/guideline_end" - app:layout_constraintStart_toStartOf="@+id/guideline_start" - app:layout_constraintTop_toBottomOf="@+id/submission_your_consent_agreement_details_text" /> + app:layout_constraintStart_toStartOf="@id/guideline_start" + app:layout_constraintTop_toBottomOf="@id/submission_your_consent_agreement_details_text" /> <include layout="@layout/merge_guidelines_side" /> <include layout="@layout/merge_guidelines_card" /> @@ -157,4 +163,4 @@ </androidx.constraintlayout.widget.ConstraintLayout> -</layout> \ No newline at end of file +</layout> diff --git a/Corona-Warn-App/src/main/res/layout/fragment_trace_location_onboarding.xml b/Corona-Warn-App/src/main/res/layout/fragment_trace_location_onboarding.xml index efc8de075f85d24fbc314810b5e3daa55472ef85..d353db870dab7c855bbe9eefab89fc3309a3cc2c 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_trace_location_onboarding.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_trace_location_onboarding.xml @@ -250,7 +250,7 @@ </androidx.constraintlayout.widget.ConstraintLayout> - <de.rki.coronawarnapp.util.ui.views.MoreInformationView + <de.rki.coronawarnapp.ui.view.MoreInformationView android:id="@+id/check_in_onboarding_privacy" android:layout_width="match_parent" android:layout_height="wrap_content" diff --git a/Corona-Warn-App/src/main/res/layout/include_settings_switch_row.xml b/Corona-Warn-App/src/main/res/layout/include_settings_switch_row.xml deleted file mode 100644 index ccab31e83d96b4de4c1f9e434da38e717af6b484..0000000000000000000000000000000000000000 --- a/Corona-Warn-App/src/main/res/layout/include_settings_switch_row.xml +++ /dev/null @@ -1,118 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<layout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto"> - - <data> - <variable - name="subtitle" - type="String" /> - - <variable - name="enabled" - type="Boolean" /> - - <variable - name="status" - type="Boolean" /> - - <variable - name="statusText" - type="String" /> - - <variable - name="showDivider" - type="Boolean" /> - - </data> - - <androidx.constraintlayout.widget.ConstraintLayout - android:layout_width="match_parent" - android:layout_height="wrap_content"> - - <androidx.constraintlayout.widget.ConstraintLayout - android:id="@+id/settings_switch_row" - style="@style/row" - android:layout_width="0dp" - android:layout_height="wrap_content" - android:focusable="true" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent"> - - <androidx.constraintlayout.widget.ConstraintLayout - android:id="@+id/settings_switch_row_header" - android:layout_width="0dp" - android:layout_height="wrap_content" - android:layout_marginEnd="@dimen/spacing_normal" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toStartOf="@+id/settings_switch_row_switch" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent"> - - <TextView - android:id="@+id/settings_switch_row_header_subtitle" - style="@style/subtitle" - android:layout_width="0dp" - android:layout_height="wrap_content" - android:text="@{subtitle}" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" /> - - <TextView - android:id="@+id/settings_switch_row_header_body" - style="@style/body2Medium" - android:layout_width="0dp" - android:layout_height="wrap_content" - android:layout_marginTop="@dimen/spacing_mega_tiny" - android:accessibilityLiveRegion="assertive" - android:text="@{statusText}" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/settings_switch_row_header_subtitle" /> - - </androidx.constraintlayout.widget.ConstraintLayout> - - <com.google.android.material.switchmaterial.SwitchMaterial - android:id="@+id/settings_switch_row_switch" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:checked="@{status}" - android:importantForAccessibility="no" - android:enabled="@{enabled}" - android:contentDescription="@{subtitle + ` ` + status}" - android:theme="@style/switchBase" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toTopOf="parent" /> - - </androidx.constraintlayout.widget.ConstraintLayout> - - <include - android:id="@+id/divider" - layout="@layout/include_divider" - android:layout_width="0dp" - android:layout_height="@dimen/card_divider" - gone="@{!showDivider}" - app:layout_constraintEnd_toEndOf="@id/guideline_end" - app:layout_constraintStart_toStartOf="@id/guideline_start" - app:layout_constraintTop_toBottomOf="@+id/settings_switch_row" /> - - <androidx.constraintlayout.widget.Guideline - android:id="@+id/guideline_start" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:orientation="vertical" - app:layout_constraintGuide_begin="@dimen/guideline_start" /> - - <androidx.constraintlayout.widget.Guideline - android:id="@+id/guideline_end" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:orientation="vertical" - app:layout_constraintGuide_end="@dimen/guideline_end" /> - - </androidx.constraintlayout.widget.ConstraintLayout> - -</layout> diff --git a/Corona-Warn-App/src/main/res/layout/rat_profile_onboarding_fragment.xml b/Corona-Warn-App/src/main/res/layout/rat_profile_onboarding_fragment.xml index 8921df8adde5035c5eab401e38ec40c7b7cd1186..e8edce2e075fa3a689e3697f6d15eaee982e5950 100644 --- a/Corona-Warn-App/src/main/res/layout/rat_profile_onboarding_fragment.xml +++ b/Corona-Warn-App/src/main/res/layout/rat_profile_onboarding_fragment.xml @@ -246,7 +246,7 @@ app:layout_constraintTop_toBottomOf="@id/rat_profile_onboarding_body6" /> </androidx.constraintlayout.widget.ConstraintLayout> - <de.rki.coronawarnapp.util.ui.views.MoreInformationView + <de.rki.coronawarnapp.ui.view.MoreInformationView android:id="@+id/rat_profile_onboarding_privacy" android:layout_width="match_parent" android:layout_height="wrap_content" diff --git a/Corona-Warn-App/src/main/res/layout/switch_row.xml b/Corona-Warn-App/src/main/res/layout/switch_row.xml new file mode 100644 index 0000000000000000000000000000000000000000..502698f17d03759a11dc7ff7ac88bfeea12bcd5a --- /dev/null +++ b/Corona-Warn-App/src/main/res/layout/switch_row.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="utf-8"?> + +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/switch_row" + style="@style/row" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:focusable="true" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + <TextView + android:id="@+id/switch_title" + style="@style/subtitle" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginEnd="@dimen/spacing_normal" + app:layout_constraintEnd_toStartOf="@+id/switch_view" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:text="Setting" /> + + <TextView + android:id="@+id/switch_subtitle" + style="@style/body2Medium" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/spacing_mega_tiny" + android:layout_marginEnd="@dimen/spacing_normal" + android:accessibilityLiveRegion="assertive" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toStartOf="@+id/switch_view" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/switch_title" + tools:text="Active" /> + + <com.google.android.material.switchmaterial.SwitchMaterial + android:id="@+id/switch_view" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:clickable="false" + android:importantForAccessibility="no" + android:theme="@style/switchBase" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/Corona-Warn-App/src/main/res/layout/trace_location_organizer_qr_code_info_fragment.xml b/Corona-Warn-App/src/main/res/layout/trace_location_organizer_qr_code_info_fragment.xml index de5948e1fe8de67d48496593342c7b4bda2dde40..c7326c58b36f99479702aad56d81a6d1149cd79e 100644 --- a/Corona-Warn-App/src/main/res/layout/trace_location_organizer_qr_code_info_fragment.xml +++ b/Corona-Warn-App/src/main/res/layout/trace_location_organizer_qr_code_info_fragment.xml @@ -148,7 +148,7 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/trace_location_qr_time_sheet_text" /> - <de.rki.coronawarnapp.util.ui.views.MoreInformationView + <de.rki.coronawarnapp.ui.view.MoreInformationView android:id="@+id/privacy_information" android:layout_width="match_parent" android:layout_height="wrap_content" @@ -182,4 +182,4 @@ app:layout_constraintStart_toStartOf="parent" tools:text="@string/acknowledge_button" /> -</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/Corona-Warn-App/src/main/res/values/attrs.xml b/Corona-Warn-App/src/main/res/values/attrs.xml index c6977d75c07901faf2d06a0cc07b0de3f285bc46..d49dd03c1be761c2fef3f03a4c54f94f8e00aa2c 100644 --- a/Corona-Warn-App/src/main/res/values/attrs.xml +++ b/Corona-Warn-App/src/main/res/values/attrs.xml @@ -54,4 +54,4 @@ <declare-styleable name="TraceLocationHighlightView"> <attr name="android:text" /> </declare-styleable> -</resources> \ No newline at end of file +</resources>