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