소스 검색

Media view filter options

Squashed commit of the following:

commit ddb107778d0b047e16afc149e235c12ab72f8ce7
Author: A117870935 <surinder.kumar@t-systems.com>
Date:   Tue Jul 5 18:15:38 2022 +0530

    Delete FolderPickerActivity.java

commit f471cc28106a46239a058570d4c07f556698d43c
Merge: 0c5b2309bc 1341f1fbe6
Author: A117870935 <surinder.kumar@t-systems.com>
Date:   Tue Jul 5 18:13:43 2022 +0530

    Merge branch 'media-view-options' of https://github.com/nextmcloud/android into media-view-options

commit 0c5b2309bc327ce9237c82c414d1b507a73e3b12
Author: A117870935 <surinder.kumar@t-systems.com>
Date:   Tue Jul 5 18:12:44 2022 +0530

    Rebasing with master

commit de4eeb500434b101fb75abaef37accd52d08f732
Author: A117870935 <surinder.kumar@t-systems.com>
Date:   Fri Jun 24 10:45:22 2022 +0530

    Code optimisation.

commit eb8128df3434d155b0b08ab3428459965080850e
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Mon May 9 16:57:14 2022 +0530

    Removed unused code and code optimisation

commit ed00306ee75425bc18da86b860a02c8ea656c4a7
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Fri May 6 12:23:47 2022 +0530

    Code formatting via KtLint

commit a7e925d692ce63df1db67f7e848cdc59c3eb13e0
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Thu May 5 17:28:51 2022 +0530

    Code optimisation, copyrights added and bug fixing.

commit ccb07fc73b61dfddc37e41bb876daa33f81438fb
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Tue May 3 15:25:50 2022 +0530

    Removed copyrights

commit 60e27ce765e7e122dae7b21e5aa3975cc3c7d706
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Tue May 3 15:22:15 2022 +0530

    Removed unused drawables

commit e4e29d8cdc1ac40eace7ffd3a23839ca5a29d658
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Tue May 3 15:19:29 2022 +0530

    Updated design changes

commit 3cd34b4bfbcdb844a9eba849e2a658b4b5cc8153
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Wed Apr 27 21:07:46 2022 +0530

    Update gradle.properties

    Reverted gradle.properies.

commit 391ef3a21e3c3f343534774b984eaa8123486b37
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Wed Apr 27 21:02:33 2022 +0530

    Copyrights added.

commit b614cfa213464f2efe96b42ed23cc4c39c56d5d9
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Wed Apr 27 20:42:39 2022 +0530

    Update build.gradle

    Reverted gradle version.

commit eb864fb22b9f8d5a495aaaa0c9d5c834faefc201
Author: A117870935 <surinder.kumar@t-systems.com>
Date:   Wed Apr 27 19:02:17 2022 +0530

    Added 3 dot menu to filter Media data.

commit fc4788e796a52605027197645417f9211a437002
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Tue May 3 16:02:19 2022 +0530

    Rebased with master and conflicts resolved

commit ee0d13a43834b835baf8a095f2d1e9aa39322124
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Tue May 3 15:25:50 2022 +0530

    Removed copyrights

commit 6bf6fb210d5a5945b9f8bdb7ca0d7a00e06dcacd
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Tue May 3 15:22:15 2022 +0530

    Removed unused drawables

commit 0964f77cdb111c0f13aeac49f6b01ce3672b7c2f
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Tue May 3 15:19:29 2022 +0530

    Updated design changes

commit 7eeea6219ab18339e365817e70f98fc1b2eecb67
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Wed Apr 27 21:07:46 2022 +0530

    Update gradle.properties

    Reverted gradle.properies.

commit 078a462149476e6bc1886d3bfe00fdfe12ec74b9
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Wed Apr 27 21:02:33 2022 +0530

    Copyrights added.

commit 579e42f64a4518c0745ead244963c1a76f61fc38
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Wed Apr 27 20:42:39 2022 +0530

    Update build.gradle

    Reverted gradle version.

commit 093dfea09bbb3b339e28418124f2dfa0a8d77b67
Author: A117870935 <surinder.kumar@t-systems.com>
Date:   Wed Apr 27 19:02:17 2022 +0530

    Added 3 dot menu to filter Media data.

commit 0ddbf0475b82819d68a5a6d81d29e7cf53d74dcf
Author: A117870935 <surinder.kumar@t-systems.com>
Date:   Fri Jun 24 10:45:22 2022 +0530

    Code optimisation.

commit 19a0b046630cb1190819670688cb7f0a3591b411
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Mon May 9 16:57:14 2022 +0530

    Removed unused code and code optimisation

commit ab9e31e938a5c55a15f7dea13276ff8064ecd9a8
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Fri May 6 12:23:47 2022 +0530

    Code formatting via KtLint

commit 0a6504010a60e8f620ba0b3d84d759338020326b
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Thu May 5 17:28:51 2022 +0530

    Code optimisation, copyrights added and bug fixing.

commit c74d64685be5240593d9b64e0acbed1c0f40dc1f
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Tue May 3 15:25:50 2022 +0530

    Removed copyrights

commit 5b091f230718fa9f6f2acca91d11ea62d14233df
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Tue May 3 15:22:15 2022 +0530

    Removed unused drawables

commit 1c13b076738054f3020b600e3052bfce1d3cae8b
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Tue May 3 15:19:29 2022 +0530

    Updated design changes

commit 5f42a5b498e13def8332d4271c4d04bb11d3d6da
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Wed Apr 27 21:07:46 2022 +0530

    Update gradle.properties

    Reverted gradle.properies.

commit ac8a715992cb4367bef381c9cd606abef0ccf1db
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Wed Apr 27 21:02:33 2022 +0530

    Copyrights added.

commit 4b8b1817a7d0da617878538cd2a961ec8902b3dd
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Wed Apr 27 20:42:39 2022 +0530

    Update build.gradle

    Reverted gradle version.

