Skip to content

Commit e3a61ee

Browse files
refactor navigation
1 parent 1ac2445 commit e3a61ee

22 files changed

+402
-343
lines changed

app/build.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#Build Properties
2-
#Mon Jul 07 15:00:54 EDT 2025
3-
version_build=8
2+
#Mon Jul 07 15:15:00 EDT 2025
3+
version_build=9
44
version_major=3
55
version_minor=2
66
version_patch=1

app/src/main/kotlin/com/vrem/wifianalyzer/MainActivity.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ import androidx.drawerlayout.widget.DrawerLayout
3232
import com.google.android.material.navigation.NavigationView
3333
import com.vrem.annotation.OpenClass
3434
import com.vrem.util.createContext
35-
import com.vrem.util.findOne
3635
import com.vrem.wifianalyzer.navigation.NavigationMenu
3736
import com.vrem.wifianalyzer.navigation.NavigationMenuControl
3837
import com.vrem.wifianalyzer.navigation.NavigationMenuController
@@ -128,8 +127,8 @@ class MainActivity : AppCompatActivity(), NavigationMenuControl, OnSharedPrefere
128127

129128
override fun onNavigationItemSelected(menuItem: MenuItem): Boolean {
130129
closeDrawer()
131-
val currentNavigationMenu = findOne(NavigationMenu.entries, menuItem.itemId, NavigationMenu.ACCESS_POINTS)
132-
currentNavigationMenu.activateNavigationMenu(this, menuItem)
130+
val currentNavigationMenu = NavigationMenu.find(menuItem.itemId)
131+
currentNavigationMenu.activateNavigationMenu(this)
133132
return true
134133
}
135134

@@ -207,7 +206,7 @@ class MainActivity : AppCompatActivity(), NavigationMenuControl, OnSharedPrefere
207206
MainContext.INSTANCE.settings.saveSelectedMenu(navigationMenu)
208207
}
209208

210-
override fun navigationView(): NavigationView = navigationMenuController.navigationView
209+
override fun navigationView(): NavigationView = navigationMenuController.drawerNavigationView
211210

