Skip to content

Commit 56330e0

Browse files
committed
improve storage permission ui ux
Signed-off-by: alperozturk <[email protected]>
1 parent 4432785 commit 56330e0

File tree

4 files changed

+53
-37
lines changed

4 files changed

+53
-37
lines changed

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

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,11 @@ import com.nextcloud.client.jobs.upload.FileUploadWorker
3838
import com.nextcloud.client.preferences.SubFolderRule
3939
import com.nextcloud.utils.extensions.getParcelableArgument
4040
import com.nextcloud.utils.extensions.isDialogFragmentReady
41+
import com.nextcloud.utils.extensions.setVisibleIf
4142
import com.owncloud.android.BuildConfig
4243
import com.owncloud.android.MainApp
4344
import com.owncloud.android.R
45+
import com.owncloud.android.databinding.StoragePermissionWarningBannerBinding
4446
import com.owncloud.android.databinding.SyncedFoldersLayoutBinding
4547
import com.owncloud.android.datamodel.ArbitraryDataProviderImpl
4648
import com.owncloud.android.datamodel.MediaFolder
@@ -53,6 +55,7 @@ import com.owncloud.android.datamodel.SyncedFolderProvider
5355
import com.owncloud.android.files.services.NameCollisionPolicy
5456
import com.owncloud.android.lib.common.utils.Log_OC
5557
import com.owncloud.android.ui.adapter.SyncedFolderAdapter
58+
import com.owncloud.android.ui.adapter.storagePermissionBanner.setup
5659
import com.owncloud.android.ui.decoration.MediaGridItemDecoration
5760
import com.owncloud.android.ui.dialog.ConfirmationDialogFragment
5861
import com.owncloud.android.ui.dialog.SyncedFolderPreferencesDialogFragment
@@ -66,7 +69,6 @@ import kotlinx.coroutines.withContext
6669
import java.io.File
6770
import java.util.Locale
6871
import javax.inject.Inject
69-
import com.nextcloud.utils.extensions.setVisibleIf
7072

7173
/**
7274
* Activity displaying all auto-synced folders and/or instant upload media folders.
@@ -198,14 +200,20 @@ class SyncedFoldersActivity :
198200
setTheme(R.style.FallbackThemingTheme)
199201
}
200202
binding.emptyList.emptyListViewAction.setOnClickListener { showHiddenItems() }
201-
binding.storagePermissionWarningBanner.root.setVisibleIf(shouldShowStoragePermissionWarningBanner())
203+
setupStoragePermissionWarningBanner()
202204
}
203205

204-
private fun shouldShowStoragePermissionWarningBanner(): Boolean {
205-
return !PermissionUtil.checkStoragePermission(this)
206-
&& preferences.showStoragePermissionBanner()
206+
private fun setupStoragePermissionWarningBanner() {
207+
val storagePermissionWarningBanner = binding.storagePermissionWarningBanner.root
208+
StoragePermissionWarningBannerBinding.bind(storagePermissionWarningBanner).apply {
209+
setup(appPreferences)
210+
}
211+
storagePermissionWarningBanner.setVisibleIf(shouldShowStoragePermissionWarningBanner())
207212
}
208213

214+
private fun shouldShowStoragePermissionWarningBanner(): Boolean = !PermissionUtil.checkStoragePermission(this) &&
215+
preferences.showStoragePermissionBanner()
216+
209217
override fun onCreateOptionsMenu(menu: Menu): Boolean {
210218
val inflater = menuInflater
211219
inflater.inflate(R.menu.activity_synced_folders, menu)
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*
2+
* Nextcloud - Android Client
3+
*
4+
* SPDX-FileCopyrightText: 2025 Alper Ozturk <[email protected]>
5+
* SPDX-License-Identifier: AGPL-3.0-or-later
6+
*/
7+
package com.owncloud.android.ui.adapter.storagePermissionBanner
8+
9+
import android.view.View
10+
import com.nextcloud.client.preferences.AppPreferences
11+
import com.nextcloud.utils.extensions.openAllFilesAccessSettings
12+
import com.nextcloud.utils.extensions.openMediaPermissions
13+
import com.nextcloud.utils.extensions.setVisibleIf
14+
import com.owncloud.android.databinding.StoragePermissionWarningBannerBinding
15+
import com.owncloud.android.utils.PermissionUtil
16+
17+
fun StoragePermissionWarningBannerBinding.setup(appPreferences: AppPreferences) {
18+
val context = this.root.context
19+
20+
fullFileAccess.setVisibleIf(!PermissionUtil.checkFullFileAccess())
21+
fullFileAccess.setOnClickListener { context.openAllFilesAccessSettings() }
22+
23+
mediaReadOnly.setVisibleIf(!PermissionUtil.checkMediaAccess(context))
24+
mediaReadOnly.setOnClickListener { context.openMediaPermissions() }
25+
26+
dontShowStoragePermissionBanner.setOnClickListener {
27+
root.visibility = View.GONE
28+
appPreferences.setShowStoragePermissionBanner(false)
29+
}
30+
31+
root.visibility = if (PermissionUtil.checkFullFileAccess() || PermissionUtil.checkMediaAccess(context)) {
32+
View.GONE
33+
} else {
34+
View.VISIBLE
35+
}
36+
}