commit 74f8b2b36f720ee5b9de3574b216de7e829e560b
Author: A117870935 <surinder.kumar@t-systems.com>
Date:   Wed Apr 27 19:02:17 2022 +0530

    Added 3 dot menu to filter Media data.

commit eb442ac4a6f67cdc22fdcbd15ed8125eaf8a2fb4
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Tue May 3 16:02:19 2022 +0530

    Rebased with master and conflicts resolved

commit 54694d452c41f21bcd2c02867bdeaed97eaba504
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Tue May 3 15:25:50 2022 +0530

    Removed copyrights

commit 867ba2fb225bd983fff9c11600a84786e71dc510
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Tue May 3 15:22:15 2022 +0530

    Removed unused drawables

commit 508f3a3c8aac0e5208d3628d2f5e9f061aa282fc
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Tue May 3 15:19:29 2022 +0530

    Updated design changes

commit 0d6db1e230daa6970971ced09e2788412dd1f61d
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Wed Apr 27 21:07:46 2022 +0530

    Update gradle.properties

    Reverted gradle.properies.

commit 6c3de6eecfed2ae4d425c7f4789dac15e4df7ff3
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Wed Apr 27 21:02:33 2022 +0530

    Copyrights added.

commit 4bb9f91e8ae98194874745675015c0f0d6fbc274
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Wed Apr 27 20:42:39 2022 +0530

    Update build.gradle

    Reverted gradle version.

commit 999b8dfa6a9dec034a25fca86415fdcac6004658
Author: A117870935 <surinder.kumar@t-systems.com>
Date:   Wed Apr 27 19:02:17 2022 +0530

    Added 3 dot menu to filter Media data.

commit 1341f1fbe66905bd8278ddb60a396ae0623586e1
Merge: 414e0754bf 57b414e4c1
Author: A117870935 <surinder.kumar@t-systems.com>
Date:   Fri Jun 24 11:49:40 2022 +0530

    Code optimisation.

commit 414e0754bf66338203b037a72b00c86b4ef23db9
Author: A117870935 <surinder.kumar@t-systems.com>
Date:   Fri Jun 24 10:45:22 2022 +0530

    Code optimisation.

commit 757102a5f177b9f0b46fc0f941888a0f3544f609
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Mon May 9 16:57:14 2022 +0530

    Removed unused code and code optimisation

commit 4512af4327f16d27a1cd4b4dbb0d8788e7278125
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Fri May 6 12:23:47 2022 +0530

    Code formatting via KtLint

commit 4d3d9297e9a42e3d75a14535a8393cee4f13b98d
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Thu May 5 17:28:51 2022 +0530

    Code optimisation, copyrights added and bug fixing.

commit fd7c0a95f1b37dff4a6f5c8cff10c85880c7faba
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Tue May 3 15:25:50 2022 +0530

    Removed copyrights

commit f6dec19fd9f113682dcb6cf4485f54867d4dece3
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Tue May 3 15:22:15 2022 +0530

    Removed unused drawables

commit 38ce2e55e09d26e1e5f12782969e94c210996c7e
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Tue May 3 15:19:29 2022 +0530

    Updated design changes

commit 5745cc9e67aeb3d0184c43c8ca15e0cf24306f0a
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Wed Apr 27 21:07:46 2022 +0530

    Update gradle.properties

    Reverted gradle.properies.

commit 42217c395f611c62b1e686bb739260d450cac329
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Wed Apr 27 21:02:33 2022 +0530

    Copyrights added.

commit c30388b4b6b0677c7f8a6074bde48fb09e933415
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Wed Apr 27 20:42:39 2022 +0530

    Update build.gradle

    Reverted gradle version.

commit d7fd0707e47dca00913ff403fc9f937060c1030b
Author: A117870935 <surinder.kumar@t-systems.com>
Date:   Wed Apr 27 19:02:17 2022 +0530

    Added 3 dot menu to filter Media data.

commit 33294957fbc8c4749342ec0a90cff9a9047d18c9
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Tue May 3 16:02:19 2022 +0530

    Rebased with master and conflicts resolved

commit e50cca657ada4f90bee098505c022f21b57cf9f9
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Tue May 3 15:25:50 2022 +0530

    Removed copyrights

commit d11c0478cc51ec1c27fcce66ebf420849fbe0018
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Tue May 3 15:22:15 2022 +0530

    Removed unused drawables

commit 2f258a0a254dd9f50f8e36d9e732c550fd47a2a5
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Tue May 3 15:19:29 2022 +0530

    Updated design changes

commit dee21a4b453a4c9f7406cc36de8382c8748b7fd6
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Wed Apr 27 21:07:46 2022 +0530

    Update gradle.properties

    Reverted gradle.properies.

commit d27f91ea3a67a4e4030f4072b1cd0f7515961b43
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Wed Apr 27 21:02:33 2022 +0530

    Copyrights added.

commit 56f2e70f67129e3b244c06f0d1bac2ba92bcd94e
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Wed Apr 27 20:42:39 2022 +0530

    Update build.gradle

    Reverted gradle version.

commit edccc6a78fdf16ea3da6e88acfdec855f4a2b3ca
Author: A117870935 <surinder.kumar@t-systems.com>
Date:   Wed Apr 27 19:02:17 2022 +0530

    Added 3 dot menu to filter Media data.

commit 57b414e4c1d660963b5ae149102d58c58b15e4a0
Author: A117870935 <surinder.kumar@t-systems.com>
Date:   Fri Jun 24 10:45:22 2022 +0530

    Code optimisation.

commit 9bde395980fab5c00d71a9acf19fdb30d47f37dd
Merge: 038663cdc9 03453c787a
Author: surinder-tsys <89455194+surinder-tsys@users.noreply.github.com>
Date:   Mon May 9 17:10:13 2022 +0530

    Merge branch 'master' into media-view-options

commit 038663cdc9be2daf4194300d95f3bc342a6ae78a
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Mon May 9 16:57:14 2022 +0530

    Removed unused code and code optimisation

