diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.java b/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.java
index af0f14764..20a2d6a52 100644
--- a/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.java
+++ b/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.java
@@ -48,6 +48,7 @@ import com.kunzisoft.keepass.database.PwDate;
import com.kunzisoft.keepass.database.PwEntry;
import com.kunzisoft.keepass.database.PwGroup;
import com.kunzisoft.keepass.database.PwGroupId;
+import com.kunzisoft.keepass.database.PwIconStandard;
import com.kunzisoft.keepass.database.edit.AddEntry;
import com.kunzisoft.keepass.database.edit.OnFinish;
import com.kunzisoft.keepass.database.edit.RunnableOnFinish;
@@ -65,6 +66,8 @@ import com.kunzisoft.keepass.view.EntryEditCustomField;
import java.util.UUID;
+import static com.kunzisoft.keepass.dialogs.IconPickerDialogFragment.UNDEFINED_ICON_ID;
+
public class EntryEditActivity extends LockingHideActivity
implements IconPickerDialogFragment.IconPickerListener,
GeneratePasswordDialogFragment.GeneratePasswordListener {
@@ -84,7 +87,7 @@ public class EntryEditActivity extends LockingHideActivity
protected PwEntry mEntry;
protected PwEntry mCallbackNewEntry;
protected boolean mIsNew;
- protected int mSelectedIconID = -1;
+ protected int mSelectedIconID = UNDEFINED_ICON_ID;
// Views
private ScrollView scrollView;
@@ -99,6 +102,7 @@ public class EntryEditActivity extends LockingHideActivity
private ViewGroup entryExtraFieldsContainer;
private View addNewFieldView;
private View saveView;
+ private int iconColor;
/**
* Launch EntryEditActivity to update an existing entry
@@ -162,6 +166,11 @@ public class EntryEditActivity extends LockingHideActivity
Intent intent = getIntent();
byte[] uuidBytes = intent.getByteArrayExtra(KEY_ENTRY);
+ // Retrieve the textColor to tint the icon
+ int[] attrs = {android.R.attr.textColorPrimary};
+ TypedArray ta = getTheme().obtainStyledAttributes(attrs);
+ iconColor = ta.getColor(0, Color.WHITE);
+
PwDatabase pm = db.getPwDatabase();
if ( uuidBytes == null ) {
PwGroupId parentId = (PwGroupId) intent.getSerializableExtra(KEY_PARENT);
@@ -170,10 +179,6 @@ public class EntryEditActivity extends LockingHideActivity
mIsNew = true;
// Add the default icon
if (IconPackChooser.getSelectedIconPack(this).tintable()) {
- // Retrieve the textColor to tint the icon
- int[] attrs = {R.attr.textColorInverse};
- TypedArray ta = getTheme().obtainStyledAttributes(attrs);
- int iconColor = ta.getColor(0, Color.WHITE);
App.getDB().getDrawFactory().assignDefaultDatabaseIconTo(this, entryIconView, true, iconColor);
} else {
App.getDB().getDrawFactory().assignDefaultDatabaseIconTo(this, entryIconView);
@@ -391,17 +396,8 @@ public class EntryEditActivity extends LockingHideActivity
newEntry.setLastModificationTime(new PwDate());
newEntry.setTitle(entryTitleView.getText().toString());
- if(mSelectedIconID != -1)
- newEntry.setIcon(App.getDB().getPwDatabase().getIconFactory().getIcon(mSelectedIconID));
- else {
- if (mIsNew) {
- newEntry.setIcon(App.getDB().getPwDatabase().getIconFactory().getFirstIcon());
- }
- else {
- // Keep previous icon, if no new one was selected
- newEntry.setIcon(mEntry.getIconStandard());
- }
- }
+ newEntry.setIcon(retrieveIcon());
+
newEntry.setUrl(entryUrlView.getText().toString());
newEntry.setUsername(entryUserNameView.getText().toString());
newEntry.setNotes(entryCommentView.getText().toString());
@@ -425,6 +421,24 @@ public class EntryEditActivity extends LockingHideActivity
return newEntry;
}
+ /**
+ * Retrieve the icon by the selection, or the first icon in the list if the entry is new or the last one
+ * @return
+ */
+ private PwIconStandard retrieveIcon() {
+ if(mSelectedIconID != UNDEFINED_ICON_ID)
+ return App.getDB().getPwDatabase().getIconFactory().getIcon(mSelectedIconID);
+ else {
+ if (mIsNew) {
+ return App.getDB().getPwDatabase().getIconFactory().getFirstIcon();
+ }
+ else {
+ // Keep previous icon, if no new one was selected
+ return mEntry.getIconStandard();
+ }
+ }
+ }
+
@Override
public boolean onCreateOptionsMenu(Menu menu) {
@@ -451,10 +465,6 @@ public class EntryEditActivity extends LockingHideActivity
protected void fillData() {
if (IconPackChooser.getSelectedIconPack(this).tintable()) {
- // Retrieve the textColor to tint the icon
- int[] attrs = {R.attr.textColorInverse};
- TypedArray ta = getTheme().obtainStyledAttributes(attrs);
- int iconColor = ta.getColor(0, Color.WHITE);
App.getDB().getDrawFactory().assignDatabaseIconTo(this, entryIconView, mEntry.getIcon(), true, iconColor);
} else {
App.getDB().getDrawFactory().assignDatabaseIconTo(this, entryIconView, mEntry.getIcon());
@@ -498,8 +508,10 @@ public class EntryEditActivity extends LockingHideActivity
@Override
protected void onSaveInstanceState(Bundle outState) {
- outState.putInt(IconPickerDialogFragment.KEY_ICON_ID, mSelectedIconID);
- super.onSaveInstanceState(outState);
+ if (mSelectedIconID != UNDEFINED_ICON_ID) {
+ outState.putInt(IconPickerDialogFragment.KEY_ICON_ID, mSelectedIconID);
+ super.onSaveInstanceState(outState);
+ }
}
@Override
diff --git a/app/src/main/java/com/kunzisoft/keepass/dialogs/GroupEditDialogFragment.java b/app/src/main/java/com/kunzisoft/keepass/dialogs/GroupEditDialogFragment.java
index 42dc98515..20b22aff6 100644
--- a/app/src/main/java/com/kunzisoft/keepass/dialogs/GroupEditDialogFragment.java
+++ b/app/src/main/java/com/kunzisoft/keepass/dialogs/GroupEditDialogFragment.java
@@ -21,6 +21,8 @@ package com.kunzisoft.keepass.dialogs;
import android.app.Dialog;
import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
@@ -32,6 +34,7 @@ import android.widget.TextView;
import android.widget.Toast;
import com.kunzisoft.keepass.R;
+import com.kunzisoft.keepass.app.App;
import com.kunzisoft.keepass.database.PwNode;
import com.kunzisoft.keepass.icons.IconPackChooser;
@@ -90,7 +93,15 @@ public class GroupEditDialogFragment extends DialogFragment
populateIcon(getArguments().getInt(KEY_ICON_ID));
} else {
// populate the icon with the default one
- iconButton.setImageResource(IconPackChooser.getSelectedIconPack(getContext()).getDefaultIconId());
+ if (IconPackChooser.getSelectedIconPack(getContext()).tintable()) {
+ // Retrieve the textColor to tint the icon
+ int[] attrs = {android.R.attr.textColorPrimary};
+ TypedArray ta = getContext().getTheme().obtainStyledAttributes(attrs);
+ int iconColor = ta.getColor(0, Color.WHITE);
+ App.getDB().getDrawFactory().assignDefaultDatabaseIconTo(getContext(), iconButton, true, iconColor);
+ } else {
+ App.getDB().getDrawFactory().assignDefaultDatabaseIconTo(getContext(), iconButton);
+ }
}
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
@@ -116,7 +127,6 @@ public class GroupEditDialogFragment extends DialogFragment
GroupEditDialogFragment.this.getDialog().cancel();
});
- final ImageView iconButton = root.findViewById(R.id.icon_button);
iconButton.setOnClickListener(v -> {
IconPickerDialogFragment iconPickerDialogFragment = new IconPickerDialogFragment();
iconPickerDialogFragment.show(getFragmentManager(), "IconPickerDialogFragment");
diff --git a/app/src/main/java/com/kunzisoft/keepass/dialogs/IconPickerDialogFragment.java b/app/src/main/java/com/kunzisoft/keepass/dialogs/IconPickerDialogFragment.java
index ed9e2612f..bb791d871 100644
--- a/app/src/main/java/com/kunzisoft/keepass/dialogs/IconPickerDialogFragment.java
+++ b/app/src/main/java/com/kunzisoft/keepass/dialogs/IconPickerDialogFragment.java
@@ -44,6 +44,7 @@ import com.kunzisoft.keepass.stylish.StylishActivity;
public class IconPickerDialogFragment extends DialogFragment {
public static final String KEY_ICON_ID = "icon_id";
+ public static final int UNDEFINED_ICON_ID = -1;
private IconPickerListener iconPickerListener;
private IconPack iconPack;
diff --git a/app/src/main/java/com/kunzisoft/keepass/fileselect/FilePickerStylishActivity.java b/app/src/main/java/com/kunzisoft/keepass/fileselect/FilePickerStylishActivity.java
index 35a38dae2..41af623bf 100644
--- a/app/src/main/java/com/kunzisoft/keepass/fileselect/FilePickerStylishActivity.java
+++ b/app/src/main/java/com/kunzisoft/keepass/fileselect/FilePickerStylishActivity.java
@@ -29,7 +29,9 @@ import com.kunzisoft.keepass.R;
import com.kunzisoft.keepass.stylish.Stylish;
import com.nononsenseapps.filepicker.FilePickerActivity;
-
+/**
+ * FilePickerActivity class with a style compatibility
+ */
public class FilePickerStylishActivity extends FilePickerActivity {
private @StyleRes
@@ -51,10 +53,17 @@ public class FilePickerStylishActivity extends FilePickerActivity {
}
}
+ /**
+ * Derived from the Stylish class, get the specific FilePickerStyle theme
+ */
public static class FilePickerStylish extends Stylish {
public static @StyleRes int getThemeId(Context context) {
if (themeString.equals(context.getString(R.string.list_style_name_night)))
return R.style.KeepassDXStyle_FilePickerStyle_Night;
+ else if (themeString.equals(context.getString(R.string.list_style_name_dark)))
+ return R.style.KeepassDXStyle_FilePickerStyle_Dark;
+ else if (themeString.equals(context.getString(R.string.list_style_name_purple)))
+ return R.style.KeepassDXStyle_FilePickerStyle_Purple;
return R.style.KeepassDXStyle_FilePickerStyle_Light;
}
diff --git a/app/src/main/java/com/kunzisoft/keepass/settings/NestedSettingsFragment.java b/app/src/main/java/com/kunzisoft/keepass/settings/NestedSettingsFragment.java
index 50a6f1e2a..7bf22cd2d 100644
--- a/app/src/main/java/com/kunzisoft/keepass/settings/NestedSettingsFragment.java
+++ b/app/src/main/java/com/kunzisoft/keepass/settings/NestedSettingsFragment.java
@@ -141,8 +141,9 @@ public class NestedSettingsFragment extends PreferenceFragmentCompat
Preference stylePreference = findPreference(getString(R.string.setting_style_key));
stylePreference.setOnPreferenceChangeListener((preference, newValue) -> {
String styleString = (String) newValue;
- Stylish.assignStyle(getActivity(), styleString);
- getActivity().recreate();
+ Stylish.assignStyle(styleString);
+ if (getActivity() != null)
+ getActivity().recreate();
return true;
});
diff --git a/app/src/main/java/com/kunzisoft/keepass/stylish/Stylish.java b/app/src/main/java/com/kunzisoft/keepass/stylish/Stylish.java
index 32f28b614..19be47889 100644
--- a/app/src/main/java/com/kunzisoft/keepass/stylish/Stylish.java
+++ b/app/src/main/java/com/kunzisoft/keepass/stylish/Stylish.java
@@ -26,26 +26,44 @@ import android.util.Log;
import com.kunzisoft.keepass.R;
+/**
+ * Class that provides functions to retrieve and assign a theme to a module
+ */
public class Stylish {
- protected static String stylishPrefKey;
-
protected static String themeString;
+ /**
+ * Initialize the class with a theme preference
+ * @param context Context to retrieve the theme preference
+ */
public static void init(Context context) {
- stylishPrefKey = context.getString(R.string.setting_style_key);
+ String stylishPrefKey = context.getString(R.string.setting_style_key);
Log.d(Stylish.class.getName(), "Attatching to " + context.getPackageName());
themeString = PreferenceManager.getDefaultSharedPreferences(context).getString(stylishPrefKey, context.getString(R.string.list_style_name_light));
}
- public static void assignStyle(Context context, String styleString) {
+ /**
+ * Assign the style to the class attribute
+ * @param styleString Style id String
+ */
+ public static void assignStyle(String styleString) {
themeString = styleString;
}
+ /**
+ * Function that returns the current id of the style selected in the preference
+ * @param context Context to retrieve the id
+ * @return Id of the style
+ */
public static @StyleRes int getThemeId(Context context) {
if (themeString.equals(context.getString(R.string.list_style_name_night)))
return R.style.KeepassDXStyle_Night;
+ else if (themeString.equals(context.getString(R.string.list_style_name_dark)))
+ return R.style.KeepassDXStyle_Dark;
+ else if (themeString.equals(context.getString(R.string.list_style_name_purple)))
+ return R.style.KeepassDXStyle_Purple;
return R.style.KeepassDXStyle_Light;
}
diff --git a/app/src/main/res/drawable-v21/image_button_background.xml b/app/src/main/res/drawable-v21/image_button_background.xml
deleted file mode 100644
index 259cd33c1..000000000
--- a/app/src/main/res/drawable-v21/image_button_background.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/image_button_background.xml b/app/src/main/res/drawable/image_button_background.xml
deleted file mode 100644
index dba700480..000000000
--- a/app/src/main/res/drawable/image_button_background.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
- -
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/entry_edit.xml b/app/src/main/res/layout/entry_edit.xml
index 89dc0a5b0..ed4ec19f4 100644
--- a/app/src/main/res/layout/entry_edit.xml
+++ b/app/src/main/res/layout/entry_edit.xml
@@ -69,7 +69,7 @@
android:id="@+id/icon_button"
android:layout_width="wrap_content"
android:layout_height="match_parent"
- android:layout_margin="8dp"
+ android:layout_margin="4dp"
android:src="@drawable/ic_blank_32dp"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"/>
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 87d47c059..bd5d2da62 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -303,8 +303,10 @@
Choisir un thème
Changer le thème de l\'application en modifiant les couleurs
- - Light Theme
- - Night Theme
+ - Thème Jour
+ - Thème Nuit
+ - Thème Foncé Classique
+ - Thème Pro
Choisir un pack d\'icones
Changer le pack d\'icones de l\'application
diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml
index 085faf5db..9e7426b4b 100644
--- a/app/src/main/res/values-v21/styles.xml
+++ b/app/src/main/res/values-v21/styles.xml
@@ -14,9 +14,6 @@
-
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/style_purple.xml b/app/src/main/res/values/style_purple.xml
new file mode 100644
index 000000000..979af2cbb
--- /dev/null
+++ b/app/src/main/res/values/style_purple.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index f6982df94..0868e3a40 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -28,8 +28,6 @@
- @style/KeepassDXStyle.Button
- @style/KeepassDXStyle.Button
- - @style/KeepassDXStyle.ImageButton
- - @style/KeepassDXStyle.ImageButton
- @style/KeepassDXStyle.CheckBox
@@ -78,8 +76,6 @@
- @style/KeepassDXStyle.Button
- @style/KeepassDXStyle.Button
- - @style/KeepassDXStyle.ImageButton
- - @style/KeepassDXStyle.ImageButton
- @style/KeepassDXStyle.CheckBox
@@ -220,11 +216,6 @@
- @drawable/button_background
- center
-
-