Skip to content

Commit b11dfe3

Browse files
committed
add conditional navigation
1 parent 83a0830 commit b11dfe3

File tree

10 files changed

+55
-8
lines changed

10 files changed

+55
-8
lines changed

17-fun-facts/README.md

+10-4
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,22 @@
11
# Fun Facts
22

3-
An app that displays fun facts about Android, using FirebaseUI for authentication.
3+
An app that displays fun facts about Android, using FirebaseUI Authentication.
44

5-
<!-- <p align="center">
5+
<p align="center">
66
<img src="screenshot.png" style="width:528px;max-width: 100%;">
7-
</p> -->
7+
</p>
88

99
## Features
1010

1111
- adding Firebase to the project.
1212
- implementing the login feature.
1313
- adding a custom greeting for users who are logged in.
1414
- implementing the logout feature.
15+
- enabling settings screen.
16+
- redirecting the user to the login screen if necessary.
17+
- handling navigation after successful login.
1518

16-
Based on [Advanced Android in Kotlin 06.1: Android Login with FirebaseUI](https://developer.android.com/codelabs/advanced-android-kotlin-training-login#0) by Google Codelabs (2022).
19+
Based on 2 tutorials by Google Codelabs (2022):
20+
21+
- [Android Login with FirebaseUI](https://developer.android.com/codelabs/advanced-android-kotlin-training-login#0)
22+
- [Android Conditional Navigation with Login](https://codelabs.developers.google.com/codelabs/advanced-android-kotlin-training-login-navigation)

17-fun-facts/app/build.gradle

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
apply plugin: 'com.android.application'
1818
apply plugin: 'kotlin-android'
19+
apply plugin: "androidx.navigation.safeargs.kotlin"
1920

2021
android {
2122
compileSdkVersion 29

17-fun-facts/app/src/main/java/com/example/android/firebaseui_login_sample/LoginFragment.kt

+10
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,16 @@ class LoginFragment : Fragment() {
6666
super.onViewCreated(view, savedInstanceState)
6767

6868
navController = findNavController()
69+
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) {
70+
navController.popBackStack(R.id.mainFragment, false)
71+
}
72+
73+
viewModel.authenticationState.observe(viewLifecycleOwner, Observer { authenticationState ->
74+
when (authenticationState) {
75+
LoginViewModel.AuthenticationState.AUTHENTICATED -> navController.popBackStack()
76+
else -> Log.e(TAG, "Authentication state that doesn't require any UI change $authenticationState")
77+
}
78+
})
6979
}
7080

7181
private fun launchSignInFlow() {

17-fun-facts/app/src/main/java/com/example/android/firebaseui_login_sample/MainFragment.kt

+5
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,11 @@ class MainFragment : Fragment() {
6161
observeAuthenticationState()
6262

6363
binding.authButton.setOnClickListener { launchSignInFlow() }
64+
65+
binding.settingsButton.setOnClickListener {
66+
val action = MainFragmentDirections.actionMainFragmentToSettingsFragment()
67+
findNavController().navigate(action)
68+
}
6469
}
6570

6671
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {

17-fun-facts/app/src/main/java/com/example/android/firebaseui_login_sample/SettingsFragment.kt

+8
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,13 @@ class SettingsFragment : PreferenceFragmentCompat() {
3939

4040
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
4141
super.onViewCreated(view, savedInstanceState)
42+
val navController = findNavController()
43+
viewModel.authenticationState.observe(viewLifecycleOwner, Observer { authenticationState ->
44+
when (authenticationState) {
45+
LoginViewModel.AuthenticationState.AUTHENTICATED -> Log.i(TAG, "Authenticated")
46+
LoginViewModel.AuthenticationState.UNAUTHENTICATED -> navController.navigate(R.id.loginFragment)
47+
else -> Log.e(TAG, "New $authenticationState doesn't require any UI change")
48+
}
49+
})
4250
}
4351
}

17-fun-facts/app/src/main/res/layout/fragment_main.xml

+13
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,19 @@
3636
app:layout_constraintTop_toTopOf="parent"
3737
tools:text="@string/login_button_text"/>
3838

39+
<TextView
40+
android:id="@+id/settings_button"
41+
android:layout_width="wrap_content"
42+
android:layout_height="wrap_content"
43+
android:layout_margin="@dimen/text_margin"
44+
android:background="@color/colorAccent"
45+
android:padding="@dimen/text_padding"
46+
android:textColor="@color/white"
47+
android:textSize="@dimen/button_text_size"
48+
app:layout_constraintRight_toRightOf="parent"
49+
app:layout_constraintTop_toTopOf="parent"
50+
android:text="@string/settings_btn"/>
51+
3952
<TextView
4053
android:id="@+id/welcome_text"
4154
android:layout_width="wrap_content"

17-fun-facts/app/src/main/res/navigation/nav_graph.xml

+6-3
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,12 @@
2222
app:startDestination="@id/mainFragment">
2323

2424
<fragment
25-
android:id="@+id/mainFragment"
26-
android:name="com.example.android.firebaseui_login_sample.MainFragment"
27-
android:label="MainFragment">
25+
android:id="@+id/mainFragment"
26+
android:name="com.example.android.firebaseui_login_sample.MainFragment"
27+
android:label="MainFragment">
28+
<action
29+
android:id="@+id/action_mainFragment_to_settingsFragment"
30+
app:destination="@id/settingsFragment"/>
2831
</fragment>
2932
<fragment
3033
android:id="@+id/settingsFragment"

17-fun-facts/build.gradle

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ buildscript {
2626
classpath 'com.android.tools.build:gradle:4.2.0'
2727
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
2828
classpath 'com.google.gms:google-services:4.3.0'
29+
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.0.0"
2930
// NOTE: Do not place your application dependencies here; they belong
3031
// in the individual module build.gradle files
3132
}

17-fun-facts/screenshot.png

167 KB
Loading

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
| 14 | [Star Shower](https://github.com/solygambas/kotlin-projects/tree/main/14-star-shower) | An app to show how to create property animations, using ObjectAnimator. |
2121
| 15 | [Milky Way](https://github.com/solygambas/kotlin-projects/tree/main/15-milky-way) | An app to learn how to finely customize an animation, using MotionLayout. |
2222
| 16 | [Sports App](https://github.com/solygambas/kotlin-projects/tree/main/16-sports-app) | A basic app to introduce to adaptative layouts. |
23-
| 17 | [Fun Facts](https://github.com/solygambas/kotlin-projects/tree/main/17-fun-facts) | An app that displays fun facts about Android, using FirebaseUI for authentication. |
23+
| 17 | [Fun Facts](https://github.com/solygambas/kotlin-projects/tree/main/17-fun-facts) | An app that displays fun facts about Android, using FirebaseUI Authentication. |
2424

2525
These projects are adapted from various sources:
2626

0 commit comments

Comments
 (0)