diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 2a30bcd54..c3f35ae7a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -133,10 +133,6 @@
-
-
.
- *
- */
-package com.keepassdroid.settings;
-
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Build;
-import android.os.Bundle;
-import android.provider.Settings;
-import android.support.annotation.RequiresApi;
-import android.support.v14.preference.SwitchPreference;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceFragmentCompat;
-import android.util.Log;
-import android.view.autofill.AutofillManager;
-
-import com.kunzisoft.keepass.R;
-
-@RequiresApi(api = Build.VERSION_CODES.O)
-public class AutofillPreferenceFragment extends PreferenceFragmentCompat implements Preference.OnPreferenceClickListener {
-
- private static final int REQUEST_CODE_SET_DEFAULT = 1;
- private AutofillManager mAutofillManager;
- private SwitchPreference enablePreference;
-
- @Override
- public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
- setPreferencesFromResource(R.xml.autofill_preferences, rootKey);
- mAutofillManager = getActivity().getSystemService(AutofillManager.class);
-
- // add listeners for non-default actions
- enablePreference = (SwitchPreference) findPreference(getString(R.string.settings_autofill_enable_key));
- }
-
- @Override
- public void onResume() {
- super.onResume();
-
- enablePreference.setOnPreferenceClickListener(null);
- if (mAutofillManager != null && mAutofillManager.hasEnabledAutofillServices())
- enablePreference.setChecked(mAutofillManager.hasEnabledAutofillServices());
- enablePreference.setOnPreferenceClickListener(this);
-
- }
-
- @Override
- public boolean onPreferenceClick(Preference preference) {
- if (preference.getKey().equals(getString(R.string.settings_autofill_enable_key))) {
- setService(((SwitchPreference) preference).isChecked());
- }
-
- return false;
- }
-
- private void setService(boolean enableService) {
- if (enableService) {
- startEnableService();
- } else {
- disableService();
- }
- }
-
- private void disableService() {
- if (mAutofillManager != null && mAutofillManager.hasEnabledAutofillServices()) {
- mAutofillManager.disableAutofillServices();
- } else {
- Log.d(getClass().getName(), "Sample service already disabled.");
- }
- }
-
- private void startEnableService() {
- if (mAutofillManager != null && !mAutofillManager.hasEnabledAutofillServices()) {
- Intent intent = new Intent(Settings.ACTION_REQUEST_SET_AUTOFILL_SERVICE);
- intent.setData(Uri.parse("package:com.example.android.autofill.service"));
- Log.d(getClass().getName(), "enableService(): intent="+ intent);
- startActivityForResult(intent, REQUEST_CODE_SET_DEFAULT);
- } else {
- Log.d(getClass().getName(), "Sample service already enabled.");
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/keepassdroid/settings/MainPreferenceFragment.java b/app/src/main/java/com/keepassdroid/settings/MainPreferenceFragment.java
index 192c1432a..a96c0cade 100644
--- a/app/src/main/java/com/keepassdroid/settings/MainPreferenceFragment.java
+++ b/app/src/main/java/com/keepassdroid/settings/MainPreferenceFragment.java
@@ -1,13 +1,14 @@
package com.keepassdroid.settings;
import android.content.Context;
+import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceFragmentCompat;
-import com.keepassdroid.database.Database;
import com.keepassdroid.app.App;
+import com.keepassdroid.database.Database;
import com.kunzisoft.keepass.R;
public class MainPreferenceFragment extends PreferenceFragmentCompat implements Preference.OnPreferenceClickListener {
@@ -33,6 +34,13 @@ public class MainPreferenceFragment extends PreferenceFragmentCompat implements
Preference preference = findPreference(getString(R.string.app_key));
preference.setOnPreferenceClickListener(this);
+ Preference preferenceAutofill = findPreference(getString(R.string.settings_form_filling_key));
+ if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
+ preferenceAutofill.setEnabled(false);
+ } else {
+ preferenceAutofill.setOnPreferenceClickListener(this);
+ }
+
preference = findPreference(getString(R.string.db_key));
preference.setOnPreferenceClickListener(this);
@@ -63,6 +71,10 @@ public class MainPreferenceFragment extends PreferenceFragmentCompat implements
mCallback.onNestedPreferenceSelected(NestedSettingsFragment.NESTED_SCREEN_APP_KEY);
}
+ if (preference.getKey().equals(getString(R.string.settings_form_filling_key))) {
+ mCallback.onNestedPreferenceSelected(NestedSettingsFragment.NESTED_SCREEN_FORM_FILLING_KEY);
+ }
+
if (preference.getKey().equals(getString(R.string.db_key))) {
mCallback.onNestedPreferenceSelected(NestedSettingsFragment.NESTED_SCREEN_DB_KEY);
}
diff --git a/app/src/main/java/com/keepassdroid/settings/NestedSettingsFragment.java b/app/src/main/java/com/keepassdroid/settings/NestedSettingsFragment.java
index b567a01e5..201e80f06 100644
--- a/app/src/main/java/com/keepassdroid/settings/NestedSettingsFragment.java
+++ b/app/src/main/java/com/keepassdroid/settings/NestedSettingsFragment.java
@@ -22,8 +22,10 @@ package com.keepassdroid.settings;
import android.content.Intent;
import android.content.DialogInterface;
import android.content.res.Resources;
+import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
+import android.provider.Settings;
import android.support.annotation.RequiresApi;
import android.support.v14.preference.SwitchPreference;
import android.support.v4.app.DialogFragment;
@@ -32,6 +34,7 @@ import android.support.v7.app.AlertDialog;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceFragmentCompat;
import android.util.Log;
+import android.view.autofill.AutofillManager;
import android.widget.Toast;
import com.keepassdroid.database.Database;
@@ -46,10 +49,13 @@ public class NestedSettingsFragment extends PreferenceFragmentCompat
implements Preference.OnPreferenceClickListener {
public static final int NESTED_SCREEN_APP_KEY = 1;
- public static final int NESTED_SCREEN_DB_KEY = 2;
+ public static final int NESTED_SCREEN_FORM_FILLING_KEY = 2;
+ public static final int NESTED_SCREEN_DB_KEY = 3;
private static final String TAG_KEY = "NESTED_KEY";
+ private static final int REQUEST_CODE_AUTOFILL = 5201;
+
public static NestedSettingsFragment newInstance(int key) {
NestedSettingsFragment fragment = new NestedSettingsFragment();
// supply arguments to bundle.
@@ -59,6 +65,23 @@ public class NestedSettingsFragment extends PreferenceFragmentCompat
return fragment;
}
+ @Override
+ public void onResume() {
+ super.onResume();
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ SwitchPreference autoFillEnablePreference =
+ (SwitchPreference) findPreference(getString(R.string.settings_autofill_enable_key));
+ if (autoFillEnablePreference != null) {
+ AutofillManager autofillManager = getActivity().getSystemService(AutofillManager.class);
+ if (autofillManager != null && autofillManager.hasEnabledAutofillServices())
+ autoFillEnablePreference.setChecked(true);
+ else
+ autoFillEnablePreference.setChecked(false);
+ }
+ }
+ }
+
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
int key = getArguments().getInt(TAG_KEY);
@@ -117,13 +140,6 @@ public class NestedSettingsFragment extends PreferenceFragmentCompat
});
}
- Preference preferenceAutofill = findPreference(getString(R.string.settings_autofill_key));
- if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
- preferenceAutofill.setEnabled(false);
- } else {
- preferenceAutofill.setOnPreferenceClickListener(this);
- }
-
Preference deleteKeysFingerprints = findPreference(getString(R.string.fingerprint_delete_all_key));
if (!fingerprintSupported) {
deleteKeysFingerprints.setEnabled(false);
@@ -171,6 +187,51 @@ public class NestedSettingsFragment extends PreferenceFragmentCompat
}
break;
+ case NESTED_SCREEN_FORM_FILLING_KEY:
+ setPreferencesFromResource(R.xml.form_filling_preferences, rootKey);
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ SwitchPreference autoFillEnablePreference =
+ (SwitchPreference) findPreference(getString(R.string.settings_autofill_enable_key));
+ AutofillManager autofillManager = getActivity().getSystemService(AutofillManager.class);
+ if (autofillManager != null && autofillManager.hasEnabledAutofillServices())
+ autoFillEnablePreference.setChecked(autofillManager.hasEnabledAutofillServices());
+ autoFillEnablePreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
+ @RequiresApi(api = Build.VERSION_CODES.O)
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ if (((SwitchPreference) preference).isChecked()) {
+ startEnableService();
+ } else {
+ disableService();
+ }
+ return false;
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.O)
+ private void disableService() {
+ if (autofillManager != null && autofillManager.hasEnabledAutofillServices()) {
+ autofillManager.disableAutofillServices();
+ } else {
+ Log.d(getClass().getName(), "Sample service already disabled.");
+ }
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.O)
+ private void startEnableService() {
+ if (autofillManager != null && !autofillManager.hasEnabledAutofillServices()) {
+ Intent intent = new Intent(Settings.ACTION_REQUEST_SET_AUTOFILL_SERVICE);
+ intent.setData(Uri.parse("package:com.example.android.autofill.service"));
+ Log.d(getClass().getName(), "enableService(): intent="+ intent);
+ startActivityForResult(intent, REQUEST_CODE_AUTOFILL);
+ } else {
+ Log.d(getClass().getName(), "Sample service already enabled.");
+ }
+ }
+ });
+ }
+ break;
+
case NESTED_SCREEN_DB_KEY:
setPreferencesFromResource(R.xml.db_preferences, rootKey);
@@ -205,8 +266,6 @@ public class NestedSettingsFragment extends PreferenceFragmentCompat
Log.e(getClass().getName(), "Database isn't ready");
}
-
-
break;
default:
@@ -247,6 +306,8 @@ public class NestedSettingsFragment extends PreferenceFragmentCompat
switch (key) {
case NESTED_SCREEN_APP_KEY:
return resources.getString(R.string.menu_app_settings);
+ case NESTED_SCREEN_FORM_FILLING_KEY:
+ return resources.getString(R.string.menu_form_filling_settings);
case NESTED_SCREEN_DB_KEY:
return resources.getString(R.string.menu_db_settings);
default:
@@ -256,10 +317,7 @@ public class NestedSettingsFragment extends PreferenceFragmentCompat
@Override
public boolean onPreferenceClick(Preference preference) {
- if (preference.getKey().equals(getString(R.string.settings_autofill_key))) {
- Intent intent = new Intent(getContext(), SettingsAutofillActivity.class);
- getActivity().startActivity(intent);
- }
+ // TODO encapsulate
return false;
}
diff --git a/app/src/main/java/com/keepassdroid/settings/SettingsAutofillActivity.java b/app/src/main/java/com/keepassdroid/settings/SettingsAutofillActivity.java
deleted file mode 100644
index b8ec84f57..000000000
--- a/app/src/main/java/com/keepassdroid/settings/SettingsAutofillActivity.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2017 Jeremy Jamet / Kunzisoft.
- *
- * This file is part of KeePass DX.
- *
- * KeePass DX is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * KeePass DX is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with KeePass DX. If not, see .
- *
- */
-package com.keepassdroid.settings;
-
-import android.os.Build;
-import android.os.Bundle;
-import android.support.annotation.RequiresApi;
-import android.support.v7.widget.Toolbar;
-import android.view.MenuItem;
-
-import com.kunzisoft.keepass.R;
-
-@RequiresApi(api = Build.VERSION_CODES.O)
-public class SettingsAutofillActivity extends SettingsActivity {
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- setContentView(R.layout.activity_toolbar);
- Toolbar toolbar = findViewById(R.id.toolbar);
- toolbar.setTitle(R.string.menu_autofill_settings);
- setSupportActionBar(toolbar);
- assert getSupportActionBar() != null;
- getSupportActionBar().setDisplayHomeAsUpEnabled(true);
-
- if (savedInstanceState == null) {
- getSupportFragmentManager().beginTransaction()
- .replace(R.id.fragment_container, new AutofillPreferenceFragment())
- .commit();
- }
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- switch ( item.getItemId() ) {
- case android.R.id.home:
- onBackPressed();
- break;
- }
-
- return super.onOptionsItemSelected(item);
- }
-}
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index cafde3405..7abc8cd94 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -34,6 +34,7 @@
Temps avant le verrouillage de la base de données lorsque l\'application est inactive.
Application
Préférences de l\'application
+ Préférences de remplissage de formulaire
Ne plus afficher
Enregistrer des modifications dans les fichiers kdbx est EXPÉRIMENTAL. Faites des sauvegardes de votre base de données avant toute modification.
Crochets
@@ -222,6 +223,7 @@
Définir la taille par défaut du mot de passe généré
Caractères de mot de passe
Définir les caractères par défaut du générateur de mot de passe
+ Notifications
Notifications du presse-papiers
Activer les notifications du presse-papiers pour copier le nom d\'utilisateur et le mot de passe
Verrouillage d\'écran
diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml
index 563f9866e..895c10962 100644
--- a/app/src/main/res/values/donottranslate.xml
+++ b/app/src/main/res/values/donottranslate.xml
@@ -59,7 +59,7 @@
clipboard_notifications_key
lock_database_screen_off_key
fingerprint_enable_key
- settings_autofill_key
+ settings_form_filling_key
settings_autofill_enable_key
full_file_path_enable_key
fingerprint_delete_all_key
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 5a67208eb..d0edcea72 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -133,8 +133,8 @@
Create
Settings
Application settings
+ Form filling settings
Database settings
- Autofill settings
Delete
Donate
Edit
@@ -228,6 +228,7 @@
Set the default size of the generated password
Password characters
Set the default password generator characters
+ Notifications
Clipboard Notifications
Enable clipboard notifications to copy username and password
Lock
diff --git a/app/src/main/res/xml/app_preferences.xml b/app/src/main/res/xml/app_preferences.xml
index 25256daec..97ce60f6d 100644
--- a/app/src/main/res/xml/app_preferences.xml
+++ b/app/src/main/res/xml/app_preferences.xml
@@ -33,11 +33,6 @@
android:defaultValue="@bool/saf_default"
android:title="@string/use_saf_title"
android:key="@string/saf_key"/>
-
@@ -125,15 +120,6 @@
-
-
-
-
diff --git a/app/src/main/res/xml/autofill_preferences.xml b/app/src/main/res/xml/autofill_preferences.xml
deleted file mode 100644
index be9ad8ef7..000000000
--- a/app/src/main/res/xml/autofill_preferences.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/xml/form_filling_preferences.xml b/app/src/main/res/xml/form_filling_preferences.xml
new file mode 100644
index 000000000..f4edece55
--- /dev/null
+++ b/app/src/main/res/xml/form_filling_preferences.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index 430e0d143..164106317 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -27,6 +27,11 @@
android:title="@string/menu_app_settings"
android:icon="@drawable/ic_phone_android_prefs_24dp"
android:persistent="false" />
+
-