Only finish action mode after forwards are sent.

fork-5.53.8
Alex Hart 2021-08-19 15:43:19 -03:00 zatwierdzone przez Greyson Parrelli
rodzic e582976293
commit 58a8902d4e
3 zmienionych plików z 26 dodań i 6 usunięć

Wyświetl plik

@ -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());

Wyświetl plik

@ -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)

Wyświetl plik

@ -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()
}
}