Migrate to Android fingerprints and auth for Signal screen lock

This commit is contained in:
Moxie Marlinspike
2018-03-04 11:35:37 -08:00
parent 3970a30e14
commit d28dc670ea
17 changed files with 416 additions and 60 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<solid android:color="@color/gray70"/>
<stroke android:width="1dp" android:color="@color/gray70"/>
<corners android:radius="10dp"/>
<padding android:bottom="5dp" android:left="5dp" android:right="5dp" android:top="5dp"/>
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<solid android:color="@color/white"/>
<stroke android:width="1dp" android:color="@color/white"/>
<corners android:radius="10dp"/>
<padding android:bottom="5dp" android:left="5dp" android:right="5dp" android:top="5dp"/>
</shape>

View File

@@ -1,28 +1,76 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scroll_parent"
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/prompt_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<View android:id="@+id/shim"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_centerVertical="true"
android:visibility="invisible"/>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
android:background="?login_top_background"
android:layout_above="@id/shim">
<RelativeLayout android:id="@+id/prompt_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</FrameLayout>
<ImageView android:id="@+id/watermark"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginBottom="50dp"
android:src="?lockscreen_watermark"
android:contentDescription="@string/PassphrasePromptActivity_watermark_content_description"
android:layout_marginTop="30dp"/>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:layout_marginTop="20dp">
<RelativeLayout
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/icon_transparent"
android:layout_gravity="center"/>
</android.support.v7.widget.Toolbar>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/watermark">
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:orientation="vertical"
android:background="?login_floating_background"
android:layout_centerInParent="true"
android:padding="20dp"
android:elevation="10dp">
<TextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="40dp"
android:text="@string/prompt_passphrase_activity__unlock_signal"
android:gravity="center_horizontal"
android:textSize="25sp"/>
<ImageView android:id="@+id/fingerprint_auth_container"
android:src="@drawable/ic_fingerprint_white_48dp"
android:background="@drawable/circle_tintable"
android:backgroundTint="@color/signal_primary"
android:padding="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="60dp"
tools:visibility="visible"/>
<RelativeLayout android:id="@+id/password_auth_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="60dp"
tools:visibility="gone">
<EditText android:id="@+id/passphrase_edit"
android:layout_width="match_parent"
@@ -83,6 +131,5 @@
android:paddingBottom="5dp"/>
</RelativeLayout>
</RelativeLayout>
</ScrollView>
</LinearLayout>
</RelativeLayout>

View File

@@ -134,6 +134,9 @@
<attr name="contact_list_divider" format="reference"/>
<attr name="login_top_background" format="color"/>
<attr name="login_floating_background" format="reference"/>
<declare-styleable name="ColorPreference">
<attr name="itemLayout" format="reference" />
<attr name="choices" format="reference" />

View File

@@ -39,7 +39,7 @@
<string name="ApplicationPreferencesActivity_off">off</string>
<string name="ApplicationPreferencesActivity_Off">Off</string>
<string name="ApplicationPreferencesActivity_sms_mms_summary">SMS %1$s, MMS %2$s</string>
<string name="ApplicationPreferencesActivity_privacy_summary">Passphrase %1$s, Screen security %2$s</string>
<string name="ApplicationPreferencesActivity_privacy_summary">Screen lock %1$s, Screen security %2$s</string>
<string name="ApplicationPreferencesActivity_appearance_summary">Theme %1$s, Language %2$s</string>
<!-- AppProtectionPreferenceFragment -->
@@ -1360,6 +1360,11 @@
<string name="RegistrationActivity_wrong_number">Wrong number?</string>
<string name="BackupUtil_never">Never</string>
<string name="BackupUtil_unknown">Unknown</string>
<string name="prompt_passphrase_activity__unlock_signal">Unlock Signal</string>
<string name="preferences_app_protection__screen_lock">Screen lock</string>
<string name="preferences_app_protection__lock_signal_access_with_android_screen_lock_or_fingerprint">Lock Signal access with Android screen lock or fingerprint</string>
<string name="preferences_app_protection__screen_lock_inactivity_timeout">Screen lock inactivity timeout</string>
<string name="AppProtectionPreferenceFragment_none">None</string>
<!-- EOF -->

View File

@@ -58,23 +58,28 @@
</style>
<style name="TextSecure.LightIntroTheme" parent="@style/Theme.AppCompat.Light">
<!--<item name="colorPrimary">@android:color/transparent</item>-->
<item name="actionBarStyle">@style/TextSecure.IntroActionBar</item>
<item name="android:windowContentOverlay">@null</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="windowActionModeOverlay">true</item>
<item name="colorAccent">@color/signal_primary</item>
<item name="android:textColorHint">#cc000000</item>
<item name="centered_app_title_color">#55000000</item>
<item name="ic_arrow_forward">@drawable/ic_arrow_forward_light</item>
<item name="lockscreen_watermark">@drawable/lockscreen_watermark_light</item>
<item name="android:windowBackground">@color/gray5</item>
<item name="android:windowBackground">@color/white</item>
<item name="ic_visibility">@drawable/ic_visibility_grey600_24dp</item>
<item name="ic_visibility_off">@drawable/ic_visibility_off_grey600_24dp</item>
<item name="login_top_background">@color/signal_primary</item>
<item name="login_floating_background">@drawable/rounded_rectangle_white</item>
</style>
<style name="TextSecure.DarkIntroTheme" parent="@style/Theme.AppCompat">
<item name="actionBarStyle">@style/TextSecure.IntroActionBar</item>
<item name="android:windowContentOverlay">@null</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="windowActionModeOverlay">true</item>
<item name="colorAccent">@color/signal_primary_dark</item>
<item name="android:textColorHint">@color/white</item>
@@ -84,6 +89,9 @@
<item name="android:windowBackground">@color/black</item>
<item name="ic_visibility">@drawable/ic_visibility_white_24dp</item>
<item name="ic_visibility_off">@drawable/ic_visibility_off_white_24dp</item>
<item name="login_top_background">@color/black</item>
<item name="login_floating_background">@drawable/rounded_rectangle_dark</item>
</style>
<style name="PopupAnimation" parent="@android:style/Animation">
@@ -352,4 +360,5 @@
<style name="RationaleDialog" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="android:windowBackground">@drawable/permission_rationale_dialog_corners</item>
</style>
</resources>

View File

@@ -2,6 +2,17 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="@string/preferences_app_protection__app_access">
<org.thoughtcrime.securesms.components.SwitchPreferenceCompat
android:key="pref_android_screen_lock"
android:defaultValue="false"
android:title="@string/preferences_app_protection__screen_lock"
android:summary="@string/preferences_app_protection__lock_signal_access_with_android_screen_lock_or_fingerprint"/>
<Preference android:title="@string/preferences_app_protection__screen_lock_inactivity_timeout"
android:key="pref_android_screen_lock_timeout"
android:dependency="pref_android_screen_lock"/>
<org.thoughtcrime.securesms.components.SwitchPreferenceCompat
android:key="pref_enable_passphrase_temporary"
android:defaultValue="true"