From 3453905fa2275afab8d5be4cfc9a88759a6342b9 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Tue, 13 Jan 2026 13:04:49 +0100 Subject: [PATCH 01/10] fix: drawer-item-highlight Signed-off-by: alperozturk96 --- .../com/owncloud/android/ui/activity/FileDisplayActivity.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt index c599740c49fb..97b9f9a8078a 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt @@ -813,6 +813,7 @@ class FileDisplayActivity : protected fun resetScrollingAndUpdateActionBar() { updateActionBarTitleAndHomeButton(file) + binding.appbar.appbar.setExpanded(true, false) resetScrolling(true) } @@ -1392,6 +1393,8 @@ class FileDisplayActivity : menuItemId = R.id.nav_personal_files } else if (MainApp.isOnlyOnDevice()) { menuItemId = R.id.nav_on_device + } else if (menuItemId == R.id.nav_trashbin || menuItemId == R.id.nav_activity) { + menuItemId = R.id.nav_all_files } else if (menuItemId == Menu.NONE) { menuItemId = R.id.nav_all_files } From 4768e73ccd7cb812e9fec752bb236aab5bdad897 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Tue, 13 Jan 2026 13:55:38 +0100 Subject: [PATCH 02/10] fix(drawer-menu): item highlight Signed-off-by: alperozturk96 --- .../java/com/owncloud/android/ui/activity/FileDisplayActivity.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt index 97b9f9a8078a..12d9537eea72 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt @@ -813,7 +813,6 @@ class FileDisplayActivity : protected fun resetScrollingAndUpdateActionBar() { updateActionBarTitleAndHomeButton(file) - binding.appbar.appbar.setExpanded(true, false) resetScrolling(true) } From 43b1698a9944761c0eb90fde1debf8eeef48d2fd Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Tue, 13 Jan 2026 16:15:33 +0100 Subject: [PATCH 03/10] fix(drawer-menu): item highlight Signed-off-by: alperozturk96 --- .../extensions/DrawerActivityExtensions.kt | 18 ++++++++++++ .../android/ui/activity/DrawerActivity.java | 25 ++++------------- .../ui/activity/FileDisplayActivity.kt | 2 -- .../theme/FilesSpecificViewThemeUtils.kt | 28 +++++++++++++++++++ 4 files changed, 51 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/com/nextcloud/utils/extensions/DrawerActivityExtensions.kt b/app/src/main/java/com/nextcloud/utils/extensions/DrawerActivityExtensions.kt index 899d9ed5a241..b0bb16decb88 100644 --- a/app/src/main/java/com/nextcloud/utils/extensions/DrawerActivityExtensions.kt +++ b/app/src/main/java/com/nextcloud/utils/extensions/DrawerActivityExtensions.kt @@ -8,10 +8,13 @@ package com.nextcloud.utils.extensions import android.content.Intent +import android.view.Menu import com.owncloud.android.MainApp import com.owncloud.android.R import com.owncloud.android.ui.activity.DrawerActivity import com.owncloud.android.ui.activity.FileDisplayActivity +import androidx.core.view.get +import androidx.core.view.size fun DrawerActivity.navigateToAllFiles() { DrawerActivity.menuItemId = R.id.nav_all_files @@ -27,3 +30,18 @@ fun DrawerActivity.navigateToAllFiles() { startActivity(this) } } + +fun DrawerActivity.unsetAllNavigationItems() { + fun uncheckMenu(menu: Menu) { + for (i in 0 until menu.size) { + val item = menu[i] + item.isChecked = false + + // recursively uncheck submenu items + item.subMenu?.let { uncheckMenu(it) } + } + } + + drawerNavigationView?.menu?.let { uncheckMenu(it) } + bottomNavigationView?.menu?.let { uncheckMenu(it) } +} diff --git a/app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java b/app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java index 4f089971528f..90e937aa435b 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java +++ b/app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java @@ -65,6 +65,7 @@ import com.nextcloud.utils.GlideHelper; import com.nextcloud.utils.LinkHelper; import com.nextcloud.utils.extensions.ActivityExtensionsKt; +import com.nextcloud.utils.extensions.DrawerActivityExtensionsKt; import com.nextcloud.utils.extensions.ViewExtensionsKt; import com.nextcloud.utils.mdm.MDMConfig; import com.owncloud.android.MainApp; @@ -162,7 +163,7 @@ public abstract class DrawerActivity extends ToolbarActivity /** * Reference to the navigation view. */ - private NavigationView drawerNavigationView; + public NavigationView drawerNavigationView; /** * Reference to the navigation view header. @@ -229,6 +230,7 @@ protected void setupDrawer() { drawerNavigationView = findViewById(R.id.nav_view); if (drawerNavigationView != null) { + viewThemeUtils.files.colorNavigationView(drawerNavigationView); // Setting up drawer header mNavigationViewHeader = drawerNavigationView.getHeaderView(0); @@ -893,22 +895,6 @@ private void setQuotaInformation(long usedSpace, long totalSpace, int relative, showQuota(true); } - private void unsetAllDrawerMenuItems() { - if (drawerNavigationView != null) { - Menu menu = drawerNavigationView.getMenu(); - for (int i = 0; i < menu.size(); i++) { - menu.getItem(i).setChecked(false); - } - } - - if (bottomNavigationView != null) { - Menu menu = bottomNavigationView.getMenu(); - for (int i = 0; i < menu.size(); i++) { - menu.getItem(i).setChecked(false); - } - } - } - private void updateQuotaLink() { if (mQuotaTextLink != null) { if (MDMConfig.INSTANCE.externalSiteSupport(this)) { @@ -976,13 +962,12 @@ public void onLoadFailed(@Nullable Drawable errorDrawable) { }; } - /** * Sets the menu item as checked in both the drawer and bottom navigation views, if applicable. */ @SuppressFBWarnings("RV") public void setNavigationViewItemChecked() { - unsetAllDrawerMenuItems(); + DrawerActivityExtensionsKt.unsetAllNavigationItems(this); // Don't check any items if (menuItemId == Menu.NONE) { @@ -994,7 +979,6 @@ public void setNavigationViewItemChecked() { if (menuItem != null && !menuItem.isChecked()) { menuItem.setChecked(true); - viewThemeUtils.platform.colorNavigationView(drawerNavigationView); } } @@ -1461,6 +1445,7 @@ protected void handleDeepLink(@NonNull Uri uri) { private void handleNavItemClickEvent(@IdRes int menuItemId) { if (drawerNavigationView == null) { drawerNavigationView = findViewById(R.id.nav_view); + viewThemeUtils.files.colorNavigationView(drawerNavigationView); } Menu navMenu = drawerNavigationView.getMenu(); onNavigationItemClicked(navMenu.findItem(menuItemId)); diff --git a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt index 12d9537eea72..c599740c49fb 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt @@ -1392,8 +1392,6 @@ class FileDisplayActivity : menuItemId = R.id.nav_personal_files } else if (MainApp.isOnlyOnDevice()) { menuItemId = R.id.nav_on_device - } else if (menuItemId == R.id.nav_trashbin || menuItemId == R.id.nav_activity) { - menuItemId = R.id.nav_all_files } else if (menuItemId == Menu.NONE) { menuItemId = R.id.nav_all_files } diff --git a/app/src/main/java/com/owncloud/android/utils/theme/FilesSpecificViewThemeUtils.kt b/app/src/main/java/com/owncloud/android/utils/theme/FilesSpecificViewThemeUtils.kt index 4fb2d277c0cd..22c853ae9226 100644 --- a/app/src/main/java/com/owncloud/android/utils/theme/FilesSpecificViewThemeUtils.kt +++ b/app/src/main/java/com/owncloud/android/utils/theme/FilesSpecificViewThemeUtils.kt @@ -27,15 +27,18 @@ import androidx.appcompat.widget.AppCompatAutoCompleteTextView import androidx.appcompat.widget.SearchView import androidx.core.content.res.ResourcesCompat import com.google.android.material.card.MaterialCardView +import com.google.android.material.navigation.NavigationView import com.nextcloud.android.common.ui.color.ColorUtil import com.nextcloud.android.common.ui.theme.MaterialSchemes import com.nextcloud.android.common.ui.theme.ViewThemeUtilsBase import com.nextcloud.android.common.ui.theme.utils.AndroidViewThemeUtils import com.nextcloud.android.common.ui.theme.utils.AndroidXViewThemeUtils +import com.nextcloud.android.common.ui.util.buildColorStateList import com.nextcloud.utils.view.FastScrollPopupBackground import com.owncloud.android.R import com.owncloud.android.lib.common.utils.Log_OC import com.owncloud.android.lib.resources.shares.ShareType +import dynamiccolor.MaterialDynamicColors import me.zhanghai.android.fastscroll.FastScrollerBuilder import me.zhanghai.android.fastscroll.PopupStyles import javax.inject.Inject @@ -47,6 +50,8 @@ class FilesSpecificViewThemeUtils @Inject constructor( private val androidViewThemeUtils: AndroidViewThemeUtils, private val androidXViewThemeUtils: AndroidXViewThemeUtils ) : ViewThemeUtilsBase(schemes) { + private val dynamicColor = MaterialDynamicColors() + // not ported to common lib because PreferenceCategory is deprecated fun themePreferenceCategory(category: PreferenceCategory) { withScheme(category.context) { @@ -279,6 +284,29 @@ class FilesSpecificViewThemeUtils @Inject constructor( } } + @JvmOverloads + fun colorNavigationView(navigationView: NavigationView, colorIcons: Boolean = true) { + withScheme(navigationView) { scheme -> + navigationView.run { + itemBackground?.setTintList( + buildColorStateList( + android.R.attr.state_checked to dynamicColor.secondaryContainer().getArgb(scheme), + -android.R.attr.state_checked to Color.TRANSPARENT + ) + ) + + background.setTintList(ColorStateList.valueOf(dynamicColor.surface().getArgb(scheme))) + + if (colorIcons) { + itemIconTintList = buildColorStateList( + android.R.attr.state_checked to dynamicColor.onSecondaryContainer().getArgb(scheme), + -android.R.attr.state_checked to dynamicColor.onSurfaceVariant().getArgb(scheme) + ) + } + } + } + } + companion object { private val TAG = FilesSpecificViewThemeUtils::class.simpleName From d121a236348f7830c30c612b99103d34b19e0ebf Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Wed, 14 Jan 2026 09:59:36 +0100 Subject: [PATCH 04/10] use for each for menu Signed-off-by: alperozturk96 --- .../nextcloud/utils/extensions/DrawerActivityExtensions.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/nextcloud/utils/extensions/DrawerActivityExtensions.kt b/app/src/main/java/com/nextcloud/utils/extensions/DrawerActivityExtensions.kt index b0bb16decb88..fdf2646c1350 100644 --- a/app/src/main/java/com/nextcloud/utils/extensions/DrawerActivityExtensions.kt +++ b/app/src/main/java/com/nextcloud/utils/extensions/DrawerActivityExtensions.kt @@ -9,6 +9,7 @@ package com.nextcloud.utils.extensions import android.content.Intent import android.view.Menu +import androidx.core.view.forEach import com.owncloud.android.MainApp import com.owncloud.android.R import com.owncloud.android.ui.activity.DrawerActivity @@ -33,8 +34,7 @@ fun DrawerActivity.navigateToAllFiles() { fun DrawerActivity.unsetAllNavigationItems() { fun uncheckMenu(menu: Menu) { - for (i in 0 until menu.size) { - val item = menu[i] + menu.forEach { item -> item.isChecked = false // recursively uncheck submenu items From fb4460c6554bbea883ccd5d915ba9155a31616df Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Wed, 14 Jan 2026 09:59:44 +0100 Subject: [PATCH 05/10] use for each for menu Signed-off-by: alperozturk96 --- .../com/nextcloud/utils/extensions/DrawerActivityExtensions.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/main/java/com/nextcloud/utils/extensions/DrawerActivityExtensions.kt b/app/src/main/java/com/nextcloud/utils/extensions/DrawerActivityExtensions.kt index fdf2646c1350..c9e92d30fdc4 100644 --- a/app/src/main/java/com/nextcloud/utils/extensions/DrawerActivityExtensions.kt +++ b/app/src/main/java/com/nextcloud/utils/extensions/DrawerActivityExtensions.kt @@ -14,8 +14,6 @@ import com.owncloud.android.MainApp import com.owncloud.android.R import com.owncloud.android.ui.activity.DrawerActivity import com.owncloud.android.ui.activity.FileDisplayActivity -import androidx.core.view.get -import androidx.core.view.size fun DrawerActivity.navigateToAllFiles() { DrawerActivity.menuItemId = R.id.nav_all_files From f24b2f6dd3822058d20a9014b973c42a077e0a9d Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Fri, 16 Jan 2026 16:02:08 +0100 Subject: [PATCH 06/10] centralize menu item id usage Signed-off-by: alperozturk96 # Conflicts: # app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java --- .../ui/composeActivity/ComposeActivity.kt | 9 +- .../extensions/DrawerActivityExtensions.kt | 20 --- .../java/com/owncloud/android/MainApp.java | 12 ++ .../ui/activities/ActivitiesActivity.java | 8 +- .../android/ui/activity/CommunityActivity.kt | 9 +- .../android/ui/activity/DrawerActivity.java | 162 ++++++++---------- .../ui/activity/ExternalSiteWebView.java | 2 +- .../ui/activity/FileDisplayActivity.kt | 31 +--- .../android/ui/activity/SettingsActivity.java | 2 - .../ui/activity/SyncedFoldersActivity.kt | 9 +- .../android/ui/activity/ToolbarActivity.java | 17 +- .../ui/activity/UploadListActivity.java | 9 +- .../android/ui/fragment/GalleryFragment.java | 1 + .../ui/preview/PreviewImageActivity.kt | 6 +- .../android/ui/trashbin/TrashbinActivity.kt | 11 +- 15 files changed, 151 insertions(+), 157 deletions(-) diff --git a/app/src/main/java/com/nextcloud/ui/composeActivity/ComposeActivity.kt b/app/src/main/java/com/nextcloud/ui/composeActivity/ComposeActivity.kt index 1428ab363b76..68fb66e90a6e 100644 --- a/app/src/main/java/com/nextcloud/ui/composeActivity/ComposeActivity.kt +++ b/app/src/main/java/com/nextcloud/ui/composeActivity/ComposeActivity.kt @@ -62,9 +62,16 @@ class ComposeActivity : DrawerActivity() { } } + override fun getCurrentActivityMenuItemId(): Int = R.id.nav_assistant + + override fun onResume() { + super.onResume() + setNavigationViewItemChecked(currentActivityMenuItemId) + } + private fun setupActivityUIFor(destination: ComposeDestination) { if (destination is ComposeDestination.AssistantScreen) { - setupDrawer() + setupDrawer(R.id.nav_assistant) setupToolbarShowOnlyMenuButtonAndTitle(destination.title) { openDrawer() } diff --git a/app/src/main/java/com/nextcloud/utils/extensions/DrawerActivityExtensions.kt b/app/src/main/java/com/nextcloud/utils/extensions/DrawerActivityExtensions.kt index c9e92d30fdc4..a4ded92ca8b3 100644 --- a/app/src/main/java/com/nextcloud/utils/extensions/DrawerActivityExtensions.kt +++ b/app/src/main/java/com/nextcloud/utils/extensions/DrawerActivityExtensions.kt @@ -8,17 +8,11 @@ package com.nextcloud.utils.extensions import android.content.Intent -import android.view.Menu -import androidx.core.view.forEach import com.owncloud.android.MainApp -import com.owncloud.android.R import com.owncloud.android.ui.activity.DrawerActivity import com.owncloud.android.ui.activity.FileDisplayActivity fun DrawerActivity.navigateToAllFiles() { - DrawerActivity.menuItemId = R.id.nav_all_files - setNavigationViewItemChecked() - MainApp.showOnlyFilesOnDevice(false) MainApp.showOnlyPersonalFiles(false) @@ -29,17 +23,3 @@ fun DrawerActivity.navigateToAllFiles() { startActivity(this) } } - -fun DrawerActivity.unsetAllNavigationItems() { - fun uncheckMenu(menu: Menu) { - menu.forEach { item -> - item.isChecked = false - - // recursively uncheck submenu items - item.subMenu?.let { uncheckMenu(it) } - } - } - - drawerNavigationView?.menu?.let { uncheckMenu(it) } - bottomNavigationView?.menu?.let { uncheckMenu(it) } -} diff --git a/app/src/main/java/com/owncloud/android/MainApp.java b/app/src/main/java/com/owncloud/android/MainApp.java index e1b946e2781e..5f564a23ac5a 100644 --- a/app/src/main/java/com/owncloud/android/MainApp.java +++ b/app/src/main/java/com/owncloud/android/MainApp.java @@ -803,6 +803,18 @@ public static boolean isOnlyPersonFiles() { return mOnlyPersonalFiles; } + public static Integer getMenuItemId() { + if (MainApp.isOnlyPersonFiles()) { + return R.id.nav_personal_files; + } + + if (MainApp.isOnlyOnDevice()) { + return R.id.nav_on_device; + } + + return null; + } + public static String getUserAgent() { // Mozilla/5.0 (Android) Nextcloud-android/2.1.0 return getUserAgent(R.string.nextcloud_user_agent); diff --git a/app/src/main/java/com/owncloud/android/ui/activities/ActivitiesActivity.java b/app/src/main/java/com/owncloud/android/ui/activities/ActivitiesActivity.java index f61121e8721e..8e1caa3c439c 100644 --- a/app/src/main/java/com/owncloud/android/ui/activities/ActivitiesActivity.java +++ b/app/src/main/java/com/owncloud/android/ui/activities/ActivitiesActivity.java @@ -77,7 +77,7 @@ protected void onCreate(Bundle savedInstanceState) { viewThemeUtils.androidx.themeSwipeRefreshLayout(binding.swipeContainingList); // setup drawer - setupDrawer(); + setupDrawer(R.id.nav_activity); updateActionBarTitleAndHomeButtonByString(getString(R.string.drawer_item_activities)); binding.swipeContainingList.setOnRefreshListener(() -> { @@ -88,6 +88,11 @@ protected void onCreate(Bundle savedInstanceState) { }); } + @Override + protected int getCurrentActivityMenuItemId() { + return R.id.nav_activity; + } + @VisibleForTesting public ActivityListLayoutBinding getBinding() { return binding; @@ -153,6 +158,7 @@ public boolean onOptionsItemSelected(MenuItem item) { @Override protected void onResume() { super.onResume(); + setNavigationViewItemChecked(getCurrentActivityMenuItemId()); actionListener.onResume(); setupContent(); } diff --git a/app/src/main/java/com/owncloud/android/ui/activity/CommunityActivity.kt b/app/src/main/java/com/owncloud/android/ui/activity/CommunityActivity.kt index 308d7eb99340..280534f99a9a 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/CommunityActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/activity/CommunityActivity.kt @@ -30,7 +30,7 @@ open class CommunityActivity : DrawerActivity() { setupToolbar() updateActionBarTitleAndHomeButtonByString(getString(R.string.drawer_community)) - setupDrawer() + setupDrawer(R.id.nav_community) binding.communityReleaseCandidateText.movementMethod = LinkMovementMethod.getInstance() setupContributeForumView() setupContributeTranslationView() @@ -39,6 +39,13 @@ open class CommunityActivity : DrawerActivity() { setOnClickListeners() } + override fun getCurrentActivityMenuItemId(): Int = R.id.nav_community + + override fun onResume() { + super.onResume() + setNavigationViewItemChecked(currentActivityMenuItemId) + } + private fun setupContributeForumView() { val htmlContent = getString(R.string.community_contribute_forum_text) + " " + getString( diff --git a/app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java b/app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java index 90e937aa435b..3d1aea026150 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java +++ b/app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java @@ -160,11 +160,6 @@ public abstract class DrawerActivity extends ToolbarActivity */ protected ActionBarDrawerToggle mDrawerToggle; - /** - * Reference to the navigation view. - */ - public NavigationView drawerNavigationView; - /** * Reference to the navigation view header. */ @@ -175,13 +170,6 @@ public abstract class DrawerActivity extends ToolbarActivity */ private boolean mIsAccountChooserActive; - /** - * Id of the checked menu item. - */ - public static int menuItemId = Menu.NONE; - - private static int previousMenuItemId = Menu.NONE; - /** * container layout of the quota view. */ @@ -207,6 +195,11 @@ public abstract class DrawerActivity extends ToolbarActivity private ArbitraryDataProvider arbitraryDataProvider; private BottomNavigationView bottomNavigationView; + private NavigationView drawerNavigationView; + + protected int getCurrentActivityMenuItemId() { + return R.id.nav_all_files; + } private EcosystemManager ecosystemManager; @@ -225,10 +218,15 @@ public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableB /** * Initializes the drawer and its content. This method needs to be called after the content view has been set. */ - protected void setupDrawer() { - mDrawerLayout = findViewById(R.id.drawer_layout); + protected void setupDrawer(int id) { + if (mDrawerLayout == null) { + mDrawerLayout = findViewById(R.id.drawer_layout); + } + + if (drawerNavigationView == null) { + drawerNavigationView = findViewById(R.id.nav_view); + } - drawerNavigationView = findViewById(R.id.nav_view); if (drawerNavigationView != null) { viewThemeUtils.files.colorNavigationView(drawerNavigationView); @@ -239,6 +237,7 @@ protected void setupDrawer() { setupDrawerMenu(drawerNavigationView); getAndDisplayUserQuota(); setupQuotaElement(); + setNavigationViewItemChecked(id); } setupDrawerToggle(); @@ -247,14 +246,37 @@ protected void setupDrawer() { getSupportActionBar().setDisplayHomeAsUpEnabled(true); } - bottomNavigationView = findViewById(R.id.bottom_navigation); + if (bottomNavigationView == null) { + bottomNavigationView = findViewById(R.id.bottom_navigation); + } + if (bottomNavigationView != null) { themeBottomNavigationMenu(); checkAssistantBottomNavigationMenu(); handleBottomNavigationViewClicks(); + setNavigationViewItemChecked(id); } + } + + protected void setNavigationViewItemChecked(int menuItemId) { + if (drawerNavigationView != null) { + MenuItem menuItem = drawerNavigationView.getMenu().findItem(menuItemId); - setNavigationViewItemChecked(); + if (menuItem != null && !menuItem.isChecked()) { + menuItem.setChecked(true); + } + } + + if (bottomNavigationView != null) { + MenuItem menuItem = bottomNavigationView.getMenu().findItem(menuItemId); + + // Don't highlight assistant bottom navigation item because Assistant screen doesn't have same bottom navigation bar + if (menuItem != null && !menuItem.isChecked() && menuItem.getItemId() != R.id.nav_assistant) { + menuItem.setChecked(true); + } + } + + Log_OC.d(TAG, "New menu item is: " + menuItemId); } private void themeBottomNavigationMenu() { @@ -443,10 +465,7 @@ private void showTopBanner(ConstraintLayout banner) { } moreView.setOnClickListener(v -> LinkHelper.INSTANCE.openAppStore("Nextcloud", true, this)); - assistantView.setOnClickListener(v -> { - DrawerActivity.menuItemId = Menu.NONE; - startAssistantScreen(); - }); + assistantView.setOnClickListener(v -> startAssistantScreen()); if (getCapabilities() != null && getCapabilities().getAssistant().isTrue()) { assistantView.setVisibility(View.VISIBLE); } else { @@ -530,16 +549,8 @@ private void filterDrawerMenu(final Menu menu, @NonNull final User user) { // region navigation item click private void onNavigationItemClicked(final MenuItem menuItem) { - setPreviousMenuItemId(menuItemId); int itemId = menuItem.getItemId(); - // Settings screen cannot display drawer menu thus no need to highlight - if (itemId != R.id.nav_settings) { - menuItemId = itemId; - } - - setNavigationViewItemChecked(); - if (itemId == R.id.nav_all_files || itemId == R.id.nav_personal_files) { if (this instanceof FileDisplayActivity fda && !(fda.getLeftFragment() instanceof GalleryFragment) && @@ -585,7 +596,6 @@ private void onNavigationItemClicked(final MenuItem menuItem) { startActivity(CommunityActivity.class); } else if (itemId == R.id.nav_logout) { resetOnlyPersonalAndOnDevice(); - menuItemId = Menu.NONE; MenuItem isNewMenuItemChecked = menuItem.setChecked(false); Log_OC.d(TAG,"onNavigationItemClicked nav_logout setChecked " + isNewMenuItemChecked); final Optional optionalUser = getUser(); @@ -616,15 +626,14 @@ private void onNavigationItemClicked(final MenuItem menuItem) { } } - resetFileDepthAndConfigureMenuItem(); + resetFileDepth(); + setNavigationViewItemChecked(itemId); } @SuppressFBWarnings("RV") private void handleBottomNavigationViewClicks() { bottomNavigationView.setOnItemSelectedListener(menuItem -> { - setPreviousMenuItemId(menuItemId); - menuItemId = menuItem.getItemId(); - + int menuItemId = menuItem.getItemId(); exitSelectionMode(); resetOnlyPersonalAndOnDevice(); @@ -649,23 +658,13 @@ private void handleBottomNavigationViewClicks() { getSupportActionBar().setIcon(null); } - setNavigationViewItemChecked(); - resetFileDepthAndConfigureMenuItem(); - + resetFileDepth(); + setNavigationViewItemChecked(menuItemId); return false; }); } // endregion - private void resetFileDepthAndConfigureMenuItem() { - // from navigation user always sees root level - resetFileDepth(); - - if (this instanceof FileDisplayActivity fda) { - fda.configureMenuItem(); - } - } - private void startAssistantScreen() { final var destination = ComposeDestination.Companion.getAssistantScreen(this); Intent composeActivity = new Intent(getApplicationContext(), ComposeActivity.class); @@ -733,7 +732,6 @@ public void startPhotoSearch(int id) { } private void launchActivityForSearch(SearchEvent searchEvent, int menuItemId) { - DrawerActivity.menuItemId = menuItemId; Intent intent = new Intent(getApplicationContext(), FileDisplayActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.setAction(Intent.ACTION_SEARCH); @@ -913,7 +911,6 @@ private void updateQuotaLink() { externalWebViewIntent.putExtra(ExternalSiteWebView.EXTRA_TITLE, firstQuota.getName()); externalWebViewIntent.putExtra(ExternalSiteWebView.EXTRA_URL, firstQuota.getUrl()); externalWebViewIntent.putExtra(ExternalSiteWebView.EXTRA_SHOW_SIDEBAR, true); - menuItemId = Menu.NONE; startActivity(externalWebViewIntent); }); @@ -962,37 +959,6 @@ public void onLoadFailed(@Nullable Drawable errorDrawable) { }; } - /** - * Sets the menu item as checked in both the drawer and bottom navigation views, if applicable. - */ - @SuppressFBWarnings("RV") - public void setNavigationViewItemChecked() { - DrawerActivityExtensionsKt.unsetAllNavigationItems(this); - - // Don't check any items - if (menuItemId == Menu.NONE) { - return; - } - - if (drawerNavigationView != null) { - MenuItem menuItem = drawerNavigationView.getMenu().findItem(menuItemId); - - if (menuItem != null && !menuItem.isChecked()) { - menuItem.setChecked(true); - } - } - - if (bottomNavigationView != null) { - MenuItem menuItem = bottomNavigationView.getMenu().findItem(menuItemId); - - // Don't highlight assistant bottom navigation item because Assistant screen doesn't have same bottom navigation bar - if (menuItem != null && !menuItem.isChecked() && menuItem.getItemId() != R.id.nav_assistant) { - menuItem.setChecked(true); - } - } - - Log_OC.d(TAG, "New menu item is: " + menuItemId); - } /** * Retrieves and shows the user quota if available @@ -1139,6 +1105,7 @@ protected void onCreate(Bundle savedInstanceState) { ecosystemManager = new EcosystemManager(this); } + @Override protected void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); @@ -1149,7 +1116,6 @@ protected void onSaveInstanceState(@NonNull Bundle outState) { public void onRestoreInstanceState(@NonNull Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); mIsAccountChooserActive = savedInstanceState.getBoolean(KEY_IS_ACCOUNT_CHOOSER_ACTIVE, false); - setNavigationViewItemChecked(); } @Override @@ -1443,10 +1409,6 @@ protected void handleDeepLink(@NonNull Uri uri) { } private void handleNavItemClickEvent(@IdRes int menuItemId) { - if (drawerNavigationView == null) { - drawerNavigationView = findViewById(R.id.nav_view); - viewThemeUtils.files.colorNavigationView(drawerNavigationView); - } Menu navMenu = drawerNavigationView.getMenu(); onNavigationItemClicked(navMenu.findItem(menuItemId)); } @@ -1467,25 +1429,37 @@ private void checkStoragePermissionWarningBannerVisibility() { } } - public static boolean isToolbarStyleSearch() { + private int getSelectedMenuItemId() { + if (drawerNavigationView == null) { + return R.id.nav_all_files; + } + + Menu menu = drawerNavigationView.getMenu(); + for (int i = 0; i < menu.size(); i++) { + MenuItem item = menu.getItem(i); + if (item.isChecked()) { + return item.getItemId(); + } + } + + return Menu.NONE; + } + + public boolean isToolbarStyleSearch() { + int menuItemId = getSelectedMenuItemId(); + return menuItemId == Menu.NONE || menuItemId == R.id.nav_all_files || menuItemId == R.id.nav_personal_files; } - public static boolean isMenuItemIdBelongsToSearchType() { + public boolean isMenuItemIdBelongsToSearchType() { + int menuItemId = getSelectedMenuItemId(); + return menuItemId == R.id.nav_favorites || menuItemId == R.id.nav_shared || menuItemId == R.id.nav_on_device || menuItemId == R.id.nav_recently_modified || menuItemId == R.id.nav_gallery; } - - public static int getPreviousMenuItemId() { - return previousMenuItemId; - } - - public static void setPreviousMenuItemId(int menuItemId) { - previousMenuItemId = menuItemId; - } } diff --git a/app/src/main/java/com/owncloud/android/ui/activity/ExternalSiteWebView.java b/app/src/main/java/com/owncloud/android/ui/activity/ExternalSiteWebView.java index dad57adc3398..fe1107d1b140 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/ExternalSiteWebView.java +++ b/app/src/main/java/com/owncloud/android/ui/activity/ExternalSiteWebView.java @@ -104,7 +104,7 @@ protected void postOnCreate() { } } - setupDrawer(); + setupDrawer(R.id.nav_view); if (!showSidebar) { setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); diff --git a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt index c599740c49fb..c6fd8e304913 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt @@ -279,8 +279,12 @@ class FileDisplayActivity : observeWorkerState() startMetadataSyncForRoot() handleBackPress() + setupDrawer(R.id.nav_all_files) } + override fun getCurrentActivityMenuItemId(): Int = + MainApp.getMenuItemId() ?: listOfFilesFragment?.menuItemId ?: R.id.nav_all_files + private fun loadSavedInstanceState(savedInstanceState: Bundle?) { if (savedInstanceState != null) { mWaitingToPreview = @@ -311,8 +315,6 @@ class FileDisplayActivity : // reset ui states when file display activity created/recrated listOfFilesFragment?.resetSearchAttributes() - menuItemId = R.id.nav_all_files - setNavigationViewItemChecked() } private fun initTaskRetainerFragment() { @@ -391,7 +393,6 @@ class FileDisplayActivity : ) != null ) { switchToSearchFragment(savedInstanceState) - setupDrawer() } else { createMinFragments(savedInstanceState) } @@ -566,7 +567,6 @@ class FileDisplayActivity : ALL_FILES == action -> { Log_OC.d(this, "Switch to oc file fragment") - menuItemId = R.id.nav_all_files // Replace only if the fragment is NOT exactly OCFileListFragment // Using `is OCFileListFragment` would also match subclasses, @@ -583,7 +583,6 @@ class FileDisplayActivity : LIST_GROUPFOLDERS == action -> { Log_OC.d(this, "Switch to list groupfolders fragment") - menuItemId = R.id.nav_groupfolders leftFragment = GroupfolderListFragment() supportFragmentManager.executePendingTransactions() } @@ -1265,7 +1264,6 @@ class FileDisplayActivity : } resetScrollingAndUpdateActionBar() - configureMenuItem() startMetadataSyncForCurrentDir() } @@ -1331,6 +1329,9 @@ class FileDisplayActivity : Log_OC.v(TAG, "onResume() start") super.onResume() + + setNavigationViewItemChecked(currentActivityMenuItemId) + if (SettingsActivity.isBackPressed) { Log_OC.d(TAG, "User returned from settings activity, skipping reset content logic") return @@ -1368,8 +1369,6 @@ class FileDisplayActivity : updateActionBarTitleAndHomeButton(startFile) } - configureMenuItem() - // show in-app review dialog to user inAppReviewHelper.showInAppReview(this) @@ -1387,21 +1386,6 @@ class FileDisplayActivity : ?: intent?.getStringExtra(EXTRA_FILE_REMOTE_PATH) ?.let { fileDataStorageManager.getFileByDecryptedRemotePath(it) } - private fun checkAndSetMenuItemId() { - if (MainApp.isOnlyPersonFiles()) { - menuItemId = R.id.nav_personal_files - } else if (MainApp.isOnlyOnDevice()) { - menuItemId = R.id.nav_on_device - } else if (menuItemId == Menu.NONE) { - menuItemId = R.id.nav_all_files - } - } - - fun configureMenuItem() { - checkAndSetMenuItemId() - setNavigationViewItemChecked() - } - // region local broadcast manager receivers private fun registerReceivers() { Log_OC.d(TAG, "registering receivers") @@ -2866,7 +2850,6 @@ class FileDisplayActivity : } setFile(file) - setupDrawer() val existingAccountName = existingUser.accountName mSwitchAccountButton.tag = existingAccountName diff --git a/app/src/main/java/com/owncloud/android/ui/activity/SettingsActivity.java b/app/src/main/java/com/owncloud/android/ui/activity/SettingsActivity.java index 53b3a9496627..ba6db7333a81 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/SettingsActivity.java +++ b/app/src/main/java/com/owncloud/android/ui/activity/SettingsActivity.java @@ -316,7 +316,6 @@ private void setupAboutCategory(String appVersion) { getResources().getString(R.string.privacy)); intent.putExtra(ExternalSiteWebView.EXTRA_URL, privacyUrl.toString()); intent.putExtra(ExternalSiteWebView.EXTRA_SHOW_SIDEBAR, false); - DrawerActivity.menuItemId = Menu.NONE; } startActivity(intent); @@ -1185,7 +1184,6 @@ private void loadExternalSettingLinks(PreferenceCategory preferenceCategory) { externalWebViewIntent.putExtra(ExternalSiteWebView.EXTRA_TITLE, link.getName()); externalWebViewIntent.putExtra(ExternalSiteWebView.EXTRA_URL, link.getUrl()); externalWebViewIntent.putExtra(ExternalSiteWebView.EXTRA_SHOW_SIDEBAR, false); - DrawerActivity.menuItemId = link.getId(); startActivity(externalWebViewIntent); return true; diff --git a/app/src/main/java/com/owncloud/android/ui/activity/SyncedFoldersActivity.kt b/app/src/main/java/com/owncloud/android/ui/activity/SyncedFoldersActivity.kt index a25d0a23402c..b1263d7b1cae 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/SyncedFoldersActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/activity/SyncedFoldersActivity.kt @@ -183,7 +183,7 @@ class SyncedFoldersActivity : // setup toolbar setupToolbar() updateActionBarTitleAndHomeButtonByString(getString(R.string.drawer_synced_folders)) - setupDrawer() + setupDrawer(R.id.nav_settings) setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED) if (supportActionBar != null) { supportActionBar!!.setDisplayHomeAsUpEnabled(true) @@ -200,6 +200,13 @@ class SyncedFoldersActivity : setupStoragePermissionWarningBanner() } + override fun getCurrentActivityMenuItemId(): Int = R.id.nav_settings + + override fun onResume() { + super.onResume() + setNavigationViewItemChecked(currentActivityMenuItemId) + } + fun setupStoragePermissionWarningBanner() { val storagePermissionWarningBanner = binding.storagePermissionWarningBanner.root StoragePermissionWarningBannerBinding.bind(storagePermissionWarningBanner).apply { diff --git a/app/src/main/java/com/owncloud/android/ui/activity/ToolbarActivity.java b/app/src/main/java/com/owncloud/android/ui/activity/ToolbarActivity.java index 63489451c7db..1b77bdc1d0c4 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/ToolbarActivity.java +++ b/app/src/main/java/com/owncloud/android/ui/activity/ToolbarActivity.java @@ -186,12 +186,14 @@ private SearchType getSearchType() { final OCFileListFragment fragment = getOCFileListFragment(); // if current navigation not matches, reset search event - if (!DrawerActivity.isMenuItemIdBelongsToSearchType()) { - if (fragment != null) { - fragment.resetSearchAttributes(); - } + if (this instanceof DrawerActivity drawerActivity) { + if (!drawerActivity.isMenuItemIdBelongsToSearchType()) { + if (fragment != null) { + fragment.resetSearchAttributes(); + } - return SearchType.NO_SEARCH; + return SearchType.NO_SEARCH; + } } if (fragment != null) { @@ -232,7 +234,10 @@ protected void updateActionBarTitleAndHomeButton(OCFile file) { final String title = getActionBarTitle(file, isRoot); updateActionBarTitleAndHomeButtonByString(title); - final boolean isToolbarStyleSearch = DrawerActivity.isToolbarStyleSearch(); + boolean isToolbarStyleSearch = false; + if (this instanceof DrawerActivity drawerActivity) { + isToolbarStyleSearch = drawerActivity.isToolbarStyleSearch(); + } final boolean canShowSearchBar = (isHomeSearchToolbarShow && isRoot && isToolbarStyleSearch); showHomeSearchToolbar(canShowSearchBar); diff --git a/app/src/main/java/com/owncloud/android/ui/activity/UploadListActivity.java b/app/src/main/java/com/owncloud/android/ui/activity/UploadListActivity.java index f66a279a44a2..b0723c5b99bf 100755 --- a/app/src/main/java/com/owncloud/android/ui/activity/UploadListActivity.java +++ b/app/src/main/java/com/owncloud/android/ui/activity/UploadListActivity.java @@ -123,7 +123,7 @@ protected void onCreate(Bundle savedInstanceState) { updateActionBarTitleAndHomeButtonByString(getString(R.string.uploads_view_title)); // setup drawer - setupDrawer(); + setupDrawer(R.id.nav_uploads); setupContent(); observeWorkerState(); @@ -141,6 +141,11 @@ private void observeWorkerState() { }); } + @Override + protected int getCurrentActivityMenuItemId() { + return R.id.nav_uploads; + } + private void setupContent() { binding.list.setEmptyView(binding.emptyList.getRoot()); binding.emptyList.getRoot().setVisibility(View.GONE); @@ -197,6 +202,8 @@ protected void onResume() { Log_OC.v(TAG, "onResume() start"); super.onResume(); + setNavigationViewItemChecked(getCurrentActivityMenuItemId()); + // Listen for upload messages uploadMessagesReceiver = new UploadMessagesReceiver(); IntentFilter uploadIntentFilter = new IntentFilter(); diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/GalleryFragment.java b/app/src/main/java/com/owncloud/android/ui/fragment/GalleryFragment.java index cf1a649c2dc0..3f6574233840 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/GalleryFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/fragment/GalleryFragment.java @@ -96,6 +96,7 @@ public void onCreate(Bundle savedInstanceState) { } registerRefreshSearchEventReceiver(); + } private void registerRefreshSearchEventReceiver() { diff --git a/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.kt b/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.kt index 505951c20993..10a64ae5828b 100644 --- a/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.kt @@ -10,7 +10,6 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter -import android.graphics.drawable.ColorDrawable import android.os.Bundle import android.view.MenuItem import android.view.View @@ -100,7 +99,7 @@ class PreviewImageActivity : livePhotoFile = intent.getParcelableArgument(EXTRA_LIVE_PHOTO_FILE, OCFile::class.java) - setupDrawer() + setupDrawer(R.id.nav_gallery) val chosenFile = intent.getParcelableArgument(EXTRA_FILE, OCFile::class.java) @@ -125,6 +124,8 @@ class PreviewImageActivity : handleBackPress() } + override fun getCurrentActivityMenuItemId(): Int = R.id.nav_gallery + private fun applyDisplayCutOutTopPadding() { window.decorView.setOnApplyWindowInsetsListener { view, insets -> val displayCutout = insets.displayCutout @@ -383,6 +384,7 @@ class PreviewImageActivity : override fun onResume() { super.onResume() + setNavigationViewItemChecked(currentActivityMenuItemId) downloadFinishReceiver = DownloadFinishReceiver() val downloadIntentFilter = IntentFilter(getDownloadFinishMessage()) localBroadcastManager.registerReceiver(downloadFinishReceiver!!, downloadIntentFilter) diff --git a/app/src/main/java/com/owncloud/android/ui/trashbin/TrashbinActivity.kt b/app/src/main/java/com/owncloud/android/ui/trashbin/TrashbinActivity.kt index 3f770ebdebff..9ff1acaaeb0a 100644 --- a/app/src/main/java/com/owncloud/android/ui/trashbin/TrashbinActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/trashbin/TrashbinActivity.kt @@ -127,10 +127,17 @@ class TrashbinActivity : View.GONE updateActionBarTitleAndHomeButtonByString(getString(R.string.trashbin_activity_title)) - setupDrawer() + setupDrawer(R.id.nav_trashbin) handleBackPress() } + override fun getCurrentActivityMenuItemId(): Int = R.id.nav_trashbin + + override fun onResume() { + super.onResume() + setNavigationViewItemChecked(currentActivityMenuItemId) + } + override fun onStart() { super.onStart() @@ -293,8 +300,6 @@ class TrashbinActivity : } override fun onPause() { - menuItemId = getPreviousMenuItemId() - setNavigationViewItemChecked() super.onPause() active = false trashbinListAdapter?.cancelAllPendingTasks() From 27ab612ded43ace4d86caddda0e66f6a0cdde3da Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Fri, 16 Jan 2026 16:21:06 +0100 Subject: [PATCH 07/10] add docs Signed-off-by: alperozturk96 --- .../extensions/DrawerActivityExtensions.kt | 2 + .../extensions/NavigationViewExtensions.kt | 21 +++++++ .../android/ui/activity/DrawerActivity.java | 55 +++++++++++++++---- .../ui/activity/FileDisplayActivity.kt | 8 +++ 4 files changed, 75 insertions(+), 11 deletions(-) create mode 100644 app/src/main/java/com/nextcloud/utils/extensions/NavigationViewExtensions.kt diff --git a/app/src/main/java/com/nextcloud/utils/extensions/DrawerActivityExtensions.kt b/app/src/main/java/com/nextcloud/utils/extensions/DrawerActivityExtensions.kt index a4ded92ca8b3..ec8e1fd4989d 100644 --- a/app/src/main/java/com/nextcloud/utils/extensions/DrawerActivityExtensions.kt +++ b/app/src/main/java/com/nextcloud/utils/extensions/DrawerActivityExtensions.kt @@ -9,12 +9,14 @@ package com.nextcloud.utils.extensions import android.content.Intent import com.owncloud.android.MainApp +import com.owncloud.android.R import com.owncloud.android.ui.activity.DrawerActivity import com.owncloud.android.ui.activity.FileDisplayActivity fun DrawerActivity.navigateToAllFiles() { MainApp.showOnlyFilesOnDevice(false) MainApp.showOnlyPersonalFiles(false) + setNavigationViewItemChecked(R.id.nav_all_files) Intent(applicationContext, FileDisplayActivity::class.java).apply { addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) diff --git a/app/src/main/java/com/nextcloud/utils/extensions/NavigationViewExtensions.kt b/app/src/main/java/com/nextcloud/utils/extensions/NavigationViewExtensions.kt new file mode 100644 index 000000000000..1d9d2c58219d --- /dev/null +++ b/app/src/main/java/com/nextcloud/utils/extensions/NavigationViewExtensions.kt @@ -0,0 +1,21 @@ +/* + * Nextcloud - Android Client + * + * SPDX-FileCopyrightText: 2026 Alper Ozturk + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +package com.nextcloud.utils.extensions + +import android.view.Menu +import androidx.core.view.forEach +import com.google.android.material.navigation.NavigationView + +fun NavigationView.getSelectedMenuItemId(): Int { + menu.forEach { + if (it.isChecked) { + return it.itemId + } + } + return Menu.NONE +} diff --git a/app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java b/app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java index 3d1aea026150..5459fa7b2cac 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java +++ b/app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java @@ -65,7 +65,7 @@ import com.nextcloud.utils.GlideHelper; import com.nextcloud.utils.LinkHelper; import com.nextcloud.utils.extensions.ActivityExtensionsKt; -import com.nextcloud.utils.extensions.DrawerActivityExtensionsKt; +import com.nextcloud.utils.extensions.NavigationViewExtensionsKt; import com.nextcloud.utils.extensions.ViewExtensionsKt; import com.nextcloud.utils.mdm.MDMConfig; import com.owncloud.android.MainApp; @@ -197,6 +197,28 @@ public abstract class DrawerActivity extends ToolbarActivity private BottomNavigationView bottomNavigationView; private NavigationView drawerNavigationView; + /** + * Returns the navigation drawer menu item ID that represents + * the current activity. + * + *

+ * This method is used by the DrawerActivity to determine + * which drawer item should be highlighted (checked) when the + * activity is visible. + *

+ * + *

+ * Subclasses that are displayed within the drawer must override + * this method and return their corresponding menu item ID + * (e.g. R.id.nav_gallery, R.id.nav_settings). + *

+ * + *

+ * The default implementation returns {@link R.id#nav_all_files}. + *

+ * + * @return the menu item ID to be marked as selected in the drawer + */ protected int getCurrentActivityMenuItemId() { return R.id.nav_all_files; } @@ -258,7 +280,26 @@ protected void setupDrawer(int id) { } } - protected void setNavigationViewItemChecked(int menuItemId) { + /** + * Highlights (checks) the given menu item ID in the app's navigation bars. + * + *

+ * This method updates both the navigation drawer (`drawerNavigationView`) and + * the bottom navigation bar (`bottomNavigationView`). + *

+ * + *

+ * This method is needs to be called from onResume() of child activities with all possible menu item ids. + * This fixes: + *

    + *
  • When navigating back from another activity (e.g., Activity B → Activity A), + * the previously selected menu item remains highlighted.
  • + *
+ *

+ * + * @param menuItemId the ID of the menu item to mark as selected/highlighted + */ + public void setNavigationViewItemChecked(int menuItemId) { if (drawerNavigationView != null) { MenuItem menuItem = drawerNavigationView.getMenu().findItem(menuItemId); @@ -1434,15 +1475,7 @@ private int getSelectedMenuItemId() { return R.id.nav_all_files; } - Menu menu = drawerNavigationView.getMenu(); - for (int i = 0; i < menu.size(); i++) { - MenuItem item = menu.getItem(i); - if (item.isChecked()) { - return item.getItemId(); - } - } - - return Menu.NONE; + return NavigationViewExtensionsKt.getSelectedMenuItemId(drawerNavigationView); } public boolean isToolbarStyleSearch() { diff --git a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt index c6fd8e304913..555b52fb9616 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt @@ -282,6 +282,14 @@ class FileDisplayActivity : setupDrawer(R.id.nav_all_files) } + /** + * Determines which navigation drawer item should be selected. + * + * Resolution order: + * 1) Global app state (static flags in MainApp nav_personal and nav_on_device) + * 2) Currently visible fragment (and its active child) + * 3) Fallback to All Files + */ override fun getCurrentActivityMenuItemId(): Int = MainApp.getMenuItemId() ?: listOfFilesFragment?.menuItemId ?: R.id.nav_all_files From eb300585a79e5f816844c8c2b52d1045f532313e Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Fri, 16 Jan 2026 16:41:04 +0100 Subject: [PATCH 08/10] simplify Signed-off-by: alperozturk96 --- .../ui/composeActivity/ComposeActivity.kt | 4 ++-- .../extensions/DrawerActivityExtensions.kt | 2 +- .../extensions/NavigationViewExtensions.kt | 18 ++++++++++++++++++ .../ui/activities/ActivitiesActivity.java | 4 ++-- .../android/ui/activity/CommunityActivity.kt | 4 ++-- .../android/ui/activity/DrawerActivity.java | 19 +++++++++++++------ .../ui/activity/FileDisplayActivity.kt | 5 ++--- .../ui/activity/SyncedFoldersActivity.kt | 4 ++-- .../android/ui/activity/ToolbarActivity.java | 12 +++++------- .../ui/activity/UploadListActivity.java | 4 ++-- .../ui/preview/PreviewImageActivity.kt | 4 ++-- .../android/ui/trashbin/TrashbinActivity.kt | 4 ++-- 12 files changed, 53 insertions(+), 31 deletions(-) diff --git a/app/src/main/java/com/nextcloud/ui/composeActivity/ComposeActivity.kt b/app/src/main/java/com/nextcloud/ui/composeActivity/ComposeActivity.kt index 68fb66e90a6e..cad2b5683503 100644 --- a/app/src/main/java/com/nextcloud/ui/composeActivity/ComposeActivity.kt +++ b/app/src/main/java/com/nextcloud/ui/composeActivity/ComposeActivity.kt @@ -62,11 +62,11 @@ class ComposeActivity : DrawerActivity() { } } - override fun getCurrentActivityMenuItemId(): Int = R.id.nav_assistant + override fun getMenuItemId(): Int = R.id.nav_assistant override fun onResume() { super.onResume() - setNavigationViewItemChecked(currentActivityMenuItemId) + highlightNavigationViewItem(menuItemId) } private fun setupActivityUIFor(destination: ComposeDestination) { diff --git a/app/src/main/java/com/nextcloud/utils/extensions/DrawerActivityExtensions.kt b/app/src/main/java/com/nextcloud/utils/extensions/DrawerActivityExtensions.kt index ec8e1fd4989d..05fa689ea6b5 100644 --- a/app/src/main/java/com/nextcloud/utils/extensions/DrawerActivityExtensions.kt +++ b/app/src/main/java/com/nextcloud/utils/extensions/DrawerActivityExtensions.kt @@ -16,7 +16,7 @@ import com.owncloud.android.ui.activity.FileDisplayActivity fun DrawerActivity.navigateToAllFiles() { MainApp.showOnlyFilesOnDevice(false) MainApp.showOnlyPersonalFiles(false) - setNavigationViewItemChecked(R.id.nav_all_files) + highlightNavigationViewItem(R.id.nav_all_files) Intent(applicationContext, FileDisplayActivity::class.java).apply { addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) diff --git a/app/src/main/java/com/nextcloud/utils/extensions/NavigationViewExtensions.kt b/app/src/main/java/com/nextcloud/utils/extensions/NavigationViewExtensions.kt index 1d9d2c58219d..0cd6bbb3c2a7 100644 --- a/app/src/main/java/com/nextcloud/utils/extensions/NavigationViewExtensions.kt +++ b/app/src/main/java/com/nextcloud/utils/extensions/NavigationViewExtensions.kt @@ -9,6 +9,7 @@ package com.nextcloud.utils.extensions import android.view.Menu import androidx.core.view.forEach +import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.android.material.navigation.NavigationView fun NavigationView.getSelectedMenuItemId(): Int { @@ -19,3 +20,20 @@ fun NavigationView.getSelectedMenuItemId(): Int { } return Menu.NONE } + +fun NavigationView.unsetAllNavigationItems() { + uncheckMenu(menu) +} + +fun BottomNavigationView.unsetAllNavigationItems() { + uncheckMenu(menu) +} + +private fun uncheckMenu(menu: Menu) { + menu.forEach { item -> + item.isChecked = false + + // recursively uncheck submenu items + item.subMenu?.let { uncheckMenu(it) } + } +} diff --git a/app/src/main/java/com/owncloud/android/ui/activities/ActivitiesActivity.java b/app/src/main/java/com/owncloud/android/ui/activities/ActivitiesActivity.java index 8e1caa3c439c..df740eec674e 100644 --- a/app/src/main/java/com/owncloud/android/ui/activities/ActivitiesActivity.java +++ b/app/src/main/java/com/owncloud/android/ui/activities/ActivitiesActivity.java @@ -89,7 +89,7 @@ protected void onCreate(Bundle savedInstanceState) { } @Override - protected int getCurrentActivityMenuItemId() { + protected int getMenuItemId() { return R.id.nav_activity; } @@ -158,7 +158,7 @@ public boolean onOptionsItemSelected(MenuItem item) { @Override protected void onResume() { super.onResume(); - setNavigationViewItemChecked(getCurrentActivityMenuItemId()); + highlightNavigationViewItem(getMenuItemId()); actionListener.onResume(); setupContent(); } diff --git a/app/src/main/java/com/owncloud/android/ui/activity/CommunityActivity.kt b/app/src/main/java/com/owncloud/android/ui/activity/CommunityActivity.kt index 280534f99a9a..6985fe889789 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/CommunityActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/activity/CommunityActivity.kt @@ -39,11 +39,11 @@ open class CommunityActivity : DrawerActivity() { setOnClickListeners() } - override fun getCurrentActivityMenuItemId(): Int = R.id.nav_community + override fun getMenuItemId(): Int = R.id.nav_community override fun onResume() { super.onResume() - setNavigationViewItemChecked(currentActivityMenuItemId) + highlightNavigationViewItem(menuItemId) } private fun setupContributeForumView() { diff --git a/app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java b/app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java index 5459fa7b2cac..d65a85407d77 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java +++ b/app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java @@ -219,7 +219,7 @@ public abstract class DrawerActivity extends ToolbarActivity * * @return the menu item ID to be marked as selected in the drawer */ - protected int getCurrentActivityMenuItemId() { + protected int getMenuItemId() { return R.id.nav_all_files; } @@ -259,7 +259,7 @@ protected void setupDrawer(int id) { setupDrawerMenu(drawerNavigationView); getAndDisplayUserQuota(); setupQuotaElement(); - setNavigationViewItemChecked(id); + highlightNavigationViewItem(id); } setupDrawerToggle(); @@ -276,7 +276,7 @@ protected void setupDrawer(int id) { themeBottomNavigationMenu(); checkAssistantBottomNavigationMenu(); handleBottomNavigationViewClicks(); - setNavigationViewItemChecked(id); + highlightNavigationViewItem(id); } } @@ -299,8 +299,9 @@ protected void setupDrawer(int id) { * * @param menuItemId the ID of the menu item to mark as selected/highlighted */ - public void setNavigationViewItemChecked(int menuItemId) { + public void highlightNavigationViewItem(int menuItemId) { if (drawerNavigationView != null) { + NavigationViewExtensionsKt.unsetAllNavigationItems(drawerNavigationView); MenuItem menuItem = drawerNavigationView.getMenu().findItem(menuItemId); if (menuItem != null && !menuItem.isChecked()) { @@ -309,6 +310,7 @@ public void setNavigationViewItemChecked(int menuItemId) { } if (bottomNavigationView != null) { + NavigationViewExtensionsKt.unsetAllNavigationItems(bottomNavigationView); MenuItem menuItem = bottomNavigationView.getMenu().findItem(menuItemId); // Don't highlight assistant bottom navigation item because Assistant screen doesn't have same bottom navigation bar @@ -667,8 +669,10 @@ private void onNavigationItemClicked(final MenuItem menuItem) { } } + // from navigation user always sees root level resetFileDepth(); - setNavigationViewItemChecked(itemId); + + highlightNavigationViewItem(itemId); } @SuppressFBWarnings("RV") @@ -699,8 +703,10 @@ private void handleBottomNavigationViewClicks() { getSupportActionBar().setIcon(null); } + // from navigation user always sees root level resetFileDepth(); - setNavigationViewItemChecked(menuItemId); + + highlightNavigationViewItem(menuItemId); return false; }); } @@ -1157,6 +1163,7 @@ protected void onSaveInstanceState(@NonNull Bundle outState) { public void onRestoreInstanceState(@NonNull Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); mIsAccountChooserActive = savedInstanceState.getBoolean(KEY_IS_ACCOUNT_CHOOSER_ACTIVE, false); + highlightNavigationViewItem(getSelectedMenuItemId()); } @Override diff --git a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt index 555b52fb9616..184a53c06529 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt @@ -290,8 +290,7 @@ class FileDisplayActivity : * 2) Currently visible fragment (and its active child) * 3) Fallback to All Files */ - override fun getCurrentActivityMenuItemId(): Int = - MainApp.getMenuItemId() ?: listOfFilesFragment?.menuItemId ?: R.id.nav_all_files + override fun getMenuItemId(): Int = MainApp.getMenuItemId() ?: listOfFilesFragment?.menuItemId ?: R.id.nav_all_files private fun loadSavedInstanceState(savedInstanceState: Bundle?) { if (savedInstanceState != null) { @@ -1338,7 +1337,7 @@ class FileDisplayActivity : super.onResume() - setNavigationViewItemChecked(currentActivityMenuItemId) + highlightNavigationViewItem(menuItemId) if (SettingsActivity.isBackPressed) { Log_OC.d(TAG, "User returned from settings activity, skipping reset content logic") diff --git a/app/src/main/java/com/owncloud/android/ui/activity/SyncedFoldersActivity.kt b/app/src/main/java/com/owncloud/android/ui/activity/SyncedFoldersActivity.kt index b1263d7b1cae..952fcf9f4b0e 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/SyncedFoldersActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/activity/SyncedFoldersActivity.kt @@ -200,11 +200,11 @@ class SyncedFoldersActivity : setupStoragePermissionWarningBanner() } - override fun getCurrentActivityMenuItemId(): Int = R.id.nav_settings + override fun getMenuItemId(): Int = R.id.nav_settings override fun onResume() { super.onResume() - setNavigationViewItemChecked(currentActivityMenuItemId) + highlightNavigationViewItem(menuItemId) } fun setupStoragePermissionWarningBanner() { diff --git a/app/src/main/java/com/owncloud/android/ui/activity/ToolbarActivity.java b/app/src/main/java/com/owncloud/android/ui/activity/ToolbarActivity.java index 1b77bdc1d0c4..3ca1b561941e 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/ToolbarActivity.java +++ b/app/src/main/java/com/owncloud/android/ui/activity/ToolbarActivity.java @@ -186,14 +186,12 @@ private SearchType getSearchType() { final OCFileListFragment fragment = getOCFileListFragment(); // if current navigation not matches, reset search event - if (this instanceof DrawerActivity drawerActivity) { - if (!drawerActivity.isMenuItemIdBelongsToSearchType()) { - if (fragment != null) { - fragment.resetSearchAttributes(); - } - - return SearchType.NO_SEARCH; + if (this instanceof DrawerActivity drawerActivity && !drawerActivity.isMenuItemIdBelongsToSearchType()) { + if (fragment != null) { + fragment.resetSearchAttributes(); } + + return SearchType.NO_SEARCH; } if (fragment != null) { diff --git a/app/src/main/java/com/owncloud/android/ui/activity/UploadListActivity.java b/app/src/main/java/com/owncloud/android/ui/activity/UploadListActivity.java index b0723c5b99bf..e5a70064fe57 100755 --- a/app/src/main/java/com/owncloud/android/ui/activity/UploadListActivity.java +++ b/app/src/main/java/com/owncloud/android/ui/activity/UploadListActivity.java @@ -142,7 +142,7 @@ private void observeWorkerState() { } @Override - protected int getCurrentActivityMenuItemId() { + protected int getMenuItemId() { return R.id.nav_uploads; } @@ -202,7 +202,7 @@ protected void onResume() { Log_OC.v(TAG, "onResume() start"); super.onResume(); - setNavigationViewItemChecked(getCurrentActivityMenuItemId()); + highlightNavigationViewItem(getMenuItemId()); // Listen for upload messages uploadMessagesReceiver = new UploadMessagesReceiver(); diff --git a/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.kt b/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.kt index 10a64ae5828b..bec627f7f774 100644 --- a/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.kt @@ -124,7 +124,7 @@ class PreviewImageActivity : handleBackPress() } - override fun getCurrentActivityMenuItemId(): Int = R.id.nav_gallery + override fun getMenuItemId(): Int = R.id.nav_gallery private fun applyDisplayCutOutTopPadding() { window.decorView.setOnApplyWindowInsetsListener { view, insets -> @@ -384,7 +384,7 @@ class PreviewImageActivity : override fun onResume() { super.onResume() - setNavigationViewItemChecked(currentActivityMenuItemId) + highlightNavigationViewItem(menuItemId) downloadFinishReceiver = DownloadFinishReceiver() val downloadIntentFilter = IntentFilter(getDownloadFinishMessage()) localBroadcastManager.registerReceiver(downloadFinishReceiver!!, downloadIntentFilter) diff --git a/app/src/main/java/com/owncloud/android/ui/trashbin/TrashbinActivity.kt b/app/src/main/java/com/owncloud/android/ui/trashbin/TrashbinActivity.kt index 9ff1acaaeb0a..99457a849cef 100644 --- a/app/src/main/java/com/owncloud/android/ui/trashbin/TrashbinActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/trashbin/TrashbinActivity.kt @@ -131,11 +131,11 @@ class TrashbinActivity : handleBackPress() } - override fun getCurrentActivityMenuItemId(): Int = R.id.nav_trashbin + override fun getMenuItemId(): Int = R.id.nav_trashbin override fun onResume() { super.onResume() - setNavigationViewItemChecked(currentActivityMenuItemId) + highlightNavigationViewItem(menuItemId) } override fun onStart() { From 0fad908fe4b529d60dca80bc4404f9ca55f6b346 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Mon, 19 Jan 2026 14:33:18 +0100 Subject: [PATCH 09/10] fix(oc-file-list-fragment): bundle to display correct file list Signed-off-by: alperozturk96 --- .../ui/activity/FileDisplayActivity.kt | 15 +++---------- .../owncloud/android/ui/events/SearchEvent.kt | 22 +++++++++++++++++-- .../ui/fragment/OCFileListFragment.java | 2 +- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt index 184a53c06529..da458a3839ab 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt @@ -631,31 +631,22 @@ class FileDisplayActivity : when (searchEvent.searchType) { SearchRemoteOperation.SearchType.PHOTO_SEARCH -> { Log_OC.d(this, "Switch to photo search fragment") - val bundle = Bundle().apply { - putParcelable(OCFileListFragment.SEARCH_EVENT, searchEvent) - } leftFragment = GalleryFragment().apply { - arguments = bundle + arguments = searchEvent.getBundle() } } SearchRemoteOperation.SearchType.SHARED_FILTER -> { Log_OC.d(this, "Switch to shared fragment") - val bundle = Bundle().apply { - putParcelable(OCFileListFragment.SEARCH_EVENT, searchEvent) - } leftFragment = SharedListFragment().apply { - arguments = bundle + arguments = searchEvent.getBundle() } } else -> { Log_OC.d(this, "Switch to oc file search fragment") - val bundle = Bundle().apply { - putParcelable(OCFileListFragment.SEARCH_EVENT, searchEvent) - } leftFragment = OCFileListFragment().apply { - arguments = bundle + arguments = searchEvent.getBundle() } } } diff --git a/app/src/main/java/com/owncloud/android/ui/events/SearchEvent.kt b/app/src/main/java/com/owncloud/android/ui/events/SearchEvent.kt index 7fd6aab7cdab..c0baa03e7f64 100644 --- a/app/src/main/java/com/owncloud/android/ui/events/SearchEvent.kt +++ b/app/src/main/java/com/owncloud/android/ui/events/SearchEvent.kt @@ -7,15 +7,25 @@ */ package com.owncloud.android.ui.events +import android.os.Bundle import android.os.Parcelable import com.owncloud.android.lib.resources.files.SearchRemoteOperation +import com.owncloud.android.ui.fragment.OCFileListFragment import com.owncloud.android.ui.fragment.SearchType import kotlinx.parcelize.Parcelize /** - * Search event + * Represents a search or filter request for [com.owncloud.android.ui.fragment.OCFileListFragment]. + * + * Used to pass search state via fragment arguments and to keep the UI + * (navigation drawer, empty states) in sync with search behavior. + * + * This class bridges {@link SearchRemoteOperation.SearchType} values + * with UI-level {@link SearchType} used by the file list and drawer highlighting. + * + * @property searchQuery the query string for the search (may be empty) + * @property searchType the search type defining the search behavior */ - @Parcelize data class SearchEvent(val searchQuery: String, val searchType: SearchRemoteOperation.SearchType) : Parcelable { fun toSearchType(): SearchType? = when (searchType) { @@ -25,4 +35,12 @@ data class SearchEvent(val searchQuery: String, val searchType: SearchRemoteOper SearchRemoteOperation.SearchType.SHARED_FILTER -> SearchType.SHARED_FILTER else -> null } + + /** + * Creates a bundle for initializing {@link OCFileListFragment} with this search. + */ + fun getBundle(): Bundle = Bundle().apply { + putParcelable(OCFileListFragment.SEARCH_EVENT, this@SearchEvent) + putParcelable(OCFileListFragment.KEY_CURRENT_SEARCH_TYPE, toSearchType()) + } } diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java index cfe5f17f3f57..45bc80ea099e 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java @@ -186,7 +186,7 @@ public class OCFileListFragment extends ExtendedListFragment implements public static final String SEARCH_EVENT = "SEARCH_EVENT"; private static final String KEY_FILE = MY_PACKAGE + ".extra.FILE"; - protected static final String KEY_CURRENT_SEARCH_TYPE = "CURRENT_SEARCH_TYPE"; + public static final String KEY_CURRENT_SEARCH_TYPE = "CURRENT_SEARCH_TYPE"; private static final String DIALOG_CREATE_FOLDER = "DIALOG_CREATE_FOLDER"; private static final String DIALOG_CREATE_DOCUMENT = "DIALOG_CREATE_DOCUMENT"; From 23e8efac4dcb5f2f3a34424f355fab8d1a6536d4 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Wed, 21 Jan 2026 10:54:50 +0100 Subject: [PATCH 10/10] fix git conflict Signed-off-by: alperozturk96 --- .../ui/fragment/OCFileListFragment.java | 35 +++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java index 45bc80ea099e..4d3d5b4e72a3 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java @@ -2218,6 +2218,38 @@ public void setFabEnabled(final boolean enabled) { } } + /** + * Returns the navigation drawer menu item corresponding to this fragment. + * + *

+ * OCFileListFragment is the parent for GalleryFragment, SharedListFragment, + * and GroupfolderListFragment. It also internally handles listing favorites, + * shared files, or recently modified items via search events. This method + * checks the current fragment type and search state to give correct drawer menu ID. + *

+ * + * @return the menu item ID to highlight in the navigation drawer + */ + public int getMenuItemId() { + // getMenuItemId will be called from onResume of FileDisplayActivity before checking menu item id + // search argument needs to be set if exists + setSearchArgs(getArguments()); + + if (getClass() == GalleryFragment.class) { + return R.id.nav_gallery; + } else if (getClass() == SharedListFragment.class || isSearchEventShared() || currentSearchType == SHARED_FILTER) { + return R.id.nav_shared; + } else if (getClass() == GroupfolderListFragment.class || currentSearchType == SearchType.GROUPFOLDER) { + return R.id.nav_groupfolders; + } else if (isSearchEventFavorite() || currentSearchType == FAVORITE_SEARCH) { + return R.id.nav_favorites; + } else if (currentSearchType == RECENTLY_MODIFIED_SEARCH) { + return R.id.nav_recently_modified; + } else { + return R.id.nav_all_files; + } + } + public boolean isEmpty() { return mAdapter == null || mAdapter.isEmpty(); } @@ -2244,7 +2276,6 @@ private boolean isSearchEvent(SearchRemoteOperation.SearchType givenEvent) { public boolean shouldNavigateBackToAllFiles() { return this instanceof GalleryFragment || isSearchEventFavorite() || - isSearchEventShared() || - DrawerActivity.menuItemId == R.id.nav_favorites; + isSearchEventShared(); } }