Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
AloqaIM-Android
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
AloqaIM-Android
Commits
5382b725
Commit
5382b725
authored
Apr 30, 2018
by
Lucio Maciel
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'MariusVolkhart-fileUploadFilter' into beta
parents
4c7cd7ac
d71f7e7f
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
136 additions
and
19 deletions
+136
-19
config.yml
.circleci/config.yml
+3
-0
build.gradle
app/build.gradle
+3
-3
ChatRoomFragmentTest.kt
...a/chat/rocket/android/chatroom/ui/ChatRoomFragmentTest.kt
+58
-0
ChatRoomView.kt
...chat/rocket/android/chatroom/presentation/ChatRoomView.kt
+1
-1
ChatRoomActivity.kt
.../java/chat/rocket/android/chatroom/ui/ChatRoomActivity.kt
+6
-2
ChatRoomFragment.kt
.../java/chat/rocket/android/chatroom/ui/ChatRoomFragment.kt
+8
-2
SettingsRepository.kt
...a/chat/rocket/android/server/domain/SettingsRepository.kt
+5
-6
Collections.kt
...n/java/chat/rocket/android/util/extensions/Collections.kt
+1
-1
SettingsRepositoryTest.kt
...at/rocket/android/server/domain/SettingsRepositoryTest.kt
+14
-0
SettingsRepositoryUploadMimeFilterProperlyParsesWhitelistTest.kt
...sRepositoryUploadMimeFilterProperlyParsesWhitelistTest.kt
+32
-0
dependencies.gradle
dependencies.gradle
+5
-4
No files found.
.circleci/config.yml
View file @
5382b725
...
...
@@ -58,6 +58,9 @@ jobs:
-
run
:
name
:
Run Unit test
command
:
./gradlew test
-
run
:
name
:
Compile Instrumentation test
command
:
./gradlew assembleAndroidTest
-
store_artifacts
:
path
:
app/build/reports/
destination
:
reports
...
...
app/build.gradle
View file @
5382b725
...
...
@@ -114,9 +114,9 @@ dependencies {
}
testImplementation
libraries
.
junit
androidTestImplementation
(
libraries
.
expressoCore
,
{
exclude
group:
'com.android.support'
,
module:
'support-annotations'
})
testImplementation
libraries
.
truth
androidTestImplementation
libraries
.
espressoCore
androidTestImplementation
libraries
.
espressoIntents
}
kotlin
{
...
...
app/src/androidTest/java/chat/rocket/android/chatroom/ui/ChatRoomFragmentTest.kt
0 → 100644
View file @
5382b725
package
chat.rocket.android.chatroom.ui
import
android.content.Intent
import
android.support.test.espresso.intent.rule.IntentsTestRule
import
android.support.test.filters.LargeTest
import
org.junit.Rule
import
org.junit.Test
import
android.app.Activity
import
android.app.Instrumentation.ActivityResult
import
android.support.test.InstrumentationRegistry
import
android.support.test.espresso.intent.Intents.intended
import
android.support.test.espresso.intent.Intents.intending
import
android.support.test.espresso.intent.matcher.IntentMatchers.*
import
org.hamcrest.Matchers.allOf
import
org.hamcrest.Matchers.not
import
org.junit.Before
@LargeTest
class
ChatRoomFragmentTest
{
@JvmField
@Rule
val
activityRule
=
IntentsTestRule
<
ChatRoomActivity
>(
ChatRoomActivity
::
class
.
java
,
false
,
false
)
@Before
fun
stubAllExternalIntents
()
{
val
activityIntent
=
InstrumentationRegistry
.
getTargetContext
().
chatRoomIntent
(
"id"
,
"name"
,
"type"
,
false
,
0L
)
activityRule
.
launchActivity
(
activityIntent
)
intending
(
not
(
isInternal
())).
respondWith
(
ActivityResult
(
Activity
.
RESULT_OK
,
null
))
}
@Test
fun
showFileSelection_nonNullFiltersAreApplied
()
{
val
fragment
=
activityRule
.
activity
.
supportFragmentManager
.
findFragmentByTag
(
ChatRoomActivity
.
TAG_CHAT_ROOM_FRAGMENT
)
as
ChatRoomFragment
val
filters
=
arrayOf
(
"image/*"
)
fragment
.
showFileSelection
(
filters
)
intended
(
allOf
(
hasAction
(
Intent
.
ACTION_GET_CONTENT
),
hasType
(
"*/*"
),
hasCategories
(
setOf
(
Intent
.
CATEGORY_OPENABLE
)),
hasExtra
(
Intent
.
EXTRA_MIME_TYPES
,
filters
)))
}
@Test
fun
showFileSelection_nullFiltersAreNotApplied
()
{
val
fragment
=
activityRule
.
activity
.
supportFragmentManager
.
findFragmentByTag
(
ChatRoomActivity
.
TAG_CHAT_ROOM_FRAGMENT
)
as
ChatRoomFragment
fragment
.
showFileSelection
(
null
)
intended
(
allOf
(
hasAction
(
Intent
.
ACTION_GET_CONTENT
),
hasType
(
"*/*"
),
hasCategories
(
setOf
(
Intent
.
CATEGORY_OPENABLE
)),
not
(
hasExtraWithKey
(
Intent
.
EXTRA_MIME_TYPES
))))
}
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/chatroom/presentation/ChatRoomView.kt
View file @
5382b725
...
...
@@ -28,7 +28,7 @@ interface ChatRoomView : LoadingView, MessageView {
/**
* Perform file selection with the mime type [filter]
*/
fun
showFileSelection
(
filter
:
Array
<
String
>)
fun
showFileSelection
(
filter
:
Array
<
String
>
?
)
/**
* Uploads a file to a chat room.
...
...
app/src/main/java/chat/rocket/android/chatroom/ui/ChatRoomActivity.kt
View file @
5382b725
...
...
@@ -93,8 +93,8 @@ class ChatRoomActivity : AppCompatActivity(), HasSupportFragmentInjector {
isChatRoomSubscribed
=
intent
.
getBooleanExtra
(
INTENT_CHAT_IS_SUBSCRIBED
,
true
)
if
(
supportFragmentManager
.
findFragmentByTag
(
"ChatRoomFragment"
)
==
null
)
{
addFragment
(
"ChatRoomFragment"
,
R
.
id
.
fragment_container
)
{
if
(
supportFragmentManager
.
findFragmentByTag
(
TAG_CHAT_ROOM_FRAGMENT
)
==
null
)
{
addFragment
(
TAG_CHAT_ROOM_FRAGMENT
,
R
.
id
.
fragment_container
)
{
newInstance
(
chatRoomId
,
chatRoomName
,
chatRoomType
,
isChatRoomReadOnly
,
chatRoomLastSeen
,
isChatRoomSubscribed
)
}
...
...
@@ -156,4 +156,8 @@ class ChatRoomActivity : AppCompatActivity(), HasSupportFragmentInjector {
super
.
onBackPressed
()
overridePendingTransition
(
R
.
anim
.
close_enter
,
R
.
anim
.
close_exit
)
}
companion
object
{
const
val
TAG_CHAT_ROOM_FRAGMENT
=
"ChatRoomFragment"
}
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/chatroom/ui/ChatRoomFragment.kt
View file @
5382b725
...
...
@@ -479,12 +479,18 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
button_add_reaction
.
tag
=
drawableId
}
override
fun
showFileSelection
(
filter
:
Array
<
String
>)
{
override
fun
showFileSelection
(
filter
:
Array
<
String
>
?
)
{
ui
{
val
intent
=
Intent
(
Intent
.
ACTION_GET_CONTENT
)
// Must set a type otherwise the intent won't resolve
intent
.
type
=
"*/*"
intent
.
putExtra
(
Intent
.
EXTRA_MIME_TYPES
,
filter
)
intent
.
addCategory
(
Intent
.
CATEGORY_OPENABLE
)
// Filter selectable files to those that match the whitelist for this particular server
if
(
filter
!=
null
)
{
intent
.
putExtra
(
Intent
.
EXTRA_MIME_TYPES
,
filter
)
}
startActivityForResult
(
intent
,
REQUEST_CODE_FOR_PERFORM_SAF
)
}
}
...
...
app/src/main/java/chat/rocket/android/server/domain/SettingsRepository.kt
View file @
5382b725
...
...
@@ -84,13 +84,12 @@ fun PublicSettings.allowedMessagePinning(): Boolean = this[ALLOW_MESSAGE_PINNING
fun
PublicSettings
.
allowedMessageEditing
():
Boolean
=
this
[
ALLOW_MESSAGE_EDITING
]
?.
value
==
true
fun
PublicSettings
.
allowedMessageDeleting
():
Boolean
=
this
[
ALLOW_MESSAGE_DELETING
]
?.
value
==
true
fun
PublicSettings
.
uploadMimeTypeFilter
():
Array
<
String
>
{
val
values
=
this
[
UPLOAD_WHITELIST_MIMETYPES
]
?.
value
values
?.
let
{
it
as
String
}
?.
split
(
","
)
?.
let
{
return
it
.
mapToTypedArray
{
it
.
trim
()
}
fun
PublicSettings
.
uploadMimeTypeFilter
():
Array
<
String
>
?
{
val
values
=
this
[
UPLOAD_WHITELIST_MIMETYPES
]
?.
value
as
String
?
if
(!
values
.
isNullOrBlank
())
{
return
values
!!
.
split
(
","
)
.
mapToTypedArray
{
it
.
trim
()
}
}
return
arrayOf
(
"*/*"
)
return
null
}
fun
PublicSettings
.
uploadMaxFileSize
():
Int
{
...
...
app/src/main/java/chat/rocket/android/util/extensions/Collections.kt
View file @
5382b725
...
...
@@ -5,4 +5,4 @@ inline fun <T, reified R> List<T>.mapToTypedArray(transform: (T) -> R): Array<R>
is
RandomAccess
->
Array
(
size
)
{
index
->
transform
(
this
[
index
])
}
else
->
with
(
iterator
())
{
Array
(
size
)
{
transform
(
next
())
}
}
}
}
\ No newline at end of file
}
app/src/test/java/chat/rocket/android/server/domain/SettingsRepositoryTest.kt
0 → 100644
View file @
5382b725
package
chat.rocket.android.server.domain
import
chat.rocket.core.model.Value
import
com.google.common.truth.Truth.assertThat
import
org.junit.Test
class
SettingsRepositoryTest
{
@Test
fun
`
uploadMimeFilter
returns
null
if
not
specified
`
()
{
val
settings
=
emptyMap
<
String
,
Value
<
Any
>>()
val
filter
=
settings
.
uploadMimeTypeFilter
()
assertThat
(
filter
).
isNull
()
}
}
\ No newline at end of file
app/src/test/java/chat/rocket/android/server/domain/SettingsRepositoryUploadMimeFilterProperlyParsesWhitelistTest.kt
0 → 100644
View file @
5382b725
package
chat.rocket.android.server.domain
import
chat.rocket.core.model.Value
import
com.google.common.truth.Truth.assertThat
import
org.junit.Test
import
org.junit.runner.RunWith
import
org.junit.runners.Parameterized
@RunWith
(
Parameterized
::
class
)
class
`
SettingsRepository
UploadMimeTypeFilter
WhitelistIsSet
Test
`
(
private
val
allowedMimeTypes
:
String
,
private
val
expectedFilter
:
Array
<
String
>?)
{
companion
object
{
@JvmStatic
@Parameterized
.
Parameters
(
name
=
"\"{0}\""
)
fun
data
():
Collection
<
Array
<
Any
?
>>
=
listOf
(
arrayOf
<
Any
?>(
""
,
null
),
arrayOf
<
Any
?>(
" "
,
null
),
arrayOf
<
Any
?>(
"image/*"
,
arrayOf
(
"image/*"
)),
arrayOf
<
Any
?>(
"image/*,video/*"
,
arrayOf
(
"image/*"
,
"video/*"
)),
arrayOf
<
Any
?>(
"image/*, video/*"
,
arrayOf
(
"image/*"
,
"video/*"
)),
arrayOf
<
Any
?>(
"image/*,\tvideo/*"
,
arrayOf
(
"image/*"
,
"video/*"
))
)
}
@Test
fun
test
()
{
val
settings
=
mapOf
<
String
,
Value
<
Any
>>(
Pair
(
UPLOAD_WHITELIST_MIMETYPES
,
Value
(
allowedMimeTypes
)))
val
filter
=
settings
.
uploadMimeTypeFilter
()
assertThat
(
filter
).
isEqualTo
(
expectedFilter
)
}
}
dependencies.gradle
View file @
5382b725
...
...
@@ -9,7 +9,7 @@ ext {
dokka
:
'0.9.16'
,
// Main dependencies
support
:
'27.1.
0
'
,
support
:
'27.1.
1
'
,
constraintLayout
:
'1.1.0'
,
androidKtx
:
'0.3'
,
dagger
:
'2.14.1'
,
...
...
@@ -35,7 +35,7 @@ ext {
// For testing
junit
:
'4.12'
,
truth
:
'0.36'
,
e
xpresso
:
'3.0.1
'
,
e
spresso
:
'3.0.2
'
,
mockito
:
'2.10.0'
]
libraries
=
[
...
...
@@ -98,8 +98,9 @@ ext {
// For testing
junit
:
"junit:junit:$versions.junit"
,
expressoCore
:
"com.android.support.test.espresso:espresso-core:${versions.expresso}"
,
espressoCore
:
"com.android.support.test.espresso:espresso-core:${versions.espresso}"
,
espressoIntents
:
"com.android.support.test.espresso:espresso-intents:${versions.espresso}"
,
roomTest
:
"android.arch.persistence.room:testing:${versions.room}"
,
truth
:
"com.google.truth:truth:$versions.truth"
,
]
}
\ No newline at end of file
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment