diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt index be3825349..9be7edf03 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt @@ -109,6 +109,10 @@ class EntryEditActivity : DatabaseLockActivity(), // Education private var entryEditActivityEducation: EntryEditActivityEducation? = null + private var mIconSelectionActivityResultLauncher = IconPickerActivity.registerIconSelectionForResult(this) { icon -> + mEntryEditViewModel.selectIcon(icon) + } + // To ask data lost only one time private var backPressedAlreadyApproved = false @@ -233,7 +237,7 @@ class EntryEditActivity : DatabaseLockActivity(), // View model listeners mEntryEditViewModel.requestIconSelection.observe(this) { iconImage -> - IconPickerActivity.launch(this@EntryEditActivity, iconImage) + IconPickerActivity.launch(this@EntryEditActivity, iconImage, mIconSelectionActivityResultLauncher) } mEntryEditViewModel.requestDateTimeSelection.observe(this) { dateInstant -> @@ -496,14 +500,6 @@ class EntryEditActivity : DatabaseLockActivity(), } } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - - IconPickerActivity.onActivityResult(requestCode, resultCode, data) { icon -> - mEntryEditViewModel.selectIcon(icon) - } - } - /** * Set up OTP (HOTP or TOTP) and add it as extra field */ diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt index 661ed1122..e5fadd613 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt @@ -113,6 +113,11 @@ class GroupActivity : DatabaseLockActivity(), private var mSearchSuggestionAdapter: SearchEntryCursorAdapter? = null private var mOnSuggestionListener: SearchView.OnSuggestionListener? = null + private var mIconSelectionActivityResultLauncher = IconPickerActivity.registerIconSelectionForResult(this) { icon -> + // To create tree dialog for icon + mGroupEditViewModel.selectIcon(icon) + } + private var mAutofillActivityResultLauncher: ActivityResultLauncher? = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) AutofillHelper.buildActivityResultLauncher(this) @@ -285,7 +290,7 @@ class GroupActivity : DatabaseLockActivity(), } mGroupEditViewModel.requestIconSelection.observe(this) { iconImage -> - IconPickerActivity.launch(this@GroupActivity, iconImage) + IconPickerActivity.launch(this@GroupActivity, iconImage, mIconSelectionActivityResultLauncher) } mGroupEditViewModel.requestDateTimeSelection.observe(this) { dateInstant -> @@ -1083,11 +1088,6 @@ class GroupActivity : DatabaseLockActivity(), override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) - // To create tree dialog for icon - IconPickerActivity.onActivityResult(requestCode, resultCode, data) { icon -> - mGroupEditViewModel.selectIcon(icon) - } - // Directly used the onActivityResult in fragment mGroupFragment?.onActivityResult(requestCode, resultCode, data) } diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/IconPickerActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/IconPickerActivity.kt index 583c9bcac..93cf4b9a9 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/IconPickerActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/IconPickerActivity.kt @@ -27,9 +27,12 @@ import android.view.Menu import android.view.MenuItem import android.view.View import android.view.ViewGroup +import androidx.activity.result.ActivityResultLauncher +import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.viewModels import androidx.appcompat.widget.Toolbar import androidx.coordinatorlayout.widget.CoordinatorLayout +import androidx.fragment.app.FragmentActivity import androidx.fragment.app.commit import com.google.android.material.snackbar.Snackbar import com.kunzisoft.keepass.R @@ -326,30 +329,28 @@ class IconPickerActivity : DatabaseLockActivity() { companion object { private const val ICON_PICKER_FRAGMENT_TAG = "ICON_PICKER_FRAGMENT_TAG" - - private const val ICON_SELECTED_REQUEST = 15861 private const val EXTRA_ICON = "EXTRA_ICON" - private const val MAX_ICON_SIZE = 5242880 - fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?, listener: (icon: IconImage) -> Unit) { - if (requestCode == ICON_SELECTED_REQUEST) { - if (resultCode == Activity.RESULT_OK) { - listener.invoke(data?.getParcelableExtra(EXTRA_ICON) ?: IconImage()) + fun registerIconSelectionForResult(context: FragmentActivity, + listener: (icon: IconImage) -> Unit): ActivityResultLauncher { + return context.registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> + if (result.resultCode == Activity.RESULT_OK) { + listener.invoke(result.data?.getParcelableExtra(EXTRA_ICON) ?: IconImage()) } } } - fun launch(context: Activity, - previousIcon: IconImage?) { + fun launch(context: FragmentActivity, + previousIcon: IconImage?, + resultLauncher: ActivityResultLauncher) { // Create an instance to return the picker icon - context.startActivityForResult( - Intent(context, - IconPickerActivity::class.java).apply { + resultLauncher.launch( + Intent(context, IconPickerActivity::class.java).apply { if (previousIcon != null) putExtra(EXTRA_ICON, previousIcon) - }, - ICON_SELECTED_REQUEST) + } + ) } } }