diff --git a/.gitignore b/.gitignore index c0e6eab7..c8a63025 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,4 @@ /src/java/KP2ASoftKeyboard/gen /src/java/KP2ASoftKeyboard/projectzip /src/java/KP2ASoftKeyboard/createProjectZip.bat +Thumbs.db diff --git a/src/KeyValueTest/Activity1.cs b/src/KeyValueTest/Activity1.cs new file mode 100644 index 00000000..dbeb6607 --- /dev/null +++ b/src/KeyValueTest/Activity1.cs @@ -0,0 +1,95 @@ +using System; + +using Android.App; +using Android.Content; +using Android.Runtime; +using Android.Views; +using Android.Widget; +using Android.OS; + +namespace KeyValueTest +{ + [Activity (Label = "KeyValueTest", MainLauncher = true)] + public class Activity1 : Activity + { + string className = null; + string ClassName + { + get { + if (className == null) + className = this.GetType().Name; + return className; + } + } + + protected override void OnResume() + { + base.OnResume(); + Android.Util.Log.Debug("DEBUG",ClassName+".OnResume"); + } + + protected override void OnStart() + { + base.OnStart(); + Android.Util.Log.Debug("DEBUG",ClassName+".OnStart"); + } + + + protected override void OnDestroy() + { + base.OnDestroy(); + Android.Util.Log.Debug("DEBUG",ClassName+".OnDestroy"+IsFinishing.ToString()); + } + + protected override void OnPause() + { + base.OnPause(); + Android.Util.Log.Debug("DEBUG",ClassName+".OnPause"); + } + + protected override void OnStop() + { + base.OnStop(); + Android.Util.Log.Debug("DEBUG",ClassName+".OnStop"); + } + + View CreateView(string key, string value) + { + LinearLayout layout = new LinearLayout(this, null); + layout.Orientation = Orientation.Vertical; + layout.LayoutParameters = new ViewGroup.LayoutParams(LinearLayout.LayoutParams.FillParent, LinearLayout.LayoutParams.WrapContent); + TextView keyView = new TextView(this); + if (key != null) + keyView.Text = key; + layout.AddView(keyView); + TextView valueView = new TextView(this); + if (value != null) + valueView.Text = value; + valueView.SetTextIsSelectable(true); + layout.AddView(valueView); + return layout; + } + + protected override void OnCreate(Bundle bundle) + { + Android.Util.Log.Debug("DEBUG", ClassName + ".OnCreate"); + base.OnCreate(bundle); + + // Set our view from the "main" layout resource + SetContentView(Resource.Layout.Main); + + + + + FindViewById(Resource.Id.extra_strings).AddView(CreateView("key1","value1")); + + FindViewById(Resource.Id.extra_strings).AddView(CreateView("key2","value2")); + FindViewById(Resource.Id.extra_strings).AddView(CreateView("key3","value3")); + + + + } + } +} + + diff --git a/src/KeyValueTest/Assets/AboutAssets.txt b/src/KeyValueTest/Assets/AboutAssets.txt new file mode 100644 index 00000000..72f5729a --- /dev/null +++ b/src/KeyValueTest/Assets/AboutAssets.txt @@ -0,0 +1,19 @@ +Any raw assets you want to be deployed with your application can be placed in +this directory (and child directories) and given a Build Action of "AndroidAsset". + +These files will be deployed with you package and will be accessible using Android's +AssetManager, like this: + +public class ReadAsset : Activity +{ + protected override void OnCreate (Bundle bundle) + { + base.OnCreate (bundle); + + InputStream input = Assets.Open ("my_asset.txt"); + } +} + +Additionally, some Android functions will automatically load asset files: + +Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); \ No newline at end of file diff --git a/src/KeyValueTest/EntrySection.cs b/src/KeyValueTest/EntrySection.cs new file mode 100644 index 00000000..5927c085 --- /dev/null +++ b/src/KeyValueTest/EntrySection.cs @@ -0,0 +1,75 @@ +/* +This file is part of Keepass2Android, Copyright 2013 Philipp Crocoll. This file is based on Keepassdroid, Copyright Brian Pellin. + + Keepass2Android 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. + + Keepass2Android 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 Keepass2Android. If not, see . + */ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using Android.App; +using Android.Content; +using Android.OS; +using Android.Runtime; +using Android.Views; +using Android.Widget; +using Android.Util; + +namespace KeyValueTest +{ + + public class EntrySection : LinearLayout { + + public EntrySection(Context context): base(context, null) { + inflate (context,null, null); + } + + public EntrySection(Context context, IAttributeSet attrs): base(context, attrs) { + inflate (context,null, null); + } + + public EntrySection(Context context, IAttributeSet attrs, String title, String value): base(context, attrs) { + + inflate(context, title, value); + } + + public EntrySection (IntPtr javaReference, JniHandleOwnership transfer) + : base(javaReference, transfer) + { + + } + + + private void inflate(Context context, String title, String value) { + LayoutInflater inflater = (LayoutInflater) Context.GetSystemService(Context.LayoutInflaterService); + inflater.Inflate(Resource.Layout.entry_section, this); + + setText(Resource.Id.title, title); + setText(Resource.Id.value, value); + } + + private void setText(int resId, String str) { + if (str != null) { + TextView tvTitle = (TextView) FindViewById(resId); + tvTitle.Text = str; + Android.Util.Log.Debug("DEBUG", "Setting " + resId+"=" + str); + } + + } + } + +} + diff --git a/src/KeyValueTest/KeyValueTest.csproj b/src/KeyValueTest/KeyValueTest.csproj new file mode 100644 index 00000000..3545540b --- /dev/null +++ b/src/KeyValueTest/KeyValueTest.csproj @@ -0,0 +1,69 @@ + + + + Debug + AnyCPU + 10.0.0 + 2.0 + {70F00DF9-6CC8-40A7-BF27-A7B8D724891E} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + KeyValueTest + Resources + Assets + Resource + True + Resources\Resource.designer.cs + KeyValueTest + v4.0 + + + True + full + False + bin\Debug + DEBUG; + prompt + 4 + False + None + + + none + True + bin\Release + prompt + 4 + False + False + SdkOnly + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/KeyValueTest/Properties/AssemblyInfo.cs b/src/KeyValueTest/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..9ca46797 --- /dev/null +++ b/src/KeyValueTest/Properties/AssemblyInfo.cs @@ -0,0 +1,28 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using Android.App; + +// Information about this assembly is defined by the following attributes. +// Change them to the values specific to your project. + +[assembly: AssemblyTitle("KeyValueTest")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("crocoll")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". +// The form "{Major}.{Minor}.*" will automatically update the build and revision, +// and "{Major}.{Minor}.{Build}.*" will update just the revision. + +[assembly: AssemblyVersion("1.0.0")] + +// The following attributes are used to specify the signing key for the assembly, +// if desired. See the Mono documentation for more information about signing. + +//[assembly: AssemblyDelaySign(false)] +//[assembly: AssemblyKeyFile("")] + diff --git a/src/KeyValueTest/Resources/AboutResources.txt b/src/KeyValueTest/Resources/AboutResources.txt new file mode 100644 index 00000000..54c2267a --- /dev/null +++ b/src/KeyValueTest/Resources/AboutResources.txt @@ -0,0 +1,44 @@ +Images, layout descriptions, binary blobs and string dictionaries can be included +in your application as resource files. Various Android APIs are designed to +operate on the resource IDs instead of dealing with images, strings or binary blobs +directly. + +For example, a sample Android app that contains a user interface layout (main.axml), +an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png) +would keep its resources in the "Resources" directory of the application: + +Resources/ + drawable/ + icon.png + + layout/ + main.axml + + values/ + strings.xml + +In order to get the build system to recognize Android resources, set the build action to +"AndroidResource". The native Android APIs do not operate directly with filenames, but +instead operate on resource IDs. When you compile an Android application that uses resources, +the build system will package the resources for distribution and generate a class called "R" +(this is an Android convention) that contains the tokens for each one of the resources +included. For example, for the above Resources layout, this is what the R class would expose: + +public class R { + public class drawable { + public const int icon = 0x123; + } + + public class layout { + public const int main = 0x456; + } + + public class strings { + public const int first_string = 0xabc; + public const int second_string = 0xbcd; + } +} + +You would then use R.drawable.icon to reference the drawable/icon.png file, or R.layout.main +to reference the layout/main.axml file, or R.strings.first_string to reference the first +string in the dictionary file values/strings.xml. diff --git a/src/KeyValueTest/Resources/Resource.designer.cs b/src/KeyValueTest/Resources/Resource.designer.cs new file mode 100644 index 00000000..5cdc7008 --- /dev/null +++ b/src/KeyValueTest/Resources/Resource.designer.cs @@ -0,0 +1,109 @@ +#pragma warning disable 1591 +//------------------------------------------------------------------------------ +// +// Dieser Code wurde von einem Tool generiert. +// Laufzeitversion:4.0.30319.296 +// +// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn +// der Code erneut generiert wird. +// +//------------------------------------------------------------------------------ + +[assembly: Android.Runtime.ResourceDesignerAttribute("KeyValueTest.Resource", IsApplication=true)] + +namespace KeyValueTest +{ + + + [System.CodeDom.Compiler.GeneratedCodeAttribute("Novell.MonoDroid.Build.Tasks", "1.0.0.0")] + public partial class Resource + { + + public static void UpdateIdValues() + { + } + + public partial class Attribute + { + + private Attribute() + { + } + } + + public partial class Drawable + { + + // aapt resource value: 0x7f020000 + public const int Icon = 2130837504; + + private Drawable() + { + } + } + + public partial class Id + { + + // aapt resource value: 0x7f050003 + public const int bottom_bar = 2131034115; + + // aapt resource value: 0x7f050007 + public const int entry_contents = 2131034119; + + // aapt resource value: 0x7f050005 + public const int entry_divider2 = 2131034117; + + // aapt resource value: 0x7f050004 + public const int entry_edit = 2131034116; + + // aapt resource value: 0x7f050006 + public const int entry_scroll = 2131034118; + + // aapt resource value: 0x7f050008 + public const int extra_strings = 2131034120; + + // aapt resource value: 0x7f050000 + public const int title = 2131034112; + + // aapt resource value: 0x7f050002 + public const int top = 2131034114; + + // aapt resource value: 0x7f050001 + public const int value = 2131034113; + + private Id() + { + } + } + + public partial class Layout + { + + // aapt resource value: 0x7f030000 + public const int entry_section = 2130903040; + + // aapt resource value: 0x7f030001 + public const int Main = 2130903041; + + private Layout() + { + } + } + + public partial class String + { + + // aapt resource value: 0x7f040001 + public const int app_name = 2130968577; + + // aapt resource value: 0x7f040000 + public const int hello = 2130968576; + + private String() + { + } + } + } +} +#pragma warning restore 1591 diff --git a/src/KeyValueTest/Resources/drawable/Icon.png b/src/KeyValueTest/Resources/drawable/Icon.png new file mode 100644 index 00000000..a07c69fa Binary files /dev/null and b/src/KeyValueTest/Resources/drawable/Icon.png differ diff --git a/src/KeyValueTest/Resources/layout-v14/Main.axml b/src/KeyValueTest/Resources/layout-v14/Main.axml new file mode 100644 index 00000000..5ab5565c --- /dev/null +++ b/src/KeyValueTest/Resources/layout-v14/Main.axml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/src/KeyValueTest/Resources/layout-v14/entry_section.xml b/src/KeyValueTest/Resources/layout-v14/entry_section.xml new file mode 100644 index 00000000..c1ef4333 --- /dev/null +++ b/src/KeyValueTest/Resources/layout-v14/entry_section.xml @@ -0,0 +1,17 @@ + + + + + \ No newline at end of file diff --git a/src/KeyValueTest/Resources/layout/Main.axml b/src/KeyValueTest/Resources/layout/Main.axml new file mode 100644 index 00000000..c17b3e4d --- /dev/null +++ b/src/KeyValueTest/Resources/layout/Main.axml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/KeyValueTest/Resources/layout/entry_section.xml b/src/KeyValueTest/Resources/layout/entry_section.xml new file mode 100644 index 00000000..fbb506dc --- /dev/null +++ b/src/KeyValueTest/Resources/layout/entry_section.xml @@ -0,0 +1,18 @@ + + + + + \ No newline at end of file diff --git a/src/KeyValueTest/Resources/values/Strings.xml b/src/KeyValueTest/Resources/values/Strings.xml new file mode 100644 index 00000000..94b78440 --- /dev/null +++ b/src/KeyValueTest/Resources/values/Strings.xml @@ -0,0 +1,5 @@ + + + Hello World, Click Me! + KeyValueTest + diff --git a/src/keepass2android/EntryActivity.cs b/src/keepass2android/EntryActivity.cs index 829c8727..d2a3fa81 100644 --- a/src/keepass2android/EntryActivity.cs +++ b/src/keepass2android/EntryActivity.cs @@ -38,6 +38,7 @@ using Android.Content.PM; using KeePassLib.Security; using keepass2android.view; using Android.Webkit; +using Android.Graphics; namespace keepass2android { @@ -76,7 +77,7 @@ namespace keepass2android } protected void setupEditButtons() { - Button edit = (Button) FindViewById(Resource.Id.entry_edit); + View edit = FindViewById(Resource.Id.entry_edit); edit.Click += (sender, e) => { EntryEditActivity.Launch(this, mEntry); }; @@ -206,7 +207,8 @@ namespace keepass2android String key = pair.Key; if (!PwDefs.IsStandardField(key)) { - View view = new EntrySection(this, null, key, pair.Value.ReadString()); + //View view = new EntrySection(this, null, key, pair.Value.ReadString()); + View view = CreateEditSection(key, pair.Value.ReadString()); extraGroup.AddView(view); hasExtraFields = true; } @@ -214,6 +216,28 @@ namespace keepass2android FindViewById(Resource.Id.entry_extra_strings_label).Visibility = hasExtraFields ? ViewStates.Visible : ViewStates.Gone; } + View CreateEditSection(string key, string value) + { + LinearLayout layout = new LinearLayout(this, null); + layout.Orientation = Orientation.Vertical; + LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FillParent, LinearLayout.LayoutParams.WrapContent); + layoutParams.SetMargins(10,0,0,0); + layout.LayoutParameters = layoutParams; + View viewInflated = LayoutInflater.Inflate(Resource.Layout.entry_extrastring_title,null); + TextView keyView = (TextView)viewInflated; + if (key != null) + keyView.Text = key; + + layout.AddView(keyView); + TextView valueView = (TextView)LayoutInflater.Inflate(Resource.Layout.entry_extrastring_value, null); + if (value != null) + valueView.Text = value; + valueView.Typeface = Typeface.Monospace; + valueView.SetTextIsSelectable(true); + layout.AddView(valueView); + return layout; + } + string writeBinaryToFile(string key) { ProtectedBinary pb = mEntry.Binaries.Get(key); @@ -333,14 +357,24 @@ namespace keepass2android protected void fillData(bool trimList) { ImageView iv = (ImageView)FindViewById(Resource.Id.entry_icon); + if (iv != null) + { App.getDB().drawFactory.assignDrawableTo(iv, Resources, App.getDB().pm, mEntry.IconId, mEntry.CustomIconUuid); + } //populateText(Resource.Id.entry_title, mEntry.Strings.ReadSafe(PwDefs.TitleField)); var button = ((Button)FindViewById(Resource.Id.entry_title)); + if (button != null) + { button.Text = mEntry.Strings.ReadSafe(PwDefs.TitleField); button.Click += (object sender, EventArgs e) => { Finish(); }; - + } + if (ActionBar != null) + { + ActionBar.Title = mEntry.Strings.ReadSafe(PwDefs.TitleField); + ActionBar.SetDisplayHomeAsUpEnabled(true); + } populateText(Resource.Id.entry_user_name, Resource.Id.entry_user_name_label, mEntry.Strings.ReadSafe(PwDefs.UserNameField)); populateText(Resource.Id.entry_url, Resource.Id.entry_url_label, mEntry.Strings.ReadSafe(PwDefs.UrlField)); @@ -537,6 +571,12 @@ namespace keepass2android Toast.MakeText(this, Resource.String.no_url_handler, ToastLength.Long).Show(); } return true; + case Android.Resource.Id.Home: + //Currently the action bar only displays the home button when we come from a previous activity. + //So we can simply Finish. See this page for information on how to do this in more general (future?) cases: + //http://developer.android.com/training/implementing-navigation/ancestral.html + Finish(); + return true; } diff --git a/src/keepass2android/EntryEditActivity.cs b/src/keepass2android/EntryEditActivity.cs index b3966ce4..ce561320 100644 --- a/src/keepass2android/EntryEditActivity.cs +++ b/src/keepass2android/EntryEditActivity.cs @@ -45,16 +45,14 @@ namespace keepass2android public const int RESULT_OK_ICON_PICKER = (int)Result.FirstUser + 1000; public const int RESULT_OK_PASSWORD_GENERATOR = RESULT_OK_ICON_PICKER + 1; - - private PwEntry mEntry, mEntryInDatabase; - private bool mShowPassword = false; - private bool mIsNew; - private PwIcon mSelectedIconID; - private PwUuid mSelectedCustomIconID = PwUuid.Zero; - private bool mSelectedIcon = false; - bool mEntryModified; - + const string Intent_ContinueWithEditing = "ContinueWithEditing"; + + EntryEditActivityState State + { + get { return App.entryEditActivityState; } + } + public static void Launch(Activity act, PwEntry pw) { Intent i = new Intent(act, typeof(EntryEditActivity)); @@ -73,41 +71,63 @@ namespace keepass2android } private ScrollView scroll; + + bool mCloseForReload; - protected override void OnCreate(Bundle savedInstanceState) + protected override void OnCreate(Bundle savedInstanceState) { - ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences(this); - mShowPassword = ! prefs.GetBoolean(GetString(Resource.String.maskpass_key), Resources.GetBoolean(Resource.Boolean.maskpass_default)); - base.OnCreate(savedInstanceState); + + if (this.LastNonConfigurationInstance != null) + { + //bug in Mono for Android or whatever: after config change the extra fields are wrong + // -> reload: + reload(); + return; + } + SetContentView(Resource.Layout.entry_edit); - SetResult(KeePass.EXIT_NORMAL); - + mCloseForReload = false; + // Likely the app has been killed exit the activity Database db = App.getDB(); - if ( ! db.Open ) { + if (! db.Open) + { Finish(); return; } + + + if (Intent.GetBooleanExtra(Intent_ContinueWithEditing, false)) + { + //property "State" will return the state + + + } else + { + App.entryEditActivityState = new EntryEditActivityState(); + ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences(this); + State.mShowPassword = ! prefs.GetBoolean(GetString(Resource.String.maskpass_key), Resources.GetBoolean(Resource.Boolean.maskpass_default)); - Intent i = Intent; - String uuidBytes = i.GetStringExtra(KEY_ENTRY); - - PwUuid entryId = PwUuid.Zero; - if (uuidBytes != null) - entryId = new KeePassLib.PwUuid(MemUtil.HexStringToByteArray(uuidBytes)); - - PwGroup parentGroup = null; - if ( entryId == PwUuid.Zero ) { - String groupId = i.GetStringExtra(KEY_PARENT); - - parentGroup = db.groups[new PwUuid(MemUtil.HexStringToByteArray(groupId))]; - - mEntryInDatabase = new PwEntry(true, true); - mEntryInDatabase.Strings.Set(PwDefs.UserNameField, new ProtectedString( - db.pm.MemoryProtection.ProtectUserName, db.pm.DefaultUserName)); - - /*KPDesktop + Intent i = Intent; + String uuidBytes = i.GetStringExtra(KEY_ENTRY); + + PwUuid entryId = PwUuid.Zero; + if (uuidBytes != null) + entryId = new KeePassLib.PwUuid(MemUtil.HexStringToByteArray(uuidBytes)); + + State.parentGroup = null; + if (entryId == PwUuid.Zero) + { + String groupId = i.GetStringExtra(KEY_PARENT); + + State.parentGroup = db.groups [new PwUuid(MemUtil.HexStringToByteArray(groupId))]; + + State.mEntryInDatabase = new PwEntry(true, true); + State.mEntryInDatabase.Strings.Set(PwDefs.UserNameField, new ProtectedString( + db.pm.MemoryProtection.ProtectUserName, db.pm.DefaultUserName)); + + /*KPDesktop * ProtectedString psAutoGen; PwGenerator.Generate(out psAutoGen, Program.Config.PasswordGenerator.AutoGeneratedPasswordsProfile, null, Program.PwGeneratorPool); @@ -120,15 +140,15 @@ namespace keepass2android pwe.Expires = true; pwe.ExpiryTime = DateTime.Now.AddDays(nExpireDays); }*/ - - if((parentGroup.IconId != PwIcon.Folder) && (parentGroup.IconId != PwIcon.FolderOpen) && - (parentGroup.IconId != PwIcon.FolderPackage)) - { - mEntryInDatabase.IconId = parentGroup.IconId; // Inherit icon from group - } - mEntryInDatabase.CustomIconUuid = parentGroup.CustomIconUuid; - - /* + + if ((State.parentGroup.IconId != PwIcon.Folder) && (State.parentGroup.IconId != PwIcon.FolderOpen) && + (State.parentGroup.IconId != PwIcon.FolderPackage)) + { + State.mEntryInDatabase.IconId = State.parentGroup.IconId; // Inherit icon from group + } + State.mEntryInDatabase.CustomIconUuid = State.parentGroup.CustomIconUuid; + + /* * KPDesktop if(strDefaultSeq.Length == 0) { @@ -146,35 +166,51 @@ namespace keepass2android } } }*/ - mIsNew = true; - mEntryModified = true; - - } else { - - System.Diagnostics.Debug.Assert(entryId != null); - - mEntryInDatabase = db.entries[entryId]; - mIsNew = false; + State.mIsNew = true; + State.mEntryModified = true; + + } else + { + + System.Diagnostics.Debug.Assert(entryId != null); + + State.mEntryInDatabase = db.entries [entryId]; + State.mIsNew = false; + + + } + State.mEntry = State.mEntryInDatabase.CloneDeep(); - } + } + + if (!State.mEntryModified) + SetResult(KeePass.EXIT_NORMAL); + else + SetResult(KeePass.EXIT_REFRESH_TITLE); - mEntry = mEntryInDatabase.CloneDeep(); fillData(); View scrollView = FindViewById(Resource.Id.entry_scroll); scrollView.ScrollBarStyle = ScrollbarStyles.InsideInset; - ImageButton iconButton = (ImageButton) FindViewById(Resource.Id.icon_button); + ImageButton iconButton = (ImageButton)FindViewById(Resource.Id.icon_button); + + if (State.mSelectedIcon) + { + //TODO: custom image + iconButton.SetImageResource(Icons.iconToResId(State.mSelectedIconID)); + } iconButton.Click += (sender, evt) => { + UpdateEntryFromUi(State.mEntry); IconPickerActivity.Launch(this); }; // Generate password button - Button generatePassword = (Button) FindViewById(Resource.Id.generate_button); + Button generatePassword = (Button)FindViewById(Resource.Id.generate_button); generatePassword.Click += (object sender, EventArgs e) => { - + UpdateEntryFromUi(State.mEntry); GeneratePasswordActivity.Launch(this); }; @@ -182,164 +218,30 @@ namespace keepass2android // Save button - Button save = (Button) FindViewById(Resource.Id.entry_save); + View save = FindViewById(Resource.Id.entry_save); + if (save == null) + { + + ActionBar.SetCustomView(Resource.Layout.SaveButton); + ActionBar.SetDisplayShowCustomEnabled(true); + ActionBar.SetDisplayShowTitleEnabled(false); + ActionBar.SetDisplayUseLogoEnabled(false); + ActionBar.SetDisplayShowHomeEnabled(false); + ActionBar.SetDisplayOptions(ActionBarDisplayOptions.ShowCustom, + ActionBarDisplayOptions.ShowCustom); + save = FindViewById(Resource.Id.entry_save); + + } save.Click += (object sender, EventArgs e) => { - - EntryEditActivity act = this; - - if (!validateBeforeSaving()) - return; + OnFinish onFinish = new AfterSave(new Handler(), this); - PwEntry initialEntry = mEntryInDatabase.CloneDeep(); + SaveEntry(onFinish); - PwEntry newEntry = mEntryInDatabase; - - //Clone history and re-assign: - newEntry.History = newEntry.History.CloneDeep(); - - //Based on KeePass Desktop - bool bCreateBackup = (!mIsNew); - if(bCreateBackup) newEntry.CreateBackup(null); - - if (mSelectedIcon == false) { - if (mIsNew) { - newEntry.IconId = PwIcon.Key; - } else { - // Keep previous icon, if no new one was selected - } - } - else { - newEntry.IconId = mSelectedIconID; - newEntry.CustomIconUuid = mSelectedCustomIconID; - } - /* KPDesktop - if(m_cbCustomForegroundColor.Checked) - newEntry.ForegroundColor = m_clrForeground; - else newEntry.ForegroundColor = Color.Empty; - if(m_cbCustomBackgroundColor.Checked) - newEntry.BackgroundColor = m_clrBackground; - else newEntry.BackgroundColor = Color.Empty; - - */ - - - newEntry.Strings.Set(PwDefs.TitleField, new ProtectedString(db.pm.MemoryProtection.ProtectTitle, - Util.getEditText(act, Resource.Id.entry_title))); - newEntry.Strings.Set(PwDefs.UserNameField, new ProtectedString(db.pm.MemoryProtection.ProtectUserName, - Util.getEditText(act, Resource.Id.entry_user_name))); - - String pass = Util.getEditText(act, Resource.Id.entry_password); - byte[] password = StrUtil.Utf8.GetBytes(pass); - newEntry.Strings.Set(PwDefs.PasswordField, new ProtectedString(db.pm.MemoryProtection.ProtectPassword, - password)); - MemUtil.ZeroByteArray(password); - - newEntry.Strings.Set(PwDefs.UrlField, new ProtectedString(db.pm.MemoryProtection.ProtectUrl, - Util.getEditText(act, Resource.Id.entry_url))); - newEntry.Strings.Set(PwDefs.NotesField, new ProtectedString(db.pm.MemoryProtection.ProtectNotes, - Util.getEditText(act, Resource.Id.entry_comment))); - - // Delete all non standard strings - var keys = newEntry.Strings.GetKeys(); - foreach (String key in keys) - if (PwDefs.IsStandardField(key) == false) - newEntry.Strings.Remove(key); - - LinearLayout container = (LinearLayout) FindViewById(Resource.Id.advanced_container); - - for (int index = 0; index < container.ChildCount; index++) { - View view = container.GetChildAt(index); - - TextView keyView = (TextView)view.FindViewById(Resource.Id.title); - String key = keyView.Text; - - TextView valueView = (TextView)view.FindViewById(Resource.Id.value); - String value = valueView.Text; - - CheckBox cb = (CheckBox)view.FindViewById(Resource.Id.protection); - bool protect = cb.Checked; - - newEntry.Strings.Set(key, new ProtectedString(protect, value)); - } - - newEntry.Binaries = mEntry.Binaries; - newEntry.Expires = mEntry.Expires; - if (newEntry.Expires) - { - newEntry.ExpiryTime = mEntry.ExpiryTime; - } - - newEntry.OverrideUrl = Util.getEditText(this,Resource.Id.entry_override_url); - - List vNewTags = StrUtil.StringToTags(Util.getEditText(this,Resource.Id.entry_tags)); - newEntry.Tags.Clear(); - foreach(string strTag in vNewTags) newEntry.AddTag(strTag); - - /*KPDesktop - - - m_atConfig.Enabled = m_cbAutoTypeEnabled.Checked; - m_atConfig.ObfuscationOptions = (m_cbAutoTypeObfuscation.Checked ? - AutoTypeObfuscationOptions.UseClipboard : - AutoTypeObfuscationOptions.None); - - SaveDefaultSeq(); - - newEntry.AutoType = m_atConfig; - */ - - - newEntry.Touch(true, false); // Touch *after* backup - - StrUtil.NormalizeNewLines(newEntry.Strings, true); - - bool bUndoBackup = false; - PwCompareOptions cmpOpt = (PwCompareOptions.NullEmptyEquivStd | - PwCompareOptions.IgnoreTimes); - if(bCreateBackup) cmpOpt |= PwCompareOptions.IgnoreLastBackup; - if(newEntry.EqualsEntry(initialEntry, cmpOpt, MemProtCmpMode.CustomOnly)) - { - // No modifications at all => restore last mod time and undo backup - newEntry.LastModificationTime = initialEntry.LastModificationTime; - bUndoBackup = bCreateBackup; - } - else if(bCreateBackup) - { - // If only history items have been modified (deleted) => undo - // backup, but without restoring the last mod time - PwCompareOptions cmpOptNH = (cmpOpt | PwCompareOptions.IgnoreHistory); - if(newEntry.EqualsEntry(initialEntry, cmpOptNH, MemProtCmpMode.CustomOnly)) - bUndoBackup = true; - } - if(bUndoBackup) newEntry.History.RemoveAt(newEntry.History.UCount - 1); - - newEntry.MaintainBackups(db.pm); - - - - //if ( newEntry.Strings.ReadSafe (PwDefs.TitleField).Equals(mEntry.Strings.ReadSafe (PwDefs.TitleField)) ) { - // SetResult(KeePass.EXIT_REFRESH); - //} else { - //it's safer to always update the title as we might add further information in the title like expiry etc. - SetResult(KeePass.EXIT_REFRESH_TITLE); - //} - - RunnableOnFinish task; - OnFinish onFinish = new AfterSave(new Handler(), act); - - if ( mIsNew ) { - task = AddEntry.getInstance(this, App.getDB(), newEntry, parentGroup, onFinish); - } else { - task = new UpdateEntry(this, App.getDB(), initialEntry, newEntry, onFinish); - } - ProgressTask pt = new ProgressTask(act, task, Resource.String.saving_database); - pt.run(); }; - // Respect mask password setting - if (mShowPassword) { + if (State.mShowPassword) { EditText pass = (EditText) FindViewById(Resource.Id.entry_password); EditText conf = (EditText) FindViewById(Resource.Id.entry_confpassword); @@ -354,41 +256,224 @@ namespace keepass2android addButton.Click += (object sender, EventArgs e) => { LinearLayout container = (LinearLayout) FindViewById(Resource.Id.advanced_container); - - EntryEditSection ees = (EntryEditSection) LayoutInflater.Inflate(Resource.Layout.entry_edit_section, null); - ees.setData("", new ProtectedString(false, "")); - ees.getDeleteButton().Click += (senderEes, eEes) => deleteAdvancedString((View)senderEes); + + KeyValuePair pair = new KeyValuePair("" , new ProtectedString(true, "")); + LinearLayout ees = CreateExtraStringView(pair); container.AddView(ees); - mEntryModified = true; + State.mEntryModified = true; - // Scroll bottom - scroll.Post(() => { - scroll.FullScroll(FocusSearchDirection.Down); - }); + TextView keyView = (TextView) ees.FindViewById(Resource.Id.title); + keyView.RequestFocus(); }; ((CheckBox)FindViewById(Resource.Id.entry_expires_checkbox)).CheckedChange += (object sender, CompoundButton.CheckedChangeEventArgs e) => { - mEntry.Expires = e.IsChecked; + State.mEntry.Expires = e.IsChecked; if (e.IsChecked) { - if (mEntry.ExpiryTime < DateTime.Now) - mEntry.ExpiryTime = DateTime.Now; + if (State.mEntry.ExpiryTime < DateTime.Now) + State.mEntry.ExpiryTime = DateTime.Now; } updateExpires(); - mEntryModified = true; + State.mEntryModified = true; }; + + + } + + void SaveEntry(OnFinish onFinish) + { + Database db = App.getDB(); + EntryEditActivity act = this; + if (!validateBeforeSaving()) + return; + + PwEntry initialEntry = State.mEntryInDatabase.CloneDeep(); + + PwEntry newEntry = State.mEntryInDatabase; + + //Clone history and re-assign: + newEntry.History = newEntry.History.CloneDeep(); + + //Based on KeePass Desktop + bool bCreateBackup = (!State.mIsNew); + if(bCreateBackup) newEntry.CreateBackup(null); + + if (State.mSelectedIcon == false) { + if (State.mIsNew) { + newEntry.IconId = PwIcon.Key; + } else { + // Keep previous icon, if no new one was selected + } + } + else { + newEntry.IconId = State.mSelectedIconID; + newEntry.CustomIconUuid = State.mSelectedCustomIconID; + } + /* KPDesktop + if(m_cbCustomForegroundColor.Checked) + newEntry.ForegroundColor = m_clrForeground; + else newEntry.ForegroundColor = Color.Empty; + if(m_cbCustomBackgroundColor.Checked) + newEntry.BackgroundColor = m_clrBackground; + else newEntry.BackgroundColor = Color.Empty; + + */ + + UpdateEntryFromUi(newEntry); + newEntry.Binaries = State.mEntry.Binaries; + newEntry.Expires = State.mEntry.Expires; + if (newEntry.Expires) + { + newEntry.ExpiryTime = State.mEntry.ExpiryTime; + } + + + newEntry.Touch(true, false); // Touch *after* backup + + StrUtil.NormalizeNewLines(newEntry.Strings, true); + + bool bUndoBackup = false; + PwCompareOptions cmpOpt = (PwCompareOptions.NullEmptyEquivStd | + PwCompareOptions.IgnoreTimes); + if(bCreateBackup) cmpOpt |= PwCompareOptions.IgnoreLastBackup; + if(newEntry.EqualsEntry(initialEntry, cmpOpt, MemProtCmpMode.CustomOnly)) + { + // No modifications at all => restore last mod time and undo backup + newEntry.LastModificationTime = initialEntry.LastModificationTime; + bUndoBackup = bCreateBackup; + } + else if(bCreateBackup) + { + // If only history items have been modified (deleted) => undo + // backup, but without restoring the last mod time + PwCompareOptions cmpOptNH = (cmpOpt | PwCompareOptions.IgnoreHistory); + if(newEntry.EqualsEntry(initialEntry, cmpOptNH, MemProtCmpMode.CustomOnly)) + bUndoBackup = true; + } + if(bUndoBackup) newEntry.History.RemoveAt(newEntry.History.UCount - 1); + + newEntry.MaintainBackups(db.pm); + + + + //if ( newEntry.Strings.ReadSafe (PwDefs.TitleField).Equals(State.mEntry.Strings.ReadSafe (PwDefs.TitleField)) ) { + // SetResult(KeePass.EXIT_REFRESH); + //} else { + //it's safer to always update the title as we might add further information in the title like expiry etc. + SetResult(KeePass.EXIT_REFRESH_TITLE); + //} + + RunnableOnFinish task; + + + if ( State.mIsNew ) { + task = AddEntry.getInstance(this, App.getDB(), newEntry, State.parentGroup, onFinish); + } else { + task = new UpdateEntry(this, App.getDB(), initialEntry, newEntry, onFinish); + } + ProgressTask pt = new ProgressTask(act, task, Resource.String.saving_database); + pt.run(); + + + } + + void UpdateEntryFromUi(PwEntry entry) + { + Database db = App.getDB(); + EntryEditActivity act = this; + + entry.Strings.Set(PwDefs.TitleField, new ProtectedString(db.pm.MemoryProtection.ProtectTitle, + Util.getEditText(act, Resource.Id.entry_title))); + entry.Strings.Set(PwDefs.UserNameField, new ProtectedString(db.pm.MemoryProtection.ProtectUserName, + Util.getEditText(act, Resource.Id.entry_user_name))); + + String pass = Util.getEditText(act, Resource.Id.entry_password); + byte[] password = StrUtil.Utf8.GetBytes(pass); + entry.Strings.Set(PwDefs.PasswordField, new ProtectedString(db.pm.MemoryProtection.ProtectPassword, + password)); + MemUtil.ZeroByteArray(password); + + entry.Strings.Set(PwDefs.UrlField, new ProtectedString(db.pm.MemoryProtection.ProtectUrl, + Util.getEditText(act, Resource.Id.entry_url))); + entry.Strings.Set(PwDefs.NotesField, new ProtectedString(db.pm.MemoryProtection.ProtectNotes, + Util.getEditText(act, Resource.Id.entry_comment))); + + // Validate expiry date + DateTime newExpiry = new DateTime(); + if ((State.mEntry.Expires) && (!DateTime.TryParse( Util.getEditText(this,Resource.Id.entry_expires), out newExpiry))) + { + //ignore here + } + else + { + State.mEntry.ExpiryTime = newExpiry; + } + + // Delete all non standard strings + var keys = entry.Strings.GetKeys(); + foreach (String key in keys) + if (PwDefs.IsStandardField(key) == false) + entry.Strings.Remove(key); + + LinearLayout container = (LinearLayout) FindViewById(Resource.Id.advanced_container); + + for (int index = 0; index < container.ChildCount; index++) { + View view = container.GetChildAt(index); + + TextView keyView = (TextView)view.FindViewById(Resource.Id.title); + String key = keyView.Text; + + if (String.IsNullOrEmpty(key)) + continue; + + TextView valueView = (TextView)view.FindViewById(Resource.Id.value); + String value = valueView.Text; + + CheckBox cb = (CheckBox)view.FindViewById(Resource.Id.protection); + + bool protect = true; + ProtectedString initialString = State.mEntryInDatabase.Strings.Get(key); + if (initialString != null) + protect = initialString.IsProtected; + if (cb != null) //Checkbox removed for ICS (for clarity) + { + protect = cb.Checked; + } + entry.Strings.Set(key, new ProtectedString(protect, value)); + } + + + entry.OverrideUrl = Util.getEditText(this,Resource.Id.entry_override_url); + + List vNewTags = StrUtil.StringToTags(Util.getEditText(this,Resource.Id.entry_tags)); + entry.Tags.Clear(); + foreach(string strTag in vNewTags) entry.AddTag(strTag); + + /*KPDesktop + + + m_atConfig.Enabled = m_cbAutoTypeEnabled.Checked; + m_atConfig.ObfuscationOptions = (m_cbAutoTypeObfuscation.Checked ? + AutoTypeObfuscationOptions.UseClipboard : + AutoTypeObfuscationOptions.None); + + SaveDefaultSeq(); + + newEntry.AutoType = m_atConfig; + */ + } void addBinaryOrAsk(string filename) { string strItem = UrlUtil.GetFileName(filename); - if(mEntry.Binaries.Get(strItem) != null) + if(State.mEntry.Binaries.Get(strItem) != null) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.SetTitle(GetString(Resource.String.AskOverwriteBinary_title)); @@ -429,7 +514,7 @@ namespace keepass2android while(true) { string strNewName = strFileName + nTry.ToString() + strExtension; - if(mEntry.Binaries.Get(strNewName) == null) + if(State.mEntry.Binaries.Get(strNewName) == null) { strItem = strNewName; break; @@ -444,20 +529,20 @@ namespace keepass2android if(vBytes != null) { ProtectedBinary pb = new ProtectedBinary(false, vBytes); - mEntry.Binaries.Set(strItem, pb); + State.mEntry.Binaries.Set(strItem, pb); } } catch(Exception exAttach) { Toast.MakeText(this, GetString(Resource.String.AttachFailed)+" "+exAttach.Message, ToastLength.Long).Show(); } - mEntryModified = true; + State.mEntryModified = true; populateBinaries(); } public override void OnBackPressed() { - if (mEntryModified == false) + if (State.mEntryModified == false) { base.OnBackPressed(); } else @@ -484,35 +569,50 @@ namespace keepass2android } } + + public void reload() { + //this reload ìs necessary to overcome a strange problem with the extra string fields which get lost + //somehow after re-creating the activity. Maybe a Mono for Android bug? + Intent intent = Intent; + intent.PutExtra(Intent_ContinueWithEditing, true); + OverridePendingTransition(0, 0); + intent.AddFlags(ActivityFlags.NoAnimation); + mCloseForReload = true; + SetResult(KeePass.EXIT_REFRESH_TITLE); //probably the entry will be modified -> let the EditActivity refresh to be safe + Finish(); + + OverridePendingTransition(0, 0); + StartActivity(intent); + } protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) { switch ((int)resultCode) { case RESULT_OK_ICON_PICKER: - mSelectedIconID = (PwIcon) data.Extras.GetInt(IconPickerActivity.KEY_ICON_ID); - mSelectedCustomIconID = PwUuid.Zero; + State.mSelectedIconID = (PwIcon) data.Extras.GetInt(IconPickerActivity.KEY_ICON_ID); + State.mSelectedCustomIconID = PwUuid.Zero; String customIconIdString = data.Extras.GetString(IconPickerActivity.KEY_CUSTOM_ICON_ID); if (!String.IsNullOrEmpty(customIconIdString)) - mSelectedCustomIconID = new PwUuid(MemUtil.HexStringToByteArray(customIconIdString)); - mSelectedIcon = true; - ImageButton currIconButton = (ImageButton) FindViewById(Resource.Id.icon_button); - //TODO: custom image - currIconButton.SetImageResource(Icons.iconToResId(mSelectedIconID)); - mEntryModified = true; + State.mSelectedCustomIconID = new PwUuid(MemUtil.HexStringToByteArray(customIconIdString)); + State.mSelectedIcon = true; + State.mEntryModified = true; + reload(); break; case RESULT_OK_PASSWORD_GENERATOR: String generatedPassword = data.GetStringExtra("keepass2android.password.generated_password"); - EditText password = (EditText) FindViewById(Resource.Id.entry_password); - EditText confPassword = (EditText) FindViewById(Resource.Id.entry_confpassword); - password.Text = generatedPassword; - confPassword.Text = generatedPassword; - mEntryModified = true; + byte[] password = StrUtil.Utf8.GetBytes(generatedPassword); + State.mEntry.Strings.Set(PwDefs.PasswordField, new ProtectedString(App.getDB().pm.MemoryProtection.ProtectPassword, + password)); + MemUtil.ZeroByteArray(password); + + State.mEntryModified = true; + reload(); break; case (int)Result.Ok: - if (requestCode == Intents.REQUEST_CODE_FILE_BROWSE) + if (requestCode == Intents.REQUEST_CODE_FILE_BROWSE_FOR_BINARY) { String filename = data.DataString; if (filename != null) { @@ -524,10 +624,12 @@ namespace keepass2android addBinaryOrAsk(filename); } } + reload(); break; case (int)Result.Canceled: + reload(); break; default: break; @@ -539,7 +641,7 @@ namespace keepass2android ViewGroup binariesGroup = (ViewGroup)FindViewById(Resource.Id.binaries); binariesGroup.RemoveAllViews(); RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FillParent, RelativeLayout.LayoutParams.WrapContent); - foreach (KeyValuePair pair in mEntry.Binaries) + foreach (KeyValuePair pair in State.mEntry.Binaries) { String key = pair.Key; Button binaryButton = new Button(this); @@ -548,9 +650,9 @@ namespace keepass2android binaryButton.SetCompoundDrawablesWithIntrinsicBounds( Resources.GetDrawable(Android.Resource.Drawable.IcMenuDelete),null, null, null); binaryButton.Click += (object sender, EventArgs e) => { - mEntryModified = true; + State.mEntryModified = true; Button btnSender = (Button)(sender); - mEntry.Binaries.Remove(key); + State.mEntry.Binaries.Remove(key); populateBinaries(); }; @@ -564,11 +666,14 @@ namespace keepass2android addBinaryButton.SetCompoundDrawablesWithIntrinsicBounds( Resources.GetDrawable(Android.Resource.Drawable.IcMenuAdd) , null, null, null); addBinaryButton.Click += (object sender, EventArgs e) => { - Util.showBrowseDialog("/mnt/sdcard", this); + Util.showBrowseDialog("/mnt/sdcard", this, Intents.REQUEST_CODE_FILE_BROWSE_FOR_BINARY); + }; binariesGroup.AddView(addBinaryButton,layoutParams); - FindViewById(Resource.Id.entry_binaries_label).Visibility = mEntry.Binaries.UCount > 0 ? ViewStates.Visible : ViewStates.Gone; + var binariesLabel = FindViewById(Resource.Id.entry_binaries_label); + if (binariesLabel != null) + binariesLabel.Visibility = State.mEntry.Binaries.UCount > 0 ? ViewStates.Visible : ViewStates.Gone; } public override bool OnCreateOptionsMenu(IMenu menu) { base.OnCreateOptionsMenu(menu); @@ -578,7 +683,7 @@ namespace keepass2android IMenuItem togglePassword = menu.FindItem(Resource.Id.menu_toggle_pass); - if ( mShowPassword ) { + if ( State.mShowPassword ) { togglePassword.SetTitle(Resource.String.menu_hide_password); } else { togglePassword.SetTitle(Resource.String.show_password); @@ -599,12 +704,12 @@ namespace keepass2android return true; case Resource.Id.menu_toggle_pass: - if ( mShowPassword ) { + if ( State.mShowPassword ) { item.SetTitle(Resource.String.show_password); - mShowPassword = false; + State.mShowPassword = false; } else { item.SetTitle(Resource.String.menu_hide_password); - mShowPassword = true; + State.mShowPassword = true; } setPasswordStyle(); return true; @@ -644,7 +749,7 @@ namespace keepass2android TextView password = (TextView) FindViewById(Resource.Id.entry_password); TextView confpassword = (TextView) FindViewById(Resource.Id.entry_confpassword); - if ( mShowPassword ) { + if ( State.mShowPassword ) { password.InputType = InputTypes.ClassText | InputTypes.TextVariationVisiblePassword; confpassword.InputType = InputTypes.ClassText | InputTypes.TextVariationVisiblePassword; @@ -656,52 +761,75 @@ namespace keepass2android void updateExpires() { - if (mEntry.Expires) + if (State.mEntry.Expires) { - populateText(Resource.Id.entry_expires, getDateTime(mEntry.ExpiryTime)); + populateText(Resource.Id.entry_expires, getDateTime(State.mEntry.ExpiryTime)); } else { populateText(Resource.Id.entry_expires, GetString(Resource.String.never)); } - ((CheckBox)FindViewById(Resource.Id.entry_expires_checkbox)).Checked = mEntry.Expires; - ((EditText)FindViewById(Resource.Id.entry_expires)).Enabled = mEntry.Expires; + ((CheckBox)FindViewById(Resource.Id.entry_expires_checkbox)).Checked = State.mEntry.Expires; + ((EditText)FindViewById(Resource.Id.entry_expires)).Enabled = State.mEntry.Expires; + } + + public override Java.Lang.Object OnRetainNonConfigurationInstance() + { + UpdateEntryFromUi(State.mEntry); + return this; + } + + LinearLayout CreateExtraStringView(KeyValuePair pair) + { + LinearLayout ees = (LinearLayout)LayoutInflater.Inflate(Resource.Layout.entry_edit_section, null); + ((TextView)ees.FindViewById(Resource.Id.title)).Text = pair.Key; + ((TextView)ees.FindViewById(Resource.Id.title)).TextChanged += (sender, e) => State.mEntryModified = true; + ((TextView)ees.FindViewById(Resource.Id.value)).Text = pair.Value.ReadString(); + ((TextView)ees.FindViewById(Resource.Id.value)).TextChanged += (sender, e) => State.mEntryModified = true; + ees.FindViewById(Resource.Id.delete).Click += (sender, e) => deleteAdvancedString((View)sender); + CheckBox cb = (CheckBox)ees.FindViewById(Resource.Id.protection); + if (cb != null) + { + cb.Checked = pair.Value.IsProtected; + cb.CheckedChange += (sender, e) => + { + State.mEntryModified = true; + }; + } + return ees; } private void fillData() { ImageButton currIconButton = (ImageButton) FindViewById(Resource.Id.icon_button); - App.getDB().drawFactory.assignDrawableTo(currIconButton, Resources, App.getDB().pm, mEntry.IconId, mEntry.CustomIconUuid); + App.getDB().drawFactory.assignDrawableTo(currIconButton, Resources, App.getDB().pm, State.mEntry.IconId, State.mEntry.CustomIconUuid); - populateText(Resource.Id.entry_title, mEntry.Strings.ReadSafe (PwDefs.TitleField)); - populateText(Resource.Id.entry_user_name, mEntry.Strings.ReadSafe (PwDefs.UserNameField)); - populateText(Resource.Id.entry_url, mEntry.Strings.ReadSafe (PwDefs.UrlField)); + populateText(Resource.Id.entry_title, State.mEntry.Strings.ReadSafe (PwDefs.TitleField)); + populateText(Resource.Id.entry_user_name, State.mEntry.Strings.ReadSafe (PwDefs.UserNameField)); + populateText(Resource.Id.entry_url, State.mEntry.Strings.ReadSafe (PwDefs.UrlField)); - String password = mEntry.Strings.ReadSafe(PwDefs.PasswordField); + String password = State.mEntry.Strings.ReadSafe(PwDefs.PasswordField); populateText(Resource.Id.entry_password, password); populateText(Resource.Id.entry_confpassword, password); setPasswordStyle(); - populateText(Resource.Id.entry_comment, mEntry.Strings.ReadSafe (PwDefs.NotesField)); + populateText(Resource.Id.entry_comment, State.mEntry.Strings.ReadSafe (PwDefs.NotesField)); LinearLayout container = (LinearLayout) FindViewById(Resource.Id.advanced_container); - foreach (var pair in mEntry.Strings) + foreach (var pair in State.mEntry.Strings) { String key = pair.Key; if (!PwDefs.IsStandardField(key)) { - EntryEditSection ees = (EntryEditSection) LayoutInflater.Inflate(Resource.Layout.entry_edit_section, null); - ees.setData(key, pair.Value); - ees.ContentChanged += (sender, e) => {mEntryModified=true;}; - ees.getDeleteButton().Click += (sender, e) => deleteAdvancedString((View)sender); + var ees = CreateExtraStringView(pair); container.AddView(ees); } } populateBinaries(); - populateText(Resource.Id.entry_override_url, mEntry.OverrideUrl); - populateText(Resource.Id.entry_tags, StrUtil.TagsToString(mEntry.Tags, true)); + populateText(Resource.Id.entry_override_url, State.mEntry.OverrideUrl); + populateText(Resource.Id.entry_tags, StrUtil.TagsToString(State.mEntry.Tags, true)); updateExpires(); } @@ -711,11 +839,11 @@ namespace keepass2android public void deleteAdvancedString(View view) { - EntryEditSection section = (EntryEditSection) view.Parent; + var section = view.Parent; LinearLayout container = (LinearLayout) FindViewById(Resource.Id.advanced_container); - mEntryModified = true; + State.mEntryModified = true; for (int i = 0; i < container.ChildCount; i++) { - EntryEditSection ees = (EntryEditSection) container.GetChildAt(i); + var ees = container.GetChildAt(i); if (ees == section) { container.RemoveViewAt(i); container.Invalidate(); @@ -743,20 +871,20 @@ namespace keepass2android // Validate expiry date DateTime newExpiry = new DateTime(); - if ((mEntry.Expires) && (!DateTime.TryParse( Util.getEditText(this,Resource.Id.entry_expires), out newExpiry))) + if ((State.mEntry.Expires) && (!DateTime.TryParse( Util.getEditText(this,Resource.Id.entry_expires), out newExpiry))) { Toast.MakeText(this, Resource.String.error_invalid_expiry_date, ToastLength.Long).Show(); return false; } else { - mEntry.ExpiryTime = newExpiry; + State.mEntry.ExpiryTime = newExpiry; } LinearLayout container = (LinearLayout) FindViewById(Resource.Id.advanced_container); for (int i = 0; i < container.ChildCount; i++) { - EntryEditSection ees = (EntryEditSection) container.GetChildAt(i); + View ees = container.GetChildAt(i); TextView keyView = (TextView) ees.FindViewById(Resource.Id.title); string key = keyView.Text; @@ -775,9 +903,18 @@ namespace keepass2android private void populateText(int viewId, String text) { TextView tv = (TextView) FindViewById(viewId); tv.Text = text; - tv.TextChanged += (sender, e) => {mEntryModified = true;}; + tv.TextChanged += (sender, e) => {State.mEntryModified = true;}; } - + + protected override void OnPause() + { + if (!mCloseForReload) + UpdateEntryFromUi(State.mEntry); + + base.OnPause(); + + } + private class AfterSave : OnFinish { Activity act; public AfterSave(Handler handler, Activity act): base(handler) { diff --git a/src/keepass2android/EntryEditActivityState.cs b/src/keepass2android/EntryEditActivityState.cs new file mode 100644 index 00000000..3e151b1e --- /dev/null +++ b/src/keepass2android/EntryEditActivityState.cs @@ -0,0 +1,37 @@ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using Android.App; +using Android.Content; +using Android.OS; +using Android.Runtime; +using Android.Views; +using Android.Widget; +using KeePassLib; + +namespace keepass2android +{ + /// + /// Holds the state of the EntrryEditActivity. This is required to be able to keep a partially modified entry in memory + /// through the App variable. Serializing this state (especially the mEntry/mEntryInDatabase) can be a performance problem + /// when there are big attachements. + /// + internal class EntryEditActivityState + { + internal PwEntry mEntry, mEntryInDatabase; + internal bool mShowPassword = false; + internal bool mIsNew; + internal PwIcon mSelectedIconID; + internal PwUuid mSelectedCustomIconID = PwUuid.Zero; + internal bool mSelectedIcon = false; + + internal PwGroup parentGroup; + + internal bool mEntryModified; + + } +} + diff --git a/src/keepass2android/GeneratePasswordActivity.cs b/src/keepass2android/GeneratePasswordActivity.cs index fb697d26..fa614020 100644 --- a/src/keepass2android/GeneratePasswordActivity.cs +++ b/src/keepass2android/GeneratePasswordActivity.cs @@ -67,7 +67,7 @@ namespace keepass2android - Button acceptButton = (Button) FindViewById(Resource.Id.accept_button); + View acceptButton = FindViewById(Resource.Id.accept_button); acceptButton.Click += (object sender, EventArgs e) => { EditText password = (EditText) FindViewById(Resource.Id.password); @@ -80,7 +80,7 @@ namespace keepass2android }; - Button cancelButton = (Button) FindViewById(Resource.Id.cancel_button); + View cancelButton = FindViewById(Resource.Id.cancel_button); cancelButton.Click += (object sender, EventArgs e) => { SetResult(Result.Canceled); diff --git a/src/keepass2android/GroupActivity.cs b/src/keepass2android/GroupActivity.cs index 363f5513..99e421e7 100644 --- a/src/keepass2android/GroupActivity.cs +++ b/src/keepass2android/GroupActivity.cs @@ -126,11 +126,9 @@ namespace keepass2android } else { SetContentView (new GroupViewOnlyView (this)); } - Log.Warn (TAG, "Set view"); - if (addGroupEnabled) { // Add Group button - Button addGroup = (Button)FindViewById (Resource.Id.add_group); + View addGroup = FindViewById (Resource.Id.add_group); addGroup.Click += (object sender, EventArgs e) => { GroupEditActivity.Launch (this, mGroup); }; @@ -138,7 +136,7 @@ namespace keepass2android if (addEntryEnabled) { // Add Entry button - Button addEntry = (Button)FindViewById (Resource.Id.add_entry); + View addEntry = FindViewById (Resource.Id.add_entry); addEntry.Click += (object sender, EventArgs e) => { EntryEditActivity.Launch (this, mGroup); diff --git a/src/keepass2android/GroupBaseActivity.cs b/src/keepass2android/GroupBaseActivity.cs index 046a2cc6..cbf28c44 100644 --- a/src/keepass2android/GroupBaseActivity.cs +++ b/src/keepass2android/GroupBaseActivity.cs @@ -29,6 +29,7 @@ using Android.Widget; using KeePassLib; using Android.Preferences; using keepass2android.view; +using Android.Graphics.Drawables; namespace keepass2android { @@ -115,42 +116,56 @@ namespace keepass2android protected void setGroupTitle() { - Button tv = (Button)FindViewById(Resource.Id.group_name); - if (tv == null) - return; - - if (mGroup != null) + String name = mGroup.Name; + String titleText; + bool clickable = (mGroup != null) && (mGroup.IsVirtual == false) && (mGroup.ParentGroup != null); + if (!String.IsNullOrEmpty(name)) { - String name = mGroup.Name; - if (!String.IsNullOrEmpty(name)) - { - tv.Text = name; - } else - { - tv.Text = GetText(Resource.String.root); - } - - - } - - if ((mGroup != null) && (mGroup.IsVirtual == false) && (mGroup.ParentGroup != null)) - { - tv.Click += (object sender, EventArgs e) => - { - Finish(); - }; + titleText = name; } else { - tv.SetCompoundDrawables(null, null, null, null); - tv.Clickable = false; + titleText = GetText(Resource.String.root); + } + + //see if the button for SDK Version < 11 is there + Button tv = (Button)FindViewById(Resource.Id.group_name); + if (tv != null) + { + if (mGroup != null) + { + tv.Text = titleText; + } + + if (clickable) + { + tv.Click += (object sender, EventArgs e) => + { + Finish(); + }; + } else + { + tv.SetCompoundDrawables(null, null, null, null); + tv.Clickable = false; + } + } + //ICS? + if (ActionBar != null) + { + ActionBar.Title = titleText; + if (clickable) + ActionBar.SetDisplayHomeAsUpEnabled(true); } } protected void setGroupIcon() { if (mGroup != null) { + Drawable drawable = App.getDB().drawFactory.getIconDrawable(Resources, App.getDB().pm, mGroup.IconId, mGroup.CustomIconUuid); ImageView iv = (ImageView) FindViewById(Resource.Id.icon); - App.getDB().drawFactory.assignDrawableTo(iv, Resources, App.getDB().pm, mGroup.IconId, mGroup.CustomIconUuid); + if (iv != null) + iv.SetImageDrawable(drawable); + if (ActionBar != null) + ActionBar.SetIcon(drawable); } } @@ -240,6 +255,12 @@ namespace keepass2android Toast.MakeText(this, Resource.String.no_url_handler, ToastLength.Long).Show(); } return true; + case Android.Resource.Id.Home: + //Currently the action bar only displays the home button when we come from a previous activity. + //So we can simply Finish. See this page for information on how to do this in more general (future?) cases: + //http://developer.android.com/training/implementing-navigation/ancestral.html + Finish(); + return true; } return base.OnOptionsItemSelected(item); diff --git a/src/keepass2android/PasswordActivity.cs b/src/keepass2android/PasswordActivity.cs index ba222c57..34ada2cb 100644 --- a/src/keepass2android/PasswordActivity.cs +++ b/src/keepass2android/PasswordActivity.cs @@ -266,7 +266,7 @@ namespace keepass2android unloadDatabase(); break; case Android.App.Result.Ok: - if (requestCode == Intents.REQUEST_CODE_FILE_BROWSE) { + if (requestCode == Intents.REQUEST_CODE_FILE_BROWSE_FOR_KEYFILE) { String filename = data.DataString; if (filename != null) { if (filename.StartsWith("file://")) { @@ -447,7 +447,7 @@ namespace keepass2android try { - StartActivityForResult(intent, Intents.REQUEST_CODE_FILE_BROWSE); + StartActivityForResult(intent, Intents.REQUEST_CODE_FILE_BROWSE_FOR_KEYFILE); } catch (ActivityNotFoundException) { BrowserDialog diag = new BrowserDialog(this); diff --git a/src/keepass2android/QuickUnlock.cs b/src/keepass2android/QuickUnlock.cs index 46f45f4e..c37e2d5d 100644 --- a/src/keepass2android/QuickUnlock.cs +++ b/src/keepass2android/QuickUnlock.cs @@ -55,7 +55,14 @@ namespace keepass2android SetContentView(Resource.Layout.QuickUnlock); - ((TextView)FindViewById(Resource.Id.qu_filename)).Text = mIoc.GetDisplayName(); + if (App.getDB().pm.Name != "") + { + FindViewById(Resource.Id.filename_label).Visibility = ViewStates.Invisible; + ((TextView)FindViewById(Resource.Id.qu_filename)).Text = App.getDB().pm.Name; + } else + { + ((TextView)FindViewById(Resource.Id.qu_filename)).Text = mIoc.Path; + } TextView txtLabel = (TextView)FindViewById(Resource.Id.QuickUnlock_label); diff --git a/src/keepass2android/Resources/Resource.designer.cs b/src/keepass2android/Resources/Resource.designer.cs index e52885c1..c31ecba2 100644 --- a/src/keepass2android/Resources/Resource.designer.cs +++ b/src/keepass2android/Resources/Resource.designer.cs @@ -105,6 +105,9 @@ namespace keepass2android // aapt resource value: 0x7f050001 public const int candidate_recommended = 2131034113; + // aapt resource value: 0x7f05000d + public const int dark_gray = 2131034125; + // aapt resource value: 0x7f050009 public const int emphasis = 2131034121; @@ -123,6 +126,9 @@ namespace keepass2android // aapt resource value: 0x7f050007 public const int icon_text = 2131034119; + // aapt resource value: 0x7f05000c + public const int light_gray = 2131034124; + private Color() { } @@ -158,301 +164,322 @@ namespace keepass2android public const int btn_new_group_dark = 2130837506; // aapt resource value: 0x7f020003 - public const int device_access_new_account = 2130837507; + public const int collections_collection = 2130837507; // aapt resource value: 0x7f020004 - public const int device_access_new_account_dark = 2130837508; + public const int collections_new_label = 2130837508; // aapt resource value: 0x7f020005 - public const int EntryFieldHeaderBackground = 2130837509; + public const int device_access_new_account = 2130837509; // aapt resource value: 0x7f020006 - public const int extra_string_header = 2130837510; + public const int device_access_new_account_dark = 2130837510; // aapt resource value: 0x7f020007 - public const int GreenButton = 2130837511; + public const int device_access_not_secure = 2130837511; // aapt resource value: 0x7f020008 - public const int HeaderButtonBackground = 2130837512; + public const int EntryFieldHeaderBackground = 2130837512; // aapt resource value: 0x7f020009 - public const int ic00 = 2130837513; + public const int extra_string_header = 2130837513; // aapt resource value: 0x7f02000a - public const int ic01 = 2130837514; + public const int GreenButton = 2130837514; // aapt resource value: 0x7f02000b - public const int ic02 = 2130837515; + public const int HeaderButtonBackground = 2130837515; // aapt resource value: 0x7f02000c - public const int ic03 = 2130837516; + public const int ic00 = 2130837516; // aapt resource value: 0x7f02000d - public const int ic04 = 2130837517; + public const int ic01 = 2130837517; // aapt resource value: 0x7f02000e - public const int ic05 = 2130837518; + public const int ic02 = 2130837518; // aapt resource value: 0x7f02000f - public const int ic06 = 2130837519; + public const int ic03 = 2130837519; // aapt resource value: 0x7f020010 - public const int ic07 = 2130837520; + public const int ic04 = 2130837520; // aapt resource value: 0x7f020011 - public const int ic08 = 2130837521; + public const int ic05 = 2130837521; // aapt resource value: 0x7f020012 - public const int ic09 = 2130837522; + public const int ic06 = 2130837522; // aapt resource value: 0x7f020013 - public const int ic10 = 2130837523; + public const int ic07 = 2130837523; // aapt resource value: 0x7f020014 - public const int ic11 = 2130837524; + public const int ic08 = 2130837524; // aapt resource value: 0x7f020015 - public const int ic12 = 2130837525; + public const int ic09 = 2130837525; // aapt resource value: 0x7f020016 - public const int ic13 = 2130837526; + public const int ic10 = 2130837526; // aapt resource value: 0x7f020017 - public const int ic14 = 2130837527; + public const int ic11 = 2130837527; // aapt resource value: 0x7f020018 - public const int ic15 = 2130837528; + public const int ic12 = 2130837528; // aapt resource value: 0x7f020019 - public const int ic16 = 2130837529; + public const int ic13 = 2130837529; // aapt resource value: 0x7f02001a - public const int ic17 = 2130837530; + public const int ic14 = 2130837530; // aapt resource value: 0x7f02001b - public const int ic18 = 2130837531; + public const int ic15 = 2130837531; // aapt resource value: 0x7f02001c - public const int ic19 = 2130837532; + public const int ic16 = 2130837532; // aapt resource value: 0x7f02001d - public const int ic20 = 2130837533; + public const int ic17 = 2130837533; // aapt resource value: 0x7f02001e - public const int ic21 = 2130837534; + public const int ic18 = 2130837534; // aapt resource value: 0x7f02001f - public const int ic22 = 2130837535; + public const int ic19 = 2130837535; // aapt resource value: 0x7f020020 - public const int ic23 = 2130837536; + public const int ic20 = 2130837536; // aapt resource value: 0x7f020021 - public const int ic24 = 2130837537; + public const int ic21 = 2130837537; // aapt resource value: 0x7f020022 - public const int ic25 = 2130837538; + public const int ic22 = 2130837538; // aapt resource value: 0x7f020023 - public const int ic26 = 2130837539; + public const int ic23 = 2130837539; // aapt resource value: 0x7f020024 - public const int ic27 = 2130837540; + public const int ic24 = 2130837540; // aapt resource value: 0x7f020025 - public const int ic28 = 2130837541; + public const int ic25 = 2130837541; // aapt resource value: 0x7f020026 - public const int ic29 = 2130837542; + public const int ic26 = 2130837542; // aapt resource value: 0x7f020027 - public const int ic30 = 2130837543; + public const int ic27 = 2130837543; // aapt resource value: 0x7f020028 - public const int ic31 = 2130837544; + public const int ic28 = 2130837544; // aapt resource value: 0x7f020029 - public const int ic32 = 2130837545; + public const int ic29 = 2130837545; // aapt resource value: 0x7f02002a - public const int ic33 = 2130837546; + public const int ic30 = 2130837546; // aapt resource value: 0x7f02002b - public const int ic34 = 2130837547; + public const int ic31 = 2130837547; // aapt resource value: 0x7f02002c - public const int ic35 = 2130837548; + public const int ic32 = 2130837548; // aapt resource value: 0x7f02002d - public const int ic36 = 2130837549; + public const int ic33 = 2130837549; // aapt resource value: 0x7f02002e - public const int ic37 = 2130837550; + public const int ic34 = 2130837550; // aapt resource value: 0x7f02002f - public const int ic38 = 2130837551; + public const int ic35 = 2130837551; // aapt resource value: 0x7f020030 - public const int ic39 = 2130837552; + public const int ic36 = 2130837552; // aapt resource value: 0x7f020031 - public const int ic40 = 2130837553; + public const int ic37 = 2130837553; // aapt resource value: 0x7f020032 - public const int ic41 = 2130837554; + public const int ic38 = 2130837554; // aapt resource value: 0x7f020033 - public const int ic42 = 2130837555; + public const int ic39 = 2130837555; // aapt resource value: 0x7f020034 - public const int ic43 = 2130837556; + public const int ic40 = 2130837556; // aapt resource value: 0x7f020035 - public const int ic44 = 2130837557; + public const int ic41 = 2130837557; // aapt resource value: 0x7f020036 - public const int ic45 = 2130837558; + public const int ic42 = 2130837558; // aapt resource value: 0x7f020037 - public const int ic46 = 2130837559; + public const int ic43 = 2130837559; // aapt resource value: 0x7f020038 - public const int ic47 = 2130837560; + public const int ic44 = 2130837560; // aapt resource value: 0x7f020039 - public const int ic48 = 2130837561; + public const int ic45 = 2130837561; // aapt resource value: 0x7f02003a - public const int ic49 = 2130837562; + public const int ic46 = 2130837562; // aapt resource value: 0x7f02003b - public const int ic50 = 2130837563; + public const int ic47 = 2130837563; // aapt resource value: 0x7f02003c - public const int ic51 = 2130837564; + public const int ic48 = 2130837564; // aapt resource value: 0x7f02003d - public const int ic52 = 2130837565; + public const int ic49 = 2130837565; // aapt resource value: 0x7f02003e - public const int ic53 = 2130837566; + public const int ic50 = 2130837566; // aapt resource value: 0x7f02003f - public const int ic54 = 2130837567; + public const int ic51 = 2130837567; // aapt resource value: 0x7f020040 - public const int ic55 = 2130837568; + public const int ic52 = 2130837568; // aapt resource value: 0x7f020041 - public const int ic56 = 2130837569; + public const int ic53 = 2130837569; // aapt resource value: 0x7f020042 - public const int ic57 = 2130837570; + public const int ic54 = 2130837570; // aapt resource value: 0x7f020043 - public const int ic58 = 2130837571; + public const int ic55 = 2130837571; // aapt resource value: 0x7f020044 - public const int ic59 = 2130837572; + public const int ic56 = 2130837572; // aapt resource value: 0x7f020045 - public const int ic60 = 2130837573; + public const int ic57 = 2130837573; // aapt resource value: 0x7f020046 - public const int ic61 = 2130837574; + public const int ic58 = 2130837574; // aapt resource value: 0x7f020047 - public const int ic62 = 2130837575; + public const int ic59 = 2130837575; // aapt resource value: 0x7f020048 - public const int ic63 = 2130837576; + public const int ic60 = 2130837576; // aapt resource value: 0x7f020049 - public const int ic64 = 2130837577; + public const int ic61 = 2130837577; // aapt resource value: 0x7f02004a - public const int ic65 = 2130837578; + public const int ic62 = 2130837578; // aapt resource value: 0x7f02004b - public const int ic66 = 2130837579; + public const int ic63 = 2130837579; // aapt resource value: 0x7f02004c - public const int ic67 = 2130837580; + public const int ic64 = 2130837580; // aapt resource value: 0x7f02004d - public const int ic68 = 2130837581; + public const int ic65 = 2130837581; // aapt resource value: 0x7f02004e - public const int ic99_blank = 2130837582; + public const int ic66 = 2130837582; // aapt resource value: 0x7f02004f - public const int ic_action_eye_open = 2130837583; + public const int ic67 = 2130837583; // aapt resource value: 0x7f020050 - public const int ic_action_search = 2130837584; + public const int ic68 = 2130837584; // aapt resource value: 0x7f020051 - public const int ic_launcher = 2130837585; + public const int ic99_blank = 2130837585; // aapt resource value: 0x7f020052 - public const int ic_launcher_folder_small = 2130837586; + public const int ic_action_eye_open = 2130837586; // aapt resource value: 0x7f020053 - public const int ic_launcher_gray = 2130837587; + public const int ic_action_search = 2130837587; // aapt resource value: 0x7f020054 - public const int ic_menu_view = 2130837588; + public const int ic_launcher = 2130837588; // aapt resource value: 0x7f020055 - public const int navigation_accept = 2130837589; + public const int ic_launcher_folder_small = 2130837589; // aapt resource value: 0x7f020056 - public const int navigation_accept_dark = 2130837590; + public const int ic_launcher_gray = 2130837590; // aapt resource value: 0x7f020057 - public const int navigation_previous_item = 2130837591; + public const int ic_menu_add_field_holo_light = 2130837591; // aapt resource value: 0x7f020058 - public const int navigation_previous_item_dark = 2130837592; + public const int ic_menu_remove_field_holo_light = 2130837592; // aapt resource value: 0x7f020059 - public const int notify = 2130837593; + public const int ic_menu_view = 2130837593; // aapt resource value: 0x7f02005a - public const int notify_keyboard = 2130837594; + public const int location_web_site = 2130837594; // aapt resource value: 0x7f02005b - public const int RedButton = 2130837595; + public const int navigation_accept = 2130837595; // aapt resource value: 0x7f02005c - public const int section_header = 2130837596; + public const int navigation_accept_dark = 2130837596; // aapt resource value: 0x7f02005d - public const int sym_keyboard = 2130837597; + public const int navigation_cancel = 2130837597; // aapt resource value: 0x7f02005e - public const int sym_keyboard_delete = 2130837598; + public const int navigation_previous_item = 2130837598; // aapt resource value: 0x7f02005f - public const int sym_keyboard_done = 2130837599; + public const int navigation_previous_item_dark = 2130837599; // aapt resource value: 0x7f020060 - public const int sym_keyboard_kp2a = 2130837600; + public const int notify = 2130837600; // aapt resource value: 0x7f020061 - public const int sym_keyboard_return = 2130837601; + public const int notify_keyboard = 2130837601; // aapt resource value: 0x7f020062 - public const int sym_keyboard_search = 2130837602; + public const int RedButton = 2130837602; // aapt resource value: 0x7f020063 - public const int sym_keyboard_shift = 2130837603; + public const int section_header = 2130837603; // aapt resource value: 0x7f020064 - public const int sym_keyboard_space = 2130837604; + public const int sym_keyboard = 2130837604; // aapt resource value: 0x7f020065 - public const int YellowButton = 2130837605; + public const int sym_keyboard_delete = 2130837605; + + // aapt resource value: 0x7f020066 + public const int sym_keyboard_done = 2130837606; + + // aapt resource value: 0x7f020067 + public const int sym_keyboard_kp2a = 2130837607; + + // aapt resource value: 0x7f020068 + public const int sym_keyboard_return = 2130837608; + + // aapt resource value: 0x7f020069 + public const int sym_keyboard_search = 2130837609; + + // aapt resource value: 0x7f02006a + public const int sym_keyboard_shift = 2130837610; + + // aapt resource value: 0x7f02006b + public const int sym_keyboard_space = 2130837611; + + // aapt resource value: 0x7f02006c + public const int YellowButton = 2130837612; private Drawable() { @@ -465,26 +492,26 @@ namespace keepass2android // aapt resource value: 0x7f0c000a public const int Credit = 2131492874; - // aapt resource value: 0x7f0c0070 - public const int IconGridView = 2131492976; + // aapt resource value: 0x7f0c0071 + public const int IconGridView = 2131492977; - // aapt resource value: 0x7f0c007e - public const int QuickUnlock_button = 2131492990; + // aapt resource value: 0x7f0c0081 + public const int QuickUnlock_button = 2131492993; + + // aapt resource value: 0x7f0c0082 + public const int QuickUnlock_buttonLock = 2131492994; // aapt resource value: 0x7f0c007f - public const int QuickUnlock_buttonLock = 2131492991; + public const int QuickUnlock_label = 2131492991; - // aapt resource value: 0x7f0c007c - public const int QuickUnlock_label = 2131492988; + // aapt resource value: 0x7f0c0080 + public const int QuickUnlock_password = 2131492992; - // aapt resource value: 0x7f0c007d - public const int QuickUnlock_password = 2131492989; + // aapt resource value: 0x7f0c0055 + public const int RelativeLayout = 2131492949; // aapt resource value: 0x7f0c0054 - public const int RelativeLayout = 2131492948; - - // aapt resource value: 0x7f0c0053 - public const int ScrollView = 2131492947; + public const int ScrollView = 2131492948; // aapt resource value: 0x7f0c0009 public const int about_button = 2131492873; @@ -492,8 +519,8 @@ namespace keepass2android // aapt resource value: 0x7f0c0000 public const int about_title = 2131492864; - // aapt resource value: 0x7f0c0051 - public const int accept_button = 2131492945; + // aapt resource value: 0x7f0c0052 + public const int accept_button = 2131492946; // aapt resource value: 0x7f0c0024 public const int add_advanced = 2131492900; @@ -516,98 +543,98 @@ namespace keepass2android // aapt resource value: 0x7f0c0050 public const int bottom_layout = 2131492944; - // aapt resource value: 0x7f0c0048 - public const int browse_button = 2131492936; - - // aapt resource value: 0x7f0c0059 - public const int btn_length12 = 2131492953; - - // aapt resource value: 0x7f0c0058 - public const int btn_length16 = 2131492952; - - // aapt resource value: 0x7f0c005b - public const int btn_length6 = 2131492955; + // aapt resource value: 0x7f0c004b + public const int browse_button = 2131492939; // aapt resource value: 0x7f0c005a - public const int btn_length8 = 2131492954; + public const int btn_length12 = 2131492954; + + // aapt resource value: 0x7f0c0059 + public const int btn_length16 = 2131492953; + + // aapt resource value: 0x7f0c005c + public const int btn_length6 = 2131492956; + + // aapt resource value: 0x7f0c005b + public const int btn_length8 = 2131492955; // aapt resource value: 0x7f0c000e public const int cancel = 2131492878; - // aapt resource value: 0x7f0c0052 - public const int cancel_button = 2131492946; + // aapt resource value: 0x7f0c0053 + public const int cancel_button = 2131492947; - // aapt resource value: 0x7f0c008f - public const int cbCaseSensitive = 2131493007; + // aapt resource value: 0x7f0c0092 + public const int cbCaseSensitive = 2131493010; - // aapt resource value: 0x7f0c0090 - public const int cbExcludeExpiredEntries = 2131493008; - - // aapt resource value: 0x7f0c0085 - public const int cbRegEx = 2131492997; - - // aapt resource value: 0x7f0c008e - public const int cbSearchInGroupName = 2131493006; - - // aapt resource value: 0x7f0c008b - public const int cbSearchInNotes = 2131493003; - - // aapt resource value: 0x7f0c008c - public const int cbSearchInOtherStrings = 2131493004; - - // aapt resource value: 0x7f0c008a - public const int cbSearchInPassword = 2131493002; - - // aapt resource value: 0x7f0c008d - public const int cbSearchInTags = 2131493005; - - // aapt resource value: 0x7f0c0087 - public const int cbSearchInTitle = 2131492999; + // aapt resource value: 0x7f0c0093 + public const int cbExcludeExpiredEntries = 2131493011; // aapt resource value: 0x7f0c0088 - public const int cbSearchInUrl = 2131493000; + public const int cbRegEx = 2131493000; - // aapt resource value: 0x7f0c0089 - public const int cbSearchInUsername = 2131493001; + // aapt resource value: 0x7f0c0091 + public const int cbSearchInGroupName = 2131493009; - // aapt resource value: 0x7f0c0064 - public const int cb_brackets = 2131492964; + // aapt resource value: 0x7f0c008e + public const int cbSearchInNotes = 2131493006; - // aapt resource value: 0x7f0c005f - public const int cb_digits = 2131492959; + // aapt resource value: 0x7f0c008f + public const int cbSearchInOtherStrings = 2131493007; - // aapt resource value: 0x7f0c005e - public const int cb_lowercase = 2131492958; + // aapt resource value: 0x7f0c008d + public const int cbSearchInPassword = 2131493005; + + // aapt resource value: 0x7f0c0090 + public const int cbSearchInTags = 2131493008; + + // aapt resource value: 0x7f0c008a + public const int cbSearchInTitle = 2131493002; + + // aapt resource value: 0x7f0c008b + public const int cbSearchInUrl = 2131493003; + + // aapt resource value: 0x7f0c008c + public const int cbSearchInUsername = 2131493004; + + // aapt resource value: 0x7f0c0065 + public const int cb_brackets = 2131492965; // aapt resource value: 0x7f0c0060 - public const int cb_minus = 2131492960; + public const int cb_digits = 2131492960; - // aapt resource value: 0x7f0c0062 - public const int cb_space = 2131492962; - - // aapt resource value: 0x7f0c0063 - public const int cb_specials = 2131492963; + // aapt resource value: 0x7f0c005f + public const int cb_lowercase = 2131492959; // aapt resource value: 0x7f0c0061 - public const int cb_underline = 2131492961; + public const int cb_minus = 2131492961; - // aapt resource value: 0x7f0c005d - public const int cb_uppercase = 2131492957; + // aapt resource value: 0x7f0c0063 + public const int cb_space = 2131492963; - // aapt resource value: 0x7f0c004b - public const int create = 2131492939; + // aapt resource value: 0x7f0c0064 + public const int cb_specials = 2131492964; - // aapt resource value: 0x7f0c0095 - public const int cred_password = 2131493013; + // aapt resource value: 0x7f0c0062 + public const int cb_underline = 2131492962; - // aapt resource value: 0x7f0c0096 - public const int cred_remember_mode = 2131493014; + // aapt resource value: 0x7f0c005e + public const int cb_uppercase = 2131492958; - // aapt resource value: 0x7f0c0094 - public const int cred_username = 2131493012; + // aapt resource value: 0x7f0c004e + public const int create = 2131492942; - // aapt resource value: 0x7f0c0079 - public const int default_database = 2131492985; + // aapt resource value: 0x7f0c0098 + public const int cred_password = 2131493016; + + // aapt resource value: 0x7f0c0099 + public const int cred_remember_mode = 2131493017; + + // aapt resource value: 0x7f0c0097 + public const int cred_username = 2131493015; + + // aapt resource value: 0x7f0c007a + public const int default_database = 2131492986; // aapt resource value: 0x7f0c0030 public const int delete = 2131492912; @@ -627,14 +654,14 @@ namespace keepass2android // aapt resource value: 0x7f0c0032 public const int divider_comment = 2131492914; - // aapt resource value: 0x7f0c007a - public const int enable_quickunlock = 2131492986; + // aapt resource value: 0x7f0c007b + public const int enable_quickunlock = 2131492987; + + // aapt resource value: 0x7f0c0042 + public const int entry_accessed = 2131492930; // aapt resource value: 0x7f0c0041 - public const int entry_accessed = 2131492929; - - // aapt resource value: 0x7f0c0040 - public const int entry_accessed_label = 2131492928; + public const int entry_accessed_label = 2131492929; // aapt resource value: 0x7f0c0025 public const int entry_binaries_label = 2131492901; @@ -654,11 +681,11 @@ namespace keepass2android // aapt resource value: 0x7f0c0039 public const int entry_contents = 2131492921; - // aapt resource value: 0x7f0c003d - public const int entry_created = 2131492925; + // aapt resource value: 0x7f0c003e + public const int entry_created = 2131492926; - // aapt resource value: 0x7f0c003c - public const int entry_created_label = 2131492924; + // aapt resource value: 0x7f0c003d + public const int entry_created_label = 2131492925; // aapt resource value: 0x7f0c0038 public const int entry_divider2 = 2131492920; @@ -681,11 +708,11 @@ namespace keepass2android // aapt resource value: 0x7f0c0033 public const int entry_icon = 2131492915; - // aapt resource value: 0x7f0c003f - public const int entry_modified = 2131492927; + // aapt resource value: 0x7f0c0040 + public const int entry_modified = 2131492928; - // aapt resource value: 0x7f0c003e - public const int entry_modified_label = 2131492926; + // aapt resource value: 0x7f0c003f + public const int entry_modified_label = 2131492927; // aapt resource value: 0x7f0c002a public const int entry_override_url = 2131492906; @@ -708,8 +735,8 @@ namespace keepass2android // aapt resource value: 0x7f0c0013 public const int entry_scroll = 2131492883; - // aapt resource value: 0x7f0c003a - public const int entry_table = 2131492922; + // aapt resource value: 0x7f0c003b + public const int entry_table = 2131492923; // aapt resource value: 0x7f0c0028 public const int entry_tags = 2131492904; @@ -738,71 +765,71 @@ namespace keepass2android // aapt resource value: 0x7f0c0017 public const int entry_user_name_label = 2131492887; - // aapt resource value: 0x7f0c003b - public const int extra_strings = 2131492923; + // aapt resource value: 0x7f0c003c + public const int extra_strings = 2131492924; // aapt resource value: 0x7f0c0006 public const int feedback = 2131492870; - // aapt resource value: 0x7f0c0042 - public const int file_filename = 2131492930; - // aapt resource value: 0x7f0c0043 - public const int file_listtop = 2131492931; + public const int file_filename = 2131492931; // aapt resource value: 0x7f0c0044 - public const int file_select = 2131492932; + public const int file_listtop = 2131492932; - // aapt resource value: 0x7f0c0074 - public const int filename = 2131492980; + // aapt resource value: 0x7f0c0051 + public const int file_select = 2131492945; - // aapt resource value: 0x7f0c0045 - public const int filename_form = 2131492933; + // aapt resource value: 0x7f0c0075 + public const int filename = 2131492981; - // aapt resource value: 0x7f0c0072 - public const int filename_label = 2131492978; + // aapt resource value: 0x7f0c0049 + public const int filename_form = 2131492937; // aapt resource value: 0x7f0c0073 - public const int filenamescroll = 2131492979; + public const int filename_label = 2131492979; - // aapt resource value: 0x7f0c004c - public const int fnv_cancel = 2131492940; + // aapt resource value: 0x7f0c0074 + public const int filenamescroll = 2131492980; + + // aapt resource value: 0x7f0c004f + public const int fnv_cancel = 2131492943; // aapt resource value: 0x7f0c001c public const int generate_button = 2131492892; - // aapt resource value: 0x7f0c0056 - public const int generate_password_button = 2131492950; + // aapt resource value: 0x7f0c0057 + public const int generate_password_button = 2131492951; - // aapt resource value: 0x7f0c0065 - public const int group_header = 2131492965; + // aapt resource value: 0x7f0c006a + public const int group_header = 2131492970; - // aapt resource value: 0x7f0c006b - public const int group_icon = 2131492971; + // aapt resource value: 0x7f0c006c + public const int group_icon = 2131492972; - // aapt resource value: 0x7f0c006d - public const int group_label = 2131492973; + // aapt resource value: 0x7f0c006e + public const int group_label = 2131492974; // aapt resource value: 0x7f0c0068 public const int group_name = 2131492968; - // aapt resource value: 0x7f0c006c - public const int group_text = 2131492972; + // aapt resource value: 0x7f0c006d + public const int group_text = 2131492973; // aapt resource value: 0x7f0c0005 public const int homepage = 2131492869; - // aapt resource value: 0x7f0c006a - public const int icon = 2131492970; + // aapt resource value: 0x7f0c006b + public const int icon = 2131492971; // aapt resource value: 0x7f0c0015 public const int icon_button = 2131492885; - // aapt resource value: 0x7f0c006e - public const int icon_image = 2131492974; - // aapt resource value: 0x7f0c006f - public const int icon_text = 2131492975; + public const int icon_image = 2131492975; + + // aapt resource value: 0x7f0c0070 + public const int icon_text = 2131492976; // aapt resource value: 0x7f0c000c public const int install_market = 2131492876; @@ -810,95 +837,101 @@ namespace keepass2android // aapt resource value: 0x7f0c000d public const int install_web = 2131492877; - // aapt resource value: 0x7f0c0071 - public const int keyboard = 2131492977; + // aapt resource value: 0x7f0c0072 + public const int keyboard = 2131492978; - // aapt resource value: 0x7f0c0047 - public const int label_open_by_filename = 2131492935; + // aapt resource value: 0x7f0c007d + public const int keyfileLine = 2131492989; - // aapt resource value: 0x7f0c0049 - public const int label_open_by_filename_details = 2131492937; + // aapt resource value: 0x7f0c004a + public const int label_open_by_filename = 2131492938; - // aapt resource value: 0x7f0c0046 - public const int label_warning = 2131492934; + // aapt resource value: 0x7f0c004c + public const int label_open_by_filename_details = 2131492940; - // aapt resource value: 0x7f0c005c - public const int length = 2131492956; + // aapt resource value: 0x7f0c0045 + public const int label_warning = 2131492933; - // aapt resource value: 0x7f0c0057 - public const int length_label = 2131492951; + // aapt resource value: 0x7f0c005d + public const int length = 2131492957; - // aapt resource value: 0x7f0c0084 - public const int linearLayout1 = 2131492996; + // aapt resource value: 0x7f0c0058 + public const int length_label = 2131492952; - // aapt resource value: 0x7f0c00a0 - public const int menu_about = 2131493024; - - // aapt resource value: 0x7f0c009f - public const int menu_app_settings = 2131493023; - - // aapt resource value: 0x7f0c009e - public const int menu_cancel_edit = 2131493022; - - // aapt resource value: 0x7f0c00a2 - public const int menu_change_master_key = 2131493026; - - // aapt resource value: 0x7f0c0097 - public const int menu_donate = 2131493015; - - // aapt resource value: 0x7f0c0099 - public const int menu_goto_url = 2131493017; - - // aapt resource value: 0x7f0c009a - public const int menu_lock = 2131493018; - - // aapt resource value: 0x7f0c009c - public const int menu_rate = 2131493020; - - // aapt resource value: 0x7f0c00a1 - public const int menu_search = 2131493025; + // aapt resource value: 0x7f0c0087 + public const int linearLayout1 = 2131492999; // aapt resource value: 0x7f0c00a3 - public const int menu_sort = 2131493027; + public const int menu_about = 2131493027; - // aapt resource value: 0x7f0c009b - public const int menu_suggest_improvements = 2131493019; + // aapt resource value: 0x7f0c00a2 + public const int menu_app_settings = 2131493026; - // aapt resource value: 0x7f0c0098 - public const int menu_toggle_pass = 2131493016; + // aapt resource value: 0x7f0c00a1 + public const int menu_cancel_edit = 2131493025; + + // aapt resource value: 0x7f0c00a5 + public const int menu_change_master_key = 2131493029; + + // aapt resource value: 0x7f0c009a + public const int menu_donate = 2131493018; + + // aapt resource value: 0x7f0c009c + public const int menu_goto_url = 2131493020; // aapt resource value: 0x7f0c009d - public const int menu_translate = 2131493021; + public const int menu_lock = 2131493021; + + // aapt resource value: 0x7f0c009f + public const int menu_rate = 2131493023; + + // aapt resource value: 0x7f0c00a4 + public const int menu_search = 2131493028; + + // aapt resource value: 0x7f0c00a6 + public const int menu_sort = 2131493030; + + // aapt resource value: 0x7f0c009e + public const int menu_suggest_improvements = 2131493022; + + // aapt resource value: 0x7f0c009b + public const int menu_toggle_pass = 2131493019; + + // aapt resource value: 0x7f0c00a0 + public const int menu_translate = 2131493024; // aapt resource value: 0x7f0c0069 public const int ok = 2131492969; - // aapt resource value: 0x7f0c004a - public const int open = 2131492938; + // aapt resource value: 0x7f0c004d + public const int open = 2131492941; - // aapt resource value: 0x7f0c0092 - public const int pass_conf_password = 2131493010; - - // aapt resource value: 0x7f0c0077 - public const int pass_keyfile = 2131492983; + // aapt resource value: 0x7f0c0095 + public const int pass_conf_password = 2131493013; // aapt resource value: 0x7f0c0078 - public const int pass_ok = 2131492984; + public const int pass_keyfile = 2131492984; - // aapt resource value: 0x7f0c0091 - public const int pass_password = 2131493009; + // aapt resource value: 0x7f0c0079 + public const int pass_ok = 2131492985; - // aapt resource value: 0x7f0c0055 - public const int password = 2131492949; + // aapt resource value: 0x7f0c0094 + public const int pass_password = 2131493012; - // aapt resource value: 0x7f0c0075 - public const int password_label = 2131492981; + // aapt resource value: 0x7f0c0056 + public const int password = 2131492950; + + // aapt resource value: 0x7f0c007c + public const int passwordLine = 2131492988; + + // aapt resource value: 0x7f0c0076 + public const int password_label = 2131492982; // aapt resource value: 0x7f0c002f public const int protection = 2131492911; - // aapt resource value: 0x7f0c007b - public const int qu_filename = 2131492987; + // aapt resource value: 0x7f0c007e + public const int qu_filename = 2131492990; // aapt resource value: 0x7f0c000f public const int rounds = 2131492879; @@ -906,32 +939,32 @@ namespace keepass2android // aapt resource value: 0x7f0c0010 public const int rounds_explaination = 2131492880; - // aapt resource value: 0x7f0c0083 - public const int scrollView1 = 2131492995; - - // aapt resource value: 0x7f0c0082 - public const int searchEditText = 2131492994; - - // aapt resource value: 0x7f0c0081 - public const int search_button = 2131492993; - // aapt resource value: 0x7f0c0086 - public const int search_in_label = 2131492998; + public const int scrollView1 = 2131492998; - // aapt resource value: 0x7f0c0080 - public const int search_label = 2131492992; + // aapt resource value: 0x7f0c0085 + public const int searchEditText = 2131492997; - // aapt resource value: 0x7f0c004f - public const int start_create = 2131492943; + // aapt resource value: 0x7f0c0084 + public const int search_button = 2131492996; - // aapt resource value: 0x7f0c0093 - public const int start_create_import = 2131493011; + // aapt resource value: 0x7f0c0089 + public const int search_in_label = 2131493001; - // aapt resource value: 0x7f0c004d - public const int start_open_file = 2131492941; + // aapt resource value: 0x7f0c0083 + public const int search_label = 2131492995; - // aapt resource value: 0x7f0c004e - public const int start_open_url = 2131492942; + // aapt resource value: 0x7f0c0048 + public const int start_create = 2131492936; + + // aapt resource value: 0x7f0c0096 + public const int start_create_import = 2131493014; + + // aapt resource value: 0x7f0c0046 + public const int start_open_file = 2131492934; + + // aapt resource value: 0x7f0c0047 + public const int start_open_url = 2131492935; // aapt resource value: 0x7f0c000b public const int text = 2131492875; @@ -942,8 +975,11 @@ namespace keepass2android // aapt resource value: 0x7f0c0035 public const int title_block = 2131492917; - // aapt resource value: 0x7f0c0076 - public const int toggle_password = 2131492982; + // aapt resource value: 0x7f0c0077 + public const int toggle_password = 2131492983; + + // aapt resource value: 0x7f0c003a + public const int top = 2131492922; // aapt resource value: 0x7f0c0031 public const int value = 2131492913; @@ -978,73 +1014,94 @@ namespace keepass2android public const int entry_edit_section = 2130903044; // aapt resource value: 0x7f030005 - public const int entry_list_entry = 2130903045; + public const int entry_extrastring_title = 2130903045; // aapt resource value: 0x7f030006 - public const int entry_section = 2130903046; + public const int entry_extrastring_value = 2130903046; // aapt resource value: 0x7f030007 - public const int entry_view = 2130903047; + public const int entry_list_entry = 2130903047; // aapt resource value: 0x7f030008 - public const int entry_view_contents = 2130903048; + public const int entry_section = 2130903048; // aapt resource value: 0x7f030009 - public const int file_row = 2130903049; + public const int entry_view = 2130903049; // aapt resource value: 0x7f03000a - public const int file_selection = 2130903050; + public const int entry_view_contents = 2130903050; // aapt resource value: 0x7f03000b - public const int file_selection_filename = 2130903051; + public const int entry_view_test = 2130903051; // aapt resource value: 0x7f03000c - public const int file_selection_no_recent = 2130903052; + public const int file_row = 2130903052; // aapt resource value: 0x7f03000d - public const int generate_password = 2130903053; + public const int file_selection = 2130903053; // aapt resource value: 0x7f03000e - public const int group_add_entry = 2130903054; + public const int file_selection_buttons = 2130903054; // aapt resource value: 0x7f03000f - public const int group_edit = 2130903055; + public const int file_selection_filename = 2130903055; // aapt resource value: 0x7f030010 - public const int group_empty = 2130903056; + public const int file_selection_no_recent = 2130903056; // aapt resource value: 0x7f030011 - public const int group_header = 2130903057; + public const int generate_password = 2130903057; // aapt resource value: 0x7f030012 - public const int group_list_entry = 2130903058; + public const int group_add_entry = 2130903058; // aapt resource value: 0x7f030013 - public const int icon = 2130903059; + public const int group_edit = 2130903059; // aapt resource value: 0x7f030014 - public const int icon_picker = 2130903060; + public const int group_empty = 2130903060; // aapt resource value: 0x7f030015 - public const int input = 2130903061; + public const int group_header = 2130903061; // aapt resource value: 0x7f030016 - public const int password = 2130903062; + public const int group_list_entry = 2130903062; // aapt resource value: 0x7f030017 - public const int QuickUnlock = 2130903063; + public const int icon = 2130903063; // aapt resource value: 0x7f030018 - public const int search = 2130903064; + public const int icon_picker = 2130903064; // aapt resource value: 0x7f030019 - public const int set_password = 2130903065; + public const int input = 2130903065; // aapt resource value: 0x7f03001a - public const int StartScreenButtons = 2130903066; + public const int InViewButton = 2130903066; // aapt resource value: 0x7f03001b - public const int url_credentials = 2130903067; + public const int password = 2130903067; + + // aapt resource value: 0x7f03001c + public const int QuickUnlock = 2130903068; + + // aapt resource value: 0x7f03001d + public const int QuickUnlock_Unused = 2130903069; + + // aapt resource value: 0x7f03001e + public const int SaveButton = 2130903070; + + // aapt resource value: 0x7f03001f + public const int search = 2130903071; + + // aapt resource value: 0x7f030020 + public const int set_password = 2130903072; + + // aapt resource value: 0x7f030021 + public const int StartScreenButtons = 2130903073; + + // aapt resource value: 0x7f030022 + public const int url_credentials = 2130903074; private Layout() { @@ -1077,203 +1134,203 @@ namespace keepass2android public partial class String { - // aapt resource value: 0x7f07002f - public const int AboutText = 2131165231; - - // aapt resource value: 0x7f070104 - public const int AskDeletePermanentlyEntry = 2131165444; - - // aapt resource value: 0x7f070105 - public const int AskDeletePermanentlyGroup = 2131165445; + // aapt resource value: 0x7f070030 + public const int AboutText = 2131165232; // aapt resource value: 0x7f070106 - public const int AskDeletePermanently_title = 2131165446; - - // aapt resource value: 0x7f070109 - public const int AskDiscardChanges = 2131165449; - - // aapt resource value: 0x7f07010a - public const int AskDiscardChanges_title = 2131165450; - - // aapt resource value: 0x7f0700fe - public const int AskOverwriteBinary = 2131165438; - - // aapt resource value: 0x7f070101 - public const int AskOverwriteBinary_no = 2131165441; - - // aapt resource value: 0x7f0700ff - public const int AskOverwriteBinary_title = 2131165439; - - // aapt resource value: 0x7f070100 - public const int AskOverwriteBinary_yes = 2131165440; - - // aapt resource value: 0x7f070108 - public const int AskReloadFile = 2131165448; + public const int AskDeletePermanentlyEntry = 2131165446; // aapt resource value: 0x7f070107 - public const int AskReloadFile_title = 2131165447; + public const int AskDeletePermanentlyGroup = 2131165447; - // aapt resource value: 0x7f070102 - public const int AttachFailed = 2131165442; + // aapt resource value: 0x7f070108 + public const int AskDeletePermanently_title = 2131165448; - // aapt resource value: 0x7f07001f - public const int BinaryDirectory_default = 2131165215; + // aapt resource value: 0x7f07010b + public const int AskDiscardChanges = 2131165451; - // aapt resource value: 0x7f07001e - public const int BinaryDirectory_key = 2131165214; + // aapt resource value: 0x7f07010c + public const int AskDiscardChanges_title = 2131165452; - // aapt resource value: 0x7f0700ec - public const int BinaryDirectory_summary = 2131165420; - - // aapt resource value: 0x7f0700eb - public const int BinaryDirectory_title = 2131165419; - - // aapt resource value: 0x7f070110 - public const int ChangeLog = 2131165456; - - // aapt resource value: 0x7f07010f - public const int ChangeLog_0_7 = 2131165455; - - // aapt resource value: 0x7f07010e - public const int ChangeLog_title = 2131165454; - - // aapt resource value: 0x7f070043 - public const int ClearClipboard = 2131165251; - - // aapt resource value: 0x7f070029 - public const int CopyToClipboardNotification_key = 2131165225; - - // aapt resource value: 0x7f070030 - public const int CreditsText = 2131165232; - - // aapt resource value: 0x7f07007c - public const int FileNotFound = 2131165308; - - // aapt resource value: 0x7f07008f - public const int InvalidPassword = 2131165327; - - // aapt resource value: 0x7f070024 - public const int LastInfoVersionCode_key = 2131165220; - - // aapt resource value: 0x7f070026 - public const int MarketURL = 2131165222; - - // aapt resource value: 0x7f070099 - public const int MaskedPassword = 2131165337; - - // aapt resource value: 0x7f070020 - public const int QuickUnlockDefaultEnabled_key = 2131165216; - - // aapt resource value: 0x7f0700e7 - public const int QuickUnlockDefaultEnabled_summary = 2131165415; - - // aapt resource value: 0x7f0700e6 - public const int QuickUnlockDefaultEnabled_title = 2131165414; - - // aapt resource value: 0x7f070022 - public const int QuickUnlockLength_default = 2131165218; - - // aapt resource value: 0x7f070021 - public const int QuickUnlockLength_key = 2131165217; - - // aapt resource value: 0x7f0700e9 - public const int QuickUnlockLength_summary = 2131165417; - - // aapt resource value: 0x7f0700e8 - public const int QuickUnlockLength_title = 2131165416; - - // aapt resource value: 0x7f0700e4 - public const int QuickUnlock_button = 2131165412; - - // aapt resource value: 0x7f0700ea - public const int QuickUnlock_fail = 2131165418; - - // aapt resource value: 0x7f0700e3 - public const int QuickUnlock_label = 2131165411; - - // aapt resource value: 0x7f0700e5 - public const int QuickUnlock_lockButton = 2131165413; + // aapt resource value: 0x7f070100 + public const int AskOverwriteBinary = 2131165440; // aapt resource value: 0x7f070103 - public const int RecycleBin = 2131165443; + public const int AskOverwriteBinary_no = 2131165443; + + // aapt resource value: 0x7f070101 + public const int AskOverwriteBinary_title = 2131165441; + + // aapt resource value: 0x7f070102 + public const int AskOverwriteBinary_yes = 2131165442; + + // aapt resource value: 0x7f07010a + public const int AskReloadFile = 2131165450; + + // aapt resource value: 0x7f070109 + public const int AskReloadFile_title = 2131165449; + + // aapt resource value: 0x7f070104 + public const int AttachFailed = 2131165444; + + // aapt resource value: 0x7f070020 + public const int BinaryDirectory_default = 2131165216; + + // aapt resource value: 0x7f07001f + public const int BinaryDirectory_key = 2131165215; // aapt resource value: 0x7f0700ee - public const int SaveAttachment_Failed = 2131165422; + public const int BinaryDirectory_summary = 2131165422; // aapt resource value: 0x7f0700ed - public const int SaveAttachment_doneMessage = 2131165421; + public const int BinaryDirectory_title = 2131165421; - // aapt resource value: 0x7f0700fb - public const int ShowCopyToClipboardNotification_summary = 2131165435; + // aapt resource value: 0x7f070112 + public const int ChangeLog = 2131165458; - // aapt resource value: 0x7f0700fa - public const int ShowCopyToClipboardNotification_title = 2131165434; + // aapt resource value: 0x7f070111 + public const int ChangeLog_0_7 = 2131165457; - // aapt resource value: 0x7f0700fd - public const int ShowKp2aKeyboardNotification_summary = 2131165437; + // aapt resource value: 0x7f070110 + public const int ChangeLog_title = 2131165456; - // aapt resource value: 0x7f0700fc - public const int ShowKp2aKeyboardNotification_title = 2131165436; + // aapt resource value: 0x7f070044 + public const int ClearClipboard = 2131165252; + + // aapt resource value: 0x7f07002a + public const int CopyToClipboardNotification_key = 2131165226; + + // aapt resource value: 0x7f070031 + public const int CreditsText = 2131165233; + + // aapt resource value: 0x7f07007d + public const int FileNotFound = 2131165309; + + // aapt resource value: 0x7f070090 + public const int InvalidPassword = 2131165328; + + // aapt resource value: 0x7f070025 + public const int LastInfoVersionCode_key = 2131165221; // aapt resource value: 0x7f070027 - public const int SuggestionsURL = 2131165223; + public const int MarketURL = 2131165223; + + // aapt resource value: 0x7f07009a + public const int MaskedPassword = 2131165338; + + // aapt resource value: 0x7f070021 + public const int QuickUnlockDefaultEnabled_key = 2131165217; + + // aapt resource value: 0x7f0700e9 + public const int QuickUnlockDefaultEnabled_summary = 2131165417; + + // aapt resource value: 0x7f0700e8 + public const int QuickUnlockDefaultEnabled_title = 2131165416; + + // aapt resource value: 0x7f070023 + public const int QuickUnlockLength_default = 2131165219; + + // aapt resource value: 0x7f070022 + public const int QuickUnlockLength_key = 2131165218; + + // aapt resource value: 0x7f0700eb + public const int QuickUnlockLength_summary = 2131165419; + + // aapt resource value: 0x7f0700ea + public const int QuickUnlockLength_title = 2131165418; + + // aapt resource value: 0x7f0700e6 + public const int QuickUnlock_button = 2131165414; + + // aapt resource value: 0x7f0700ec + public const int QuickUnlock_fail = 2131165420; + + // aapt resource value: 0x7f0700e5 + public const int QuickUnlock_label = 2131165413; + + // aapt resource value: 0x7f0700e7 + public const int QuickUnlock_lockButton = 2131165415; + + // aapt resource value: 0x7f070105 + public const int RecycleBin = 2131165445; + + // aapt resource value: 0x7f0700f0 + public const int SaveAttachment_Failed = 2131165424; + + // aapt resource value: 0x7f0700ef + public const int SaveAttachment_doneMessage = 2131165423; + + // aapt resource value: 0x7f0700fd + public const int ShowCopyToClipboardNotification_summary = 2131165437; + + // aapt resource value: 0x7f0700fc + public const int ShowCopyToClipboardNotification_title = 2131165436; + + // aapt resource value: 0x7f0700ff + public const int ShowKp2aKeyboardNotification_summary = 2131165439; + + // aapt resource value: 0x7f0700fe + public const int ShowKp2aKeyboardNotification_title = 2131165438; + + // aapt resource value: 0x7f070028 + public const int SuggestionsURL = 2131165224; // aapt resource value: 0x7f07001c public const int TanExpiresOnUse_key = 2131165212; - // aapt resource value: 0x7f0700d7 - public const int TanExpiresOnUse_summary = 2131165399; + // aapt resource value: 0x7f0700d9 + public const int TanExpiresOnUse_summary = 2131165401; - // aapt resource value: 0x7f0700d6 - public const int TanExpiresOnUse_title = 2131165398; + // aapt resource value: 0x7f0700d8 + public const int TanExpiresOnUse_title = 2131165400; - // aapt resource value: 0x7f070028 - public const int TranslationURL = 2131165224; + // aapt resource value: 0x7f070029 + public const int TranslationURL = 2131165225; - // aapt resource value: 0x7f070023 - public const int UsageCount_key = 2131165219; + // aapt resource value: 0x7f070024 + public const int UsageCount_key = 2131165220; - // aapt resource value: 0x7f070025 - public const int UseFileTransactions_key = 2131165221; + // aapt resource value: 0x7f070026 + public const int UseFileTransactions_key = 2131165222; - // aapt resource value: 0x7f0700f9 - public const int UseFileTransactions_summary = 2131165433; + // aapt resource value: 0x7f0700fb + public const int UseFileTransactions_summary = 2131165435; - // aapt resource value: 0x7f0700f8 - public const int UseFileTransactions_title = 2131165432; + // aapt resource value: 0x7f0700fa + public const int UseFileTransactions_title = 2131165434; - // aapt resource value: 0x7f07002a - public const int UseKp2aKeyboard_key = 2131165226; - - // aapt resource value: 0x7f07002d - public const int about_feedback = 2131165229; + // aapt resource value: 0x7f07002b + public const int UseKp2aKeyboard_key = 2131165227; // aapt resource value: 0x7f07002e - public const int about_homepage = 2131165230; + public const int about_feedback = 2131165230; - // aapt resource value: 0x7f070031 - public const int accept = 2131165233; - - // aapt resource value: 0x7f0700f4 - public const int add_binary = 2131165428; + // aapt resource value: 0x7f07002f + public const int about_homepage = 2131165231; // aapt resource value: 0x7f070032 - public const int add_entry = 2131165234; + public const int accept = 2131165234; - // aapt resource value: 0x7f0700f5 - public const int add_extra_string = 2131165429; + // aapt resource value: 0x7f0700f6 + public const int add_binary = 2131165430; // aapt resource value: 0x7f070033 - public const int add_group = 2131165235; + public const int add_entry = 2131165235; + + // aapt resource value: 0x7f0700f7 + public const int add_extra_string = 2131165431; // aapt resource value: 0x7f070034 - public const int add_group_title = 2131165236; + public const int add_group = 2131165236; // aapt resource value: 0x7f070035 - public const int algorithm = 2131165237; + public const int add_group_title = 2131165237; // aapt resource value: 0x7f070036 - public const int algorithm_colon = 2131165238; + public const int algorithm = 2131165238; + + // aapt resource value: 0x7f070037 + public const int algorithm_colon = 2131165239; // aapt resource value: 0x7f070010 public const int algorithm_key = 2131165200; @@ -1281,305 +1338,311 @@ namespace keepass2android // aapt resource value: 0x7f070011 public const int app_key = 2131165201; - // aapt resource value: 0x7f070037 - public const int app_name = 2131165239; + // aapt resource value: 0x7f070038 + public const int app_name = 2131165240; - // aapt resource value: 0x7f070039 - public const int app_name_nonet = 2131165241; + // aapt resource value: 0x7f07003a + public const int app_name_nonet = 2131165242; - // aapt resource value: 0x7f07003b - public const int app_timeout = 2131165243; + // aapt resource value: 0x7f07003c + public const int app_timeout = 2131165244; // aapt resource value: 0x7f070012 public const int app_timeout_key = 2131165202; - // aapt resource value: 0x7f07003c - public const int app_timeout_summary = 2131165244; - // aapt resource value: 0x7f07003d - public const int application = 2131165245; + public const int app_timeout_summary = 2131165245; // aapt resource value: 0x7f07003e - public const int application_settings = 2131165246; - - // aapt resource value: 0x7f070048 - public const int available_through_keyboard = 2131165256; + public const int application = 2131165246; // aapt resource value: 0x7f07003f - public const int brackets = 2131165247; + public const int application_settings = 2131165247; + + // aapt resource value: 0x7f070049 + public const int available_through_keyboard = 2131165257; // aapt resource value: 0x7f070040 - public const int browser_intall_text = 2131165248; + public const int brackets = 2131165248; // aapt resource value: 0x7f070041 - public const int building_search_idx = 2131165249; + public const int browser_intall_text = 2131165249; // aapt resource value: 0x7f070042 - public const int cancel = 2131165250; + public const int building_search_idx = 2131165250; - // aapt resource value: 0x7f0700db - public const int caseSensitive = 2131165403; + // aapt resource value: 0x7f070043 + public const int cancel = 2131165251; + + // aapt resource value: 0x7f0700dd + public const int caseSensitive = 2131165405; // aapt resource value: 0x7f070002 public const int change_entry = 2131165186; - // aapt resource value: 0x7f070044 - public const int clipboard_timeout = 2131165252; + // aapt resource value: 0x7f070045 + public const int clipboard_timeout = 2131165253; - // aapt resource value: 0x7f07002b - public const int clipboard_timeout_default = 2131165227; + // aapt resource value: 0x7f07002c + public const int clipboard_timeout_default = 2131165228; // aapt resource value: 0x7f070013 public const int clipboard_timeout_key = 2131165203; - // aapt resource value: 0x7f070045 - public const int clipboard_timeout_summary = 2131165253; + // aapt resource value: 0x7f070046 + public const int clipboard_timeout_summary = 2131165254; + + // aapt resource value: 0x7f070048 + public const int copy_password = 2131165256; // aapt resource value: 0x7f070047 - public const int copy_password = 2131165255; - - // aapt resource value: 0x7f070046 - public const int copy_username = 2131165254; - - // aapt resource value: 0x7f07004b - public const int creating_db_key = 2131165259; - - // aapt resource value: 0x7f0700f7 - public const int credentials_dialog_title = 2131165431; + public const int copy_username = 2131165255; // aapt resource value: 0x7f07004c - public const int current_group = 2131165260; + public const int creating_db_key = 2131165260; + + // aapt resource value: 0x7f0700f9 + public const int credentials_dialog_title = 2131165433; // aapt resource value: 0x7f07004d - public const int current_group_root = 2131165261; + public const int current_group = 2131165261; // aapt resource value: 0x7f07004e - public const int database = 2131165262; + public const int current_group_root = 2131165262; - // aapt resource value: 0x7f0700f6 - public const int database_loaded_quickunlock_enabled = 2131165430; + // aapt resource value: 0x7f07004f + public const int database = 2131165263; + + // aapt resource value: 0x7f0700f8 + public const int database_loaded_quickunlock_enabled = 2131165432; + + // aapt resource value: 0x7f0700c4 + public const int database_name = 2131165380; + + // aapt resource value: 0x7f07001e + public const int database_name_key = 2131165214; // aapt resource value: 0x7f070014 public const int db_key = 2131165204; - // aapt resource value: 0x7f07004f - public const int decrypting_db = 2131165263; - // aapt resource value: 0x7f070050 - public const int decrypting_entry = 2131165264; + public const int decrypting_db = 2131165264; // aapt resource value: 0x7f070051 - public const int default_checkbox = 2131165265; + public const int decrypting_entry = 2131165265; + + // aapt resource value: 0x7f070052 + public const int default_checkbox = 2131165266; // aapt resource value: 0x7f070009 public const int default_file_path = 2131165193; - // aapt resource value: 0x7f0700c3 - public const int default_username = 2131165379; + // aapt resource value: 0x7f0700c5 + public const int default_username = 2131165381; // aapt resource value: 0x7f07001d public const int default_username_key = 2131165213; - // aapt resource value: 0x7f070052 - public const int digits = 2131165266; - // aapt resource value: 0x7f070053 - public const int disclaimer_formal = 2131165267; + public const int digits = 2131165267; + + // aapt resource value: 0x7f070054 + public const int disclaimer_formal = 2131165268; // aapt resource value: 0x7f07000a public const int donate_url = 2131165194; - // aapt resource value: 0x7f070054 - public const int ellipsis = 2131165268; - - // aapt resource value: 0x7f0700e2 - public const int enable_quickunlock = 2131165410; - // aapt resource value: 0x7f070055 - public const int enter_filename = 2131165269; + public const int ellipsis = 2131165269; - // aapt resource value: 0x7f0700e1 - public const int enter_filename_details_create_import = 2131165409; - - // aapt resource value: 0x7f0700e0 - public const int enter_filename_details_url = 2131165408; + // aapt resource value: 0x7f0700e4 + public const int enable_quickunlock = 2131165412; // aapt resource value: 0x7f070056 - public const int entry_accessed = 2131165270; + public const int enter_filename = 2131165270; + + // aapt resource value: 0x7f0700e3 + public const int enter_filename_details_create_import = 2131165411; + + // aapt resource value: 0x7f0700e2 + public const int enter_filename_details_url = 2131165410; // aapt resource value: 0x7f070057 - public const int entry_and_or = 2131165271; - - // aapt resource value: 0x7f070067 - public const int entry_binaries = 2131165287; + public const int entry_accessed = 2131165271; // aapt resource value: 0x7f070058 - public const int entry_cancel = 2131165272; - - // aapt resource value: 0x7f070059 - public const int entry_comment = 2131165273; - - // aapt resource value: 0x7f07005c - public const int entry_confpassword = 2131165276; - - // aapt resource value: 0x7f07005d - public const int entry_created = 2131165277; - - // aapt resource value: 0x7f07005e - public const int entry_expires = 2131165278; - - // aapt resource value: 0x7f070066 - public const int entry_extra_strings = 2131165286; - - // aapt resource value: 0x7f07005f - public const int entry_keyfile = 2131165279; - - // aapt resource value: 0x7f070060 - public const int entry_modified = 2131165280; - - // aapt resource value: 0x7f07005b - public const int entry_override_url = 2131165275; - - // aapt resource value: 0x7f070061 - public const int entry_password = 2131165281; - - // aapt resource value: 0x7f070062 - public const int entry_save = 2131165282; - - // aapt resource value: 0x7f07005a - public const int entry_tags = 2131165274; - - // aapt resource value: 0x7f070063 - public const int entry_title = 2131165283; - - // aapt resource value: 0x7f070064 - public const int entry_url = 2131165284; - - // aapt resource value: 0x7f070065 - public const int entry_user_name = 2131165285; + public const int entry_and_or = 2131165272; // aapt resource value: 0x7f070068 - public const int error_arc4 = 2131165288; + public const int entry_binaries = 2131165288; + + // aapt resource value: 0x7f070059 + public const int entry_cancel = 2131165273; + + // aapt resource value: 0x7f07005a + public const int entry_comment = 2131165274; + + // aapt resource value: 0x7f07005d + public const int entry_confpassword = 2131165277; + + // aapt resource value: 0x7f07005e + public const int entry_created = 2131165278; + + // aapt resource value: 0x7f07005f + public const int entry_expires = 2131165279; + + // aapt resource value: 0x7f070067 + public const int entry_extra_strings = 2131165287; + + // aapt resource value: 0x7f070060 + public const int entry_keyfile = 2131165280; + + // aapt resource value: 0x7f070061 + public const int entry_modified = 2131165281; + + // aapt resource value: 0x7f07005c + public const int entry_override_url = 2131165276; + + // aapt resource value: 0x7f070062 + public const int entry_password = 2131165282; + + // aapt resource value: 0x7f070063 + public const int entry_save = 2131165283; + + // aapt resource value: 0x7f07005b + public const int entry_tags = 2131165275; + + // aapt resource value: 0x7f070064 + public const int entry_title = 2131165284; + + // aapt resource value: 0x7f070065 + public const int entry_url = 2131165285; + + // aapt resource value: 0x7f070066 + public const int entry_user_name = 2131165286; // aapt resource value: 0x7f070069 - public const int error_can_not_handle_uri = 2131165289; + public const int error_arc4 = 2131165289; // aapt resource value: 0x7f07006a - public const int error_could_not_create_group = 2131165290; + public const int error_can_not_handle_uri = 2131165290; // aapt resource value: 0x7f07006b - public const int error_could_not_create_parent = 2131165291; + public const int error_could_not_create_group = 2131165291; // aapt resource value: 0x7f07006c - public const int error_database_exists = 2131165292; + public const int error_could_not_create_parent = 2131165292; // aapt resource value: 0x7f07006d - public const int error_database_settings = 2131165293; + public const int error_database_exists = 2131165293; // aapt resource value: 0x7f07006e - public const int error_failed_to_launch_link = 2131165294; - - // aapt resource value: 0x7f070070 - public const int error_file_not_create = 2131165296; + public const int error_database_settings = 2131165294; // aapt resource value: 0x7f07006f - public const int error_filename_required = 2131165295; + public const int error_failed_to_launch_link = 2131165295; // aapt resource value: 0x7f070071 - public const int error_invalid_db = 2131165297; + public const int error_file_not_create = 2131165297; - // aapt resource value: 0x7f0700ef - public const int error_invalid_expiry_date = 2131165423; + // aapt resource value: 0x7f070070 + public const int error_filename_required = 2131165296; // aapt resource value: 0x7f070072 - public const int error_invalid_path = 2131165298; - - // aapt resource value: 0x7f070073 - public const int error_no_name = 2131165299; - - // aapt resource value: 0x7f070074 - public const int error_nopass = 2131165300; - - // aapt resource value: 0x7f070075 - public const int error_out_of_memory = 2131165301; - - // aapt resource value: 0x7f070076 - public const int error_pass_gen_type = 2131165302; - - // aapt resource value: 0x7f070077 - public const int error_pass_match = 2131165303; - - // aapt resource value: 0x7f070078 - public const int error_rounds_not_number = 2131165304; - - // aapt resource value: 0x7f070079 - public const int error_rounds_too_large = 2131165305; - - // aapt resource value: 0x7f0700f0 - public const int error_string_key = 2131165424; - - // aapt resource value: 0x7f07007a - public const int error_title_required = 2131165306; - - // aapt resource value: 0x7f07007b - public const int error_wrong_length = 2131165307; - - // aapt resource value: 0x7f0700d9 - public const int excludeExpiredEntries = 2131165401; + public const int error_invalid_db = 2131165298; // aapt resource value: 0x7f0700f1 - public const int field_name = 2131165425; + public const int error_invalid_expiry_date = 2131165425; + + // aapt resource value: 0x7f070073 + public const int error_invalid_path = 2131165299; + + // aapt resource value: 0x7f070074 + public const int error_no_name = 2131165300; + + // aapt resource value: 0x7f070075 + public const int error_nopass = 2131165301; + + // aapt resource value: 0x7f070076 + public const int error_out_of_memory = 2131165302; + + // aapt resource value: 0x7f070077 + public const int error_pass_gen_type = 2131165303; + + // aapt resource value: 0x7f070078 + public const int error_pass_match = 2131165304; + + // aapt resource value: 0x7f070079 + public const int error_rounds_not_number = 2131165305; + + // aapt resource value: 0x7f07007a + public const int error_rounds_too_large = 2131165306; // aapt resource value: 0x7f0700f2 - public const int field_value = 2131165426; + public const int error_string_key = 2131165426; - // aapt resource value: 0x7f07007d - public const int file_browser = 2131165309; + // aapt resource value: 0x7f07007b + public const int error_title_required = 2131165307; + + // aapt resource value: 0x7f07007c + public const int error_wrong_length = 2131165308; + + // aapt resource value: 0x7f0700db + public const int excludeExpiredEntries = 2131165403; + + // aapt resource value: 0x7f0700f3 + public const int field_name = 2131165427; + + // aapt resource value: 0x7f0700f4 + public const int field_value = 2131165428; // aapt resource value: 0x7f07007e - public const int generate_password = 2131165310; + public const int file_browser = 2131165310; // aapt resource value: 0x7f07007f - public const int group = 2131165311; + public const int generate_password = 2131165311; // aapt resource value: 0x7f070080 - public const int hint_comment = 2131165312; + public const int group = 2131165312; // aapt resource value: 0x7f070081 - public const int hint_conf_pass = 2131165313; + public const int hint_comment = 2131165313; // aapt resource value: 0x7f070082 - public const int hint_generated_password = 2131165314; + public const int hint_conf_pass = 2131165314; // aapt resource value: 0x7f070083 - public const int hint_group_name = 2131165315; + public const int hint_generated_password = 2131165315; // aapt resource value: 0x7f070084 - public const int hint_keyfile = 2131165316; + public const int hint_group_name = 2131165316; // aapt resource value: 0x7f070085 - public const int hint_length = 2131165317; - - // aapt resource value: 0x7f070087 - public const int hint_login_pass = 2131165319; - - // aapt resource value: 0x7f07008a - public const int hint_override_url = 2131165322; + public const int hint_keyfile = 2131165317; // aapt resource value: 0x7f070086 - public const int hint_pass = 2131165318; - - // aapt resource value: 0x7f07008b - public const int hint_tags = 2131165323; + public const int hint_length = 2131165318; // aapt resource value: 0x7f070088 - public const int hint_title = 2131165320; + public const int hint_login_pass = 2131165320; - // aapt resource value: 0x7f070089 - public const int hint_url = 2131165321; + // aapt resource value: 0x7f07008b + public const int hint_override_url = 2131165323; + + // aapt resource value: 0x7f070087 + public const int hint_pass = 2131165319; // aapt resource value: 0x7f07008c - public const int hint_username = 2131165324; + public const int hint_tags = 2131165324; + + // aapt resource value: 0x7f070089 + public const int hint_title = 2131165321; + + // aapt resource value: 0x7f07008a + public const int hint_url = 2131165322; + + // aapt resource value: 0x7f07008d + public const int hint_username = 2131165325; // aapt resource value: 0x7f07000b public const int homepage = 2131165195; @@ -1590,32 +1653,32 @@ namespace keepass2android // aapt resource value: 0x7f070000 public const int ime_name = 2131165184; - // aapt resource value: 0x7f07008d - public const int install_from_market = 2131165325; - // aapt resource value: 0x7f07008e - public const int install_from_website = 2131165326; + public const int install_from_market = 2131165326; - // aapt resource value: 0x7f070090 - public const int invalid_algorithm = 2131165328; + // aapt resource value: 0x7f07008f + public const int install_from_website = 2131165327; // aapt resource value: 0x7f070091 - public const int invalid_db_sig = 2131165329; + public const int invalid_algorithm = 2131165329; + + // aapt resource value: 0x7f070092 + public const int invalid_db_sig = 2131165330; // aapt resource value: 0x7f07000d public const int issues = 2131165197; - // aapt resource value: 0x7f070092 - public const int keyfile_does_not_exist = 2131165330; - // aapt resource value: 0x7f070093 - public const int keyfile_is_empty = 2131165331; + public const int keyfile_does_not_exist = 2131165331; + + // aapt resource value: 0x7f070094 + public const int keyfile_is_empty = 2131165332; // aapt resource value: 0x7f070016 public const int keyfile_key = 2131165206; - // aapt resource value: 0x7f0700d8 - public const int kp2a_findUrl = 2131165400; + // aapt resource value: 0x7f0700da + public const int kp2a_findUrl = 2131165402; // aapt resource value: 0x7f070004 public const int label_go_key = 2131165188; @@ -1629,110 +1692,110 @@ namespace keepass2android // aapt resource value: 0x7f070007 public const int label_subtype_generic = 2131165191; - // aapt resource value: 0x7f070094 - public const int length = 2131165332; + // aapt resource value: 0x7f070095 + public const int length = 2131165333; // aapt resource value: 0x7f070008 public const int library_name = 2131165192; - // aapt resource value: 0x7f07002c - public const int list_size_default = 2131165228; + // aapt resource value: 0x7f07002d + public const int list_size_default = 2131165229; // aapt resource value: 0x7f070019 public const int list_size_key = 2131165209; - // aapt resource value: 0x7f070096 - public const int list_size_summary = 2131165334; - - // aapt resource value: 0x7f070095 - public const int list_size_title = 2131165333; - // aapt resource value: 0x7f070097 - public const int loading_database = 2131165335; + public const int list_size_summary = 2131165335; + + // aapt resource value: 0x7f070096 + public const int list_size_title = 2131165334; // aapt resource value: 0x7f070098 - public const int lowercase = 2131165336; + public const int loading_database = 2131165336; + + // aapt resource value: 0x7f070099 + public const int lowercase = 2131165337; // aapt resource value: 0x7f070017 public const int maskpass_key = 2131165207; - // aapt resource value: 0x7f07009b - public const int maskpass_summary = 2131165339; - - // aapt resource value: 0x7f07009a - public const int maskpass_title = 2131165338; - // aapt resource value: 0x7f07009c - public const int menu_about = 2131165340; + public const int maskpass_summary = 2131165340; - // aapt resource value: 0x7f0700a1 - public const int menu_app_settings = 2131165345; + // aapt resource value: 0x7f07009b + public const int maskpass_title = 2131165339; // aapt resource value: 0x7f07009d - public const int menu_change_key = 2131165341; - - // aapt resource value: 0x7f07009e - public const int menu_copy_pass = 2131165342; - - // aapt resource value: 0x7f07009f - public const int menu_copy_user = 2131165343; - - // aapt resource value: 0x7f0700a0 - public const int menu_create = 2131165344; + public const int menu_about = 2131165341; // aapt resource value: 0x7f0700a2 - public const int menu_db_settings = 2131165346; + public const int menu_app_settings = 2131165346; + + // aapt resource value: 0x7f07009e + public const int menu_change_key = 2131165342; + + // aapt resource value: 0x7f07009f + public const int menu_copy_pass = 2131165343; + + // aapt resource value: 0x7f0700a0 + public const int menu_copy_user = 2131165344; + + // aapt resource value: 0x7f0700a1 + public const int menu_create = 2131165345; // aapt resource value: 0x7f0700a3 - public const int menu_delete = 2131165347; + public const int menu_db_settings = 2131165347; // aapt resource value: 0x7f0700a4 - public const int menu_donate = 2131165348; + public const int menu_delete = 2131165348; // aapt resource value: 0x7f0700a5 - public const int menu_edit = 2131165349; + public const int menu_donate = 2131165349; // aapt resource value: 0x7f0700a6 - public const int menu_hide_password = 2131165350; + public const int menu_edit = 2131165350; // aapt resource value: 0x7f0700a7 - public const int menu_homepage = 2131165351; + public const int menu_hide_password = 2131165351; // aapt resource value: 0x7f0700a8 - public const int menu_lock = 2131165352; + public const int menu_homepage = 2131165352; // aapt resource value: 0x7f0700a9 - public const int menu_open = 2131165353; + public const int menu_lock = 2131165353; // aapt resource value: 0x7f0700aa - public const int menu_rename = 2131165354; + public const int menu_open = 2131165354; // aapt resource value: 0x7f0700ab - public const int menu_search = 2131165355; + public const int menu_rename = 2131165355; // aapt resource value: 0x7f0700ac - public const int menu_url = 2131165356; + public const int menu_search = 2131165356; // aapt resource value: 0x7f0700ad - public const int minus = 2131165357; + public const int menu_url = 2131165357; // aapt resource value: 0x7f0700ae - public const int never = 2131165358; + public const int minus = 2131165358; - // aapt resource value: 0x7f0700b0 - public const int no = 2131165360; + // aapt resource value: 0x7f0700af + public const int never = 2131165359; // aapt resource value: 0x7f0700b1 - public const int no_keys = 2131165361; + public const int no = 2131165361; // aapt resource value: 0x7f0700b2 - public const int no_results = 2131165362; + public const int no_keys = 2131165362; // aapt resource value: 0x7f0700b3 - public const int no_url_handler = 2131165363; + public const int no_results = 2131165363; - // aapt resource value: 0x7f070049 - public const int not_possible_im_picker = 2131165257; + // aapt resource value: 0x7f0700b4 + public const int no_url_handler = 2131165364; + + // aapt resource value: 0x7f07004a + public const int not_possible_im_picker = 2131165258; // aapt resource value: 0x7f07000e public const int oi_filemanager_market = 2131165198; @@ -1743,158 +1806,158 @@ namespace keepass2android // aapt resource value: 0x7f070018 public const int omitbackup_key = 2131165208; - // aapt resource value: 0x7f0700b6 - public const int omitbackup_summary = 2131165366; + // aapt resource value: 0x7f0700b7 + public const int omitbackup_summary = 2131165367; - // aapt resource value: 0x7f0700b5 - public const int omitbackup_title = 2131165365; + // aapt resource value: 0x7f0700b6 + public const int omitbackup_title = 2131165366; // aapt resource value: 0x7f070003 public const int open_entry = 2131165187; - // aapt resource value: 0x7f0700b4 - public const int open_recent = 2131165364; - - // aapt resource value: 0x7f0700b7 - public const int pass_filename = 2131165367; + // aapt resource value: 0x7f0700b5 + public const int open_recent = 2131165365; // aapt resource value: 0x7f0700b8 - public const int password_title = 2131165368; - - // aapt resource value: 0x7f07004a - public const int please_activate_keyboard = 2131165258; + public const int pass_filename = 2131165368; // aapt resource value: 0x7f0700b9 - public const int progress_create = 2131165369; + public const int password_title = 2131165369; + + // aapt resource value: 0x7f07004b + public const int please_activate_keyboard = 2131165259; // aapt resource value: 0x7f0700ba - public const int progress_title = 2131165370; - - // aapt resource value: 0x7f0700f3 - public const int protection = 2131165427; - - // aapt resource value: 0x7f07010c - public const int rate_app = 2131165452; - - // aapt resource value: 0x7f0700d5 - public const int regular_expression = 2131165397; + public const int progress_create = 2131165370; // aapt resource value: 0x7f0700bb - public const int remember_keyfile_summary = 2131165371; + public const int progress_title = 2131165371; + + // aapt resource value: 0x7f0700f5 + public const int protection = 2131165429; + + // aapt resource value: 0x7f07010e + public const int rate_app = 2131165454; + + // aapt resource value: 0x7f0700d7 + public const int regular_expression = 2131165399; // aapt resource value: 0x7f0700bc - public const int remember_keyfile_title = 2131165372; + public const int remember_keyfile_summary = 2131165372; // aapt resource value: 0x7f0700bd - public const int remove_from_filelist = 2131165373; + public const int remember_keyfile_title = 2131165373; // aapt resource value: 0x7f0700be - public const int rijndael = 2131165374; + public const int remove_from_filelist = 2131165374; // aapt resource value: 0x7f0700bf - public const int root = 2131165375; + public const int rijndael = 2131165375; // aapt resource value: 0x7f0700c0 - public const int rounds = 2131165376; + public const int root = 2131165376; // aapt resource value: 0x7f0700c1 - public const int rounds_explaination = 2131165377; + public const int rounds = 2131165377; // aapt resource value: 0x7f0700c2 - public const int rounds_hint = 2131165378; + public const int rounds_explaination = 2131165378; + + // aapt resource value: 0x7f0700c3 + public const int rounds_hint = 2131165379; // aapt resource value: 0x7f070015 public const int rounds_key = 2131165205; - // aapt resource value: 0x7f0700c4 - public const int saving_database = 2131165380; - - // aapt resource value: 0x7f0700cb - public const int search_hint = 2131165387; + // aapt resource value: 0x7f0700c6 + public const int saving_database = 2131165382; // aapt resource value: 0x7f0700cd - public const int search_in = 2131165389; + public const int search_hint = 2131165389; - // aapt resource value: 0x7f0700c6 - public const int search_label = 2131165382; + // aapt resource value: 0x7f0700cf + public const int search_in = 2131165391; - // aapt resource value: 0x7f0700da - public const int search_options = 2131165402; + // aapt resource value: 0x7f0700c8 + public const int search_label = 2131165384; - // aapt resource value: 0x7f0700cc - public const int search_results = 2131165388; + // aapt resource value: 0x7f0700dc + public const int search_options = 2131165404; - // aapt resource value: 0x7f070038 - public const int short_app_name = 2131165240; + // aapt resource value: 0x7f0700ce + public const int search_results = 2131165390; - // aapt resource value: 0x7f07003a - public const int short_app_name_nonet = 2131165242; + // aapt resource value: 0x7f070039 + public const int short_app_name = 2131165241; - // aapt resource value: 0x7f0700c7 - public const int show_password = 2131165383; + // aapt resource value: 0x7f07003b + public const int short_app_name_nonet = 2131165243; // aapt resource value: 0x7f0700c9 - public const int sort_db = 2131165385; + public const int show_password = 2131165385; + + // aapt resource value: 0x7f0700cb + public const int sort_db = 2131165387; // aapt resource value: 0x7f07001a public const int sort_key = 2131165210; - // aapt resource value: 0x7f0700c8 - public const int sort_name = 2131165384; - - // aapt resource value: 0x7f0700c5 - public const int space = 2131165381; - // aapt resource value: 0x7f0700ca - public const int special = 2131165386; + public const int sort_name = 2131165386; - // aapt resource value: 0x7f0700dd - public const int start_create = 2131165405; + // aapt resource value: 0x7f0700c7 + public const int space = 2131165383; + + // aapt resource value: 0x7f0700cc + public const int special = 2131165388; // aapt resource value: 0x7f0700df - public const int start_create_import = 2131165407; + public const int start_create = 2131165407; - // aapt resource value: 0x7f0700dc - public const int start_open_file = 2131165404; + // aapt resource value: 0x7f0700e1 + public const int start_create_import = 2131165409; // aapt resource value: 0x7f0700de - public const int start_open_url = 2131165406; + public const int start_open_file = 2131165406; - // aapt resource value: 0x7f07010b - public const int suggest_improvements = 2131165451; + // aapt resource value: 0x7f0700e0 + public const int start_open_url = 2131165408; + + // aapt resource value: 0x7f07010d + public const int suggest_improvements = 2131165453; // aapt resource value: 0x7f07001b public const int timeout_key = 2131165211; - // aapt resource value: 0x7f07010d - public const int translate_app = 2131165453; - - // aapt resource value: 0x7f0700ce - public const int twofish = 2131165390; - - // aapt resource value: 0x7f0700cf - public const int underline = 2131165391; + // aapt resource value: 0x7f07010f + public const int translate_app = 2131165455; // aapt resource value: 0x7f0700d0 - public const int unsupported_db_version = 2131165392; + public const int twofish = 2131165392; // aapt resource value: 0x7f0700d1 - public const int uppercase = 2131165393; - - // aapt resource value: 0x7f0700d4 - public const int version_label = 2131165396; + public const int underline = 2131165393; // aapt resource value: 0x7f0700d2 - public const int warning_read_only = 2131165394; + public const int unsupported_db_version = 2131165394; // aapt resource value: 0x7f0700d3 - public const int warning_unmounted = 2131165395; + public const int uppercase = 2131165395; + + // aapt resource value: 0x7f0700d6 + public const int version_label = 2131165398; + + // aapt resource value: 0x7f0700d4 + public const int warning_read_only = 2131165396; + + // aapt resource value: 0x7f0700d5 + public const int warning_unmounted = 2131165397; // aapt resource value: 0x7f070001 public const int word_separators = 2131165185; - // aapt resource value: 0x7f0700af - public const int yes = 2131165359; + // aapt resource value: 0x7f0700b0 + public const int yes = 2131165360; private String() { @@ -1904,12 +1967,21 @@ namespace keepass2android public partial class Style { - // aapt resource value: 0x7f0a0011 - public const int Base = 2131361809; + // aapt resource value: 0x7f0a0019 + public const int AdditionalStringLayout = 2131361817; + + // aapt resource value: 0x7f0a0012 + public const int Base = 2131361810; + + // aapt resource value: 0x7f0a0013 + public const int BottomBarActionButton = 2131361811; // aapt resource value: 0x7f0a0001 public const int Dialog = 2131361793; + // aapt resource value: 0x7f0a0010 + public const int EditEntryButton = 2131361808; + // aapt resource value: 0x7f0a0006 public const int ElementText = 2131361798; @@ -1928,8 +2000,8 @@ namespace keepass2android // aapt resource value: 0x7f0a000f public const int EntryItem = 2131361807; - // aapt resource value: 0x7f0a0010 - public const int ExtraFieldHeader = 2131361808; + // aapt resource value: 0x7f0a0011 + public const int ExtraFieldHeader = 2131361809; // aapt resource value: 0x7f0a000a public const int GroupAndEntryHeader = 2131361802; @@ -1946,9 +2018,27 @@ namespace keepass2android // aapt resource value: 0x7f0a0002 public const int GroupTextSmall = 2131361794; + // aapt resource value: 0x7f0a001a + public const int MinusButton = 2131361818; + // aapt resource value: 0x7f0a0000 public const int NoTitleBar = 2131361792; + // aapt resource value: 0x7f0a0016 + public const int TextAppearance_EditEntry = 2131361814; + + // aapt resource value: 0x7f0a0015 + public const int TextAppearance_EditEntry_LabelSmall = 2131361813; + + // aapt resource value: 0x7f0a0014 + public const int TextAppearance_EditEntry_Small = 2131361812; + + // aapt resource value: 0x7f0a0017 + public const int TextAppearance_EditEntry_Value = 2131361815; + + // aapt resource value: 0x7f0a0018 + public const int TextAppearance_SmallHeading = 2131361816; + // aapt resource value: 0x7f0a0009 public const int WhiteOnBlack = 2131361801; diff --git a/src/keepass2android/Resources/drawable-hdpi/collections_collection.png b/src/keepass2android/Resources/drawable-hdpi/collections_collection.png new file mode 100644 index 00000000..d1324014 Binary files /dev/null and b/src/keepass2android/Resources/drawable-hdpi/collections_collection.png differ diff --git a/src/keepass2android/Resources/drawable-hdpi/collections_new_label.png b/src/keepass2android/Resources/drawable-hdpi/collections_new_label.png new file mode 100644 index 00000000..d9c52c10 Binary files /dev/null and b/src/keepass2android/Resources/drawable-hdpi/collections_new_label.png differ diff --git a/src/keepass2android/Resources/drawable-hdpi/device_access_not_secure.png b/src/keepass2android/Resources/drawable-hdpi/device_access_not_secure.png new file mode 100644 index 00000000..23ee08be Binary files /dev/null and b/src/keepass2android/Resources/drawable-hdpi/device_access_not_secure.png differ diff --git a/src/keepass2android/Resources/drawable-hdpi/ic_menu_remove_field_holo_light.png b/src/keepass2android/Resources/drawable-hdpi/ic_menu_remove_field_holo_light.png new file mode 100644 index 00000000..68b46005 Binary files /dev/null and b/src/keepass2android/Resources/drawable-hdpi/ic_menu_remove_field_holo_light.png differ diff --git a/src/keepass2android/Resources/drawable-hdpi/location_web_site.png b/src/keepass2android/Resources/drawable-hdpi/location_web_site.png new file mode 100644 index 00000000..bd6b8682 Binary files /dev/null and b/src/keepass2android/Resources/drawable-hdpi/location_web_site.png differ diff --git a/src/keepass2android/Resources/drawable-ldpi/collections_collection.png b/src/keepass2android/Resources/drawable-ldpi/collections_collection.png new file mode 100644 index 00000000..fda13f1b Binary files /dev/null and b/src/keepass2android/Resources/drawable-ldpi/collections_collection.png differ diff --git a/src/keepass2android/Resources/drawable-ldpi/collections_new_label.png b/src/keepass2android/Resources/drawable-ldpi/collections_new_label.png new file mode 100644 index 00000000..71dbfc4f Binary files /dev/null and b/src/keepass2android/Resources/drawable-ldpi/collections_new_label.png differ diff --git a/src/keepass2android/Resources/drawable-ldpi/device_access_not_secure.png b/src/keepass2android/Resources/drawable-ldpi/device_access_not_secure.png new file mode 100644 index 00000000..84557bbe Binary files /dev/null and b/src/keepass2android/Resources/drawable-ldpi/device_access_not_secure.png differ diff --git a/src/keepass2android/Resources/drawable-ldpi/ic_menu_remove_field_holo_light.png b/src/keepass2android/Resources/drawable-ldpi/ic_menu_remove_field_holo_light.png new file mode 100644 index 00000000..bf251bc1 Binary files /dev/null and b/src/keepass2android/Resources/drawable-ldpi/ic_menu_remove_field_holo_light.png differ diff --git a/src/keepass2android/Resources/drawable-ldpi/location_web_site.png b/src/keepass2android/Resources/drawable-ldpi/location_web_site.png new file mode 100644 index 00000000..f146cf99 Binary files /dev/null and b/src/keepass2android/Resources/drawable-ldpi/location_web_site.png differ diff --git a/src/keepass2android/Resources/drawable-mdpi/collections_collection.png b/src/keepass2android/Resources/drawable-mdpi/collections_collection.png new file mode 100644 index 00000000..3db304fa Binary files /dev/null and b/src/keepass2android/Resources/drawable-mdpi/collections_collection.png differ diff --git a/src/keepass2android/Resources/drawable-mdpi/collections_new_label.png b/src/keepass2android/Resources/drawable-mdpi/collections_new_label.png new file mode 100644 index 00000000..70ad36c1 Binary files /dev/null and b/src/keepass2android/Resources/drawable-mdpi/collections_new_label.png differ diff --git a/src/keepass2android/Resources/drawable-mdpi/device_access_not_secure.png b/src/keepass2android/Resources/drawable-mdpi/device_access_not_secure.png new file mode 100644 index 00000000..84557bbe Binary files /dev/null and b/src/keepass2android/Resources/drawable-mdpi/device_access_not_secure.png differ diff --git a/src/keepass2android/Resources/drawable-mdpi/location_web_site.png b/src/keepass2android/Resources/drawable-mdpi/location_web_site.png new file mode 100644 index 00000000..6a2bc885 Binary files /dev/null and b/src/keepass2android/Resources/drawable-mdpi/location_web_site.png differ diff --git a/src/keepass2android/Resources/drawable/btn_new_group.png b/src/keepass2android/Resources/drawable/btn_new_group.png index 44ffbbd8..748bd6e4 100644 Binary files a/src/keepass2android/Resources/drawable/btn_new_group.png and b/src/keepass2android/Resources/drawable/btn_new_group.png differ diff --git a/src/keepass2android/Resources/drawable/btn_new_group_dark.png b/src/keepass2android/Resources/drawable/btn_new_group_dark.png index 32ae9ebb..964f805a 100644 Binary files a/src/keepass2android/Resources/drawable/btn_new_group_dark.png and b/src/keepass2android/Resources/drawable/btn_new_group_dark.png differ diff --git a/src/keepass2android/Resources/drawable/collections_collection.png b/src/keepass2android/Resources/drawable/collections_collection.png new file mode 100644 index 00000000..d1324014 Binary files /dev/null and b/src/keepass2android/Resources/drawable/collections_collection.png differ diff --git a/src/keepass2android/Resources/drawable/collections_new_label.png b/src/keepass2android/Resources/drawable/collections_new_label.png new file mode 100644 index 00000000..70ad36c1 Binary files /dev/null and b/src/keepass2android/Resources/drawable/collections_new_label.png differ diff --git a/src/keepass2android/Resources/drawable/device_access_new_account.png b/src/keepass2android/Resources/drawable/device_access_new_account.png index ca751c87..2d16573b 100644 Binary files a/src/keepass2android/Resources/drawable/device_access_new_account.png and b/src/keepass2android/Resources/drawable/device_access_new_account.png differ diff --git a/src/keepass2android/Resources/drawable/device_access_not_secure.png b/src/keepass2android/Resources/drawable/device_access_not_secure.png new file mode 100644 index 00000000..4a6463c3 Binary files /dev/null and b/src/keepass2android/Resources/drawable/device_access_not_secure.png differ diff --git a/src/keepass2android/Resources/drawable/ic_launcher_gray.png b/src/keepass2android/Resources/drawable/ic_launcher_gray.png index 4b9fe754..d68da21f 100644 Binary files a/src/keepass2android/Resources/drawable/ic_launcher_gray.png and b/src/keepass2android/Resources/drawable/ic_launcher_gray.png differ diff --git a/src/keepass2android/Resources/drawable/ic_menu_add_field_holo_light.png b/src/keepass2android/Resources/drawable/ic_menu_add_field_holo_light.png new file mode 100644 index 00000000..4a4990c0 Binary files /dev/null and b/src/keepass2android/Resources/drawable/ic_menu_add_field_holo_light.png differ diff --git a/src/keepass2android/Resources/drawable/ic_menu_remove_field_holo_light.png b/src/keepass2android/Resources/drawable/ic_menu_remove_field_holo_light.png new file mode 100644 index 00000000..b31359f7 Binary files /dev/null and b/src/keepass2android/Resources/drawable/ic_menu_remove_field_holo_light.png differ diff --git a/src/keepass2android/Resources/drawable/location_web_site.png b/src/keepass2android/Resources/drawable/location_web_site.png new file mode 100644 index 00000000..bd6b8682 Binary files /dev/null and b/src/keepass2android/Resources/drawable/location_web_site.png differ diff --git a/src/keepass2android/Resources/drawable/navigation_cancel.png b/src/keepass2android/Resources/drawable/navigation_cancel.png new file mode 100644 index 00000000..9f4c3d6a Binary files /dev/null and b/src/keepass2android/Resources/drawable/navigation_cancel.png differ diff --git a/src/keepass2android/Resources/drawable/section_header.xml b/src/keepass2android/Resources/drawable/section_header.xml index c08c173e..fbe5fae4 100644 --- a/src/keepass2android/Resources/drawable/section_header.xml +++ b/src/keepass2android/Resources/drawable/section_header.xml @@ -4,5 +4,5 @@ android:shape="rectangle"> + android:color="@color/light_gray"/> \ No newline at end of file diff --git a/src/keepass2android/Resources/layout-v14/QuickUnlock_Unused.xml b/src/keepass2android/Resources/layout-v14/QuickUnlock_Unused.xml new file mode 100644 index 00000000..1b263bb7 --- /dev/null +++ b/src/keepass2android/Resources/layout-v14/QuickUnlock_Unused.xml @@ -0,0 +1,70 @@ + + + + + + + + +