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
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
list.setLayoutManager(layoutManager);
list.setAdapter(adapter);

viewModel.getFolders(requireContext()).observe(getViewLifecycleOwner(), adapter::setFolders);
viewModel.getFolders().observe(getViewLifecycleOwner(), adapter::setFolders);

initToolbar(view.findViewById(R.id.mediapicker_toolbar));
}
Expand Down Expand Up @@ -159,7 +159,7 @@ public boolean onMenuItemSelected(@NonNull MenuItem item) {
AttachmentManager.managePhotoAccess(requireActivity(), () -> {
if (!isAdded()) return;

viewModel.getFolders(requireContext())
viewModel.getFolders()
.observe(getViewLifecycleOwner(), adapter::setFolders);

initToolbarOptions();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
onMediaSelectionChanged(new ArrayList<>(viewModel.getSelectedMedia().getValue()));
}

viewModel.getMediaInBucket(requireContext(), bucketId).observe(getViewLifecycleOwner(), adapter::setMedia);
viewModel.getMediaInBucket(bucketId).observe(getViewLifecycleOwner(), adapter::setMedia);

initMediaObserver(viewModel);
}
Expand Down Expand Up @@ -161,7 +161,7 @@ public void onMediaSelectionStarted() {
@Override
public void onMediaSelectionChanged(@NonNull List<Media> selected) {
adapter.notifyDataSetChanged();
viewModel.onSelectedMediaChanged(requireContext(), selected);
viewModel.onSelectedMediaChanged(selected);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@ import androidx.activity.viewModels
import androidx.core.view.ViewGroupCompat
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import com.squareup.phrase.Phrase
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
Expand Down Expand Up @@ -105,7 +107,7 @@ class MediaSendActivity : ScreenLockActionBarActivity(), MediaPickerFolderFragme
if (isCamera) {
navigateToCamera()
} else if (!isEmpty(media)) {
viewModel.onSelectedMediaChanged(this, media!!)
viewModel.onSelectedMediaChanged(media!!)

lastEntryFromCameraCapture = false

Expand All @@ -126,7 +128,7 @@ class MediaSendActivity : ScreenLockActionBarActivity(), MediaPickerFolderFragme

initializeCountButtonObserver()
initializeCameraButtonObserver()
initializeErrorObserver()
collectEffects()

binding.mediasendCameraButton.setOnClickListener { v: View? ->
val maxSelection = MediaSendViewModel.MAX_SELECTED_FILES
Expand All @@ -147,7 +149,7 @@ class MediaSendActivity : ScreenLockActionBarActivity(), MediaPickerFolderFragme
// and we're on the editor as the only fragment.
if (lastEntryFromCameraCapture && isCameraFlow && fm.backStackEntryCount == 1) {
fm.popBackStackImmediate() // remove the editor fragment
viewModel.onImageCaptureUndo(this@MediaSendActivity)
viewModel.onImageCaptureUndo()
lastEntryFromCameraCapture = false
navigateToCamera()
return
Expand Down Expand Up @@ -300,44 +302,63 @@ class MediaSendActivity : ScreenLockActionBarActivity(), MediaPickerFolderFragme
}
}

private fun initializeErrorObserver() {
viewModel.getError().observe(
this
) { error: MediaSendViewModel.Error? ->
if (error == null) return@observe
when (error) {
MediaSendViewModel.Error.INVALID_TYPE_ONLY -> Toast.makeText(
this,
Phrase.from(
this,
R.string.sharingSupportMultipleMedia
).put(APP_NAME_KEY, getString(R.string.app_name)).format().toString(),
Toast.LENGTH_LONG
).show()

MediaSendViewModel.Error.MIXED_TYPE -> Toast.makeText(
this,
R.string.sharingSupportMultipleMediaExcluded,
Toast.LENGTH_LONG
).show()

MediaSendViewModel.Error.ITEM_TOO_LARGE -> Toast.makeText(
this,
R.string.attachmentsErrorSize,
Toast.LENGTH_LONG
).show()

MediaSendViewModel.Error.TOO_MANY_ITEMS -> // In modern session we'll say you can't sent more than 32 items, but if we ever want
// the exact count of how many items the user attempted to send it's: viewModel.getMaxSelection()
Toast.makeText(
this,
getString(R.string.attachmentsErrorNumber),
Toast.LENGTH_SHORT
).show()
private fun collectEffects() {
lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.STARTED) {
viewModel.effects.collect { effect ->
when (effect) {
is MediaSendViewModel.MediaSendEffect.ShowError -> showError(effect.error)
is MediaSendViewModel.MediaSendEffect.Toast ->
Toast.makeText(
this@MediaSendActivity,
effect.messageRes,
Toast.LENGTH_LONG
).show()

is MediaSendViewModel.MediaSendEffect.ToastText ->
Toast.makeText(
this@MediaSendActivity,
effect.message,
Toast.LENGTH_LONG
).show()
}
}
}
}
}

private fun showError(error: MediaSendViewModel.Error) {
when (error) {
MediaSendViewModel.Error.INVALID_TYPE_ONLY -> Toast.makeText(
this,
Phrase.from(this, R.string.sharingSupportMultipleMedia)
.put(APP_NAME_KEY, getString(R.string.app_name))
.format()
.toString(),
Toast.LENGTH_LONG
).show()

MediaSendViewModel.Error.MIXED_TYPE -> Toast.makeText(
this,
R.string.sharingSupportMultipleMediaExcluded,
Toast.LENGTH_LONG
).show()

MediaSendViewModel.Error.ITEM_TOO_LARGE -> Toast.makeText(
this,
R.string.attachmentsErrorSize,
Toast.LENGTH_LONG
).show()

MediaSendViewModel.Error.TOO_MANY_ITEMS -> Toast.makeText(
this,
getString(R.string.attachmentsErrorNumber),
Toast.LENGTH_SHORT
).show()
}
}

private fun navigateToMediaSend(recipient: Address) {
val fragment = MediaSendFragment.newInstance(recipient)
var backstackTag: String? = null
Expand Down Expand Up @@ -372,7 +393,7 @@ class MediaSendActivity : ScreenLockActionBarActivity(), MediaPickerFolderFragme
.request(Manifest.permission.CAMERA)
.withPermanentDenialDialog(permanentDenialTxt)
.onAllGranted {
val countNow = viewModel.getCountButtonState().value?.count ?: 0
val countNow = viewModel.uiState.value.count
val intent = Intent(this@MediaSendActivity, CameraXActivity::class.java)
.putExtra(KEY_MEDIA_SEND_COUNT, countNow)
cameraLauncher.launch(intent)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -207,10 +207,7 @@ class MediaSendFragment : Fragment(), RailItemListener, InputBarDelegate {
override fun onRailItemDeleteClicked(distanceFromActive: Int) {
val currentItem = binding?.mediasendPager?.currentItem ?: return

viewModel?.onMediaItemRemoved(
requireContext(),
currentItem + distanceFromActive
)
viewModel?.onMediaItemRemoved(currentItem + distanceFromActive)
}

fun onTouchEventsNeeded(needed: Boolean) {
Expand Down
Loading