Skip to content

Commit 965f47c

Browse files
Merge pull request #16808 from nextcloud/fix/index-out-of-navigation-item
fix(navigation-view): highlighting menu item, fixes index out of bound error
2 parents 7dacbad + 520fe50 commit 965f47c

2 files changed

Lines changed: 21 additions & 30 deletions

File tree

‎app/src/main/java/com/nextcloud/utils/extensions/NavigationViewExtensions.kt‎

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import android.view.Menu
1111
import androidx.core.view.forEach
1212
import com.google.android.material.bottomnavigation.BottomNavigationView
1313
import com.google.android.material.navigation.NavigationView
14+
import com.owncloud.android.R
1415

1516
fun NavigationView.getSelectedMenuItemId(): Int {
1617
menu.forEach {
@@ -21,19 +22,25 @@ fun NavigationView.getSelectedMenuItemId(): Int {
2122
return Menu.NONE
2223
}
2324

24-
fun NavigationView.unsetAllNavigationItems() {
25-
uncheckMenu(menu)
26-
}
25+
fun highlightNavigationView(
26+
drawerNavigationView: NavigationView?,
27+
bottomNavigationView: BottomNavigationView?,
28+
menuItemId: Int
29+
) {
30+
drawerNavigationView?.setCheckedItem(menuItemId)
2731

28-
fun BottomNavigationView.unsetAllNavigationItems() {
29-
uncheckMenu(menu)
30-
}
32+
bottomNavigationView?.let { bottomNav ->
33+
val bottomNavItems = setOf(R.id.nav_assistant, R.id.nav_all_files, R.id.nav_favorites, R.id.nav_gallery)
34+
val menuItem = bottomNav.menu.findItem(menuItemId)
3135

32-
private fun uncheckMenu(menu: Menu) {
33-
menu.forEach { item ->
34-
item.isChecked = false
36+
// Uncheck previous item that exists in drawer if this ID doesn't belong to bottom nav
37+
if (menuItemId !in bottomNavItems) {
38+
bottomNav.menu.findItem(bottomNav.selectedItemId)?.isChecked = false
39+
}
3540

36-
// recursively uncheck submenu items
37-
item.subMenu?.let { uncheckMenu(it) }
41+
// Highlight new item, skip assistant because Assistant screen doesn't have same bottom navigation bar
42+
if (menuItem != null && menuItem.itemId != R.id.nav_assistant) {
43+
menuItem.isChecked = true
44+
}
3845
}
3946
}

‎app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java‎

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -298,25 +298,9 @@ protected void setupDrawer(int id) {
298298
* @param menuItemId the ID of the menu item to mark as selected/highlighted
299299
*/
300300
public void highlightNavigationViewItem(int menuItemId) {
301-
if (drawerNavigationView != null) {
302-
NavigationViewExtensionsKt.unsetAllNavigationItems(drawerNavigationView);
303-
MenuItem menuItem = drawerNavigationView.getMenu().findItem(menuItemId);
304-
305-
if (menuItem != null && !menuItem.isChecked()) {
306-
menuItem.setChecked(true);
307-
}
308-
}
309-
310-
if (bottomNavigationView != null) {
311-
NavigationViewExtensionsKt.unsetAllNavigationItems(bottomNavigationView);
312-
MenuItem menuItem = bottomNavigationView.getMenu().findItem(menuItemId);
313-
314-
// Don't highlight assistant bottom navigation item because Assistant screen doesn't have same bottom navigation bar
315-
if (menuItem != null && !menuItem.isChecked() && menuItem.getItemId() != R.id.nav_assistant) {
316-
menuItem.setChecked(true);
317-
}
318-
}
319-
301+
NavigationViewExtensionsKt.highlightNavigationView(drawerNavigationView,
302+
bottomNavigationView,
303+
menuItemId);
320304
Log_OC.d(TAG, "New menu item is: " + menuItemId);
321305
}
322306

0 commit comments

Comments
 (0)