Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package org.thoughtcrime.securesms.mediasend

import android.net.Uri


/**
* Represents a folder that's shown in MediaPickerFolderFragment.
*/
data class MediaFolder(
val thumbnailUri: Uri?,
val title: String,
val itemCount: Int,
val bucketId: String,
) {
enum class FolderType {
NORMAL, CAMERA
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import java.util.ArrayList;
import java.util.List;

@Deprecated

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One thing to be mindful of if you decide to keep all the old stuff, is to not forget to clean it out later.
With git history you can easily access old files you should be ok deleting and cleaning everything you don't need anymore.
Don't forget to clean out the layout.xml files, and possibly unused views.xml, dimensions, etc...

class MediaPickerFolderAdapter extends RecyclerView.Adapter<MediaPickerFolderAdapter.FolderViewHolder> {

private final RequestManager glideRequests;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
/**
* Allows the user to select a media folder to explore.
*/
@Deprecated
@AndroidEntryPoint
public class MediaPickerFolderFragment extends Fragment implements MediaPickerFolderAdapter.EventListener {

Expand Down Expand Up @@ -191,6 +192,7 @@ public void onFolderClicked(@NonNull MediaFolder folder) {
controller.onFolderSelected(folder);
}

@Deprecated
public interface Controller {
void onFolderSelected(@NonNull MediaFolder folder);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import java.util.LinkedList;
import java.util.List;

@Deprecated
public class MediaPickerItemAdapter extends RecyclerView.Adapter<MediaPickerItemAdapter.ItemViewHolder> {

private final RequestManager glideRequests;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
/**
* Allows the user to select a set of media items from a specified folder.
*/
@Deprecated
@AndroidEntryPoint
public class MediaPickerItemFragment extends Fragment implements MediaPickerItemAdapter.EventListener {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ import org.thoughtcrime.securesms.ScreenLockActionBarActivity
import org.thoughtcrime.securesms.database.RecipientRepository
import org.thoughtcrime.securesms.mediasend.CameraXActivity.Companion.KEY_MEDIA_SEND_COUNT
import org.thoughtcrime.securesms.mediasend.MediaSendViewModel.CountButtonState
import org.thoughtcrime.securesms.mediasend.compose.MediaPickerFolderComposeFragment
import org.thoughtcrime.securesms.mediasend.compose.MediaPickerItemComposeFragment
import org.thoughtcrime.securesms.permissions.Permissions
import org.thoughtcrime.securesms.scribbles.ImageEditorFragment
import org.thoughtcrime.securesms.util.FilenameUtils.constructPhotoFilename
Expand Down Expand Up @@ -117,7 +119,7 @@ class MediaSendActivity : ScreenLockActionBarActivity(), MediaPickerFolderFragme
.replace(R.id.mediasend_fragment_container, fragment, TAG_SEND)
.commit()
} else {
val fragment = MediaPickerFolderFragment.newInstance(
val fragment = MediaPickerFolderComposeFragment.newInstance(
recipient!!
)
supportFragmentManager.beginTransaction()
Expand Down Expand Up @@ -179,7 +181,7 @@ class MediaSendActivity : ScreenLockActionBarActivity(), MediaPickerFolderFragme
override fun onFolderSelected(folder: MediaFolder) {
viewModel.onFolderSelected(folder.bucketId)

val fragment = MediaPickerItemFragment.newInstance(
val fragment = MediaPickerItemComposeFragment.newInstance(
folder.bucketId,
folder.title,
MediaSendViewModel.MAX_SELECTED_FILES
Expand Down Expand Up @@ -208,11 +210,11 @@ class MediaSendActivity : ScreenLockActionBarActivity(), MediaPickerFolderFragme
}

override fun onAddMediaClicked(bucketId: String) {
val folderFragment = MediaPickerFolderFragment.newInstance(
val folderFragment = MediaPickerFolderComposeFragment.newInstance(
recipient!!
)
val itemFragment =
MediaPickerItemFragment.newInstance(bucketId, "", MediaSendViewModel.MAX_SELECTED_FILES)
MediaPickerItemComposeFragment.newInstance(bucketId, "", MediaSendViewModel.MAX_SELECTED_FILES)

supportFragmentManager.beginTransaction()
.setCustomAnimations(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ import javax.inject.Inject
* Manages the observable datasets available in [MediaSendActivity].
*/
@HiltViewModel
internal class MediaSendViewModel @Inject constructor(
class MediaSendViewModel @Inject constructor(
private val application: Application,
proStatusManager: ProStatusManager,
recipientRepository: RecipientRepository,
Expand Down Expand Up @@ -95,14 +95,18 @@ internal class MediaSendViewModel @Inject constructor(
repository.getPopulatedMedia(context, newMedia) { populatedMedia: List<Media> ->
runOnMain {
// Use the new filter function that returns valid items AND errors
var (filteredMedia, errors) = getFilteredMedia(context, populatedMedia, mediaConstraints)
var (filteredMedia, errors) = getFilteredMedia(
context,
populatedMedia,
mediaConstraints
)

// Report errors if they occurred
if (errors.contains(Error.ITEM_TOO_LARGE)) {
_effects.tryEmit(MediaSendEffect.ShowError(Error.ITEM_TOO_LARGE))
} else if (errors.contains(Error.INVALID_TYPE_ONLY)) {
_effects.tryEmit(MediaSendEffect.ShowError(Error.INVALID_TYPE_ONLY))
}else if (errors.contains(Error.MIXED_TYPE)) {
} else if (errors.contains(Error.MIXED_TYPE)) {
_effects.tryEmit(MediaSendEffect.ShowError(Error.MIXED_TYPE))
}

Expand Down Expand Up @@ -136,7 +140,8 @@ internal class MediaSendViewModel @Inject constructor(
it.copy(
selectedMedia = filteredMedia,
bucketId = computedId,
countVisibility = newVisibility
countVisibility = newVisibility,
forcedMultiSelect = it.forcedMultiSelect && filteredMedia.isNotEmpty()
)
}
}
Expand All @@ -146,14 +151,18 @@ internal class MediaSendViewModel @Inject constructor(
fun onSingleMediaSelected(context: Context, media: Media) {
repository.getPopulatedMedia(context, listOf(media)) { populatedMedia: List<Media> ->
runOnMain {
val (filteredMedia, errors) = getFilteredMedia(context, populatedMedia, mediaConstraints)
val (filteredMedia, errors) = getFilteredMedia(
context,
populatedMedia,
mediaConstraints
)

if (filteredMedia.isEmpty()) {
if (errors.contains(Error.ITEM_TOO_LARGE)) {
_effects.tryEmit(MediaSendEffect.ShowError(Error.ITEM_TOO_LARGE))
} else if (errors.contains(Error.INVALID_TYPE_ONLY)) {
_effects.tryEmit(MediaSendEffect.ShowError(Error.INVALID_TYPE_ONLY))
}else if (errors.contains(Error.MIXED_TYPE)) {
} else if (errors.contains(Error.MIXED_TYPE)) {
_effects.tryEmit(MediaSendEffect.ShowError(Error.MIXED_TYPE))
}
}
Expand All @@ -166,15 +175,19 @@ internal class MediaSendViewModel @Inject constructor(
it.copy(
selectedMedia = filteredMedia,
bucketId = newBucketId,
countVisibility = CountButtonState.Visibility.FORCED_OFF
countVisibility = CountButtonState.Visibility.FORCED_OFF,
forcedMultiSelect = false
)
}
}
}
}

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

fun onImageEditorStarted() {
Expand Down Expand Up @@ -223,7 +236,8 @@ internal class MediaSendViewModel @Inject constructor(

fun onPageChanged(position: Int) {
if (position !in selectedMedia.indices) {
Log.w(TAG,
Log.w(
TAG,
"Tried to move to an out-of-bounds item. Size: " + selectedMedia.size + ", position: " + position
)
return
Expand Down Expand Up @@ -354,6 +368,12 @@ internal class MediaSendViewModel @Inject constructor(
private val selectedMedia: List<Media>
get() = _uiState.value.selectedMedia

// Same as getFolders but does not return LiveData
fun refreshFolders() {
repository.getFolders(context) { value ->
_uiState.update { it.copy(folders = value) }
}
}

/**
* Filters the input list of media.
Expand All @@ -378,7 +398,7 @@ internal class MediaSendViewModel @Inject constructor(
}

// if there are no valid types at all, return early
if(validMultiMediaCount == 0){
if (validMultiMediaCount == 0) {
errors.add(Error.INVALID_TYPE_ONLY)
return Pair(validMedia, errors)
}
Expand Down Expand Up @@ -427,11 +447,11 @@ internal class MediaSendViewModel @Inject constructor(
}
}

internal enum class Error {
enum class Error {
ITEM_TOO_LARGE, TOO_MANY_ITEMS, INVALID_TYPE_ONLY, MIXED_TYPE
}

internal class CountButtonState(val count: Int, private val visibility: Visibility) {
class CountButtonState(val count: Int, private val visibility: Visibility) {
val isVisible: Boolean
get() {
return when (visibility) {
Expand All @@ -441,7 +461,7 @@ internal class MediaSendViewModel @Inject constructor(
}
}

internal enum class Visibility {
enum class Visibility {
CONDITIONAL, FORCED_ON, FORCED_OFF
}
}
Expand All @@ -454,15 +474,17 @@ internal class MediaSendViewModel @Inject constructor(
val selectedMedia: List<Media> = emptyList(),
val position: Int = -1,
val countVisibility: CountButtonState.Visibility = CountButtonState.Visibility.FORCED_OFF,
val showCameraButton: Boolean = false
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 showCountButton: Boolean get() =
when (countVisibility) {
CountButtonState.Visibility.FORCED_ON -> true
CountButtonState.Visibility.FORCED_OFF -> false
CountButtonState.Visibility.CONDITIONAL -> count > 0
}
val showCountButton: Boolean
get() =
when (countVisibility) {
CountButtonState.Visibility.FORCED_ON -> true
CountButtonState.Visibility.FORCED_OFF -> false
CountButtonState.Visibility.CONDITIONAL -> count > 0
}
}

sealed interface MediaSendEffect {
Expand Down
Loading