mirror of
https://github.com/moparisthebest/keepass2android
synced 2024-11-21 16:55:01 -05:00
allow to pick (existing) custom icons
This commit is contained in:
parent
89672fe201
commit
1bca643c3f
@ -30,21 +30,25 @@ namespace keepass2android
|
||||
private IKp2aApp _app;
|
||||
private readonly String _name;
|
||||
private readonly int _iconId;
|
||||
private readonly PwUuid _groupCustomIconId;
|
||||
internal PwGroup Group;
|
||||
internal PwGroup Parent;
|
||||
protected bool DontSave;
|
||||
readonly Context _ctx;
|
||||
|
||||
|
||||
public static AddGroup GetInstance(Context ctx, IKp2aApp app, String name, int iconid, PwGroup parent, OnFinish finish, bool dontSave) {
|
||||
return new AddGroup(ctx, app, name, iconid, parent, finish, dontSave);
|
||||
public static AddGroup GetInstance(Context ctx, IKp2aApp app, string name, int iconid, PwUuid groupCustomIconId, PwGroup parent, OnFinish finish, bool dontSave) {
|
||||
return new AddGroup(ctx, app, name, iconid, groupCustomIconId, parent, finish, dontSave);
|
||||
}
|
||||
|
||||
|
||||
private AddGroup(Context ctx, IKp2aApp app, String name, int iconid, PwGroup parent, OnFinish finish, bool dontSave): base(finish) {
|
||||
|
||||
|
||||
private AddGroup(Context ctx, IKp2aApp app, String name, int iconid, PwUuid groupCustomIconId, PwGroup parent, OnFinish finish, bool dontSave)
|
||||
: base(finish)
|
||||
{
|
||||
_ctx = ctx;
|
||||
_name = name;
|
||||
_iconId = iconid;
|
||||
_groupCustomIconId = groupCustomIconId;
|
||||
Parent = parent;
|
||||
DontSave = dontSave;
|
||||
_app = app;
|
||||
@ -57,6 +61,10 @@ namespace keepass2android
|
||||
StatusLogger.UpdateMessage(UiStringKey.AddingGroup);
|
||||
// Generate new group
|
||||
Group = new PwGroup(true, true, _name, (PwIcon)_iconId);
|
||||
if (_groupCustomIconId != null)
|
||||
{
|
||||
Group.CustomIconUuid = _groupCustomIconId;
|
||||
}
|
||||
Parent.AddGroup(Group, true);
|
||||
|
||||
// Commit to disk
|
||||
|
@ -74,9 +74,9 @@ namespace keepass2android
|
||||
db.SearchHelper = new SearchDbHelper(_app);
|
||||
|
||||
// Add a couple default groups
|
||||
AddGroup internet = AddGroup.GetInstance(_ctx, _app, "Internet", 1, db.KpDatabase.RootGroup, null, true);
|
||||
AddGroup internet = AddGroup.GetInstance(_ctx, _app, "Internet", 1, null, db.KpDatabase.RootGroup, null, true);
|
||||
internet.Run();
|
||||
AddGroup email = AddGroup.GetInstance(_ctx, _app, "eMail", 19, db.KpDatabase.RootGroup, null, true);
|
||||
AddGroup email = AddGroup.GetInstance(_ctx, _app, "eMail", 19, null, db.KpDatabase.RootGroup, null, true);
|
||||
email.Run();
|
||||
|
||||
// Commit changes
|
||||
|
@ -147,12 +147,14 @@ namespace keepass2android
|
||||
pwe.Expires = true;
|
||||
pwe.ExpiryTime = DateTime.Now.AddDays(nExpireDays);
|
||||
}*/
|
||||
|
||||
|
||||
if ((State.ParentGroup.IconId != PwIcon.Folder) && (State.ParentGroup.IconId != PwIcon.FolderOpen) &&
|
||||
(State.ParentGroup.IconId != PwIcon.FolderPackage))
|
||||
{
|
||||
State.EntryInDatabase.IconId = State.ParentGroup.IconId; // Inherit icon from group
|
||||
}
|
||||
else
|
||||
State.EntryInDatabase.IconId = PwIcon.Key;
|
||||
State.EntryInDatabase.CustomIconUuid = State.ParentGroup.CustomIconUuid;
|
||||
|
||||
/*
|
||||
@ -206,8 +208,7 @@ namespace keepass2android
|
||||
|
||||
if (State.SelectedIcon)
|
||||
{
|
||||
//TODO: custom image
|
||||
iconButton.SetImageResource(Icons.IconToResId(State.SelectedIconId, false));
|
||||
App.Kp2a.GetDb().DrawableFactory.AssignDrawableTo(iconButton, Resources, App.Kp2a.GetDb().KpDatabase, (PwIcon)State.SelectedIconId, State.SelectedCustomIconId, false);
|
||||
}
|
||||
iconButton.Click += (sender, evt) => {
|
||||
UpdateEntryFromUi(State.Entry);
|
||||
@ -327,17 +328,11 @@ namespace keepass2android
|
||||
bool bCreateBackup = (!State.IsNew);
|
||||
if(bCreateBackup) newEntry.CreateBackup(null);
|
||||
|
||||
if (State.SelectedIcon == false) {
|
||||
if (State.IsNew) {
|
||||
newEntry.IconId = PwIcon.Key;
|
||||
} else {
|
||||
// Keep previous icon, if no new one was selected
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (State.SelectedIcon)
|
||||
{
|
||||
newEntry.IconId = State.SelectedIconId;
|
||||
newEntry.CustomIconUuid = State.SelectedCustomIconId;
|
||||
}
|
||||
} //else the State.EntryInDatabase.Icon
|
||||
/* KPDesktop
|
||||
if(m_cbCustomForegroundColor.Checked)
|
||||
newEntry.ForegroundColor = m_clrForeground;
|
||||
@ -687,7 +682,7 @@ namespace keepass2android
|
||||
switch (resultCode)
|
||||
{
|
||||
case (Result)ResultOkIconPicker:
|
||||
State.SelectedIconId = (PwIcon) data.Extras.GetInt(IconPickerActivity.KeyIconId);
|
||||
State.SelectedIconId = (PwIcon) data.Extras.GetInt(IconPickerActivity.KeyIconId,(int)PwIcon.Key);
|
||||
State.SelectedCustomIconId = PwUuid.Zero;
|
||||
String customIconIdString = data.Extras.GetString(IconPickerActivity.KeyCustomIconId);
|
||||
if (!String.IsNullOrEmpty(customIconIdString))
|
||||
|
@ -133,7 +133,7 @@ namespace keepass2android
|
||||
RunnableOnFinish task;
|
||||
if (strGroupUuid == null)
|
||||
{
|
||||
task = AddGroup.GetInstance(this, App.Kp2a, groupName, groupIconId, Group, new RefreshTask(handler, this), false);
|
||||
task = AddGroup.GetInstance(this, App.Kp2a, groupName, groupIconId, groupCustomIconId, Group, new RefreshTask(handler, this), false);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -19,6 +19,7 @@ using System;
|
||||
using Android.App;
|
||||
using Android.Content;
|
||||
using Android.OS;
|
||||
using Android.Runtime;
|
||||
using Android.Widget;
|
||||
using KeePassLib;
|
||||
using KeePassLib.Utility;
|
||||
@ -45,6 +46,13 @@ namespace keepass2android
|
||||
_design = new ActivityDesign(this);
|
||||
}
|
||||
|
||||
protected GroupEditActivity(IntPtr javaReference, JniHandleOwnership transfer)
|
||||
: base(javaReference, transfer)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static void Launch(Activity act, PwGroup parentGroup)
|
||||
{
|
||||
Intent i = new Intent(act, typeof(GroupEditActivity));
|
||||
@ -91,7 +99,8 @@ namespace keepass2android
|
||||
|
||||
intent.PutExtra (KeyName, name);
|
||||
intent.PutExtra (KeyIconId, _selectedIconId);
|
||||
intent.PutExtra(KeyCustomIconId, MemUtil.ByteArrayToHexString(_selectedCustomIconId.UuidBytes));
|
||||
if (_selectedCustomIconId != null)
|
||||
intent.PutExtra(KeyCustomIconId, MemUtil.ByteArrayToHexString(_selectedCustomIconId.UuidBytes));
|
||||
if (_groupToEdit != null)
|
||||
intent.PutExtra(KeyGroupUuid, MemUtil.ByteArrayToHexString(_groupToEdit.Uuid.UuidBytes));
|
||||
|
||||
@ -135,10 +144,13 @@ namespace keepass2android
|
||||
switch ((int)resultCode)
|
||||
{
|
||||
case EntryEditActivity.ResultOkIconPicker:
|
||||
_selectedIconId = data.Extras.GetInt(IconPickerActivity.KeyIconId);
|
||||
_selectedCustomIconId = PwUuid.Zero;
|
||||
_selectedIconId = data.Extras.GetInt(IconPickerActivity.KeyIconId, (int) PwIcon.Key);
|
||||
String customIconIdString = data.Extras.GetString(IconPickerActivity.KeyCustomIconId);
|
||||
if (!String.IsNullOrEmpty(customIconIdString))
|
||||
_selectedCustomIconId = new PwUuid(MemUtil.HexStringToByteArray(customIconIdString));
|
||||
|
||||
ImageButton currIconButton = (ImageButton) FindViewById(Resource.Id.icon_button);
|
||||
currIconButton.SetImageResource(Icons.IconToResId((PwIcon)_selectedIconId, false));
|
||||
App.Kp2a.GetDb().DrawableFactory.AssignDrawableTo(currIconButton, Resources, App.Kp2a.GetDb().KpDatabase, (PwIcon) _selectedIconId, _selectedCustomIconId, false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -22,6 +22,8 @@ using Android.Graphics;
|
||||
using Android.OS;
|
||||
using Android.Views;
|
||||
using Android.Widget;
|
||||
using KeePassLib;
|
||||
using KeePassLib.Utility;
|
||||
|
||||
namespace keepass2android
|
||||
{
|
||||
@ -44,34 +46,44 @@ namespace keepass2android
|
||||
SetContentView(Resource.Layout.icon_picker);
|
||||
|
||||
GridView currIconGridView = (GridView)FindViewById(Resource.Id.IconGridView);
|
||||
currIconGridView.Adapter = new ImageAdapter(this);
|
||||
currIconGridView.Adapter = new ImageAdapter(this, App.Kp2a.GetDb().KpDatabase);
|
||||
|
||||
currIconGridView.ItemClick += (sender, e) => {
|
||||
|
||||
Intent intent = new Intent();
|
||||
|
||||
currIconGridView.ItemClick += (sender, e) =>
|
||||
{
|
||||
|
||||
Intent intent = new Intent();
|
||||
|
||||
if (((ImageAdapter) currIconGridView.Adapter).IsCustomIcon(e.Position))
|
||||
{
|
||||
intent.PutExtra(KeyCustomIconId,
|
||||
MemUtil.ByteArrayToHexString(((ImageAdapter) currIconGridView.Adapter).GetCustomIcon(e.Position).Uuid.UuidBytes));
|
||||
}
|
||||
else
|
||||
{
|
||||
intent.PutExtra(KeyIconId, e.Position);
|
||||
SetResult((Result)EntryEditActivity.ResultOkIconPicker, intent);
|
||||
}
|
||||
SetResult((Result)EntryEditActivity.ResultOkIconPicker, intent);
|
||||
|
||||
Finish();
|
||||
};
|
||||
Finish();
|
||||
};
|
||||
}
|
||||
|
||||
public class ImageAdapter : BaseAdapter
|
||||
{
|
||||
readonly IconPickerActivity _act;
|
||||
|
||||
public ImageAdapter(IconPickerActivity act)
|
||||
private readonly PwDatabase _db;
|
||||
|
||||
public ImageAdapter(IconPickerActivity act, PwDatabase db)
|
||||
{
|
||||
_act = act;
|
||||
_db = db;
|
||||
}
|
||||
|
||||
|
||||
public override int Count
|
||||
{
|
||||
get
|
||||
{
|
||||
/* Return number of KeePass icons */
|
||||
return Icons.Count();
|
||||
return Icons.Count() + _db.CustomIcons.Count;
|
||||
}
|
||||
}
|
||||
|
||||
@ -97,16 +109,41 @@ namespace keepass2android
|
||||
{
|
||||
currView = convertView;
|
||||
}
|
||||
|
||||
TextView tv = (TextView) currView.FindViewById(Resource.Id.icon_text);
|
||||
tv.Text = "" + position;
|
||||
ImageView iv = (ImageView) currView.FindViewById(Resource.Id.icon_image);
|
||||
iv.SetImageResource(Icons.IconToResId((KeePassLib.PwIcon)position, false));
|
||||
Android.Graphics.PorterDuff.Mode mMode = Android.Graphics.PorterDuff.Mode.SrcAtop;
|
||||
Color color = new Color(189, 189, 189);
|
||||
iv.SetColorFilter(color, mMode);
|
||||
|
||||
if (position < Icons.Count())
|
||||
{
|
||||
tv.Text = "" + position;
|
||||
iv.SetImageResource(Icons.IconToResId((KeePassLib.PwIcon) position, false));
|
||||
Android.Graphics.PorterDuff.Mode mMode = Android.Graphics.PorterDuff.Mode.SrcAtop;
|
||||
Color color = new Color(189, 189, 189);
|
||||
iv.SetColorFilter(color, mMode);
|
||||
}
|
||||
else
|
||||
{
|
||||
int pos = position - Icons.Count();
|
||||
var icon = _db.CustomIcons[pos];
|
||||
tv.Text = pos.ToString();
|
||||
iv.SetColorFilter(null);
|
||||
iv.SetImageBitmap(icon.Image);
|
||||
|
||||
}
|
||||
|
||||
return currView;
|
||||
}
|
||||
|
||||
public bool IsCustomIcon(int position)
|
||||
{
|
||||
return position >= Icons.Count();
|
||||
}
|
||||
|
||||
public PwCustomIcon GetCustomIcon(int position)
|
||||
{
|
||||
if (!IsCustomIcon(position))
|
||||
return null;
|
||||
return _db.CustomIcons[position - Icons.Count()];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user