Only finish action mode after forwards are sent.
This commit is contained in:
parent
e582976293
commit
58a8902d4e
3 changed files with 26 additions and 6 deletions
|
@ -177,7 +177,7 @@ import java.util.Objects;
|
|||
import java.util.Set;
|
||||
|
||||
@SuppressLint("StaticFieldLeak")
|
||||
public class ConversationFragment extends LoggingFragment {
|
||||
public class ConversationFragment extends LoggingFragment implements MultiselectForwardFragment.Callback {
|
||||
private static final String TAG = Log.tag(ConversationFragment.class);
|
||||
|
||||
private static final int SCROLL_ANIMATION_THRESHOLD = 50;
|
||||
|
@ -976,7 +976,7 @@ public class ConversationFragment extends LoggingFragment {
|
|||
|
||||
MultiselectForwardFragmentArgs.create(requireContext(),
|
||||
multiselectParts,
|
||||
args -> MultiselectForwardFragment.show(getParentFragmentManager(), args));
|
||||
args -> MultiselectForwardFragment.show(getChildFragmentManager(), args));
|
||||
}
|
||||
|
||||
private void handleResendMessage(final MessageRecord message) {
|
||||
|
@ -1278,6 +1278,13 @@ public class ConversationFragment extends LoggingFragment {
|
|||
.count());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFinishForwardAction() {
|
||||
if (actionMode != null) {
|
||||
actionMode.finish();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public interface ConversationFragmentListener extends VoiceNoteMediaControllerOwner {
|
||||
void setThreadId(long threadId);
|
||||
|
@ -1914,7 +1921,6 @@ public class ConversationFragment extends LoggingFragment {
|
|||
return true;
|
||||
case R.id.menu_context_forward:
|
||||
handleForwardMessageParts(getListAdapter().getSelectedItems());
|
||||
actionMode.finish();
|
||||
return true;
|
||||
case R.id.menu_context_resend:
|
||||
handleResendMessage(getSelectedConversationMessage().getMessageRecord());
|
||||
|
|
|
@ -123,7 +123,6 @@ class MultiselectItemDecoration(
|
|||
canvas.save()
|
||||
canvas.clipPath(path, Region.Op.DIFFERENCE)
|
||||
|
||||
val view: View = child as View
|
||||
val selectedParts: Set<MultiselectPart> = SetUtil.intersection(parts.toSet(), adapter.selectedItems)
|
||||
|
||||
if (selectedParts.isNotEmpty()) {
|
||||
|
@ -131,7 +130,7 @@ class MultiselectItemDecoration(
|
|||
val shadeAll = selectedParts.size == parts.size || (selectedPart is MultiselectPart.Text && child.hasNonSelectableMedia())
|
||||
|
||||
if (shadeAll) {
|
||||
rect.set(0, view.top, view.right, view.bottom)
|
||||
rect.set(0, child.top, child.right, child.bottom)
|
||||
} else {
|
||||
rect.set(0, child.getTopBoundaryOfMultiselectPart(selectedPart), parent.right, child.getBottomBoundaryOfMultiselectPart(selectedPart))
|
||||
}
|
||||
|
@ -250,6 +249,11 @@ class MultiselectItemDecoration(
|
|||
unselectedPaint.alpha = alpha
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the start-aligned gutter in which the checks display. This is called in onDraw to
|
||||
* ensure we don't hit situations where we try to set offsets before items are laid out, and
|
||||
* called in getItemOffsets to ensure the gutter goes away when multiselect mode ends.
|
||||
*/
|
||||
private fun updateChildOffsets(parent: RecyclerView, child: View) {
|
||||
val adapter = parent.adapter as ConversationAdapter
|
||||
val isLtr = ViewUtil.isLtr(child)
|
||||
|
|
|
@ -26,6 +26,7 @@ import org.thoughtcrime.securesms.components.FixedRoundedCornerBottomSheetDialog
|
|||
import org.thoughtcrime.securesms.contacts.ContactsCursorLoader
|
||||
import org.thoughtcrime.securesms.conversation.ui.error.SafetyNumberChangeDialog
|
||||
import org.thoughtcrime.securesms.database.IdentityDatabase
|
||||
import org.thoughtcrime.securesms.keyboard.findListener
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId
|
||||
import org.thoughtcrime.securesms.sharing.MultiShareArgs
|
||||
|
@ -37,7 +38,6 @@ import org.thoughtcrime.securesms.util.ViewUtil
|
|||
import org.thoughtcrime.securesms.util.views.SimpleProgressDialog
|
||||
import org.thoughtcrime.securesms.util.visible
|
||||
import org.whispersystems.libsignal.util.guava.Optional
|
||||
import java.lang.UnsupportedOperationException
|
||||
import java.util.function.Consumer
|
||||
|
||||
private const val ARG_MULTISHARE_ARGS = "multiselect.forward.fragment.arg.multishare.args"
|
||||
|
@ -57,6 +57,7 @@ class MultiselectForwardFragment :
|
|||
private lateinit var selectionFragment: ContactSelectionListFragment
|
||||
private lateinit var contactFilterView: ContactFilterView
|
||||
private lateinit var addMessage: EditText
|
||||
private lateinit var callback: Callback
|
||||
|
||||
private var dismissibleDialog: SimpleProgressDialog.DismissibleDialog? = null
|
||||
|
||||
|
@ -91,6 +92,8 @@ class MultiselectForwardFragment :
|
|||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
callback = requireNotNull(findListener())
|
||||
|
||||
selectionFragment = childFragmentManager.findFragmentById(R.id.contact_selection_list_fragment) as ContactSelectionListFragment
|
||||
|
||||
contactFilterView = view.findViewById(R.id.contact_filter_edit_text)
|
||||
|
@ -217,6 +220,7 @@ class MultiselectForwardFragment :
|
|||
private fun dismissAndShowToast(@PluralsRes toastTextResId: Int) {
|
||||
val argCount = getMessageCount()
|
||||
|
||||
callback.onFinishForwardAction()
|
||||
dismissibleDialog?.dismiss()
|
||||
Toast.makeText(requireContext(), requireContext().resources.getQuantityString(toastTextResId, argCount), Toast.LENGTH_SHORT).show()
|
||||
dismissAllowingStateLoss()
|
||||
|
@ -226,6 +230,8 @@ class MultiselectForwardFragment :
|
|||
|
||||
private fun handleMessageExpired() {
|
||||
dismissAllowingStateLoss()
|
||||
|
||||
callback.onFinishForwardAction()
|
||||
dismissibleDialog?.dismiss()
|
||||
Toast.makeText(requireContext(), resources.getQuantityString(R.plurals.MultiselectForwardFragment__couldnt_forward_messages, getMultiShareArgs().size), Toast.LENGTH_LONG).show()
|
||||
}
|
||||
|
@ -294,4 +300,8 @@ class MultiselectForwardFragment :
|
|||
fragment.show(supportFragmentManager, BottomSheetUtil.STANDARD_BOTTOM_SHEET_FRAGMENT_TAG)
|
||||
}
|
||||
}
|
||||
|
||||
interface Callback {
|
||||
fun onFinishForwardAction()
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue