Changes to UI to fix new problems with 2.3.

This commit is contained in:
Philipp Crocoll
2013-04-28 22:46:31 +02:00
parent f025b9cb3d
commit 8c4770d77a
24 changed files with 642 additions and 439 deletions

View File

@@ -0,0 +1,96 @@
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;
using Java.IO;
using Android.Net;
namespace keepass2android
{
[ContentProvider(new string[]{"keepass2android.provider"})]
public class AttachmentContentProvider : ContentProvider {
private const String CLASS_NAME = "AttachmentContentProvider";
// The authority is the symbolic name for the provider class
public const String AUTHORITY = "keepass2android.provider";
public override bool OnCreate() {
return true;
}
public override ParcelFileDescriptor OpenFile(Android.Net.Uri uri, String mode)
{
String LOG_TAG = CLASS_NAME + " - openFile";
Log.Verbose(LOG_TAG,
"Called with uri: '" + uri + "'." + uri.LastPathSegment);
if (uri.ToString().StartsWith("content://" + AUTHORITY))
{
// The desired file name is specified by the last segment of the
// path
// E.g.
// 'content://keepass2android.provider/Test.txt'
// Take this and build the path to the file
String fileLocation = Context.CacheDir + File.Separator
+ uri.LastPathSegment;
// Create & return a ParcelFileDescriptor pointing to the file
// Note: I don't care what mode they ask for - they're only getting
// read only
ParcelFileDescriptor pfd = ParcelFileDescriptor.Open(new File(
fileLocation), ParcelFileMode.ReadOnly);
return pfd;
}
else
{
Log.Verbose(LOG_TAG, "Unsupported uri: '" + uri + "'.");
throw new FileNotFoundException("Unsupported uri: "
+ uri.ToString());
}
}
// //////////////////////////////////////////////////////////////
// Not supported / used / required for this example
// //////////////////////////////////////////////////////////////
public override int Update(Android.Net.Uri uri, ContentValues contentvalues, String s,
String[] strings) {
return 0;
}
public override int Delete(Android.Net.Uri uri, String s, String[] strings) {
return 0;
}
public override Android.Net.Uri Insert(Android.Net.Uri uri, ContentValues contentvalues) {
return null;
}
public override String GetType(Android.Net.Uri uri) {
return null;
}
public override Android.Database.ICursor Query(Android.Net.Uri uri, string[] projection, string selection, string[] selectionArgs, string sortOrder)
{
return null;
}
}
}

View File

@@ -39,6 +39,7 @@ using KeePassLib.Security;
using keepass2android.view; using keepass2android.view;
using Android.Webkit; using Android.Webkit;
using Android.Graphics; using Android.Graphics;
using Java.IO;
namespace keepass2android namespace keepass2android
{ {
@@ -233,20 +234,26 @@ namespace keepass2android
if (value != null) if (value != null)
valueView.Text = value; valueView.Text = value;
valueView.Typeface = Typeface.Monospace; valueView.Typeface = Typeface.Monospace;
valueView.SetTextIsSelectable(true);
if ((int)Android.OS.Build.VERSION.SdkInt >= 11)
valueView.SetTextIsSelectable(true);
layout.AddView(valueView); layout.AddView(valueView);
return layout; return layout;
} }
string writeBinaryToFile(string key) Android.Net.Uri writeBinaryToFile(string key, bool writeToCacheDirectory)
{ {
ProtectedBinary pb = mEntry.Binaries.Get(key); ProtectedBinary pb = mEntry.Binaries.Get(key);
System.Diagnostics.Debug.Assert(pb != null); if(pb == null) throw new ArgumentException(); System.Diagnostics.Debug.Assert(pb != null);
if (pb == null)
throw new ArgumentException();
ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences(this); ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences(this);
string binaryDirectory = prefs.GetString(GetString(Resource.String.BinaryDirectory_key),GetString(Resource.String.BinaryDirectory_default)); string binaryDirectory = prefs.GetString(GetString(Resource.String.BinaryDirectory_key), GetString(Resource.String.BinaryDirectory_default));
if (writeToCacheDirectory)
binaryDirectory = CacheDir.Path;
var targetFile = new Java.IO.File(binaryDirectory,key); var targetFile = new Java.IO.File(binaryDirectory, key);
Java.IO.File parent = targetFile.ParentFile; Java.IO.File parent = targetFile.ParentFile;
@@ -260,7 +267,7 @@ namespace keepass2android
if (! parent.Exists()) if (! parent.Exists())
{ {
// Create parent dircetory // Create parent directory
if (! parent.Mkdirs()) if (! parent.Mkdirs())
{ {
Toast.MakeText(this, Toast.MakeText(this,
@@ -271,32 +278,42 @@ namespace keepass2android
} }
} }
string filename = targetFile.AbsolutePath; string filename = targetFile.AbsolutePath;
Android.Net.Uri fileUri = Android.Net.Uri.FromFile(targetFile);
byte[] pbData = pb.ReadData(); byte[] pbData = pb.ReadData();
try { System.IO.File.WriteAllBytes(filename, pbData); } try
catch(Exception exWrite) {
System.IO.File.WriteAllBytes(filename, pbData);
} catch (Exception exWrite)
{ {
Toast.MakeText(this, GetString(Resource.String.SaveAttachment_Failed, new Java.Lang.Object[]{ filename}) Toast.MakeText(this, GetString(Resource.String.SaveAttachment_Failed, new Java.Lang.Object[]{ filename})
+exWrite.Message,ToastLength.Long).Show(); + exWrite.Message, ToastLength.Long).Show();
return null; return null;
} } finally
finally
{ {
MemUtil.ZeroByteArray(pbData); MemUtil.ZeroByteArray(pbData);
} }
Toast.MakeText(this, GetString(Resource.String.SaveAttachment_doneMessage, new Java.Lang.Object[]{filename}), ToastLength.Short).Show();
return filename; if (writeToCacheDirectory)
{
return Android.Net.Uri.Parse("content://" + AttachmentContentProvider.AUTHORITY + "/"
+ filename);
}
else
{
return fileUri;
}
} }
void openBinaryFile(string filename) void openBinaryFile(Android.Net.Uri uri)
{ {
String theMIMEType = getMimeType(filename); String theMIMEType = getMimeType(uri.Path);
if (theMIMEType != null) if (theMIMEType != null)
{ {
Intent theIntent = new Intent(Intent.ActionView); Intent theIntent = new Intent(Intent.ActionView);
theIntent.AddFlags(ActivityFlags.NewTask | ActivityFlags.ExcludeFromRecents); theIntent.AddFlags(ActivityFlags.NewTask | ActivityFlags.ExcludeFromRecents);
theIntent.SetDataAndType(Android.Net.Uri.FromFile(new Java.IO.File(filename)), theMIMEType); theIntent.SetDataAndType(uri, theMIMEType);
try try
{ {
StartActivity(theIntent); StartActivity(theIntent);
@@ -326,13 +343,29 @@ namespace keepass2android
binaryButton.Click += (object sender, EventArgs e) => binaryButton.Click += (object sender, EventArgs e) =>
{ {
Button btnSender = (Button)(sender); Button btnSender = (Button)(sender);
string newFilename = writeBinaryToFile(btnSender.Text);
if (newFilename != null) AlertDialog.Builder builder = new AlertDialog.Builder(this);
{ builder.SetTitle(GetString(Resource.String.SaveAttachmentDialog_title));
Toast.MakeText(this, GetString(Resource.String.SaveAttachment_doneMessage, new Java.Lang.Object[]{newFilename}), ToastLength.Short).Show();
openBinaryFile(newFilename); builder.SetMessage(GetString(Resource.String.SaveAttachmentDialog_text));
}
builder.SetPositiveButton(GetString(Resource.String.SaveAttachmentDialog_save), new EventHandler<DialogClickEventArgs>((dlgSender, dlgEvt) =>
{
writeBinaryToFile(btnSender.Text, false);
}));
builder.SetNegativeButton(GetString(Resource.String.SaveAttachmentDialog_open), new EventHandler<DialogClickEventArgs>((dlgSender, dlgEvt) =>
{
Android.Net.Uri newUri = writeBinaryToFile(btnSender.Text, true);
if (newUri != null)
{
openBinaryFile(newUri);
}
}));
Dialog dialog = builder.Create();
dialog.Show();
}; };
binariesGroup.AddView(binaryButton,layoutParams); binariesGroup.AddView(binaryButton,layoutParams);
@@ -370,7 +403,7 @@ namespace keepass2android
button.Click += (object sender, EventArgs e) => { button.Click += (object sender, EventArgs e) => {
Finish(); }; Finish(); };
} }
if (ActionBar != null) if (Util.HasActionBar(this))
{ {
ActionBar.Title = mEntry.Strings.ReadSafe(PwDefs.TitleField); ActionBar.Title = mEntry.Strings.ReadSafe(PwDefs.TitleField);
ActionBar.SetDisplayHomeAsUpEnabled(true); ActionBar.SetDisplayHomeAsUpEnabled(true);
@@ -497,7 +530,38 @@ namespace keepass2android
password.TransformationMethod = PasswordTransformationMethod.Instance; password.TransformationMethod = PasswordTransformationMethod.Instance;
} }
} }
protected override void OnResume()
{
ClearCache();
base.OnResume();
}
public void ClearCache() {
try {
File dir = CacheDir;
if (dir != null && dir.IsDirectory) {
deleteDir(dir);
}
} catch (Exception e) {
}
}
public static bool deleteDir(File dir) {
if (dir != null && dir.IsDirectory) {
String[] children = dir.List();
for (int i = 0; i < children.Length; i++) {
bool success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
// The directory is now empty so delete it
return dir.Delete();
}
public override bool OnOptionsItemSelected(IMenuItem item) { public override bool OnOptionsItemSelected(IMenuItem item) {
switch ( item.ItemId ) { switch ( item.ItemId ) {
case Resource.Id.menu_donate: case Resource.Id.menu_donate:

View File

@@ -221,7 +221,7 @@ namespace keepass2android
View save = FindViewById(Resource.Id.entry_save); View save = FindViewById(Resource.Id.entry_save);
if (save == null) if (save == null)
{ {
//save is not part of layout for API >= 14 -> use action bar
ActionBar.SetCustomView(Resource.Layout.SaveButton); ActionBar.SetCustomView(Resource.Layout.SaveButton);
ActionBar.SetDisplayShowCustomEnabled(true); ActionBar.SetDisplayShowCustomEnabled(true);
ActionBar.SetDisplayShowTitleEnabled(false); ActionBar.SetDisplayShowTitleEnabled(false);
@@ -434,16 +434,11 @@ namespace keepass2android
TextView valueView = (TextView)view.FindViewById(Resource.Id.value); TextView valueView = (TextView)view.FindViewById(Resource.Id.value);
String value = valueView.Text; String value = valueView.Text;
CheckBox cb = (CheckBox)view.FindViewById(Resource.Id.protection);
bool protect = true; bool protect = true;
ProtectedString initialString = State.mEntryInDatabase.Strings.Get(key); ProtectedString initialString = State.mEntryInDatabase.Strings.Get(key);
if (initialString != null) if (initialString != null)
protect = initialString.IsProtected; protect = initialString.IsProtected;
if (cb != null) //Checkbox removed for ICS (for clarity)
{
protect = cb.Checked;
}
entry.Strings.Set(key, new ProtectedString(protect, value)); entry.Strings.Set(key, new ProtectedString(protect, value));
} }
@@ -787,15 +782,6 @@ namespace keepass2android
((TextView)ees.FindViewById(Resource.Id.value)).Text = pair.Value.ReadString(); ((TextView)ees.FindViewById(Resource.Id.value)).Text = pair.Value.ReadString();
((TextView)ees.FindViewById(Resource.Id.value)).TextChanged += (sender, e) => State.mEntryModified = true; ((TextView)ees.FindViewById(Resource.Id.value)).TextChanged += (sender, e) => State.mEntryModified = true;
ees.FindViewById(Resource.Id.delete).Click += (sender, e) => deleteAdvancedString((View)sender); 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; return ees;
} }

View File

@@ -149,7 +149,7 @@ namespace keepass2android
} }
} }
//ICS? //ICS?
if (ActionBar != null) if (Util.HasActionBar(this))
{ {
ActionBar.Title = titleText; ActionBar.Title = titleText;
if (clickable) if (clickable)
@@ -164,7 +164,7 @@ namespace keepass2android
ImageView iv = (ImageView) FindViewById(Resource.Id.icon); ImageView iv = (ImageView) FindViewById(Resource.Id.icon);
if (iv != null) if (iv != null)
iv.SetImageDrawable(drawable); iv.SetImageDrawable(drawable);
if (ActionBar != null) if (Util.HasActionBar(this))
ActionBar.SetIcon(drawable); ActionBar.SetIcon(drawable);
} }
} }

View File

@@ -87,6 +87,7 @@ namespace keepass2android
AlertDialog.Builder builder = new AlertDialog.Builder(this); AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.SetTitle(GetString(Resource.String.ChangeLog_title)); builder.SetTitle(GetString(Resource.String.ChangeLog_title));
String[] changeLog = { String[] changeLog = {
GetString(Resource.String.ChangeLog_0_8),
GetString(Resource.String.ChangeLog_0_7), GetString(Resource.String.ChangeLog_0_7),
GetString(Resource.String.ChangeLog) GetString(Resource.String.ChangeLog)
}; };

View File

@@ -492,26 +492,26 @@ namespace keepass2android
// aapt resource value: 0x7f0c000a // aapt resource value: 0x7f0c000a
public const int Credit = 2131492874; public const int Credit = 2131492874;
// aapt resource value: 0x7f0c0071 // aapt resource value: 0x7f0c006f
public const int IconGridView = 2131492977; public const int IconGridView = 2131492975;
// aapt resource value: 0x7f0c0081
public const int QuickUnlock_button = 2131492993;
// aapt resource value: 0x7f0c0082
public const int QuickUnlock_buttonLock = 2131492994;
// aapt resource value: 0x7f0c007f // aapt resource value: 0x7f0c007f
public const int QuickUnlock_label = 2131492991; public const int QuickUnlock_button = 2131492991;
// aapt resource value: 0x7f0c0080 // aapt resource value: 0x7f0c0080
public const int QuickUnlock_password = 2131492992; public const int QuickUnlock_buttonLock = 2131492992;
// aapt resource value: 0x7f0c0055 // aapt resource value: 0x7f0c007d
public const int RelativeLayout = 2131492949; public const int QuickUnlock_label = 2131492989;
// aapt resource value: 0x7f0c0054 // aapt resource value: 0x7f0c007e
public const int ScrollView = 2131492948; public const int QuickUnlock_password = 2131492990;
// aapt resource value: 0x7f0c0053
public const int RelativeLayout = 2131492947;
// aapt resource value: 0x7f0c0052
public const int ScrollView = 2131492946;
// aapt resource value: 0x7f0c0009 // aapt resource value: 0x7f0c0009
public const int about_button = 2131492873; public const int about_button = 2131492873;
@@ -519,17 +519,17 @@ namespace keepass2android
// aapt resource value: 0x7f0c0000 // aapt resource value: 0x7f0c0000
public const int about_title = 2131492864; public const int about_title = 2131492864;
// aapt resource value: 0x7f0c0052 // aapt resource value: 0x7f0c0050
public const int accept_button = 2131492946; public const int accept_button = 2131492944;
// aapt resource value: 0x7f0c0024 // aapt resource value: 0x7f0c0024
public const int add_advanced = 2131492900; public const int add_advanced = 2131492900;
// aapt resource value: 0x7f0c0067
public const int add_entry = 2131492967;
// aapt resource value: 0x7f0c0066 // aapt resource value: 0x7f0c0066
public const int add_group = 2131492966; public const int add_entry = 2131492966;
// aapt resource value: 0x7f0c0065
public const int add_group = 2131492965;
// aapt resource value: 0x7f0c0023 // aapt resource value: 0x7f0c0023
public const int advanced_container = 2131492899; public const int advanced_container = 2131492899;
@@ -537,104 +537,104 @@ namespace keepass2android
// aapt resource value: 0x7f0c0026 // aapt resource value: 0x7f0c0026
public const int binaries = 2131492902; public const int binaries = 2131492902;
// aapt resource value: 0x7f0c0036 // aapt resource value: 0x7f0c0034
public const int bottom_bar = 2131492918; public const int bottom_bar = 2131492916;
// aapt resource value: 0x7f0c0050 // aapt resource value: 0x7f0c004e
public const int bottom_layout = 2131492944; public const int bottom_layout = 2131492942;
// aapt resource value: 0x7f0c004b // aapt resource value: 0x7f0c0049
public const int browse_button = 2131492939; public const int browse_button = 2131492937;
// aapt resource value: 0x7f0c0058
public const int btn_length12 = 2131492952;
// aapt resource value: 0x7f0c0057
public const int btn_length16 = 2131492951;
// aapt resource value: 0x7f0c005a // aapt resource value: 0x7f0c005a
public const int btn_length12 = 2131492954; public const int btn_length6 = 2131492954;
// aapt resource value: 0x7f0c0059 // aapt resource value: 0x7f0c0059
public const int btn_length16 = 2131492953; public const int btn_length8 = 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 // aapt resource value: 0x7f0c000e
public const int cancel = 2131492878; public const int cancel = 2131492878;
// aapt resource value: 0x7f0c0053 // aapt resource value: 0x7f0c0051
public const int cancel_button = 2131492947; public const int cancel_button = 2131492945;
// aapt resource value: 0x7f0c0092
public const int cbCaseSensitive = 2131493010;
// aapt resource value: 0x7f0c0093
public const int cbExcludeExpiredEntries = 2131493011;
// aapt resource value: 0x7f0c0088
public const int cbRegEx = 2131493000;
// aapt resource value: 0x7f0c0091
public const int cbSearchInGroupName = 2131493009;
// aapt resource value: 0x7f0c008e
public const int cbSearchInNotes = 2131493006;
// aapt resource value: 0x7f0c008f
public const int cbSearchInOtherStrings = 2131493007;
// aapt resource value: 0x7f0c008d
public const int cbSearchInPassword = 2131493005;
// aapt resource value: 0x7f0c0090 // aapt resource value: 0x7f0c0090
public const int cbSearchInTags = 2131493008; public const int cbCaseSensitive = 2131493008;
// aapt resource value: 0x7f0c008a // aapt resource value: 0x7f0c0091
public const int cbSearchInTitle = 2131493002; public const int cbExcludeExpiredEntries = 2131493009;
// aapt resource value: 0x7f0c008b // aapt resource value: 0x7f0c0086
public const int cbSearchInUrl = 2131493003; public const int cbRegEx = 2131492998;
// aapt resource value: 0x7f0c008f
public const int cbSearchInGroupName = 2131493007;
// aapt resource value: 0x7f0c008c // aapt resource value: 0x7f0c008c
public const int cbSearchInUsername = 2131493004; public const int cbSearchInNotes = 2131493004;
// aapt resource value: 0x7f0c0065 // aapt resource value: 0x7f0c008d
public const int cb_brackets = 2131492965; public const int cbSearchInOtherStrings = 2131493005;
// aapt resource value: 0x7f0c0060 // aapt resource value: 0x7f0c008b
public const int cb_digits = 2131492960; public const int cbSearchInPassword = 2131493003;
// aapt resource value: 0x7f0c005f // aapt resource value: 0x7f0c008e
public const int cb_lowercase = 2131492959; public const int cbSearchInTags = 2131493006;
// aapt resource value: 0x7f0c0061 // aapt resource value: 0x7f0c0088
public const int cb_minus = 2131492961; public const int cbSearchInTitle = 2131493000;
// aapt resource value: 0x7f0c0089
public const int cbSearchInUrl = 2131493001;
// aapt resource value: 0x7f0c008a
public const int cbSearchInUsername = 2131493002;
// aapt resource value: 0x7f0c0063 // aapt resource value: 0x7f0c0063
public const int cb_space = 2131492963; public const int cb_brackets = 2131492963;
// aapt resource value: 0x7f0c0064
public const int cb_specials = 2131492964;
// aapt resource value: 0x7f0c0062
public const int cb_underline = 2131492962;
// aapt resource value: 0x7f0c005e // aapt resource value: 0x7f0c005e
public const int cb_uppercase = 2131492958; public const int cb_digits = 2131492958;
// aapt resource value: 0x7f0c004e // aapt resource value: 0x7f0c005d
public const int create = 2131492942; public const int cb_lowercase = 2131492957;
// aapt resource value: 0x7f0c0098 // aapt resource value: 0x7f0c005f
public const int cred_password = 2131493016; public const int cb_minus = 2131492959;
// aapt resource value: 0x7f0c0099 // aapt resource value: 0x7f0c0061
public const int cred_remember_mode = 2131493017; public const int cb_space = 2131492961;
// aapt resource value: 0x7f0c0062
public const int cb_specials = 2131492962;
// aapt resource value: 0x7f0c0060
public const int cb_underline = 2131492960;
// aapt resource value: 0x7f0c005c
public const int cb_uppercase = 2131492956;
// aapt resource value: 0x7f0c004c
public const int create = 2131492940;
// aapt resource value: 0x7f0c0096
public const int cred_password = 2131493014;
// aapt resource value: 0x7f0c0097 // aapt resource value: 0x7f0c0097
public const int cred_username = 2131493015; public const int cred_remember_mode = 2131493015;
// aapt resource value: 0x7f0c007a // aapt resource value: 0x7f0c0095
public const int default_database = 2131492986; public const int cred_username = 2131493013;
// aapt resource value: 0x7f0c0078
public const int default_database = 2131492984;
// aapt resource value: 0x7f0c0030 // aapt resource value: 0x7f0c0030
public const int delete = 2131492912; public const int delete = 2131492912;
@@ -651,17 +651,14 @@ namespace keepass2android
// aapt resource value: 0x7f0c0007 // aapt resource value: 0x7f0c0007
public const int divider3 = 2131492871; public const int divider3 = 2131492871;
// aapt resource value: 0x7f0c0032 // aapt resource value: 0x7f0c0079
public const int divider_comment = 2131492914; public const int enable_quickunlock = 2131492985;
// aapt resource value: 0x7f0c007b // aapt resource value: 0x7f0c0040
public const int enable_quickunlock = 2131492987; public const int entry_accessed = 2131492928;
// aapt resource value: 0x7f0c0042 // aapt resource value: 0x7f0c003f
public const int entry_accessed = 2131492930; public const int entry_accessed_label = 2131492927;
// aapt resource value: 0x7f0c0041
public const int entry_accessed_label = 2131492929;
// aapt resource value: 0x7f0c0025 // aapt resource value: 0x7f0c0025
public const int entry_binaries_label = 2131492901; public const int entry_binaries_label = 2131492901;
@@ -678,20 +675,20 @@ namespace keepass2android
// aapt resource value: 0x7f0c001e // aapt resource value: 0x7f0c001e
public const int entry_confpassword_label = 2131492894; public const int entry_confpassword_label = 2131492894;
// aapt resource value: 0x7f0c0039
public const int entry_contents = 2131492921;
// aapt resource value: 0x7f0c003e
public const int entry_created = 2131492926;
// aapt resource value: 0x7f0c003d
public const int entry_created_label = 2131492925;
// aapt resource value: 0x7f0c0038
public const int entry_divider2 = 2131492920;
// aapt resource value: 0x7f0c0037 // aapt resource value: 0x7f0c0037
public const int entry_edit = 2131492919; public const int entry_contents = 2131492919;
// aapt resource value: 0x7f0c003c
public const int entry_created = 2131492924;
// aapt resource value: 0x7f0c003b
public const int entry_created_label = 2131492923;
// aapt resource value: 0x7f0c0036
public const int entry_divider2 = 2131492918;
// aapt resource value: 0x7f0c0035
public const int entry_edit = 2131492917;
// aapt resource value: 0x7f0c002d // aapt resource value: 0x7f0c002d
public const int entry_expires = 2131492909; public const int entry_expires = 2131492909;
@@ -705,14 +702,14 @@ namespace keepass2android
// aapt resource value: 0x7f0c0022 // aapt resource value: 0x7f0c0022
public const int entry_extra_strings_label = 2131492898; public const int entry_extra_strings_label = 2131492898;
// aapt resource value: 0x7f0c0033 // aapt resource value: 0x7f0c0031
public const int entry_icon = 2131492915; public const int entry_icon = 2131492913;
// aapt resource value: 0x7f0c0040 // aapt resource value: 0x7f0c003e
public const int entry_modified = 2131492928; public const int entry_modified = 2131492926;
// aapt resource value: 0x7f0c003f // aapt resource value: 0x7f0c003d
public const int entry_modified_label = 2131492927; public const int entry_modified_label = 2131492925;
// aapt resource value: 0x7f0c002a // aapt resource value: 0x7f0c002a
public const int entry_override_url = 2131492906; public const int entry_override_url = 2131492906;
@@ -735,8 +732,8 @@ namespace keepass2android
// aapt resource value: 0x7f0c0013 // aapt resource value: 0x7f0c0013
public const int entry_scroll = 2131492883; public const int entry_scroll = 2131492883;
// aapt resource value: 0x7f0c003b // aapt resource value: 0x7f0c0039
public const int entry_table = 2131492923; public const int entry_table = 2131492921;
// aapt resource value: 0x7f0c0028 // aapt resource value: 0x7f0c0028
public const int entry_tags = 2131492904; public const int entry_tags = 2131492904;
@@ -744,8 +741,8 @@ namespace keepass2android
// aapt resource value: 0x7f0c0027 // aapt resource value: 0x7f0c0027
public const int entry_tags_label = 2131492903; public const int entry_tags_label = 2131492903;
// aapt resource value: 0x7f0c0034 // aapt resource value: 0x7f0c0032
public const int entry_text = 2131492916; public const int entry_text = 2131492914;
// aapt resource value: 0x7f0c0016 // aapt resource value: 0x7f0c0016
public const int entry_title = 2131492886; public const int entry_title = 2131492886;
@@ -765,71 +762,71 @@ namespace keepass2android
// aapt resource value: 0x7f0c0017 // aapt resource value: 0x7f0c0017
public const int entry_user_name_label = 2131492887; public const int entry_user_name_label = 2131492887;
// aapt resource value: 0x7f0c003c // aapt resource value: 0x7f0c003a
public const int extra_strings = 2131492924; public const int extra_strings = 2131492922;
// aapt resource value: 0x7f0c0006 // aapt resource value: 0x7f0c0006
public const int feedback = 2131492870; public const int feedback = 2131492870;
// aapt resource value: 0x7f0c0043 // aapt resource value: 0x7f0c0041
public const int file_filename = 2131492931; public const int file_filename = 2131492929;
// aapt resource value: 0x7f0c0044 // aapt resource value: 0x7f0c0042
public const int file_listtop = 2131492932; public const int file_listtop = 2131492930;
// aapt resource value: 0x7f0c0051
public const int file_select = 2131492945;
// aapt resource value: 0x7f0c0075
public const int filename = 2131492981;
// aapt resource value: 0x7f0c0049
public const int filename_form = 2131492937;
// aapt resource value: 0x7f0c0073
public const int filename_label = 2131492979;
// aapt resource value: 0x7f0c0074
public const int filenamescroll = 2131492980;
// aapt resource value: 0x7f0c004f // aapt resource value: 0x7f0c004f
public const int fnv_cancel = 2131492943; public const int file_select = 2131492943;
// aapt resource value: 0x7f0c0073
public const int filename = 2131492979;
// aapt resource value: 0x7f0c0047
public const int filename_form = 2131492935;
// aapt resource value: 0x7f0c0071
public const int filename_label = 2131492977;
// aapt resource value: 0x7f0c0072
public const int filenamescroll = 2131492978;
// aapt resource value: 0x7f0c004d
public const int fnv_cancel = 2131492941;
// aapt resource value: 0x7f0c001c // aapt resource value: 0x7f0c001c
public const int generate_button = 2131492892; public const int generate_button = 2131492892;
// aapt resource value: 0x7f0c0057 // aapt resource value: 0x7f0c0055
public const int generate_password_button = 2131492951; public const int generate_password_button = 2131492949;
// aapt resource value: 0x7f0c0064
public const int group_header = 2131492964;
// aapt resource value: 0x7f0c006a // aapt resource value: 0x7f0c006a
public const int group_header = 2131492970; public const int group_icon = 2131492970;
// aapt resource value: 0x7f0c006c // aapt resource value: 0x7f0c006c
public const int group_icon = 2131492972; public const int group_label = 2131492972;
// aapt resource value: 0x7f0c006e // aapt resource value: 0x7f0c0067
public const int group_label = 2131492974; public const int group_name = 2131492967;
// aapt resource value: 0x7f0c0068 // aapt resource value: 0x7f0c006b
public const int group_name = 2131492968; public const int group_text = 2131492971;
// aapt resource value: 0x7f0c006d
public const int group_text = 2131492973;
// aapt resource value: 0x7f0c0005 // aapt resource value: 0x7f0c0005
public const int homepage = 2131492869; public const int homepage = 2131492869;
// aapt resource value: 0x7f0c006b // aapt resource value: 0x7f0c0069
public const int icon = 2131492971; public const int icon = 2131492969;
// aapt resource value: 0x7f0c0015 // aapt resource value: 0x7f0c0015
public const int icon_button = 2131492885; public const int icon_button = 2131492885;
// aapt resource value: 0x7f0c006f // aapt resource value: 0x7f0c006d
public const int icon_image = 2131492975; public const int icon_image = 2131492973;
// aapt resource value: 0x7f0c0070 // aapt resource value: 0x7f0c006e
public const int icon_text = 2131492976; public const int icon_text = 2131492974;
// aapt resource value: 0x7f0c000c // aapt resource value: 0x7f0c000c
public const int install_market = 2131492876; public const int install_market = 2131492876;
@@ -837,101 +834,98 @@ namespace keepass2android
// aapt resource value: 0x7f0c000d // aapt resource value: 0x7f0c000d
public const int install_web = 2131492877; public const int install_web = 2131492877;
// aapt resource value: 0x7f0c0072 // aapt resource value: 0x7f0c0070
public const int keyboard = 2131492978; public const int keyboard = 2131492976;
// aapt resource value: 0x7f0c007d // aapt resource value: 0x7f0c007b
public const int keyfileLine = 2131492989; public const int keyfileLine = 2131492987;
// aapt resource value: 0x7f0c0048
public const int label_open_by_filename = 2131492936;
// aapt resource value: 0x7f0c004a // aapt resource value: 0x7f0c004a
public const int label_open_by_filename = 2131492938; public const int label_open_by_filename_details = 2131492938;
// aapt resource value: 0x7f0c004c // aapt resource value: 0x7f0c0043
public const int label_open_by_filename_details = 2131492940; public const int label_warning = 2131492931;
// aapt resource value: 0x7f0c0045 // aapt resource value: 0x7f0c005b
public const int label_warning = 2131492933; public const int length = 2131492955;
// aapt resource value: 0x7f0c005d
public const int length = 2131492957;
// aapt resource value: 0x7f0c0058
public const int length_label = 2131492952;
// aapt resource value: 0x7f0c0087
public const int linearLayout1 = 2131492999;
// aapt resource value: 0x7f0c00a3
public const int menu_about = 2131493027;
// aapt resource value: 0x7f0c00a2
public const int menu_app_settings = 2131493026;
// 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_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: 0x7f0c004d
public const int open = 2131492941;
// aapt resource value: 0x7f0c0095
public const int pass_conf_password = 2131493013;
// aapt resource value: 0x7f0c0078
public const int pass_keyfile = 2131492984;
// aapt resource value: 0x7f0c0079
public const int pass_ok = 2131492985;
// aapt resource value: 0x7f0c0094
public const int pass_password = 2131493012;
// aapt resource value: 0x7f0c0056 // aapt resource value: 0x7f0c0056
public const int password = 2131492950; public const int length_label = 2131492950;
// aapt resource value: 0x7f0c007c // aapt resource value: 0x7f0c0085
public const int passwordLine = 2131492988; public const int linearLayout1 = 2131492997;
// aapt resource value: 0x7f0c00a1
public const int menu_about = 2131493025;
// aapt resource value: 0x7f0c00a0
public const int menu_app_settings = 2131493024;
// aapt resource value: 0x7f0c009f
public const int menu_cancel_edit = 2131493023;
// aapt resource value: 0x7f0c00a3
public const int menu_change_master_key = 2131493027;
// aapt resource value: 0x7f0c0098
public const int menu_donate = 2131493016;
// aapt resource value: 0x7f0c009a
public const int menu_goto_url = 2131493018;
// aapt resource value: 0x7f0c009b
public const int menu_lock = 2131493019;
// aapt resource value: 0x7f0c009d
public const int menu_rate = 2131493021;
// aapt resource value: 0x7f0c00a2
public const int menu_search = 2131493026;
// aapt resource value: 0x7f0c00a4
public const int menu_sort = 2131493028;
// aapt resource value: 0x7f0c009c
public const int menu_suggest_improvements = 2131493020;
// aapt resource value: 0x7f0c0099
public const int menu_toggle_pass = 2131493017;
// aapt resource value: 0x7f0c009e
public const int menu_translate = 2131493022;
// aapt resource value: 0x7f0c0068
public const int ok = 2131492968;
// aapt resource value: 0x7f0c004b
public const int open = 2131492939;
// aapt resource value: 0x7f0c0093
public const int pass_conf_password = 2131493011;
// aapt resource value: 0x7f0c0076 // aapt resource value: 0x7f0c0076
public const int password_label = 2131492982; public const int pass_keyfile = 2131492982;
// aapt resource value: 0x7f0c002f // aapt resource value: 0x7f0c0077
public const int protection = 2131492911; public const int pass_ok = 2131492983;
// aapt resource value: 0x7f0c007e // aapt resource value: 0x7f0c0092
public const int qu_filename = 2131492990; public const int pass_password = 2131493010;
// aapt resource value: 0x7f0c0054
public const int password = 2131492948;
// aapt resource value: 0x7f0c007a
public const int passwordLine = 2131492986;
// aapt resource value: 0x7f0c0074
public const int password_label = 2131492980;
// aapt resource value: 0x7f0c007c
public const int qu_filename = 2131492988;
// aapt resource value: 0x7f0c000f // aapt resource value: 0x7f0c000f
public const int rounds = 2131492879; public const int rounds = 2131492879;
@@ -939,32 +933,32 @@ namespace keepass2android
// aapt resource value: 0x7f0c0010 // aapt resource value: 0x7f0c0010
public const int rounds_explaination = 2131492880; public const int rounds_explaination = 2131492880;
// aapt resource value: 0x7f0c0086
public const int scrollView1 = 2131492998;
// aapt resource value: 0x7f0c0085
public const int searchEditText = 2131492997;
// aapt resource value: 0x7f0c0084 // aapt resource value: 0x7f0c0084
public const int search_button = 2131492996; public const int scrollView1 = 2131492996;
// aapt resource value: 0x7f0c0089
public const int search_in_label = 2131493001;
// aapt resource value: 0x7f0c0083 // aapt resource value: 0x7f0c0083
public const int search_label = 2131492995; public const int searchEditText = 2131492995;
// aapt resource value: 0x7f0c0048 // aapt resource value: 0x7f0c0082
public const int start_create = 2131492936; public const int search_button = 2131492994;
// aapt resource value: 0x7f0c0096 // aapt resource value: 0x7f0c0087
public const int start_create_import = 2131493014; public const int search_in_label = 2131492999;
// aapt resource value: 0x7f0c0081
public const int search_label = 2131492993;
// aapt resource value: 0x7f0c0046 // aapt resource value: 0x7f0c0046
public const int start_open_file = 2131492934; public const int start_create = 2131492934;
// aapt resource value: 0x7f0c0047 // aapt resource value: 0x7f0c0094
public const int start_open_url = 2131492935; public const int start_create_import = 2131493012;
// aapt resource value: 0x7f0c0044
public const int start_open_file = 2131492932;
// aapt resource value: 0x7f0c0045
public const int start_open_url = 2131492933;
// aapt resource value: 0x7f0c000b // aapt resource value: 0x7f0c000b
public const int text = 2131492875; public const int text = 2131492875;
@@ -972,17 +966,17 @@ namespace keepass2android
// aapt resource value: 0x7f0c002e // aapt resource value: 0x7f0c002e
public const int title = 2131492910; public const int title = 2131492910;
// aapt resource value: 0x7f0c0035 // aapt resource value: 0x7f0c0033
public const int title_block = 2131492917; public const int title_block = 2131492915;
// aapt resource value: 0x7f0c0077 // aapt resource value: 0x7f0c0075
public const int toggle_password = 2131492983; public const int toggle_password = 2131492981;
// aapt resource value: 0x7f0c003a // aapt resource value: 0x7f0c0038
public const int top = 2131492922; public const int top = 2131492920;
// aapt resource value: 0x7f0c0031 // aapt resource value: 0x7f0c002f
public const int value = 2131492913; public const int value = 2131492911;
// aapt resource value: 0x7f0c0003 // aapt resource value: 0x7f0c0003
public const int version = 2131492867; public const int version = 2131492867;
@@ -1137,41 +1131,41 @@ namespace keepass2android
// aapt resource value: 0x7f070030 // aapt resource value: 0x7f070030
public const int AboutText = 2131165232; public const int AboutText = 2131165232;
// aapt resource value: 0x7f070106 // aapt resource value: 0x7f07010a
public const int AskDeletePermanentlyEntry = 2131165446; public const int AskDeletePermanentlyEntry = 2131165450;
// aapt resource value: 0x7f070107
public const int AskDeletePermanentlyGroup = 2131165447;
// aapt resource value: 0x7f070108
public const int AskDeletePermanently_title = 2131165448;
// aapt resource value: 0x7f07010b // aapt resource value: 0x7f07010b
public const int AskDiscardChanges = 2131165451; public const int AskDeletePermanentlyGroup = 2131165451;
// aapt resource value: 0x7f07010c // aapt resource value: 0x7f07010c
public const int AskDiscardChanges_title = 2131165452; public const int AskDeletePermanently_title = 2131165452;
// aapt resource value: 0x7f070100 // aapt resource value: 0x7f07010f
public const int AskOverwriteBinary = 2131165440; public const int AskDiscardChanges = 2131165455;
// aapt resource value: 0x7f070103 // aapt resource value: 0x7f070110
public const int AskOverwriteBinary_no = 2131165443; public const int AskDiscardChanges_title = 2131165456;
// 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 // aapt resource value: 0x7f070104
public const int AttachFailed = 2131165444; public const int AskOverwriteBinary = 2131165444;
// aapt resource value: 0x7f070107
public const int AskOverwriteBinary_no = 2131165447;
// aapt resource value: 0x7f070105
public const int AskOverwriteBinary_title = 2131165445;
// aapt resource value: 0x7f070106
public const int AskOverwriteBinary_yes = 2131165446;
// aapt resource value: 0x7f07010e
public const int AskReloadFile = 2131165454;
// aapt resource value: 0x7f07010d
public const int AskReloadFile_title = 2131165453;
// aapt resource value: 0x7f070108
public const int AttachFailed = 2131165448;
// aapt resource value: 0x7f070020 // aapt resource value: 0x7f070020
public const int BinaryDirectory_default = 2131165216; public const int BinaryDirectory_default = 2131165216;
@@ -1185,14 +1179,17 @@ namespace keepass2android
// aapt resource value: 0x7f0700ed // aapt resource value: 0x7f0700ed
public const int BinaryDirectory_title = 2131165421; public const int BinaryDirectory_title = 2131165421;
// aapt resource value: 0x7f070112 // aapt resource value: 0x7f070117
public const int ChangeLog = 2131165458; public const int ChangeLog = 2131165463;
// aapt resource value: 0x7f070111 // aapt resource value: 0x7f070116
public const int ChangeLog_0_7 = 2131165457; public const int ChangeLog_0_7 = 2131165462;
// aapt resource value: 0x7f070110 // aapt resource value: 0x7f070115
public const int ChangeLog_title = 2131165456; public const int ChangeLog_0_8 = 2131165461;
// aapt resource value: 0x7f070114
public const int ChangeLog_title = 2131165460;
// aapt resource value: 0x7f070044 // aapt resource value: 0x7f070044
public const int ClearClipboard = 2131165252; public const int ClearClipboard = 2131165252;
@@ -1251,26 +1248,38 @@ namespace keepass2android
// aapt resource value: 0x7f0700e7 // aapt resource value: 0x7f0700e7
public const int QuickUnlock_lockButton = 2131165415; public const int QuickUnlock_lockButton = 2131165415;
// aapt resource value: 0x7f070105 // aapt resource value: 0x7f070109
public const int RecycleBin = 2131165445; public const int RecycleBin = 2131165449;
// aapt resource value: 0x7f0700f2
public const int SaveAttachmentDialog_open = 2131165426;
// aapt resource value: 0x7f0700f1
public const int SaveAttachmentDialog_save = 2131165425;
// aapt resource value: 0x7f0700f0 // aapt resource value: 0x7f0700f0
public const int SaveAttachment_Failed = 2131165424; public const int SaveAttachmentDialog_text = 2131165424;
// aapt resource value: 0x7f0700ef // aapt resource value: 0x7f0700ef
public const int SaveAttachment_doneMessage = 2131165423; public const int SaveAttachmentDialog_title = 2131165423;
// aapt resource value: 0x7f0700fd // aapt resource value: 0x7f0700f4
public const int ShowCopyToClipboardNotification_summary = 2131165437; public const int SaveAttachment_Failed = 2131165428;
// aapt resource value: 0x7f0700fc // aapt resource value: 0x7f0700f3
public const int ShowCopyToClipboardNotification_title = 2131165436; public const int SaveAttachment_doneMessage = 2131165427;
// aapt resource value: 0x7f0700ff // aapt resource value: 0x7f070101
public const int ShowKp2aKeyboardNotification_summary = 2131165439; public const int ShowCopyToClipboardNotification_summary = 2131165441;
// aapt resource value: 0x7f0700fe // aapt resource value: 0x7f070100
public const int ShowKp2aKeyboardNotification_title = 2131165438; public const int ShowCopyToClipboardNotification_title = 2131165440;
// aapt resource value: 0x7f070103
public const int ShowKp2aKeyboardNotification_summary = 2131165443;
// aapt resource value: 0x7f070102
public const int ShowKp2aKeyboardNotification_title = 2131165442;
// aapt resource value: 0x7f070028 // aapt resource value: 0x7f070028
public const int SuggestionsURL = 2131165224; public const int SuggestionsURL = 2131165224;
@@ -1293,11 +1302,11 @@ namespace keepass2android
// aapt resource value: 0x7f070026 // aapt resource value: 0x7f070026
public const int UseFileTransactions_key = 2131165222; public const int UseFileTransactions_key = 2131165222;
// aapt resource value: 0x7f0700fb // aapt resource value: 0x7f0700ff
public const int UseFileTransactions_summary = 2131165435; public const int UseFileTransactions_summary = 2131165439;
// aapt resource value: 0x7f0700fa // aapt resource value: 0x7f0700fe
public const int UseFileTransactions_title = 2131165434; public const int UseFileTransactions_title = 2131165438;
// aapt resource value: 0x7f07002b // aapt resource value: 0x7f07002b
public const int UseKp2aKeyboard_key = 2131165227; public const int UseKp2aKeyboard_key = 2131165227;
@@ -1311,14 +1320,14 @@ namespace keepass2android
// aapt resource value: 0x7f070032 // aapt resource value: 0x7f070032
public const int accept = 2131165234; public const int accept = 2131165234;
// aapt resource value: 0x7f0700f6 // aapt resource value: 0x7f0700fa
public const int add_binary = 2131165430; public const int add_binary = 2131165434;
// aapt resource value: 0x7f070033 // aapt resource value: 0x7f070033
public const int add_entry = 2131165235; public const int add_entry = 2131165235;
// aapt resource value: 0x7f0700f7 // aapt resource value: 0x7f0700fb
public const int add_extra_string = 2131165431; public const int add_extra_string = 2131165435;
// aapt resource value: 0x7f070034 // aapt resource value: 0x7f070034
public const int add_group = 2131165236; public const int add_group = 2131165236;
@@ -1401,8 +1410,8 @@ namespace keepass2android
// aapt resource value: 0x7f07004c // aapt resource value: 0x7f07004c
public const int creating_db_key = 2131165260; public const int creating_db_key = 2131165260;
// aapt resource value: 0x7f0700f9 // aapt resource value: 0x7f0700fd
public const int credentials_dialog_title = 2131165433; public const int credentials_dialog_title = 2131165437;
// aapt resource value: 0x7f07004d // aapt resource value: 0x7f07004d
public const int current_group = 2131165261; public const int current_group = 2131165261;
@@ -1413,8 +1422,8 @@ namespace keepass2android
// aapt resource value: 0x7f07004f // aapt resource value: 0x7f07004f
public const int database = 2131165263; public const int database = 2131165263;
// aapt resource value: 0x7f0700f8 // aapt resource value: 0x7f0700fc
public const int database_loaded_quickunlock_enabled = 2131165432; public const int database_loaded_quickunlock_enabled = 2131165436;
// aapt resource value: 0x7f0700c4 // aapt resource value: 0x7f0700c4
public const int database_name = 2131165380; public const int database_name = 2131165380;
@@ -1551,8 +1560,8 @@ namespace keepass2android
// aapt resource value: 0x7f070072 // aapt resource value: 0x7f070072
public const int error_invalid_db = 2131165298; public const int error_invalid_db = 2131165298;
// aapt resource value: 0x7f0700f1 // aapt resource value: 0x7f0700f5
public const int error_invalid_expiry_date = 2131165425; public const int error_invalid_expiry_date = 2131165429;
// aapt resource value: 0x7f070073 // aapt resource value: 0x7f070073
public const int error_invalid_path = 2131165299; public const int error_invalid_path = 2131165299;
@@ -1578,8 +1587,8 @@ namespace keepass2android
// aapt resource value: 0x7f07007a // aapt resource value: 0x7f07007a
public const int error_rounds_too_large = 2131165306; public const int error_rounds_too_large = 2131165306;
// aapt resource value: 0x7f0700f2 // aapt resource value: 0x7f0700f6
public const int error_string_key = 2131165426; public const int error_string_key = 2131165430;
// aapt resource value: 0x7f07007b // aapt resource value: 0x7f07007b
public const int error_title_required = 2131165307; public const int error_title_required = 2131165307;
@@ -1590,11 +1599,11 @@ namespace keepass2android
// aapt resource value: 0x7f0700db // aapt resource value: 0x7f0700db
public const int excludeExpiredEntries = 2131165403; public const int excludeExpiredEntries = 2131165403;
// aapt resource value: 0x7f0700f3 // aapt resource value: 0x7f0700f7
public const int field_name = 2131165427; public const int field_name = 2131165431;
// aapt resource value: 0x7f0700f4 // aapt resource value: 0x7f0700f8
public const int field_value = 2131165428; public const int field_value = 2131165432;
// aapt resource value: 0x7f07007e // aapt resource value: 0x7f07007e
public const int file_browser = 2131165310; public const int file_browser = 2131165310;
@@ -1833,11 +1842,11 @@ namespace keepass2android
// aapt resource value: 0x7f0700bb // aapt resource value: 0x7f0700bb
public const int progress_title = 2131165371; public const int progress_title = 2131165371;
// aapt resource value: 0x7f0700f5 // aapt resource value: 0x7f0700f9
public const int protection = 2131165429; public const int protection = 2131165433;
// aapt resource value: 0x7f07010e // aapt resource value: 0x7f070112
public const int rate_app = 2131165454; public const int rate_app = 2131165458;
// aapt resource value: 0x7f0700d7 // aapt resource value: 0x7f0700d7
public const int regular_expression = 2131165399; public const int regular_expression = 2131165399;
@@ -1923,14 +1932,14 @@ namespace keepass2android
// aapt resource value: 0x7f0700e0 // aapt resource value: 0x7f0700e0
public const int start_open_url = 2131165408; public const int start_open_url = 2131165408;
// aapt resource value: 0x7f07010d // aapt resource value: 0x7f070111
public const int suggest_improvements = 2131165453; public const int suggest_improvements = 2131165457;
// aapt resource value: 0x7f07001b // aapt resource value: 0x7f07001b
public const int timeout_key = 2131165211; public const int timeout_key = 2131165211;
// aapt resource value: 0x7f07010f // aapt resource value: 0x7f070113
public const int translate_app = 2131165455; public const int translate_app = 2131165459;
// aapt resource value: 0x7f0700d0 // aapt resource value: 0x7f0700d0
public const int twofish = 2131165392; public const int twofish = 2131165392;

Binary file not shown.

After

Width:  |  Height:  |  Size: 959 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 785 B

After

Width:  |  Height:  |  Size: 877 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 846 B

After

Width:  |  Height:  |  Size: 713 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 959 B

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -6,14 +6,12 @@
android:text="@string/start_open_file" android:text="@string/start_open_file"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@drawable/GreenButton"
android:layout_alignParentLeft="true" android:layout_alignParentLeft="true"
android:id="@+id/start_open_file" /> android:id="@+id/start_open_file" />
<Button <Button
android:text="@string/start_open_url" android:text="@string/start_open_url"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@drawable/BlueButton"
android:layout_alignParentLeft="true" android:layout_alignParentLeft="true"
android:layout_below="@id/start_open_file" android:layout_below="@id/start_open_file"
android:id="@+id/start_open_url" /> android:id="@+id/start_open_url" />
@@ -21,7 +19,6 @@
android:text="@string/start_create" android:text="@string/start_create"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@drawable/YellowButton"
android:layout_alignParentLeft="true" android:layout_alignParentLeft="true"
android:layout_below="@id/start_open_url" android:layout_below="@id/start_open_url"
android:id="@+id/start_create" /> android:id="@+id/start_create" />
@@ -29,7 +26,6 @@
android:text="@string/start_create_import" android:text="@string/start_create_import"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@drawable/RedButton"
android:layout_alignParentLeft="true" android:layout_alignParentLeft="true"
android:layout_below="@id/start_create" android:layout_below="@id/start_create"
android:id="@+id/start_create_import" /> android:id="@+id/start_create_import" />

View File

@@ -1,40 +1,35 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:orientation="horizontal"
android:layout_width="match_parent"
android:paddingTop="1dip"
android:gravity="center_vertical"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<EditText <EditText
android:id="@+id/title" android:id="@+id/title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:singleLine="true" android:singleLine="true"
android:inputType="text" android:inputType="text"
android:hint="@string/field_name" /> android:hint="@string/field_name"
<CheckBox style="@style/TextAppearance_EditEntry_Value"
android:id="@+id/protection" android:layout_width="0dip"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/title" android:layout_weight="2"
android:text="@string/protection" /> android:gravity="top|left"
<ImageButton android:layout_marginRight="0dip" />
android:id="@+id/delete"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_alignParentRight="true"
android:layout_below="@id/title"
android:src="@android:drawable/ic_delete"
android:scaleType="centerCrop" />
<EditText <EditText
android:id="@+id/value" android:id="@+id/value"
android:layout_width="fill_parent" android:hint="@string/field_value"
android:layout_height="wrap_content"
android:layout_below="@id/delete"
android:inputType="textMultiLine" android:inputType="textMultiLine"
android:hint="@string/field_value" /> style="@style/TextAppearance_EditEntry_Value"
<ImageView android:layout_width="0dip"
android:id="@+id/divider_comment"
android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/value" android:layout_weight="3"
android:scaleType="fitXY" android:gravity="top|left"
android:src="@android:drawable/divider_horizontal_dark" /> android:layout_marginRight="0dip" />
<ImageButton
android:id="@+id/delete"
style="@style/MinusButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical" />
</LinearLayout> </LinearLayout>

View File

@@ -45,7 +45,6 @@
android:text="@string/menu_edit" android:text="@string/menu_edit"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:drawableLeft="@android:drawable/ic_menu_edit" android:drawableLeft="@android:drawable/ic_menu_edit"
android:background="@drawable/GreenButton"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentLeft="true" android:layout_alignParentLeft="true"
android:layout_alignParentBottom="true" /> android:layout_alignParentBottom="true" />

View File

@@ -2,6 +2,10 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="fill_parent"> android:layout_height="fill_parent">
<keepass2android.view.GroupHeaderView
android:id="@+id/group_header"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<LinearLayout <LinearLayout
android:id="@+id/bottom_bar" android:id="@+id/bottom_bar"
android:layout_alignParentBottom="true" android:layout_alignParentBottom="true"
@@ -16,8 +20,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentBottom="true" android:layout_alignParentBottom="true"
android:text="@string/add_group" android:text="@string/add_group"
android:drawableLeft="@drawable/btn_new_group_dark" android:drawableLeft="@drawable/btn_new_group"
android:background="@drawable/GreenButton" /> />
<Button <Button
android:id="@+id/add_entry" android:id="@+id/add_entry"
android:layout_width="0px" android:layout_width="0px"
@@ -26,8 +30,8 @@
android:layout_toRightOf="@id/add_group" android:layout_toRightOf="@id/add_group"
android:layout_alignParentBottom="true" android:layout_alignParentBottom="true"
android:text="@string/add_entry" android:text="@string/add_entry"
android:drawableLeft="@drawable/device_access_new_account_dark" android:drawableLeft="@drawable/device_access_new_account"
android:background="@drawable/GreenButton" /> />
</LinearLayout> </LinearLayout>
<ImageView <ImageView
android:id="@+id/divider2" android:id="@+id/divider2"
@@ -41,5 +45,6 @@
android:id="@android:id/list" android:id="@android:id/list"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_above="@id/divider2" /> android:layout_above="@id/divider2"
android:layout_below="@id/group_header" />
</RelativeLayout> </RelativeLayout>

View File

@@ -76,10 +76,9 @@
<Button <Button
android:id="@+id/pass_ok" android:id="@+id/pass_ok"
android:text="@android:string/ok" android:text="@android:string/ok"
android:layout_width="100sp" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/pass_keyfile" android:layout_below="@id/pass_keyfile" />
android:background="@drawable/GreenButton" />
<CheckBox <CheckBox
android:id="@+id/default_database" android:id="@+id/default_database"
android:layout_width="wrap_content" android:layout_width="wrap_content"

View File

@@ -27,5 +27,6 @@
<color name="emphasis">#31b6e7</color> <color name="emphasis">#31b6e7</color>
<color name="emphasis2">#4f7a8a</color> <color name="emphasis2">#4f7a8a</color>
<color name="bg_gray">#cecbce</color> <color name="bg_gray">#cecbce</color>
<color name="light_gray">#a8a8a8</color>
</resources> </resources>

View File

@@ -194,6 +194,11 @@
<string name="QuickUnlock_fail">QuickUnlock failed: incorrect password!</string> <string name="QuickUnlock_fail">QuickUnlock failed: incorrect password!</string>
<string name="BinaryDirectory_title">File attachments directory</string> <string name="BinaryDirectory_title">File attachments directory</string>
<string name="BinaryDirectory_summary">Directory where file attachments are saved to.</string> <string name="BinaryDirectory_summary">Directory where file attachments are saved to.</string>
<string name="SaveAttachmentDialog_title">Save attachment</string>
<string name="SaveAttachmentDialog_text">Please select where to save the attachment.</string>
<string name="SaveAttachmentDialog_save">Save to SD card</string>
<string name="SaveAttachmentDialog_open">Save to cache and open</string>
<string name="SaveAttachment_doneMessage">Saved file to %1$s.</string> <string name="SaveAttachment_doneMessage">Saved file to %1$s.</string>
<string name="SaveAttachment_Failed">Could not save attachment to %1$s.</string> <string name="SaveAttachment_Failed">Could not save attachment to %1$s.</string>
<string name="error_invalid_expiry_date">Invalid date/time format for expiry date!</string> <string name="error_invalid_expiry_date">Invalid date/time format for expiry date!</string>
@@ -229,7 +234,14 @@
<string name="rate_app">Rate this app</string> <string name="rate_app">Rate this app</string>
<string name="translate_app">Translate KP2A</string> <string name="translate_app">Translate KP2A</string>
<string name="ChangeLog_title">Change log</string> <string name="ChangeLog_title">Change log</string>
<string name="ChangeLog_0_7"><b>Version 0.7</b>\n <string name="ChangeLog_0_8"><b>Version 0.8</b>\n
* Improved user interface especially for Android 4.x devices\n
* Allow using deliberate file managers for selecting existing files\n
* Added safer way for opening attachments (through cache directory)\n
* fixed bugs in Edit activity\n
* probably introduced new bugs :-)
</string>
<string name="ChangeLog_0_7"><b>Version 0.7</b>\n
* Increased loading speed: key transformations now 10x faster!\n * Increased loading speed: key transformations now 10x faster!\n
* Added Keepass2Android soft-keyboard: Switch to this keyboard for entering credentials. Shields you from clipboard-based password sniffers (disable old clipboard notifications in the options)\n * Added Keepass2Android soft-keyboard: Switch to this keyboard for entering credentials. Shields you from clipboard-based password sniffers (disable old clipboard notifications in the options)\n
* Added option to donate a beer or something else (see menu)</string> * Added option to donate a beer or something else (see menu)</string>

View File

@@ -22,42 +22,82 @@
<style name="NoTitleBar" parent="android:Theme.NoTitleBar"></style> <style name="NoTitleBar" parent="android:Theme.NoTitleBar"></style>
<style name="Dialog" parent="android:Theme.Dialog"></style> <style name="Dialog" parent="android:Theme.Dialog"></style>
<style name="GroupTextSmall" parent="android:Theme"> <style name="GroupTextSmall" parent="android:Theme">
<item name="@android:textColor">@color/group</item>
<item name="@android:textSize">15sp</item> <item name="@android:textSize">15sp</item>
</style> </style>
<style name="GroupText" parent="android:Theme"> <style name="GroupText" parent="android:Theme">
<item name="@android:textColor">@color/group</item>
<item name="@android:textSize">20sp</item> <item name="@android:textSize">20sp</item>
</style> </style>
<style name="GroupTextLarge" parent="android:Theme"> <style name="GroupTextLarge" parent="android:Theme">
<item name="@android:textColor">@color/group</item>
<item name="@android:textSize">28sp</item>
</style> </style>
<style name="ElementTextSmall"> <style name="ElementTextSmall">
<item name="@android:textSize">15sp</item>
</style> </style>
<style name="ElementText"> <style name="ElementText">
<item name="@android:textSize">20sp</item>
</style> </style>
<style name="ElementTextLarge"> <style name="ElementTextLarge">
<item name="@android:textSize">28sp</item>
</style> </style>
<style name="GroupLabel"> <style name="GroupLabel">
<item name="@android:textSize">20sp</item>
</style> </style>
<style name="WhiteOnBlack"> <style name="WhiteOnBlack">
<item name="@android:background">#666666</item>
<item name="@android:textColor">@android:color/primary_text_dark</item>
<item name="@android:textSize">20sp</item>
</style> </style>
<style name="GroupAndEntryHeader"> <style name="GroupAndEntryHeader">
<item name="@android:background">#202020</item>
<item name="@android:textColor">#ffffff</item>
<item name="@android:textSize">20sp</item>
</style> </style>
<style name="WhiteOnBlackSmall" parent="WhiteOnBlack"> <style name="WhiteOnBlackSmall" parent="WhiteOnBlack">
<item name="@android:textSize">12sp</item>
</style> </style>
<style name="WhiteOnDarkSmall" parent="WhiteOnBlack"> <style name="WhiteOnDarkSmall" parent="WhiteOnBlack">
<item name="@android:textSize">12sp</item>
<item name="@android:background">#222222</item>
</style> </style>
<style name="EntryFieldHeader" parent="WhiteOnDarkSmall"> <style name="EntryFieldHeader" parent="WhiteOnDarkSmall">
<item name="@android:textSize">12sp</item>
</style> </style>
<style name="ElementTextTitle" parent="WhiteOnBlack"> <style name="ElementTextTitle" parent="WhiteOnBlack">
<item name="@android:textColor">@color/group</item>
<item name="@android:background">@android:color/transparent</item>
</style> </style>
<style name="EntryItem"> <style name="EntryItem">
<item name="@android:padding">5sp</item>
</style> </style>
<style name="EditEntryButton">
</style>
<style name="EntryFieldHeader"> <style name="EntryFieldHeader">
<item name="android:drawableBottom">@drawable/section_header</item>
<item name="android:drawablePadding">1dp</item>
<item name="android:layout_marginBottom">3dp</item>
<item name="android:layout_marginTop">8dp</item>
<item name="android:paddingLeft">4dp</item>
<item name="android:textAllCaps">true</item>
<item name="android:textColor">@color/emphasis</item>
<item name="android:textSize">14sp</item>
<item name="android:textStyle">bold</item>
<item name="@android:background">@android:color/transparent</item>
</style>
<style name="EditEntryButton">
</style> </style>
<style name="ExtraFieldHeader"> <style name="ExtraFieldHeader">
<item name="android:drawablePadding">1dp</item>
<item name="android:layout_marginBottom">3dp</item>
<item name="android:layout_marginTop">8dp</item>
<item name="android:paddingLeft">4dp</item>
<item name="android:textAllCaps">true</item>
<item name="android:textColor">@color/emphasis2</item>
<item name="android:textSize">14sp</item>
<item name="android:textStyle">bold</item>
<item name="@android:background">@android:color/transparent</item>
</style> </style>
</resources> </resources>

View File

@@ -128,6 +128,11 @@ namespace keepass2android
} }
public static bool HasActionBar(Activity activity)
{
//Actionbar is available since 11, but the layout has its own "pseudo actionbar" until 13
return ((int)Android.OS.Build.VERSION.SdkInt >= 14) && (activity.ActionBar != null);
}
} }
} }

View File

@@ -106,8 +106,8 @@ namespace keepass2android
// Create button // Create button
createButton.Click += (sender, evt) => { createButton.Click += (sender, evt) => {
String filename = Util.getEditText(this, String filename = ((EditText)dialog.FindViewById(Resource.Id.file_filename)).Text;
Resource.Id.file_filename);
//TODO: allow non-local files? //TODO: allow non-local files?

View File

@@ -159,6 +159,7 @@
<Compile Include="database\edit\DeleteRunnable.cs" /> <Compile Include="database\edit\DeleteRunnable.cs" />
<Compile Include="views\FileSelectButtons.cs" /> <Compile Include="views\FileSelectButtons.cs" />
<Compile Include="EntryEditActivityState.cs" /> <Compile Include="EntryEditActivityState.cs" />
<Compile Include="AttachmentContentProvider.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="Resources\AboutResources.txt" /> <None Include="Resources\AboutResources.txt" />
@@ -636,6 +637,7 @@
<AndroidResource Include="Resources\layout\entry_view_test.xml" /> <AndroidResource Include="Resources\layout\entry_view_test.xml" />
<AndroidResource Include="Resources\layout\entry_extrastring_title.xml" /> <AndroidResource Include="Resources\layout\entry_extrastring_title.xml" />
<AndroidResource Include="Resources\layout\entry_extrastring_value.xml" /> <AndroidResource Include="Resources\layout\entry_extrastring_value.xml" />
<AndroidResource Include="Resources\drawable-v11\ic_launcher_gray.png" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Novell\Novell.MonoDroid.CSharp.targets" /> <Import Project="$(MSBuildExtensionsPath)\Novell\Novell.MonoDroid.CSharp.targets" />
<ItemGroup> <ItemGroup>

View File

@@ -63,15 +63,7 @@ namespace keepass2android.view
setText(Resource.Id.title, title); setText(Resource.Id.title, title);
setText(Resource.Id.value, value.ReadString()); setText(Resource.Id.value, value.ReadString());
CheckBox cb = (CheckBox)FindViewById(Resource.Id.protection);
if (cb != null)
{
cb.Checked = value.IsProtected;
cb.CheckedChange += (sender, e) => {
if (ContentChanged != null)
ContentChanged(this, new EventArgs());
};
}
} }
public ImageButton getDeleteButton() public ImageButton getDeleteButton()

View File

@@ -63,7 +63,8 @@ namespace keepass2android.view
setText(Resource.Id.value, value); setText(Resource.Id.value, value);
//TODO: this seems to cause a bug when rotating the device (and the activity gets destroyed) //TODO: this seems to cause a bug when rotating the device (and the activity gets destroyed)
//After recreating the activity, the value fields all have the same content. //After recreating the activity, the value fields all have the same content.
FindViewById<TextView>(Resource.Id.value).SetTextIsSelectable(true); if ((int)Android.OS.Build.VERSION.SdkInt >= 11)
FindViewById<TextView>(Resource.Id.value).SetTextIsSelectable(true);
} }
private void setText(int resId, String str) { private void setText(int resId, String str) {