diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberFragment.kt
index dd67139ef5..f286961de4 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberFragment.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberFragment.kt
@@ -1,38 +1,123 @@
/*
- * Copyright 2024 Signal Messenger, LLC
+ * Copyright 2025 Signal Messenger, LLC
* SPDX-License-Identifier: AGPL-3.0-only
*/
package org.thoughtcrime.securesms.components.settings.app.changenumber
-import android.os.Bundle
-import android.view.View
-import androidx.appcompat.widget.Toolbar
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.res.vectorResource
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.unit.dp
+import androidx.navigation.NavController
import androidx.navigation.fragment.findNavController
-import org.signal.core.util.logging.Log
-import org.thoughtcrime.securesms.LoggingFragment
+import org.signal.core.ui.compose.Buttons
+import org.signal.core.ui.compose.Previews
+import org.signal.core.ui.compose.Scaffolds
+import org.signal.core.ui.compose.SignalPreview
import org.thoughtcrime.securesms.R
-import org.thoughtcrime.securesms.components.ViewBinderDelegate
-import org.thoughtcrime.securesms.databinding.FragmentChangePhoneNumberBinding
+import org.thoughtcrime.securesms.compose.ComposeFragment
import org.thoughtcrime.securesms.util.navigation.safeNavigate
-/**
- * Screen used to educate the user about what they're about to do (change their phone number)
- */
-class ChangeNumberFragment : LoggingFragment(R.layout.fragment_change_phone_number) {
+class ChangeNumberFragment : ComposeFragment() {
- companion object {
- private val TAG = Log.tag(ChangeNumberFragment::class.java)
+ @Composable
+ override fun FragmentContent() {
+ val navController: NavController = remember { findNavController() }
+ ChangeNumberScreen(
+ onNavigationIconClick = {
+ navController.popBackStack()
+ },
+ onContinueClick = {
+ navController.safeNavigate(ChangeNumberFragmentDirections.actionChangePhoneNumberFragmentToEnterPhoneNumberChangeFragment())
+ }
+ )
}
+}
- private val binding: FragmentChangePhoneNumberBinding by ViewBinderDelegate(FragmentChangePhoneNumberBinding::bind)
+@Composable
+fun ChangeNumberScreen(
+ onNavigationIconClick: () -> Unit,
+ onContinueClick: () -> Unit
+) {
+ Scaffolds.Settings(
+ title = "",
+ onNavigationClick = onNavigationIconClick,
+ navigationIcon = ImageVector.vectorResource(id = R.drawable.ic_arrow_left_24),
+ navigationContentDescription = stringResource(id = R.string.Material3SearchToolbar__close)
+ ) {
+ Column(
+ horizontalAlignment = Alignment.CenterHorizontally,
+ modifier = Modifier
+ .fillMaxSize()
+ .padding(it)
+ .padding(horizontal = 32.dp)
+ ) {
+ Image(
+ painter = painterResource(id = R.drawable.change_number_hero_image),
+ contentDescription = null,
+ modifier = Modifier
+ .padding(top = 20.dp)
+ )
- override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- val toolbar: Toolbar = view.findViewById(R.id.toolbar)
- toolbar.setNavigationOnClickListener { findNavController().navigateUp() }
+ Text(
+ text = stringResource(id = R.string.AccountSettingsFragment__change_phone_number),
+ style = MaterialTheme.typography.headlineMedium,
+ textAlign = TextAlign.Center,
+ fontWeight = FontWeight.Bold,
+ modifier = Modifier.padding(top = 24.dp)
+ )
- binding.changePhoneNumberContinue.setOnClickListener {
- findNavController().safeNavigate(ChangeNumberFragmentDirections.actionChangePhoneNumberFragmentToEnterPhoneNumberChangeFragment())
+ Text(
+ text = stringResource(id = R.string.ChangeNumberFragment__use_this_to_change_your_current_phone_number_to_a_new_phone_number),
+ style = MaterialTheme.typography.bodyLarge,
+ color = MaterialTheme.colorScheme.onSurfaceVariant,
+ textAlign = TextAlign.Center,
+ modifier = Modifier.padding(top = 12.dp)
+ )
+
+ Box(
+ modifier = Modifier
+ .fillMaxWidth()
+ .weight(1f)
+ .padding(bottom = 32.dp)
+ ) {
+ Buttons.LargePrimary(
+ onClick = onContinueClick,
+ modifier = Modifier.fillMaxWidth()
+ .align(Alignment.BottomCenter)
+ ) {
+ Text(
+ text = stringResource(id = R.string.ChangeNumberFragment__continue)
+ )
+ }
+ }
}
}
}
+
+@SignalPreview
+@Composable
+private fun MessageBackupsEducationSheetPreview() {
+ Previews.Preview {
+ ChangeNumberScreen(
+ onNavigationIconClick = {},
+ onContinueClick = {}
+ )
+ }
+}
diff --git a/app/src/main/res/layout/fragment_change_phone_number.xml b/app/src/main/res/layout/fragment_change_phone_number.xml
deleted file mode 100644
index 559404fa1e..0000000000
--- a/app/src/main/res/layout/fragment_change_phone_number.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/navigation/app_settings_change_number.xml b/app/src/main/res/navigation/app_settings_change_number.xml
index 0d6ef4a124..c473e2520b 100644
--- a/app/src/main/res/navigation/app_settings_change_number.xml
+++ b/app/src/main/res/navigation/app_settings_change_number.xml
@@ -7,8 +7,7 @@
+ android:name="org.thoughtcrime.securesms.components.settings.app.changenumber.ChangeNumberFragment">