diff --git a/src/main/java/org/thoughtcrime/securesms/ProfileFragment.java b/src/main/java/org/thoughtcrime/securesms/ProfileFragment.java index 4a8cc6f5c..cabb0bcae 100644 --- a/src/main/java/org/thoughtcrime/securesms/ProfileFragment.java +++ b/src/main/java/org/thoughtcrime/securesms/ProfileFragment.java @@ -11,6 +11,8 @@ import android.view.View; import android.view.ViewGroup; import android.widget.Toast; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; @@ -42,8 +44,7 @@ public class ProfileFragment extends Fragment public static final String CHAT_ID_EXTRA = "chat_id"; public static final String CONTACT_ID_EXTRA = "contact_id"; - private static final int REQUEST_CODE_PICK_CONTACT = 2; - + private ActivityResultLauncher pickContactLauncher; private ProfileAdapter adapter; private ActionMode actionMode; private final ActionModeCallback actionModeCallback = new ActionModeCallback(); @@ -60,6 +61,39 @@ public class ProfileFragment extends Fragment chatId = getArguments() != null ? getArguments().getInt(CHAT_ID_EXTRA, -1) : -1; contactId = getArguments().getInt(CONTACT_ID_EXTRA, -1); dcContext = DcHelper.getContext(requireContext()); + pickContactLauncher = registerForActivityResult( + new ActivityResultContracts.StartActivityForResult(), + result -> { + if (result.getResultCode() == Activity.RESULT_OK && result.getData() != null) { + Intent data = result.getData(); + List selected = data.getIntegerArrayListExtra(ContactMultiSelectionActivity.CONTACTS_EXTRA); + List deselected = data.getIntegerArrayListExtra(ContactMultiSelectionActivity.DESELECTED_CONTACTS_EXTRA); + Util.runOnAnyBackgroundThread(() -> { + if (deselected != null) { + // Remove members that were deselected + int[] members = dcContext.getChatContacts(chatId); + for (int contactId : deselected) { + for (int memberId : members) { + if (memberId == contactId) { + dcContext.removeContactFromChat(chatId, memberId); + break; + } + } + } + } + + if (selected != null) { + // Add new members + for (Integer contactId : selected) { + if (contactId != null) { + dcContext.addContactToChat(chatId, contactId); + } + } + } + }); + } + } + ); } @Override @@ -210,7 +244,7 @@ public class ProfileFragment extends Fragment preselectedContacts.add(memberId); } intent.putExtra(ContactSelectionListFragment.PRESELECTED_CONTACTS, preselectedContacts); - startActivityForResult(intent, REQUEST_CODE_PICK_CONTACT); + pickContactLauncher.launch(intent); } public void onQrInvite() { @@ -304,36 +338,4 @@ public class ProfileFragment extends Fragment adapter.clearSelection(); } } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - if (requestCode==REQUEST_CODE_PICK_CONTACT && resultCode==Activity.RESULT_OK && data!=null) { - List selected = data.getIntegerArrayListExtra(ContactMultiSelectionActivity.CONTACTS_EXTRA); - List deselected = data.getIntegerArrayListExtra(ContactMultiSelectionActivity.DESELECTED_CONTACTS_EXTRA); - Util.runOnAnyBackgroundThread(() -> { - if (deselected != null) { - // Remove members that were deselected - int[] members = dcContext.getChatContacts(chatId); - for (int contactId : deselected) { - for (int memberId : members) { - if (memberId == contactId) { - dcContext.removeContactFromChat(chatId, memberId); - break; - } - } - } - } - - if (selected != null) { - // Add new members - for (Integer contactId : selected) { - if (contactId != null) { - dcContext.addContactToChat(chatId, contactId); - } - } - } - }); - } - } }