Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
d6ae882
Add custom build for debugging merge
tsdicloud Jan 31, 2024
afec9db
Add script for automatic backport PR creation
tsdicloud Feb 12, 2024
a7331f7
Update script for adding new stable branch
TSI-amrutwaghmare Mar 29, 2024
6d5d658
Update stable branch 5.2.7
TSI-amrutwaghmare Apr 15, 2024
1fad2c6
Update new version 5.2.7
TSI-amrutwaghmare May 22, 2024
4780986
Update nmc-custom-client.yml
TSI-amrutwaghmare Jul 26, 2024
00d0e3c
Update nmc-custom-stables.yml
TSI-amrutwaghmare Aug 26, 2024
3a8c54f
Update nmc-custom-stables.yml for NC stable 5.5.5
TSI-amrutwaghmare Sep 30, 2024
df6dfb5
Update nmc-custom-client.yml for NC Stable 5.5.5
TSI-amrutwaghmare Sep 30, 2024
8b011db
Update nmc-custom-stables.yml for stable-6.1.3
harshada-15-tsys Nov 18, 2024
0ed65b2
Update nmc-custom-stables.yml
harshada-15-tsys Mar 31, 2025
f7d49f9
Update nmc-custom-client.yml
harshada-15-tsys Mar 31, 2025
25b2484
Update nmc-custom-stables.yml for NC stable-6.6.0
harshada-15-tsys Apr 16, 2025
d1570d3
Update nmc-custom-stables.yml for NC Stable 6.5.0
harshada-15-tsys Apr 17, 2025
a668307
Update nmc-custom-stables.yml for NC stable-6.6.0
harshada-15-tsys Apr 17, 2025
87724b0
NMC 2161 - Menu option images and color theming changes
TSI-amrutwaghmare Nov 29, 2023
400349e
NMC 2161 - Menu option images and color theming and other changes
harshada-15-tsys Apr 11, 2025
1a79041
NMC 2161 - Menu option changes
harshada-15-tsys Oct 3, 2025
6a05092
Update nmc-custom-stables.yml for NC Stable 6.5.0
harshada-15-tsys Apr 17, 2025
ac5c8c3
Update nmc-custom-stables.yml for NC stable-6.6.0
harshada-15-tsys Apr 17, 2025
c97a06b
NMC 2161 - Menu option images and color theming changes
TSI-amrutwaghmare Nov 29, 2023
5dd84d2
NMC 2161 - Menu option images and color theming and other changes
harshada-15-tsys Apr 11, 2025
7a41f93
NMC 2161 - Menu option changes
harshada-15-tsys Oct 3, 2025
8457528
NMC 2161 - Menu option changes
harshada-15-tsys Dec 16, 2025
e533e0f
fix(l10n): Update translations from Transifex
nextcloud-bot Dec 27, 2025
bc7de9d
fix(l10n): Update translations from Transifex
nextcloud-bot Dec 29, 2025
9fc349b
Add custom build for debugging merge
tsdicloud Jan 31, 2024
4402a8a
Add script for automatic backport PR creation
tsdicloud Feb 12, 2024
ca9a70e
Update script for adding new stable branch
TSI-amrutwaghmare Mar 29, 2024
d0203cc
Update stable branch 5.2.7
TSI-amrutwaghmare Apr 15, 2024
a4f8d5b
Update new version 5.2.7
TSI-amrutwaghmare May 22, 2024
095774d
Update nmc-custom-client.yml
TSI-amrutwaghmare Jul 26, 2024
7bc7caf
Update nmc-custom-stables.yml
TSI-amrutwaghmare Aug 26, 2024
ac3344a
Update nmc-custom-stables.yml for NC stable 5.5.5
TSI-amrutwaghmare Sep 30, 2024
688faeb
Update nmc-custom-client.yml for NC Stable 5.5.5
TSI-amrutwaghmare Sep 30, 2024
b8b5827
Update nmc-custom-stables.yml for stable-6.1.3
harshada-15-tsys Nov 18, 2024
144b8cf
Update nmc-custom-stables.yml
harshada-15-tsys Mar 31, 2025
8ce1dd5
Update nmc-custom-client.yml
harshada-15-tsys Mar 31, 2025
d6ebc4b
Update nmc-custom-stables.yml for NC stable-6.6.0
harshada-15-tsys Apr 16, 2025
a0385a5
Update nmc-custom-stables.yml for NC Stable 6.5.0
harshada-15-tsys Apr 17, 2025
bbfba7b
Update nmc-custom-stables.yml for NC stable-6.6.0
harshada-15-tsys Apr 17, 2025
e50e7ee
NMC 2161 - Menu option images and color theming changes
TSI-amrutwaghmare Nov 29, 2023
6bcd932
NMC 2161 - Menu option images and color theming and other changes
harshada-15-tsys Apr 11, 2025
3a4440e
NMC 2161 - Menu option changes
harshada-15-tsys Oct 3, 2025
1c17df8
Update nmc-custom-stables.yml for NC Stable 6.5.0
harshada-15-tsys Apr 17, 2025
508ca1f
Update nmc-custom-stables.yml for NC stable-6.6.0
harshada-15-tsys Apr 17, 2025
0e4a363
NMC 2161 - Menu option images and color theming changes
TSI-amrutwaghmare Nov 29, 2023
5cdd3b8
NMC 2161 - Menu option images and color theming and other changes
harshada-15-tsys Apr 11, 2025
930aa1d
NMC 2161 - Menu option changes
harshada-15-tsys Oct 3, 2025
4d6b31e
NMC 2161 - Menu option changes
harshada-15-tsys Dec 16, 2025
e07c969
Merge branch 'nmc/2161-menu_option_theming_customisation' of https://…
harshada-15-tsys Dec 29, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions .github/workflows/nmc-custom-client.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
###
# SPDX-License-Identifier: AGPL-3.0
#
# Author: Bernd rederlechner <bernd.rederlechner@t-systems.com>
#
# Builds a stable release package based on a release assembly
# customisation-<version>-<increment>
#
# As soon as a package is deployed to production, the tag and the branch
# MUST STAY FOR 2 years and not deleted.
#
# Release packages, tags and customisation branches not delivered to production should
# be deleted asap a newer release is available.
#

