Update UI elements of contact share activity.

This commit is contained in:
Alex Hart 2022-07-14 14:47:00 -03:00 committed by Cody Henthorne
parent 9c914ab715
commit caab91cdc3
6 changed files with 92 additions and 59 deletions

View file

@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.contactshare;
import android.content.Context;
import android.net.Uri;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -85,7 +86,6 @@ class ContactFieldAdapter extends RecyclerView.Adapter<ContactFieldAdapter.Conta
private final TextView value;
private final TextView label;
private final ImageView icon;
private final ImageView avatar;
private final CheckBox checkBox;
@ -94,7 +94,6 @@ class ContactFieldAdapter extends RecyclerView.Adapter<ContactFieldAdapter.Conta
value = itemView.findViewById(R.id.contact_field_value);
label = itemView.findViewById(R.id.contact_field_label);
icon = itemView.findViewById(R.id.contact_field_icon);
avatar = itemView.findViewById(R.id.contact_field_avatar);
checkBox = itemView.findViewById(R.id.contact_field_checkbox);
}
@ -103,7 +102,7 @@ class ContactFieldAdapter extends RecyclerView.Adapter<ContactFieldAdapter.Conta
value.setMaxLines(field.maxLines);
value.setText(field.value);
label.setText(field.label);
icon.setImageResource(field.iconResId);
label.setVisibility(TextUtils.isEmpty(field.label) ? View.GONE : View.VISIBLE);
if (field.iconUri != null) {
avatar.setVisibility(View.VISIBLE);
@ -118,18 +117,22 @@ class ContactFieldAdapter extends RecyclerView.Adapter<ContactFieldAdapter.Conta
if (selectable) {
checkBox.setVisibility(View.VISIBLE);
checkBox.setOnCheckedChangeListener(null);
checkBox.setChecked(field.isSelected());
checkBox.setOnCheckedChangeListener((buttonView, isChecked) -> field.setSelected(isChecked));
itemView.setOnClickListener(unused -> {
field.setSelected(!field.isSelected());
checkBox.setChecked(field.isSelected());
});
super.itemView.setOnClickListener(v -> checkBox.toggle());
} else {
checkBox.setVisibility(View.GONE);
checkBox.setOnCheckedChangeListener(null);
itemView.setOnClickListener(null);
itemView.setClickable(false);
}
}
void recycle() {
checkBox.setOnCheckedChangeListener(null);
itemView.setOnClickListener(null);
itemView.setClickable(false);
}
}

View file

@ -14,6 +14,7 @@ import android.widget.Toast;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import androidx.core.view.ViewCompat;
import androidx.lifecycle.ViewModelProviders;
import androidx.recyclerview.widget.LinearLayoutManager;
@ -23,9 +24,12 @@ import org.thoughtcrime.securesms.PassphraseRequiredActivity;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.util.DynamicLanguage;
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme;
import org.thoughtcrime.securesms.util.DynamicTheme;
import org.thoughtcrime.securesms.util.Material3OnScrollHelper;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import static org.thoughtcrime.securesms.contactshare.Contact.Name;
@ -39,7 +43,7 @@ public class ContactShareEditActivity extends PassphraseRequiredActivity impleme
private static final String KEY_SEND_BUTTON_COLOR = "send_button_color";
private static final int CODE_NAME_EDIT = 55;
private final DynamicTheme dynamicTheme = new DynamicTheme();
private final DynamicTheme dynamicTheme = new DynamicNoActionBarTheme();
private final DynamicLanguage dynamicLanguage = new DynamicLanguage();
private ContactShareEditViewModel viewModel;
@ -80,6 +84,11 @@ public class ContactShareEditActivity extends PassphraseRequiredActivity impleme
contactList.setLayoutManager(new LinearLayoutManager(this));
contactList.getLayoutManager().setAutoMeasureEnabled(true);
Toolbar toolbar = findViewById(R.id.toolbar);
toolbar.setNavigationOnClickListener(unused -> onBackPressed());
Material3OnScrollHelper onScrollHelper = new Material3OnScrollHelper(this, Collections.singletonList(toolbar), Collections.emptyList());
onScrollHelper.attach(contactList);
ContactShareEditAdapter contactAdapter = new ContactShareEditAdapter(GlideApp.with(this), dynamicLanguage.getCurrentLocale(), this);
contactList.setAdapter(contactAdapter);

View file

