Implement UX feedback in new conversation start flows.
This commit is contained in:
parent
3f8a9e1be2
commit
ebd8d85a3d
9 changed files with 62 additions and 42 deletions
|
@ -80,6 +80,7 @@ public class NewConversationActivity extends ContactSelectionActivity
|
|||
|
||||
private ContactsManagementViewModel viewModel;
|
||||
private ActivityResultLauncher<Intent> contactLauncher;
|
||||
private ActivityResultLauncher<Intent> createGroupLauncher;
|
||||
private ActivityResultLauncher<FindByMode> findByLauncher;
|
||||
|
||||
private final LifecycleDisposable disposables = new LifecycleDisposable();
|
||||
|
@ -108,6 +109,12 @@ public class NewConversationActivity extends ContactSelectionActivity
|
|||
}
|
||||
});
|
||||
|
||||
createGroupLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
|
||||
if (result.getResultCode() == RESULT_OK) {
|
||||
finish();
|
||||
}
|
||||
});
|
||||
|
||||
viewModel = new ViewModelProvider(this, factory).get(ContactsManagementViewModel.class);
|
||||
}
|
||||
|
||||
|
@ -220,7 +227,7 @@ public class NewConversationActivity extends ContactSelectionActivity
|
|||
}
|
||||
|
||||
private void handleCreateGroup() {
|
||||
startActivity(CreateGroupActivity.newIntent(this));
|
||||
createGroupLauncher.launch(CreateGroupActivity.newIntent(this));
|
||||
}
|
||||
|
||||
private void handleInvite() {
|
||||
|
@ -245,7 +252,7 @@ public class NewConversationActivity extends ContactSelectionActivity
|
|||
@Override
|
||||
public void onNewGroup(boolean forceV1) {
|
||||
handleCreateGroup();
|
||||
finish();
|
||||
// finish();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -15,6 +15,7 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
|||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||
|
||||
import org.signal.core.util.DimensionUnit;
|
||||
import org.signal.core.util.Stopwatch;
|
||||
import org.signal.core.util.concurrent.SimpleTask;
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.ContactSelectionActivity;
|
||||
|
@ -22,7 +23,6 @@ import org.thoughtcrime.securesms.ContactSelectionListFragment;
|
|||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.contacts.ContactSelectionDisplayMode;
|
||||
import org.thoughtcrime.securesms.contacts.sync.ContactDiscovery;
|
||||
import org.thoughtcrime.securesms.database.RecipientTable;
|
||||
import org.thoughtcrime.securesms.groups.ui.creategroup.details.AddGroupDetailsActivity;
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
|
@ -30,11 +30,9 @@ import org.thoughtcrime.securesms.recipients.RecipientId;
|
|||
import org.thoughtcrime.securesms.recipients.ui.findby.FindByActivity;
|
||||
import org.thoughtcrime.securesms.recipients.ui.findby.FindByMode;
|
||||
import org.thoughtcrime.securesms.util.FeatureFlags;
|
||||
import org.signal.core.util.Stopwatch;
|
||||
import org.thoughtcrime.securesms.util.views.SimpleProgressDialog;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
|
@ -104,6 +102,7 @@ public class CreateGroupActivity extends ContactSelectionActivity implements Con
|
|||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
|
||||
if (requestCode == REQUEST_CODE_ADD_DETAILS && resultCode == RESULT_OK) {
|
||||
setResult(RESULT_OK);
|
||||
finish();
|
||||
} else {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
|
|
|
@ -41,6 +41,7 @@ import androidx.compose.runtime.getValue
|
|||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.focus.FocusRequester
|
||||
import androidx.compose.ui.focus.focusRequester
|
||||
import androidx.compose.ui.graphics.Color
|
||||
|
@ -347,7 +348,11 @@ private fun Content(
|
|||
.padding(horizontal = 16.dp, vertical = 10.dp)
|
||||
.focusRequester(focusRequester)
|
||||
.heightIn(min = 44.dp),
|
||||
contentPadding = TextFieldDefaults.contentPaddingWithoutLabel(top = 10.dp, bottom = 10.dp)
|
||||
contentPadding = if (state.mode == FindByMode.PHONE_NUMBER) {
|
||||
TextFieldDefaults.contentPaddingWithoutLabel(start = 4.dp, top = 10.dp, bottom = 10.dp)
|
||||
} else {
|
||||
TextFieldDefaults.contentPaddingWithoutLabel(top = 10.dp, bottom = 10.dp)
|
||||
}
|
||||
)
|
||||
|
||||
if (state.mode == FindByMode.USERNAME) {
|
||||
|
@ -395,18 +400,27 @@ private fun PhoneNumberEntryPrefix(
|
|||
onSelectCountryPrefixClick: () -> Unit
|
||||
) {
|
||||
Row(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
modifier = Modifier.padding(end = 16.dp)
|
||||
) {
|
||||
Row(
|
||||
modifier = Modifier.clickable(onClick = onSelectCountryPrefixClick, enabled = enabled)
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
modifier = Modifier
|
||||
.clip(RoundedCornerShape(1000.dp))
|
||||
.clickable(onClick = onSelectCountryPrefixClick, enabled = enabled)
|
||||
) {
|
||||
Text(
|
||||
text = selectedCountryPrefix.toString()
|
||||
text = selectedCountryPrefix.toString(),
|
||||
modifier = Modifier
|
||||
.padding(start = 12.dp, top = 6.dp, bottom = 6.dp)
|
||||
)
|
||||
Icon(
|
||||
painter = painterResource(id = R.drawable.symbol_dropdown_triangle_24),
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
modifier = Modifier
|
||||
.size(24.dp)
|
||||
.padding(end = 1.dp)
|
||||
)
|
||||
}
|
||||
Dividers.Vertical(
|
||||
|
@ -414,7 +428,7 @@ private fun PhoneNumberEntryPrefix(
|
|||
color = MaterialTheme.colorScheme.outline,
|
||||
modifier = Modifier
|
||||
.padding(vertical = 2.dp)
|
||||
.padding(start = 8.dp)
|
||||
.padding(start = 7.dp)
|
||||
.height(20.dp)
|
||||
)
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ import org.thoughtcrime.securesms.profiles.manage.UsernameRepository
|
|||
import org.thoughtcrime.securesms.recipients.Recipient
|
||||
import org.thoughtcrime.securesms.registration.util.CountryPrefix
|
||||
import org.thoughtcrime.securesms.util.UsernameUtil
|
||||
import org.whispersystems.signalservice.api.util.PhoneNumberFormatter
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
class FindByViewModel(
|
||||
|
@ -104,12 +105,20 @@ class FindByViewModel(
|
|||
ContactDiscovery.refresh(context, recipient, false, TimeUnit.SECONDS.toMillis(10))
|
||||
val resolved = Recipient.resolved(recipient.id)
|
||||
if (!resolved.isRegistered) {
|
||||
if (PhoneNumberFormatter.isValidNumber(nationalNumber, countryCode.toString())) {
|
||||
FindByResult.NotFound(recipient.id)
|
||||
} else {
|
||||
FindByResult.InvalidEntry
|
||||
}
|
||||
} else {
|
||||
FindByResult.Success(recipient.id)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
if (PhoneNumberFormatter.isValidNumber(nationalNumber, countryCode.toString())) {
|
||||
FindByResult.NotFound(recipient.id)
|
||||
} else {
|
||||
FindByResult.InvalidEntry
|
||||
}
|
||||
}
|
||||
} else {
|
||||
FindByResult.Success(recipient.id)
|
||||
|
|
|
@ -1,14 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item>
|
||||
<shape android:shape="oval">
|
||||
<solid android:color="@color/signal_colorSurfaceVariant" />
|
||||
</shape>
|
||||
</item>
|
||||
<item
|
||||
android:bottom="12dp"
|
||||
android:drawable="@drawable/ic_group_outline_new_28"
|
||||
android:left="12dp"
|
||||
android:right="12dp"
|
||||
android:top="12dp" />
|
||||
</layer-list>
|
|
@ -4,14 +4,15 @@
|
|||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M13,7.148c0,-2.133 1.434,-4.023 3.5,-4.023S20,5.015 20,7.148c0,1.082 -0.353,2.11 -0.952,2.885 -0.599,0.774 -1.49,1.342 -2.548,1.342 -1.057,0 -1.949,-0.568 -2.548,-1.342 -0.6,-0.774 -0.952,-1.803 -0.952,-2.885ZM16.5,4.875c-0.833,0 -1.75,0.817 -1.75,2.273 0,0.713 0.235,1.36 0.586,1.814 0.35,0.453 0.771,0.663 1.164,0.663 0.393,0 0.813,-0.21 1.164,-0.663 0.351,-0.453 0.586,-1.1 0.586,-1.814 0,-1.456 -0.917,-2.273 -1.75,-2.273Z"
|
||||
android:fillColor="#000"
|
||||
android:fillType="evenOdd"/>
|
||||
android:fillColor="#FF000000"
|
||||
android:pathData="M13 7.15c0-2.13 1.43-4.03 3.5-4.03 2.07 0 3.5 1.9 3.5 4.03 0 1.08-0.35 2.1-0.95 2.88-0.6 0.78-1.5 1.35-2.55 1.35-1.06 0-1.95-0.57-2.55-1.35C13.35 9.26 13 8.23 13 7.15Zm3.5-2.28c-0.83 0-1.75 0.82-1.75 2.28 0 0.71 0.23 1.36 0.59 1.81 0.35 0.46 0.77 0.66 1.16 0.66 0.4 0 0.81-0.2 1.16-0.66 0.36-0.45 0.59-1.1 0.59-1.81 0-1.46-0.92-2.28-1.75-2.28Z"/>
|
||||
<path
|
||||
android:pathData="M7.5,12.625c1.115,0 2.186,0.242 3.136,0.676a7.726,7.726 0,0 0,-1.237 1.382,5.887 5.887,0 0,0 -1.899,-0.308c-2.675,0 -4.72,1.705 -5.072,3.75h5.723a7.34,7.34 0,0 0,0.061 1.75H1.757A1.128,1.128 0,0 1,0.625 18.75c0,-3.489 3.191,-6.125 6.875,-6.125Z"
|
||||
android:fillColor="#000"/>
|
||||
android:fillColor="#FF000000"
|
||||
android:pathData="M7.5 12.63c1.12 0 2.19 0.24 3.14 0.67-0.47 0.41-0.89 0.87-1.24 1.38-0.58-0.2-1.22-0.3-1.9-0.3-2.68 0-4.72 1.7-5.07 3.74h5.72l-0.03 0.63c0 0.39 0.03 0.76 0.1 1.13H1.75c-0.6 0-1.14-0.48-1.14-1.13 0-3.49 3.2-6.13 6.88-6.13Z"/>
|
||||
<path
|
||||
android:pathData="M16.5,12.625c-3.684,0 -6.875,2.636 -6.875,6.125 0,0.654 0.54,1.125 1.132,1.125h11.486c0.593,0 1.132,-0.471 1.132,-1.125 0,-3.489 -3.191,-6.125 -6.875,-6.125ZM16.5,14.375c2.675,0 4.72,1.705 5.072,3.75L11.428,18.125c0.351,-2.045 2.397,-3.75 5.072,-3.75ZM7.5,3.125c-2.066,0 -3.5,1.89 -3.5,4.023 0,1.082 0.353,2.11 0.952,2.885 0.599,0.774 1.49,1.342 2.548,1.342 1.057,0 1.949,-0.568 2.548,-1.342 0.6,-0.774 0.952,-1.803 0.952,-2.885 0,-2.133 -1.434,-4.023 -3.5,-4.023ZM5.75,7.148c0,-1.456 0.917,-2.273 1.75,-2.273s1.75,0.817 1.75,2.273c0,0.713 -0.235,1.36 -0.586,1.814 -0.35,0.453 -0.771,0.663 -1.164,0.663 -0.393,0 -0.813,-0.21 -1.164,-0.663 -0.351,-0.453 -0.586,-1.1 -0.586,-1.814Z"
|
||||
android:fillColor="#000"
|
||||
android:fillType="evenOdd"/>
|
||||
android:fillColor="#FF000000"
|
||||
android:pathData="M16.5 12.63c-3.68 0-6.88 2.63-6.88 6.12 0 0.65 0.54 1.13 1.14 1.13h11.48c0.6 0 1.14-0.48 1.14-1.13 0-3.49-3.2-6.13-6.88-6.13Zm0 1.74c2.68 0 4.72 1.71 5.07 3.76H11.43c0.35-2.05 2.4-3.75 5.07-3.75Z"/>
|
||||
<path
|
||||
android:fillColor="#FF000000"
|
||||
android:pathData="M7.5 3.13C5.43 3.13 4 5.01 4 7.14c0 1.08 0.35 2.1 0.95 2.88 0.6 0.78 1.5 1.35 2.55 1.35 1.06 0 1.95-0.57 2.55-1.35 0.6-0.77 0.95-1.8 0.95-2.88 0-2.13-1.43-4.03-3.5-4.03ZM5.75 7.14c0-1.46 0.92-2.28 1.75-2.28S9.25 5.7 9.25 7.15c0 0.71-0.24 1.36-0.59 1.81C8.31 9.42 7.9 9.62 7.5 9.62c-0.4 0-0.81-0.2-1.16-0.66-0.35-0.45-0.59-1.1-0.59-1.81Z"/>
|
||||
</vector>
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.Signal.Circle"
|
||||
app:srcCompat="@drawable/symbol_number_24"
|
||||
app:tint="@color/signal_colorOnSurfaceVariant" />
|
||||
app:tint="@color/signal_colorOnSecondaryContainer" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/invite_text"
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.Signal.Circle"
|
||||
app:tint="@color/signal_colorOnSurfaceVariant" />
|
||||
app:tint="@color/signal_colorOnSecondaryContainer" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/invite_text"
|
||||
|
|
|
@ -10,15 +10,19 @@
|
|||
android:paddingEnd="@dimen/dsl_settings_gutter"
|
||||
android:background="@drawable/rounded_inset_ripple_background">
|
||||
|
||||
<ImageView
|
||||
<com.google.android.material.imageview.ShapeableImageView
|
||||
android:id="@+id/invite_image"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:background="@color/signal_colorSurfaceVariant"
|
||||
android:importantForAccessibility="no"
|
||||
android:src="@drawable/ic_new_group_circle"
|
||||
app:srcCompat="@drawable/symbol_group_24"
|
||||
app:contentPadding="8dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.Signal.Circle"
|
||||
app:tint="@color/signal_colorOnSecondaryContainer" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/invite_text"
|
||||
|
|
Loading…
Add table
Reference in a new issue