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 -