Add setting to disable education screens

This commit is contained in:
J-Jamet
2018-07-02 11:25:59 +02:00
parent c3b3d8482c
commit 1c90747476
13 changed files with 326 additions and 291 deletions

View File

@@ -5,6 +5,7 @@ KeepassDX (2.5.0.0beta12)
* New icons for the material pack / vectorization
* New adaptive launcher icon
* Added a setting to disable the open button when no password is identified
* Added a setting to disable the education screens
KeepassDX (2.5.0.0beta11)
* Fix crash in beta10 version

View File

@@ -217,68 +217,70 @@ public class EntryActivity extends LockingHideActivity {
* Displays the explanation for copying a field and editing an entry
*/
private void checkAndPerformedEducation(Menu menu) {
if (PreferencesUtil.isEducationScreensEnabled(this)) {
if (entryContentsView != null && entryContentsView.isUserNamePresent()
&& !PreferencesUtil.isEducationCopyUsernamePerformed(this)) {
TapTargetView.showFor(this,
TapTarget.forView(findViewById(R.id.entry_user_name_action_image),
getString(R.string.education_field_copy_title),
getString(R.string.education_field_copy_summary))
.textColorInt(Color.WHITE)
.tintTarget(false)
.cancelable(true),
new TapTargetView.Listener() {
@Override
public void onTargetClick(TapTargetView view) {
super.onTargetClick(view);
clipboardHelper.timeoutCopyToClipboard(mEntry.getUsername(),
getString(R.string.copy_field, getString(R.string.entry_user_name)));
}
@Override
public void onOuterCircleClick(TapTargetView view) {
super.onOuterCircleClick(view);
view.dismiss(false);
// Launch autofill settings
startActivity(new Intent(EntryActivity.this, SettingsAutofillActivity.class));
}
});
PreferencesUtil.saveEducationPreference(this,
R.string.education_copy_username_key);
} else if (!PreferencesUtil.isEducationEntryEditPerformed(this)) {
try {
if (entryContentsView != null && entryContentsView.isUserNamePresent()
&& !PreferencesUtil.isEducationCopyUsernamePerformed(this)) {
TapTargetView.showFor(this,
TapTarget.forToolbarMenuItem(toolbar, R.id.menu_edit,
getString(R.string.education_entry_edit_title),
getString(R.string.education_entry_edit_summary))
TapTarget.forView(findViewById(R.id.entry_user_name_action_image),
getString(R.string.education_field_copy_title),
getString(R.string.education_field_copy_summary))
.textColorInt(Color.WHITE)
.tintTarget(true)
.tintTarget(false)
.cancelable(true),
new TapTargetView.Listener() {
@Override
public void onTargetClick(TapTargetView view) {
super.onTargetClick(view);
MenuItem editItem = menu.findItem(R.id.menu_edit);
onOptionsItemSelected(editItem);
clipboardHelper.timeoutCopyToClipboard(mEntry.getUsername(),
getString(R.string.copy_field, getString(R.string.entry_user_name)));
}
@Override
public void onOuterCircleClick(TapTargetView view) {
super.onOuterCircleClick(view);
view.dismiss(false);
// Open Keepass doc to create field references
Intent browserIntent = new Intent(Intent.ACTION_VIEW,
Uri.parse(getString(R.string.field_references_url)));
startActivity(browserIntent);
// Launch autofill settings
startActivity(new Intent(EntryActivity.this, SettingsAutofillActivity.class));
}
});
PreferencesUtil.saveEducationPreference(this,
R.string.education_entry_edit_key);
} catch (Exception e) {
// If icon not visible
Log.w(TAG, "Can't performed education for entry's edition");
R.string.education_copy_username_key);
} else if (!PreferencesUtil.isEducationEntryEditPerformed(this)) {
try {
TapTargetView.showFor(this,
TapTarget.forToolbarMenuItem(toolbar, R.id.menu_edit,
getString(R.string.education_entry_edit_title),
getString(R.string.education_entry_edit_summary))
.textColorInt(Color.WHITE)
.tintTarget(true)
.cancelable(true),
new TapTargetView.Listener() {
@Override
public void onTargetClick(TapTargetView view) {
super.onTargetClick(view);
MenuItem editItem = menu.findItem(R.id.menu_edit);
onOptionsItemSelected(editItem);
}
@Override
public void onOuterCircleClick(TapTargetView view) {
super.onOuterCircleClick(view);
view.dismiss(false);
// Open Keepass doc to create field references
Intent browserIntent = new Intent(Intent.ACTION_VIEW,
Uri.parse(getString(R.string.field_references_url)));
startActivity(browserIntent);
}
});
PreferencesUtil.saveEducationPreference(this,
R.string.education_entry_edit_key);
} catch (Exception e) {
// If icon not visible
Log.w(TAG, "Can't performed education for entry's edition");
}
}
}
}

View File

@@ -276,59 +276,58 @@ public class EntryEditActivity extends LockingHideActivity
* Displays the explanation for the icon selection, the password generator and for a new field
*/
private void checkAndPerformedEducation() {
if (PreferencesUtil.isEducationScreensEnabled(this)) {
// TODO Show icon
// TODO Show icon
if (!PreferencesUtil.isEducationPasswordGeneratorPerformed(this)) {
TapTargetView.showFor(this,
TapTarget.forView(generatePasswordView,
getString(R.string.education_generate_password_title),
getString(R.string.education_generate_password_summary))
.textColorInt(Color.WHITE)
.tintTarget(false)
.cancelable(true),
new TapTargetView.Listener() {
@Override
public void onTargetClick(TapTargetView view) {
super.onTargetClick(view);
openPasswordGenerator();
}
if (!PreferencesUtil.isEducationPasswordGeneratorPerformed(this)) {
TapTargetView.showFor(this,
TapTarget.forView(generatePasswordView,
getString(R.string.education_generate_password_title),
getString(R.string.education_generate_password_summary))
.textColorInt(Color.WHITE)
.tintTarget(false)
.cancelable(true),
new TapTargetView.Listener() {
@Override
public void onTargetClick(TapTargetView view) {
super.onTargetClick(view);
openPasswordGenerator();
}
@Override
public void onOuterCircleClick(TapTargetView view) {
super.onOuterCircleClick(view);
view.dismiss(false);
}
});
PreferencesUtil.saveEducationPreference(this,
R.string.education_password_generator_key);
}
else if (mEntry.allowExtraFields()
@Override
public void onOuterCircleClick(TapTargetView view) {
super.onOuterCircleClick(view);
view.dismiss(false);
}
});
PreferencesUtil.saveEducationPreference(this,
R.string.education_password_generator_key);
} else if (mEntry.allowExtraFields()
&& !mEntry.containsCustomFields()
&& !PreferencesUtil.isEducationEntryNewFieldPerformed(this)) {
TapTargetView.showFor(this,
TapTarget.forView(addNewFieldView,
getString(R.string.education_entry_new_field_title),
getString(R.string.education_entry_new_field_summary))
.textColorInt(Color.WHITE)
.tintTarget(false)
.cancelable(true),
new TapTargetView.Listener() {
@Override
public void onTargetClick(TapTargetView view) {
super.onTargetClick(view);
addNewCustomField();
}
TapTargetView.showFor(this,
TapTarget.forView(addNewFieldView,
getString(R.string.education_entry_new_field_title),
getString(R.string.education_entry_new_field_summary))
.textColorInt(Color.WHITE)
.tintTarget(false)
.cancelable(true),
new TapTargetView.Listener() {
@Override
public void onTargetClick(TapTargetView view) {
super.onTargetClick(view);
addNewCustomField();
}
@Override
public void onOuterCircleClick(TapTargetView view) {
super.onOuterCircleClick(view);
view.dismiss(false);
}
});
PreferencesUtil.saveEducationPreference(this,
R.string.education_entry_new_field_key);
@Override
public void onOuterCircleClick(TapTargetView view) {
super.onOuterCircleClick(view);
view.dismiss(false);
}
});
PreferencesUtil.saveEducationPreference(this,
R.string.education_entry_new_field_key);
}
}
}

View File

@@ -491,129 +491,131 @@ public class GroupActivity extends ListNodesActivity
* Displays the explanation for a add, search, sort a new node and lock the database
*/
private void checkAndPerformedEducation(Menu menu) {
if (PreferencesUtil.isEducationScreensEnabled(this)) {
// If no node, show education to add new one
if (listNodesFragment != null
&& listNodesFragment.isEmpty()) {
if (!PreferencesUtil.isEducationNewNodePerformed(this)) {
// If no node, show education to add new one
if (listNodesFragment != null
&& listNodesFragment.isEmpty()) {
if (!PreferencesUtil.isEducationNewNodePerformed(this)) {
TapTargetView.showFor(this,
TapTarget.forView(findViewById(R.id.add_button),
getString(R.string.education_new_node_title),
getString(R.string.education_new_node_summary))
.textColorInt(Color.WHITE)
.tintTarget(false)
.cancelable(true),
new TapTargetView.Listener() {
@Override
public void onTargetClick(TapTargetView view) {
super.onTargetClick(view);
addNodeButtonView.openButtonIfClose();
}
TapTargetView.showFor(this,
TapTarget.forView(findViewById(R.id.add_button),
getString(R.string.education_new_node_title),
getString(R.string.education_new_node_summary))
.textColorInt(Color.WHITE)
.tintTarget(false)
.cancelable(true),
new TapTargetView.Listener() {
@Override
public void onTargetClick(TapTargetView view) {
super.onTargetClick(view);
addNodeButtonView.openButtonIfClose();
}
@Override
public void onOuterCircleClick(TapTargetView view) {
super.onOuterCircleClick(view);
view.dismiss(false);
}
});
PreferencesUtil.saveEducationPreference(this,
R.string.education_new_node_key);
@Override
public void onOuterCircleClick(TapTargetView view) {
super.onOuterCircleClick(view);
view.dismiss(false);
}
});
PreferencesUtil.saveEducationPreference(this,
R.string.education_new_node_key);
}
}
}
// Else show the search education
else if (!PreferencesUtil.isEducationSearchPerformed(this)) {
// Else show the search education
else if (!PreferencesUtil.isEducationSearchPerformed(this)) {
try {
TapTargetView.showFor(this,
TapTarget.forToolbarMenuItem(toolbar, R.id.menu_search,
getString(R.string.education_search_title),
getString(R.string.education_search_summary))
.textColorInt(Color.WHITE)
.tintTarget(true)
.cancelable(true),
new TapTargetView.Listener() {
@Override
public void onTargetClick(TapTargetView view) {
super.onTargetClick(view);
MenuItem searchItem = menu.findItem(R.id.menu_search);
searchItem.expandActionView();
}
try {
TapTargetView.showFor(this,
TapTarget.forToolbarMenuItem(toolbar, R.id.menu_search,
getString(R.string.education_search_title),
getString(R.string.education_search_summary))
.textColorInt(Color.WHITE)
.tintTarget(true)
.cancelable(true),
new TapTargetView.Listener() {
@Override
public void onTargetClick(TapTargetView view) {
super.onTargetClick(view);
MenuItem searchItem = menu.findItem(R.id.menu_search);
searchItem.expandActionView();
}
@Override
public void onOuterCircleClick(TapTargetView view) {
super.onOuterCircleClick(view);
view.dismiss(false);
}
});
PreferencesUtil.saveEducationPreference(this,
R.string.education_search_key);
} catch (Exception e) {
// If icon not visible
Log.w(TAG, "Can't performed education for search");
@Override
public void onOuterCircleClick(TapTargetView view) {
super.onOuterCircleClick(view);
view.dismiss(false);
}
});
PreferencesUtil.saveEducationPreference(this,
R.string.education_search_key);
} catch (Exception e) {
// If icon not visible
Log.w(TAG, "Can't performed education for search");
}
}
}
// Else show the sort education
else if (!PreferencesUtil.isEducationSortPerformed(this)) {
// Else show the sort education
else if (!PreferencesUtil.isEducationSortPerformed(this)) {
try {
TapTargetView.showFor(this,
TapTarget.forToolbarMenuItem(toolbar, R.id.menu_sort,
getString(R.string.education_sort_title),
getString(R.string.education_sort_summary))
.textColorInt(Color.WHITE)
.tintTarget(true)
.cancelable(true),
new TapTargetView.Listener() {
@Override
public void onTargetClick(TapTargetView view) {
super.onTargetClick(view);
MenuItem sortItem = menu.findItem(R.id.menu_sort);
onOptionsItemSelected(sortItem);
}
try {
TapTargetView.showFor(this,
TapTarget.forToolbarMenuItem(toolbar, R.id.menu_sort,
getString(R.string.education_sort_title),
getString(R.string.education_sort_summary))
.textColorInt(Color.WHITE)
.tintTarget(true)
.cancelable(true),
new TapTargetView.Listener() {
@Override
public void onTargetClick(TapTargetView view) {
super.onTargetClick(view);
MenuItem sortItem = menu.findItem(R.id.menu_sort);
onOptionsItemSelected(sortItem);
}
@Override
public void onOuterCircleClick(TapTargetView view) {
super.onOuterCircleClick(view);
view.dismiss(false);
}
});
PreferencesUtil.saveEducationPreference(this,
R.string.education_sort_key);
} catch (Exception e) {
Log.w(TAG, "Can't performed education for sort");
@Override
public void onOuterCircleClick(TapTargetView view) {
super.onOuterCircleClick(view);
view.dismiss(false);
}
});
PreferencesUtil.saveEducationPreference(this,
R.string.education_sort_key);
} catch (Exception e) {
Log.w(TAG, "Can't performed education for sort");
}
}
}
// Else show the lock education
else if (!PreferencesUtil.isEducationLockPerformed(this)) {
// Else show the lock education
else if (!PreferencesUtil.isEducationLockPerformed(this)) {
try {
TapTargetView.showFor(this,
TapTarget.forToolbarMenuItem(toolbar, R.id.menu_lock,
getString(R.string.education_lock_title),
getString(R.string.education_lock_summary))
.textColorInt(Color.WHITE)
.tintTarget(true)
.cancelable(true),
new TapTargetView.Listener() {
@Override
public void onTargetClick(TapTargetView view) {
super.onTargetClick(view);
MenuItem lockItem = menu.findItem(R.id.menu_lock);
onOptionsItemSelected(lockItem);
}
try {
TapTargetView.showFor(this,
TapTarget.forToolbarMenuItem(toolbar, R.id.menu_lock,
getString(R.string.education_lock_title),
getString(R.string.education_lock_summary))
.textColorInt(Color.WHITE)
.tintTarget(true)
.cancelable(true),
new TapTargetView.Listener() {
@Override
public void onTargetClick(TapTargetView view) {
super.onTargetClick(view);
MenuItem lockItem = menu.findItem(R.id.menu_lock);
onOptionsItemSelected(lockItem);
}
@Override
public void onOuterCircleClick(TapTargetView view) {
super.onOuterCircleClick(view);
view.dismiss(false);
}
});
PreferencesUtil.saveEducationPreference(this,
R.string.education_lock_key);
} catch (Exception e) {
Log.w(TAG, "Can't performed education for lock");
@Override
public void onOuterCircleClick(TapTargetView view) {
super.onOuterCircleClick(view);
view.dismiss(false);
}
});
PreferencesUtil.saveEducationPreference(this,
R.string.education_lock_key);
} catch (Exception e) {
Log.w(TAG, "Can't performed education for lock");
}
}
}
}

View File

@@ -355,60 +355,62 @@ public class FileSelectActivity extends StylishActivity implements
* Displays the explanation for a database selection
*/
private void checkAndPerformedEducationForSelection() {
if (PreferencesUtil.isEducationScreensEnabled(this)) {
if (!PreferencesUtil.isEducationSelectDatabasePerformed(this)
&& browseButtonView != null) {
if (!PreferencesUtil.isEducationSelectDatabasePerformed(this)
&& browseButtonView != null) {
TapTargetView.showFor(FileSelectActivity.this,
TapTarget.forView(browseButtonView,
getString(R.string.education_select_database_title),
getString(R.string.education_select_database_summary))
.icon(ContextCompat.getDrawable(this, R.drawable.ic_folder_white_24dp))
.textColorInt(Color.WHITE)
.tintTarget(true)
.cancelable(true),
new TapTargetView.Listener() {
@Override
public void onTargetClick(TapTargetView view) {
super.onTargetClick(view);
keyFileHelper.getOpenFileOnClickViewListener().onClick(view);
}
@Override
public void onOuterCircleClick(TapTargetView view) {
super.onOuterCircleClick(view);
view.dismiss(false);
if (!PreferencesUtil.isEducationOpenLinkDatabasePerformed(FileSelectActivity.this)) {
TapTargetView.showFor(FileSelectActivity.this,
TapTarget.forView(fileSelectExpandableButton,
getString(R.string.education_open_link_database_title),
getString(R.string.education_open_link_database_summary))
.icon(ContextCompat.getDrawable(FileSelectActivity.this, R.drawable.ic_link_white_24dp))
.textColorInt(Color.WHITE)
.tintTarget(true)
.cancelable(true),
new TapTargetView.Listener() {
@Override
public void onTargetClick(TapTargetView view) {
super.onTargetClick(view);
// Do nothing here
}
@Override
public void onOuterCircleClick(TapTargetView view) {
super.onOuterCircleClick(view);
view.dismiss(false);
}
});
PreferencesUtil.saveEducationPreference(FileSelectActivity.this,
R.string.education_open_link_db_key);
TapTargetView.showFor(FileSelectActivity.this,
TapTarget.forView(browseButtonView,
getString(R.string.education_select_database_title),
getString(R.string.education_select_database_summary))
.icon(ContextCompat.getDrawable(this, R.drawable.ic_folder_white_24dp))
.textColorInt(Color.WHITE)
.tintTarget(true)
.cancelable(true),
new TapTargetView.Listener() {
@Override
public void onTargetClick(TapTargetView view) {
super.onTargetClick(view);
keyFileHelper.getOpenFileOnClickViewListener().onClick(view);
}
}
});
PreferencesUtil.saveEducationPreference(FileSelectActivity.this,
R.string.education_select_db_key);
@Override
public void onOuterCircleClick(TapTargetView view) {
super.onOuterCircleClick(view);
view.dismiss(false);
if (!PreferencesUtil.isEducationOpenLinkDatabasePerformed(FileSelectActivity.this)) {
TapTargetView.showFor(FileSelectActivity.this,
TapTarget.forView(fileSelectExpandableButton,
getString(R.string.education_open_link_database_title),
getString(R.string.education_open_link_database_summary))
.icon(ContextCompat.getDrawable(FileSelectActivity.this, R.drawable.ic_link_white_24dp))
.textColorInt(Color.WHITE)
.tintTarget(true)
.cancelable(true),
new TapTargetView.Listener() {
@Override
public void onTargetClick(TapTargetView view) {
super.onTargetClick(view);
// Do nothing here
}
@Override
public void onOuterCircleClick(TapTargetView view) {
super.onOuterCircleClick(view);
view.dismiss(false);
}
});
PreferencesUtil.saveEducationPreference(FileSelectActivity.this,
R.string.education_open_link_db_key);
}
}
});
PreferencesUtil.saveEducationPreference(FileSelectActivity.this,
R.string.education_select_db_key);
}
}
}

View File

@@ -385,34 +385,37 @@ public class PasswordActivity extends StylishActivity
* Displays the explanation for a database opening with fingerprints if available
*/
private void checkAndPerformedEducation() {
if (!PreferencesUtil.isEducationUnlockPerformed(this)) {
if (PreferencesUtil.isEducationScreensEnabled(this)) {
TapTargetView.showFor(this,
TapTarget.forView(findViewById(R.id.password_input_container),
getString(R.string.education_unlock_title),
getString(R.string.education_unlock_summary))
.dimColor(R.color.green)
.icon(ContextCompat.getDrawable(this, R.mipmap.ic_launcher_round))
.textColorInt(Color.WHITE)
.tintTarget(false)
.cancelable(true),
new TapTargetView.Listener() {
@Override
public void onTargetClick(TapTargetView view) {
super.onTargetClick(view);
checkAndPerformedEducationForFingerprint();
}
if (!PreferencesUtil.isEducationUnlockPerformed(this)) {
@Override
public void onOuterCircleClick(TapTargetView view) {
super.onOuterCircleClick(view);
view.dismiss(false);
checkAndPerformedEducationForFingerprint();
TapTargetView.showFor(this,
TapTarget.forView(findViewById(R.id.password_input_container),
getString(R.string.education_unlock_title),
getString(R.string.education_unlock_summary))
.dimColor(R.color.green)
.icon(ContextCompat.getDrawable(this, R.mipmap.ic_launcher_round))
.textColorInt(Color.WHITE)
.tintTarget(false)
.cancelable(true),
new TapTargetView.Listener() {
@Override
public void onTargetClick(TapTargetView view) {
super.onTargetClick(view);
checkAndPerformedEducationForFingerprint();
}
}
});
// TODO make a period for donation
PreferencesUtil.saveEducationPreference(PasswordActivity.this, R.string.education_unlock_key);
@Override
public void onOuterCircleClick(TapTargetView view) {
super.onOuterCircleClick(view);
view.dismiss(false);
checkAndPerformedEducationForFingerprint();
}
});
// TODO make a period for donation
PreferencesUtil.saveEducationPreference(PasswordActivity.this, R.string.education_unlock_key);
}
}
}
@@ -421,14 +424,18 @@ public class PasswordActivity extends StylishActivity
* Displays fingerprints if available
*/
private void checkAndPerformedEducationForFingerprint() {
if (PreferencesUtil.isFingerprintEnable(getApplicationContext())) {
TapTargetView.showFor(this,
TapTarget.forView(fingerprintImageView,
getString(R.string.education_fingerprint_title),
getString(R.string.education_fingerprint_summary))
.textColorInt(Color.WHITE)
.tintTarget(false)
.cancelable(true),
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if ( PreferencesUtil.isFingerprintEnable(getApplicationContext())
&& FingerPrintHelper.isFingerprintSupported(FingerprintManagerCompat.from(this))) {
TapTargetView.showFor(this,
TapTarget.forView(fingerprintImageView,
getString(R.string.education_fingerprint_title),
getString(R.string.education_fingerprint_summary))
.textColorInt(Color.WHITE)
.tintTarget(false)
.cancelable(true),
new TapTargetView.Listener() {
@Override
public void onOuterCircleClick(TapTargetView view) {
@@ -436,6 +443,7 @@ public class PasswordActivity extends StylishActivity
view.dismiss(false);
}
});
}
}
}

View File

@@ -176,6 +176,12 @@ public class PreferencesUtil {
R.string.education_entry_new_field_key
};
public static boolean isEducationScreensEnabled(Context context) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
return sharedPreferences.getBoolean(context.getString(R.string.enable_education_screens_key),
context.getResources().getBoolean(R.bool.enable_education_screens_default));
}
/**
* Register education preferences as true in EDUCATION_PREFERENCE SharedPreferences
*

View File

@@ -262,8 +262,10 @@
<string name="magic_keyboard_title">Magikeyboard</string>
<string name="magic_keyboard_summary">Activer un clavier customisé qui permet le renseignement de vos mots de passe et de tous vos champs d\'identité facilement.</string>
<string name="enable_education_screens_title">Ecrans d\'éducation</string>
<string name="enable_education_screens_summary">Met en surbrillance les éléments pour apprendre le fonctionnement de l\'application</string>
<string name="reset_education_screens_title">Réinitialiser les écrans d\'éducation</string>
<string name="reset_education_screens_summary">Mettre en surbrillance les éléments pour apprendre le fonctionnement de l\'application</string>
<string name="reset_education_screens_summary">Réinitialise l\'affichage des éléments d\'éducation</string>
<string name="reset_education_screens_text">Ecrans d\'éducation réinitialisés</string>
<string name="education_create_database_title">Créez votre fichier de base de données</string>
<string name="education_create_database_summary">Vous ne connaissez pas encore KeePass DX, créez votre premier fichier de gestion de mots de passe.</string>

View File

@@ -81,6 +81,8 @@
<string name="database_name_key" translatable="false">database_name_key</string>
<string name="database_description_key" translatable="false">database_description_key</string>
<string name="database_version_key" translatable="false">database_version_key</string>
<string name="enable_education_screens_key" translatable="false">enable_education_screens_key</string>
<string name="reset_education_screens_key" translatable="false">relaunch_education_screens_key</string>
<string name="education_create_db_key" translatable="false">education_create_db_key</string>
<string name="education_select_db_key" translatable="false">education_select_db_key</string>
@@ -95,6 +97,7 @@
<string name="education_password_generator_key" translatable="false">education_password_generator_key</string>
<string name="education_entry_new_field_key" translatable="false">education_entry_new_field_key</string>
<string name="education_screen_reclicked_key" translatable="false">education_screen_reclicked_key</string>
<string name="settings_appearance_key" translatable="false">settings_appearance_key</string>
<string name="magic_keyboard_key" translatable="false">magic_keyboard_key</string>
<string name="magic_keyboard_preference_key" translatable="false">magic_keyboard_preference_key</string>
@@ -116,6 +119,7 @@
<bool name="monospace_font_fields_enable_default" translatable="false">true</bool>
<bool name="auto_open_file_uri_default" translatable="false">true</bool>
<bool name="allow_copy_password_default" translatable="false">true</bool>
<bool name="enable_education_screens_default" translatable="false">true</bool>
<bool name="education_create_db_default" translatable="false">false</bool>
<bool name="education_select_db_default" translatable="false">false</bool>
<bool name="education_open_link_db_default" translatable="false">false</bool>

View File

@@ -281,8 +281,10 @@
<string name="allow_no_password_title">Allow no password</string>
<string name="allow_no_password_summary">Enable the open button if no password identification is selected.</string>
<string name="enable_education_screens_title">Education screens</string>
<string name="enable_education_screens_summary">Highlight the elements to learn how the application works</string>
<string name="reset_education_screens_title">Reset education screens</string>
<string name="reset_education_screens_summary">Highlight the elements to learn how the application works</string>
<string name="reset_education_screens_summary">Reset the display of education items</string>
<string name="reset_education_screens_text">Education screens reseted</string>
<string name="education_create_database_title">Create your database file</string>
<string name="education_create_database_summary">You don\'t know KeePass DX yet, create your first password management file.</string>

View File

@@ -63,6 +63,11 @@
<PreferenceCategory
android:title="@string/other">
<SwitchPreference
android:key="@string/enable_education_screens_key"
android:title="@string/enable_education_screens_title"
android:summary="@string/enable_education_screens_summary"
android:defaultValue="@bool/enable_education_screens_default"/>
<Preference
android:key="@string/reset_education_screens_key"
android:title="@string/reset_education_screens_title"

View File

@@ -3,4 +3,5 @@
* New navigation in a single screen / new animations between activities
* New icons for the material pack
* New adaptive launcher icon
* Added a setting to disable the open button when no password is identified
* Added a setting to disable the open button when no password is identified
* Added a setting to disable the education screens

View File

@@ -3,4 +3,5 @@
* Nouvelle navigation dans un seul écran / nouvelles animations entre activités
* Nouveaux icones pour le pack material
* Nouvel icone de lancement adaptatif
* Ajout d'un paramètre pour désactiver le bouton d'ouverture quand aucun mot de passe n'est identifié
* Ajout d'un paramètre pour désactiver le bouton d'ouverture quand aucun mot de passe n'est identifié
* Ajout d'un paramètre pour désactiver les écrans d'éducation