Skip to content

Commit e98c158

Browse files
Merge pull request #16305 from nextcloud/fix/shared-tab-file-list-mode
fix(tabs-list-mode): layout switch
2 parents d7c83d2 + cba5e8c commit e98c158

File tree

6 files changed

+56
-36
lines changed

6 files changed

+56
-36
lines changed

app/src/main/java/com/nextcloud/client/preferences/AppPreferencesImpl.java

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -655,20 +655,26 @@ public long getPhotoSearchTimestamp() {
655655
}
656656

657657
/**
658-
* Get preference value for a folder. If folder is not set itself, it finds an ancestor that is set.
658+
* Retrieves a preference value for a specific folder.
659+
* <p>
660+
* If the folder itself does not have the preference set, the method searches up its ancestor hierarchy
661+
* until a value is found. If no value is found in any ancestor, the provided {@code defaultValue} is returned.
662+
* <p>
663+
* Anonymous users or {@code null} folders will always return the {@code defaultValue}.
659664
*
660-
* @param context Context object.
661-
* @param preferenceName Name of the preference to lookup.
662-
* @param folder Folder.
663-
* @param defaultValue Fallback value in case no ancestor is set.
664-
* @return Preference value
665+
* @param context The Android context.
666+
* @param user The user for whom the preference is queried.
667+
* @param preferenceName The name/key of the preference to look up.
668+
* @param folder The folder to check.
669+
* @param defaultValue The value to return if no preference is set in the folder hierarchy.
670+
* @return The preference value for the folder, or {@code defaultValue} if none is set.
665671
*/
666672
private static String getFolderPreference(final Context context,
667673
final User user,
668674
final String preferenceName,
669675
final OCFile folder,
670676
final String defaultValue) {
671-
if (user.isAnonymous()) {
677+
if (user.isAnonymous() || folder == null) {
672678
return defaultValue;
673679
}
674680

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -557,6 +557,8 @@ private void onNavigationItemClicked(final MenuItem menuItem) {
557557
}
558558

559559
closeDrawer();
560+
setupHomeSearchToolbarWithSortAndListButtons();
561+
updateActionBarTitleAndHomeButton(null);
560562
} else if (itemId == R.id.nav_favorites) {
561563
openFavoritesTab();
562564
} else if (itemId == R.id.nav_gallery) {
@@ -630,6 +632,8 @@ private void handleBottomNavigationViewClicks() {
630632
fda.browseToRoot();
631633
}
632634
EventBus.getDefault().post(new ChangeMenuEvent());
635+
setupHomeSearchToolbarWithSortAndListButtons();
636+
updateActionBarTitleAndHomeButton(null);
633637
} else if (menuItemId == R.id.nav_favorites) {
634638
openFavoritesTab();
635639
} else if (menuItemId == R.id.nav_assistant && !(this instanceof ComposeActivity)) {
@@ -706,8 +710,7 @@ private void resetFileDepth() {
706710
}
707711
}
708712

709-
protected void openSharedTab() {
710-
resetFileDepth();
713+
private void openSharedTab() {
711714
resetOnlyPersonalAndOnDevice();
712715
SearchEvent searchEvent = new SearchEvent("", SearchRemoteOperation.SearchType.SHARED_FILTER);
713716
launchActivityForSearch(searchEvent, R.id.nav_shared);

app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2767,7 +2767,6 @@ class FileDisplayActivity :
27672767

27682768
listOfFilesFragment?.setCurrentSearchType(event)
27692769
updateActionBarTitleAndHomeButton(null)
2770-
// listOfFilesFragment?.setActionBarTitle()
27712770
}
27722771

27732772
@Subscribe(threadMode = ThreadMode.MAIN)

app/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -765,9 +765,13 @@ open class ExtendedListFragment :
765765
}
766766
}
767767

