Replace AppIntro with a new custom intro

This removes the dependency on AppIntro and replaces it with our own custom
intro implementation, backed by ViewPager2. We're doing this because we want a
more reliable and customizable onboarding for Aegis.

I've kept the design mostly the same as it was before, but tried to achieve a
bit of a cleaner look:

<img src="https://alexbakker.me/u/vsr3ahpjt6.png" width="200"> <img
src="https://alexbakker.me/u/efqid2ixly.png" width="200"> <img
src="https://alexbakker.me/u/oehmjm0rn9.png" width="200">
This commit is contained in:
Alexander Bakker 2020-07-01 19:44:58 +02:00
parent 9d44d6abb2
commit 0e78fd9652
29 changed files with 1231 additions and 521 deletions

View file

@ -1,10 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:background="?attr/background"
tools:context="com.beemdevelopment.aegis.ui.IntroActivity">
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@+id/btnPrevious" />
<ImageButton
android:id="@+id/btnPrevious"
android:layout_width="65dp"
android:layout_height="65dp"
android:layout_margin="10dp"
android:src="@drawable/circular_button_prev"
android:tint="?attr/iconColorPrimary"
android:background="?selectableItemBackgroundBorderless"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<com.beemdevelopment.aegis.ui.intro.SlideIndicator
android:id="@+id/slideIndicator"
android:layout_width="0dp"
android:layout_height="65dp"
android:layout_marginBottom="10dp"
app:layout_constraintStart_toEndOf="@+id/btnPrevious"
app:layout_constraintEnd_toStartOf="@+id/btnNext"
app:layout_constraintBottom_toBottomOf="parent" />
<ImageButton
android:id="@+id/btnNext"
android:layout_width="65dp"
android:layout_height="65dp"
android:layout_margin="10dp"
android:src="@drawable/circular_button_next"
android:tint="?attr/iconColorPrimary"
android:background="?selectableItemBackgroundBorderless"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<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"
android:padding="32dp">
<TextView
android:id="@+id/titleText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/setup_completed"
android:textAlignment="center"
android:textSize="24sp"
android:layout_marginTop="30dp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:src="@drawable/app_icon"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/titleText"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/setup_completed_description"
android:textAlignment="center"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -1,91 +1,92 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main"
android:orientation="vertical"
<androidx.core.widget.NestedScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="32dp">
<TextView
android:id="@+id/textView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/choose_authentication_method"
android:textAlignment="center"
android:textColor="@color/primary_text_inverted"
android:textSize="24sp"
android:layout_marginTop="30dp"
android:textStyle="bold" />
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/main"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="24dp"
android:orientation="vertical">
android:layout_height="wrap_content"
android:padding="32dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/authentication_method_explanation"/>
android:text="@string/choose_authentication_method"
android:textAlignment="center"
android:textSize="24sp"
android:layout_marginTop="30dp"
android:textStyle="bold" />
<RadioGroup
android:id="@+id/rg_authenticationMethod"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp">
<RadioButton
android:id="@+id/rb_none"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/authentication_method_none"
android:textSize="16sp" />
android:layout_height="match_parent"
android:layout_marginTop="24dp"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:layout_marginTop="-5dp"
android:text="@string/authentication_method_none_description"
android:textColor="@color/secondary_text_inverted" />
android:text="@string/authentication_method_explanation"/>
<RadioButton
android:id="@+id/rb_password"
<RadioGroup
android:id="@+id/rg_authenticationMethod"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="true"
android:text="@string/authentication_method_password"
android:textSize="16sp" />
android:layout_marginTop="24dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:layout_marginTop="-5dp"
android:text="@string/authentication_method_password_description"
android:textColor="@color/secondary_text_inverted" />
<RadioButton
android:id="@+id/rb_none"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/authentication_method_none"
android:textSize="16sp" />
<RadioButton
android:id="@+id/rb_biometrics"
android:enabled="false"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/authentication_method_biometrics"
android:textSize="16sp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:layout_marginTop="-5dp"
android:text="@string/authentication_method_none_description" />
<TextView
android:id="@+id/text_rb_biometrics"
android:enabled="false"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:layout_marginTop="-5dp"
<RadioButton
android:id="@+id/rb_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="true"
android:text="@string/authentication_method_password"
android:textSize="16sp" />
android:text="@string/authentication_method_biometrics_description"
android:textColor="@color/disabled_textview_colors" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:layout_marginTop="-5dp"
android:text="@string/authentication_method_password_description" />
</RadioGroup>
<RadioButton
android:id="@+id/rb_biometrics"
android:enabled="false"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/authentication_method_biometrics"
android:textSize="16sp" />
<TextView
android:id="@+id/text_rb_biometrics"
android:enabled="false"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:layout_marginTop="-5dp"
android:text="@string/authentication_method_biometrics_description" />
</RadioGroup>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>

View file

@ -1,82 +1,91 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main"
android:orientation="vertical"
<androidx.core.widget.NestedScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="32dp">
<TextView
android:text="@string/authentication_method_set_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="24sp"
android:textColor="@color/primary_text_inverted"
android:id="@+id/textView2" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/authentication_method_password_explanation"
android:textColor="#FFFF00"
android:textStyle="bold"
android:layout_marginTop="24dp" />
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/main"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp">
android:padding="32dp">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/text_password_wrapper"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/text_password"
android:hint="@string/set_password"
android:inputType="textPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/text_password_confirm_wrapper"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp">
<EditText
android:hint="@string/set_password_confirm"
android:id="@+id/text_password_confirm"
android:inputType="textPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</com.google.android.material.textfield.TextInputLayout>
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:max="4"
android:paddingStart="4dp"
android:paddingEnd="3.5dp" />
<TextView
android:id="@+id/text_password_strength"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end" />
<CheckBox
android:id="@+id/check_toggle_visibility"
android:id="@+id/textView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="@string/show_password" />
android:text="@string/choose_authentication_method"
android:textAlignment="center"
android:textSize="24sp"
android:layout_marginTop="30dp"
android:textStyle="bold" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/authentication_method_password_explanation"
android:textColor="@color/warning_color"
android:textStyle="bold"
android:layout_marginTop="24dp" />
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/text_password_wrapper"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/text_password"
android:hint="@string/set_password"
android:inputType="textPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/text_password_confirm_wrapper"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp">
<EditText
android:hint="@string/set_password_confirm"
android:id="@+id/text_password_confirm"
android:inputType="textPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</com.google.android.material.textfield.TextInputLayout>
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:max="4"
android:paddingStart="4dp"
android:paddingEnd="3.5dp" />
<TextView
android:id="@+id/text_password_strength"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end" />
<CheckBox
android:id="@+id/check_toggle_visibility"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="@string/show_password" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>

View file

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<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"
android:padding="32dp">
<TextView
android:id="@+id/titleText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/welcome"
android:textAlignment="center"
android:textSize="24sp"
android:layout_marginTop="30dp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:src="@drawable/app_icon"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/titleText"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/app_description"
android:textAlignment="center"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>