diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/datadonation/survey/consent/SurveyConsentFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/datadonation/survey/consent/SurveyConsentFragment.kt index 2042fb57bd8372625789e06181417b388d08dea8..9935ba7d6b212466f85504dfe7389aa59618267a 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/datadonation/survey/consent/SurveyConsentFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/datadonation/survey/consent/SurveyConsentFragment.kt @@ -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 -> { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/tracing/ui/details/TracingDetailsFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/tracing/ui/details/TracingDetailsFragment.kt index 283bcea25957d8972633835d4f8225bcbf45c2dc..94891a7dd1ab9f2bbb43d908feab2e1053fee2ba 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/tracing/ui/details/TracingDetailsFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/tracing/ui/details/TracingDetailsFragment.kt @@ -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) } } 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 3c2da3aa538b007d7881ed8f4e521e02460f50af..e6c4f67d8b7e00f2d1c690da682d74cf9ec0b6fa 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 @@ -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() { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationAboutFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationAboutFragment.kt index 82aed69cd82abcdeb1b657b78858ae9b78cff7f3..60ef5d4f7799480fe64e79aa4ec4ab9511261f73 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationAboutFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationAboutFragment.kt @@ -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() } } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationContactFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationContactFragment.kt index 34ca2c6cf8bb9e469804f2fd13cb75209129f210..ad4112ba454d8b4f4c8bdcfc6badf2684ece83a2 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationContactFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationContactFragment.kt @@ -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)) } } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationFragment.kt index c18bdc0f69407b190ab0c8a18fe4d7ed2246c77c..0f9f90ed9879a3fd04452c987e85dd5e13f905ed 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationFragment.kt @@ -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( diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationLegalFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationLegalFragment.kt index 560b64eb7029a5b307952a82fcac44b6d9fce725..2bf01043795a3445000392db1574221f2febc2be 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationLegalFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationLegalFragment.kt @@ -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() } } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationTechnicalFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationTechnicalFragment.kt index 0a98ff88bfbcd7352f9b0d3260b3116e8f069b5d..fe10de37f7a1676275f86ef90b05e54e3dc4f0b6 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationTechnicalFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationTechnicalFragment.kt @@ -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() } } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationTermsFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationTermsFragment.kt index 5c0046ebea1ee3ed37a93482be699babbc0955c9..63c99ca82f865f7f0e0484a0a522e1146e37dbba 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationTermsFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationTermsFragment.kt @@ -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() } } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/interoperability/InteroperabilityConfigurationFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/interoperability/InteroperabilityConfigurationFragment.kt index 29b4061f30531d9941187388a30e020f54a208e7..28cd0f394b7dc29ef1d634efc52b4c55a9b9d254 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/interoperability/InteroperabilityConfigurationFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/interoperability/InteroperabilityConfigurationFragment.kt @@ -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() } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivity.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivity.kt index 4c29cfed00bbd859dca32876331190bfd1ce6723..159a0b9d53c42f3a9e8c41688640d83cc3afa72f 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivity.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivity.kt @@ -259,11 +259,4 @@ class MainActivity : AppCompatActivity(), HasAndroidInjector { data ) } - - /** - * Function is called from back buttons in fragments. - */ - fun goBack() { - onBackPressed() - } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeFragment.kt index bda8566ff07baf6857daa64eafd76c1da555013b..1e380642608d495ef7211d55284c53ebd70c97c0 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeFragment.kt @@ -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) { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeMenu.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeMenu.kt deleted file mode 100644 index 4189f6bd9082e22bf122324b1e4f19159be4b696..0000000000000000000000000000000000000000 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeMenu.kt +++ /dev/null @@ -1,49 +0,0 @@ -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) - } - } - } -} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/overview/MainOverviewFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/overview/MainOverviewFragment.kt index 0a4dce381da1918101babbfd72f70007bb19af3e..4696cb1367faff604b6775589543b6b1d58769e0 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/overview/MainOverviewFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/overview/MainOverviewFragment.kt @@ -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() } } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/share/MainShareFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/share/MainShareFragment.kt index baf25b71c87cb06f8833dfa9417be4304de2d135..0fb6b9eaf491b211acfac1505e5975c3edd6561f 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/share/MainShareFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/share/MainShareFragment.kt @@ -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() } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingFragment.kt index 38f0c37dfd467790e03ca074f4f6f287c57c30a2..dc080acf55a7faf3509763a87fe63f2f02224ada 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingFragment.kt @@ -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() { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsResetFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsResetFragment.kt index c1af5db433504f3806510a07a03b27022575ffdd..8cf49a835c079029b9757ac50f57a0e6c745da50 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsResetFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsResetFragment.kt @@ -7,12 +7,12 @@ import android.view.accessibility.AccessibilityEvent import androidx.fragment.app.Fragment import de.rki.coronawarnapp.R import de.rki.coronawarnapp.databinding.FragmentSettingsResetBinding -import de.rki.coronawarnapp.ui.main.MainActivity import de.rki.coronawarnapp.ui.onboarding.OnboardingActivity import de.rki.coronawarnapp.util.ContextExtensions.getColorCompat import de.rki.coronawarnapp.util.DialogHelper 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 @@ -38,7 +38,7 @@ class SettingsResetFragment : Fragment(R.layout.fragment_settings_reset), AutoIn vm.clickEvent.observe2(this) { when (it) { is SettingsEvents.ResetApp -> confirmReset() - is SettingsEvents.GoBack -> (activity as MainActivity).goBack() + is SettingsEvents.GoBack -> popBackStack() is SettingsEvents.GoToOnboarding -> navigateToOnboarding() } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/backgroundpriority/SettingsBackgroundPriorityFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/backgroundpriority/SettingsBackgroundPriorityFragment.kt index 4edfee1a4a158af5c9032ac4a3fc90680691df13..e4ae1166f822ebd64404d4962920936c232b4d32 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/backgroundpriority/SettingsBackgroundPriorityFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/backgroundpriority/SettingsBackgroundPriorityFragment.kt @@ -10,6 +10,7 @@ import de.rki.coronawarnapp.ui.base.startActivitySafely import de.rki.coronawarnapp.ui.main.MainActivity 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 @@ -60,7 +61,7 @@ class SettingsBackgroundPriorityFragment : Fragment(R.layout.fragment_settings_b // back navigation binding.settingsBackgroundPriorityHeader.headerButtonBack.buttonIcon.setOnClickListener { - (activity as MainActivity).goBack() + 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 bd9eac9b26b758bca23ed18cc867bd19a15fc84b..f5f75de0b1166b3b9144a1702a28cd4252b47fb0 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,7 +6,7 @@ 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.util.ExternalActionHelper +import de.rki.coronawarnapp.util.ExternalActionHelper.openAppNotificationSettings import de.rki.coronawarnapp.util.di.AutoInject import de.rki.coronawarnapp.util.ui.observe2 import de.rki.coronawarnapp.util.ui.popBackStack @@ -53,7 +53,7 @@ class NotificationSettingsFragment : popBackStack() } binding.settingsNotificationsCard.tracingStatusCardButton.setOnClickListener { - ExternalActionHelper.toNotifications(requireContext()) + requireContext().openAppNotificationSettings() } } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/start/SettingsFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/start/SettingsFragment.kt index 93995c1038b075335d493a2b3575fdde83d3806a..e2c60ec83049bbe65c2fd4529019e658ff61badd 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/start/SettingsFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/start/SettingsFragment.kt @@ -8,9 +8,9 @@ import androidx.navigation.fragment.findNavController import de.rki.coronawarnapp.R import de.rki.coronawarnapp.databinding.FragmentSettingsBinding import de.rki.coronawarnapp.ui.doNavigate -import de.rki.coronawarnapp.ui.main.MainActivity 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 @@ -87,7 +87,7 @@ class SettingsFragment : Fragment(R.layout.fragment_settings), AutoInject { } goBack.setOnClickListener { - (activity as MainActivity).goBack() + popBackStack() } } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/fragment/SubmissionContactFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/fragment/SubmissionContactFragment.kt index 1cfcb3edcb2063e3b657184d3ad01764fa00d885..7d6e8d04fd17a57cef8474283fc89e2ef550b1d1 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/fragment/SubmissionContactFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/fragment/SubmissionContactFragment.kt @@ -9,7 +9,7 @@ import de.rki.coronawarnapp.R import de.rki.coronawarnapp.databinding.FragmentSubmissionContactBinding import de.rki.coronawarnapp.ui.submission.viewmodel.SubmissionContactViewModel import de.rki.coronawarnapp.ui.submission.viewmodel.SubmissionNavigationEvents -import de.rki.coronawarnapp.util.ExternalActionHelper +import de.rki.coronawarnapp.util.ExternalActionHelper.callPhone import de.rki.coronawarnapp.util.di.AutoInject import de.rki.coronawarnapp.util.linkifyPhoneNumbers import de.rki.coronawarnapp.util.ui.doNavigate @@ -58,13 +58,11 @@ class SubmissionContactFragment : Fragment(R.layout.fragment_submission_contact) } binding.includeSubmissionContact.submissionContactNavigationRowPhone.navigationRow .setOnClickListener { - val number = getString(R.string.submission_contact_number_display) - ExternalActionHelper.call(this, number) + callPhone(getString(R.string.submission_contact_number_display)) } binding.includeSubmissionContact.submissionContactNavigationRowInternationalPhone.navigationRow .setOnClickListener { - val number = getString(R.string.submission_contact_button_international_phone) - ExternalActionHelper.call(this, number) + callPhone(getString(R.string.submission_contact_button_international_phone)) } binding.submissionContactButtonEnter.setOnClickListener { viewModel.onEnterTanPressed() diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/tan/SubmissionTanFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/tan/SubmissionTanFragment.kt index 083d67a6601505ff81f9c9a7c65b992b8cb8b0f1..eaad5f6f953b567e3e7ffa71353c81a6e9abfe9b 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/tan/SubmissionTanFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/tan/SubmissionTanFragment.kt @@ -11,13 +11,13 @@ import de.rki.coronawarnapp.exception.http.BadRequestException import de.rki.coronawarnapp.exception.http.CwaClientError import de.rki.coronawarnapp.exception.http.CwaServerError import de.rki.coronawarnapp.exception.http.CwaWebException -import de.rki.coronawarnapp.ui.main.MainActivity import de.rki.coronawarnapp.ui.submission.ApiRequestState import de.rki.coronawarnapp.ui.submission.viewmodel.SubmissionNavigationEvents import de.rki.coronawarnapp.util.DialogHelper 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 @@ -102,7 +102,9 @@ class SubmissionTanFragment : Fragment(R.layout.fragment_submission_tan), AutoIn binding.submissionTanRoot.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) } - private fun goBack() = (activity as MainActivity).goBack() + private fun goBack() { + popBackStack() + } private fun buildErrorDialog(exception: CwaWebException): DialogHelper.DialogInstance { return when (exception) { 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 6fbff88ab60419f4f7ff9ddd8ec708d5c73736a6..6c0ba694a688232986ddc22069c15cdcd906d58f 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 @@ -8,10 +8,10 @@ import androidx.navigation.fragment.navArgs import de.rki.coronawarnapp.R import de.rki.coronawarnapp.bugreporting.ui.toErrorDialogBuilder import de.rki.coronawarnapp.databinding.FragmentSubmissionYourConsentBinding -import de.rki.coronawarnapp.ui.main.MainActivity 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.viewBindingLazy import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactoryProvider import de.rki.coronawarnapp.util.viewmodel.cwaViewModelsAssisted @@ -56,7 +56,7 @@ class SubmissionYourConsentFragment : Fragment(R.layout.fragment_submission_your vm.clickEvent.observe2(this) { when (it) { - is SubmissionYourConsentEvents.GoBack -> (activity as MainActivity).goBack() + is SubmissionYourConsentEvents.GoBack -> popBackStack() is SubmissionYourConsentEvents.GoLegal -> doNavigate( SubmissionYourConsentFragmentDirections .actionSubmissionYourConsentFragmentToInformationPrivacyFragment() diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ExternalActionHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ExternalActionHelper.kt index d9b1aa103170b0b6a62bd3fda04f0355f7e3ddb6..acc91f7c4a9131e70a02d8719b1a9bb18967f3e8 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ExternalActionHelper.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ExternalActionHelper.kt @@ -15,18 +15,14 @@ import de.rki.coronawarnapp.exception.reporting.report * */ object ExternalActionHelper { - private val TAG: String? = ExternalActionHelper::class.simpleName - /** * Opens the share default overlay to provide the Corona-Warn-App installation link - * - * @param fragment * @param text * @param title */ - fun shareText(fragment: Fragment, text: String, title: String?) { + fun Fragment.shareText(text: String, title: String?) { try { - fragment.startActivity( + startActivity( Intent.createChooser( Intent().apply { action = Intent.ACTION_SEND @@ -47,17 +43,12 @@ object ExternalActionHelper { /** * Opens the client default phone app and inserts a given number - * - * @param fragment - * @param uri + * @param phoneNumber */ - fun call(fragment: Fragment, uri: String) { + fun Fragment.callPhone(phoneNumber: String) { try { - fragment.startActivity( - Intent( - Intent.ACTION_DIAL, - Uri.parse("tel:$uri") - ) + startActivity( + Intent(Intent.ACTION_DIAL, Uri.parse("tel:$phoneNumber")) ) } catch (exception: Exception) { // catch generic exception on call @@ -70,17 +61,12 @@ object ExternalActionHelper { /** * Opens a given url in the client default browser - * - * @param fragment * @param url */ - fun openUrl(fragment: Fragment, url: String) { + fun Fragment.openUrl(url: String) { try { - fragment.startActivity( - Intent( - Intent.ACTION_VIEW, - Uri.parse(url) - ) + startActivity( + Intent(Intent.ACTION_VIEW, Uri.parse(url)) ) } catch (exception: Exception) { // catch generic exception on url navigation @@ -92,47 +78,25 @@ object ExternalActionHelper { } } - /** - * Navigate the user to the os connection settings. - * - * @param context - */ - fun toConnections(context: Context) { - try { - val intent = Intent(Settings.ACTION_WIRELESS_SETTINGS) - context.startActivity(intent) - } catch (exception: Exception) { - // catch generic exception on settings navigation - // most likely due to device / rom specific intent issue - ExternalActionException(exception).report( - ExceptionCategory.UI - ) - } - } - /** * Navigate the user to the os notification settings. - * - * @param context */ - fun toNotifications(context: Context) { + fun Context.openAppNotificationSettings() { try { - val intent = Intent() - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - intent.action = Settings.ACTION_APP_NOTIFICATION_SETTINGS - intent.putExtra( - Settings.EXTRA_APP_PACKAGE, - context.packageName - ) - } else { - intent.action = "android.settings.APP_NOTIFICATION_SETTINGS" - intent.putExtra( - "app_package", - context.packageName - ) - intent.putExtra("app_uid", context.applicationInfo.uid) + val intent = Intent().apply { + when { + Build.VERSION.SDK_INT >= Build.VERSION_CODES.O -> { + action = Settings.ACTION_APP_NOTIFICATION_SETTINGS + putExtra(Settings.EXTRA_APP_PACKAGE, packageName) + } + else -> { + action = "android.settings.APP_NOTIFICATION_SETTINGS" + putExtra("app_package", packageName) + putExtra("app_uid", applicationInfo.uid) + } + } } - context.startActivity(intent) + startActivity(intent) } catch (exception: Exception) { // catch generic exception on settings navigation // most likely due to device / rom specific intent issue @@ -145,13 +109,11 @@ object ExternalActionHelper { /** * Navigate the user to the os settings as navigation to * bluetooth settings directly is not reliable for all devices - * - * @param context */ - fun toMainSettings(context: Context) { + fun Fragment.openDeviceSettings() { try { val intent = Intent(Settings.ACTION_SETTINGS) - context.startActivity(intent) + startActivity(intent) } catch (exception: Exception) { // catch generic exception on settings navigation // most likely due to device / rom specific intent issue diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/errors/RecoveryByResetDialogFactory.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/errors/RecoveryByResetDialogFactory.kt index c8804aaad1d50729150f7a593bea8d8c80356665..f94c3128088bbd190a0f51c516243bc359fee925 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/errors/RecoveryByResetDialogFactory.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/errors/RecoveryByResetDialogFactory.kt @@ -5,7 +5,7 @@ import androidx.annotation.StringRes import androidx.appcompat.app.AlertDialog import androidx.fragment.app.Fragment import de.rki.coronawarnapp.R -import de.rki.coronawarnapp.util.ExternalActionHelper +import de.rki.coronawarnapp.util.ExternalActionHelper.openUrl class RecoveryByResetDialogFactory(private val fragment: Fragment) { @@ -27,7 +27,7 @@ class RecoveryByResetDialogFactory(private val fragment: Fragment) { .create() dialog.show() dialog.getButton(AlertDialog.BUTTON_NEUTRAL)?.setOnClickListener { - ExternalActionHelper.openUrl(fragment, context.getString(detailsLink)) + fragment.openUrl(context.getString(detailsLink)) } } } diff --git a/Corona-Warn-App/src/main/res/layout/home_fragment_layout.xml b/Corona-Warn-App/src/main/res/layout/home_fragment_layout.xml index 79b703795f468257a51a13d58ebfecdfef24be0e..234652b8581199bbada6bf74cdf7babd56186181 100644 --- a/Corona-Warn-App/src/main/res/layout/home_fragment_layout.xml +++ b/Corona-Warn-App/src/main/res/layout/home_fragment_layout.xml @@ -20,9 +20,10 @@ <com.google.android.material.appbar.MaterialToolbar android:id="@+id/toolbar" + style="@style/CWAToolbar" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/CWAToolbar" + app:menu="@menu/menu_main" app:popupTheme="@style/CWAToolbar.Menu"> <ImageView android:id="@+id/main_header_logo" @@ -42,16 +43,16 @@ <com.google.android.material.appbar.AppBarLayout android:layout_width="match_parent" - android:theme="@style/CWAToolbar" - android:layout_height="wrap_content"> + android:layout_height="wrap_content" + android:theme="@style/CWAToolbar"> - <Toolbar + <com.google.android.material.appbar.MaterialToolbar + android:id="@+id/main_tracing" + style="@style/CWAToolbar" android:layout_width="match_parent" android:layout_height="wrap_content" - android:elevation="8dp" - style="@style/CWAToolbar" - android:id="@+id/main_tracing" android:clickable="true" + android:elevation="8dp" android:focusable="true" android:foreground="?selectableItemBackground" app:layout_scrollFlags="scroll|snap|enterAlways"> @@ -78,7 +79,7 @@ app:animation="@{tracingHeader.getTracingAnimation(context)}" app:animation_tint="@{tracingHeader.getTracingTint(context)}" /> - </Toolbar> + </com.google.android.material.appbar.MaterialToolbar> </com.google.android.material.appbar.AppBarLayout> diff --git a/Corona-Warn-App/src/main/res/menu/menu_main.xml b/Corona-Warn-App/src/main/res/menu/menu_main.xml index 12e95ff6cc53a47de62326631e25d872e2671d0a..494829eb627f3989af88fe4ba0aed3dc4490cf55 100644 --- a/Corona-Warn-App/src/main/res/menu/menu_main.xml +++ b/Corona-Warn-App/src/main/res/menu/menu_main.xml @@ -4,7 +4,7 @@ tools:context=".MainActivity"> <item - android:id="@+id/menu_share" + android:id="@+id/mainSharingFragment" android:contentDescription="@string/button_share" android:icon="@drawable/ic_main_share" android:title="@string/button_share" @@ -12,16 +12,16 @@ app:showAsAction="always" /> <item - android:id="@+id/menu_help" + android:id="@+id/mainOverviewFragment" android:title="@string/menu_help" /> <item - android:id="@+id/menu_information" + android:id="@+id/informationFragment" android:title="@string/menu_information" /> <item - android:id="@+id/menu_settings" + android:id="@+id/settingsFragment" android:title="@string/menu_settings" /> <item - android:id="@+id/menu_test" + android:id="@+id/test_nav_graph" android:title="Test Menu" android:visible="false" tools:ignore="HardcodedText" /> diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/ExternalActionHelperTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/ExternalActionHelperTest.kt index 45c6063ee6fb5b7482bca133cc421971c854083b..2d35e3e1d05299469413643e044c4ce7a0699fcd 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/ExternalActionHelperTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/ExternalActionHelperTest.kt @@ -4,6 +4,10 @@ import android.content.Context import android.content.pm.ApplicationInfo import androidx.fragment.app.Fragment import de.rki.coronawarnapp.CoronaWarnApplication +import de.rki.coronawarnapp.util.ExternalActionHelper.callPhone +import de.rki.coronawarnapp.util.ExternalActionHelper.openAppNotificationSettings +import de.rki.coronawarnapp.util.ExternalActionHelper.openUrl +import de.rki.coronawarnapp.util.ExternalActionHelper.shareText import io.mockk.MockKAnnotations import io.mockk.Runs import io.mockk.every @@ -30,51 +34,40 @@ class ExternalActionHelperTest : BaseTest() { mockkObject(CoronaWarnApplication) } - @Test - fun toConnectionsTest() { - every { context.startActivity(any()) } just Runs - ExternalActionHelper.toConnections(context = context) - verify(exactly = 1) { context.startActivity(any()) } - } - @Test fun toNotificationsTest() { every { context.startActivity(any()) } just Runs every { context.packageName } returns "package_name" every { context.applicationInfo } returns applicationInfo - ExternalActionHelper.toNotifications(context = context) - verify(exactly = 1) { context.startActivity(any()) } - } - - @Test - fun toMainSettingsTest() { - every { context.startActivity(any()) } just Runs - ExternalActionHelper.toConnections(context = context) + context.openAppNotificationSettings() verify(exactly = 1) { context.startActivity(any()) } } @Test fun openUrlTest() { - val fragment = mockk<Fragment>() - every { fragment.startActivity(any()) } just Runs - ExternalActionHelper.openUrl(fragment = fragment, url = "url_path") - verify(exactly = 1) { fragment.startActivity(any()) } + mockk<Fragment>().apply { + every { startActivity(any()) } just Runs + openUrl(url = "url_path") + verify(exactly = 1) { startActivity(any()) } + } } @Test fun callTest() { - val fragment = mockk<Fragment>() - every { fragment.startActivity(any()) } just Runs - ExternalActionHelper.call(fragment = fragment, uri = "call_path") - verify(exactly = 1) { fragment.startActivity(any()) } + mockk<Fragment>().apply { + every { startActivity(any()) } just Runs + callPhone(phoneNumber = "01234343535") + verify(exactly = 1) { startActivity(any()) } + } } @Test fun shareTextTest() { - val fragment = mockk<Fragment>() - every { fragment.startActivity(any()) } just Runs - ExternalActionHelper.shareText(fragment = fragment, text = "text", title = "title") - verify(exactly = 1) { fragment.startActivity(any()) } + mockk<Fragment>().apply { + every { startActivity(any()) } just Runs + shareText(text = "text", title = "title") + verify(exactly = 1) { startActivity(any()) } + } } }