Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
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
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ import javax.inject.Inject
*/
@AndroidEntryPoint
class MediaSendActivity : ScreenLockActionBarActivity(), MediaPickerFolderFragment.Controller,
MediaPickerItemFragment.Controller, MediaSendFragment.Controller,
MediaPickerItemComposeFragment.Controller, MediaSendFragment.Controller,
ImageEditorFragment.Controller {

private var recipient: Recipient? = null
Expand Down Expand Up @@ -183,8 +183,7 @@ class MediaSendActivity : ScreenLockActionBarActivity(), MediaPickerFolderFragme

val fragment = MediaPickerItemComposeFragment.newInstance(
folder.bucketId,
folder.title,
MediaSendViewModel.MAX_SELECTED_FILES
folder.title
)
supportFragmentManager.beginTransaction()
.setCustomAnimations(
Expand Down Expand Up @@ -214,7 +213,7 @@ class MediaSendActivity : ScreenLockActionBarActivity(), MediaPickerFolderFragme
recipient!!
)
val itemFragment =
MediaPickerItemComposeFragment.newInstance(bucketId, "", MediaSendViewModel.MAX_SELECTED_FILES)
MediaPickerItemComposeFragment.newInstance(bucketId, "")

supportFragmentManager.beginTransaction()
.setCustomAnimations(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,26 @@ class MediaSendViewModel @Inject constructor(
)
}

fun onMediaSelected(media: Media) {
val updatedList = run {
val current = uiState.value.selectedMedia
val exists = current.any { it.uri == media.uri }

if (exists) {
current.filterNot { it.uri == media.uri }
} else {
if (current.size >= MAX_SELECTED_FILES) {
_effects.tryEmit(MediaSendEffect.ShowError(Error.TOO_MANY_ITEMS))
current
} else {
current + media
}
}
}

onSelectedMediaChanged(updatedList)
}

fun onSelectedMediaChanged(newMedia: List<Media?>) {
repository.getPopulatedMedia(context, newMedia) { populatedMedia: List<Media> ->
runOnMain {
Expand Down Expand Up @@ -141,7 +161,6 @@ class MediaSendViewModel @Inject constructor(
selectedMedia = filteredMedia,
bucketId = computedId,
countVisibility = newVisibility,
forcedMultiSelect = it.forcedMultiSelect && filteredMedia.isNotEmpty()
)
}
}
Expand Down Expand Up @@ -176,18 +195,18 @@ class MediaSendViewModel @Inject constructor(
selectedMedia = filteredMedia,
bucketId = newBucketId,
countVisibility = CountButtonState.Visibility.FORCED_OFF,
forcedMultiSelect = false
)
}
}
}
}

fun onMultiSelectStarted() {
_uiState.update { it.copy(
countVisibility = CountButtonState.Visibility.FORCED_ON,
forcedMultiSelect = true
) }
_uiState.update {
it.copy(
countVisibility = CountButtonState.Visibility.FORCED_ON
)
}
}

fun onImageEditorStarted() {
Expand Down Expand Up @@ -386,6 +405,11 @@ class MediaSendViewModel @Inject constructor(
media: List<Media>,
mediaConstraints: MediaConstraints
): Pair<List<Media>, Set<Error>> {

if (media.isEmpty()) {
return Pair(emptyList(), emptySet())
}

val validMedia = ArrayList<Media>()
val errors = HashSet<Error>()

Expand Down Expand Up @@ -475,9 +499,14 @@ class MediaSendViewModel @Inject constructor(
val position: Int = -1,
val countVisibility: CountButtonState.Visibility = CountButtonState.Visibility.FORCED_OFF,
val showCameraButton: Boolean = false,
val forcedMultiSelect: Boolean = false, // previously in the adapter but put this here for now
) {
val count: Int get() = selectedMedia.size

val isMultiSelect: Boolean
get() = selectedMedia.isNotEmpty() || countVisibility == CountButtonState.Visibility.FORCED_ON

val canLongPress: Boolean
get() = selectedMedia.isEmpty() && !isMultiSelect
val showCountButton: Boolean
get() =
when (countVisibility) {
Expand Down
Loading