• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.android.healthconnect.controller.onboarding
2 
3 import android.app.Activity
4 import android.content.Context
5 import android.content.Intent
6 import android.os.Bundle
7 import android.widget.Button
8 import androidx.fragment.app.FragmentActivity
9 import com.android.healthconnect.controller.R
10 import com.android.healthconnect.controller.utils.logging.HealthConnectLogger
11 import com.android.healthconnect.controller.utils.logging.OnboardingElement
12 import com.android.healthconnect.controller.utils.logging.PageName
13 import com.google.common.annotations.VisibleForTesting
14 import dagger.hilt.android.AndroidEntryPoint
15 import javax.inject.Inject
16 
17 /** Onboarding activity for Health Connect. */
18 @AndroidEntryPoint(FragmentActivity::class)
19 class OnboardingActivity : Hilt_OnboardingActivity() {
20 
21     /** Companion object for OnboardingActivity. */
22     companion object {
23         @VisibleForTesting const val USER_ACTIVITY_TRACKER = "USER_ACTIVITY_TRACKER"
24         @VisibleForTesting const val ONBOARDING_SHOWN_PREF_KEY = "ONBOARDING_SHOWN_PREF_KEY"
25 
maybeRedirectToOnboardingActivitynull26         fun maybeRedirectToOnboardingActivity(
27             activity: Activity,
28             nextActivityIntent: Intent
29         ): Boolean {
30             val sharedPreference =
31                 activity.getSharedPreferences(USER_ACTIVITY_TRACKER, Context.MODE_PRIVATE)
32             val previouslyOpened = sharedPreference.getBoolean(ONBOARDING_SHOWN_PREF_KEY, false)
33             if (!previouslyOpened) {
34                 activity.startActivity(createOnboardingIntent(activity, nextActivityIntent))
35                 activity.finish()
36                 return true
37             }
38             return false
39         }
40 
createOnboardingIntentnull41         private fun createOnboardingIntent(context: Context, nextActivityIntent: Intent): Intent {
42             val onboardingIntent =
43                 Intent(context, OnboardingActivity::class.java).apply {
44                     addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
45                     putExtra(Intent.EXTRA_INTENT, nextActivityIntent)
46                 }
47             return onboardingIntent
48         }
49     }
50 
51     @Inject lateinit var logger: HealthConnectLogger
52 
onCreatenull53     override fun onCreate(savedInstanceState: Bundle?) {
54         super.onCreate(savedInstanceState)
55         setContentView(R.layout.onboarding_screen)
56 
57         logger.setPageId(PageName.ONBOARDING_PAGE)
58 
59         val sharedPreference = getSharedPreferences(USER_ACTIVITY_TRACKER, Context.MODE_PRIVATE)
60         val goBackButton = findViewById<Button>(R.id.go_back_button)
61         val getStartedButton = findViewById<Button>(R.id.get_started_button)
62         logger.logImpression(OnboardingElement.ONBOARDING_GO_BACK_BUTTON)
63         logger.logImpression(OnboardingElement.ONBOARDING_COMPLETED_BUTTON)
64 
65         goBackButton.setOnClickListener {
66             logger.logInteraction(OnboardingElement.ONBOARDING_GO_BACK_BUTTON)
67             finish()
68         }
69         getStartedButton.setOnClickListener {
70             logger.logInteraction(OnboardingElement.ONBOARDING_COMPLETED_BUTTON)
71             val editor = sharedPreference.edit()
72             editor.putBoolean(ONBOARDING_SHOWN_PREF_KEY, true)
73             editor.apply()
74             val nextIntentToOpen: Intent? = getIntentExtra()
75             nextIntentToOpen?.let { startActivity(getIntentExtra()) }
76             finish()
77         }
78     }
79 
getIntentExtranull80     private fun getIntentExtra(): Intent? {
81         return intent.getParcelableExtra(Intent.EXTRA_INTENT, Intent::class.java)
82     }
83 
onResumenull84     override fun onResume() {
85         super.onResume()
86         logger.logPageImpression()
87     }
88 }
89