summaryrefslogtreecommitdiff
path: root/app/src/main/res
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/res')
-rw-r--r--app/src/main/res/drawable/ic_autofill_new_password.xml9
-rw-r--r--app/src/main/res/drawable/ic_person_black_24dp.xml9
-rw-r--r--app/src/main/res/drawable/ic_search_black_24dp.xml9
-rw-r--r--app/src/main/res/drawable/ic_warning_red_24dp.xml9
-rw-r--r--app/src/main/res/layout/activity_oreo_autofill_filter.xml90
-rw-r--r--app/src/main/res/layout/activity_oreo_autofill_publisher_changed.xml167
-rw-r--r--app/src/main/res/layout/encrypt_layout.xml13
-rw-r--r--app/src/main/res/layout/oreo_autofill_dataset.xml45
-rw-r--r--app/src/main/res/layout/oreo_autofill_filter_row.xml64
-rw-r--r--app/src/main/res/layout/oreo_autofill_instructions.xml43
-rw-r--r--app/src/main/res/layout/password_row_layout.xml8
-rw-r--r--app/src/main/res/values/strings.xml29
-rw-r--r--app/src/main/res/values/styles.xml8
-rw-r--r--app/src/main/res/xml/oreo_autofill_service.xml14
-rw-r--r--app/src/main/res/xml/preference.xml48
15 files changed, 536 insertions, 29 deletions
diff --git a/app/src/main/res/drawable/ic_autofill_new_password.xml b/app/src/main/res/drawable/ic_autofill_new_password.xml
new file mode 100644
index 00000000..958de190
--- /dev/null
+++ b/app/src/main/res/drawable/ic_autofill_new_password.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M14,2H6A2,2 0,0 0,4 4V20A2,2 0,0 0,6 22H18A2,2 0,0 0,20 20V8L14,2M18,20H6V4H13V9H18M12.83,15A3,3 0,1 0,12.83 17H14V19H16V17H17V15M10,17A1,1 0,1 1,11 16A1,1 0,0 1,10 17Z"/>
+</vector>
diff --git a/app/src/main/res/drawable/ic_person_black_24dp.xml b/app/src/main/res/drawable/ic_person_black_24dp.xml
new file mode 100644
index 00000000..b2cb337b
--- /dev/null
+++ b/app/src/main/res/drawable/ic_person_black_24dp.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M12,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zM12,14c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-2.66 -5.33,-4 -8,-4z"/>
+</vector>
diff --git a/app/src/main/res/drawable/ic_search_black_24dp.xml b/app/src/main/res/drawable/ic_search_black_24dp.xml
new file mode 100644
index 00000000..affc7ba2
--- /dev/null
+++ b/app/src/main/res/drawable/ic_search_black_24dp.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z"/>
+</vector>
diff --git a/app/src/main/res/drawable/ic_warning_red_24dp.xml b/app/src/main/res/drawable/ic_warning_red_24dp.xml
new file mode 100644
index 00000000..cea44306
--- /dev/null
+++ b/app/src/main/res/drawable/ic_warning_red_24dp.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:fillColor="#FFFF0000"
+ android:pathData="M1,21h22L12,2 1,21zM13,18h-2v-2h2v2zM13,14h-2v-4h2v4z"/>
+</vector>
diff --git a/app/src/main/res/layout/activity_oreo_autofill_filter.xml b/app/src/main/res/layout/activity_oreo_autofill_filter.xml
new file mode 100644
index 00000000..17eb0e29
--- /dev/null
+++ b/app/src/main/res/layout/activity_oreo_autofill_filter.xml
@@ -0,0 +1,90 @@
+<?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"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:elevation="2dp"
+ tools:context="com.zeapo.pwdstore.autofill.oreo.ui.AutofillFilterView">
+
+ <ImageView
+ android:id="@+id/cover"
+ android:layout_width="0dp"
+ android:layout_height="50dp"
+ android:background="@color/primary_color"
+ android:contentDescription="@string/app_name"
+ android:src="@drawable/ic_launcher_foreground"
+ app:layout_constraintBottom_toTopOf="@id/searchLayout"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_bias="0.0" />
+
+ <com.google.android.material.textfield.TextInputLayout
+ android:id="@+id/searchLayout"
+ style="@style/TextInputLayoutBase"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/activity_horizontal_margin"
+ android:layout_marginTop="@dimen/activity_vertical_margin"
+ android:layout_marginEnd="@dimen/activity_horizontal_margin"
+ app:endIconMode="clear_text"
+ app:layout_constraintBottom_toTopOf="@id/rvPassword"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/cover">
+
+ <com.google.android.material.textfield.TextInputEditText
+ android:id="@+id/search"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:hint="@string/action_search"
+ android:imeOptions="actionDone"
+ android:inputType="text"
+ tools:text="example.com" />
+ </com.google.android.material.textfield.TextInputLayout>
+
+ <androidx.recyclerview.widget.RecyclerView
+ android:id="@+id/rvPassword"
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_marginTop="@dimen/activity_vertical_margin"
+ android:scrollbars="vertical"
+ app:layout_constraintBottom_toTopOf="@id/shouldMatch"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/searchLayout"
+ tools:itemCount="5"
+ tools:listitem="@layout/password_row_layout" />
+
+ <Switch
+ android:id="@+id/shouldMatch"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/activity_horizontal_margin"
+ android:layout_marginTop="@dimen/activity_vertical_margin"
+ android:layout_marginEnd="@dimen/activity_horizontal_margin"
+ android:checked="true"
+ app:layout_constraintBottom_toTopOf="@id/shouldClear"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/rvPassword"
+ app:layout_constraintVertical_bias="1.0"
+ tools:text="Match with example.org" />
+
+ <Switch
+ android:id="@+id/shouldClear"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/activity_horizontal_margin"
+ android:layout_marginTop="@dimen/activity_vertical_margin"
+ android:layout_marginEnd="@dimen/activity_horizontal_margin"
+ android:layout_marginBottom="@dimen/activity_vertical_margin"
+ android:text="@string/oreo_autofill_matches_clear_existing"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/shouldMatch"
+ app:layout_constraintVertical_bias="1.0" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/app/src/main/res/layout/activity_oreo_autofill_publisher_changed.xml b/app/src/main/res/layout/activity_oreo_autofill_publisher_changed.xml
new file mode 100644
index 00000000..21184e84
--- /dev/null
+++ b/app/src/main/res/layout/activity_oreo_autofill_publisher_changed.xml
@@ -0,0 +1,167 @@
+<?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"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="280dp"
+ android:layout_height="wrap_content"
+ android:animateLayoutChanges="true"
+ android:elevation="2dp"
+ android:scrollbars="vertical"
+ tools:context="com.zeapo.pwdstore.autofill.oreo.ui.AutofillPublisherChangedActivity">
+
+ <ImageView
+ android:id="@+id/cover"
+ android:layout_width="0dp"
+ android:layout_height="50dp"
+ android:background="@color/primary_color"
+ android:contentDescription="@string/app_name"
+ android:src="@drawable/ic_launcher_foreground"
+ app:layout_constraintBottom_toTopOf="@id/warningSign"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_bias="0.0"
+ app:layout_constraintVertical_chainStyle="packed" />
+
+ <ImageView
+ android:id="@+id/warningSign"
+ android:layout_width="0dp"
+ android:layout_height="50dp"
+ android:background="@color/window_background"
+ android:contentDescription="@string/oreo_autofill_warning_publisher_warning_sign_description"
+ android:src="@drawable/ic_warning_red_24dp"
+ app:layout_constraintBottom_toTopOf="@id/warningHeader"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/cover" />
+
+ <TextView
+ android:id="@+id/warningHeader"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/activity_horizontal_margin"
+ android:layout_marginEnd="@dimen/activity_horizontal_margin"
+ android:layout_marginBottom="@dimen/activity_vertical_margin"
+ android:background="@color/window_background"
+ android:text="@string/oreo_autofill_warning_publisher_header"
+ android:textSize="12sp"
+ app:layout_constraintBottom_toTopOf="@id/warningAppName"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/warningSign" />
+
+ <TextView
+ android:id="@+id/warningAppName"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/activity_horizontal_margin"
+ android:layout_marginEnd="@dimen/activity_horizontal_margin"
+ android:background="@color/window_background"
+ android:gravity="center_horizontal"
+ android:textSize="12sp"
+ app:layout_constraintBottom_toTopOf="@id/warningAppInstallDate"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/warningHeader"
+ tools:text="Example Banking" />
+
+ <TextView
+ android:id="@+id/warningAppInstallDate"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/activity_horizontal_margin"
+ android:layout_marginEnd="@dimen/activity_horizontal_margin"
+ android:background="@color/window_background"
+ android:gravity="center_horizontal"
+ android:textSize="12sp"
+ app:layout_constraintBottom_toTopOf="@id/warningAppFooter"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/warningAppName"
+ tools:text="Installed: 5 days ago" />
+
+ <TextView
+ android:id="@+id/warningAppFooter"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/activity_horizontal_margin"
+ android:layout_marginTop="@dimen/activity_vertical_margin"
+ android:layout_marginEnd="@dimen/activity_horizontal_margin"
+ android:layout_marginBottom="@dimen/activity_vertical_margin"
+ android:background="@color/window_background"
+ android:text="@string/oreo_autofill_warning_publisher_footer"
+ android:textSize="12sp"
+ app:layout_constraintBottom_toTopOf="@id/okButton"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/warningAppInstallDate" />
+
+ <Button
+ android:id="@+id/okButton"
+ style="@style/Widget.MaterialComponents.Button.OutlinedButton"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/activity_horizontal_margin"
+ android:layout_marginEnd="@dimen/activity_horizontal_margin"
+ android:text="@string/oreo_autofill_warning_publisher_changed_disable_autofill_button"
+ android:textSize="12sp"
+ app:layout_constraintBottom_toTopOf="@id/advancedButton"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="1.0"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/warningAppFooter" />
+
+ <Button
+ android:id="@+id/advancedButton"
+ style="@style/Widget.MaterialComponents.Button.OutlinedButton"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/activity_horizontal_margin"
+ android:layout_marginEnd="@dimen/activity_horizontal_margin"
+ android:text="@string/oreo_autofill_warning_publisher_advanced_info_button"
+ android:textSize="12sp"
+ app:layout_constraintBottom_toTopOf="@id/warningAppAdvancedInfo"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="1.0"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/okButton" />
+
+ <TextView
+ android:id="@+id/warningAppAdvancedInfo"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/activity_horizontal_margin"
+ android:layout_marginEnd="@dimen/activity_horizontal_margin"
+ android:background="@color/window_background"
+ android:fontFamily="monospace"
+ android:gravity="center_horizontal"
+ android:textIsSelectable="true"
+ android:textSize="10sp"
+ android:visibility="invisible"
+ app:layout_constraintBottom_toTopOf="@id/resetButton"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/advancedButton"
+ tools:ignore="SmallSp"
+ tools:text="Package: com.example.banking\n\nHash:\n8P1sW0EPJcslw7UzRsiXL64w+O50Ed+RBICtay1g24M="
+ tools:visibility="visible" />
+
+ <Button
+ android:id="@+id/resetButton"
+ style="@style/Widget.MaterialComponents.Button.TextButton"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/activity_horizontal_margin"
+ android:layout_marginEnd="@dimen/activity_horizontal_margin"
+ android:text="@string/oreo_autofill_warning_publisher_reenable_button"
+ android:textSize="10sp"
+ android:visibility="invisible"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="1.0"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/warningAppAdvancedInfo"
+ tools:ignore="SmallSp"
+ tools:visibility="visible" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/app/src/main/res/layout/encrypt_layout.xml b/app/src/main/res/layout/encrypt_layout.xml
index a54c45b4..40ae757f 100644
--- a/app/src/main/res/layout/encrypt_layout.xml
+++ b/app/src/main/res/layout/encrypt_layout.xml
@@ -45,11 +45,13 @@
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:hint="@string/crypto_pass_label"
+ app:endIconMode="password_toggle"
app:hintEnabled="true"
app:layout_constraintTop_toBottomOf="@id/name_input_layout"
app:layout_constraintStart_toStartOf="parent">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/crypto_password_edit"
+ android:inputType="textVisiblePassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</com.google.android.material.textfield.TextInputLayout>
@@ -84,4 +86,15 @@
android:layout_height="wrap_content"/>
</com.google.android.material.textfield.TextInputLayout>
+
+ <Switch
+ android:id="@+id/encrypt_username"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_margin="8dp"
+ android:text="@string/crypto_encrypt_username_label"
+ android:visibility="gone"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/extra_input_layout"
+ tools:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/app/src/main/res/layout/oreo_autofill_dataset.xml b/app/src/main/res/layout/oreo_autofill_dataset.xml
new file mode 100644
index 00000000..65c8f3f3
--- /dev/null
+++ b/app/src/main/res/layout/oreo_autofill_dataset.xml
@@ -0,0 +1,45 @@
+<?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="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="horizontal"
+ android:paddingLeft="10dp"
+ android:paddingTop="5dp"
+ android:paddingRight="10dp"
+ android:paddingBottom="5dp">
+
+ <ImageView
+ android:id="@+id/icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:layout_marginEnd="10dp"
+ android:adjustViewBounds="true"
+ android:maxWidth="20dp"
+ android:maxHeight="20dp"
+ tools:src="@mipmap/ic_launcher" />
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@+id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:ellipsize="middle"
+ android:singleLine="true"
+ android:textStyle="bold"
+ tools:text="example.org" />
+
+ <TextView
+ android:id="@+id/summary"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:ellipsize="middle"
+ android:singleLine="true"
+ tools:text="john@doe.org" />
+ </LinearLayout>
+</LinearLayout>
diff --git a/app/src/main/res/layout/oreo_autofill_filter_row.xml b/app/src/main/res/layout/oreo_autofill_filter_row.xml
new file mode 100644
index 00000000..c60c2693
--- /dev/null
+++ b/app/src/main/res/layout/oreo_autofill_filter_row.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="utf-8"?>
+<com.zeapo.pwdstore.widget.MultiselectableConstraintLayout 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="wrap_content"
+ android:background="@drawable/password_row_background"
+ android:paddingTop="8dp"
+ android:paddingBottom="8dp">
+
+ <ImageView
+ android:id="@+id/credentialIcon"
+ android:layout_width="wrap_content"
+ android:layout_height="0dp"
+ android:layout_marginStart="8dp"
+ android:alpha="0.5"
+ android:src="@drawable/ic_person_black_24dp"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toStartOf="@id/title"
+ app:layout_constraintHorizontal_bias="0.0"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <TextView
+ android:id="@+id/title"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="8dp"
+ android:ellipsize="middle"
+ android:singleLine="true"
+ android:textSize="12sp"
+ app:layout_constraintBottom_toTopOf="@id/subtitle"
+ app:layout_constraintEnd_toStartOf="@id/continueIcon"
+ app:layout_constraintStart_toEndOf="@id/credentialIcon"
+ app:layout_constraintTop_toTopOf="parent"
+ tools:text="/example.com/" />
+
+ <TextView
+ android:id="@+id/subtitle"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="8dp"
+ android:ellipsize="middle"
+ android:singleLine="true"
+ android:textSize="14sp"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toStartOf="@+id/continueIcon"
+ app:layout_constraintStart_toEndOf="@id/credentialIcon"
+ app:layout_constraintTop_toBottomOf="@id/title"
+ tools:text="johndoe@example.com" />
+
+ <ImageView
+ android:id="@+id/continueIcon"
+ android:layout_width="wrap_content"
+ android:layout_height="0dp"
+ android:layout_marginEnd="8dp"
+ android:src="@drawable/ic_keyboard_arrow_right_24dp"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="1.0"
+ app:layout_constraintStart_toEndOf="@id/title"
+ app:layout_constraintTop_toTopOf="parent" />
+
+</com.zeapo.pwdstore.widget.MultiselectableConstraintLayout>
diff --git a/app/src/main/res/layout/oreo_autofill_instructions.xml b/app/src/main/res/layout/oreo_autofill_instructions.xml
new file mode 100644
index 00000000..376a4363
--- /dev/null
+++ b/app/src/main/res/layout/oreo_autofill_instructions.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ xmlns:tools="http://schemas.android.com/tools">
+
+ <LinearLayout
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:paddingBottom="20dp"
+ android:paddingLeft="24dp"
+ android:paddingRight="24dp"
+ android:paddingTop="20dp">
+
+ <androidx.appcompat.widget.AppCompatTextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Password Store can offer to fill login forms and even save credentials you enter in apps or on websites."
+ android:textSize="16sp" />
+
+ <androidx.appcompat.widget.AppCompatTextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="To enable this feature, tap OK to go to Autofill settings. There, select Password Store from the list."
+ android:textSize="16sp" />
+
+ <androidx.appcompat.widget.AppCompatTextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Autofill support with installed browsers:"
+ android:textSize="16sp" />
+
+ <androidx.appcompat.widget.AppCompatTextView
+ android:id="@+id/supportedBrowsers"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ tools:text="Firefox: Fill and save credentials"
+ android:textSize="16sp" />
+
+
+ </LinearLayout>
+</ScrollView>
diff --git a/app/src/main/res/layout/password_row_layout.xml b/app/src/main/res/layout/password_row_layout.xml
index 0b7112b6..ae76d7a9 100644
--- a/app/src/main/res/layout/password_row_layout.xml
+++ b/app/src/main/res/layout/password_row_layout.xml
@@ -8,7 +8,7 @@
android:paddingTop="12dp"
android:paddingBottom="12dp">
- <androidx.appcompat.widget.AppCompatImageView
+ <ImageView
android:id="@+id/type_image"
android:layout_width="60dp"
android:layout_height="32dp"
@@ -20,7 +20,7 @@
app:layout_constraintBottom_toBottomOf="parent"
tools:src="@drawable/ic_multiple_files_24dp" />
- <androidx.appcompat.widget.AppCompatTextView
+ <TextView
android:id="@+id/label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@@ -31,7 +31,7 @@
app:layout_constraintTop_toTopOf="parent"
tools:text="FILE_NAME" />
- <androidx.appcompat.widget.AppCompatTextView
+ <TextView
android:id="@+id/child_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@@ -42,7 +42,7 @@
android:layout_marginEnd="12dp"
tools:text="12" />
- <androidx.appcompat.widget.AppCompatImageView
+ <ImageView
android:id="@+id/folder_indicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 288b93f2..5df51af5 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -100,6 +100,7 @@
<string name="crypto_name_hint">Name</string>
<string name="crypto_pass_label">Password</string>
<string name="crypto_extra_label">Extra content</string>
+ <string name="crypto_encrypt_username_label">Encrypt username</string>
<string name="crypto_select">Select</string>
<string name="crypto_cancel">Cancel</string>
<string name="crypto_save">Save</string>
@@ -151,7 +152,7 @@
<string name="pref_file_first_sort_order">Files first</string>
<string name="pref_type_independent_sort_order">Type independent</string>
<string name="pref_autofill_title">Autofill</string>
- <string name="pref_autofill_enable_title">Enable autofill</string>
+ <string name="pref_autofill_enable_title">Enable Autofill</string>
<string name="pref_autofill_enable_msg">Tap OK to go to Accessibility settings. There, tap Password Store under Services then tap the switch in the top right to turn it on or off.</string>
<string name="pref_autofill_enable_msg2">Once the service is on, a dialog will appear when you click on a password field in an app if a matching password for the app exists.</string>
<string name="pref_autofill_enable_msg3">Password Store attempts to match apps with passwords automatically. You can change this default setting and also matching settings per-app.</string>
@@ -242,6 +243,32 @@
<string name="app_icon_hint">App icon</string>
<string name="folder_icon_hint">Folder icon</string>
+ <!-- Oreo Autofill -->
+ <string name="oreo_autofill_match_with">Match with %1$s</string>
+ <string name="oreo_autofill_matches_clear_existing">Clear existing matches</string>
+ <string name="oreo_autofill_search_in_store">Search in store…</string>
+ <string name="oreo_autofill_save_internal_error">Save failed due to an internal error</string>
+ <string name="oreo_autofill_save_app_not_supported">This app is currently not supported</string>
+ <string name="oreo_autofill_save_passwords_dont_match">Passwords don\'t match</string>
+ <string name="oreo_autofill_save_invalid_password">Couldn\'t extract password, please use a different browser for now</string>
+ <string name="oreo_autofill_generate_password">Generate password…</string>
+ <string name="oreo_autofill_publisher_changed">The app\'s publisher has changed; this may be a phishing attempt.</string>
+ <string name="oreo_autofill_max_matches_reached">Maximum number of matches (%1$d) reached; clear matches before adding new ones.</string>
+ <string name="oreo_autofill_warning_publisher_header">This app\'s publisher has changed since you first associated a Password Store entry with it:</string>
+ <string name="oreo_autofill_warning_publisher_footer"><b>The currently installed app may be trying to steal your credentials by pretending to be a trusted app.</b>\n\nTry to uninstall and reinstall the app from a trusted source, such as the Play Store, Amazon Appstore, F-Droid, or your phone manufacturer\'s store.</string>
+ <string name="oreo_autofill_warning_publisher_install_time">Installed: %1$s</string>
+ <string name="oreo_autofill_warning_publisher_advanced_info_template" translatable="false">Package:\n%1$s\n\nHash:\n%2$s</string>
+ <string name="oreo_autofill_warning_publisher_advanced_info_button">Advanced information</string>
+ <string name="oreo_autofill_warning_publisher_changed_disable_autofill_button">Keep Autofill disabled</string>
+ <string name="oreo_autofill_warning_publisher_reenable_button">Re-enable Autofill</string>
+ <string name="oreo_autofill_warning_publisher_warning_sign_description">Warning</string>
+ <string name="oreo_autofill_warning_publisher_dataset_summary">Tap for details…</string>
+ <string name="oreo_autofill_warning_publisher_dataset_title">Possible phishing attempt</string>
+ <string name="oreo_autofill_fill_and_save_support">Fill and save credentials</string>
+ <string name="oreo_autofill_fill_support">Fill credentials</string>
+ <string name="oreo_autofill_flaky_fill_support">Fill credentials (may require restarting the browser from time to time)</string>
+ <string name="oreo_autofill_no_support">No support</string>
+
<!-- Autofill -->
<string name="autofill_description">Autofills password fields in apps. Only works for Android versions 4.3 and up. Does not rely on the clipboard for Android versions 5.0 and up.</string>
<string name="autofill_apps_default">Use default setting</string>
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 4f23a285..bed9a13e 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -36,4 +36,12 @@
<item name="boxStrokeColor">?attr/colorSecondary</item>
<item name="hintTextColor">?attr/colorOnPrimary</item>
</style>
+
+ <style name="DialogLikeTheme" parent="AppTheme">
+ <item name="android:windowActionBar">false</item>
+ <item name="android:windowIsFloating">true</item>
+ <item name="android:backgroundDimEnabled">true</item>
+ <!-- Needs to be set without android: prefix as per https://stackoverflow.com/a/33417456 -->
+ <item name="windowNoTitle">true</item>
+ </style>
</resources>
diff --git a/app/src/main/res/xml/oreo_autofill_service.xml b/app/src/main/res/xml/oreo_autofill_service.xml
new file mode 100644
index 00000000..cfc8690a
--- /dev/null
+++ b/app/src/main/res/xml/oreo_autofill_service.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<autofill-service xmlns:android="http://schemas.android.com/apk/res/android">
+ <compatibility-package android:name="com.android.chrome" />
+ <compatibility-package android:name="com.brave.browser" />
+ <compatibility-package android:name="com.chrome.beta" />
+ <compatibility-package android:name="com.chrome.canary" />
+ <compatibility-package android:name="com.chrome.dev" />
+ <compatibility-package android:name="com.microsoft.emmx" />
+ <compatibility-package android:name="com.opera.mini.native" />
+ <compatibility-package android:name="com.opera.mini.native.beta" />
+ <compatibility-package android:name="org.mozilla.fennec_fdroid" />
+ <compatibility-package android:name="org.mozilla.firefox" />
+ <compatibility-package android:name="org.mozilla.firefox_beta" />
+</autofill-service>
diff --git a/app/src/main/res/xml/preference.xml b/app/src/main/res/xml/preference.xml
index 1fb8d325..08f23787 100644
--- a/app/src/main/res/xml/preference.xml
+++ b/app/src/main/res/xml/preference.xml
@@ -1,6 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
+ <androidx.preference.PreferenceCategory app:title="@string/pref_autofill_title">
+ <androidx.preference.SwitchPreferenceCompat
+ app:defaultValue="true"
+ app:key="autofill_enable"
+ app:title="@string/pref_autofill_enable_title"/>
+ <androidx.preference.Preference
+ app:key="autofill_apps"
+ app:title="@string/pref_autofill_apps_title"/>
+ <androidx.preference.CheckBoxPreference
+ app:defaultValue="true"
+ app:key="autofill_default"
+ app:summary="@string/pref_autofill_default_hint"
+ app:title="@string/pref_autofill_default_title"/>
+ <androidx.preference.CheckBoxPreference
+ app:defaultValue="false"
+ app:key="autofill_always"
+ app:title="@string/pref_autofill_always_title"/>
+ <androidx.preference.CheckBoxPreference
+ app:defaultValue="false"
+ app:key="autofill_full_path"
+ app:summary="@string/pref_autofill_full_path_hint"
+ app:title="@string/pref_autofill_full_path_title"/>
+ </androidx.preference.PreferenceCategory>
+
<androidx.preference.PreferenceCategory app:title="@string/pref_git_title">
<androidx.preference.Preference
app:key="git_server_info"
@@ -134,30 +158,6 @@
app:summary="@string/biometric_auth_summary" />
</androidx.preference.PreferenceCategory>
- <androidx.preference.PreferenceCategory app:title="@string/pref_autofill_title">
- <androidx.preference.SwitchPreferenceCompat
- app:defaultValue="true"
- app:key="autofill_enable"
- app:title="@string/pref_autofill_enable_title"/>
- <androidx.preference.Preference
- app:key="autofill_apps"
- app:title="@string/pref_autofill_apps_title"/>
- <androidx.preference.CheckBoxPreference
- app:defaultValue="true"
- app:key="autofill_default"
- app:summary="@string/pref_autofill_default_hint"
- app:title="@string/pref_autofill_default_title"/>
- <androidx.preference.CheckBoxPreference
- app:defaultValue="false"
- app:key="autofill_always"
- app:title="@string/pref_autofill_always_title"/>
- <androidx.preference.CheckBoxPreference
- app:defaultValue="false"
- app:key="autofill_full_path"
- app:summary="@string/pref_autofill_full_path_hint"
- app:title="@string/pref_autofill_full_path_title"/>
- </androidx.preference.PreferenceCategory>
-
<androidx.preference.PreferenceCategory app:title="@string/pref_misc_title">
<androidx.preference.Preference
app:key="export_passwords"