Skip to content

Commit 8880402

Browse files
committed
introduce FolderLayout
Signed-off-by: alperozturk96 <alper_ozturk@proton.me>
1 parent 3e9412e commit 8880402

4 files changed

Lines changed: 79 additions & 67 deletions

File tree

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

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import com.nextcloud.client.jobs.LogEntry;
1515
import com.owncloud.android.datamodel.OCFile;
1616
import com.owncloud.android.ui.fragment.FileListLayoutManager;
17+
import com.owncloud.android.ui.fragment.FolderLayout;
1718
import com.owncloud.android.utils.FileSortOrder;
1819

1920
import java.util.List;
@@ -132,36 +133,19 @@ default void onDarkThemeModeChanged(DarkMode mode) {
132133
/**
133134
* Get preferred folder display type.
134135
*
135-
* @param folder Folder
136+
* @param layout FolderLayout
136137
* @return preference value, default is
137138
* {@link com.owncloud.android.ui.fragment.OCFileListFragment#FOLDER_LAYOUT_LIST}
138139
*/
139-
String getFolderLayout(OCFile folder);
140+
String getFolderLayout(FolderLayout layout);
140141

141142
/**
142143
* Set preferred folder display type.
143144
*
144-
* @param folder Folder which layout is being set or null for root folder
145+
* @param layout FolderLayout which layout is being set
145146
* @param layoutName preference value
146147
*/
147-
void setFolderLayout(@Nullable OCFile folder, String layoutName);
148-
149-
/**
150-
* Get preferred folder display type by view type.
151-
*
152-
* @param type The folder view type
153-
* @return preference value, default is
154-
* {@link com.owncloud.android.ui.fragment.OCFileListFragment#FOLDER_LAYOUT_LIST}
155-
*/
156-
String getFolderLayout(FileListLayoutManager.FolderLayout type);
157-
158-
/**
159-
* Set preferred folder display type by view type.
160-
*
161-
* @param type The folder view type
162-
* @param layoutName preference value
163-
*/
164-
void setFolderLayout(FileListLayoutManager.FolderLayout type, String layoutName);
148+
void setFolderLayout(@Nullable FolderLayout layout, String layoutName);
165149

166150
/**
167151
* Saves the path where the user selected to do the last upload of a file shared from other app.

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

Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
import com.owncloud.android.datamodel.OCFile;
2929
import com.owncloud.android.ui.activity.PassCodeActivity;
3030
import com.owncloud.android.ui.activity.SettingsActivity;
31-
import com.owncloud.android.ui.fragment.FileListLayoutManager;
31+
import com.owncloud.android.ui.fragment.FolderLayout;
3232
import com.owncloud.android.utils.FileSortOrder;
3333

3434
import java.lang.reflect.Type;
@@ -83,7 +83,6 @@ public final class AppPreferencesImpl implements AppPreferences {
8383
private static final String PREF__AUTO_UPLOAD_SPLIT_OUT = "autoUploadEntriesSplitOut";
8484
private static final String PREF__AUTO_UPLOAD_INIT = "autoUploadInit";
8585
private static final String PREF__FOLDER_SORT_ORDER = "folder_sort_order";
86-
private static final String PREF__FOLDER_LAYOUT = "folder_layout";
8786

8887
private static final String PREF__LOCK_TIMESTAMP = "lock_timestamp";
8988
private static final String PREF__SHOW_MEDIA_SCAN_NOTIFICATIONS = "show_media_scan_notifications";
@@ -337,39 +336,37 @@ public String[] getPassCode() {
337336
}
338337

339338
@Override
340-
public String getFolderLayout(OCFile folder) {
341-
return getFolderPreference(context,
342-
userAccountManager.getUser(),
343-
PREF__FOLDER_LAYOUT,
344-
folder,
345-
FOLDER_LAYOUT_LIST);
346-
}
339+
public String getFolderLayout(FolderLayout layout) {
340+
if (layout instanceof FolderLayout.Child child) {
341+
return getFolderPreference(context,
342+
userAccountManager.getUser(),
343+
layout.getKey(),
344+
child.getFolder(),
345+
FOLDER_LAYOUT_LIST);
346+
} else {
347+
User user = userAccountManager.getUser();
348+
if (user.isAnonymous()) {
349+
return FOLDER_LAYOUT_LIST;
350+
}
347351

348-
@Override
349-
public void setFolderLayout(@Nullable OCFile folder, String layoutName) {
350-
setFolderPreference(context,
351-
userAccountManager.getUser(),
352-
PREF__FOLDER_LAYOUT,
353-
folder,
354-
layoutName);
352+
return preferences.getString(layout.getPrefKey(user), FOLDER_LAYOUT_LIST);
353+
}
355354
}
356355

357356
@Override
358-
public String getFolderLayout(FileListLayoutManager.FolderLayout type) {
359-
User user = userAccountManager.getUser();
360-
if (user.isAnonymous()) {
361-
return FOLDER_LAYOUT_LIST;
357+
public void setFolderLayout(FolderLayout layout, String layoutName) {
358+
if (layout instanceof FolderLayout.Child child) {
359+
setFolderPreference(context,
360+
userAccountManager.getUser(),
361+
child.getKey(),
362+
child.getFolder(),
363+
layoutName);
364+
return;
362365
}
363-
ArbitraryDataProvider dataProvider = new ArbitraryDataProviderImpl(context);
364-
String value = dataProvider.getValue(user.getAccountName(), PREF__FOLDER_LAYOUT + "_" + type);
365-
return value.isEmpty() ? FOLDER_LAYOUT_LIST : value;
366-
}
367366

368-
@Override
369-
public void setFolderLayout(FileListLayoutManager.FolderLayout type, String layoutName) {
370-
User user = userAccountManager.getUser();
371-
ArbitraryDataProvider dataProvider = new ArbitraryDataProviderImpl(context);
372-
dataProvider.storeOrUpdateKeyValue(user.getAccountName(), PREF__FOLDER_LAYOUT + "_" + type, layoutName);
367+
preferences.edit()
368+
.putString(layout.getPrefKey(userAccountManager.getUser()), layoutName)
369+
.apply();
373370
}
374371

375372
@Override

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

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -21,28 +21,16 @@ import com.owncloud.android.utils.FileSortOrder
2121

2222
class FileListLayoutManager(private val fragment: OCFileListFragment, private val preferences: AppPreferences) {
2323

24-
enum class FolderLayout {
25-
Shared,
26-
Favorites,
27-
AllFiles,
28-
Child
29-
}
30-
3124
fun sortFiles(sortOrder: FileSortOrder?) {
3225
fragment.mSortButton?.setText(DisplayUtils.getSortOrderStringId(sortOrder))
3326
sortOrder?.let { fragment.mAdapter.setSortOrder(fragment.mFile, it) }
3427
}
3528

36-
private fun resolveLayoutType(): FolderLayout = when {
37-
fragment.getCurrentSearchType() == SearchType.SHARED_FILTER -> FolderLayout.Shared
38-
fragment.getCurrentSearchType() == SearchType.FAVORITE_SEARCH -> FolderLayout.Favorites
39-
fragment.mFile == null || fragment.mFile.isRootDirectory -> FolderLayout.AllFiles
40-
else -> FolderLayout.Child
29+
fun isGridViewPreferred(): Boolean {
30+
val layout = FolderLayout.get(fragment.mFile, fragment.currentSearchType)
31+
return preferences.getFolderLayout(layout) == OCFileListFragment.FOLDER_LAYOUT_GRID
4132
}
4233

43-
fun isGridViewPreferred(): Boolean =
44-
OCFileListFragment.FOLDER_LAYOUT_GRID == preferences.getFolderLayout(resolveLayoutType())
45-
4634
fun setLayoutViewMode() {
4735
val isGrid = isGridViewPreferred()
4836

@@ -56,7 +44,8 @@ class FileListLayoutManager(private val fragment: OCFileListFragment, private va
5644
}
5745

5846
fun setListAsPreferred() {
59-
preferences.setFolderLayout(resolveLayoutType(), OCFileListFragment.FOLDER_LAYOUT_LIST)
47+
val layout = FolderLayout.get(fragment.mFile, fragment.currentSearchType)
48+
preferences.setFolderLayout(layout, OCFileListFragment.FOLDER_LAYOUT_LIST)
6049
switchToListView()
6150
}
6251

@@ -67,7 +56,8 @@ class FileListLayoutManager(private val fragment: OCFileListFragment, private va
6756
}
6857

6958
fun setGridAsPreferred() {
70-
preferences.setFolderLayout(resolveLayoutType(), OCFileListFragment.FOLDER_LAYOUT_GRID)
59+
val layout = FolderLayout.get(fragment.mFile, fragment.currentSearchType)
60+
preferences.setFolderLayout(layout, OCFileListFragment.FOLDER_LAYOUT_GRID)
7161
switchToGridView()
7262
}
7363

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*
2+
* Nextcloud - Android Client
3+
*
4+
* SPDX-FileCopyrightText: 2026 Alper Ozturk <alper.ozturk@nextcloud.com>
5+
* SPDX-License-Identifier: AGPL-3.0-or-later
6+
*/
7+
8+
package com.owncloud.android.ui.fragment
9+
10+
import com.nextcloud.client.account.User
11+
import com.owncloud.android.datamodel.OCFile
12+
13+
sealed class FolderLayout(val key: String) {
14+
data object Shared : FolderLayout("shared_folder_layout")
15+
data object Favorites : FolderLayout("favorite_folder_layout")
16+
data object AllFiles : FolderLayout("all_files_folder_layout")
17+
data class Child(val folder: OCFile) : FolderLayout("folder_layout")
18+
19+
fun getPrefKey(user: User): String {
20+
if (this is Child) {
21+
return key
22+
}
23+
24+
return user.accountName + "_" + key
25+
}
26+
27+
companion object {
28+
fun get(folder: OCFile?, searchType: SearchType): FolderLayout {
29+
if (folder != null && folder.isFolder && !folder.isRootDirectory) {
30+
return Child(folder)
31+
}
32+
33+
return when {
34+
searchType == SearchType.SHARED_FILTER -> Shared
35+
searchType == SearchType.FAVORITE_SEARCH -> Favorites
36+
folder == null || folder.isRootDirectory -> AllFiles
37+
else -> AllFiles
38+
}
39+
}
40+
}
41+
}

0 commit comments

Comments
 (0)