Update registration flow

This commit is contained in:
Moxie Marlinspike
2017-11-08 12:20:11 -08:00
parent e56e55363d
commit 90ff0e58b0
25 changed files with 1488 additions and 947 deletions

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator">
<translate
android:duration="150"
android:fromXDelta="0%"
android:toXDelta="-100%" />
</set>

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 311 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 224 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 335 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 342 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 563 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 545 B

View File

@@ -1,137 +1,203 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true"
android:background="@drawable/background_pattern_repeat">
<LinearLayout android:padding="16dp"
android:paddingBottom="0dp"
android:layout_marginTop="20dp"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:animateLayoutChanges="true"
android:orientation="vertical">
android:layout_height="fill_parent"
xmlns:tools="http://schemas.android.com/tools"
android:fillViewport="true"
android:background="@color/white"
tools:context=".RegistrationActivity">
<Spinner android:id="@+id/country_spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dip" />
<RelativeLayout android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout android:orientation="horizontal"
android:layoutDirection="ltr"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView android:layout_width="wrap_content"
<LinearLayout android:id="@+id/header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:orientation="vertical"
android:background="@color/signal_primary"
android:padding="16dp">
<TextView android:id="@+id/verify_header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="16dp"
android:text="@string/registration_activity__verify_your_number"
android:textSize="20sp"
style="@style/Registration.Constant"
android:text="+" />
android:textStyle="bold"
android:textColor="@color/white"
android:layout_gravity="center"
android:gravity="center"/>
<EditText android:id="@+id/country_code"
android:layout_width="55dip"
<TextView android:id="@+id/verify_subheader"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:gravity="center"
android:inputType="phone"
android:digits="0123456789"
android:maxLength="3" />
<EditText android:id="@+id/number"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:inputType="phone"
android:hint="@string/registration_activity__phone_number"
android:gravity="center"
android:singleLine="true"/>
android:paddingBottom="25dp"
android:textColor="@color/white"
android:text="@string/registration_activity__please_enter_your_mobile_number_to_receive_a_verification_code_carrier_rates_may_apply"
android:gravity="center"/>
</LinearLayout>
<TextView style="@style/Registration.Description"
android:layout_width="fill_parent"
android:layout_marginBottom="8dip"
android:layout_marginTop="16dip"
android:gravity="start"
android:text="@string/registration_activity__verify_your_number_to_connect_with_signal"/>
<android.support.design.widget.FloatingActionButton
app:fabSize="normal"
app:backgroundTint="@color/white"
app:elevation="1dp"
android:id="@+id/fab"
android:transitionName="icon"
android:src="@drawable/ic_action_name"
android:tint="@color/grey_700"
android:rotation="15"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/header"
android:layout_centerHorizontal="true"
android:layout_marginBottom="-32dp"/>
<TextView style="@style/Registration.Description"
android:id="@+id/registration_information"
android:layout_width="fill_parent"
android:gravity="start"
android:visibility="gone"
android:layout_marginBottom="16dp"
android:text="@string/registration_activity__registration_will_transmit_some_contact_information_to_the_server_temporariliy"/>
<LinearLayout android:id="@+id/registration_container"
android:padding="16dp"
android:paddingBottom="0dp"
android:layout_marginTop="30dp"
android:layout_below="@id/header"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:animateLayoutChanges="true"
android:orientation="vertical"
tools:visibility="invisible">
<LinearLayout android:id="@+id/information_link_container"
android:clickable="true"
android:orientation="horizontal"
<Spinner android:id="@+id/country_spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dip" />
<LinearLayout android:orientation="horizontal"
android:layoutDirection="ltr"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
style="@style/Registration.Constant"
android:text="+" />
<EditText android:id="@+id/country_code"
android:layout_width="55dip"
android:layout_height="wrap_content"
android:singleLine="true"
android:gravity="center"
android:inputType="phone"
android:digits="0123456789"
android:maxLength="3" />
<EditText android:id="@+id/number"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:inputType="phone"
android:hint="@string/registration_activity__phone_number"
android:gravity="center"
android:singleLine="true"/>
</LinearLayout>
<com.dd.CircularProgressButton
android:id="@+id/registerButton"
app:cpb_textIdle="Register"
app:cpb_selectorIdle="@drawable/progress_button_state"
app:cpb_colorIndicator="@color/white"
app:cpb_colorProgress="@color/textsecure_primary"
app:cpb_cornerRadius="50dp"
android:background="@color/signal_primary"
android:textColor="@color/white"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginTop="20dp"
android:layout_gravity="center_horizontal"/>
<TextView android:id="@+id/skip_button"
android:layout_gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dip">
<ImageView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:src="@drawable/ic_info_white_18dp"
android:tint="#73B7F0"/>
android:layout_marginTop="20dp"
android:textColor="@color/gray50"
android:text="@android:string/cancel"/>
<TextView style="@style/Registration.Description"
android:id="@+id/information_label"
android:clickable="false"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="3dp"
android:layout_gravity="center_vertical"
android:textColor="#73B7F0"
android:text="@string/RegistrationActivity_more_information"/>
</LinearLayout>
android:id="@+id/registration_information"
android:layout_width="fill_parent"
android:gravity="start"
android:visibility="gone"
android:layout_marginBottom="16dp"
android:layout_marginTop="16dp"
android:text="@string/registration_activity__registration_will_transmit_some_contact_information_to_the_server_temporariliy"/>
<LinearLayout android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dip"
android:layout_marginBottom="16dip"
android:layout_gravity="right"
android:orientation="horizontal">
<LinearLayout android:id="@+id/information_link_container"
android:clickable="true"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dip">
<TextView android:id="@+id/skipButton"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:paddingTop="15dp"
android:paddingBottom="15dp"
android:text="@android:string/cancel"
android:textColor="@color/white"
android:background="@drawable/pill_button"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_marginRight="5dip"
android:layout_height="wrap_content"/>
<ImageView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:src="@drawable/ic_info_white_18dp"
android:tint="#73B7F0"/>
<TextView style="@style/Registration.Description"
android:id="@+id/information_label"
android:clickable="false"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="3dp"
android:layout_gravity="center_vertical"
android:textColor="#73B7F0"
android:text="@string/RegistrationActivity_more_information"/>
</LinearLayout>
<TextView android:id="@+id/registerButton"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:paddingTop="15dp"
android:paddingBottom="15dp"
android:text="@string/registration_activity__register"
android:textColor="@color/white"
android:background="@drawable/pill_button"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"/>
</LinearLayout>
<ImageView android:id="@+id/twilio_shoutout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_twilio_shoutout_white"
android:layout_gravity="right"
android:tint="@color/grey_800"
android:contentDescription="@string/registration_activity__powered_by_twilio"/>
<RelativeLayout android:id="@+id/verification_container"
android:visibility="invisible"
android:layout_below="@id/header"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:visibility="visible">
<org.thoughtcrime.securesms.components.registration.VerificationCodeView
android:id="@+id/code"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="50dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:vcv_inputWidth="30dp"
app:vcv_spacing="10dp"
app:vcv_textColor="@color/signal_primary"
app:vcv_inputColor="@color/grey_600"/>
<org.thoughtcrime.securesms.components.registration.CallMeCountDownView
android:id="@+id/call_me_count_down"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/code"
android:layout_marginTop="30dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"/>
<org.thoughtcrime.securesms.components.registration.VerificationPinKeyboard
android:id="@+id/keyboard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
</RelativeLayout>
</LinearLayout>
</ScrollView>

View File

@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:parentTag="android.widget.RelativeLayout">
<ImageView android:id="@+id/phone_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:src="@drawable/ic_phone_grey600_32dp"/>
<TextView android:id="@+id/call_me_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/phone_icon"
android:layout_toEndOf="@id/phone_icon"
android:layout_centerVertical="true"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:gravity="center_vertical"
android:textSize="16sp"
android:text="Call me instead"/>
<TextView android:id="@+id/available_in_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@+id/countdown"
android:layout_toStartOf="@+id/countdown"
android:layout_centerVertical="true"
android:gravity="center_vertical"
android:textSize="16sp"
android:text="Available in: "/>
<TextView android:id="@+id/countdown"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:textSize="16sp"
tools:text="1:04"/>
</merge>

View File

@@ -0,0 +1,154 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center">
<LinearLayout android:id="@+id/container_zero"
android:orientation="vertical"
android:gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView android:id="@+id/code_zero"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:textStyle="bold"
tools:text="1"/>
<View android:id="@+id/space_zero"
android:layout_width="20dp"
android:layout_height="1dp"
android:background="@color/black"/>
</LinearLayout>
<LinearLayout android:id="@+id/container_one"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:layout_marginLeft="5dp">
<TextView android:id="@+id/code_one"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:textStyle="bold"
tools:text="2"/>
<View android:id="@+id/space_one"
android:layout_width="20dp"
android:layout_height="1dp"
android:background="@color/black"/>
</LinearLayout>
<LinearLayout android:id="@+id/container_two"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:layout_marginLeft="5dp">
<TextView android:id="@+id/code_two"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:textStyle="bold"
tools:text="2"/>
<View android:id="@+id/space_two"
android:layout_width="20dp"
android:layout_height="1dp"
android:background="@color/black"/>
</LinearLayout>
<LinearLayout android:id="@+id/separator_container"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:layout_marginLeft="5dp">
<TextView android:id="@+id/separator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:textStyle="bold"
android:text="-"/>
<View
android:layout_width="20dp"
android:layout_height="1dp"/>
</LinearLayout>
<LinearLayout android:id="@+id/container_three"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:layout_marginLeft="5dp">
<TextView android:id="@+id/code_three"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:textStyle="bold"
tools:text="2"/>
<View android:id="@+id/space_three"
android:layout_width="20dp"
android:layout_height="1dp"
android:background="@color/black"/>
</LinearLayout>
<LinearLayout android:id="@+id/container_four"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:layout_marginLeft="5dp">
<TextView android:id="@+id/code_four"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:textStyle="bold"
tools:text="2"/>
<View android:id="@+id/space_four"
android:layout_width="20dp"
android:layout_height="1dp"
android:background="@color/black"/>
</LinearLayout>
<LinearLayout android:id="@+id/container_five"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:layout_marginLeft="5dp">
<TextView android:id="@+id/code_five"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:textStyle="bold"
tools:text="2"/>
<View android:id="@+id/space_five"
android:layout_width="20dp"
android:layout_height="1dp"
android:background="@color/black"/>
</LinearLayout>
</LinearLayout>

