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();
}
}