Skip to content

Commit f7d4355

Browse files
committed
[ui] use of android navigation framework
1 parent 2eb9fc7 commit f7d4355

File tree

9 files changed

+95
-21
lines changed

9 files changed

+95
-21
lines changed

app/build.gradle.kts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,17 @@ dependencies {
6363
val koinVersion = "4.0.4"
6464
val roomVersion = "2.6.1"
6565
val workVersion = "2.9.1"
66+
val navigationVersion = "2.8.9"
6667

6768
implementation("androidx.core:core-ktx:1.13.1")
6869
implementation("androidx.appcompat:appcompat:1.7.0")
6970
implementation("com.google.android.material:material:1.12.0")
7071
implementation("androidx.constraintlayout:constraintlayout:2.2.1")
7172
implementation("androidx.preference:preference-ktx:1.2.1")
7273

74+
implementation("androidx.navigation:navigation-fragment-ktx:$navigationVersion")
75+
implementation("androidx.navigation:navigation-ui-ktx:$navigationVersion")
76+
7377
// Coroutines
7478
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion")
7579
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion")
Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package app.callgate.android
22

3-
import androidx.appcompat.app.AppCompatActivity
43
import android.os.Bundle
4+
import androidx.appcompat.app.AppCompatActivity
5+
import androidx.navigation.fragment.NavHostFragment
6+
import androidx.navigation.ui.setupWithNavController
57
import app.callgate.android.databinding.ActivityMainBinding
6-
import app.callgate.android.ui.HomeFragment
78

89
class MainActivity : AppCompatActivity() {
910
private lateinit var binding: ActivityMainBinding
@@ -14,9 +15,10 @@ class MainActivity : AppCompatActivity() {
1415
binding = ActivityMainBinding.inflate(layoutInflater)
1516
setContentView(binding.root)
1617

17-
supportFragmentManager
18-
.beginTransaction()
19-
.replace(R.id.container, HomeFragment())
20-
.commit()
18+
val navHostFragment = supportFragmentManager
19+
.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
20+
val navController = navHostFragment.navController
21+
22+
binding.topAppBar.setupWithNavController(navController)
2123
}
2224
}

app/src/main/java/app/callgate/android/ui/HomeFragment.kt

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@ import androidx.activity.result.contract.ActivityResultContracts
2222
import androidx.core.content.ContextCompat
2323
import androidx.core.text.toSpanned
2424
import androidx.fragment.app.Fragment
25+
import androidx.navigation.fragment.findNavController
2526
import app.callgate.android.R
2627
import app.callgate.android.databinding.FragmentHomeBinding
2728
import app.callgate.android.modules.connection.ConnectionViewModel
2829
import app.callgate.android.modules.orchestrator.OrchestratorService
2930
import app.callgate.android.modules.server.ServerService
3031
import app.callgate.android.modules.server.ServerViewModel
31-
import app.callgate.android.ui.settings.SettingsFragment
3232
import org.koin.android.ext.android.inject
3333
import org.koin.androidx.viewmodel.ext.android.viewModel
3434

@@ -79,11 +79,7 @@ class HomeFragment : Fragment() {
7979
}
8080

8181
binding.actionSettings.setOnClickListener {
82-
parentFragmentManager
83-
.beginTransaction()
84-
.replace(R.id.container, SettingsFragment.newInstance())
85-
.addToBackStack(null)
86-
.commit()
82+
findNavController().navigate(R.id.action_home_to_settings)
8783
}
8884

8985
binding.toggleOnline.setOnClickListener {

app/src/main/java/app/callgate/android/ui/settings/BasePreferenceFragment.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import android.widget.EditText
77
import android.widget.Toast
88
import androidx.preference.PreferenceFragmentCompat
99

10+
1011
abstract class BasePreferenceFragment : PreferenceFragmentCompat() {
1112
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
1213
super.onViewCreated(view, savedInstanceState)
Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package app.callgate.android.ui.settings
22

33
import android.os.Bundle
4+
import androidx.navigation.fragment.findNavController
45
import androidx.preference.Preference
56
import app.callgate.android.BuildConfig
67
import app.callgate.android.R
@@ -10,11 +11,17 @@ class SettingsFragment : BasePreferenceFragment() {
1011
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
1112
setPreferencesFromResource(R.xml.root_preferences, rootKey)
1213

14+
findPreference<Preference>("navigation.server")?.setOnPreferenceClickListener {
15+
findNavController().navigate(R.id.action_settings_to_server_settings)
16+
true
17+
}
18+
19+
findPreference<Preference>("navigation.webhooks")?.setOnPreferenceClickListener {
20+
findNavController().navigate(R.id.action_settings_to_webhooks_settings)
21+
true
22+
}
23+
1324
findPreference<Preference>("transient.app_version")?.summary =
1425
"${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})"
1526
}
16-
17-
companion object {
18-
fun newInstance() = SettingsFragment()
19-
}
2027
}
Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,27 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
2+
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:app="http://schemas.android.com/apk/res-auto"
34
xmlns:tools="http://schemas.android.com/tools"
45
android:layout_width="match_parent"
56
android:layout_height="match_parent"
7+
android:orientation="vertical"
68
tools:context=".MainActivity">
79

8-
<FrameLayout
9-
android:id="@+id/container"
10+
<com.google.android.material.appbar.MaterialToolbar
11+
android:id="@+id/topAppBar"
1012
android:layout_width="match_parent"
11-
android:layout_height="match_parent" />
13+
android:layout_height="?attr/actionBarSize"
14+
android:background="?attr/colorPrimary"
15+
app:menu="@menu/nav_menu"
16+
app:title="@string/app_name"
17+
app:titleCentered="true" />
1218

13-
</FrameLayout>
19+
<androidx.fragment.app.FragmentContainerView
20+
android:id="@+id/nav_host_fragment"
21+
android:name="androidx.navigation.fragment.NavHostFragment"
22+
android:layout_width="match_parent"
23+
android:layout_height="match_parent"
24+
app:defaultNavHost="true"
25+
app:navGraph="@navigation/nav_graph" />
26+
27+
</LinearLayout>

app/src/main/res/menu/nav_menu.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<menu>
3+
4+
</menu>
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:app="http://schemas.android.com/apk/res-auto"
4+
xmlns:tools="http://schemas.android.com/tools"
5+
android:id="@+id/nav_graph"
6+
app:startDestination="@id/homeFragment">
7+
8+
<fragment
9+
android:id="@+id/homeFragment"
10+
android:name="app.callgate.android.ui.HomeFragment"
11+
android:label="Home"
12+
tools:layout="@layout/fragment_home">
13+
14+
<action
15+
android:id="@+id/action_home_to_settings"
16+
app:destination="@id/settingsFragment"
17+
app:enterAnim="@android:anim/fade_in"
18+
app:exitAnim="@android:anim/fade_out" />
19+
</fragment>
20+
21+
<fragment
22+
android:id="@+id/settingsFragment"
23+
android:name="app.callgate.android.ui.settings.SettingsFragment"
24+
android:label="Settings">
25+
26+
<action
27+
android:id="@+id/action_settings_to_server_settings"
28+
app:destination="@id/serverSettingFragment" />
29+
30+
<action
31+
android:id="@+id/action_settings_to_webhooks_settings"
32+
app:destination="@id/webhooksSettingsFragment" />
33+
</fragment>
34+
35+
<fragment
36+
android:id="@+id/serverSettingFragment"
37+
android:name="app.callgate.android.ui.settings.ServerSettingsFragment"
38+
android:label="Server Settings" />
39+
40+
<fragment
41+
android:id="@+id/webhooksSettingsFragment"
42+
android:name="app.callgate.android.ui.settings.WebhooksSettingsFragment"
43+
android:label="Webhooks Settings" />
44+
</navigation>

app/src/main/res/xml/root_preferences.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
22
xmlns:app="http://schemas.android.com/apk/res-auto">
33
<Preference
4+
app:key="navigation.server"
45
android:icon="@drawable/ic_server"
56
app:fragment="app.callgate.android.ui.settings.ServerSettingsFragment"
67
app:summary="@string/port_credentials_etc"
78
app:title="@string/server_dotdotdot" />
89

910
<Preference
11+
app:key="navigation.webhooks"
1012
android:icon="@drawable/ic_webhook"
1113
app:fragment="app.callgate.android.ui.settings.WebhooksSettingsFragment"
1214
app:summary="@string/retries_signing_etc"

0 commit comments

Comments
 (0)