View File

@@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<android.inputmethodservice.KeyboardView
android:id="@+id/keyboard_view"
android:keyBackground="@color/grey_300"
android:background="@color/grey_300"
android:keyTextColor="@color/black"
android:shadowColor="@color/transparent"
android:keyTextSize="30sp"
android:elevation="3dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<ProgressBar android:id="@+id/progress"
android:layout_gravity="center"
android:layout_width="96dp"
android:layout_height="96dp"
android:indeterminate="true"/>
<org.thoughtcrime.securesms.components.SquareImageView
android:id="@+id/success"
android:layout_width="96dp"
android:layout_height="96dp"
android:layout_gravity="center"
android:background="@drawable/circle_tintable"
android:backgroundTint="@color/green_400"
android:gravity="center_vertical"
android:src="@drawable/ic_check_white_48dp"/>
<org.thoughtcrime.securesms.components.SquareImageView
android:id="@+id/failure"
android:layout_width="96dp"
android:layout_height="96dp"
android:layout_gravity="center"
android:background="@drawable/circle_tintable"
android:backgroundTint="@color/green_400"
android:gravity="center_vertical"
android:src="@drawable/ic_close_white_48dp"/>
</merge>

View File

@@ -227,4 +227,14 @@
</attr>
</declare-styleable>
<declare-styleable name="VerificationCodeView">
<attr name="vcv_spacing" format="dimension"/>
<attr name="vcv_inputWidth" format="dimension"/>
<attr name="vcv_inputHeight" format="dimension"/>
<attr name="vcv_inputColor" format="color"/>
<attr name="vcv_textSize" format="dimension"/>
<attr name="vcv_textColor" format="color"/>
</declare-styleable>
</resources>

View File

@@ -1488,6 +1488,8 @@
<string name="experience_upgrade_preference_fragment__optionally_see_and_share_when_messages_have_been_read">Optionally see and share when messages have been read</string>
<string name="experience_upgrade_preference_fragment__enable_read_receipts">Enable read receipts</string>
<string name="recipient_preference_activity__shared_media">Shared media</string>
<string name="registration_activity__verify_your_number">Verify Your Number</string>
<string name="registration_activity__please_enter_your_mobile_number_to_receive_a_verification_code_carrier_rates_may_apply">Please enter your mobile number to receive a verification code. Carrier rates may apply.</string>
<!-- EOF -->

27
res/xml/pin_keyboard.xml Normal file
View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
android:keyWidth="33.3%p"
android:keyHeight="10%p">
<Row>
<Key android:codes="1" android:keyLabel="1" android:keyEdgeFlags="left" />
<Key android:codes="2" android:keyLabel="2" />
<Key android:codes="3" android:keyLabel="3" />
</Row>
<Row>
<Key android:codes="4" android:keyLabel="4" android:keyEdgeFlags="left" />
<Key android:codes="5" android:keyLabel="5" />
<Key android:codes="6" android:keyLabel="6" />
</Row>
<Row>
<Key android:codes="7" android:keyLabel="7" android:keyEdgeFlags="left" />
<Key android:codes="8" android:keyLabel="8" />
<Key android:codes="9" android:keyLabel="9" />
</Row>
<Row>
<Key android:codes="0" android:keyLabel="0" android:horizontalGap="33.3%p"/>
<Key android:codes="-1" android:keyIcon="@drawable/ic_backspace_grey600_24dp" android:isRepeatable="true"/>
</Row>
</Keyboard>