diff --git a/Android.bp b/Android.bp index d34aaacad33..3055863d500 100644 --- a/Android.bp +++ b/Android.bp @@ -71,6 +71,8 @@ android_library { "androidx.cardview_cardview", "androidx.compose.runtime_runtime-livedata", "androidx.activity_activity-ktx", + "androidx.navigation_navigation-fragment-ktx", + "androidx.navigation_navigation-ui-ktx", "androidx.preference_preference", "androidx.recyclerview_recyclerview", "androidx.window_window", diff --git a/AndroidManifest.xml b/AndroidManifest.xml index cca450a4df5..06d5800157e 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -2610,6 +2610,18 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/res/navigation/remote_auth_navigation.xml b/res/navigation/remote_auth_navigation.xml new file mode 100644 index 00000000000..356a57f269f --- /dev/null +++ b/res/navigation/remote_auth_navigation.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml index a1c2d2925e8..0a3ee242abe 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -887,6 +887,10 @@ Face, fingerprints, and %s added + + Remote Authenticator Unlock + + Watch added Set up your watch diff --git a/res/xml/security_settings_combined_biometric.xml b/res/xml/security_settings_combined_biometric.xml index 504177843b0..7d01472e204 100644 --- a/res/xml/security_settings_combined_biometric.xml +++ b/res/xml/security_settings_combined_biometric.xml @@ -47,6 +47,13 @@ android:summary="@string/summary_placeholder" settings:keywords="@string/keywords_active_unlock_settings" settings:controller="com.android.settings.biometrics.activeunlock.ActiveUnlockStatusPreferenceController" /> + + (R.id.enrolling_list_progress_bar) @@ -94,7 +97,7 @@ class RemoteAuthEnrollEnrolling : } private fun onSecondaryFooterButtonClick(view: View) { - // TODO(b/293906345): Wire up navigation + navController.navigateUp() } private fun updateUi(uiState: RemoteAuthEnrollEnrollingUiState) { @@ -113,7 +116,7 @@ class RemoteAuthEnrollEnrolling : EnrollmentUiState.ENROLLING -> {} EnrollmentUiState.SUCCESS -> { - // TODO(b/293906345): Wire up navigation + navController.navigate(R.id.action_enrolling_to_finish) } } if (uiState.errorMsg != null) { diff --git a/src/com/android/settings/remoteauth/finish/RemoteAuthEnrollFinish.kt b/src/com/android/settings/remoteauth/finish/RemoteAuthEnrollFinish.kt index 98df572c808..ac9648486ed 100644 --- a/src/com/android/settings/remoteauth/finish/RemoteAuthEnrollFinish.kt +++ b/src/com/android/settings/remoteauth/finish/RemoteAuthEnrollFinish.kt @@ -18,6 +18,7 @@ package com.android.settings.remoteauth.finish import android.os.Bundle import android.view.View +import androidx.navigation.fragment.NavHostFragment.Companion.findNavController import com.airbnb.lottie.LottieAnimationView import com.android.settings.R import com.android.settings.remoteauth.RemoteAuthEnrollBase @@ -35,7 +36,10 @@ class RemoteAuthEnrollFinish : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - LottieColorUtils.applyDynamicColors(requireContext(), view.findViewById(R.id.enroll_finish_animation)) + LottieColorUtils.applyDynamicColors( + requireContext(), + view.findViewById(R.id.enroll_finish_animation) + ) } override fun initializePrimaryFooterButton(): FooterButton { @@ -50,10 +54,10 @@ class RemoteAuthEnrollFinish : override fun initializeSecondaryFooterButton(): FooterButton? = null fun onPrimaryFooterButtonClick(view: View) { - // TODO(b/293906345): Wire up navigation + findNavController(this).navigate(R.id.action_finish_to_settings) } - private companion object{ + private companion object { const val TAG = "RemoteAuthEnrollFinish" } } \ No newline at end of file diff --git a/src/com/android/settings/remoteauth/introduction/RemoteAuthEnrollIntroduction.kt b/src/com/android/settings/remoteauth/introduction/RemoteAuthEnrollIntroduction.kt index 268d5f3924a..b0d3f79428f 100644 --- a/src/com/android/settings/remoteauth/introduction/RemoteAuthEnrollIntroduction.kt +++ b/src/com/android/settings/remoteauth/introduction/RemoteAuthEnrollIntroduction.kt @@ -20,6 +20,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.navigation.fragment.NavHostFragment.Companion.findNavController import com.android.settings.R import com.android.settings.remoteauth.RemoteAuthEnrollBase import com.google.android.setupcompat.template.FooterButton @@ -33,6 +34,7 @@ class RemoteAuthEnrollIntroduction : layoutResId = R.layout.remote_auth_enroll_introduction, glifLayoutId = R.id.setup_wizard_layout, ) { + private val navController by lazy { findNavController(this) } override fun onCreateView( inflater: LayoutInflater, @@ -44,7 +46,7 @@ class RemoteAuthEnrollIntroduction : } - override fun initializePrimaryFooterButton() : FooterButton { + override fun initializePrimaryFooterButton(): FooterButton { return FooterButton.Builder(context!!) .setText(R.string.security_settings_remoteauth_enroll_introduction_agree) .setListener(::onPrimaryFooterButtonClick) @@ -53,7 +55,7 @@ class RemoteAuthEnrollIntroduction : .build() } - override fun initializeSecondaryFooterButton() : FooterButton { + override fun initializeSecondaryFooterButton(): FooterButton { return FooterButton.Builder(context!!) .setText(R.string.security_settings_remoteauth_enroll_introduction_disagree) .setListener(::onSecondaryFooterButtonClick) @@ -63,24 +65,34 @@ class RemoteAuthEnrollIntroduction : } private fun onPrimaryFooterButtonClick(view: View) { - // TODO(b/293906345): Wire up navigation + navController.navigate(R.id.action_introduction_to_enrolling) } private fun onSecondaryFooterButtonClick(view: View) { - // TODO(b/293906345): Wire up navigation + navController.navigateUp() } private fun initializeRequireScrollMixin(view: View) { val layout = checkNotNull(getGlifLayout(view)) secondaryFooterButton?.visibility = View.INVISIBLE val requireScrollMixin = layout.getMixin(RequireScrollMixin::class.java) - requireScrollMixin.requireScrollWithButton(requireContext(), primaryFooterButton, - R.string.security_settings_remoteauth_enroll_introduction_more, ::onPrimaryFooterButtonClick) + requireScrollMixin.requireScrollWithButton( + requireContext(), + primaryFooterButton, + R.string.security_settings_remoteauth_enroll_introduction_more, + ::onPrimaryFooterButtonClick + ) requireScrollMixin.setOnRequireScrollStateChangedListener { scrollNeeded -> if (scrollNeeded) { - primaryFooterButton.setText(requireContext(), R.string.security_settings_remoteauth_enroll_introduction_more) + primaryFooterButton.setText( + requireContext(), + R.string.security_settings_remoteauth_enroll_introduction_more + ) } else { - primaryFooterButton.setText(requireContext(), R.string.security_settings_remoteauth_enroll_introduction_agree) + primaryFooterButton.setText( + requireContext(), + R.string.security_settings_remoteauth_enroll_introduction_agree + ) secondaryFooterButton?.visibility = View.VISIBLE } } diff --git a/src/com/android/settings/remoteauth/settings/RemoteAuthSettings.kt b/src/com/android/settings/remoteauth/settings/RemoteAuthSettings.kt index 93711bf554f..9cf2511b08a 100644 --- a/src/com/android/settings/remoteauth/settings/RemoteAuthSettings.kt +++ b/src/com/android/settings/remoteauth/settings/RemoteAuthSettings.kt @@ -20,9 +20,11 @@ import android.os.Bundle import android.view.View import androidx.constraintlayout.widget.ConstraintLayout import androidx.fragment.app.Fragment +import androidx.fragment.app.viewModels import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle +import androidx.navigation.fragment.NavHostFragment.Companion.findNavController import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.android.settings.R @@ -30,8 +32,7 @@ import kotlinx.coroutines.launch class RemoteAuthSettings : Fragment(R.layout.remote_auth_settings) { - // TODO(b/293906345): Scope viewModel to navigation graph when implementing navigation. - val viewModel = RemoteAuthSettingsViewModel() + val viewModel: RemoteAuthSettingsViewModel by viewModels() private val adapter = RemoteAuthSettingsRecyclerViewAdapter() private val recyclerView by lazy { view!!.requireViewById(R.id.registered_authenticator_list) @@ -47,6 +48,11 @@ class RemoteAuthSettings : Fragment(R.layout.remote_auth_settings) { recyclerView.layoutManager = LinearLayoutManager(context) recyclerView.adapter = adapter + // Add new remote authenticator click listener + addAuthenticatorLayout.setOnClickListener { + findNavController(this).navigate(R.id.action_settings_to_introduction) + } + // Collect UIState and update UI on changes. lifecycleScope.launch { repeatOnLifecycle(Lifecycle.State.STARTED) { @@ -55,10 +61,7 @@ class RemoteAuthSettings : Fragment(R.layout.remote_auth_settings) { } } } - // Add new remote authenticator click listener - addAuthenticatorLayout.setOnClickListener { - // TODO(b/293906345): Wire up navigation - } + } private fun updateUi(uiState: RemoteAuthSettingsUiState) {