commit 8f999f2eb0b067662ba590c65e8ffe5df6ebcbc0
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Fri May 6 12:23:47 2022 +0530

    Code formatting via KtLint

commit e842fa134a7baa60b34e010546094adeb8ee600d
Merge: 67763af48e 2d6b504284
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Thu May 5 17:29:23 2022 +0530

    Merge branch 'media-view-options' of https://github.com/nextmcloud/android into media-view-options

commit 67763af48ed304515e1a89729185e4f09955786a
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Thu May 5 17:28:51 2022 +0530

    Code optimisation, copyrights added and bug fixing.

commit 2d6b504284742434767e201b2163c878171f7257
Merge: 47b44babf9 1924041e4b
Author: surinder-tsys <89455194+surinder-tsys@users.noreply.github.com>
Date:   Wed May 4 10:16:30 2022 +0530

    Merge branch 'master' into media-view-options

commit 47b44babf93eb6dd116486f125b58c0412b31bcf
Merge: f82b32fc74 184d13e8f2
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Tue May 3 16:13:03 2022 +0530

    Conflicts resolved

commit f82b32fc74f26147205cf2952d8f1af9c64e3aee
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Tue May 3 16:02:19 2022 +0530

    Rebased with master and conflicts resolved

commit 9c6080fcddad7d4aebdb8f47ca383fb9d36366c2
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Tue May 3 15:25:50 2022 +0530

    Removed copyrights

commit 60a29a7eec8150260a972117f1a340d49a60ae0d
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Tue May 3 15:22:15 2022 +0530

    Removed unused drawables

commit 903bdfbce603a1dfdaa932c53b0fa9f72b53c07c
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Tue May 3 15:19:29 2022 +0530

    Updated design changes

commit 0cd9354dc8115ae923c7bf4aee26edb267b74560
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Wed Apr 27 21:07:46 2022 +0530

    Update gradle.properties

    Reverted gradle.properies.

commit 474341be78efc267504a4a8f9032351708bab094
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Wed Apr 27 21:02:33 2022 +0530

    Copyrights added.

commit 8600486da7a245c3e86004dc163c5a6a2e552b2a
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Wed Apr 27 20:42:39 2022 +0530

    Update build.gradle

    Reverted gradle version.

commit d04b6687645f79b1d1e33c9dfdfcbf524f5f421e
Author: A117870935 <surinder.kumar@t-systems.com>
Date:   Wed Apr 27 19:02:17 2022 +0530

    Added 3 dot menu to filter Media data.

commit 184d13e8f2b4bc9c37171d9c4ee47de87baff40d
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Tue May 3 15:25:50 2022 +0530

    Removed copyrights

commit 8d1018ba8fc1e381ff8ff68b0a7dc9d7e702a1a8
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Tue May 3 15:22:15 2022 +0530

    Removed unused drawables

commit b44e3dbb8f46b29b7144c6ba74ae50e83e8c1c77
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Tue May 3 15:19:29 2022 +0530

    Updated design changes

commit e559d94cfad690f4cc95fadc1ff251bf02420d95
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Wed Apr 27 21:07:46 2022 +0530

    Update gradle.properties

    Reverted gradle.properies.

commit 484a6b8f69c33b387abba6185d5bb76136b308d1
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Wed Apr 27 21:02:33 2022 +0530

    Copyrights added.

commit 4d607b6ae4498f53cfdd1db212d008bfb41b71eb
Author: Kumar <Surinder.Kumar@t-systems.com>
Date:   Wed Apr 27 20:42:39 2022 +0530

    Update build.gradle

    Reverted gradle version.

commit 95fafabe8a966d3ab2821c63f8a1728b955594c5
Author: A117870935 <surinder.kumar@t-systems.com>
Date:   Wed Apr 27 19:02:17 2022 +0530

    Added 3 dot menu to filter Media data.

Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
A117870935 3 년 전
부모
커밋
a72932731f

+ 6 - 0
app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java

