Skip to content

Commit ab45504

Browse files
authored
Merge pull request #4032 from owncloud/feature/settings_more_fileapp
[FEATURE REQUEST] Add suggested app to access document provider
2 parents 1308ca1 + 87f761c commit ab45504

File tree

9 files changed

+134
-17
lines changed

9 files changed

+134
-17
lines changed

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ Summary
2424
* Enhancement - Updated WebFinger flow: [#3998](https://github.com/owncloud/android/issues/3998)
2525
* Enhancement - Monochrome icon for the app: [#4001](https://github.com/owncloud/android/pull/4001)
2626
* Enhancement - Add prompt parameter to OIDC flow: [#4011](https://github.com/owncloud/android/pull/4011)
27+
* Enhancement - New setting "Access document provider": [#4032](https://github.com/owncloud/android/pull/4032)
2728

2829
Details
2930
-------
@@ -168,6 +169,14 @@ Details
168169
https://github.com/owncloud/android/issues/3984
169170
https://github.com/owncloud/android/pull/4011
170171

172+
* Enhancement - New setting "Access document provider": [#4032](https://github.com/owncloud/android/pull/4032)
173+
174+
A new setting has been added in the "More" settings section with a suggested app to access the
175+
document provider.
176+
177+
https://github.com/owncloud/android/issues/4028
178+
https://github.com/owncloud/android/pull/4032
179+
171180
Changelog for ownCloud Android Client [3.0.4] (2023-03-07)
172181
=======================================
173182
The following sections list the changes in ownCloud Android Client 3.0.4 relevant to

changelog/unreleased/4032

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
Enhancement: New setting "Access document provider"
2+
3+
A new setting has been added in the "More" settings section with a
4+
suggested app to access the document provider.
5+
6+
https://github.com/owncloud/android/pull/4032
7+
https://github.com/owncloud/android/issues/4028

owncloudApp/src/androidTest/java/com/owncloud/android/settings/more/SettingsMoreFragmentTest.kt

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@
33
*
44
* @author Juan Carlos Garrote Gascón
55
*
6-
* Copyright (C) 2021 ownCloud GmbH.
7-
* <p>
6+
* Copyright (C) 2023 ownCloud GmbH.
7+
*
88
* This program is free software: you can redistribute it and/or modify
99
* it under the terms of the GNU General Public License version 2,
1010
* as published by the Free Software Foundation.
11-
* <p>
11+
*
1212
* This program is distributed in the hope that it will be useful,
1313
* but WITHOUT ANY WARRANTY; without even the implied warranty of
1414
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1515
* GNU General Public License for more details.
16-
* <p>
16+
*
1717
* You should have received a copy of the GNU General Public License
1818
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1919
*/
@@ -64,6 +64,7 @@ class SettingsMoreFragmentTest {
6464

6565
private var prefHelp: Preference? = null
6666
private var prefSync: Preference? = null
67+
private var prefAccessDocProvider: Preference? = null
6768
private var prefRecommend: Preference? = null
6869
private var prefFeedback: Preference? = null
6970
private var prefImprint: Preference? = null
@@ -110,12 +111,14 @@ class SettingsMoreFragmentTest {
110111
private fun launchTest(
111112
helpEnabled: Boolean = true,
112113
syncEnabled: Boolean = true,
114+
docProviderAppEnabled: Boolean = true,
113115
recommendEnabled: Boolean = true,
114116
feedbackEnabled: Boolean = true,
115117
imprintEnabled: Boolean = true
116118
) {
117119
every { moreViewModel.isHelpEnabled() } returns helpEnabled
118120
every { moreViewModel.isSyncEnabled() } returns syncEnabled
121+
every { moreViewModel.isDocProviderAppEnabled() } returns docProviderAppEnabled
119122
every { moreViewModel.isRecommendEnabled() } returns recommendEnabled
120123
every { moreViewModel.isFeedbackEnabled() } returns feedbackEnabled
121124
every { moreViewModel.isImprintEnabled() } returns imprintEnabled
@@ -146,6 +149,16 @@ class SettingsMoreFragmentTest {
146149
enabled = true
147150
)
148151

152+
prefAccessDocProvider = getPreference(PREFERENCE_ACCESS_DOCUMENT_PROVIDER)
153+
assertNotNull(prefAccessDocProvider)
154+
prefAccessDocProvider?.verifyPreference(
155+
keyPref = PREFERENCE_ACCESS_DOCUMENT_PROVIDER,
156+
titlePref = context.getString(R.string.prefs_access_document_provider),
157+
summaryPref = context.getString(R.string.prefs_access_document_provider_summary),
158+
visible = true,
159+
enabled = true
160+
)
161+
149162
prefRecommend = getPreference(PREFERENCE_RECOMMEND)
150163
assertNotNull(prefRecommend)
151164
prefRecommend?.verifyPreference(
@@ -190,6 +203,14 @@ class SettingsMoreFragmentTest {
190203
assertNull(prefSync)
191204
}
192205

206+
@Test
207+
fun accessDocumentProviderNotEnabledView() {
208+
launchTest(docProviderAppEnabled = false)
209+
prefAccessDocProvider = getPreference(PREFERENCE_ACCESS_DOCUMENT_PROVIDER)
210+
211+
assertNull(prefAccessDocProvider)
212+
}
213+
193214
@Test
194215
fun recommendNotEnabledView() {
195216
launchTest(recommendEnabled = false)
@@ -238,6 +259,18 @@ class SettingsMoreFragmentTest {
238259
intended(hasData(context.getString(R.string.url_sync_calendar_contacts)))
239260
}
240261

262+
@Test
263+
fun accessDocumentProviderOpensNotEmptyUrl() {
264+
every { moreViewModel.getDocProviderAppUrl() } returns context.getString(R.string.url_document_provider_app)
265+
266+
launchTest()
267+
268+
mockIntent(action = Intent.ACTION_VIEW)
269+
onView(withText(R.string.prefs_access_document_provider)).perform(click())
270+
271+
intended(hasData(context.getString(R.string.url_document_provider_app)))
272+
}
273+
241274
@Test
242275
fun recommendOpensSender() {
243276
launchTest()
@@ -307,6 +340,7 @@ class SettingsMoreFragmentTest {
307340
companion object {
308341
private const val PREFERENCE_HELP = "help"
309342
private const val PREFERENCE_SYNC_CALENDAR_CONTACTS = "syncCalendarContacts"
343+
private const val PREFERENCE_ACCESS_DOCUMENT_PROVIDER = "accessDocumentProvider"
310344
private const val PREFERENCE_RECOMMEND = "recommend"
311345
private const val PREFERENCE_FEEDBACK = "feedback"
312346
private const val PREFERENCE_IMPRINT = "imprint"

owncloudApp/src/main/java/com/owncloud/android/presentation/settings/more/SettingsMoreFragment.kt

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@
33
*
44
* @author Juan Carlos Garrote Gascón
55
*
6-
* Copyright (C) 2021 ownCloud GmbH.
7-
* <p>
6+
* Copyright (C) 2023 ownCloud GmbH.
7+
*
88
* This program is free software: you can redistribute it and/or modify
99
* it under the terms of the GNU General Public License version 2,
1010
* as published by the Free Software Foundation.
11-
* <p>
11+
*
1212
* This program is distributed in the hope that it will be useful,
1313
* but WITHOUT ANY WARRANTY; without even the implied warranty of
1414
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1515
* GNU General Public License for more details.
16-
* <p>
16+
*
1717
* You should have received a copy of the GNU General Public License
1818
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1919
*/
@@ -39,6 +39,7 @@ class SettingsMoreFragment : PreferenceFragmentCompat() {
3939
private var moreScreen: PreferenceScreen? = null
4040
private var prefHelp: Preference? = null
4141
private var prefSync: Preference? = null
42+
private var prefAccessDocProvider: Preference? = null
4243
private var prefRecommend: Preference? = null
4344
private var prefFeedback: Preference? = null
4445
private var prefImprint: Preference? = null
@@ -49,6 +50,7 @@ class SettingsMoreFragment : PreferenceFragmentCompat() {
4950
moreScreen = findPreference(SCREEN_MORE)
5051
prefHelp = findPreference(PREFERENCE_HELP)
5152
prefSync = findPreference(PREFERENCE_SYNC_CALENDAR_CONTACTS)
53+
prefAccessDocProvider = findPreference(PREFERENCE_ACCESS_DOCUMENT_PROVIDER)
5254
prefRecommend = findPreference(PREFERENCE_RECOMMEND)
5355
prefFeedback = findPreference(PREFERENCE_FEEDBACK)
5456
prefImprint = findPreference(PREFERENCE_IMPRINT)
@@ -75,6 +77,17 @@ class SettingsMoreFragment : PreferenceFragmentCompat() {
7577
moreScreen?.removePreferenceFromScreen(prefSync)
7678
}
7779

80+
// Access document provider
81+
if (moreViewModel.isDocProviderAppEnabled()) {
82+
prefAccessDocProvider?.setOnPreferenceClickListener {
83+
val docProviderAppUrl = moreViewModel.getDocProviderAppUrl()
84+
requireActivity().goToUrl(docProviderAppUrl)
85+
true
86+
}
87+
} else {
88+
moreScreen?.removePreferenceFromScreen(prefAccessDocProvider)
89+
}
90+
7891
// Recommend
7992
if (moreViewModel.isRecommendEnabled()) {
8093
prefRecommend?.setOnPreferenceClickListener {
@@ -121,6 +134,7 @@ class SettingsMoreFragment : PreferenceFragmentCompat() {
121134
private const val SCREEN_MORE = "more_screen"
122135
private const val PREFERENCE_HELP = "help"
123136
private const val PREFERENCE_SYNC_CALENDAR_CONTACTS = "syncCalendarContacts"
137+
private const val PREFERENCE_ACCESS_DOCUMENT_PROVIDER = "accessDocumentProvider"
124138
private const val PREFERENCE_RECOMMEND = "recommend"
125139
private const val PREFERENCE_FEEDBACK = "feedback"
126140
private const val PREFERENCE_IMPRINT = "imprint"

owncloudApp/src/main/java/com/owncloud/android/presentation/settings/more/SettingsMoreViewModel.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@
33
*
44
* @author Juan Carlos Garrote Gascón
55
*
6-
* Copyright (C) 2021 ownCloud GmbH.
7-
* <p>
6+
* Copyright (C) 2023 ownCloud GmbH.
7+
*
88
* This program is free software: you can redistribute it and/or modify
99
* it under the terms of the GNU General Public License version 2,
1010
* as published by the Free Software Foundation.
11-
* <p>
11+
*
1212
* This program is distributed in the hope that it will be useful,
1313
* but WITHOUT ANY WARRANTY; without even the implied warranty of
1414
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1515
* GNU General Public License for more details.
16-
* <p>
16+
*
1717
* You should have received a copy of the GNU General Public License
1818
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1919
*/
@@ -36,6 +36,10 @@ class SettingsMoreViewModel(
3636

3737
fun getSyncUrl() = contextProvider.getString(R.string.url_sync_calendar_contacts)
3838

39+
fun isDocProviderAppEnabled() = contextProvider.getBoolean(R.bool.access_document_provider_app_enabled)
40+
41+
fun getDocProviderAppUrl() = contextProvider.getString(R.string.url_document_provider_app)
42+
3943
fun isRecommendEnabled() = contextProvider.getBoolean(R.bool.recommend_enabled)
4044

4145
fun isFeedbackEnabled() = contextProvider.getBoolean(R.bool.feedback_enabled)
@@ -49,6 +53,7 @@ class SettingsMoreViewModel(
4953
fun shouldMoreSectionBeVisible() =
5054
isHelpEnabled() ||
5155
isSyncEnabled() ||
56+
isDocProviderAppEnabled() ||
5257
isRecommendEnabled() ||
5358
isFeedbackEnabled() ||
5459
isImprintEnabled()

owncloudApp/src/main/res/values/setup.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
<!-- Help, imprint and feedback -->
6464
<bool name="help_enabled">true</bool>
6565
<bool name="sync_calendar_contacts_enabled">true</bool>
66+
<bool name="access_document_provider_app_enabled">true</bool>
6667
<bool name="imprint_enabled">false</bool>
6768
<bool name="recommend_enabled">true</bool>
6869
<bool name="feedback_enabled">true</bool>
@@ -76,6 +77,7 @@
7677
<string name="mail_feedback" formatted="false">"mailto:[email protected]"</string>
7778
<string name="url_app_download" formatted="false">"https://play.google.com/store/apps/details?id=com.owncloud.android"</string>
7879
<string name="url_sync_calendar_contacts">"https://play.google.com/store/apps/details?id=at.bitfire.davdroid"</string>
80+
<string name="url_document_provider_app">https://play.google.com/store/apps/details?id=com.marc.files</string>
7981

8082
<!--Destination mail for sending log files -->
8183
<string name="mail_logger" formatted="false"></string>

owncloudApp/src/main/res/values/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@
8888
<string name="prefs_help">Help</string>
8989
<string name="prefs_sync_calendar_contacts">Sync your contacts, calendars and tasks</string>
9090
<string name="prefs_sync_calendar_contacts_summary">Install DAVx⁵</string>
91+
<string name="prefs_access_document_provider">Access document provider</string>
92+
<string name="prefs_access_document_provider_summary">Suggested app to browse the files of your device via the Android native file explorer</string>
9193
<string name="prefs_recommend">Recommend to a friend</string>
9294
<string name="prefs_feedback">Feedback</string>
9395
<string name="prefs_imprint">Imprint</string>

owncloudApp/src/main/res/xml/settings_more.xml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@
2727
app:key="syncCalendarContacts"
2828
app:summary="@string/prefs_sync_calendar_contacts_summary"
2929
app:title="@string/prefs_sync_calendar_contacts" />
30+
<Preference
31+
app:iconSpaceReserved="false"
32+
app:key="accessDocumentProvider"
33+
app:summary="@string/prefs_access_document_provider_summary"
34+
app:title="@string/prefs_access_document_provider" />
3035
<Preference
3136
app:iconSpaceReserved="false"
3237
app:key="feedback"
@@ -40,4 +45,4 @@
4045
app:key="imprint"
4146
app:title="@string/prefs_imprint" />
4247

43-
</PreferenceScreen>
48+
</PreferenceScreen>

owncloudApp/src/test/java/com/owncloud/android/presentation/viewmodels/settings/SettingsMoreViewModelTest.kt

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@
33
*
44
* @author Juan Carlos Garrote Gascón
55
*
6-
* Copyright (C) 2021 ownCloud GmbH.
7-
* <p>
6+
* Copyright (C) 2023 ownCloud GmbH.
7+
*
88
* This program is free software: you can redistribute it and/or modify
99
* it under the terms of the GNU General Public License version 2,
1010
* as published by the Free Software Foundation.
11-
* <p>
11+
*
1212
* This program is distributed in the hope that it will be useful,
1313
* but WITHOUT ANY WARRANTY; without even the implied warranty of
1414
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1515
* GNU General Public License for more details.
16-
* <p>
16+
*
1717
* You should have received a copy of the GNU General Public License
1818
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1919
*/
@@ -131,6 +131,45 @@ class SettingsMoreViewModelTest : ViewModelTest() {
131131
}
132132
}
133133

134+
@Test
135+
fun `is access doc provider - ok - true`() {
136+
every { contextProvider.getBoolean(any()) } returns true
137+
138+
val accessDocProviderEnabled = moreViewModel.isDocProviderAppEnabled()
139+
140+
assertTrue(accessDocProviderEnabled)
141+
142+
verify(exactly = 1) {
143+
contextProvider.getBoolean(R.bool.access_document_provider_app_enabled)
144+
}
145+
}
146+
147+
@Test
148+
fun `is access doc provider - ok - false`() {
149+
every { contextProvider.getBoolean(any()) } returns false
150+
151+
val accessDocProviderEnabled = moreViewModel.isDocProviderAppEnabled()
152+
153+
assertFalse(accessDocProviderEnabled)
154+
155+
verify(exactly = 1) {
156+
contextProvider.getBoolean(R.bool.access_document_provider_app_enabled)
157+
}
158+
}
159+
160+
@Test
161+
fun `get access doc provider url - ok`() {
162+
every { contextProvider.getString(any()) } returns OC_SECURE_BASE_URL
163+
164+
val accessDocProviderUrl = moreViewModel.getDocProviderAppUrl()
165+
166+
assertEquals(OC_SECURE_BASE_URL, accessDocProviderUrl)
167+
168+
verify(exactly = 1) {
169+
contextProvider.getString(R.string.url_document_provider_app)
170+
}
171+
}
172+
134173
@Test
135174
fun `is recommend enabled - ok - true`() {
136175
every { contextProvider.getBoolean(any()) } returns true

0 commit comments

Comments
 (0)