name: MCLOUD custom client merge

on:
workflow_dispatch:
inputs:
branch:
type: choice
description: Custom build from base branch
options:
- master
- stable-4.9.7
- stable-5.2.1
- stable-5.2.7
- stable-5.5.0
- stable-5.5.5
- stable-6.1.3
- stable-6.2.7
# - v3.0.8
default: master

jobs:
assemble-custom:
uses: nextmcloud/.github/.github/workflows/nmc-custom-client.yml@master
with:
trunk: 'master'
stable: ${{ inputs.branch }}
result: ${{ format('customisation-{0}-{1}', github.actor, inputs.branch) }}
secrets: inherit
44 changes: 44 additions & 0 deletions .github/workflows/nmc-custom-stables.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
###
# SPDX-License-Identifier: AGPL-3.0
#
# Author: Bernd rederlechner <bernd.rederlechner@t-systems.com>
#
# Builds a stable release package based on a release assembly
# customisation-<version>-<increment>
#
# As soon as a package is deployed to production, the tag and the branch
# MUST STAY FOR 2 years and not deleted.
#
# Release packages, tags and customisation branches not delivered to production should
# be deleted asap a newer release is available.
#

name: MCLOUD create stable backports

on:
workflow_dispatch:
inputs:
branch:
type: choice
description: Custom build from base branch
options:
- stable-6.6.0
- stable-6.5.0
- stable-6.2.7
- stable-6.1.3
- stable-5.5.5
- stable-5.5.4
- stable-5.2.7
- stable-5.2.1
- stable-4.9.7
- 4.9.6
- 4.9.5
default: stable-6.6.0