212211
fun mainConnectionVisibility(visibility: Int) {
213212
findViewById<View>(R.id.main_connection).visibility = visibility

app/src/main/kotlin/com/vrem/wifianalyzer/navigation/NavigationGroup.kt

Lines changed: 0 additions & 64 deletions
This file was deleted.

app/src/main/kotlin/com/vrem/wifianalyzer/navigation/NavigationMenu.kt

Lines changed: 71 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,35 +17,92 @@
1717
*/
1818
package com.vrem.wifianalyzer.navigation
1919

20-
import android.view.MenuItem
2120
import com.vrem.wifianalyzer.MainActivity
2221
import com.vrem.wifianalyzer.R
2322
import com.vrem.wifianalyzer.navigation.availability.*
2423
import com.vrem.wifianalyzer.navigation.items.*
2524

25+
val MAIN_NAVIGATION = listOf(NavigationMenu.ACCESS_POINTS, NavigationMenu.CHANNEL_RATING, NavigationMenu.CHANNEL_GRAPH, NavigationMenu.TIME_GRAPH)
26+
27+
private const val MENU_ITEM_INVALID_ID = -1
28+
2629
enum class NavigationMenu(
27-
val icon: Int,
30+
val idDrawer: Int,
31+
val idBottom: Int,
2832
val title: Int,
2933
val navigationItem: NavigationItem,
3034
val navigationOptions: List<NavigationOption> = navigationOptionOff
3135
) {
32-
ACCESS_POINTS(R.drawable.ic_network_wifi, R.string.action_access_points, navigationItemAccessPoints, navigationOptionAp),
33-
CHANNEL_RATING(R.drawable.ic_wifi_tethering, R.string.action_channel_rating, navigationItemChannelRating, navigationOptionRating),
34-
CHANNEL_GRAPH(R.drawable.ic_insert_chart, R.string.action_channel_graph, navigationItemChannelGraph, navigationOptionOther),
35-
TIME_GRAPH(R.drawable.ic_show_chart, R.string.action_time_graph, navigationItemTimeGraph, navigationOptionOther),
36-
EXPORT(R.drawable.ic_import_export, R.string.action_export, navigationItemExport),
37-
CHANNEL_AVAILABLE(R.drawable.ic_location_on, R.string.action_channel_available, navigationItemChannelAvailable),
38-
VENDORS(R.drawable.ic_list, R.string.action_vendors, navigationItemVendors),
39-
SETTINGS(R.drawable.ic_settings, R.string.action_settings, navigationItemSettings),
40-
ABOUT(R.drawable.ic_info_outline, R.string.action_about, navigationItemAbout);
41-
42-
fun activateNavigationMenu(mainActivity: MainActivity, menuItem: MenuItem): Unit =
43-
navigationItem.activate(mainActivity, menuItem, this)
36+
ACCESS_POINTS(
37+
R.id.nav_drawer_access_points,
38+
R.id.nav_bottom_access_points,
39+
R.string.action_access_points,
40+
navigationItemAccessPoints,
41+
navigationOptionAp
42+
),
43+
CHANNEL_RATING(
44+
R.id.nav_drawer_channel_rating,
45+
R.id.nav_bottom_channel_rating,
46+
R.string.action_channel_rating,
47+
navigationItemChannelRating,
48+
navigationOptionRating
49+
),
50+
CHANNEL_GRAPH(
51+
R.id.nav_drawer_channel_graph,
52+
R.id.nav_bottom_channel_graph,
53+
R.string.action_channel_graph,
54+
navigationItemChannelGraph,
55+
navigationOptionOther
56+
),
57+
TIME_GRAPH(
58+
R.id.nav_drawer_time_graph,
59+
R.id.nav_bottom_time_graph,
60+
R.string.action_time_graph,
61+
navigationItemTimeGraph,
62+
navigationOptionOther
63+
),
64+
EXPORT(
65+
R.id.nav_drawer_export,
66+
MENU_ITEM_INVALID_ID,
67+
title = R.string.action_export,
68+
navigationItem = navigationItemExport
69+
),
70+
CHANNEL_AVAILABLE(
71+
R.id.nav_drawer_channel_available,
72+
MENU_ITEM_INVALID_ID,
73+
title = R.string.action_channel_available,
74+
navigationItem = navigationItemChannelAvailable
75+
),
76+
VENDORS(
77+
R.id.nav_drawer_vendors,
78+
MENU_ITEM_INVALID_ID,
79+
title = R.string.action_vendors,
80+
navigationItem = navigationItemVendors
81+
),
82+
SETTINGS(
83+
R.id.nav_drawer_settings,
84+
MENU_ITEM_INVALID_ID,
85+
title = R.string.action_settings,
86+
navigationItem = navigationItemSettings
87+
),
88+
ABOUT(
89+
R.id.nav_drawer_about,
90+
MENU_ITEM_INVALID_ID,
91+
title = R.string.action_about,
92+
navigationItem = navigationItemAbout
93+
);
94+
95+
fun activateNavigationMenu(mainActivity: MainActivity): Unit =
96+
navigationItem.activate(mainActivity, this)
4497

4598
fun activateOptions(mainActivity: MainActivity): Unit = navigationOptions.forEach { it(mainActivity) }
4699

47100
fun wiFiBandSwitchable(): Boolean = navigationOptions.contains(navigationOptionWiFiSwitchOn)
48101

49102
fun registered(): Boolean = navigationItem.registered
50103

104+
companion object {
105+
fun find(id: Int): NavigationMenu =
106+
entries.firstOrNull { it.idDrawer == id || (it.idBottom != MENU_ITEM_INVALID_ID && it.idBottom == id) } ?: ACCESS_POINTS
107+
}
51108
}

app/src/main/kotlin/com/vrem/wifianalyzer/navigation/NavigationMenuController.kt

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ package com.vrem.wifianalyzer.navigation
1919

2020
import android.view.Menu
2121
import android.view.MenuItem
22+
import androidx.core.view.forEach
2223
import androidx.core.view.get
23-
import androidx.core.view.size
2424
import com.google.android.material.bottomnavigation.BottomNavigationView
2525
import com.google.android.material.navigation.NavigationView
2626
import com.vrem.annotation.OpenClass
@@ -29,38 +29,31 @@ import com.vrem.wifianalyzer.R
2929
@OpenClass
3030
class NavigationMenuController(
3131
navigationMenuControl: NavigationMenuControl,
32-
val navigationView: NavigationView = navigationMenuControl.findViewById(R.id.nav_drawer),
32+
val drawerNavigationView: NavigationView = navigationMenuControl.findViewById(R.id.nav_drawer),
3333
val bottomNavigationView: BottomNavigationView = navigationMenuControl.findViewById(R.id.nav_bottom)
3434
) {
3535

3636
private lateinit var currentNavigationMenu: NavigationMenu
3737

38-
fun currentMenuItem(): MenuItem = navigationView.menu[currentNavigationMenu.ordinal]
38+
fun currentMenuItem(): MenuItem = drawerNavigationView.menu[currentNavigationMenu.ordinal]
3939

4040
fun currentNavigationMenu(): NavigationMenu = currentNavigationMenu
4141

4242
fun currentNavigationMenu(navigationMenu: NavigationMenu) {
4343
currentNavigationMenu = navigationMenu
44-
selectCurrentMenuItem(navigationMenu, navigationView.menu)
45-
selectCurrentMenuItem(navigationMenu, bottomNavigationView.menu)
44+
setChecked(drawerNavigationView.menu,navigationMenu.idDrawer)
45+
setChecked(bottomNavigationView.menu,navigationMenu.idBottom)
4646
}
4747

48-
private fun selectCurrentMenuItem(navigationMenu: NavigationMenu, menu: Menu) {
49-
for (i in 0 until menu.size) {
50-
val menuItem: MenuItem = menu[i]
51-
menuItem.isCheckable = false
52-
menuItem.isChecked = false
53-
}
54-
menu.findItem(navigationMenu.ordinal)?.let {
55-
it.isCheckable = true
56-
it.isChecked = true
48+
private fun setChecked(menu: Menu, id: Int) {
49+
if (id != -1) {
50+
menu.forEach { it.isChecked = false }
51+
menu.findItem(id)?.isChecked = true
5752
}
5853
}
5954

6055
init {
61-
NavigationGroup.entries.forEach { it.populateMenuItems(navigationView.menu) }
62-
navigationView.setNavigationItemSelectedListener(navigationMenuControl)
63-
NavigationGroup.GROUP_FEATURE.populateMenuItems(bottomNavigationView.menu)
56+
drawerNavigationView.setNavigationItemSelectedListener(navigationMenuControl)
6457
bottomNavigationView.setOnItemSelectedListener(navigationMenuControl)
6558
}
6659
}

app/src/main/kotlin/com/vrem/wifianalyzer/navigation/items/ExportItem.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ package com.vrem.wifianalyzer.navigation.items
1919

2020
import android.content.ActivityNotFoundException
2121
import android.content.Intent
22-
import android.view.MenuItem
2322
import android.widget.Toast
2423
import com.vrem.wifianalyzer.MainActivity
2524
import com.vrem.wifianalyzer.MainContext
@@ -30,7 +29,7 @@ import com.vrem.wifianalyzer.wifi.model.WiFiDetail
3029

3130
internal class ExportItem(private val export: Export) : NavigationItem {
3231

33-
override fun activate(mainActivity: MainActivity, menuItem: MenuItem, navigationMenu: NavigationMenu) {
32+
override fun activate(mainActivity: MainActivity, navigationMenu: NavigationMenu) {
3433
val wiFiDetails: List<WiFiDetail> = MainContext.INSTANCE.scannerService.wiFiData().wiFiDetails
3534
if (wiFiDetails.isEmpty()) {
3635
Toast.makeText(mainActivity, R.string.no_data, Toast.LENGTH_LONG).show()

app/src/main/kotlin/com/vrem/wifianalyzer/navigation/items/FragmentItem.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
*/
1818
package com.vrem.wifianalyzer.navigation.items
1919

20-
import android.view.MenuItem
2120
import android.view.View
2221
import androidx.fragment.app.Fragment
2322
import androidx.fragment.app.FragmentManager
@@ -29,10 +28,10 @@ import com.vrem.wifianalyzer.navigation.NavigationMenu
2928
internal class FragmentItem(val fragment: Fragment, override val registered: Boolean = true, override val visibility: Int = View.VISIBLE) :
3029
NavigationItem {
3130

32-
override fun activate(mainActivity: MainActivity, menuItem: MenuItem, navigationMenu: NavigationMenu) {
31+
override fun activate(mainActivity: MainActivity, navigationMenu: NavigationMenu) {
3332
val fragmentManager: FragmentManager = mainActivity.supportFragmentManager
3433
if (fragmentManager.isStateSaved) return
35-
updateMainActivity(mainActivity, menuItem, navigationMenu)
34+
updateMainActivity(mainActivity, navigationMenu)
3635
startFragment(fragmentManager)
3736
}
3837

@@ -42,9 +41,9 @@ internal class FragmentItem(val fragment: Fragment, override val registered: Boo
4241
}
4342
}
4443

45-
private fun updateMainActivity(mainActivity: MainActivity, menuItem: MenuItem, navigationMenu: NavigationMenu) {
44+
private fun updateMainActivity(mainActivity: MainActivity, navigationMenu: NavigationMenu) {
4645
mainActivity.currentNavigationMenu(navigationMenu)
47-
mainActivity.title = menuItem.title
46+
mainActivity.title = mainActivity.getString(navigationMenu.title)
4847
mainActivity.updateActionBar()
4948
mainActivity.mainConnectionVisibility(visibility)
5049
}

app/src/main/kotlin/com/vrem/wifianalyzer/navigation/items/NavigationItem.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,11 @@
1717
*/
1818
package com.vrem.wifianalyzer.navigation.items
1919

20-
import android.view.MenuItem
2120
import com.vrem.wifianalyzer.MainActivity
2221
import com.vrem.wifianalyzer.navigation.NavigationMenu
2322

2423
interface NavigationItem {
25-
fun activate(mainActivity: MainActivity, menuItem: MenuItem, navigationMenu: NavigationMenu)
24+
fun activate(mainActivity: MainActivity, navigationMenu: NavigationMenu)
2625
val registered: Boolean get() = false
2726
val visibility: Int get() = android.view.View.GONE
2827
}

app/src/main/kotlin/com/vrem/wifianalyzer/settings/Settings.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import android.content.SharedPreferences.OnSharedPreferenceChangeListener
2121
import com.vrem.annotation.OpenClass
2222
import com.vrem.util.*
2323
import com.vrem.wifianalyzer.R
24-
import com.vrem.wifianalyzer.navigation.NavigationGroup
24+
import com.vrem.wifianalyzer.navigation.MAIN_NAVIGATION
2525
import com.vrem.wifianalyzer.navigation.NavigationMenu
2626
import com.vrem.wifianalyzer.wifi.accesspoint.AccessPointViewType
2727
import com.vrem.wifianalyzer.wifi.accesspoint.ConnectionViewType
@@ -99,7 +99,7 @@ class Settings(private val repository: Repository) {
9999
fun selectedMenu(): NavigationMenu = find(NavigationMenu.entries, R.string.selected_menu_key, NavigationMenu.ACCESS_POINTS)
100100

101101
fun saveSelectedMenu(navigationMenu: NavigationMenu) {
102-
if (NavigationGroup.GROUP_FEATURE.navigationMenus.contains(navigationMenu)) {
102+
if (MAIN_NAVIGATION.contains(navigationMenu)) {
103103
repository.save(R.string.selected_menu_key, navigationMenu.ordinal)
104104
}
105105
}

app/src/main/res/layout/main_activity.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
android:fitsSystemWindows="true"
3737
app:headerLayout="@layout/main_navigation"
3838
app:itemIconTint="@drawable/menu_selector"
39-
app:itemTextColor="@drawable/menu_selector" />
39+
app:itemTextColor="@drawable/menu_selector"
40+
app:menu="@menu/nav_drawer_menu" />
4041

4142
</androidx.drawerlayout.widget.DrawerLayout>

0 commit comments

Comments
 (0)