Compare commits

...

2 Commits

Author SHA1 Message Date
copilot-swe-agent[bot] b6ef372c22 Migrate fragments from deprecated onActivityResult to Activity Result API
Co-authored-by: adbenitez <24558636+adbenitez@users.noreply.github.com>
2026-02-18 02:57:29 +00:00
copilot-swe-agent[bot] 19e6d4c303 Initial plan 2026-02-18 02:49:29 +00:00
7 changed files with 132 additions and 101 deletions
@@ -32,6 +32,8 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
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;
@@ -91,6 +93,7 @@ public class ContactSelectionListFragment extends Fragment
private TextView emptyView;
private ActionMode actionMode;
private ActionMode.Callback actionModeCallback;
private ActivityResultLauncher<Intent> newContactLauncher;
@Override
public void onActivityCreated(Bundle icicle) {
@@ -98,6 +101,22 @@ public class ContactSelectionListFragment extends Fragment
dcContext = DcHelper.getContext(getActivity());
DcHelper.getEventCenter(getActivity()).addObserver(DcContext.DC_EVENT_CONTACTS_CHANGED, this);
// Register activity result launcher
newContactLauncher = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
result -> {
if (result.getResultCode() == Activity.RESULT_OK && result.getData() != null) {
int contactId = result.getData().getIntExtra(NewContactActivity.CONTACT_ID_EXTRA, 0);
if (contactId != 0) {
selectedContacts.add(contactId);
deselectedContacts.remove(contactId);
}
getLoaderManager().restartLoader(0, null, ContactSelectionListFragment.this);
}
}
);
initializeCursor();
}
@@ -314,7 +333,7 @@ public class ContactSelectionListFragment extends Fragment
intent.putExtra(NewContactActivity.ADDR_EXTRA, cursorFilter);
}
if (isMulti()) {
startActivityForResult(intent, CONTACT_ADDR_RESULT_CODE);
newContactLauncher.launch(intent);
} else {
requireContext().startActivity(intent);
}
@@ -362,17 +381,4 @@ public class ContactSelectionListFragment extends Fragment
getLoaderManager().restartLoader(0, null, ContactSelectionListFragment.this);
}
}
@Override
public void onActivityResult(int reqCode, int resultCode, final Intent data) {
super.onActivityResult(reqCode, resultCode, data);
if (resultCode == Activity.RESULT_OK && reqCode == CONTACT_ADDR_RESULT_CODE) {
int contactId = data.getIntExtra(NewContactActivity.CONTACT_ID_EXTRA, 0);
if (contactId != 0) {
selectedContacts.add(contactId);
deselectedContacts.remove(contactId);
}
getLoaderManager().restartLoader(0, null, ContactSelectionListFragment.this);
}
}
}
@@ -87,7 +87,6 @@ public class ConversationFragment extends MessageSelectorFragment
private static final String TAG = ConversationFragment.class.getSimpleName();
private static final int SCROLL_ANIMATION_THRESHOLD = 50;
private static final int CODE_ADD_EDIT_CONTACT = 77;
private final ActionModeCallback actionModeCallback = new ActionModeCallback();
private final ItemClickListener selectionClickListener = new ConversationFragmentItemClickListener();
@@ -949,17 +948,6 @@ public class ConversationFragment extends MessageSelectorFragment
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CODE_ADD_EDIT_CONTACT && getContext() != null) {
// ApplicationContext.getInstance(getContext().getApplicationContext())
// .getJobManager()
// .add(new DirectoryRefreshJob(getContext().getApplicationContext(), false));
}
}
private class ActionModeCallback implements ActionMode.Callback {
@Override
@@ -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;
@@ -48,6 +50,7 @@ public class ProfileFragment extends Fragment
private ActionMode actionMode;
private final ActionModeCallback actionModeCallback = new ActionModeCallback();
private ActivityResultLauncher<Intent> pickContactLauncher;
private DcContext dcContext;
protected int chatId;
@@ -60,6 +63,41 @@ 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());
// Register activity result launcher
pickContactLauncher = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
result -> {
if (result.getResultCode() == Activity.RESULT_OK && result.getData() != null) {
Intent data = result.getData();
List<Integer> selected = data.getIntegerArrayListExtra(ContactMultiSelectionActivity.CONTACTS_EXTRA);
List<Integer> 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 +248,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 +342,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<Integer> selected = data.getIntegerArrayListExtra(ContactMultiSelectionActivity.CONTACTS_EXTRA);
List<Integer> 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);
}
}
}
});
}
}
}
@@ -18,6 +18,8 @@ import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
@@ -55,11 +57,22 @@ public class AdvancedPreferenceFragment extends ListSummaryPreferenceFragment
CheckBoxPreference multiDeviceCheckbox;
CheckBoxPreference mvboxMoveCheckbox;
CheckBoxPreference onlyFetchMvboxCheckbox;
private ActivityResultLauncher<Intent> screenLockLauncher;
@Override
public void onCreate(Bundle paramBundle) {
super.onCreate(paramBundle);
// Register activity result launcher for screen lock
screenLockLauncher = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
result -> {
if (result.getResultCode() == RESULT_OK) {
openRelayListActivity();
}
}
);
showEmails = (ListPreference) this.findPreference("pref_show_emails");
if (showEmails != null) {
showEmails.setOnPreferenceChangeListener((preference, newValue) -> {
@@ -158,8 +171,7 @@ public class AdvancedPreferenceFragment extends ListSummaryPreferenceFragment
Preference relayListBtn = this.findPreference("pref_relay_list_button");
if (relayListBtn != null) {
relayListBtn.setOnPreferenceClickListener(((preference) -> {
boolean result = ScreenLockUtil.applyScreenLock(requireActivity(), getString(R.string.transports), getString(R.string.enter_system_secret_to_continue), REQUEST_CODE_CONFIRM_CREDENTIALS_ACCOUNT);
if (!result) {
if (!applyScreenLockWithLauncher()) {
openRelayListActivity();
}
return true;
@@ -191,12 +203,17 @@ public class AdvancedPreferenceFragment extends ListSummaryPreferenceFragment
onlyFetchMvboxCheckbox.setChecked(0!=dcContext.getConfigInt(CONFIG_ONLY_FETCH_MVBOX));
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == REQUEST_CODE_CONFIRM_CREDENTIALS_ACCOUNT) {
openRelayListActivity();
private boolean applyScreenLockWithLauncher() {
android.app.KeyguardManager keyguardManager = (android.app.KeyguardManager) requireActivity().getSystemService(Context.KEYGUARD_SERVICE);
Intent intent;
if (keyguardManager != null) {
intent = keyguardManager.createConfirmDeviceCredentialIntent(getString(R.string.transports), getString(R.string.enter_system_secret_to_continue));
if (intent != null) {
screenLockLauncher.launch(intent);
return true;
}
}
return false;
}
protected File copyToCacheDir(Uri uri) throws IOException {
@@ -10,6 +10,8 @@ import android.view.View;
import android.widget.CheckBox;
import android.widget.TextView;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
@@ -30,11 +32,22 @@ import org.thoughtcrime.securesms.util.Util;
public class ChatsPreferenceFragment extends ListSummaryPreferenceFragment {
private ListPreference mediaQuality;
private ListPreference autoDownload;
private ActivityResultLauncher<Intent> screenLockLauncher;
@Override
public void onCreate(Bundle paramBundle) {
super.onCreate(paramBundle);
// Register activity result launcher for screen lock
screenLockLauncher = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
result -> {
if (result.getResultCode() == RESULT_OK) {
performBackup();
}
}
);
mediaQuality = (ListPreference) this.findPreference("pref_compression");
if (mediaQuality != null) {
mediaQuality.setOnPreferenceChangeListener((preference, newValue) -> {
@@ -113,14 +126,6 @@ public class ChatsPreferenceFragment extends ListSummaryPreferenceFragment {
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == REQUEST_CODE_CONFIRM_CREDENTIALS_BACKUP) {
performBackup();
}
}
public static CharSequence getSummary(Context context) {
final String quality;
if (Prefs.isHardCompressionEnabled(context)) {
@@ -131,6 +136,19 @@ public class ChatsPreferenceFragment extends ListSummaryPreferenceFragment {
return context.getString(R.string.pref_outgoing_media_quality) + " " + quality;
}
private boolean applyScreenLockWithLauncher() {
android.app.KeyguardManager keyguardManager = (android.app.KeyguardManager) requireActivity().getSystemService(Context.KEYGUARD_SERVICE);
Intent intent;
if (keyguardManager != null) {
intent = keyguardManager.createConfirmDeviceCredentialIntent(getString(R.string.pref_backup), getString(R.string.enter_system_secret_to_continue));
if (intent != null) {
screenLockLauncher.launch(intent);
return true;
}
}
return false;
}
/***********************************************************************************************
* Backup
**********************************************************************************************/
@@ -138,8 +156,7 @@ public class ChatsPreferenceFragment extends ListSummaryPreferenceFragment {
private class BackupListener implements Preference.OnPreferenceClickListener {
@Override
public boolean onPreferenceClick(@NonNull Preference preference) {
boolean result = ScreenLockUtil.applyScreenLock(requireActivity(), getString(R.string.pref_backup), getString(R.string.enter_system_secret_to_continue), REQUEST_CODE_CONFIRM_CREDENTIALS_BACKUP);
if (!result) {
if (!applyScreenLockWithLauncher()) {
performBackup();
}
return true;
@@ -16,6 +16,8 @@ import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.NotificationManagerCompat;
@@ -40,11 +42,30 @@ public class NotificationsPreferenceFragment extends ListSummaryPreferenceFragme
private CheckBoxPreference notificationsEnabled;
private CheckBoxPreference mentionNotifEnabled;
private CheckBoxPreference reliableService;
private ActivityResultLauncher<Intent> ringtonePickerLauncher;
@Override
public void onCreate(Bundle paramBundle) {
super.onCreate(paramBundle);
// Register activity result launcher for ringtone picker
ringtonePickerLauncher = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
result -> {
if (result.getResultCode() == RESULT_OK && result.getData() != null) {
Uri uri = result.getData().getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
if (Settings.System.DEFAULT_NOTIFICATION_URI.equals(uri)) {
Prefs.removeNotificationRingtone(getContext());
} else {
Prefs.setNotificationRingtone(getContext(), uri != null ? uri : Uri.EMPTY);
}
initializeRingtoneSummary(findPreference(Prefs.RINGTONE_PREF));
}
}
);
this.findPreference(Prefs.LED_COLOR_PREF)
.setOnPreferenceChangeListener(new ListSummaryListener());
this.findPreference(Prefs.RINGTONE_PREF)
@@ -66,7 +87,7 @@ public class NotificationsPreferenceFragment extends ListSummaryPreferenceFragme
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, Settings.System.DEFAULT_NOTIFICATION_URI);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, current);
startActivityForResult(intent, REQUEST_CODE_NOTIFICATION_SELECTED);
ringtonePickerLauncher.launch(intent);
return true;
});
@@ -137,22 +158,6 @@ public class NotificationsPreferenceFragment extends ListSummaryPreferenceFragme
reliableService.setOnPreferenceChangeListener(this);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_NOTIFICATION_SELECTED && resultCode == RESULT_OK && data != null) {
Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
if (Settings.System.DEFAULT_NOTIFICATION_URI.equals(uri)) {
Prefs.removeNotificationRingtone(getContext());
} else {
Prefs.setNotificationRingtone(getContext(), uri != null ? uri : Uri.EMPTY);
}
initializeRingtoneSummary(findPreference(Prefs.RINGTONE_PREF));
}
}
@Override
public boolean onPreferenceChange(@NonNull Preference preference, Object newValue) {
Context context = getContext();
@@ -44,8 +44,6 @@ public final class ImageEditorFragment extends Fragment implements ImageEditorHu
private static final String KEY_IMAGE_URI = "image_uri";
public static final int SELECT_STICKER_REQUEST_CODE = 123;
private EditorModel restoredModel;
@Nullable
@@ -195,12 +193,6 @@ public final class ImageEditorFragment extends Fragment implements ImageEditorHu
startTextEntityEditing(element, true);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
imageEditorHud.enterMode(ImageEditorHud.Mode.NONE);
}
@Override
public void onModeStarted(@NonNull ImageEditorHud.Mode mode) {
imageEditorView.setMode(ImageEditorView.Mode.MoveAndResize);