@ -1,27 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="@dimen/signal_m3_toolbar_height"
android:minHeight="@dimen/signal_m3_toolbar_height"
app:layout_constraintTop_toTopOf="parent"
app:navigationIcon="@drawable/ic_arrow_left_24"
app:title="@string/ContactShareEditActivity__send_contact"
app:titleTextAppearance="@style/Signal.Text.TitleLarge" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/contact_share_edit_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_height="0dp"
android:clipToPadding="false"
android:paddingBottom="80dp" />
android:paddingBottom="80dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/toolbar" />
<ImageView
android:id="@+id/contact_share_edit_send"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_gravity="end|bottom"
android:layout_margin="@dimen/floating_action_button_margin"
android:background="@drawable/circle_tintable"
android:contentDescription="@string/conversation_activity__send"
android:scaleType="centerInside"
app:backgroundTint="@color/signal_colorPrimary"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:srcCompat="@drawable/ic_send_lock_24"
app:tint="@color/white" />
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -1,44 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical">
android:gravity="center_vertical"
android:minHeight="56dp"
android:orientation="horizontal">
<org.thoughtcrime.securesms.components.emoji.EmojiTextView
android:id="@+id/editable_contact_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginStart="72dp"
android:layout_weight="1"
android:textSize="20sp"
android:maxLines="2"
android:ellipsize="end"
tools:text="Peter Parker"/>
android:maxLines="2"
android:textAppearance="@style/Signal.Text.BodyLarge"
tools:text="Peter Parker" />
<ImageButton
android:id="@+id/editable_contact_name_edit_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_marginEnd="12dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:src="@drawable/ic_create_white_24dp"
android:tint="@color/core_ultramarine"/>
android:contentDescription="@string/ContactShareEditActivity__edit_name"
android:scaleType="centerInside"
android:src="@drawable/ic_compose_24"
android:tint="@color/signal_colorOnSurface" />
</LinearLayout>
<ImageView
android:layout_width="match_parent"
android:layout_height="1dp"
android:src="@color/grey_400"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/editable_contact_fields"
android:layout_width="match_parent"

View file

@ -1,32 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:gravity="center_vertical">
android:background="@drawable/selectable_list_item_background"
android:gravity="center_vertical"
android:minHeight="56dp"
android:orientation="horizontal"
android:paddingHorizontal="@dimen/dsl_settings_gutter"
android:paddingTop="12dp"
android:paddingBottom="12dp">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/contact_field_icon"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_margin="16dp"
android:tint="@color/grey_600"
tools:src="@drawable/ic_phone_right_unlock_solid_24" />
<androidx.appcompat.widget.AppCompatCheckBox
android:id="@+id/contact_field_checkbox"
android:layout_width="22dp"
android:layout_height="22dp"
android:background="@drawable/contact_selection_checkbox"
android:button="@null"
android:clickable="false"
android:focusable="false"
tools:checked="true" />
<ImageView
android:id="@+id/contact_field_avatar"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_width="56dp"
android:layout_height="56dp"
android:layout_marginStart="24dp"
android:contentDescription="@string/ContactShareEditActivity__avatar"
android:visibility="gone"
tools:src="@drawable/ic_contact_picture" />
tools:src="@drawable/ic_contact_picture"
tools:visibility="visible" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_weight="1"
android:orientation="vertical">
@ -34,24 +42,21 @@
android:id="@+id/contact_field_value"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="1"
android:ellipsize="end"
android:maxLines="1"
android:textAppearance="@style/Signal.Text.BodyLarge"
tools:text="(610) 867-5309" />
<TextView
android:id="@+id/contact_field_label"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="1"
android:ellipsize="end"
tools:text="Mobile"/>
android:maxLines="1"
android:textAppearance="@style/Signal.Text.BodyMedium"
android:textColor="@color/signal_colorOnSurfaceVariant"
tools:text="Mobile" />
</LinearLayout>
<CheckBox
android:id="@+id/contact_field_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"/>
</LinearLayout>

View file

@ -217,11 +217,17 @@
<string name="ContactNameEditActivity_middle_name">Middle name</string>
<!-- ContactShareEditActivity -->
<!-- ContactShareEditActivity toolbar title -->
<string name="ContactShareEditActivity__send_contact">Send contact</string>
<string name="ContactShareEditActivity_type_home">Home</string>
<string name="ContactShareEditActivity_type_mobile">Mobile</string>
<string name="ContactShareEditActivity_type_work">Work</string>
<string name="ContactShareEditActivity_type_missing">Other</string>
<string name="ContactShareEditActivity_invalid_contact">Selected contact was invalid</string>
<!-- Content descrption for name edit button on contact share edit activity -->
<string name="ContactShareEditActivity__edit_name">Edit name</string>
<!-- Content description for user avatar in edit activity -->
<string name="ContactShareEditActivity__avatar">Avatar</string>
<!-- ConversationItem -->
<string name="ConversationItem_error_not_sent_tap_for_details">Not sent, tap for details</string>