@@ -1,9 +1,11 @@
 /*
  * ownCloud Android client application
  *
+ * @author TSI-mc
  * Copyright (C) 2012  Bartek Przybylski
  * Copyright (C) 2015 ownCloud Inc.
  * Copyright (C) 2021 Chris Narkiewicz <hello@ezaquarii.com>
+ * Copyright (C) 2022 TSI-mc
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2,
@@ -2367,4 +2369,8 @@ public class FileDataStorageManager {
     public User getUser() {
         return user;
     }
+
+    public OCFile getDefaultRootPath(){
+        return new OCFile(OCFile.ROOT_PATH);
+    }
 }

+ 6 - 0
app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java

@@ -5,10 +5,12 @@
  * @author David A. Velasco
  * @author Andy Scherzinger
  * @author Chris Narkiewicz
+ * @author TSI-mc
  * Copyright (C) 2011  Bartek Przybylski
  * Copyright (C) 2016 ownCloud Inc.
  * Copyright (C) 2018 Andy Scherzinger
  * Copyright (C) 2019 Chris Narkiewicz <hello@ezaquarii.com>
+ * Copyright (C) 2022 TSI-mc
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2,
@@ -551,6 +553,10 @@ public class FileDisplayActivity extends FileActivity
             searchView.post(() -> searchView.setQuery(searchQuery, true));
         }
         setDrawerIndicatorEnabled(false);
+
+        //clear the subtitle while navigating to any other screen from Media screen
+        clearToolbarSubtitle();
+
         FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
         transaction.addToBackStack(null);
         transaction.replace(R.id.left_fragment_container, fragment, TAG_LIST_OF_FILES);

+ 7 - 0
app/src/main/java/com/owncloud/android/ui/activity/FolderPickerActivity.kt

@@ -108,6 +108,12 @@ open class FolderPickerActivity :
                     mSearchOnlyFolders = true
                     isDoNotEnterEncryptedFolder = true
                 }
+                CHOOSE_LOCATION -> {
+                    caption = resources.getText(R.string.choose_location).toString()
+                    mSearchOnlyFolders = true
+                    isDoNotEnterEncryptedFolder = true
+                    mChooseBtn!!.text = resources.getString(R.string.common_select)
+                }
                 else -> caption = themeUtils.getDefaultDisplayNameForRootFolder(this)
             }
         } else {
@@ -550,6 +556,7 @@ open class FolderPickerActivity :
 
         const val MOVE = "MOVE"
         const val COPY = "COPY"
+        const val CHOOSE_LOCATION = "CHOOSE_LOCATION"
         private val TAG = FolderPickerActivity::class.java.simpleName
         protected const val TAG_LIST_OF_FOLDERS = "LIST_OF_FOLDERS"
     }

+ 15 - 0
app/src/main/java/com/owncloud/android/ui/activity/ToolbarActivity.java

@@ -2,9 +2,11 @@
  *   Nextcloud Android client application
  *
  *   @author Andy Scherzinger
+ *   @author TSI-mc
  *   Copyright (C) 2016 Andy Scherzinger
  *   Copyright (C) 2016 Nextcloud
  *   Copyright (C) 2016 ownCloud Inc.
+ *   Copyright (C) 2022 TSI-mc
  *
  *   This program is free software; you can redistribute it and/or
  *   modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
@@ -51,6 +53,7 @@ import com.owncloud.android.utils.theme.ThemeUtils;
 
 import javax.inject.Inject;
 
+import androidx.annotation.NonNull;
 import androidx.annotation.StringRes;
 import androidx.annotation.VisibleForTesting;
 import androidx.appcompat.app.ActionBar;
@@ -285,4 +288,16 @@ public abstract class ToolbarActivity extends BaseActivity implements Injectable
     public FrameLayout getPreviewImageContainer() {
         return mPreviewImageContainer;
     }
+
+    public void updateToolbarSubtitle(@NonNull String subtitle) {
+        ActionBar actionBar = getSupportActionBar();
+        themeToolbarUtils.setColoredSubtitle(actionBar, subtitle, this);
+    }
+
+    public void clearToolbarSubtitle() {
+        ActionBar actionBar = getSupportActionBar();
+        if(actionBar != null){
+            actionBar.setSubtitle(null);
+        }
+    }
 }

+ 48 - 2
app/src/main/java/com/owncloud/android/ui/adapter/GalleryAdapter.kt

@@ -3,8 +3,10 @@
  * Nextcloud Android client application
  *
  * @author Tobias Kaminsky
+ * @author TSI-mc
  * Copyright (C) 2022 Tobias Kaminsky
  * Copyright (C) 2022 Nextcloud GmbH
+ * Copyright (C) 2022 TSI-mc
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Affero General Public License as published by
@@ -39,6 +41,8 @@ import com.owncloud.android.datamodel.FileDataStorageManager
 import com.owncloud.android.datamodel.GalleryItems
 import com.owncloud.android.datamodel.OCFile
 import com.owncloud.android.ui.activity.ComponentsGetter
+import com.owncloud.android.ui.fragment.GalleryFragment
+import com.owncloud.android.ui.fragment.GalleryFragmentBottomSheetDialog
 import com.owncloud.android.ui.fragment.SearchType
 import com.owncloud.android.ui.interfaces.OCFileListFragmentInterface
 import com.owncloud.android.utils.DisplayUtils
@@ -46,6 +50,7 @@ import com.owncloud.android.utils.FileSortOrder
 import com.owncloud.android.utils.FileStorageUtils
 import com.owncloud.android.utils.theme.ThemeColorUtils
 import com.owncloud.android.utils.theme.ThemeDrawableUtils
+import com.owncloud.android.utils.MimeTypeUtil
 import me.zhanghai.android.fastscroll.PopupTextProvider
 import java.util.Calendar
 import java.util.Date
@@ -157,10 +162,45 @@ class GalleryAdapter(
     }
 
     @SuppressLint("NotifyDataSetChanged")
-    fun showAllGalleryItems() {
+    fun showAllGalleryItems(
+        remotePath: String,
+        mediaState: GalleryFragmentBottomSheetDialog.MediaState,
+        photoFragment: GalleryFragment
+    ) {
+
         val items = storageManager.allGalleryItems
 
-        files = items
+       val filteredList = items.filter { it != null && it.remotePath.startsWith(remotePath) }
+
+        setMediaFilter(filteredList,
+            mediaState,
+            photoFragment
+        )
+    }
+
+    // Set Image/Video List According to Selection of Hide/Show Image/Video
+    @SuppressLint("NotifyDataSetChanged")
+   private fun setMediaFilter(
+        items: List<OCFile>,
+        mediaState: GalleryFragmentBottomSheetDialog.MediaState,
+        photoFragment: GalleryFragment
+    ) {
+
+        val finalSortedList: List<OCFile> = when (mediaState) {
+            GalleryFragmentBottomSheetDialog.MediaState.MEDIA_STATE_PHOTOS_ONLY -> {
+                items.filter { MimeTypeUtil.isImage(it.mimeType) }.distinct()
+            }
+            GalleryFragmentBottomSheetDialog.MediaState.MEDIA_STATE_VIDEOS_ONLY -> {
+                items.filter { MimeTypeUtil.isVideo(it.mimeType) }.distinct()
+            }
+            else -> items
+        }
+
+        if (finalSortedList.isEmpty()) {
+            photoFragment.setEmptyListMessage(SearchType.GALLERY_SEARCH)
+        }
+
+        files = finalSortedList
             .groupBy { firstOfMonth(it.modificationTimestamp) }
             .map { GalleryItems(it.key, FileStorageUtils.sortOcFolderDescDateModifiedWithoutFavoritesFirst(it.value)) }
             .sortedBy { it.date }.reversed()
@@ -168,6 +208,12 @@ class GalleryAdapter(
         Handler(Looper.getMainLooper()).post { notifyDataSetChanged() }
     }
 
+    @SuppressLint("NotifyDataSetChanged")
+    fun clear() {
+        files = emptyList()
+        Handler(Looper.getMainLooper()).post { notifyDataSetChanged() }
+    }
+
     private fun firstOfMonth(timestamp: Long): Long {
         val cal = Calendar.getInstance()
         cal.time = Date(timestamp)

+ 114 - 18
app/src/main/java/com/owncloud/android/ui/fragment/GalleryFragment.java

@@ -2,8 +2,10 @@
  * Nextcloud Android client application
  *
  * @author Tobias Kaminsky
+ * @author TSI-mc
  * Copyright (C) 2019 Tobias Kaminsky
  * Copyright (C) 2019 Nextcloud GmbH
+ * Copyright (C) 2022 TSI-mc
  *
  * 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
@@ -21,24 +23,35 @@
 
 package com.owncloud.android.ui.fragment;
 
+import android.content.Intent;
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
 
 import com.nextcloud.utils.view.FastScroll;
 import com.owncloud.android.R;
+import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.ui.activity.FileDisplayActivity;
+import com.owncloud.android.ui.activity.FolderPickerActivity;
+import com.owncloud.android.ui.activity.ToolbarActivity;
 import com.owncloud.android.ui.adapter.CommonOCFileListAdapterInterface;
 import com.owncloud.android.ui.adapter.GalleryAdapter;
 import com.owncloud.android.ui.asynctasks.GallerySearchTask;
 import com.owncloud.android.ui.events.ChangeMenuEvent;
 import com.owncloud.android.ui.fragment.util.GalleryFastScrollViewHelper;
+import com.owncloud.android.utils.theme.ThemeMenuUtils;
+
+import javax.inject.Inject;
 
 import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.fragment.app.FragmentActivity;
 import androidx.recyclerview.widget.GridLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
@@ -46,7 +59,7 @@ import androidx.recyclerview.widget.RecyclerView;
 /**
  * A Fragment that lists all files and folders in a given path
  */
