kopia lustrzana https://github.com/ryukoposting/Signal-Android
125 wiersze
5.0 KiB
Java
125 wiersze
5.0 KiB
Java
package org.thoughtcrime.securesms.payments.preferences;
|
|
|
|
import android.os.Bundle;
|
|
import android.view.View;
|
|
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.Nullable;
|
|
import androidx.appcompat.widget.Toolbar;
|
|
import androidx.fragment.app.Fragment;
|
|
import androidx.fragment.app.FragmentTransaction;
|
|
import androidx.navigation.Navigation;
|
|
|
|
import org.signal.core.util.concurrent.SimpleTask;
|
|
import org.thoughtcrime.securesms.ContactSelectionListFragment;
|
|
import org.thoughtcrime.securesms.LoggingFragment;
|
|
import org.thoughtcrime.securesms.R;
|
|
import org.thoughtcrime.securesms.components.ContactFilterView;
|
|
import org.thoughtcrime.securesms.contacts.ContactsCursorLoader.DisplayMode;
|
|
import org.thoughtcrime.securesms.conversation.ConversationIntents;
|
|
import org.thoughtcrime.securesms.database.SignalDatabase;
|
|
import org.thoughtcrime.securesms.payments.CanNotSendPaymentDialog;
|
|
import org.thoughtcrime.securesms.payments.preferences.model.PayeeParcelable;
|
|
import org.thoughtcrime.securesms.recipients.Recipient;
|
|
import org.thoughtcrime.securesms.recipients.RecipientId;
|
|
import org.thoughtcrime.securesms.util.ViewUtil;
|
|
import org.thoughtcrime.securesms.util.navigation.SafeNavigation;
|
|
import org.whispersystems.signalservice.api.util.ExpiringProfileCredentialUtil;
|
|
|
|
import java.util.Optional;
|
|
import java.util.function.Consumer;
|
|
|
|
|
|
public class PaymentRecipientSelectionFragment extends LoggingFragment implements ContactSelectionListFragment.OnContactSelectedListener, ContactSelectionListFragment.ScrollCallback {
|
|
|
|
private Toolbar toolbar;
|
|
private ContactFilterView contactFilterView;
|
|
private ContactSelectionListFragment contactsFragment;
|
|
|
|
public PaymentRecipientSelectionFragment() {
|
|
super(R.layout.payment_recipient_selection_fragment);
|
|
}
|
|
|
|
@Override
|
|
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
|
toolbar = view.findViewById(R.id.payment_recipient_selection_fragment_toolbar);
|
|
toolbar.setNavigationOnClickListener(v -> Navigation.findNavController(v).popBackStack());
|
|
|
|
contactFilterView = view.findViewById(R.id.contact_filter_edit_text);
|
|
|
|
Bundle arguments = new Bundle();
|
|
arguments.putBoolean(ContactSelectionListFragment.REFRESHABLE, false);
|
|
arguments.putInt(ContactSelectionListFragment.DISPLAY_MODE, DisplayMode.FLAG_PUSH | DisplayMode.FLAG_HIDE_NEW);
|
|
arguments.putBoolean(ContactSelectionListFragment.CAN_SELECT_SELF, false);
|
|
|
|
Fragment child = getChildFragmentManager().findFragmentById(R.id.contact_selection_list_fragment_holder);
|
|
if (child == null) {
|
|
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
|
|
contactsFragment = new ContactSelectionListFragment();
|
|
contactsFragment.setArguments(arguments);
|
|
transaction.add(R.id.contact_selection_list_fragment_holder, contactsFragment);
|
|
transaction.commit();
|
|
} else {
|
|
contactsFragment = (ContactSelectionListFragment) child;
|
|
}
|
|
|
|
initializeSearch();
|
|
}
|
|
|
|
private void initializeSearch() {
|
|
contactFilterView.setOnFilterChangedListener(filter -> contactsFragment.setQueryFilter(filter));
|
|
}
|
|
|
|
@Override
|
|
public void onBeforeContactSelected(@NonNull Optional<RecipientId> recipientId, @Nullable String number, @NonNull Consumer<Boolean> callback) {
|
|
if (recipientId.isPresent()) {
|
|
SimpleTask.run(getViewLifecycleOwner().getLifecycle(),
|
|
() -> Recipient.resolved(recipientId.get()),
|
|
this::createPaymentOrShowWarningDialog);
|
|
}
|
|
|
|
callback.accept(false);
|
|
}
|
|
|
|
@Override
|
|
public void onContactDeselected(@NonNull Optional<RecipientId> recipientId, @Nullable String number) {}
|
|
|
|
@Override
|
|
public void onSelectionChanged() {
|
|
}
|
|
|
|
@Override
|
|
public void onBeginScroll() {
|
|
hideKeyboard();
|
|
}
|
|
|
|
private void hideKeyboard() {
|
|
ViewUtil.hideKeyboard(requireContext(), toolbar);
|
|
toolbar.clearFocus();
|
|
}
|
|
|
|
private void createPaymentOrShowWarningDialog(@NonNull Recipient recipient) {
|
|
if (ExpiringProfileCredentialUtil.isValid(recipient.getExpiringProfileKeyCredential())) {
|
|
createPayment(recipient.getId());
|
|
} else {
|
|
showWarningDialog(recipient.getId());
|
|
}
|
|
}
|
|
|
|
private void createPayment(@NonNull RecipientId recipientId) {
|
|
hideKeyboard();
|
|
SafeNavigation.safeNavigate(Navigation.findNavController(requireView()), PaymentRecipientSelectionFragmentDirections.actionPaymentRecipientSelectionToCreatePayment(new PayeeParcelable(recipientId)));
|
|
}
|
|
|
|
private void showWarningDialog(@NonNull RecipientId recipientId) {
|
|
CanNotSendPaymentDialog.show(requireContext(),
|
|
() -> openConversation(recipientId));
|
|
}
|
|
|
|
private void openConversation(@NonNull RecipientId recipientId) {
|
|
SimpleTask.run(getViewLifecycleOwner().getLifecycle(),
|
|
() -> SignalDatabase.threads().getThreadIdIfExistsFor(recipientId),
|
|
threadId -> startActivity(ConversationIntents.createBuilder(requireContext(), recipientId, threadId).build()));
|
|
}
|
|
}
|