From e88566b241ffd3001022acf247109ad8b8a2ac08 Mon Sep 17 00:00:00 2001 From: Mohamed <mohamed.metwalli@sap.com> Date: Thu, 6 May 2021 11:44:13 +0200 Subject: [PATCH] Navigation enhancements (DEV) (#3047) * Enhance navigation logic * Renaming * lint * Revert onAcivityResult * Update InformationFragment.kt * Remove Home menu * Fix merge conflicts * Lint --- .../survey/consent/SurveyConsentFragment.kt | 4 +- .../ui/details/TracingDetailsFragment.kt | 7 +- .../ui/settings/SettingsTracingFragment.kt | 63 ++++++------- .../information/InformationAboutFragment.kt | 4 +- .../information/InformationContactFragment.kt | 12 ++- .../ui/information/InformationFragment.kt | 8 +- .../information/InformationLegalFragment.kt | 4 +- .../InformationTechnicalFragment.kt | 4 +- .../information/InformationTermsFragment.kt | 4 +- .../InteroperabilityConfigurationFragment.kt | 4 +- .../rki/coronawarnapp/ui/main/MainActivity.kt | 7 -- .../ui/main/home/HomeFragment.kt | 14 +-- .../coronawarnapp/ui/main/home/HomeMenu.kt | 49 ----------- .../ui/main/overview/MainOverviewFragment.kt | 4 +- .../ui/main/share/MainShareFragment.kt | 8 +- .../ui/onboarding/OnboardingFragment.kt | 4 +- .../ui/settings/SettingsResetFragment.kt | 4 +- .../SettingsBackgroundPriorityFragment.kt | 3 +- .../NotificationSettingsFragment.kt | 4 +- .../ui/settings/start/SettingsFragment.kt | 4 +- .../fragment/SubmissionContactFragment.kt | 8 +- .../submission/tan/SubmissionTanFragment.kt | 6 +- .../SubmissionYourConsentFragment.kt | 4 +- .../util/ExternalActionHelper.kt | 88 ++++++------------- .../errors/RecoveryByResetDialogFactory.kt | 4 +- .../main/res/layout/home_fragment_layout.xml | 17 ++-- .../src/main/res/menu/menu_main.xml | 10 +-- .../util/ExternalActionHelperTest.kt | 47 +++++----- 28 files changed, 143 insertions(+), 256 deletions(-) delete mode 100644 Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeMenu.kt 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 2042fb57b..9935ba7d6 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 283bcea25..94891a7dd 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 3c2da3aa5..e6c4f67d8 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 82aed69cd..60ef5d4f7 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 34ca2c6cf..ad4112ba4 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 c18bdc0f6..0f9f90ed9 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 560b64eb7..2bf010437 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 0a98ff88b..fe10de37f 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 5c0046ebe..63c99ca82 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 29b4061f3..28cd0f394 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 4c29cfed0..159a0b9d5 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 bda8566ff..1e3806426 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 4189f6bd9..000000000 --- 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 0a4dce381..4696cb136 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 baf25b71c..0fb6b9eaf 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 38f0c37df..dc080acf5 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 c1af5db43..8cf49a835 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 4edfee1a4..e4ae1166f 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 bd9eac9b2..f5f75de0b 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 93995c103..e2c60ec83 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 1cfcb3edc..7d6e8d04f 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 083d67a66..eaad5f6f9 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 6fbff88ab..6c0ba694a 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 d9b1aa103..acc91f7c4 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 c8804aaad..f94c31280 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 79b703795..234652b85 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 12e95ff6c..494829eb6 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 45c6063ee..2d35e3e1d 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()) } + } } } -- GitLab