-public class GalleryFragment extends OCFileListFragment {
+public class GalleryFragment extends OCFileListFragment implements GalleryFragmentBottomSheetActions {
     private static final int MAX_ITEMS_PER_ROW = 10;
     private boolean photoSearchQueryRunning = false;
     private AsyncTask<Void, Void, GallerySearchTask.Result> photoSearchTask;
@@ -56,10 +69,23 @@ public class GalleryFragment extends OCFileListFragment {
     private int limit = 300;
     private GalleryAdapter mAdapter;
 
+    private static final int SELECT_LOCATION_REQUEST_CODE = 212;
+    private OCFile remoteFile;
+    private GalleryFragmentBottomSheetDialog galleryFragmentBottomSheetDialog;
+
+    @Inject ThemeMenuUtils themeMenuUtils;
+    @Inject FileDataStorageManager fileDataStorageManager;
+
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         searchFragment = true;
+
+        setHasOptionsMenu(true);
+
+        if (galleryFragmentBottomSheetDialog == null) {
+            galleryFragmentBottomSheetDialog = new GalleryFragmentBottomSheetDialog(this);
+        }
     }
 
     @Override
@@ -78,6 +104,8 @@ public class GalleryFragment extends OCFileListFragment {
     public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
         View v = super.onCreateView(inflater, container, savedInstanceState);
 
+        remoteFile = fileDataStorageManager.getDefaultRootPath();
+
         getRecyclerView().addOnScrollListener(new RecyclerView.OnScrollListener() {
             @Override
             public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
@@ -98,6 +126,8 @@ public class GalleryFragment extends OCFileListFragment {
         menuItemAddRemoveValue = MenuItemAddRemove.REMOVE_GRID_AND_SORT;
         requireActivity().invalidateOptionsMenu();
 
+        updateSubtitle(galleryFragmentBottomSheetDialog.getCurrMediaState());
+
         handleSearchEvent();
     }
 
@@ -128,7 +158,6 @@ public class GalleryFragment extends OCFileListFragment {
     @Override
     public void onRefresh() {
         super.onRefresh();
-
         handleSearchEvent();
     }
 
@@ -159,7 +188,7 @@ public class GalleryFragment extends OCFileListFragment {
         setEmptyListLoadingMessage();
 
         // always show first stored items
-        mAdapter.showAllGalleryItems();
+        showAllGalleryItems();
 
         setFabVisible(false);
 
@@ -174,18 +203,13 @@ public class GalleryFragment extends OCFileListFragment {
             startDate = (System.currentTimeMillis() / 1000) - 30 * 24 * 60 * 60;
             endDate = System.currentTimeMillis() / 1000;
 
-            photoSearchTask = new GallerySearchTask(this,
-                                                    accountManager.getUser(),
-                                                    mContainerActivity.getStorageManager(),
-                                                    startDate,
-                                                    endDate,
-                                                    limit)
-                .execute();
+            runGallerySearchTask();
         }
     }
 
     public void searchCompleted(boolean emptySearch, long lastTimeStamp) {
         photoSearchQueryRunning = false;
+        mAdapter.notifyDataSetChanged();
 
         if (mAdapter.isEmpty()) {
             setEmptyListMessage(SearchType.GALLERY_SEARCH);
@@ -214,6 +238,54 @@ public class GalleryFragment extends OCFileListFragment {
 
         startDate = endDate - (daySpan * 24 * 60 * 60);
 
+        runGallerySearchTask();
+    }
+
+    @Override
+    public void onCreateOptionsMenu(Menu menu, @NonNull MenuInflater inflater) {
+        super.onCreateOptionsMenu(menu, inflater);
+
+        inflater.inflate(R.menu.fragment_gallery_three_dots, menu);
+
+        MenuItem menuItem = menu.findItem(R.id.action_three_dot_icon);
+
+        if (menuItem != null) {
+            themeMenuUtils.tintMenuIcon(menuItem,
+                                        themeColorUtils.appBarPrimaryFontColor(requireContext()));
+        }
+
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+
+        // Handle item selection
+        if (item.getItemId() == R.id.action_three_dot_icon && !photoSearchQueryRunning
+            && galleryFragmentBottomSheetDialog != null) {
+            galleryFragmentBottomSheetDialog.show(getChildFragmentManager(),"data" );
+            return true;
+        }
+        return super.onOptionsItemSelected(item);
+    }
+
+    @Override
+    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+        if (requestCode == SELECT_LOCATION_REQUEST_CODE && data != null) {
+            OCFile chosenFolder = data.getParcelableExtra(FolderPickerActivity.EXTRA_FOLDER);
+            if (chosenFolder != null) {
+                remoteFile = chosenFolder;
+                searchAndDisplayAfterChangingFolder();
+            }
+        }
+        super.onActivityResult(requestCode, resultCode, data);
+    }
+
+    private void searchAndDisplayAfterChangingFolder() {
+        mAdapter.clear();
+        runGallerySearchTask();
+    }
+
+    private void runGallerySearchTask() {
         photoSearchTask = new GallerySearchTask(this,
                                                 accountManager.getUser(),
                                                 mContainerActivity.getStorageManager(),
@@ -252,19 +324,43 @@ public class GalleryFragment extends OCFileListFragment {
                     startDate = endDate - (daySpan * 24 * 60 * 60);
 
                     photoSearchQueryRunning = true;
-                    photoSearchTask = new GallerySearchTask(this,
-                                                            accountManager.getUser(),
-                                                            mContainerActivity.getStorageManager(),
-                                                            startDate,
-                                                            endDate,
-                                                            limit)
-                        .execute();
+                    runGallerySearchTask();
                 }
             }
         }
     }
 
+    @Override
+    public void updateMediaContent(GalleryFragmentBottomSheetDialog.MediaState mediaState) {
+            showAllGalleryItems();
+    }
+
+    @Override
+    public void selectMediaFolder() {
+        Intent action = new Intent(requireActivity(), FolderPickerActivity.class);
+        action.putExtra(FolderPickerActivity.EXTRA_ACTION, FolderPickerActivity.CHOOSE_LOCATION);
+        startActivityForResult(action, SELECT_LOCATION_REQUEST_CODE);
+    }
+
     public void showAllGalleryItems() {
-        mAdapter.showAllGalleryItems();
+        mAdapter.showAllGalleryItems(remoteFile.getRemotePath(),
+                                     galleryFragmentBottomSheetDialog.getCurrMediaState(),
+                                     this);
+
+        updateSubtitle(galleryFragmentBottomSheetDialog.getCurrMediaState());
+    }
+
+    private void updateSubtitle(GalleryFragmentBottomSheetDialog.MediaState mediaState) {
+        requireActivity().runOnUiThread(() -> {
+            String subTitle = requireContext().getResources().getString(R.string.subtitle_photos_videos);
+            if (mediaState == GalleryFragmentBottomSheetDialog.MediaState.MEDIA_STATE_PHOTOS_ONLY) {
+                subTitle = requireContext().getResources().getString(R.string.subtitle_photos_only);
+            } else if (mediaState == GalleryFragmentBottomSheetDialog.MediaState.MEDIA_STATE_VIDEOS_ONLY) {
+                subTitle = requireContext().getResources().getString(R.string.subtitle_videos_only);
+            }
+            if (requireActivity() instanceof ToolbarActivity) {
+                ((ToolbarActivity) requireActivity()).updateToolbarSubtitle(subTitle);
+            }
+        });
     }
 }

+ 34 - 0
app/src/main/java/com/owncloud/android/ui/fragment/GalleryFragmentBottomSheetActions.kt

@@ -0,0 +1,34 @@
+/*
+ * Nextcloud Android client application
+ *
+ * @author TSI-mc
+ * Copyright (C) 2022 TSI-mc
+ * Copyright (C) 2022 Nextcloud GmbH
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package com.owncloud.android.ui.fragment
+
+interface GalleryFragmentBottomSheetActions {
+    /**
+     * show/hide all the images & videos in particular Folder.
+     */
+    fun updateMediaContent(mediaState: GalleryFragmentBottomSheetDialog.MediaState)
+
+    /**
+     * load all media of a particular folder.
+     */
+    fun selectMediaFolder()
+}

+ 110 - 0
app/src/main/java/com/owncloud/android/ui/fragment/GalleryFragmentBottomSheetDialog.kt

@@ -0,0 +1,110 @@
+/*
+ * Nextcloud Android client application
+ *
+ * @author TSI-mc
+ * Copyright (C) 2022 TSI-mc
+ * Copyright (C) 2022 Nextcloud GmbH
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+package com.owncloud.android.ui.fragment
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import com.google.android.material.bottomsheet.BottomSheetBehavior
+import com.google.android.material.bottomsheet.BottomSheetDialogFragment
+import com.owncloud.android.databinding.FragmentGalleryBottomSheetBinding
+
+class GalleryFragmentBottomSheetDialog(
+    private val actions: GalleryFragmentBottomSheetActions
+) : BottomSheetDialogFragment() {
+    private lateinit var binding: FragmentGalleryBottomSheetBinding
+    private lateinit var mBottomBehavior: BottomSheetBehavior<*>
+    private var currentMediaState: MediaState = MediaState.MEDIA_STATE_DEFAULT
+
+    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+        binding = FragmentGalleryBottomSheetBinding.inflate(layoutInflater, container, false)
+        return binding.root
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+        setupLayout()
+        setupClickListener()
+        mBottomBehavior = BottomSheetBehavior.from(binding.root.parent as View)
+    }
+
+    public override fun onStart() {
+        super.onStart()
+        mBottomBehavior.state = BottomSheetBehavior.STATE_EXPANDED
+    }
+
+    private fun setupLayout() {
+        when (currentMediaState) {
+            MediaState.MEDIA_STATE_PHOTOS_ONLY -> {
+                binding.tickMarkShowImages.visibility = View.VISIBLE
+                binding.tickMarkShowVideo.visibility = View.GONE
+            }
+            MediaState.MEDIA_STATE_VIDEOS_ONLY -> {
+                binding.tickMarkShowImages.visibility = View.GONE
+                binding.tickMarkShowVideo.visibility = View.VISIBLE
+            }
+            else -> {
+                binding.tickMarkShowImages.visibility = View.VISIBLE
+                binding.tickMarkShowVideo.visibility = View.VISIBLE
+            }
+        }
+    }
+
+    private fun setupClickListener() {
+        binding.hideImages.setOnClickListener { v: View? ->
+            currentMediaState = if (currentMediaState == MediaState.MEDIA_STATE_VIDEOS_ONLY) {
+                MediaState.MEDIA_STATE_DEFAULT
+            } else {
+                MediaState.MEDIA_STATE_VIDEOS_ONLY
+            }
+            notifyStateChange()
+            dismiss()
+        }
+        binding.hideVideo.setOnClickListener { v: View? ->
+            currentMediaState = if (currentMediaState == MediaState.MEDIA_STATE_PHOTOS_ONLY) {
+                MediaState.MEDIA_STATE_DEFAULT
+            } else {
+                MediaState.MEDIA_STATE_PHOTOS_ONLY
+            }
+            notifyStateChange()
+            dismiss()
+        }
+        binding.selectMediaFolder.setOnClickListener { v: View? ->
+            actions.selectMediaFolder()
+            dismiss()
+        }
+    }
+
+    private fun notifyStateChange() {
+        setupLayout()
+        actions.updateMediaContent(currentMediaState)
+    }
+
+    val currMediaState: MediaState
+        get() = currentMediaState
+
+    enum class MediaState {
+        MEDIA_STATE_DEFAULT,
+        MEDIA_STATE_PHOTOS_ONLY,
+        MEDIA_STATE_VIDEOS_ONLY
+    }
+}

+ 19 - 0
app/src/main/java/com/owncloud/android/utils/theme/ThemeMenuUtils.java

@@ -3,9 +3,11 @@
  *
  * @author Tobias Kaminsky
  * @author Andy Scherzinger
+ * @author TSI-mc
  * Copyright (C) 2017 Tobias Kaminsky
  * Copyright (C) 2017 Nextcloud GmbH
  * Copyright (C) 2018 Andy Scherzinger
+ * Copyright (C) 2022 TSI-mc
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Affero General Public License as published by
@@ -22,11 +24,15 @@
  */
 package com.owncloud.android.utils.theme;
 
+import android.graphics.drawable.Drawable;
 import android.text.Spannable;
 import android.text.SpannableString;
 import android.text.style.ForegroundColorSpan;
 import android.view.MenuItem;
 
+import androidx.annotation.NonNull;
+import androidx.core.graphics.drawable.DrawableCompat;
+
 /**
  * Utility class with methods for client side checkable theming.
  */
@@ -43,4 +49,17 @@ public final class ThemeMenuUtils {
                              Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
         item.setTitle(newItemTitle);
     }
+
+    /**
+     * tinting menu item color
+     *
+     * @param item    the menu item object
+     * @param color   the color wanted as a color resource
+     */
+    public void tintMenuIcon(@NonNull MenuItem item, int color) {
+        Drawable normalDrawable = item.getIcon();
+        Drawable wrapDrawable = DrawableCompat.wrap(normalDrawable);
+        DrawableCompat.setTint(wrapDrawable, color);
+        item.setIcon(wrapDrawable);
+    }
 }

+ 32 - 0
app/src/main/res/drawable/ic_tick.xml

@@ -0,0 +1,32 @@
+<!--
+ Nextcloud Android client application
+
+ @author TSI-mc
+ Copyright (C) 2022 TSI-mc
+ Copyright (C) 2022 Nextcloud GmbH
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero 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 Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
+ -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+  <path
+      android:pathData="M9,20.215L1.695,12.91C1.2205,12.4202 1.2262,11.6405 1.7077,11.1577C2.1892,10.6748 2.9689,10.6669 3.46,11.14L9,16.68L21,4.68C21.4944,4.238 22.248,4.2591 22.7169,4.7281C23.1859,5.197 23.207,5.9506 22.765,6.445L9,20.215Z"
+      android:strokeWidth="1"
+      android:fillColor="#262626"
+      android:fillType="evenOdd"
+      android:strokeColor="#00000000"/>
+</vector>

+ 32 - 0
app/src/main/res/drawable/ic_video_camera.xml

@@ -0,0 +1,32 @@
+<!--
+ Nextcloud Android client application
+
+ @author TSI-mc
+ Copyright (C) 2022 TSI-mc
+ Copyright (C) 2022 Nextcloud GmbH
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero 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 Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
+ -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+  <path
+      android:pathData="M20,5L20,8.8L21.8,7L23.5,7L23.5,17L21.8,17L20,15.2L20,17C20,18.65 18.65,20 17,20L17,20L5,20C3.35,20 2,18.65 2,17L2,17L2,10.5L0.5,10.5L0.5,6.5L2,6.5L2,5L20,5ZM18.5,6.5L3.5,6.5L3.5,17C3.5,17.85 4.15,18.5 5,18.5L5,18.5L17,18.5C17.85,18.5 18.5,17.85 18.5,17L18.5,17L18.5,6.5ZM9,9.25L14,12.5L9,15.75L9,9.25ZM22,8.9L20,10.9L20,13.1L22,15.1L22,8.9Z"
+      android:strokeWidth="1"
+      android:fillColor="#262626"
+      android:fillType="evenOdd"
+      android:strokeColor="#00000000"/>
+</vector>

+ 147 - 0
app/src/main/res/layout/fragment_gallery_bottom_sheet.xml

@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Nextcloud Android client application
+
+ @author TSI-mc
+ Copyright (C) 2022 TSI-mc
+ Copyright (C) 2022 Nextcloud GmbH
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero 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 Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
+ -->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical"
+    android:background="@color/bg_default"
+    android:paddingBottom="@dimen/standard_half_padding">
+
+    <RelativeLayout
+        android:id="@+id/hideImages"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="?android:attr/selectableItemBackground"
+        android:orientation="horizontal"
+        android:paddingLeft="@dimen/standard_padding"
+        android:paddingTop="@dimen/standard_padding"
+        android:paddingRight="@dimen/standard_padding"
+        android:paddingBottom="@dimen/standard_half_padding">
+
+        <ImageView
+            android:id="@+id/hideImagesImageview"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:contentDescription="@null"
+            android:src="@drawable/ic_camera"
+            app:tint="@color/primary" />
+
+        <TextView
+            android:id="@+id/hideImagesTextview"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_vertical"
+            android:layout_marginStart="@dimen/standard_margin"
+            android:layout_marginEnd="30dp"
+            android:layout_toEndOf="@id/hideImagesImageview"
+            android:text="@string/show_images"
+            android:textColor="@color/text_color"
+            android:textSize="@dimen/bottom_sheet_text_size" />
+
+        <ImageView
+            android:id="@+id/tickMarkShowImages"
+            android:layout_width="24dp"
+            android:layout_height="24dp"
+            android:layout_alignParentEnd="true"
+            android:contentDescription="@null"
+            android:src="@drawable/ic_tick"
+            android:visibility="gone"
+            app:tint="@color/primary"
+            tools:visibility="visible" />
+
+
+    </RelativeLayout>
+
+    <RelativeLayout
+        android:id="@+id/hideVideo"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="?android:attr/selectableItemBackground"
+        android:orientation="horizontal"
+        android:paddingLeft="@dimen/standard_padding"
+        android:paddingTop="@dimen/standard_half_padding"
+        android:paddingRight="@dimen/standard_padding"
+        android:paddingBottom="@dimen/standard_half_padding">
+
+        <ImageView
+            android:id="@+id/hideVideoImageView"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:contentDescription="@null"
+            android:src="@drawable/ic_video_camera"
+            app:tint="@color/primary" />
+
+        <TextView
+            android:id="@+id/hideVideoTextview"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_vertical"
+            android:layout_marginStart="@dimen/standard_margin"
+            android:layout_toEndOf="@id/hideVideoImageView"
+            android:text="@string/show_video"
+            android:textColor="@color/text_color"
+            android:textSize="@dimen/bottom_sheet_text_size" />
+
+        <ImageView
+            android:id="@+id/tickMarkShowVideo"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_alignParentEnd="true"
+            android:contentDescription="@null"
+            android:src="@drawable/ic_tick"
+            android:visibility="gone"
+            app:tint="@color/primary"
+            tools:visibility="visible" />
+
+    </RelativeLayout>
+
+    <LinearLayout
+        android:id="@+id/selectMediaFolder"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="?android:attr/selectableItemBackground"
+        android:orientation="horizontal"
+        android:paddingLeft="@dimen/standard_padding"
+        android:paddingTop="@dimen/standard_half_padding"
+        android:paddingRight="@dimen/standard_padding"
+        android:paddingBottom="@dimen/standard_half_padding">
+
+        <ImageView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:contentDescription="@null"
+            android:src="@drawable/nav_photos"
+            app:tint="@color/primary" />
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_vertical"
+            android:layout_marginStart="@dimen/standard_margin"
+            android:text="@string/select_media_folder"
+            android:textColor="@color/text_color"
+            android:textSize="@dimen/bottom_sheet_text_size" />
+    </LinearLayout>
+
+</LinearLayout>

+ 33 - 0
app/src/main/res/menu/fragment_gallery_three_dots.xml

@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Nextcloud Android client application
+
+ @author TSI-mc
+ Copyright (C) 2022 TSI-mc
+ Copyright (C) 2022 Nextcloud GmbH
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero 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 Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
+ -->
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+    <item
+        android:id="@+id/action_three_dot_icon"
+        android:contentDescription="@string/more"
+        android:orderInCategory="1"
+        android:title="@string/more"
+        app:showAsAction="always"
+        android:icon="@drawable/ic_dots_vertical"/>
+
+</menu>

+ 8 - 0
app/src/main/res/values-de/strings.xml

@@ -910,4 +910,12 @@
         <item quantity="one">%d ausgewählt</item>
         <item quantity="other">%d ausgewählt</item>
     </plurals>
+    <string name="subtitle_photos_videos">Fotos &amp; videos</string>
+    <string name="show_images">Bilder anzeigen</string>
+    <string name="subtitle_photos_only">Nur Fotos</string>
+    <string name="show_video">Videos anzeigen</string>
+    <string name="subtitle_videos_only">Nur Videos</string>
+    <string name="select_media_folder">Medienordner festlegen</string>
+    <string name="choose_location">Speicherort wählen</string>
+    <string name="common_select">Auswählen</string>
 </resources>

+ 8 - 0
app/src/main/res/values/strings.xml

@@ -1008,6 +1008,14 @@
     <string name="pdf_zoom_tip">Tap on a page to zoom in</string>
     <string name="storage_permission_full_access">Full access</string>
     <string name="storage_permission_media_read_only">Media read-only</string>
+    <string name="subtitle_photos_videos">Photos &amp; videos</string>
+    <string name="show_images">Show photos</string>
+    <string name="subtitle_photos_only">Photos only</string>
+    <string name="show_video">Show videos</string>
+    <string name="subtitle_videos_only">Videos only</string>
+    <string name="select_media_folder">Set media folder</string>
+    <string name="choose_location">Choose location</string>
+    <string name="common_select">Select</string>
     <string name="lock_file">Lock file</string>
     <string name="unlock_file">Unlock file</string>
     <string name="error_file_lock">Error changing file lock status</string>