jobs:
backport-custom:
uses: nextmcloud/.github/.github/workflows/nmc-custom-stables.yml@master
with:
trunk: 'master'
stable: ${{ inputs.branch }}
secrets: inherit
8 changes: 8 additions & 0 deletions Nextcloud.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,10 @@
AFCE353527E4ED5900FEA6C2 /* DateFormatter+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCE353427E4ED5900FEA6C2 /* DateFormatter+Extension.swift */; };
AFCE353727E4ED7B00FEA6C2 /* NCShareCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCE353627E4ED7B00FEA6C2 /* NCShareCells.swift */; };
AFCE353927E5DE0500FEA6C2 /* Shareable.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCE353827E5DE0400FEA6C2 /* Shareable.swift */; };
AFCE353927E5DE0500FEA6C2 /* NCShare+Helper.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCE353827E5DE0400FEA6C2 /* NCShare+Helper.swift */; };
B52FAED52DA8F616001AB1BD /* NCSelectableNavigationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52FAED42DA8F616001AB1BD /* NCSelectableNavigationView.swift */; };
C04E2F232A17BB4D001BAD85 /* FilesIntegrationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C04E2F222A17BB4D001BAD85 /* FilesIntegrationTests.swift */; };
D575039F27146F93008DC9DC /* String+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7A0D1342591FBC5008F8A13 /* String+Extension.swift */; };
D5B6AA7827200C7200D49C24 /* NCActivityTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5B6AA7727200C7200D49C24 /* NCActivityTableViewCell.swift */; };
F310B1EF2BA862F1001C42F5 /* NCViewerMedia+VisionKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = F310B1EE2BA862F1001C42F5 /* NCViewerMedia+VisionKit.swift */; };
F321DA8A2B71205A00DDA0E6 /* NCTrashSelectTabBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = F321DA892B71205A00DDA0E6 /* NCTrashSelectTabBar.swift */; };
Expand Down Expand Up @@ -1221,6 +1225,8 @@
AFCE353427E4ED5900FEA6C2 /* DateFormatter+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DateFormatter+Extension.swift"; sourceTree = "<group>"; };
AFCE353627E4ED7B00FEA6C2 /* NCShareCells.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCShareCells.swift; sourceTree = "<group>"; };
AFCE353827E5DE0400FEA6C2 /* Shareable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Shareable.swift; sourceTree = "<group>"; };
AFCE353827E5DE0400FEA6C2 /* NCShare+Helper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCShare+Helper.swift"; sourceTree = "<group>"; };
B52FAED42DA8F616001AB1BD /* NCSelectableNavigationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCSelectableNavigationView.swift; sourceTree = "<group>"; };
C0046CDA2A17B98400D87C9D /* NextcloudUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NextcloudUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
C04E2F202A17BB4D001BAD85 /* NextcloudIntegrationTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NextcloudIntegrationTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
D5B6AA7727200C7200D49C24 /* NCActivityTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCActivityTableViewCell.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -2464,6 +2470,7 @@
F7603298252F0E550015A421 /* Collection Common */ = {
isa = PBXGroup;
children = (
B52FAED42DA8F616001AB1BD /* NCSelectableNavigationView.swift */,
F75FE06B2BB01D0D00A0EFEF /* Cell */,
F78ACD50219046AC0088454D /* Section Header Footer */,
F70D7C3525FFBF81002B9E34 /* NCCollectionViewCommon.swift */,
Expand Down Expand Up @@ -4684,6 +4691,7 @@
F76882232C0DD1E7001CF441 /* NCCapabilitiesModel.swift in Sources */,
F7E2B64F2DDCC5C30075B4D0 /* NCMedia+TransferDelegate.swift in Sources */,
F7D68FCC28CB9051009139F3 /* NCManageDatabase+DashboardWidget.swift in Sources */,
B52FAED52DA8F616001AB1BD /* NCSelectableNavigationView.swift in Sources */,
F76882292C0DD1E7001CF441 /* NCManageE2EEModel.swift in Sources */,
F799DF8B2C4B84EB003410B5 /* NCCollectionViewCommon+EndToEndInitialize.swift in Sources */,
F7CCAB512ECF316700F8E68B /* NCCollectionViewCommon+SyncMetadata.swift in Sources */,
Expand Down
130 changes: 130 additions & 0 deletions iOSClient/Main/Collection Common/NCSelectableNavigationView.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
//
// NCSelectableNavigationView.swift
// Nextcloud
//
// Created by Henrik Storch on 27.01.22.
// Copyright © 2022 Henrik Storch. All rights reserved.
//
// Author Marino Faggiana <marino.faggiana@nextcloud.com>
// Author Henrik Storch <henrik.storch@nextcloud.com>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//

import NextcloudKit
import Realm
import UIKit

extension RealmSwiftObject {
var primaryKeyValue: String? {
guard let primaryKeyName = self.objectSchema.primaryKeyProperty?.name else { return nil }
return value(forKey: primaryKeyName) as? String
}
}

public protocol NCSelectableViewTabBar {
var tabBarController: UITabBarController? { get }
var hostingController: UIViewController? { get }
}

protocol NCSelectableNavigationView: AnyObject {
var viewController: UIViewController { get }
// var appDelegate: AppDelegate { get }
var selectableDataSource: [RealmSwiftObject] { get }
var collectionView: UICollectionView! { get set }
var isEditMode: Bool { get set }
var fileSelect: [String] { get set }
// var selectIndexPaths: [IndexPath] { get set }
var appDelegate: AppDelegate { get }
var selectableDataSource: [RealmSwiftObject] { get }
var collectionView: UICollectionView! { get set }
var isEditMode: Bool { get set }
var selectOcId: [String] { get set }
var appDelegate: AppDelegate { get }
var selectIndexPaths: [IndexPath] { get set }
var titleCurrentFolder: String { get }
var navigationItem: UINavigationItem { get }
var navigationController: UINavigationController? { get }
var layoutKey: String { get }
var serverUrl: String { get }
// var tabBarSelect: NCSelectableViewTabBar? { get set }
// var dataSource: NCCollectionViewDataSource { get set }

// func reloadDataSource(withQueryDB: Bool)
var tabBarSelect: NCSelectableViewTabBar? { get set }

func reloadDataSource(withQueryDB: Bool)
// func reloadDataSource(withQueryDB: Bool)
func setNavigationLeftItems()
func setNavigationRightItems(enableMenu: Bool)
func createMenuActions() -> [NCMenuAction]

func toggleSelect(isOn: Bool?)
func onListSelected()
func onGridSelected()
}

extension NCSelectableNavigationView {
func setNavigationLeftItems() {}

func saveLayout(_ layoutForView: NCDBLayoutForView) {
NCManageDatabase.shared.setLayoutForView(layoutForView: layoutForView)
NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterReloadDataSource)
setNavigationRightItems(enableMenu: false)
}

/// If explicit `isOn` is not set, it will invert `isEditMode`
func toggleSelect(isOn: Bool? = nil) {
DispatchQueue.main.async {
self.isEditMode = isOn ?? !self.isEditMode
self.fileSelect.removeAll()
// self.selectIndexPaths.removeAll()
self.selectOcId.removeAll()
self.selectIndexPaths.removeAll()
self.setNavigationLeftItems()
self.setNavigationRightItems(enableMenu: true)
self.collectionView.reloadData()
}
}

func collectionViewSelectAll() {

fileSelect = selectableDataSource.compactMap({ $0.primaryKeyValue })
// fileSelect = NCCollectionViewDataSource().getMetadataSourceForAllSections().compactMap({ $0.primaryKeyValue })
// selectOcId = selectableDataSource.compactMap({ $0.primaryKeyValue })
collectionView.reloadData()
setNavigationRightItems(enableMenu: false)
}

func tapNotification() {
if let viewController = UIStoryboard(name: "NCNotification", bundle: nil).instantiateInitialViewController() as? NCNotification {
navigationController?.pushViewController(viewController, animated: true)
}
}

func tapTransfer() {
if let navController = UIStoryboard(name: "NCTransfers", bundle: nil).instantiateInitialViewController() as? UINavigationController,
let viewController = navController.topViewController as? NCTransfers {
viewController.modalPresentationStyle = .pageSheet
// self.present(navigationController, animated: true, completion: nil)
navigationController?.present(navController, animated: true, completion: nil)
}
}
}

extension NCSelectableNavigationView where Self: UIViewController {
var viewController: UIViewController {
self
}
}
Loading