diff --git a/vector/src/main/java/im/vector/app/core/utils/SystemUtils.kt b/vector/src/main/java/im/vector/app/core/utils/SystemUtils.kt index c1253e76d3..7c41457811 100644 --- a/vector/src/main/java/im/vector/app/core/utils/SystemUtils.kt +++ b/vector/src/main/java/im/vector/app/core/utils/SystemUtils.kt @@ -28,6 +28,7 @@ import android.os.Build import android.os.PowerManager import android.provider.Settings import android.widget.Toast +import androidx.activity.result.ActivityResultLauncher import androidx.annotation.StringRes import androidx.appcompat.app.AppCompatActivity import androidx.core.content.getSystemService @@ -136,32 +137,37 @@ fun startAddGoogleAccountIntent(context: AppCompatActivity, requestCode: Int) { } } -fun startSharePlainTextIntent(fragment: Fragment, chooserTitle: String?, text: String, subject: String? = null, requestCode: Int? = null) { +fun startSharePlainTextIntent(fragment: Fragment, + activityResultLauncher: ActivityResultLauncher?, + chooserTitle: String?, + text: String, + subject: String? = null) { val share = Intent(Intent.ACTION_SEND) share.type = "text/plain" share.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT) // Add data to the intent, the receiving app will decide what to do with it. share.putExtra(Intent.EXTRA_SUBJECT, subject) share.putExtra(Intent.EXTRA_TEXT, text) + val intent = Intent.createChooser(share, chooserTitle) try { - if (requestCode != null) { - fragment.startActivityForResult(Intent.createChooser(share, chooserTitle), requestCode) + if (activityResultLauncher != null) { + activityResultLauncher.launch(intent) } else { - fragment.startActivity(Intent.createChooser(share, chooserTitle)) + fragment.startActivity(intent) } } catch (activityNotFoundException: ActivityNotFoundException) { fragment.activity?.toast(R.string.error_no_external_application_found) } } -fun startImportTextFromFileIntent(fragment: Fragment, requestCode: Int) { +fun startImportTextFromFileIntent(context: Context, activityResultLauncher: ActivityResultLauncher) { val intent = Intent(Intent.ACTION_GET_CONTENT).apply { type = "text/plain" } - if (intent.resolveActivity(fragment.requireActivity().packageManager) != null) { - fragment.startActivityForResult(intent, requestCode) + if (intent.resolveActivity(context.packageManager) != null) { + activityResultLauncher.launch(intent) } else { - fragment.activity?.toast(R.string.error_no_external_application_found) + context.toast(R.string.error_no_external_application_found) } } diff --git a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/restore/KeysBackupRestoreFromKeyFragment.kt b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/restore/KeysBackupRestoreFromKeyFragment.kt index 966ad9d0b8..580a3443e7 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/restore/KeysBackupRestoreFromKeyFragment.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/restore/KeysBackupRestoreFromKeyFragment.kt @@ -16,7 +16,6 @@ package im.vector.app.features.crypto.keysbackup.restore import android.app.Activity -import android.content.Intent import android.os.Bundle import android.text.Editable import android.view.View @@ -28,19 +27,15 @@ import butterknife.OnClick import butterknife.OnTextChanged import com.google.android.material.textfield.TextInputLayout import im.vector.app.R +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.core.utils.startImportTextFromFileIntent -import timber.log.Timber +import org.matrix.android.sdk.api.extensions.tryOrNull import javax.inject.Inject class KeysBackupRestoreFromKeyFragment @Inject constructor() : VectorBaseFragment() { - companion object { - - private const val REQUEST_TEXT_FILE_GET = 1 - } - override fun getLayoutResId() = R.layout.fragment_keys_backup_restore_from_key private lateinit var viewModel: KeysBackupRestoreFromKeyViewModel @@ -48,6 +43,7 @@ class KeysBackupRestoreFromKeyFragment @Inject constructor() @BindView(R.id.keys_backup_key_enter_til) lateinit var mKeyInputLayout: TextInputLayout + @BindView(R.id.keys_restore_key_enter_edittext) lateinit var mKeyTextEdit: EditText @@ -89,29 +85,23 @@ class KeysBackupRestoreFromKeyFragment @Inject constructor() @OnClick(R.id.keys_backup_import) fun onImport() { - startImportTextFromFileIntent(this, REQUEST_TEXT_FILE_GET) + startImportTextFromFileIntent(requireContext(), textFileStartForActivityResult) } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - if (requestCode == REQUEST_TEXT_FILE_GET && resultCode == Activity.RESULT_OK) { - val dataURI = data?.data - if (dataURI != null) { - try { - activity - ?.contentResolver - ?.openInputStream(dataURI) - ?.bufferedReader() - ?.use { it.readText() } - ?.let { - mKeyTextEdit.setText(it) - mKeyTextEdit.setSelection(it.length) - } - } catch (e: Exception) { - Timber.e(e, "Failed to read recovery kay from text") - } + private val textFileStartForActivityResult = registerStartForActivityResult { activityResult -> + if (activityResult.resultCode == Activity.RESULT_OK) { + val dataURI = activityResult.data?.data ?: return@registerStartForActivityResult + tryOrNull(message = "Failed to read recovery kay from text") { + activity + ?.contentResolver + ?.openInputStream(dataURI) + ?.bufferedReader() + ?.use { it.readText() } + ?.let { + mKeyTextEdit.setText(it) + mKeyTextEdit.setSelection(it.length) + } } - return } - super.onActivityResult(requestCode, resultCode, data) } } diff --git a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep3Fragment.kt b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep3Fragment.kt index 03ad5d5d9f..5e7a2a738a 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep3Fragment.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep3Fragment.kt @@ -144,10 +144,12 @@ class KeysBackupSetupStep3Fragment @Inject constructor() : VectorBaseFragment() } dialog.findViewById(R.id.keys_backup_setup_share)?.setOnClickListener { - startSharePlainTextIntent(this, - context?.getString(R.string.keys_backup_setup_step3_share_intent_chooser_title), - recoveryKey, - context?.getString(R.string.recovery_key)) + startSharePlainTextIntent( + fragment = this, + activityResultLauncher = null, + chooserTitle = context?.getString(R.string.keys_backup_setup_step3_share_intent_chooser_title), + text = recoveryKey, + subject = context?.getString(R.string.recovery_key)) viewModel.copyHasBeenMade = true dialog.dismiss() } diff --git a/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecuredStorageKeyFragment.kt b/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecuredStorageKeyFragment.kt index 366c979155..9fb3f637e1 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecuredStorageKeyFragment.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecuredStorageKeyFragment.kt @@ -17,7 +17,6 @@ package im.vector.app.features.crypto.quads import android.app.Activity -import android.content.Intent import android.os.Bundle import android.view.View import android.view.inputmethod.EditorInfo @@ -25,6 +24,7 @@ import com.airbnb.mvrx.activityViewModel import com.jakewharton.rxbinding3.widget.editorActionEvents import com.jakewharton.rxbinding3.widget.textChanges import im.vector.app.R +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.core.utils.startImportTextFromFileIntent import io.reactivex.android.schedulers.AndroidSchedulers @@ -61,7 +61,7 @@ class SharedSecuredStorageKeyFragment @Inject constructor() : VectorBaseFragment } .disposeOnDestroyView() - ssss_key_use_file.debouncedClicks { startImportTextFromFileIntent(this, IMPORT_FILE_REQ) } + ssss_key_use_file.debouncedClicks { startImportTextFromFileIntent(requireContext(), importFileStartForActivityResult) } ssss_key_reset.clickableView.debouncedClicks { sharedViewModel.handle(SharedSecureStorageAction.ForgotResetAll) @@ -85,9 +85,9 @@ class SharedSecuredStorageKeyFragment @Inject constructor() : VectorBaseFragment sharedViewModel.handle(SharedSecureStorageAction.SubmitKey(text)) } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - if (requestCode == IMPORT_FILE_REQ && resultCode == Activity.RESULT_OK) { - data?.data?.let { dataURI -> + private val importFileStartForActivityResult = registerStartForActivityResult { activityResult -> + if (activityResult.resultCode == Activity.RESULT_OK) { + activityResult.data?.data?.let { dataURI -> tryOrNull { activity?.contentResolver?.openInputStream(dataURI) ?.bufferedReader() @@ -97,12 +97,6 @@ class SharedSecuredStorageKeyFragment @Inject constructor() : VectorBaseFragment } } } - return } - super.onActivityResult(requestCode, resultCode, data) - } - - companion object { - private const val IMPORT_FILE_REQ = 0 } } diff --git a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapMigrateBackupFragment.kt b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapMigrateBackupFragment.kt index a89e08988c..69c809c773 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapMigrateBackupFragment.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapMigrateBackupFragment.kt @@ -17,7 +17,6 @@ package im.vector.app.features.crypto.recover import android.app.Activity -import android.content.Intent import android.os.Bundle import android.text.InputType.TYPE_CLASS_TEXT import android.text.InputType.TYPE_TEXT_FLAG_MULTI_LINE @@ -32,6 +31,7 @@ import com.jakewharton.rxbinding3.widget.editorActionEvents import com.jakewharton.rxbinding3.widget.textChanges import im.vector.app.R import im.vector.app.core.extensions.hideKeyboard +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.extensions.showPassword import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.core.resources.ColorProvider @@ -82,7 +82,7 @@ class BootstrapMigrateBackupFragment @Inject constructor( bootstrapMigrateContinueButton.debouncedClicks { submit() } bootstrapMigrateShowPassword.debouncedClicks { sharedViewModel.handle(BootstrapActions.TogglePasswordVisibility) } bootstrapMigrateForgotPassphrase.debouncedClicks { sharedViewModel.handle(BootstrapActions.HandleForgotBackupPassphrase) } - bootstrapMigrateUseFile.debouncedClicks { startImportTextFromFileIntent(this, IMPORT_FILE_REQ) } + bootstrapMigrateUseFile.debouncedClicks { startImportTextFromFileIntent(requireContext(), importFileStartForActivityResult) } } private fun submit() = withState(sharedViewModel) { state -> @@ -147,9 +147,9 @@ class BootstrapMigrateBackupFragment @Inject constructor( } } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - if (requestCode == IMPORT_FILE_REQ && resultCode == Activity.RESULT_OK) { - data?.data?.let { dataURI -> + private val importFileStartForActivityResult = registerStartForActivityResult { activityResult -> + if (activityResult.resultCode == Activity.RESULT_OK) { + activityResult.data?.data?.let { dataURI -> tryOrNull { activity?.contentResolver?.openInputStream(dataURI) ?.bufferedReader() @@ -159,12 +159,6 @@ class BootstrapMigrateBackupFragment @Inject constructor( } } } - return } - super.onActivityResult(requestCode, resultCode, data) - } - - companion object { - private const val IMPORT_FILE_REQ = 0 } } diff --git a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapSaveRecoveryKeyFragment.kt b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapSaveRecoveryKeyFragment.kt index 750dadbc9f..e426394d77 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapSaveRecoveryKeyFragment.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapSaveRecoveryKeyFragment.kt @@ -16,7 +16,7 @@ package im.vector.app.features.crypto.recover -import android.app.Activity.RESULT_OK +import android.app.Activity import android.content.ActivityNotFoundException import android.content.Intent import android.os.Bundle @@ -25,6 +25,7 @@ import androidx.core.view.isVisible import com.airbnb.mvrx.parentFragmentViewModel import com.airbnb.mvrx.withState import im.vector.app.R +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.core.resources.ColorProvider import im.vector.app.core.utils.startSharePlainTextIntent @@ -65,43 +66,46 @@ class BootstrapSaveRecoveryKeyFragment @Inject constructor( try { sharedViewModel.handle(BootstrapActions.SaveReqQueryStarted) - startActivityForResult(Intent.createChooser(intent, getString(R.string.keys_backup_setup_step3_please_make_copy)), REQUEST_CODE_SAVE) + saveStartForActivityResult.launch(Intent.createChooser(intent, getString(R.string.keys_backup_setup_step3_please_make_copy))) } catch (activityNotFoundException: ActivityNotFoundException) { requireActivity().toast(R.string.error_no_external_application_found) sharedViewModel.handle(BootstrapActions.SaveReqFailed) } } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - if (requestCode == REQUEST_CODE_SAVE) { - val uri = data?.data - if (resultCode == RESULT_OK && uri != null) { - GlobalScope.launch(Dispatchers.IO) { - try { - sharedViewModel.handle(BootstrapActions.SaveKeyToUri(requireContext().contentResolver!!.openOutputStream(uri)!!)) - } catch (failure: Throwable) { - sharedViewModel.handle(BootstrapActions.SaveReqFailed) - } + private val saveStartForActivityResult = registerStartForActivityResult { activityResult -> + if (activityResult.resultCode == Activity.RESULT_OK) { + val uri = activityResult.data?.data ?: return@registerStartForActivityResult + GlobalScope.launch(Dispatchers.IO) { + try { + sharedViewModel.handle(BootstrapActions.SaveKeyToUri(requireContext().contentResolver!!.openOutputStream(uri)!!)) + } catch (failure: Throwable) { + sharedViewModel.handle(BootstrapActions.SaveReqFailed) } - } else { - // result code seems to be always cancelled here.. so act as if it was saved - sharedViewModel.handle(BootstrapActions.SaveReqFailed) } - return - } else if (requestCode == REQUEST_CODE_COPY) { + } else { + // result code seems to be always cancelled here.. so act as if it was saved + sharedViewModel.handle(BootstrapActions.SaveReqFailed) + } + } + + private val copyStartForActivityResult = registerStartForActivityResult { activityResult -> + if (activityResult.resultCode == Activity.RESULT_OK) { sharedViewModel.handle(BootstrapActions.RecoveryKeySaved) } - super.onActivityResult(requestCode, resultCode, data) } private fun shareRecoveryKey() = withState(sharedViewModel) { state -> val recoveryKey = state.recoveryKeyCreationInfo?.recoveryKey?.formatRecoveryKey() ?: return@withState - startSharePlainTextIntent(this, + startSharePlainTextIntent( + this, + copyStartForActivityResult, context?.getString(R.string.keys_backup_setup_step3_share_intent_chooser_title), recoveryKey, - context?.getString(R.string.recovery_key), REQUEST_CODE_COPY) + context?.getString(R.string.recovery_key) + ) } override fun invalidate() = withState(sharedViewModel) { state -> @@ -111,9 +115,4 @@ class BootstrapSaveRecoveryKeyFragment @Inject constructor( recoveryContinue.isVisible = step.isSaved bootstrapRecoveryKeyText.text = state.recoveryKeyCreationInfo?.recoveryKey?.formatRecoveryKey() } - - companion object { - const val REQUEST_CODE_SAVE = 123 - const val REQUEST_CODE_COPY = 124 - } } diff --git a/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheet.kt b/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheet.kt index c7ce4d6f01..d91194e002 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheet.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheet.kt @@ -35,6 +35,7 @@ import im.vector.app.R import im.vector.app.core.di.ScreenComponent import im.vector.app.core.extensions.commitTransaction import im.vector.app.core.extensions.exhaustive +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.platform.VectorBaseActivity import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment import im.vector.app.features.crypto.quads.SharedSecureStorageActivity @@ -108,12 +109,12 @@ class VerificationBottomSheet : VectorBaseBottomSheetDialogFragment() { when (it) { is VerificationBottomSheetViewEvents.Dismiss -> dismiss() is VerificationBottomSheetViewEvents.AccessSecretStore -> { - startActivityForResult(SharedSecureStorageActivity.newIntent( + secretStartForActivityResult.launch(SharedSecureStorageActivity.newIntent( requireContext(), null, // use default key listOf(MASTER_KEY_SSSS_NAME, USER_SIGNING_KEY_SSSS_NAME, SELF_SIGNING_KEY_SSSS_NAME, KEYBACKUP_SECRET_SSSS_NAME), SharedSecureStorageActivity.DEFAULT_RESULT_KEYSTORE_ALIAS - ), SECRET_REQUEST_CODE) + )) } is VerificationBottomSheetViewEvents.ModalError -> { AlertDialog.Builder(requireContext()) @@ -145,10 +146,10 @@ class VerificationBottomSheet : VectorBaseBottomSheetDialogFragment() { } } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - if (resultCode == Activity.RESULT_OK && requestCode == SECRET_REQUEST_CODE) { - val result = data?.getStringExtra(SharedSecureStorageActivity.EXTRA_DATA_RESULT) - val reset = data?.getBooleanExtra(SharedSecureStorageActivity.EXTRA_DATA_RESET, false) ?: false + private val secretStartForActivityResult = registerStartForActivityResult { activityResult -> + if (activityResult.resultCode == Activity.RESULT_OK) { + val result = activityResult.data?.getStringExtra(SharedSecureStorageActivity.EXTRA_DATA_RESULT) + val reset = activityResult.data?.getBooleanExtra(SharedSecureStorageActivity.EXTRA_DATA_RESET, false) ?: false if (result != null) { viewModel.handle(VerificationAction.GotResultFromSsss(result, SharedSecureStorageActivity.DEFAULT_RESULT_KEYSTORE_ALIAS)) } else if (reset) { @@ -156,11 +157,9 @@ class VerificationBottomSheet : VectorBaseBottomSheetDialogFragment() { viewModel.handle(VerificationAction.SecuredStorageHasBeenReset) } } - super.onActivityResult(requestCode, resultCode, data) } override fun invalidate() = withState(viewModel) { state -> - state.otherUserMxItem?.let { matrixItem -> if (state.isMe) { avatarRenderer.render(matrixItem, otherUserAvatarImageView) @@ -347,9 +346,6 @@ class VerificationBottomSheet : VectorBaseBottomSheetDialogFragment() { } companion object { - - const val SECRET_REQUEST_CODE = 101 - fun withArgs(roomId: String?, otherUserId: String, transactionId: String? = null): VerificationBottomSheet { return VerificationBottomSheet().apply { arguments = Bundle().apply { diff --git a/vector/src/main/java/im/vector/app/features/media/BigImageViewerActivity.kt b/vector/src/main/java/im/vector/app/features/media/BigImageViewerActivity.kt index 144b9739da..04fd6e3850 100644 --- a/vector/src/main/java/im/vector/app/features/media/BigImageViewerActivity.kt +++ b/vector/src/main/java/im/vector/app/features/media/BigImageViewerActivity.kt @@ -175,7 +175,6 @@ class BigImageViewerActivity : VectorBaseActivity() { private const val EXTRA_TITLE = "EXTRA_TITLE" private const val EXTRA_IMAGE_URL = "EXTRA_IMAGE_URL" private const val EXTRA_CAN_EDIT_IMAGE = "EXTRA_CAN_EDIT_IMAGE" - const val REQUEST_CODE = 1000 fun newIntent(context: Context, title: String?, imageUrl: String, canEditImage: Boolean = false): Intent { return Intent(context, BigImageViewerActivity::class.java).apply { diff --git a/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileFragment.kt b/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileFragment.kt index cda2d83e3d..169cba09eb 100644 --- a/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileFragment.kt +++ b/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileFragment.kt @@ -284,7 +284,12 @@ class RoomMemberProfileFragment @Inject constructor( } private fun handleShareRoomMemberProfile(permalink: String) { - startSharePlainTextIntent(fragment = this, chooserTitle = null, text = permalink) + startSharePlainTextIntent( + fragment = this, + activityResultLauncher = null, + chooserTitle = null, + text = permalink + ) } private fun onAvatarClicked(view: View, userMatrixItem: MatrixItem) { diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt index 82c16db5ee..2b67624ed1 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt @@ -260,14 +260,19 @@ class RoomProfileFragment @Inject constructor( } private fun onShareRoomProfile(permalink: String) { - startSharePlainTextIntent(fragment = this, chooserTitle = null, text = permalink) + startSharePlainTextIntent( + fragment = this, + activityResultLauncher = null, + chooserTitle = null, + text = permalink + ) } private fun onAvatarClicked(view: View, matrixItem: MatrixItem.RoomItem) = withState(roomProfileViewModel) { if (matrixItem.avatarUrl?.isNotEmpty() == true) { val intent = BigImageViewerActivity.newIntent(requireContext(), matrixItem.getBestName(), matrixItem.avatarUrl!!, it.canChangeAvatar) val options = ActivityOptionsCompat.makeSceneTransitionAnimation(requireActivity(), view, ViewCompat.getTransitionName(view) ?: "") - startActivityForResult(intent, BigImageViewerActivity.REQUEST_CODE, options.toBundle()) + bigImageStartForActivityResult.launch(intent, options) } else if (it.canChangeAvatar) { showAvatarSelector() } @@ -333,14 +338,20 @@ class RoomProfileFragment @Inject constructor( } } + private val bigImageStartForActivityResult = registerStartForActivityResult { activityResult -> + if (activityResult.resultCode == Activity.RESULT_OK) { + activityResult.data?.let { onAvatarCropped(it.data) } + } + } + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { if (resultCode == Activity.RESULT_OK) { when (requestCode) { - UCrop.REQUEST_CROP -> data?.let { onAvatarCropped(UCrop.getOutput(it)) } - BigImageViewerActivity.REQUEST_CODE -> data?.let { onAvatarCropped(it.data) } + UCrop.REQUEST_CROP -> data?.let { onAvatarCropped(UCrop.getOutput(it)) } } } - // TODO + // TODO handle this one (Ucrop lib) + @Suppress("DEPRECATION") super.onActivityResult(requestCode, resultCode, data) } diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationPreferenceFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationPreferenceFragment.kt index d6d9cf6e31..99a05ae6c1 100644 --- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationPreferenceFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationPreferenceFragment.kt @@ -27,6 +27,7 @@ import androidx.preference.Preference import androidx.preference.SwitchPreference import im.vector.app.R import im.vector.app.core.di.ActiveSessionHolder +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.preference.VectorEditTextPreference import im.vector.app.core.preference.VectorPreference import im.vector.app.core.preference.VectorPreferenceCategory @@ -210,27 +211,22 @@ class VectorSettingsNotificationPreferenceFragment @Inject constructor( intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, vectorPreferences.getNotificationRingTone()) } - startActivityForResult(intent, REQUEST_NOTIFICATION_RINGTONE) + ringtoneStartForActivityResult.launch(intent) false } } } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - if (resultCode == Activity.RESULT_OK) { - when (requestCode) { - REQUEST_NOTIFICATION_RINGTONE -> { - vectorPreferences.setNotificationRingTone(data?.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI) as Uri?) + private val ringtoneStartForActivityResult = registerStartForActivityResult { activityResult -> + if (activityResult.resultCode == Activity.RESULT_OK) { + vectorPreferences.setNotificationRingTone(activityResult.data?.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI) as Uri?) - // test if the selected ring tone can be played - val notificationRingToneName = vectorPreferences.getNotificationRingToneName() - if (null != notificationRingToneName) { - vectorPreferences.setNotificationRingTone(vectorPreferences.getNotificationRingTone()) - findPreference(VectorPreferences.SETTINGS_NOTIFICATION_RINGTONE_SELECTION_PREFERENCE_KEY)!! - .summary = notificationRingToneName - } - } + // test if the selected ring tone can be played + val notificationRingToneName = vectorPreferences.getNotificationRingToneName() + if (null != notificationRingToneName) { + vectorPreferences.setNotificationRingTone(vectorPreferences.getNotificationRingTone()) + findPreference(VectorPreferences.SETTINGS_NOTIFICATION_RINGTONE_SELECTION_PREFERENCE_KEY)!! + .summary = notificationRingToneName } } } @@ -342,7 +338,6 @@ class VectorSettingsNotificationPreferenceFragment @Inject constructor( } companion object { - private const val REQUEST_NOTIFICATION_RINGTONE = 888 private const val REQUEST_BATTERY_OPTIMIZATION = 500 } } diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsVoiceVideoFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsVoiceVideoFragment.kt index dba3c78220..05d1a1f60f 100644 --- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsVoiceVideoFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsVoiceVideoFragment.kt @@ -23,6 +23,7 @@ import android.net.Uri import androidx.preference.Preference import androidx.preference.SwitchPreference import im.vector.app.R +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.preference.VectorPreference import im.vector.app.core.utils.getCallRingtoneName import im.vector.app.core.utils.getCallRingtoneUri @@ -57,19 +58,13 @@ class VectorSettingsVoiceVideoFragment : VectorSettingsBaseFragment() { } } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - - if (resultCode == Activity.RESULT_OK) { - when (requestCode) { - REQUEST_CALL_RINGTONE -> { - val callRingtoneUri: Uri? = data?.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI) - val thisActivity = activity - if (callRingtoneUri != null && thisActivity != null) { - setCallRingtoneUri(thisActivity, callRingtoneUri) - mCallRingtonePreference.summary = getCallRingtoneName(thisActivity) - } - } + private val ringtoneStartForActivityResult = registerStartForActivityResult { activityResult -> + if (activityResult.resultCode == Activity.RESULT_OK) { + val callRingtoneUri: Uri? = activityResult.data?.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI) + val thisActivity = activity + if (callRingtoneUri != null && thisActivity != null) { + setCallRingtoneUri(thisActivity, callRingtoneUri) + mCallRingtonePreference.summary = getCallRingtoneName(thisActivity) } } } @@ -82,10 +77,6 @@ class VectorSettingsVoiceVideoFragment : VectorSettingsBaseFragment() { putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE) activity?.let { putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, getCallRingtoneUri(it)) } } - startActivityForResult(intent, REQUEST_CALL_RINGTONE) - } - - companion object { - private const val REQUEST_CALL_RINGTONE = 999 + ringtoneStartForActivityResult.launch(intent) } }