app/src/main/java/com/owncloud/android/ui/adapter/storagePermissionBanner/StoragePermissionBannerViewHolder.kt

Lines changed: 3 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -9,43 +9,14 @@ package com.owncloud.android.ui.adapter.storagePermissionBanner
99

1010
import android.view.View
1111
import androidx.recyclerview.widget.RecyclerView
12-
import com.google.android.material.button.MaterialButton
1312
import com.nextcloud.client.preferences.AppPreferences
14-
import com.nextcloud.utils.extensions.openAllFilesAccessSettings
15-
import com.nextcloud.utils.extensions.openMediaPermissions
16-
import com.nextcloud.utils.extensions.setVisibleIf
17-
import com.owncloud.android.R
18-
import com.owncloud.android.utils.PermissionUtil
13+
import com.owncloud.android.databinding.StoragePermissionWarningBannerBinding
1914

2015
class StoragePermissionBannerViewHolder(itemView: View, private val appPreferences: AppPreferences) :
2116
RecyclerView.ViewHolder(itemView) {
22-
23-
private val fullFileAccessButton: MaterialButton =
24-
itemView.findViewById(R.id.fullFileAccess)
25-
private val mediaAccessButton: MaterialButton =
26-
itemView.findViewById(R.id.mediaReadOnly)
27-
private val dismissButton: MaterialButton =
28-
itemView.findViewById(R.id.dontShowStoragePermissionBanner)
29-
3017
init {
31-
val context = itemView.context
32-
33-
fullFileAccessButton.setVisibleIf(!PermissionUtil.checkFullFileAccess())
34-
fullFileAccessButton.setOnClickListener {
35-
context.openAllFilesAccessSettings()
36-
}
37-
mediaAccessButton.setVisibleIf(!PermissionUtil.checkMediaAccess(context))
38-
mediaAccessButton.setOnClickListener {
39-
context.openMediaPermissions()
18+
StoragePermissionWarningBannerBinding.bind(itemView).apply {
19+
setup(appPreferences)
4020
}
41-
42-
dismissButton.setOnClickListener {
43-
dontShowBanner()
44-
}
45-
}
46-
47-
private fun dontShowBanner() {
48-
itemView.visibility = View.GONE
49-
appPreferences.setShowStoragePermissionBanner(false)
5021
}
5122
}

app/src/main/res/layout/synced_folders_layout.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
android:layout_width="match_parent"
3737
android:layout_height="wrap_content"
3838
android:visibility="gone"
39+
android:layout_marginTop="@dimen/standard_margin"
3940
android:layout_marginHorizontal="@dimen/standard_margin"
4041
tools:visibility="visible" />
4142

0 commit comments

Comments
 (0)