From 4f0c78ab451102beb7bff4f0b110fe38022fe883 Mon Sep 17 00:00:00 2001
From: alperozturk96
Date: Tue, 13 Jan 2026 13:04:49 +0100
Subject: [PATCH 01/23] 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 79925570bbac..e3df5d399539 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
@@ -812,6 +812,7 @@ class FileDisplayActivity :
protected fun resetScrollingAndUpdateActionBar() {
updateActionBarTitleAndHomeButton(file)
+ binding.appbar.appbar.setExpanded(true, false)
resetScrolling(true)
}
@@ -1391,6 +1392,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 71d7edc529d23872ef7daadd665c4507b1ebf952 Mon Sep 17 00:00:00 2001
From: alperozturk96
Date: Tue, 13 Jan 2026 13:55:38 +0100
Subject: [PATCH 02/23] 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 e3df5d399539..90976b5f71b3 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
@@ -812,7 +812,6 @@ class FileDisplayActivity :
protected fun resetScrollingAndUpdateActionBar() {
updateActionBarTitleAndHomeButton(file)
- binding.appbar.appbar.setExpanded(true, false)
resetScrolling(true)
}
From ff6ac72693d2bcc4c7e4f4d6c6a22eafb3099ff1 Mon Sep 17 00:00:00 2001
From: alperozturk96
Date: Tue, 13 Jan 2026 16:15:33 +0100
Subject: [PATCH 03/23] 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 90976b5f71b3..79925570bbac 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
@@ -1391,8 +1391,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 fa338e576804fef110de9d6a4613071bd4965a58 Mon Sep 17 00:00:00 2001
From: alperozturk96
Date: Wed, 14 Jan 2026 09:59:36 +0100
Subject: [PATCH 04/23] 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 2ec6eaae371db12d6bfe216979701261dc1db3ad Mon Sep 17 00:00:00 2001
From: alperozturk96
Date: Wed, 14 Jan 2026 09:59:44 +0100
Subject: [PATCH 05/23] 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 7e4b1e7447af54222a086244821b2a1abea34ac8 Mon Sep 17 00:00:00 2001
From: alperozturk96
Date: Fri, 16 Jan 2026 16:02:08 +0100
Subject: [PATCH 06/23] centralize menu item id usage
Signed-off-by: alperozturk96
# Conflicts:
# app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java
# Conflicts:
# app/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.kt
---
.../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 +
.../android/ui/trashbin/TrashbinActivity.kt | 11 +-
14 files changed, 147 insertions(+), 155 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 d7d1c0a75bc4..4a337915ea41 100644
--- a/app/src/main/java/com/nextcloud/ui/composeActivity/ComposeActivity.kt
+++ b/app/src/main/java/com/nextcloud/ui/composeActivity/ComposeActivity.kt
@@ -80,9 +80,16 @@ class ComposeActivity : DrawerActivity() {
composeViewModel.updateSelectedText(text.toString())
}
+ 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 79925570bbac..cb0a0d3e6d04 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
@@ -278,8 +278,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 =
@@ -310,8 +314,6 @@ class FileDisplayActivity :
// reset ui states when file display activity created/recrated
listOfFilesFragment?.resetSearchAttributes()
- menuItemId = R.id.nav_all_files
- setNavigationViewItemChecked()
}
private fun initTaskRetainerFragment() {
@@ -390,7 +392,6 @@ class FileDisplayActivity :
) != null
) {
switchToSearchFragment(savedInstanceState)
- setupDrawer()
} else {
createMinFragments(savedInstanceState)
}
@@ -565,7 +566,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,
@@ -582,7 +582,6 @@ class FileDisplayActivity :
LIST_GROUPFOLDERS == action -> {
Log_OC.d(this, "Switch to list groupfolders fragment")
- menuItemId = R.id.nav_groupfolders
leftFragment = GroupfolderListFragment()
supportFragmentManager.executePendingTransactions()
}
@@ -1264,7 +1263,6 @@ class FileDisplayActivity :
}
resetScrollingAndUpdateActionBar()
- configureMenuItem()
startMetadataSyncForCurrentDir()
}
@@ -1330,6 +1328,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
@@ -1367,8 +1368,6 @@ class FileDisplayActivity :
updateActionBarTitleAndHomeButton(startFile)
}
- configureMenuItem()
-
// show in-app review dialog to user
inAppReviewHelper.showInAppReview(this)
@@ -1386,21 +1385,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")
@@ -2857,7 +2841,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 7cd2b526c49b..2960c923ba40 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
@@ -120,11 +120,16 @@ protected void onCreate(Bundle savedInstanceState) {
updateActionBarTitleAndHomeButtonByString(getString(R.string.uploads_view_title));
// setup drawer
- setupDrawer();
+ setupDrawer(R.id.nav_uploads);
setupContent();
}
+ @Override
+ protected int getCurrentActivityMenuItemId() {
+ return R.id.nav_uploads;
+ }
+
private void setupContent() {
binding.list.setEmptyView(binding.emptyList.getRoot());
binding.emptyList.getRoot().setVisibility(View.GONE);
@@ -181,6 +186,8 @@ protected void onStart() {
Log_OC.v(TAG, "onStart() start");
super.onStart();
+ setNavigationViewItemChecked(getCurrentActivityMenuItemId());
+
// Listen for upload messages
uploadFinishReceiver = new UploadFinishReceiver();
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/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 4e57d6ddc9e3419f0aef45b99a3984a00e3d3822 Mon Sep 17 00:00:00 2001
From: alperozturk96
Date: Fri, 16 Jan 2026 16:21:06 +0100
Subject: [PATCH 07/23] 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 cb0a0d3e6d04..7ce03a2b7fe1 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
@@ -281,6 +281,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 6fb301c7286ad3330eff65ffe00678effa2672bc Mon Sep 17 00:00:00 2001
From: alperozturk96
Date: Fri, 16 Jan 2026 16:41:04 +0100
Subject: [PATCH 08/23] 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 ++--
.../android/ui/trashbin/TrashbinActivity.kt | 4 ++--
11 files changed, 51 insertions(+), 29 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 4a337915ea41..0b81a298e4d1 100644
--- a/app/src/main/java/com/nextcloud/ui/composeActivity/ComposeActivity.kt
+++ b/app/src/main/java/com/nextcloud/ui/composeActivity/ComposeActivity.kt
@@ -80,11 +80,11 @@ class ComposeActivity : DrawerActivity() {
composeViewModel.updateSelectedText(text.toString())
}
- 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 7ce03a2b7fe1..0ae83ac23e3a 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
@@ -289,8 +289,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) {
@@ -1337,7 +1336,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 2960c923ba40..eb7ed31a12ec 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
@@ -126,7 +126,7 @@ protected void onCreate(Bundle savedInstanceState) {
}
@Override
- protected int getCurrentActivityMenuItemId() {
+ protected int getMenuItemId() {
return R.id.nav_uploads;
}
@@ -186,7 +186,7 @@ protected void onStart() {
Log_OC.v(TAG, "onStart() start");
super.onStart();
- setNavigationViewItemChecked(getCurrentActivityMenuItemId());
+ highlightNavigationViewItem(getMenuItemId());
// Listen for upload messages
uploadFinishReceiver = new UploadFinishReceiver();
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 bfd73bae5bc8cd021e09c9b66fc4812b5b421cce Mon Sep 17 00:00:00 2001
From: alperozturk96
Date: Mon, 19 Jan 2026 14:33:18 +0100
Subject: [PATCH 09/23] 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 0ae83ac23e3a..a5a818d0f6e0 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
@@ -630,31 +630,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 a37f2915731f03dd1bfc4dba64f3e4a8680925e8 Mon Sep 17 00:00:00 2001
From: alperozturk96
Date: Wed, 21 Jan 2026 10:54:50 +0100
Subject: [PATCH 10/23] 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();
}
}
From 84a877ba02408b1ab085b5d576682e2df3db34c3 Mon Sep 17 00:00:00 2001
From: alperozturk96
Date: Wed, 28 Jan 2026 16:32:12 +0100
Subject: [PATCH 11/23] fix multiple list directory calls when switching
fragments
Signed-off-by: alperozturk96
---
.../android/ui/activity/DrawerActivity.java | 9 +++---
.../ui/activity/FileDisplayActivity.kt | 2 +-
.../ui/fragment/OCFileListFragment.java | 29 ++++++++++++++++---
3 files changed, 30 insertions(+), 10 deletions(-)
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 d65a85407d77..4cdfb4d939ad 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.NavigationViewExtensionsKt;
import com.nextcloud.utils.extensions.ViewExtensionsKt;
import com.nextcloud.utils.mdm.MDMConfig;
@@ -682,12 +683,10 @@ private void handleBottomNavigationViewClicks() {
exitSelectionMode();
resetOnlyPersonalAndOnDevice();
+ // TODO: remove duplication of all files logic
if (menuItemId == R.id.nav_all_files) {
- showFiles(false,false);
- if (this instanceof FileDisplayActivity fda) {
- fda.browseToRoot();
- }
- EventBus.getDefault().post(new ChangeMenuEvent());
+ DrawerActivityExtensionsKt.navigateToAllFiles(this);
+ EventBus.getDefault().post(new ChangeMenuEvent()); // TODO: menu event already sets action bar style?
setupHomeSearchToolbarWithSortAndListButtons();
updateActionBarTitleAndHomeButton(null);
} else if (menuItemId == R.id.nav_favorites) {
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 a5a818d0f6e0..e9a9a0c8ade2 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
@@ -1802,7 +1802,7 @@ class FileDisplayActivity :
val listOfFiles = this.listOfFilesFragment
if (listOfFiles != null) { // should never be null, indeed
val root = storageManager.getFileByPath(OCFile.ROOT_PATH)
- listOfFiles.listDirectory(root, MainApp.isOnlyOnDevice())
+ listOfFiles.resetSearchAttributes()
file = listOfFiles.currentFile
startSyncFolderOperation(root, false)
}
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 4d3d5b4e72a3..9e281b9b27f8 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
@@ -119,6 +119,7 @@
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
+import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.util.ArrayList;
@@ -128,6 +129,7 @@
import java.util.List;
import java.util.Objects;
import java.util.Set;
+import java.util.function.Consumer;
import javax.inject.Inject;
@@ -386,7 +388,11 @@ public void onPause() {
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Log_OC.i(TAG, "onActivityCreated() start");
+ prepareOCFileList(savedInstanceState);
+ //listDirectory(MainApp.isOnlyOnDevice());
+ }
+ public void prepareOCFileList(Bundle savedInstanceState) {
if (savedInstanceState != null) {
mFile = BundleExtensionsKt.getParcelableArgument(savedInstanceState, KEY_FILE, OCFile.class);
}
@@ -442,7 +448,6 @@ public void onActivityCreated(Bundle savedInstanceState) {
if (getActivity() instanceof FileDisplayActivity fda) {
fda.updateActionBarTitleAndHomeButton(fda.getCurrentDir());
}
- listDirectory(MainApp.isOnlyOnDevice());
}
protected void setAdapter(Bundle args) {
@@ -1476,6 +1481,14 @@ public void refreshDirectory() {
}
public void listDirectory(@Nullable OCFile directory, boolean onlyOnDevice) {
+ for (StackTraceElement element : Thread.currentThread().getStackTrace()) {
+ Log_OC.d("TEKNOLOJI",
+ element.getClassName() + "." + element.getMethodName() +
+ " (" + element.getLineNumber() + ")"
+ );
+
+ }
+
listDirectory(directory, null, onlyOnDevice);
}
@@ -1513,17 +1526,17 @@ public void listDirectory(@Nullable OCFile directory, OCFile file, boolean onlyO
directory = getDirectoryForListDirectory(directory, storageManager);
if (directory == null) {
- Log_OC.d(TAG, "directory is null, no files, wait for sync");
+ Log_OC.e(TAG, "directory is null, no files, wait for sync");
return;
}
if (mLimitToMimeType == null) {
- Log_OC.d(TAG, "mLimitToMimeType is null");
+ Log_OC.w(TAG, "mLimitToMimeType is null");
return;
}
if (mAdapter == null) {
- Log_OC.d(TAG, "mAdapter is null");
+ Log_OC.e(TAG, "❗" + "oc file list adapter is null, cannot list directory" + "❗");
return;
}
@@ -1863,6 +1876,14 @@ protected void handleSearchEvent(SearchEvent event) {
return;
}
+ final var activity = getActivity();
+ if (activity != null) {
+ activity.runOnUiThread(() -> {{
+ getAdapter().removeAllFiles();
+ setEmptyListMessage(EmptyListState.LOADING);
+ }});
+ }
+
prepareCurrentSearch(event);
searchFragment = true;
setFabVisible(false);
From 96196702bb940fdfcf527f101a80750ab9383aee Mon Sep 17 00:00:00 2001
From: alperozturk96
Date: Thu, 29 Jan 2026 09:23:46 +0100
Subject: [PATCH 12/23] fix multiple list directory calls when switching
fragments
Signed-off-by: alperozturk96
---
.../extensions/DrawerActivityExtensions.kt | 5 ++--
.../android/ui/activity/DrawerActivity.java | 30 ++-----------------
.../ui/fragment/OCFileListFragment.java | 14 ++-------
3 files changed, 9 insertions(+), 40 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 05fa689ea6b5..93f5c8cceb54 100644
--- a/app/src/main/java/com/nextcloud/utils/extensions/DrawerActivityExtensions.kt
+++ b/app/src/main/java/com/nextcloud/utils/extensions/DrawerActivityExtensions.kt
@@ -13,9 +13,10 @@ import com.owncloud.android.R
import com.owncloud.android.ui.activity.DrawerActivity
import com.owncloud.android.ui.activity.FileDisplayActivity
-fun DrawerActivity.navigateToAllFiles() {
+@JvmOverloads
+fun DrawerActivity.navigateToAllFiles(onlyPersonal: Boolean = false) {
MainApp.showOnlyFilesOnDevice(false)
- MainApp.showOnlyPersonalFiles(false)
+ MainApp.showOnlyPersonalFiles(onlyPersonal)
highlightNavigationViewItem(R.id.nav_all_files)
Intent(applicationContext, FileDisplayActivity::class.java).apply {
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 4cdfb4d939ad..280f576728db 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
@@ -94,11 +94,7 @@
import com.owncloud.android.ui.events.ChangeMenuEvent;
import com.owncloud.android.ui.events.SearchEvent;
import com.owncloud.android.ui.fragment.FileDetailsSharingProcessFragment;
-import com.owncloud.android.ui.fragment.GalleryFragment;
-import com.owncloud.android.ui.fragment.GroupfolderListFragment;
import com.owncloud.android.ui.fragment.OCFileListFragment;
-import com.owncloud.android.ui.fragment.SharedListFragment;
-import com.owncloud.android.ui.preview.PreviewTextStringFragment;
import com.owncloud.android.ui.trashbin.TrashbinActivity;
import com.owncloud.android.utils.BitmapUtils;
import com.owncloud.android.utils.DisplayUtils;
@@ -596,26 +592,9 @@ private void onNavigationItemClicked(final MenuItem menuItem) {
int itemId = menuItem.getItemId();
if (itemId == R.id.nav_all_files || itemId == R.id.nav_personal_files) {
- if (this instanceof FileDisplayActivity fda &&
- !(fda.getLeftFragment() instanceof GalleryFragment) &&
- !(fda.getLeftFragment() instanceof SharedListFragment) &&
- !(fda.getLeftFragment() instanceof GroupfolderListFragment) &&
- !(fda.getLeftFragment() instanceof PreviewTextStringFragment)) {
- showFiles(false, itemId == R.id.nav_personal_files);
- fda.browseToRoot();
- EventBus.getDefault().post(new ChangeMenuEvent());
- } else {
- MainApp.showOnlyFilesOnDevice(false);
- MainApp.showOnlyPersonalFiles(itemId == R.id.nav_personal_files);
- Intent intent = new Intent(getApplicationContext(), FileDisplayActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- intent.setAction(FileDisplayActivity.ALL_FILES);
- startActivity(intent);
- }
-
closeDrawer();
- setupHomeSearchToolbarWithSortAndListButtons();
- updateActionBarTitleAndHomeButton(null);
+ DrawerActivityExtensionsKt.navigateToAllFiles(this);
+ EventBus.getDefault().post(new ChangeMenuEvent());
} else if (itemId == R.id.nav_favorites) {
openFavoritesTab();
} else if (itemId == R.id.nav_gallery) {
@@ -683,12 +662,9 @@ private void handleBottomNavigationViewClicks() {
exitSelectionMode();
resetOnlyPersonalAndOnDevice();
- // TODO: remove duplication of all files logic
if (menuItemId == R.id.nav_all_files) {
DrawerActivityExtensionsKt.navigateToAllFiles(this);
- EventBus.getDefault().post(new ChangeMenuEvent()); // TODO: menu event already sets action bar style?
- setupHomeSearchToolbarWithSortAndListButtons();
- updateActionBarTitleAndHomeButton(null);
+ EventBus.getDefault().post(new ChangeMenuEvent());
} else if (menuItemId == R.id.nav_favorites) {
openFavoritesTab();
} else if (menuItemId == R.id.nav_assistant && !(this instanceof ComposeActivity)) {
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 9e281b9b27f8..feaf40df117a 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
@@ -119,7 +119,6 @@
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
-import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.util.ArrayList;
@@ -129,7 +128,6 @@
import java.util.List;
import java.util.Objects;
import java.util.Set;
-import java.util.function.Consumer;
import javax.inject.Inject;
@@ -389,7 +387,6 @@ public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Log_OC.i(TAG, "onActivityCreated() start");
prepareOCFileList(savedInstanceState);
- //listDirectory(MainApp.isOnlyOnDevice());
}
public void prepareOCFileList(Bundle savedInstanceState) {
@@ -1481,14 +1478,6 @@ public void refreshDirectory() {
}
public void listDirectory(@Nullable OCFile directory, boolean onlyOnDevice) {
- for (StackTraceElement element : Thread.currentThread().getStackTrace()) {
- Log_OC.d("TEKNOLOJI",
- element.getClassName() + "." + element.getMethodName() +
- " (" + element.getLineNumber() + ")"
- );
-
- }
-
listDirectory(directory, null, onlyOnDevice);
}
@@ -1791,12 +1780,15 @@ protected void setEmptyView(SearchEvent event) {
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(ChangeMenuEvent changeMenuEvent) {
+ Log_OC.d(TAG, "event bus --- change menu event triggered");
+
resetSearchAttributes();
resetMenuItems();
if (getActivity() instanceof FileDisplayActivity fda) {
fda.invalidateOptionsMenu();
fda.getIntent().removeExtra(OCFileListFragment.SEARCH_EVENT);
+ fda.setupHomeSearchToolbarWithSortAndListButtons();
fda.updateActionBarTitleAndHomeButton(null);
}
From bda3b4755754fc9c7ff7c4142a5e8245219d0d47 Mon Sep 17 00:00:00 2001
From: alperozturk96
Date: Thu, 29 Jan 2026 09:33:49 +0100
Subject: [PATCH 13/23] fix multiple list directory calls when switching
fragments
Signed-off-by: alperozturk96
---
.../com/owncloud/android/ui/fragment/OCFileListFragment.java | 1 +
1 file changed, 1 insertion(+)
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 feaf40df117a..21ee7513118c 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
@@ -387,6 +387,7 @@ public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Log_OC.i(TAG, "onActivityCreated() start");
prepareOCFileList(savedInstanceState);
+ listDirectory(MainApp.isOnlyOnDevice());
}
public void prepareOCFileList(Bundle savedInstanceState) {
From a90618245aa0da80761f068cc84e488c98a79564 Mon Sep 17 00:00:00 2001
From: alperozturk96
Date: Thu, 29 Jan 2026 09:34:35 +0100
Subject: [PATCH 14/23] fix multiple list directory calls when switching
fragments
Signed-off-by: alperozturk96
---
.../com/owncloud/android/ui/activity/FileDisplayActivity.kt | 2 ++
1 file changed, 2 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 e9a9a0c8ade2..04c4a6c8d488 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
@@ -82,6 +82,7 @@ import com.nextcloud.utils.extensions.lastFragment
import com.nextcloud.utils.extensions.logFileSize
import com.nextcloud.utils.extensions.navigateToAllFiles
import com.nextcloud.utils.extensions.observeWorker
+import com.nextcloud.utils.extensions.showToast
import com.nextcloud.utils.fileNameValidator.FileNameValidator.checkFolderPath
import com.nextcloud.utils.view.FastScrollUtils
import com.owncloud.android.MainApp
@@ -279,6 +280,7 @@ class FileDisplayActivity :
startMetadataSyncForRoot()
handleBackPress()
setupDrawer(R.id.nav_all_files)
+ showToast("TEST APK")
}
/**
From db7aa2b35a62f2b4a38973b19509b29c28d924a1 Mon Sep 17 00:00:00 2001
From: alperozturk96
Date: Fri, 30 Jan 2026 08:41:03 +0100
Subject: [PATCH 15/23] fix git conflict
Signed-off-by: alperozturk96
---
.../com/owncloud/android/ui/adapter/OCFileListAdapter.java | 7 +++++++
.../owncloud/android/ui/preview/PreviewImageActivity.kt | 4 +++-
2 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java b/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java
index db46f3dc607c..4ae18d7564b9 100644
--- a/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java
+++ b/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java
@@ -1050,4 +1050,11 @@ public void cleanup() {
ocFileListDelegate.cleanup();
helper.cleanup();
}
+
+ @SuppressLint("NotifyDataSetChanged")
+ public void removeAllFiles() {
+ mFiles.clear();
+ mFilesAll.clear();
+ notifyDataSetChanged();
+ }
}
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 3ebde7fb9324..018fdccc6001 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
@@ -99,7 +99,7 @@ class PreviewImageActivity :
livePhotoFile = intent.getParcelableArgument(EXTRA_LIVE_PHOTO_FILE, OCFile::class.java)
- setupDrawer()
+ setupDrawer(menuItemId)
val chosenFile = intent.getParcelableArgument(EXTRA_FILE, OCFile::class.java)
@@ -124,6 +124,8 @@ class PreviewImageActivity :
handleBackPress()
}
+ override fun getMenuItemId(): Int = R.id.nav_gallery
+
private fun applyDisplayCutOutTopPadding() {
window.decorView.setOnApplyWindowInsetsListener { view, insets ->
val displayCutout = insets.displayCutout
From f559bacd080877d939fdca0524db656cec6dd4ae Mon Sep 17 00:00:00 2001
From: alperozturk96
Date: Fri, 30 Jan 2026 08:52:22 +0100
Subject: [PATCH 16/23] fix git conflict
Signed-off-by: alperozturk96
---
.../java/com/nextcloud/ui/composeActivity/ComposeActivity.kt | 2 +-
.../com/owncloud/android/ui/activities/ActivitiesActivity.java | 2 +-
.../java/com/owncloud/android/ui/activity/CommunityActivity.kt | 2 +-
.../com/owncloud/android/ui/activity/FileDisplayActivity.kt | 3 +--
.../com/owncloud/android/ui/activity/SyncedFoldersActivity.kt | 2 +-
.../com/owncloud/android/ui/activity/UploadListActivity.java | 2 +-
.../java/com/owncloud/android/ui/trashbin/TrashbinActivity.kt | 2 +-
7 files changed, 7 insertions(+), 8 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 0b81a298e4d1..c35f8fa6a506 100644
--- a/app/src/main/java/com/nextcloud/ui/composeActivity/ComposeActivity.kt
+++ b/app/src/main/java/com/nextcloud/ui/composeActivity/ComposeActivity.kt
@@ -89,7 +89,7 @@ class ComposeActivity : DrawerActivity() {
private fun setupActivityUIFor(destination: ComposeDestination) {
if (destination is ComposeDestination.AssistantScreen) {
- setupDrawer(R.id.nav_assistant)
+ setupDrawer(menuItemId)
setupToolbarShowOnlyMenuButtonAndTitle(destination.title) {
openDrawer()
}
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 df740eec674e..2e3a13a6dabd 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(R.id.nav_activity);
+ setupDrawer(getMenuItemId());
updateActionBarTitleAndHomeButtonByString(getString(R.string.drawer_item_activities));
binding.swipeContainingList.setOnRefreshListener(() -> {
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 6985fe889789..bc2d8379ad5d 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(R.id.nav_community)
+ setupDrawer(menuItemId)
binding.communityReleaseCandidateText.movementMethod = LinkMovementMethod.getInstance()
setupContributeForumView()
setupContributeTranslationView()
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 04c4a6c8d488..47cdb6d91c46 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,7 @@ class FileDisplayActivity :
observeWorkerState()
startMetadataSyncForRoot()
handleBackPress()
- setupDrawer(R.id.nav_all_files)
- showToast("TEST APK")
+ setupDrawer(menuItemId)
}
/**
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 952fcf9f4b0e..c12acc61e2c5 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(R.id.nav_settings)
+ setupDrawer(menuItemId)
setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
if (supportActionBar != null) {
supportActionBar!!.setDisplayHomeAsUpEnabled(true)
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 eb7ed31a12ec..dbd70b68b0f9 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
@@ -120,7 +120,7 @@ protected void onCreate(Bundle savedInstanceState) {
updateActionBarTitleAndHomeButtonByString(getString(R.string.uploads_view_title));
// setup drawer
- setupDrawer(R.id.nav_uploads);
+ setupDrawer(getMenuItemId());
setupContent();
}
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 99457a849cef..b583708c478a 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,7 +127,7 @@ class TrashbinActivity :
View.GONE
updateActionBarTitleAndHomeButtonByString(getString(R.string.trashbin_activity_title))
- setupDrawer(R.id.nav_trashbin)
+ setupDrawer(menuItemId)
handleBackPress()
}
From f5005e547a3c51fd0c71acec4074cea9830f46dc Mon Sep 17 00:00:00 2001
From: alperozturk96
Date: Fri, 30 Jan 2026 09:01:07 +0100
Subject: [PATCH 17/23] fixes
Signed-off-by: alperozturk96
---
.../com/owncloud/android/ui/activity/FileDisplayActivity.kt | 1 -
.../com/owncloud/android/ui/fragment/OCFileListFragment.java | 4 ----
2 files changed, 5 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 47cdb6d91c46..7bca0c704668 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
@@ -82,7 +82,6 @@ import com.nextcloud.utils.extensions.lastFragment
import com.nextcloud.utils.extensions.logFileSize
import com.nextcloud.utils.extensions.navigateToAllFiles
import com.nextcloud.utils.extensions.observeWorker
-import com.nextcloud.utils.extensions.showToast
import com.nextcloud.utils.fileNameValidator.FileNameValidator.checkFolderPath
import com.nextcloud.utils.view.FastScrollUtils
import com.owncloud.android.MainApp
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 21ee7513118c..39cfc52aded5 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
@@ -2245,10 +2245,6 @@ public void setFabEnabled(final boolean enabled) {
* @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) {
From dc4f8206d3f856b6f6fd503b81b7c6574b197604 Mon Sep 17 00:00:00 2001
From: alperozturk96
Date: Fri, 30 Jan 2026 09:02:40 +0100
Subject: [PATCH 18/23] fixes
Signed-off-by: alperozturk96
---
.../com/nextcloud/utils/extensions/DrawerActivityExtensions.kt | 1 +
1 file changed, 1 insertion(+)
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 93f5c8cceb54..95acef0970ef 100644
--- a/app/src/main/java/com/nextcloud/utils/extensions/DrawerActivityExtensions.kt
+++ b/app/src/main/java/com/nextcloud/utils/extensions/DrawerActivityExtensions.kt
@@ -18,6 +18,7 @@ fun DrawerActivity.navigateToAllFiles(onlyPersonal: Boolean = false) {
MainApp.showOnlyFilesOnDevice(false)
MainApp.showOnlyPersonalFiles(onlyPersonal)
highlightNavigationViewItem(R.id.nav_all_files)
+ setupHomeSearchToolbarWithSortAndListButtons()
Intent(applicationContext, FileDisplayActivity::class.java).apply {
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
From 267fd10ed8ba0410f0d19b5de3136dfbbbabf89e Mon Sep 17 00:00:00 2001
From: alperozturk96
Date: Fri, 30 Jan 2026 09:40:57 +0100
Subject: [PATCH 19/23] fixes
Signed-off-by: alperozturk96
---
.../owncloud/android/ui/activity/FileDisplayActivity.kt | 7 ++++++-
.../owncloud/android/ui/fragment/OCFileListFragment.java | 6 +++++-
2 files changed, 11 insertions(+), 2 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 7bca0c704668..f7c19052306a 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
@@ -1346,6 +1346,8 @@ class FileDisplayActivity :
}
val ocFileListFragment = leftFragment
+
+
syncAndUpdateFolder(ignoreETag = true, ignoreFocus = true)
// Try to get the OCFile from the intent, if one was provided when launching this activity.
@@ -1355,17 +1357,20 @@ class FileDisplayActivity :
file = it
}
+ ocFileListFragment.setSearchArgs(ocFileListFragment.arguments)
+
// refresh list of files
if (searchView != null && !TextUtils.isEmpty(searchQuery)) {
searchView?.setQuery(searchQuery, false)
} else if (!ocFileListFragment.isSearchFragment && startFile == null) {
- updateListOfFilesFragment()
+ ocFileListFragment.listDirectory(MainApp.isOnlyOnDevice())
ocFileListFragment.registerFabListener()
} else {
ocFileListFragment.listDirectory(startFile, false)
updateActionBarTitleAndHomeButton(startFile)
}
+
// show in-app review dialog to user
inAppReviewHelper.showInAppReview(this)
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 39cfc52aded5..17b5ef3e07dc 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
@@ -309,7 +309,7 @@ public void onAttach(@NonNull Context context) {
}
}
- private void setSearchArgs(Bundle state) {
+ public void setSearchArgs(Bundle state) {
SearchType argSearchType = NO_SEARCH;
SearchEvent argSearchEvent = null;
@@ -1783,6 +1783,10 @@ protected void setEmptyView(SearchEvent event) {
public void onMessageEvent(ChangeMenuEvent changeMenuEvent) {
Log_OC.d(TAG, "event bus --- change menu event triggered");
+ final var arguments = getArguments();
+ if (arguments != null) {
+ arguments.clear();
+ }
resetSearchAttributes();
resetMenuItems();
From 5ff349a6b9fb0f3f7806114bc3528134fb2cf1c4 Mon Sep 17 00:00:00 2001
From: alperozturk96
Date: Fri, 30 Jan 2026 09:59:30 +0100
Subject: [PATCH 20/23] fixes
Signed-off-by: alperozturk96
---
.../com/owncloud/android/ui/activity/FileDisplayActivity.kt | 6 +++++-
1 file changed, 5 insertions(+), 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 f7c19052306a..8be0860b2676 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
@@ -650,6 +650,7 @@ class FileDisplayActivity :
}
}
+ listOfFilesFragment?.isSearchFragment = true
listOfFilesFragment?.setCurrentSearchType(searchEvent)
}
// endregion
@@ -1327,6 +1328,9 @@ class FileDisplayActivity :
super.onResume()
+ if (ocFileListFragment is SharedListFragment || ocFileListFragment?.isSearchFragment == true) {
+ ocFileListFragment?.setSearchArgs(ocFileListFragment?.arguments)
+ }
highlightNavigationViewItem(menuItemId)
if (SettingsActivity.isBackPressed) {
@@ -1357,7 +1361,7 @@ class FileDisplayActivity :
file = it
}
- ocFileListFragment.setSearchArgs(ocFileListFragment.arguments)
+
// refresh list of files
if (searchView != null && !TextUtils.isEmpty(searchQuery)) {
From ef796e9c872403cf10cdb24ffec699f338aacea3 Mon Sep 17 00:00:00 2001
From: alperozturk96
Date: Fri, 30 Jan 2026 10:07:18 +0100
Subject: [PATCH 21/23] fixes
Signed-off-by: alperozturk96
---
.../owncloud/android/ui/activity/FileDisplayActivity.kt | 9 ++++-----
1 file changed, 4 insertions(+), 5 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 8be0860b2676..83f65a60b6f8 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
@@ -1333,6 +1333,7 @@ class FileDisplayActivity :
}
highlightNavigationViewItem(menuItemId)
+
if (SettingsActivity.isBackPressed) {
Log_OC.d(TAG, "User returned from settings activity, skipping reset content logic")
return
@@ -1349,9 +1350,10 @@ class FileDisplayActivity :
return
}
+ if (isToolbarStyleSearch) {
+ setupHomeSearchToolbarWithSortAndListButtons()
+ }
val ocFileListFragment = leftFragment
-
-
syncAndUpdateFolder(ignoreETag = true, ignoreFocus = true)
// Try to get the OCFile from the intent, if one was provided when launching this activity.
@@ -1361,8 +1363,6 @@ class FileDisplayActivity :
file = it
}
-
-
// refresh list of files
if (searchView != null && !TextUtils.isEmpty(searchQuery)) {
searchView?.setQuery(searchQuery, false)
@@ -1374,7 +1374,6 @@ class FileDisplayActivity :
updateActionBarTitleAndHomeButton(startFile)
}
-
// show in-app review dialog to user
inAppReviewHelper.showInAppReview(this)
From e148f648b2987eef9e6c2d2ce46a58009d89a423 Mon Sep 17 00:00:00 2001
From: alperozturk96
Date: Fri, 30 Jan 2026 10:15:53 +0100
Subject: [PATCH 22/23] fixes
Signed-off-by: alperozturk96
---
.../java/com/owncloud/android/ui/activity/DrawerActivity.java | 2 +-
.../com/owncloud/android/ui/activity/FileDisplayActivity.kt | 1 -
2 files changed, 1 insertion(+), 2 deletions(-)
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 280f576728db..6fb5f421af7c 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
@@ -593,7 +593,7 @@ private void onNavigationItemClicked(final MenuItem menuItem) {
if (itemId == R.id.nav_all_files || itemId == R.id.nav_personal_files) {
closeDrawer();
- DrawerActivityExtensionsKt.navigateToAllFiles(this);
+ DrawerActivityExtensionsKt.navigateToAllFiles(this,itemId == R.id.nav_personal_files);
EventBus.getDefault().post(new ChangeMenuEvent());
} else if (itemId == R.id.nav_favorites) {
openFavoritesTab();
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 83f65a60b6f8..9d278aac2267 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
@@ -1333,7 +1333,6 @@ class FileDisplayActivity :
}
highlightNavigationViewItem(menuItemId)
-
if (SettingsActivity.isBackPressed) {
Log_OC.d(TAG, "User returned from settings activity, skipping reset content logic")
return
From e9f715ed1fbeb63945bdd5cdc0b6f8092319e52e Mon Sep 17 00:00:00 2001
From: alperozturk96
Date: Fri, 30 Jan 2026 12:27:23 +0100
Subject: [PATCH 23/23] fixes
Signed-off-by: alperozturk96
---
.../android/ui/activity/FileDisplayActivity.kt | 2 +-
.../owncloud/android/ui/activity/ToolbarActivity.java | 11 -----------
2 files changed, 1 insertion(+), 12 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 9d278aac2267..595cce67eb80 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
@@ -1328,7 +1328,7 @@ class FileDisplayActivity :
super.onResume()
- if (ocFileListFragment is SharedListFragment || ocFileListFragment?.isSearchFragment == true) {
+ if (ocFileListFragment?.isSearchFragment == true) {
ocFileListFragment?.setSearchArgs(ocFileListFragment?.arguments)
}
highlightNavigationViewItem(menuItemId)
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 3ca1b561941e..7db6c88e12bb 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
@@ -184,20 +184,9 @@ private OCFileDepth getCurrentDirDepth() {
private SearchType getSearchType() {
final OCFileListFragment fragment = getOCFileListFragment();
-
- // if current navigation not matches, reset search event
- if (this instanceof DrawerActivity drawerActivity && !drawerActivity.isMenuItemIdBelongsToSearchType()) {
- if (fragment != null) {
- fragment.resetSearchAttributes();
- }
-
- return SearchType.NO_SEARCH;
- }
-
if (fragment != null) {
return fragment.getCurrentSearchType();
}
-
return SearchType.NO_SEARCH;
}