diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 008b77149e..1b78571c6c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -514,6 +514,13 @@
android:windowSoftInputMode="stateHidden"
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
+
+
+ setResult(Activity.RESULT_OK, Intent().putExtras(bundle))
+ finishAfterTransition()
+ }
+ }
+
+ override fun getFragment(): Fragment = PhotoEditorFragment().apply {
+ arguments = intent.extras
+ }
+
+ class Contract : ActivityResultContract() {
+ override fun createIntent(context: Context, input: Avatar.Photo): Intent {
+ return Intent(context, PhotoEditorActivity::class.java).apply {
+ putExtras(PhotoEditorActivityArgs.Builder(AvatarBundler.bundlePhoto(input)).build().toBundle())
+ }
+ }
+
+ override fun parseResult(resultCode: Int, intent: Intent?): Avatar.Photo? {
+ val extras = intent?.extras
+ if (resultCode != Activity.RESULT_OK || extras == null) {
+ return null
+ }
+
+ return AvatarBundler.extractPhoto(extras)
+ }
+ }
+}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/avatar/photo/PhotoEditorFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/avatar/photo/PhotoEditorFragment.kt
index 4223b9ce89..796c988664 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/avatar/photo/PhotoEditorFragment.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/avatar/photo/PhotoEditorFragment.kt
@@ -5,7 +5,6 @@ import android.view.View
import androidx.fragment.app.Fragment
import androidx.fragment.app.commit
import androidx.fragment.app.setFragmentResult
-import androidx.navigation.Navigation
import org.signal.core.util.ThreadUtil
import org.signal.core.util.concurrent.SignalExecutors
import org.thoughtcrime.securesms.R
@@ -18,7 +17,7 @@ import org.thoughtcrime.securesms.scribbles.ImageEditorFragment
class PhotoEditorFragment : Fragment(R.layout.avatar_photo_editor_fragment), ImageEditorFragment.Controller {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- val args = PhotoEditorFragmentArgs.fromBundle(requireArguments())
+ val args = PhotoEditorActivityArgs.fromBundle(requireArguments())
val photo = AvatarBundler.extractPhoto(args.photoAvatar)
val imageEditorFragment = ImageEditorFragment.newInstanceForAvatarEdit(photo.uri)
@@ -34,7 +33,7 @@ class PhotoEditorFragment : Fragment(R.layout.avatar_photo_editor_fragment), Ima
}
override fun onDoneEditing() {
- val args = PhotoEditorFragmentArgs.fromBundle(requireArguments())
+ val args = PhotoEditorActivityArgs.fromBundle(requireArguments())
val applicationContext = requireContext().applicationContext
val imageEditorFragment: ImageEditorFragment = childFragmentManager.findFragmentByTag(IMAGE_EDITOR) as ImageEditorFragment
@@ -52,13 +51,12 @@ class PhotoEditorFragment : Fragment(R.layout.avatar_photo_editor_fragment), Ima
ThreadUtil.runOnMain {
setFragmentResult(REQUEST_KEY_EDIT, AvatarBundler.bundlePhoto(newPhoto))
- Navigation.findNavController(requireView()).popBackStack()
}
}
}
override fun onCancelEditing() {
- Navigation.findNavController(requireView()).popBackStack()
+ requireActivity().finishAfterTransition()
}
override fun restoreState() {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/avatar/picker/AvatarPickerFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/avatar/picker/AvatarPickerFragment.kt
index 1cae56e71c..d4ddc115e5 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/avatar/picker/AvatarPickerFragment.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/avatar/picker/AvatarPickerFragment.kt
@@ -8,6 +8,7 @@ import android.view.Gravity
import android.view.View
import android.widget.PopupMenu
import android.widget.Toast
+import androidx.activity.result.ActivityResultLauncher
import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.Fragment
import androidx.fragment.app.setFragmentResult
@@ -20,6 +21,7 @@ import org.signal.core.util.getParcelableExtraCompat
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.avatar.Avatar
import org.thoughtcrime.securesms.avatar.AvatarBundler
+import org.thoughtcrime.securesms.avatar.photo.PhotoEditorActivity
import org.thoughtcrime.securesms.avatar.photo.PhotoEditorFragment
import org.thoughtcrime.securesms.avatar.text.TextAvatarCreationFragment
import org.thoughtcrime.securesms.avatar.vector.VectorAvatarCreationFragment
@@ -50,6 +52,7 @@ class AvatarPickerFragment : Fragment(R.layout.avatar_picker_fragment) {
private val viewModel: AvatarPickerViewModel by viewModels(factoryProducer = this::createFactory)
private lateinit var recycler: RecyclerView
+ private lateinit var photoEditorLauncher: ActivityResultLauncher
private fun createFactory(): AvatarPickerViewModel.Factory {
val args = AvatarPickerFragmentArgs.fromBundle(requireArguments())
@@ -138,8 +141,12 @@ class AvatarPickerFragment : Fragment(R.layout.avatar_picker_fragment) {
}
setFragmentResultListener(PhotoEditorFragment.REQUEST_KEY_EDIT) { _, bundle ->
- val photo = AvatarBundler.extractPhoto(bundle)
- viewModel.onAvatarEditCompleted(photo)
+ }
+
+ photoEditorLauncher = registerForActivityResult(PhotoEditorActivity.Contract()) { photo ->
+ if (photo != null) {
+ viewModel.onAvatarEditCompleted(photo)
+ }
}
}
@@ -197,8 +204,7 @@ class AvatarPickerFragment : Fragment(R.layout.avatar_picker_fragment) {
}
private fun openPhotoEditor(photo: Avatar.Photo) {
- Navigation.findNavController(requireView())
- .safeNavigate(AvatarPickerFragmentDirections.actionAvatarPickerFragmentToAvatarPhotoEditorFragment(AvatarBundler.bundlePhoto(photo)))
+ photoEditorLauncher.launch(photo)
}
private fun openVectorEditor(vector: Avatar.Vector) {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java b/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java
index d47c9f537b..301b6063fe 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java
@@ -293,6 +293,10 @@ public final class ImageEditorFragment extends Fragment implements ImageEditorHu
imageEditorHud.enterMode(ImageEditorHudV2.Mode.CROP);
}
+ if (mode == Mode.AVATAR_EDIT) {
+ imageEditorHud.enterMode(ImageEditorHudV2.Mode.DRAW);
+ }
+
imageEditorView.setModel(editorModel);
if (!SignalStore.tooltips().hasSeenBlurHudIconTooltip()) {
diff --git a/app/src/main/res/layout/avatar_photo_editor_fragment.xml b/app/src/main/res/layout/avatar_photo_editor_fragment.xml
index 162e65229f..94eb322c86 100644
--- a/app/src/main/res/layout/avatar_photo_editor_fragment.xml
+++ b/app/src/main/res/layout/avatar_photo_editor_fragment.xml
@@ -1,7 +1,7 @@
\ No newline at end of file
+ android:layout_height="match_parent"
+ tools:viewBindingIgnore="true" />
\ No newline at end of file
diff --git a/app/src/main/res/navigation/avatar_picker.xml b/app/src/main/res/navigation/avatar_picker.xml
index e73095ec9f..d9be9f3354 100644
--- a/app/src/main/res/navigation/avatar_picker.xml
+++ b/app/src/main/res/navigation/avatar_picker.xml
@@ -39,18 +39,6 @@
-
-
-
-
-
-
+
\ No newline at end of file