768-
protected fun setGridSwitchButton() {
768+
protected fun setLayoutSwitchButton() {
769+
setLayoutSwitchButton(isGridEnabled)
770+
}
771+
772+
protected fun setLayoutSwitchButton(isGrid: Boolean) {
769773
mSwitchGridViewButton?.let {
770-
if (isGridEnabled) {
774+
if (isGrid) {
771775
it.setContentDescription(getString(R.string.action_switch_list_view))
772776
it.icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_view_list)
773777
} else {

app/src/main/java/com/owncloud/android/ui/fragment/LocalFileListFragment.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ public void onActivityCreated(Bundle savedInstanceState) {
134134
}
135135
}
136136

137-
setGridSwitchButton();
137+
setLayoutSwitchButton();
138138

139139
if (mSwitchGridViewButton != null) {
140140
mSwitchGridViewButton.setOnClickListener(v -> {
@@ -143,7 +143,7 @@ public void onActivityCreated(Bundle savedInstanceState) {
143143
} else {
144144
switchToGridView();
145145
}
146-
setGridSwitchButton();
146+
setLayoutSwitchButton();
147147
});
148148
}
149149

app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,7 @@ public void onActivityCreated(Bundle savedInstanceState) {
435435
} else {
436436
setGridAsPreferred();
437437
}
438-
setGridSwitchButton();
438+
setLayoutSwitchButton();
439439
});
440440
}
441441

@@ -1573,17 +1573,9 @@ public void updateOCFile(@NonNull OCFile file) {
15731573
}
15741574

15751575
private void updateLayout() {
1576-
// decide grid vs list view
1577-
if (isGridViewPreferred(mFile)) {
1578-
switchToGridView();
1579-
} else {
1580-
switchToListView();
1581-
}
1582-
1576+
setLayoutViewMode();
15831577
updateSortButton();
1584-
if (mSwitchGridViewButton != null) {
1585-
setGridSwitchButton();
1586-
}
1578+
setLayoutSwitchButton();
15871579

15881580
setFabVisible(!mHideFab);
15891581
slideHideBottomBehaviourForBottomNavigationView(!mHideFab);
@@ -1619,14 +1611,34 @@ public void sortFiles(FileSortOrder sortOrder) {
16191611
}
16201612

16211613
/**
1622-
* Determines if user set folder to grid or list view. If folder is not set itself, it finds a parent that is set
1623-
* (at least root is set).
1614+
* Determines whether a folder should be displayed in grid or list view.
1615+
* <p>
1616+
* The preference is checked for the given folder. If the folder itself does not have a preference set,
1617+
* it will fall back to its parent folder recursively until a preference is found (root folder is always set).
1618+
* Additionally, if a search event is active and is of type {@code SHARED_FILTER}, grid view is disabled.
16241619
*
1625-
* @param folder Folder to check or null for root folder
1626-
* @return 'true' is folder should be shown in grid mode, 'false' if list mode is preferred.
1620+
* @param folder The folder to check, or {@code null} to refer to the root folder.
1621+
* @return {@code true} if the folder should be displayed in grid mode, {@code false} if list mode is preferred.
16271622
*/
1628-
public boolean isGridViewPreferred(@Nullable OCFile folder) {
1629-
return FOLDER_LAYOUT_GRID.equals(preferences.getFolderLayout(folder));
1623+
private boolean isGridViewPreferred(@Nullable OCFile folder) {
1624+
if (searchEvent != null) {
1625+
return (searchEvent.toSearchType() != SHARED_FILTER) &&
1626+
FOLDER_LAYOUT_GRID.equals(preferences.getFolderLayout(folder));
1627+
} else {
1628+
return FOLDER_LAYOUT_GRID.equals(preferences.getFolderLayout(folder));
1629+
}
1630+
}
1631+
1632+
private void setLayoutViewMode() {
1633+
boolean isGrid = isGridViewPreferred(mFile);
1634+
1635+
if (isGrid) {
1636+
switchToGridView();
1637+
} else {
1638+
switchToListView();
1639+
}
1640+
1641+
setLayoutSwitchButton(isGrid);
16301642
}
16311643

16321644
public void setListAsPreferred() {
@@ -1857,11 +1869,7 @@ protected void handleSearchEvent(SearchEvent event) {
18571869

18581870
new Handler(Looper.getMainLooper()).post(() -> {
18591871
updateSortButton();
1860-
if (isGridViewPreferred(mFile) && !isGridEnabled()) {
1861-
switchToGridView();
1862-
} else if (!isGridViewPreferred(mFile) && isGridEnabled()) {
1863-
switchToListView();
1864-
}
1872+
setLayoutViewMode();
18651873
});
18661874

18671875
final User currentUser = accountManager.getUser();

0 commit comments

Comments
 (0)