From e3da2717a7c679df389378adb13817c76d571809 Mon Sep 17 00:00:00 2001 From: axelherbstreith <75120552+axelherbstreith@users.noreply.github.com> Date: Thu, 17 Dec 2020 16:25:20 +0100 Subject: [PATCH] Show onboarding screen only once (EXPOSUREAPP-4367) (#1931) * Added sharedPrefs * Enabled dynamic change of inital fragment * sourcecheck clean * inject Diarysettings * Update Navigation flow * Added onboarding reset when resetting the application * clean * Changed package name * Updated imports Co-authored-by: BMItter <berndus@gmx.de> --- .../contactdiary/ui/ContactDiaryActivity.kt | 16 ++++++++++ .../contactdiary/ui/ContactDiarySettings.kt | 29 +++++++++++++++++++ .../ContactDiaryOnboardingFragment.kt | 11 +++++++ .../de/rki/coronawarnapp/util/DataReset.kt | 7 +++-- .../res/layout/contact_diary_activity.xml | 3 +- .../res/values-de/contact_diary_strings.xml | 1 + .../main/res/values/contact_diary_strings.xml | 1 + 7 files changed, 63 insertions(+), 5 deletions(-) create mode 100644 Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/ui/ContactDiarySettings.kt diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/ui/ContactDiaryActivity.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/ui/ContactDiaryActivity.kt index e0a8f63cc..189cdf62a 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/ui/ContactDiaryActivity.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/ui/ContactDiaryActivity.kt @@ -6,6 +6,7 @@ import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager +import androidx.navigation.fragment.NavHostFragment import dagger.android.AndroidInjector import dagger.android.DispatchingAndroidInjector import dagger.android.HasAndroidInjector @@ -23,6 +24,7 @@ class ContactDiaryActivity : AppCompatActivity(), HasAndroidInjector { } } + @Inject lateinit var settings: ContactDiarySettings @Inject lateinit var dispatchingAndroidInjector: DispatchingAndroidInjector<Any> override fun androidInjector(): AndroidInjector<Any> = dispatchingAndroidInjector @@ -33,6 +35,20 @@ class ContactDiaryActivity : AppCompatActivity(), HasAndroidInjector { AppInjector.setup(this) super.onCreate(savedInstanceState) setContentView(R.layout.contact_diary_activity) + + val navHost = supportFragmentManager.findFragmentById(R.id.contact_diary_fragment_container) as NavHostFragment? + val navController = navHost!!.navController + + val navInflater = navController.navInflater + val graph = navInflater.inflate(R.navigation.contact_diary_nav_graph) + + if (settings.isOnboarded.value) { + graph.startDestination = R.id.contactDiaryOverviewFragment + } else { + graph.startDestination = R.id.contactDiaryOnboardingFragment + } + + navController.graph = graph } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/ui/ContactDiarySettings.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/ui/ContactDiarySettings.kt new file mode 100644 index 000000000..730b20bf1 --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/ui/ContactDiarySettings.kt @@ -0,0 +1,29 @@ +package de.rki.coronawarnapp.contactdiary.ui + +import android.content.Context +import de.rki.coronawarnapp.util.di.AppContext +import de.rki.coronawarnapp.util.preferences.clearAndNotify +import de.rki.coronawarnapp.util.preferences.createFlowPreference +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class ContactDiarySettings @Inject constructor( + + @AppContext val context: Context + +) { + + private val prefs by lazy { + context.getSharedPreferences("contact_diary_localdata", Context.MODE_PRIVATE) + } + + val isOnboarded = prefs.createFlowPreference( + key = "contact_diary_onboarded", + defaultValue = false + ) + + fun clear() { + prefs.clearAndNotify() + } +} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/ui/onboarding/ContactDiaryOnboardingFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/ui/onboarding/ContactDiaryOnboardingFragment.kt index 47e022c42..a144e4f56 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/ui/onboarding/ContactDiaryOnboardingFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/ui/onboarding/ContactDiaryOnboardingFragment.kt @@ -5,6 +5,7 @@ import android.view.View import androidx.fragment.app.Fragment import de.rki.coronawarnapp.R import de.rki.coronawarnapp.contactdiary.ui.ContactDiaryActivity +import de.rki.coronawarnapp.contactdiary.ui.ContactDiarySettings import de.rki.coronawarnapp.databinding.ContactDiaryOnboardingFragmentBinding import de.rki.coronawarnapp.util.di.AutoInject import de.rki.coronawarnapp.util.ui.doNavigate @@ -17,6 +18,9 @@ import javax.inject.Inject class ContactDiaryOnboardingFragment : Fragment(R.layout.contact_diary_onboarding_fragment), AutoInject { @Inject lateinit var viewModelFactory: CWAViewModelFactoryProvider.Factory + + @Inject lateinit var settings: ContactDiarySettings + private val vm: ContactDiaryOnboardingFragmentViewModel by cwaViewModels { viewModelFactory } private val binding: ContactDiaryOnboardingFragmentBinding by viewBindingLazy() @@ -52,6 +56,9 @@ class ContactDiaryOnboardingFragment : Fragment(R.layout.contact_diary_onboardin } ContactDiaryOnboardingNavigationEvents.NavigateToOverviewFragment -> { + + onboardingComplete() + doNavigate( ContactDiaryOnboardingFragmentDirections .actionContactDiaryOnboardingFragmentToContactDiaryOverviewFragment() @@ -60,4 +67,8 @@ class ContactDiaryOnboardingFragment : Fragment(R.layout.contact_diary_onboardin } } } + + fun onboardingComplete() { + settings.isOnboarded.update { true } + } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/DataReset.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/DataReset.kt index 8d3a150c7..318368ebf 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/DataReset.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/DataReset.kt @@ -23,6 +23,7 @@ import android.annotation.SuppressLint import android.content.Context import de.rki.coronawarnapp.appconfig.AppConfigProvider import de.rki.coronawarnapp.contactdiary.storage.ContactDiaryDatabase +import de.rki.coronawarnapp.contactdiary.ui.ContactDiarySettings import de.rki.coronawarnapp.diagnosiskeys.download.DownloadDiagnosisKeysSettings import de.rki.coronawarnapp.diagnosiskeys.storage.KeyCacheRepository import de.rki.coronawarnapp.nearby.modules.detectiontracker.ExposureDetectionTracker @@ -30,7 +31,6 @@ import de.rki.coronawarnapp.risk.storage.RiskLevelStorage import de.rki.coronawarnapp.storage.AppDatabase import de.rki.coronawarnapp.storage.LocalData import de.rki.coronawarnapp.storage.SubmissionRepository -import de.rki.coronawarnapp.storage.interoperability.InteroperabilityRepository import de.rki.coronawarnapp.util.di.AppContext import de.rki.coronawarnapp.util.security.SecurityHelper import kotlinx.coroutines.sync.Mutex @@ -47,12 +47,12 @@ class DataReset @Inject constructor( @AppContext private val context: Context, private val keyCacheRepository: KeyCacheRepository, private val appConfigProvider: AppConfigProvider, - private val interoperabilityRepository: InteroperabilityRepository, private val submissionRepository: SubmissionRepository, private val exposureDetectionTracker: ExposureDetectionTracker, private val downloadDiagnosisKeysSettings: DownloadDiagnosisKeysSettings, private val riskLevelStorage: RiskLevelStorage, - private val contactDiaryDatabase: ContactDiaryDatabase + private val contactDiaryDatabase: ContactDiaryDatabase, + private var contactDiarySettings: ContactDiarySettings ) { private val mutex = Mutex() @@ -78,6 +78,7 @@ class DataReset @Inject constructor( exposureDetectionTracker.clear() downloadDiagnosisKeysSettings.clear() riskLevelStorage.clear() + contactDiarySettings.clear() // Clear contact diary database contactDiaryDatabase.clearAllTables() diff --git a/Corona-Warn-App/src/main/res/layout/contact_diary_activity.xml b/Corona-Warn-App/src/main/res/layout/contact_diary_activity.xml index f105f4d50..7d2465983 100644 --- a/Corona-Warn-App/src/main/res/layout/contact_diary_activity.xml +++ b/Corona-Warn-App/src/main/res/layout/contact_diary_activity.xml @@ -11,7 +11,6 @@ android:name="androidx.navigation.fragment.NavHostFragment" android:layout_width="match_parent" android:layout_height="match_parent" - app:defaultNavHost="true" - app:navGraph="@navigation/contact_diary_nav_graph" /> + app:defaultNavHost="true" /> </androidx.coordinatorlayout.widget.CoordinatorLayout> diff --git a/Corona-Warn-App/src/main/res/values-de/contact_diary_strings.xml b/Corona-Warn-App/src/main/res/values-de/contact_diary_strings.xml index 652da189c..29be5afee 100644 --- a/Corona-Warn-App/src/main/res/values-de/contact_diary_strings.xml +++ b/Corona-Warn-App/src/main/res/values-de/contact_diary_strings.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:tools="http://schemas.android.com/tools" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" tools:ignore="MissingTranslation"> + <!-- #################################### Contact Diary ###################################### --> diff --git a/Corona-Warn-App/src/main/res/values/contact_diary_strings.xml b/Corona-Warn-App/src/main/res/values/contact_diary_strings.xml index e64b0e7da..3ada5e70f 100644 --- a/Corona-Warn-App/src/main/res/values/contact_diary_strings.xml +++ b/Corona-Warn-App/src/main/res/values/contact_diary_strings.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:tools="http://schemas.android.com/tools" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" tools:ignore="MissingTranslation"> + <!-- #################################### Contact Diary ###################################### --> -- GitLab