Skip to content
Snippets Groups Projects
Unverified Commit 8de85c01 authored by Matthias Urhahn's avatar Matthias Urhahn Committed by GitHub
Browse files

Merge pull request #3109 from corona-warn-app/dev/2.3-to-vaccination-main

2.3 to vaccination main (DEV)
parents 14419d25 068d0d16
No related branches found
No related tags found
No related merge requests found
Showing
with 69 additions and 140 deletions
......@@ -6,7 +6,7 @@
android:layout_height="match_parent"
tools:context=".ui.main.MainActivity">
<androidx.appcompat.widget.Toolbar
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbarErrorReport"
style="@style/Widget.AppCompat.Toolbar"
android:layout_width="match_parent"
......@@ -70,5 +70,4 @@
tools:context="SettingsCrashReporterFragment"
tools:listitem="@layout/view_crashreport_list_item" />
</androidx.constraintlayout.widget.ConstraintLayout>
......@@ -32,7 +32,7 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Switch
<com.google.android.material.switchmaterial.SwitchMaterial
android:id="@+id/fake_metered_connection_toggle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
......
......@@ -4,7 +4,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.Toolbar
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
style="@style/Widget.AppCompat.Toolbar"
android:layout_width="match_parent"
......
......@@ -8,7 +8,7 @@ import androidx.navigation.fragment.navArgs
import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.databinding.SurveyConsentFragmentBinding
import de.rki.coronawarnapp.util.DialogHelper
import de.rki.coronawarnapp.util.ExternalActionHelper
import de.rki.coronawarnapp.util.ExternalActionHelper.openUrl
import de.rki.coronawarnapp.util.di.AutoInject
import de.rki.coronawarnapp.util.ui.doNavigate
import de.rki.coronawarnapp.util.ui.observe2
......@@ -48,7 +48,7 @@ class SurveyConsentFragment : Fragment(R.layout.survey_consent_fragment), AutoIn
activity?.onBackPressed()
is SurveyConsentNavigationEvents.NavigateWeb -> {
ExternalActionHelper.openUrl(this, event.url)
openUrl(event.url)
popBackStack()
}
is SurveyConsentNavigationEvents.NavigateToMoreInformationScreen -> {
......
......@@ -9,7 +9,7 @@ import androidx.recyclerview.widget.DefaultItemAnimator
import androidx.recyclerview.widget.LinearLayoutManager
import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.databinding.TracingDetailsFragmentLayoutBinding
import de.rki.coronawarnapp.util.ExternalActionHelper
import de.rki.coronawarnapp.util.ExternalActionHelper.openUrl
import de.rki.coronawarnapp.util.di.AutoInject
import de.rki.coronawarnapp.util.getDrawableCompat
import de.rki.coronawarnapp.util.lists.diffutil.update
......@@ -58,10 +58,7 @@ class TracingDetailsFragment : Fragment(R.layout.tracing_details_fragment_layout
is TracingDetailsNavigationEvents.NavigateToSurveyConsentFragment -> doNavigate(
TracingDetailsFragmentDirections.actionRiskDetailsFragmentToSurveyConsentFragment(it.type)
)
is TracingDetailsNavigationEvents.NavigateToSurveyUrlInBrowser -> ExternalActionHelper.openUrl(
this,
it.url
)
is TracingDetailsNavigationEvents.NavigateToSurveyUrlInBrowser -> openUrl(it.url)
}
}
......
......@@ -12,7 +12,7 @@ import de.rki.coronawarnapp.nearby.InternalExposureNotificationClient
import de.rki.coronawarnapp.tracing.ui.TracingConsentDialog
import de.rki.coronawarnapp.tracing.ui.settings.SettingsTracingFragmentViewModel.Event
import de.rki.coronawarnapp.util.DialogHelper
import de.rki.coronawarnapp.util.ExternalActionHelper
import de.rki.coronawarnapp.util.ExternalActionHelper.openDeviceSettings
import de.rki.coronawarnapp.util.di.AutoInject
import de.rki.coronawarnapp.util.ui.doNavigate
import de.rki.coronawarnapp.util.ui.observe2
......@@ -30,7 +30,7 @@ import javax.inject.Inject
class SettingsTracingFragment : Fragment(R.layout.fragment_settings_tracing), AutoInject {
@Inject lateinit var viewModelFactory: CWAViewModelFactoryProvider.Factory
private val vm: SettingsTracingFragmentViewModel by cwaViewModels(
private val viewModel: SettingsTracingFragmentViewModel by cwaViewModels(
ownerProducer = { requireActivity().viewModelStore },
factoryProducer = { viewModelFactory }
)
......@@ -40,10 +40,10 @@ class SettingsTracingFragment : Fragment(R.layout.fragment_settings_tracing), Au
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
vm.loggingPeriod.observe2(this) {
viewModel.loggingPeriod.observe2(this) {
binding.loggedPeriod = it
}
vm.tracingSettingsState.observe2(this) { state ->
viewModel.tracingSettingsState.observe2(this) { state ->
binding.settingsTracingState = state
binding.switchRow.apply {
......@@ -58,24 +58,22 @@ class SettingsTracingFragment : Fragment(R.layout.fragment_settings_tracing), Au
}
}
vm.events.observe2(this) {
viewModel.events.observe2(this) {
when (it) {
is Event.RequestPermissions -> it.permissionRequest.invoke(requireActivity())
Event.ManualCheckingDialog -> showManualCheckingRequiredDialog()
is Event.TracingConsentDialog -> {
TracingConsentDialog(requireContext()).show(
onConsentGiven = { it.onConsentResult(true) },
onConsentDeclined = { it.onConsentResult(false) }
)
}
is Event.ManualCheckingDialog -> showManualCheckingRequiredDialog()
is Event.TracingConsentDialog -> TracingConsentDialog(requireContext()).show(
onConsentGiven = { it.onConsentResult(true) },
onConsentDeclined = { it.onConsentResult(false) }
)
}
}
vm.isTracingSwitchChecked.observe2(this) { checked ->
viewModel.isTracingSwitchChecked.observe2(this) { checked ->
binding.switchRow.setChecked(checked)
}
vm.ensErrorEvents.observe2(this) { error ->
viewModel.ensErrorEvents.observe2(this) { error ->
error.toErrorDialogBuilder(requireContext()).show()
}
......@@ -88,42 +86,31 @@ class SettingsTracingFragment : Fragment(R.layout.fragment_settings_tracing), Au
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
vm.handleActivityResult(requestCode, resultCode, data)
viewModel.handleActivityResult(requestCode, resultCode, data)
}
private fun setButtonOnClickListener() {
binding.toolbar.setNavigationOnClickListener {
private fun setButtonOnClickListener() = with(binding) {
toolbar.setNavigationOnClickListener {
popBackStack()
}
val bluetooth = binding.settingsTracingStatusBluetooth.tracingStatusCardButton
bluetooth.setOnClickListener {
ExternalActionHelper.toMainSettings(requireContext())
settingsTracingStatusBluetooth.tracingStatusCardButton.setOnClickListener {
openDeviceSettings()
}
val location = binding.settingsTracingStatusLocation.tracingStatusCardButton
location.setOnClickListener {
ExternalActionHelper.toMainSettings(requireContext())
settingsTracingStatusLocation.tracingStatusCardButton.setOnClickListener {
openDeviceSettings()
}
val interoperability = binding.settingsInteroperabilityRow
interoperability.setOnClickListener {
navigateToInteroperability()
settingsInteroperabilityRow.setOnClickListener {
doNavigate(
SettingsTracingFragmentDirections.actionSettingsTracingFragmentToInteropCountryConfigurationFragment()
)
}
}
private fun onTracingToggled(isChecked: Boolean) {
if (isChecked)
vm.turnTracingOn()
else
vm.turnTracingOff()
}
private fun navigateToInteroperability() {
doNavigate(
SettingsTracingFragmentDirections.actionSettingsTracingFragmentToInteropCountryConfigurationFragment()
)
private fun onTracingToggled(isChecked: Boolean) = with(viewModel) {
if (isChecked) turnTracingOn() else turnTracingOff()
}
private fun showManualCheckingRequiredDialog() {
......
......@@ -8,7 +8,7 @@ import android.view.accessibility.AccessibilityEvent
import androidx.fragment.app.Fragment
import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.databinding.FragmentInformationAboutBinding
import de.rki.coronawarnapp.ui.main.MainActivity
import de.rki.coronawarnapp.util.ui.popBackStack
import de.rki.coronawarnapp.util.ui.viewBindingLazy
/**
......@@ -42,7 +42,7 @@ class InformationAboutFragment : Fragment(R.layout.fragment_information_about) {
private fun setButtonOnClickListener() {
binding.informationAboutHeader.headerButtonBack.buttonIcon.setOnClickListener {
(activity as MainActivity).goBack()
popBackStack()
}
}
}
......@@ -6,9 +6,9 @@ import android.view.accessibility.AccessibilityEvent
import androidx.fragment.app.Fragment
import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.databinding.FragmentInformationContactBinding
import de.rki.coronawarnapp.ui.main.MainActivity
import de.rki.coronawarnapp.util.ExternalActionHelper
import de.rki.coronawarnapp.util.ExternalActionHelper.callPhone
import de.rki.coronawarnapp.util.linkifyPhoneNumbers
import de.rki.coronawarnapp.util.ui.popBackStack
import de.rki.coronawarnapp.util.ui.viewBindingLazy
/**
......@@ -32,15 +32,13 @@ class InformationContactFragment : Fragment(R.layout.fragment_information_contac
private fun setButtonOnClickListener() {
binding.informationContactHeader.headerButtonBack.buttonIcon.setOnClickListener {
(activity as MainActivity).goBack()
popBackStack()
}
binding.informationContactNavigationRowPhone.navigationRow.setOnClickListener {
val number = getString(R.string.information_contact_phone_call_number)
ExternalActionHelper.call(this, number)
callPhone(getString(R.string.information_contact_phone_call_number))
}
binding.informationContactNavigationRowInternationalPhone.navigationRow.setOnClickListener {
val number = getString(R.string.information_contact_button_international_phone)
ExternalActionHelper.call(this, number)
callPhone(getString(R.string.information_contact_button_international_phone))
}
}
}
......@@ -9,11 +9,11 @@ import androidx.fragment.app.Fragment
import com.google.android.gms.nearby.exposurenotification.ExposureNotificationClient
import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.databinding.FragmentInformationBinding
import de.rki.coronawarnapp.ui.main.MainActivity
import de.rki.coronawarnapp.util.ExternalActionHelper
import de.rki.coronawarnapp.util.ExternalActionHelper.openUrl
import de.rki.coronawarnapp.util.di.AutoInject
import de.rki.coronawarnapp.util.ui.doNavigate
import de.rki.coronawarnapp.util.ui.observe2
import de.rki.coronawarnapp.util.ui.popBackStack
import de.rki.coronawarnapp.util.ui.setGone
import de.rki.coronawarnapp.util.ui.viewBindingLazy
import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactoryProvider
......@@ -95,7 +95,7 @@ class InformationFragment : Fragment(R.layout.fragment_information), AutoInject
)
}
binding.informationHelp.mainRow.setOnClickListener {
ExternalActionHelper.openUrl(this, requireContext().getString(R.string.main_about_link))
openUrl(getString(R.string.main_about_link))
}
binding.informationLegal.mainRow.setOnClickListener {
doNavigate(
......@@ -113,7 +113,7 @@ class InformationFragment : Fragment(R.layout.fragment_information), AutoInject
)
}
binding.informationHeader.headerButtonBack.buttonIcon.setOnClickListener {
(activity as MainActivity).goBack()
popBackStack()
}
binding.informationRelease.mainRow.setOnClickListener {
doNavigate(
......
......@@ -7,8 +7,8 @@ import android.view.accessibility.AccessibilityEvent
import androidx.fragment.app.Fragment
import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.databinding.FragmentInformationLegalBinding
import de.rki.coronawarnapp.ui.main.MainActivity
import de.rki.coronawarnapp.util.convertToHyperlink
import de.rki.coronawarnapp.util.ui.popBackStack
import de.rki.coronawarnapp.util.ui.viewBindingLazy
/**
......@@ -41,7 +41,7 @@ class InformationLegalFragment : Fragment(R.layout.fragment_information_legal) {
private fun setButtonOnClickListener() {
binding.informationLegalHeader.headerButtonBack.buttonIcon.setOnClickListener {
(activity as MainActivity).goBack()
popBackStack()
}
}
}
......@@ -6,7 +6,7 @@ import android.view.accessibility.AccessibilityEvent
import androidx.fragment.app.Fragment
import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.databinding.FragmentInformationTechnicalBinding
import de.rki.coronawarnapp.ui.main.MainActivity
import de.rki.coronawarnapp.util.ui.popBackStack
import de.rki.coronawarnapp.util.ui.viewBindingLazy
/**
......@@ -31,7 +31,7 @@ class InformationTechnicalFragment : Fragment(R.layout.fragment_information_tech
private fun setButtonOnClickListener() {
binding.informationTechnicalHeader.headerButtonBack.buttonIcon.setOnClickListener {
(activity as MainActivity).goBack()
popBackStack()
}
}
}
......@@ -6,7 +6,7 @@ import android.view.accessibility.AccessibilityEvent
import androidx.fragment.app.Fragment
import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.databinding.FragmentInformationTermsBinding
import de.rki.coronawarnapp.ui.main.MainActivity
import de.rki.coronawarnapp.util.ui.popBackStack
import de.rki.coronawarnapp.util.ui.viewBindingLazy
/**
......@@ -28,7 +28,7 @@ class InformationTermsFragment : Fragment(R.layout.fragment_information_terms) {
private fun setButtonOnClickListener() {
binding.informationTermsHeader.headerButtonBack.buttonIcon.setOnClickListener {
(activity as MainActivity).goBack()
popBackStack()
}
}
}
......@@ -9,10 +9,10 @@ import androidx.fragment.app.Fragment
import de.rki.coronawarnapp.CoronaWarnApplication
import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.databinding.FragmentInteroperabilityConfigurationBinding
import de.rki.coronawarnapp.ui.main.MainActivity
import de.rki.coronawarnapp.util.ConnectivityHelper
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
......@@ -56,7 +56,7 @@ class InteroperabilityConfigurationFragment :
vm.navigateBack.observe2(this) {
if (it) {
(requireActivity() as MainActivity).goBack()
popBackStack()
}
}
......
......@@ -259,11 +259,4 @@ class MainActivity : AppCompatActivity(), HasAndroidInjector {
data
)
}
/**
* Function is called from back buttons in fragments.
*/
fun goBack() {
onBackPressed()
}
}
......@@ -7,6 +7,7 @@ import android.view.accessibility.AccessibilityEvent
import androidx.fragment.app.Fragment
import androidx.navigation.NavGraph
import androidx.navigation.fragment.findNavController
import androidx.navigation.ui.onNavDestinationSelected
import androidx.recyclerview.widget.DefaultItemAnimator
import androidx.recyclerview.widget.LinearLayoutManager
import de.rki.coronawarnapp.R
......@@ -15,9 +16,10 @@ import de.rki.coronawarnapp.coronatest.type.CoronaTest
import de.rki.coronawarnapp.databinding.HomeFragmentLayoutBinding
import de.rki.coronawarnapp.tracing.ui.TracingExplanationDialog
import de.rki.coronawarnapp.ui.main.home.popups.DeviceTimeIncorrectDialog
import de.rki.coronawarnapp.util.CWADebug
import de.rki.coronawarnapp.util.ContextExtensions.getColorCompat
import de.rki.coronawarnapp.util.DialogHelper
import de.rki.coronawarnapp.util.ExternalActionHelper
import de.rki.coronawarnapp.util.ExternalActionHelper.openUrl
import de.rki.coronawarnapp.util.di.AutoInject
import de.rki.coronawarnapp.util.errors.RecoveryByResetDialogFactory
import de.rki.coronawarnapp.util.lists.decorations.TopBottomPaddingDecorator
......@@ -44,7 +46,6 @@ class HomeFragment : Fragment(R.layout.home_fragment_layout), AutoInject {
val binding: HomeFragmentLayoutBinding by viewBindingLazy()
@Inject lateinit var homeMenu: HomeMenu
@Inject lateinit var tracingExplanationDialog: TracingExplanationDialog
@Inject lateinit var deviceTimeIncorrectDialog: DeviceTimeIncorrectDialog
......@@ -53,7 +54,10 @@ class HomeFragment : Fragment(R.layout.home_fragment_layout), AutoInject {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
homeMenu.setupMenu(binding.toolbar)
with(binding.toolbar) {
menu.findItem(R.id.test_nav_graph).isVisible = CWADebug.isDeviceForTestersBuild
setOnMenuItemClickListener { it.onNavDestinationSelected(findNavController()) }
}
viewModel.tracingHeaderState.observe2(this) {
binding.tracingHeader = it
......@@ -79,11 +83,11 @@ class HomeFragment : Fragment(R.layout.home_fragment_layout), AutoInject {
}
viewModel.openFAQUrlEvent.observe2(this) {
ExternalActionHelper.openUrl(this@HomeFragment, getString(R.string.main_about_link))
openUrl(getString(R.string.main_about_link))
}
viewModel.openIncompatibleEvent.observe2(this) {
ExternalActionHelper.openUrl(this@HomeFragment, getString(R.string.incompatible_link))
openUrl(getString(R.string.incompatible_link))
}
viewModel.openTraceLocationOrganizerFlow.observe2(this) {
......
package de.rki.coronawarnapp.ui.main.home
import android.view.MenuItem.SHOW_AS_ACTION_ALWAYS
import androidx.appcompat.widget.Toolbar
import androidx.navigation.NavController
import androidx.navigation.fragment.findNavController
import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.ui.doNavigate
import de.rki.coronawarnapp.util.CWADebug
import javax.inject.Inject
class HomeMenu @Inject constructor(
private val homeFragment: HomeFragment
) {
private val navController: NavController
get() = homeFragment.findNavController()
fun setupMenu(toolbar: Toolbar) = toolbar.apply {
inflateMenu(R.menu.menu_main)
menu.findItem(R.id.menu_test).isVisible = CWADebug.isDeviceForTestersBuild
menu.findItem(R.id.menu_share).setShowAsAction(SHOW_AS_ACTION_ALWAYS)
setOnMenuItemClickListener {
return@setOnMenuItemClickListener when (it.itemId) {
R.id.menu_share -> {
navController.doNavigate(HomeFragmentDirections.actionMainFragmentToMainSharingFragment())
true
}
R.id.menu_help -> {
navController.doNavigate(HomeFragmentDirections.actionMainFragmentToMainOverviewFragment())
true
}
R.id.menu_information -> {
navController.doNavigate(HomeFragmentDirections.actionMainFragmentToInformationFragment())
true
}
R.id.menu_settings -> {
navController.doNavigate(HomeFragmentDirections.actionMainFragmentToSettingsFragment())
true
}
R.id.menu_test -> {
navController.doNavigate(HomeFragmentDirections.actionMainFragmentToTestNavGraph())
true
}
else -> homeFragment.onOptionsItemSelected(it)
}
}
}
}
......@@ -6,7 +6,7 @@ import android.view.accessibility.AccessibilityEvent
import androidx.fragment.app.Fragment
import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.databinding.FragmentMainOverviewBinding
import de.rki.coronawarnapp.ui.main.MainActivity
import de.rki.coronawarnapp.util.ui.popBackStack
import de.rki.coronawarnapp.util.ui.viewBindingLazy
/**
......@@ -32,7 +32,7 @@ class MainOverviewFragment : Fragment(R.layout.fragment_main_overview) {
private fun setButtonOnClickListener() {
binding.mainOverviewHeader.headerButtonBack.buttonIcon.setOnClickListener {
(activity as MainActivity).goBack()
popBackStack()
}
}
}
......@@ -6,8 +6,8 @@ import android.view.accessibility.AccessibilityEvent
import androidx.fragment.app.Fragment
import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.databinding.FragmentMainShareBinding
import de.rki.coronawarnapp.ui.main.MainActivity
import de.rki.coronawarnapp.util.ExternalActionHelper
import de.rki.coronawarnapp.util.ExternalActionHelper.shareText
import de.rki.coronawarnapp.util.ui.popBackStack
import de.rki.coronawarnapp.util.ui.viewBindingLazy
/**
......@@ -24,10 +24,10 @@ class MainShareFragment : Fragment(R.layout.fragment_main_share) {
private fun setButtonOnClickListener() {
binding.mainShareButton.setOnClickListener {
ExternalActionHelper.shareText(this, getString(R.string.main_share_message), null)
shareText(getString(R.string.main_share_message), null)
}
binding.mainShareHeader.headerButtonBack.buttonIcon.setOnClickListener {
(activity as MainActivity).goBack()
popBackStack()
}
}
......
......@@ -7,7 +7,7 @@ import androidx.annotation.VisibleForTesting
import androidx.fragment.app.Fragment
import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.databinding.FragmentOnboardingBinding
import de.rki.coronawarnapp.util.ExternalActionHelper
import de.rki.coronawarnapp.util.ExternalActionHelper.openUrl
import de.rki.coronawarnapp.util.ui.doNavigate
import de.rki.coronawarnapp.util.ui.viewBindingLazy
import java.util.Locale
......@@ -41,7 +41,7 @@ class OnboardingFragment : Fragment(R.layout.fragment_onboarding) {
}
private fun openEasyLanguageLink() {
ExternalActionHelper.openUrl(this, getString(R.string.onboarding_tracing_easy_language_explanation_url))
openUrl(getString(R.string.onboarding_tracing_easy_language_explanation_url))
}
override fun onResume() {
......
......@@ -151,7 +151,7 @@ class QrCodePosterFragment : Fragment(R.layout.qr_code_poster_fragment), AutoInj
getString(R.string.app_name),
PrintingAdapter(file),
PrintAttributes.Builder()
.setMediaSize(PrintAttributes.MediaSize.ISO_A3)
.setMediaSize(PrintAttributes.MediaSize.ISO_A4)
.build()
)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment