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