moved Android version dependent resources (-v11, -v14) to default folders.

Will target only 14+ in future to reduce APK size and simplify development.
Started to add plugin host code
This commit is contained in:
Philipp Crocoll 2014-05-10 06:14:07 +02:00
parent 8a6ee5623d
commit f542e864f4
79 changed files with 2534 additions and 3112 deletions

View File

@ -57,6 +57,7 @@
<Compile Include="database\edit\MoveElement.cs" /> <Compile Include="database\edit\MoveElement.cs" />
<Compile Include="database\KdbDatabaseLoader.cs" /> <Compile Include="database\KdbDatabaseLoader.cs" />
<Compile Include="database\KdbxDatabaseLoader.cs" /> <Compile Include="database\KdbxDatabaseLoader.cs" />
<Compile Include="database\PwEntryOutput.cs" />
<Compile Include="database\SynchronizeCachedDatabase.cs" /> <Compile Include="database\SynchronizeCachedDatabase.cs" />
<Compile Include="DataExchange\FileFormatProvider.cs" /> <Compile Include="DataExchange\FileFormatProvider.cs" />
<Compile Include="DataExchange\Formats\KeePassCsv1x.cs" /> <Compile Include="DataExchange\Formats\KeePassCsv1x.cs" />

View File

@ -45,6 +45,11 @@ namespace keepass2android
} }
} }
/// <summary>
/// Information about the last opened entry. Includes the entry but also transformed fields.
/// </summary>
public PwEntryOutput LastOpenedEntry { get; set; }
/// <summary> /// <summary>
/// if an OTP key was used, this property tells the location of the OTP auxiliary file. /// if an OTP key was used, this property tells the location of the OTP auxiliary file.
/// Must be set after loading. /// Must be set after loading.

View File

@ -202,7 +202,6 @@ namespace keepass2android
extraGroup.AddView(view); extraGroup.AddView(view);
hasExtraFields = true; hasExtraFields = true;
} }
FindViewById(Resource.Id.entry_extra_strings_label).Visibility = hasExtraFields ? ViewStates.Visible : ViewStates.Gone;
} }
View CreateEditSection(string key, string value, bool isProtected) View CreateEditSection(string key, string value, bool isProtected)

View File

@ -717,9 +717,6 @@ namespace keepass2android
} }
return true; return true;
case Resource.Id.menu_cancel_edit:
Finish();
break;
case Resource.Id.menu_rate: case Resource.Id.menu_rate:
try { try {
Util.GotoMarket(this); Util.GotoMarket(this);

File diff suppressed because it is too large Load Diff

View File

Before

Width:  |  Height:  |  Size: 743 B

After

Width:  |  Height:  |  Size: 743 B

View File

Before

Width:  |  Height:  |  Size: 856 B

After

Width:  |  Height:  |  Size: 856 B

View File

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
</shape>
</item>
</selector>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 564 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 603 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 589 B

View File

Before

Width:  |  Height:  |  Size: 947 B

After

Width:  |  Height:  |  Size: 947 B

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -1,12 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="UTF-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <selector xmlns:android="http://schemas.android.com/apk/res/android">
<item> <item>
<shape> <shape>
<gradient
android:angle="45"
android:startColor="#FF000030"
android:endColor="#FF000000"
android:type="linear" />
</shape> </shape>
</item> </item>
</selector> </selector>

View File

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@color/group_header_button_pressed"/> <!-- pressed -->
<item android:state_focused="true" android:drawable="@color/group_header_button_pressed"/> <!-- focused -->
<item android:drawable="@android:color/transparent"/> <!-- default -->
</selector>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 849 B

After

Width:  |  Height:  |  Size: 564 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 698 B

After

Width:  |  Height:  |  Size: 603 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 589 B

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 319 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 B

View File

@ -1,208 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ScrollView
android:id="@+id/entry_scroll"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@id/entry_save_header">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<!-- Title -->
<ImageButton
android:id="@+id/icon_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:src="@drawable/ic00" />
<EditText
android:id="@+id/entry_title"
style="@style/TextAppearance_EditEntry_Value"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dip"
android:capitalize="sentences"
android:layout_toLeftOf="@+id/icon_button"
android:hint="@string/hint_title"
android:singleLine="true" />
<!-- Username -->
<EditText
android:id="@+id/entry_user_name"
style="@style/TextAppearance_EditEntry_Value"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dip"
android:layout_below="@id/icon_button"
android:hint="@string/hint_username"
android:inputType="textEmailAddress"
android:singleLine="true" />
<!-- URL -->
<EditText
android:id="@+id/entry_url"
style="@style/TextAppearance_EditEntry_Value"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dip"
android:layout_below="@id/entry_user_name"
android:hint="@string/hint_url"
android:inputType="textUri"
android:singleLine="true" />
<!-- Password -->
<TextView
android:id="@+id/entry_password_label"
style="@style/TextAppearance_EditEntry_LabelSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/entry_url"
android:text="@string/entry_password" />
<RelativeLayout
android:id="@+id/password_section"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/entry_password_label">
<Button
android:id="@+id/generate_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="@string/ellipsis" />
<ImageButton
android:id="@+id/toggle_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_menu_view"
android:layout_alignTop="@id/generate_button"
android:layout_toLeftOf="@id/generate_button"
/>
<EditText
android:id="@+id/entry_password"
style="@style/TextAppearance_EditEntry_Value"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignTop="@id/generate_button"
android:layout_toLeftOf="@id/toggle_password"
android:hint="@string/hint_pass"
android:inputType="textPassword"
android:singleLine="true"
android:typeface="monospace" />
<!-- Confirm Password -->
<EditText
android:id="@+id/entry_confpassword"
style="@style/TextAppearance_EditEntry_Value"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/entry_password"
android:hint="@string/hint_conf_pass"
android:inputType="textPassword"
android:singleLine="true"
android:typeface="monospace" />
</RelativeLayout>
<!-- Comment -->
<TextView
android:id="@+id/entry_comment_label"
style="@style/TextAppearance_EditEntry_LabelSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/password_section"
android:text="@string/entry_comment" />
<EditText
android:id="@+id/entry_comment"
style="@style/TextAppearance_EditEntry_Value"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/entry_comment_label"
android:hint="@string/hint_comment"
android:inputType="textMultiLine" />
<!-- Extra strings -->
<LinearLayout
android:id="@+id/advanced_container"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/entry_comment"
android:orientation="vertical" />
<Button
android:id="@+id/add_advanced"
style="@style/EditEntryButton"
android:layout_marginTop="-4dp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/advanced_container"
android:drawableLeft="?attr/ic_menu_add_field"
android:text="@string/add_extra_string" />
<!-- file attachments -->
<TextView
android:id="@+id/entry_binaries_label"
style="@style/TextAppearance_EditEntry_LabelSmall"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/add_advanced"
android:text="@string/entry_binaries" />
<LinearLayout
android:id="@+id/binaries"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/entry_binaries_label"
android:orientation="vertical" />
<!-- Tags -->
<TextView
android:id="@+id/entry_tags_label"
style="@style/TextAppearance_EditEntry_LabelSmall"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/binaries"
android:text="@string/entry_tags" />
<EditText
android:id="@+id/entry_tags"
style="@style/TextAppearance_EditEntry_Value"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/entry_tags_label"
android:hint="@string/hint_tags"
android:inputType="text"
android:singleLine="true" />
<!-- Override URL -->
<TextView
android:id="@+id/entry_override_url_label"
style="@style/TextAppearance_EditEntry_LabelSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/entry_tags"
android:text="@string/entry_override_url" />
<EditText
android:id="@+id/entry_override_url"
style="@style/TextAppearance_EditEntry_Value"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/entry_override_url_label"
android:hint="@string/hint_override_url"
android:inputType="textUri"
android:singleLine="true" />
<!-- Expires -->
<TextView
android:id="@+id/entry_expires_label"
style="@style/TextAppearance_EditEntry_LabelSmall"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/entry_override_url"
android:text="@string/entry_expires" />
<CheckBox
android:id="@+id/entry_expires_checkbox"
android:layout_marginLeft="16dip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/entry_expires_label" />
<EditText
android:id="@+id/entry_expires"
android:layout_marginLeft="-12dip"
android:layout_marginRight="12dip"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/entry_expires_label"
android:layout_toRightOf="@id/entry_expires_checkbox" />
</RelativeLayout>
</ScrollView>
</RelativeLayout>

View File

@ -1,59 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:id="@+id/top"
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="horizontal" />
<LinearLayout
android:id="@+id/bottom_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:divider="?android:attr/dividerVertical"
android:layout_alignParentBottom="true"
android:dividerPadding="12dp">
<FrameLayout
style="?android:attr/actionButtonStyle"
android:id="@+id/entry_edit"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
<TextView
style="?android:actionBarTabTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingRight="20dp"
android:drawableLeft="@android:drawable/ic_menu_edit"
android:drawablePadding="8dp"
android:gravity="center_vertical"
android:text="@string/menu_edit" />
</FrameLayout>
</LinearLayout>
<ImageView
android:id="@+id/entry_divider2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_above="@id/bottom_bar"
android:scaleType="fitXY"
android:tint="@color/blue_highlight"
android:src="@android:drawable/divider_horizontal_bright" />
<ScrollView
android:id="@+id/entry_scroll"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@id/entry_divider2"
android:fillViewport="true"
android:scrollbarStyle="insideOverlay">
<keepass2android.view.EntryContentsView
android:id="@+id/entry_contents"
android:layout_height="wrap_content"
android:layout_width="fill_parent" />
</ScrollView>
</RelativeLayout>

View File

@ -1,264 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/entry_table"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="vertical">
<LinearLayout android:id="@+id/entryfield_container_username"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="vertical">
<TextView
android:id="@+id/entry_user_name_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/entry_user_name"
style="@style/EntryFieldHeader"
/>
<!-- Username -->
<RelativeLayout android:id="@+id/username_container"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="horizontal"
android:clickable="true"
android:background="?android:attr/selectableItemBackground">
<ImageView
android:id="@+id/username_vdots"
android:layout_width="wrap_content"
android:layout_height="15dp"
android:src="@drawable/vdots"
android:gravity="right|bottom"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
/>
<TextView
android:id="@+id/entry_user_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/username_vdots"
style="@style/EntryItem" />
</RelativeLayout>
</LinearLayout>
<LinearLayout android:id="@+id/entryfield_container_url"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="vertical">
<!-- URL -->
<TextView
android:id="@+id/entry_url_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/entry_url"
style="@style/EntryFieldHeader"
/>
<RelativeLayout android:id="@+id/url_container"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="horizontal"
android:clickable="true"
android:background="?android:attr/selectableItemBackground">
<ImageView
android:id="@+id/url_vdots"
android:layout_width="wrap_content"
android:layout_height="15dp"
android:src="@drawable/vdots"
android:gravity="right|bottom"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
/>
<TextView
android:id="@+id/entry_url"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:autoLink="all"
android:layout_toLeftOf="@id/url_vdots"
style="@style/EntryItem" />
</RelativeLayout>
</LinearLayout>
<LinearLayout android:id="@+id/entryfield_container_password"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="vertical">
<!-- Password -->
<TextView
android:id="@+id/entry_password_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/entry_password"
style="@style/EntryFieldHeader"
/>
<RelativeLayout android:id="@+id/password_container"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="horizontal"
android:clickable="true"
android:background="?android:attr/selectableItemBackground">
<ImageView
android:id="@+id/password_vdots"
android:layout_width="wrap_content"
android:layout_height="15dp"
android:src="@drawable/vdots"
android:gravity="right|bottom"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
/>
<TextView
android:id="@+id/entry_password"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:password="true"
android:typeface="monospace"
android:layout_toLeftOf="@id/password_vdots"
style="@style/EntryItem" />
</RelativeLayout>
</LinearLayout>
<LinearLayout android:id="@+id/entryfield_container_comment"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="vertical">
<!-- Comment -->
<TextView
android:id="@+id/entry_comment_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/entry_comment"
style="@style/EntryFieldHeader"
/>
<TextView
android:id="@+id/entry_comment"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textIsSelectable="true"
style="@style/EntryItem" />
</LinearLayout>
<LinearLayout
android:id="@+id/extra_strings"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:orientation="vertical" />
<!-- file attachments -->
<TextView
android:id="@+id/entry_binaries_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/entry_binaries"
style="@style/EntryFieldHeader"
/>
<LinearLayout
android:id="@+id/binaries"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
<!--Tags -->
<LinearLayout android:id="@+id/entryfield_container_tags"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="vertical">
<TextView
android:id="@+id/entry_tags_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/entry_tags"
style="@style/EntryFieldHeader"
/>
<TextView
android:id="@+id/entry_tags"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textIsSelectable="true"
style="@style/EntryItem" />
</LinearLayout>
<LinearLayout android:id="@+id/entryfield_container_overrideurl"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="vertical">
<!--Override URL-->
<TextView
android:id="@+id/entry_override_url_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/entry_override_url"
style="@style/EntryFieldHeader"
/>
<TextView
android:id="@+id/entry_override_url"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:autoLink="all"
android:textIsSelectable="true"
style="@style/EntryItem" />
</LinearLayout>
<LinearLayout android:id="@+id/entryfield_container_created"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="vertical">
<!-- Created -->
<TextView
android:id="@+id/entry_created_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/entry_created"
style="@style/EntryFieldHeader"
/>
<TextView
android:id="@+id/entry_created"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@style/EntryItem" />
</LinearLayout>
<LinearLayout android:id="@+id/entryfield_container_modified"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="vertical">
<!-- Modified -->
<TextView
android:id="@+id/entry_modified_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/entry_modified"
style="@style/EntryFieldHeader"
/>
<TextView
android:id="@+id/entry_modified"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@style/EntryItem" />
</LinearLayout>
<LinearLayout android:id="@+id/entryfield_container_expires"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="vertical">
<!-- Expires -->
<TextView
android:id="@+id/entry_expires_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/entry_expires"
style="@style/EntryFieldHeader"
/>
<TextView
android:id="@+id/entry_expires"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@style/EntryItem" />
</LinearLayout>
</LinearLayout>

View File

@ -1,174 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:id="@+id/bottom_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:divider="?android:attr/dividerVertical"
android:showDividers="middle"
android:layout_alignParentBottom="true"
android:dividerPadding="12dp"
android:baselineAligned="false">
<FrameLayout
android:id="@+id/accept_button"
style="?android:attr/actionButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<TextView
style="?android:actionBarTabTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingRight="20dp"
android:drawableLeft="?attr/NavigationAcceptDrawable"
android:drawablePadding="8dp"
android:gravity="center_vertical"
android:text="@string/accept" />
</FrameLayout>
<FrameLayout
android:id="@+id/cancel_button"
style="?android:attr/actionButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<TextView
style="?android:actionBarTabTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingRight="20dp"
android:drawableLeft="?attr/CancelDrawable"
android:drawablePadding="8dp"
android:gravity="center_vertical"
android:text="@android:string/cancel" />
</FrameLayout>
</LinearLayout>
<ScrollView
android:id="@+id/ScrollView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@id/bottom_bar"
android:layout_marginBottom="12dip"
android:layout_marginLeft="12dip"
android:layout_marginRight="12dip"
android:layout_marginTop="12dip">
<RelativeLayout
android:id="@+id/RelativeLayout"
android:layout_height="wrap_content"
android:layout_width="wrap_content">
<EditText
android:id="@+id/password"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ems="10"
android:singleLine="true"
android:typeface="monospace"
android:hint="@string/hint_generated_password" />
<Button
android:id="@+id/generate_password_button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/password"
android:text="@string/generate_password" />
<TextView
android:id="@+id/length_label"
android:text="@string/length"
style="@style/TextAppearance_SmallHeading"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:layout_below="@id/generate_password_button" />
<Button
android:id="@+id/btn_length16"
android:text="16"
android:layout_alignParentRight="true"
android:layout_width="60sp"
android:layout_height="wrap_content"
android:layout_below="@id/length_label" />
<Button
android:id="@+id/btn_length12"
android:text="12"
android:layout_toLeftOf="@id/btn_length16"
android:layout_height="wrap_content"
android:layout_width="60sp"
android:layout_alignTop="@id/btn_length16" />
<Button
android:id="@+id/btn_length8"
android:text="8"
android:layout_toLeftOf="@id/btn_length12"
android:layout_height="wrap_content"
android:layout_width="60sp"
android:layout_alignTop="@id/btn_length16" />
<Button
android:id="@+id/btn_length6"
android:text="6"
android:layout_toLeftOf="@id/btn_length8"
android:layout_height="wrap_content"
android:layout_width="60sp"
android:layout_alignTop="@id/btn_length16" />
<EditText
android:id="@+id/length"
android:layout_width="fill_parent"
android:layout_toLeftOf="@id/btn_length6"
android:layout_height="wrap_content"
android:layout_alignTop="@id/btn_length16"
android:singleLine="true"
android:text="12"
android:hint="@string/hint_length" />
<CheckBox
android:id="@+id/cb_uppercase"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/uppercase"
android:checked="true"
android:layout_below="@id/length" />
<CheckBox
android:id="@+id/cb_lowercase"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/lowercase"
android:checked="true"
android:layout_below="@id/cb_uppercase" />
<CheckBox
android:id="@+id/cb_digits"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/digits"
android:checked="true"
android:layout_below="@id/cb_lowercase" />
<CheckBox
android:id="@+id/cb_minus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/minus"
android:layout_below="@id/cb_digits" />
<CheckBox
android:id="@+id/cb_underline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/underline"
android:layout_below="@id/cb_minus" />
<CheckBox
android:id="@+id/cb_space"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/space"
android:layout_below="@id/cb_underline" />
<CheckBox
android:id="@+id/cb_specials"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/special"
android:layout_below="@id/cb_space" />
<CheckBox
android:id="@+id/cb_brackets"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/brackets"
android:layout_below="@id/cb_specials" />
</RelativeLayout>
</ScrollView>
</RelativeLayout>

View File

@ -1,105 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:id="@+id/top"
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="horizontal" />
<LinearLayout
android:id="@+id/bottom_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:divider="?android:attr/dividerVertical"
android:showDividers="middle"
android:layout_alignParentBottom="true"
android:dividerPadding="12dp"
android:baselineAligned="false">
<FrameLayout
android:id="@+id/add_group"
style="?android:attr/actionButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<TextView
style="?android:actionBarTabTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingRight="20dp"
android:drawableLeft="?attr/NewGroupDrawable"
android:drawablePadding="8dp"
android:gravity="center_vertical"
android:text="@string/add_group" />
</FrameLayout>
<FrameLayout
android:id="@+id/add_entry"
style="?android:attr/actionButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:layout_weight="1">
<TextView
style="?android:actionBarTabTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingRight="20dp"
android:drawableLeft="?attr/NewEntryDrawable"
android:drawablePadding="8dp"
android:gravity="center_vertical"
android:text="@string/add_entry" />
</FrameLayout>
<FrameLayout
android:id="@+id/insert_element"
style="?android:attr/actionButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<TextView
style="?android:actionBarTabTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingRight="20dp"
android:drawableLeft="?attr/NewGroupDrawable"
android:drawablePadding="8dp"
android:gravity="center_vertical"
android:text="@string/insert_element_here" />
</FrameLayout>
<FrameLayout
android:id="@+id/cancel_insert_element"
style="?android:attr/actionButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<TextView
style="?android:actionBarTabTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingRight="20dp"
android:drawableLeft="@android:drawable/ic_menu_close_clear_cancel"
android:drawablePadding="8dp"
android:gravity="center_vertical"
android:text="@string/cancel" />
</FrameLayout>
</LinearLayout>
<View
android:id="@+id/divider2"
android:layout_width="fill_parent"
android:layout_height="2dp"
android:layout_above="@id/bottom_bar"
android:background="#b8b8b8" />
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_above="@id/divider2"
android:layout_below="@id/top"
android:paddingRight="8dp"
android:paddingLeft="8dp" />
</RelativeLayout>

View File

@ -1,30 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
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 <http://www.gnu.org/licenses/>.
-->
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/IconGridView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/background_light"
android:verticalSpacing="5dp"
android:horizontalSpacing="5dp"
android:columnWidth="60dp"
android:numColumns="auto_fit"
android:stretchMode="columnWidth">
</GridView>

View File

@ -1,218 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_marginLeft="12dip"
android:layout_marginRight="12dip"
android:layout_marginBottom="12dip"
android:orientation="vertical"
>
<RelativeLayout
android:id="@+id/filename_group"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/filename_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/TextAppearance_SmallHeading"
android:text="@string/pass_filename" />
<ImageView
android:id="@+id/divider1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/filename_label"
android:scaleType="fitXY"
android:src="@android:drawable/divider_horizontal_dark" />
<HorizontalScrollView
android:id="@+id/filenamescroll"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/divider1">
<TextView
android:id="@+id/filename"
style="@style/GroupText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="none"
android:focusable="true"
android:focusableInTouchMode="true" />
</HorizontalScrollView>
<ImageView
android:id="@+id/divider2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/filenamescroll"
android:scaleType="fitXY"
android:src="@android:drawable/divider_horizontal_dark" />
</RelativeLayout>
<TextView
android:id="@+id/password_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dip"
android:text="@string/master_key_type" />
<Spinner
android:id="@+id/password_mode_spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:entries="@array/password_modes"
/>
<LinearLayout
android:id="@+id/passwordLine"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:baselineAligned="false"
android:orientation="horizontal">
<EditText
android:id="@+id/password"
android:layout_width="0px"
android:layout_height="wrap_content"
android:singleLine="true"
android:inputType="textPassword"
android:layout_weight="1"
android:layout_gravity="bottom"
android:hint="@string/hint_login_pass" />
<ImageButton
android:id="@+id/toggle_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_menu_view" />
</LinearLayout>
<LinearLayout
android:id="@+id/keyfileLine"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:baselineAligned="false"
android:orientation="horizontal">
<EditText
android:id="@+id/pass_keyfile"
android:layout_width="0px"
android:layout_height="wrap_content"
android:singleLine="true"
android:layout_weight="1"
android:layout_gravity="bottom"
android:hint="@string/entry_keyfile" />
<ImageButton
android:id="@+id/browse_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher_folder_small" />
</LinearLayout>
<LinearLayout
android:id="@+id/otpView"
android:layout_marginLeft="12dip"
android:layout_marginRight="12dip"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<LinearLayout
android:id="@+id/otpInitView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<Button
android:id="@+id/init_otp"
android:text="@string/init_otp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/otps_pending"
android:text="@string/otps_pending"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
android:id="@+id/otpEntry"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:visibility="gone"
android:orientation="vertical"
>
<TextView
android:id="@+id/otp_expl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/otp_explanation" />
<EditText
android:id="@+id/otp1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="93317749"
android:singleLine="true" />
<EditText
android:id="@+id/otp2"
android:text="54719327"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:singleLine="true" />
<EditText
android:id="@+id/otp3"
android:text="49844651"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:singleLine="true" />
<EditText
android:id="@+id/otp4"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:singleLine="true" />
<EditText
android:id="@+id/otp5"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:singleLine="true" />
<EditText
android:id="@+id/otp6"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:singleLine="true" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/otpSecretLine"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<EditText
android:id="@+id/pass_otpsecret"
android:layout_width="0px"
android:layout_height="wrap_content"
android:singleLine="true"
android:layout_weight="1"
android:hint="@string/otpsecret_hint" />
<Spinner
android:id="@+id/otpsecret_format_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
<Button
android:id="@+id/pass_ok"
android:text="@android:string/ok"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/kill_app"
android:text="@string/kill_app_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<CheckBox
android:id="@+id/enable_quickunlock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/enable_quickunlock" />
</LinearLayout>
</ScrollView>

View File

@ -1,65 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:id="@+id/top"
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="horizontal" />
<LinearLayout
android:id="@+id/bottom_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:divider="?android:attr/dividerVertical"
android:showDividers="middle"
android:layout_alignParentBottom="true"
android:dividerPadding="12dp"
android:baselineAligned="false">
<FrameLayout
android:id="@+id/select_other_entry"
style="?android:attr/actionButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<TextView
style="?android:actionBarTabTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingRight="20dp"
android:gravity="center_vertical"
android:text="@string/select_other_entry" />
</FrameLayout>
<FrameLayout
android:id="@+id/add_url_entry"
style="?android:attr/actionButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<TextView
style="?android:actionBarTabTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingRight="20dp"
android:gravity="center_vertical"
android:text="@string/add_url_entry" />
</FrameLayout>
</LinearLayout>
<View
android:id="@+id/divider2"
android:layout_width="fill_parent"
android:layout_height="2dp"
android:layout_above="@id/bottom_bar"
android:background="#b8b8b8" />
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_above="@id/divider2"
android:layout_below="@id/top"
android:paddingRight="8dp"
android:paddingLeft="8dp" />
</RelativeLayout>

View File

@ -1,72 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:id="@+id/top"
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="horizontal" />
<LinearLayout
android:id="@+id/bottom_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:divider="?android:attr/dividerVertical"
android:showDividers="middle"
android:layout_alignParentBottom="true"
android:dividerPadding="12dp"
android:baselineAligned="false">
<FrameLayout
android:id="@+id/select_other_entry"
style="?android:attr/actionButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<TextView
style="?android:actionBarTabTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingRight="20dp"
android:gravity="center_vertical"
android:text="@string/select_other_entry" />
</FrameLayout>
<FrameLayout
android:id="@+id/add_url_entry"
style="?android:attr/actionButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<TextView
style="?android:actionBarTabTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingRight="20dp"
android:gravity="center_vertical"
android:text="@string/add_url_entry" />
</FrameLayout>
</LinearLayout>
<View
android:id="@+id/divider2"
android:layout_width="fill_parent"
android:layout_height="2dp"
android:layout_above="@id/bottom_bar"
android:background="#b8b8b8" />
<TextView
android:id="@+id/no_results"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="12dp"
android:layout_below="@id/top"
android:text="@string/no_results" />
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_above="@id/divider2"
android:layout_below="@id/no_results"
android:paddingRight="8dp"
android:paddingLeft="8dp" />
</RelativeLayout>

View File

@ -1,30 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<keepass2android.views.Kp2aShortHelpView
android:id="@+id/help"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="right"
style="@style/TextAppearance_Help"
android:textColor="@color/light_gray"
android:layout_alignParentRight="true"
android:background="?android:attr/selectableItemBackground"
/>
<TextView
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/help"
style="@style/TextAppearance_SubElement"
/>
</RelativeLayout>

View File

@ -0,0 +1,45 @@
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
>
<TextView
android:id="@+id/donate_question"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text="@string/donate_question" />
<ImageView
android:id="@+id/imgoktfest"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/donate_question"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
android:src="@drawable/oktoberfest" />
<Button
android:text="@string/ok_donate"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/imgoktfest"
android:id="@+id/ok_donate"
/>
<Button
android:text="@string/no_thanks"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/ok_donate"
android:id="@+id/no_donate"
/>
</RelativeLayout>
</ScrollView>

View File

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp">
<ImageView
android:id="@+id/imgIcon"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_alignParentTop="true"
android:layout_marginRight="15dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp" />
<TextView
android:id="@+id/txtLabel"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/imgIcon"
android:textSize="22dp"
/>
<TextView
android:id="@+id/txtVersion"
android:text="0.9.3"
android:textSize="14dp"
android:textColor="#888888"
android:layout_toRightOf="@id/imgIcon"
android:layout_below="@id/txtLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/txtStatus"
android:textSize="14dp"
android:textColor="#888888"
android:layout_toRightOf="@id/imgIcon"
android:gravity="right"
android:layout_below="@id/txtVersion"
android:layout_alignRight="@id/txtLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>

View File

@ -2,98 +2,59 @@
<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="wrap_content"> android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/entry_save_header"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:padding="2sp"
style="@style/GroupAndEntryHeader">
<Button
android:id="@+id/entry_save"
android:text="@string/entry_save"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left|center_vertical"
android:textIsSelectable="false"
android:editable="false"
android:longClickable="false"
android:clickable="true"
android:minHeight="32dp"
android:gravity="left|center_vertical"
android:drawableLeft="@drawable/navigation_accept_dark"
style="@style/GroupAndEntryHeader"
android:background="@drawable/HeaderButtonBackground" />
</LinearLayout>
<ScrollView <ScrollView
android:id="@+id/entry_scroll" android:id="@+id/entry_scroll"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_height="fill_parent">
android:layout_below="@id/entry_save_header">
<RelativeLayout <RelativeLayout
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<!-- Title --> <!-- Title -->
<TextView
android:id="@+id/entry_title_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/entry_title"
style="@style/EntryFieldHeader" />
<ImageButton <ImageButton
android:id="@+id/icon_button" android:id="@+id/icon_button"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:src="@drawable/ic00"
android:layout_alignParentRight="true" android:layout_alignParentRight="true"
android:layout_below="@id/entry_title_label" /> android:src="@drawable/ic00" />
<EditText <EditText
android:id="@+id/entry_title" android:id="@+id/entry_title"
android:layout_width="fill_parent" style="@style/TextAppearance_EditEntry_Value"
android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="4dip"
android:capitalize="sentences"
android:layout_toLeftOf="@+id/icon_button" android:layout_toLeftOf="@+id/icon_button"
android:singleLine="true" android:hint="@string/hint_title"
android:layout_below="@id/entry_title_label" android:singleLine="true" />
android:hint="@string/hint_title" />
<!-- Username --> <!-- Username -->
<TextView
android:id="@+id/entry_user_name_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/icon_button"
style="@style/EntryFieldHeader"
android:text="@string/entry_user_name" />
<EditText <EditText
android:id="@+id/entry_user_name" android:id="@+id/entry_user_name"
android:layout_width="fill_parent" style="@style/TextAppearance_EditEntry_Value"
android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:singleLine="true" android:layout_marginTop="4dip"
android:layout_below="@id/icon_button"
android:hint="@string/hint_username"
android:inputType="textEmailAddress" android:inputType="textEmailAddress"
android:layout_below="@id/entry_user_name_label" android:singleLine="true" />
android:hint="@string/hint_username" />
<!-- URL --> <!-- URL -->
<TextView
android:id="@+id/entry_url_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/entry_user_name"
style="@style/EntryFieldHeader"
android:text="@string/entry_url" />
<EditText <EditText
android:id="@+id/entry_url" android:id="@+id/entry_url"
android:layout_width="fill_parent" style="@style/TextAppearance_EditEntry_Value"
android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:singleLine="true" android:layout_marginTop="4dip"
android:layout_below="@id/entry_user_name"
android:hint="@string/hint_url"
android:inputType="textUri" android:inputType="textUri"
android:layout_below="@id/entry_url_label" android:singleLine="true" />
android:hint="@string/hint_url" />
<!-- Password --> <!-- Password -->
<TextView <TextView
android:id="@+id/entry_password_label" android:id="@+id/entry_password_label"
style="@style/TextAppearance_EditEntry_LabelSmall"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/entry_url" android:layout_below="@id/entry_url"
style="@style/EntryFieldHeader"
android:text="@string/entry_password" /> android:text="@string/entry_password" />
<RelativeLayout <RelativeLayout
android:id="@+id/password_section" android:id="@+id/password_section"
@ -142,47 +103,43 @@
<!-- Comment --> <!-- Comment -->
<TextView <TextView
android:id="@+id/entry_comment_label" android:id="@+id/entry_comment_label"
style="@style/TextAppearance_EditEntry_LabelSmall"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/password_section" android:layout_below="@id/password_section"
style="@style/EntryFieldHeader"
android:text="@string/entry_comment" /> android:text="@string/entry_comment" />
<EditText <EditText
android:id="@+id/entry_comment" android:id="@+id/entry_comment"
android:inputType="textMultiLine" style="@style/TextAppearance_EditEntry_Value"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/entry_comment_label" android:layout_below="@id/entry_comment_label"
android:hint="@string/hint_comment" /> android:hint="@string/hint_comment"
android:inputType="textMultiLine" />
<!-- Extra strings --> <!-- Extra strings -->
<TextView
android:id="@+id/entry_extra_strings_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/entry_comment"
android:text="@string/entry_extra_strings"
style="@style/EntryFieldHeader" />
<LinearLayout <LinearLayout
android:id="@+id/advanced_container" android:id="@+id/advanced_container"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/entry_extra_strings_label" android:layout_below="@id/entry_comment"
android:orientation="vertical" /> android:orientation="vertical" />
<Button <Button
android:id="@+id/add_advanced" android:id="@+id/add_advanced"
style="@style/EditEntryButton"
android:layout_marginTop="-4dp"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/advanced_container" android:layout_below="@id/advanced_container"
android:drawableLeft="@android:drawable/ic_menu_add" android:drawableLeft="?attr/ic_menu_add_field"
android:text="@string/add_extra_string" /> android:text="@string/add_extra_string" />
<!-- file attachments --> <!-- file attachments -->
<TextView <TextView
android:id="@+id/entry_binaries_label" android:id="@+id/entry_binaries_label"
style="@style/TextAppearance_EditEntry_LabelSmall"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/entry_binaries"
android:layout_below="@id/add_advanced" android:layout_below="@id/add_advanced"
style="@style/EntryFieldHeader" /> android:text="@string/entry_binaries" />
<LinearLayout <LinearLayout
android:id="@+id/binaries" android:id="@+id/binaries"
android:layout_width="fill_parent" android:layout_width="fill_parent"
@ -192,54 +149,59 @@
<!-- Tags --> <!-- Tags -->
<TextView <TextView
android:id="@+id/entry_tags_label" android:id="@+id/entry_tags_label"
style="@style/TextAppearance_EditEntry_LabelSmall"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/entry_tags"
android:layout_below="@id/binaries" android:layout_below="@id/binaries"
style="@style/EntryFieldHeader" /> android:text="@string/entry_tags" />
<EditText <EditText
android:id="@+id/entry_tags" android:id="@+id/entry_tags"
style="@style/TextAppearance_EditEntry_Value"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:singleLine="true"
android:inputType="text"
android:layout_below="@id/entry_tags_label" android:layout_below="@id/entry_tags_label"
android:hint="@string/hint_tags" /> android:hint="@string/hint_tags"
android:inputType="text"
android:singleLine="true" />
<!-- Override URL --> <!-- Override URL -->
<TextView <TextView
android:id="@+id/entry_override_url_label" android:id="@+id/entry_override_url_label"
style="@style/TextAppearance_EditEntry_LabelSmall"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/entry_tags" android:layout_below="@id/entry_tags"
style="@style/EntryFieldHeader"
android:text="@string/entry_override_url" /> android:text="@string/entry_override_url" />
<EditText <EditText
android:id="@+id/entry_override_url" android:id="@+id/entry_override_url"
style="@style/TextAppearance_EditEntry_Value"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:singleLine="true"
android:inputType="textUri"
android:layout_below="@id/entry_override_url_label" android:layout_below="@id/entry_override_url_label"
android:hint="@string/hint_override_url" /> android:hint="@string/hint_override_url"
android:inputType="textUri"
android:singleLine="true" />
<!-- Expires --> <!-- Expires -->
<TextView <TextView
android:id="@+id/entry_expires_label" android:id="@+id/entry_expires_label"
style="@style/TextAppearance_EditEntry_LabelSmall"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/entry_expires" android:layout_below="@id/entry_override_url"
style="@style/EntryFieldHeader" android:text="@string/entry_expires" />
android:layout_below="@id/entry_override_url" />
<CheckBox <CheckBox
android:id="@+id/entry_expires_checkbox" android:id="@+id/entry_expires_checkbox"
android:layout_below="@id/entry_expires_label" android:layout_marginLeft="16dip"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" /> android:layout_height="wrap_content"
android:layout_below="@id/entry_expires_label" />
<EditText <EditText
android:id="@+id/entry_expires" android:id="@+id/entry_expires"
android:layout_marginLeft="-12dip"
android:layout_marginRight="12dip"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_toRightOf="@id/entry_expires_checkbox" android:layout_below="@id/entry_expires_label"
android:layout_below="@id/entry_expires_label" /> android:layout_toRightOf="@id/entry_expires_checkbox" />
</RelativeLayout> </RelativeLayout>
</ScrollView> </ScrollView>
</RelativeLayout> </RelativeLayout>

View File

@ -1,67 +1,54 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<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">
<!-- Title -->
<LinearLayout <LinearLayout
android:id="@+id/title_block" android:id="@+id/top"
android:layout_alignParentTop="true" android:layout_width="match_parent"
android:layout_width="fill_parent" android:layout_height="0dp"
android:layout_height="wrap_content" android:orientation="horizontal" />
android:padding="2dp"
style="@style/GroupAndEntryHeader">
<Button
android:id="@+id/entry_title"
style="@style/GroupAndEntryHeader"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left|center_vertical"
android:layout_weight="1"
android:textIsSelectable="false"
android:editable="false"
android:longClickable="false"
android:clickable="true"
android:minHeight="32dp"
android:gravity="left|center_vertical"
android:drawableLeft="@drawable/navigation_previous_item_dark"
android:background="@drawable/HeaderButtonBackground" />
<ImageView
android:id="@+id/entry_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|center_vertical"
android:scaleType="fitXY"
android:src="@drawable/ic99_blank" />
</LinearLayout>
<LinearLayout <LinearLayout
android:id="@+id/bottom_bar" android:id="@+id/bottom_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:divider="?android:attr/dividerVertical"
android:layout_alignParentBottom="true" android:layout_alignParentBottom="true"
android:layout_width="fill_parent" android:dividerPadding="12dp">
android:layout_height="wrap_content"
android:padding="2dp" <FrameLayout
style="@style/GroupAndEntryHeader"> style="?android:attr/actionButtonStyle"
<Button
android:id="@+id/entry_edit" android:id="@+id/entry_edit"
android:text="@string/menu_edit"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:drawableLeft="@android:drawable/ic_menu_edit"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentLeft="true" android:layout_weight="1">
android:layout_alignParentBottom="true" /> <TextView
style="?android:actionBarTabTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingRight="20dp"
android:drawableLeft="@android:drawable/ic_menu_edit"
android:drawablePadding="8dp"
android:gravity="center_vertical"
android:text="@string/menu_edit" />
</FrameLayout>
</LinearLayout> </LinearLayout>
<ImageView <ImageView
android:id="@+id/entry_divider2" android:id="@+id/entry_divider2"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_above="@id/bottom_bar" android:layout_above="@id/bottom_bar"
android:scaleType="fitXY" android:scaleType="fitXY"
android:src="@android:drawable/divider_horizontal_dark" /> android:tint="@color/blue_highlight"
android:src="@android:drawable/divider_horizontal_bright" />
<ScrollView <ScrollView
android:id="@+id/entry_scroll" android:id="@+id/entry_scroll"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_height="fill_parent"
android:layout_above="@id/entry_divider2" android:layout_above="@id/entry_divider2"
android:layout_below="@id/title_block"
android:fillViewport="true" android:fillViewport="true"
android:scrollbarStyle="insideOverlay"> android:scrollbarStyle="insideOverlay">
<keepass2android.view.EntryContentsView <keepass2android.view.EntryContentsView

View File

@ -1,23 +1,58 @@
<?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:id="@+id/entry_table" android:id="@+id/entry_table"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:orientation="vertical"> android:orientation="vertical">
<!-- Username -->
<LinearLayout android:id="@+id/entryfield_container_username"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="vertical">
<TextView <TextView
android:id="@+id/entry_user_name_label" android:id="@+id/entry_user_name_label"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/entry_user_name" android:text="@string/entry_user_name"
style="@style/EntryFieldHeader" style="@style/EntryFieldHeader"
/> />
<keepass2android.view.TextViewSelect
<!-- Username -->
<RelativeLayout android:id="@+id/username_container"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="horizontal"
android:clickable="true"
android:background="?android:attr/selectableItemBackground">
<ImageView
android:id="@+id/username_vdots"
android:layout_width="wrap_content"
android:layout_height="15dp"
android:src="@drawable/vdots"
android:gravity="right|bottom"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
/>
<TextView
android:id="@+id/entry_user_name" android:id="@+id/entry_user_name"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_toLeftOf="@id/username_vdots"
style="@style/EntryItem" /> style="@style/EntryItem" />
<!-- URL --> </RelativeLayout>
</LinearLayout>
<LinearLayout android:id="@+id/entryfield_container_url"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="vertical">
<!-- URL -->
<TextView <TextView
android:id="@+id/entry_url_label" android:id="@+id/entry_url_label"
android:layout_width="fill_parent" android:layout_width="fill_parent"
@ -25,13 +60,36 @@
android:text="@string/entry_url" android:text="@string/entry_url"
style="@style/EntryFieldHeader" style="@style/EntryFieldHeader"
/> />
<keepass2android.view.TextViewSelect <RelativeLayout android:id="@+id/url_container"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="horizontal"
android:clickable="true"
android:background="?android:attr/selectableItemBackground">
<ImageView
android:id="@+id/url_vdots"
android:layout_width="wrap_content"
android:layout_height="15dp"
android:src="@drawable/vdots"
android:gravity="right|bottom"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
/>
<TextView
android:id="@+id/entry_url" android:id="@+id/entry_url"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:autoLink="all" android:autoLink="all"
android:layout_toLeftOf="@id/url_vdots"
style="@style/EntryItem" /> style="@style/EntryItem" />
<!-- Password --> </RelativeLayout>
</LinearLayout>
<LinearLayout android:id="@+id/entryfield_container_password"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="vertical">
<!-- Password -->
<TextView <TextView
android:id="@+id/entry_password_label" android:id="@+id/entry_password_label"
android:layout_width="fill_parent" android:layout_width="fill_parent"
@ -39,41 +97,59 @@
android:text="@string/entry_password" android:text="@string/entry_password"
style="@style/EntryFieldHeader" style="@style/EntryFieldHeader"
/> />
<keepass2android.view.TextViewSelect <RelativeLayout android:id="@+id/password_container"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="horizontal"
android:clickable="true"
android:background="?android:attr/selectableItemBackground">
<ImageView
android:id="@+id/password_vdots"
android:layout_width="wrap_content"
android:layout_height="15dp"
android:src="@drawable/vdots"
android:gravity="right|bottom"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
/>
<TextView
android:id="@+id/entry_password" android:id="@+id/entry_password"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:password="true" android:password="true"
android:typeface="monospace" android:typeface="monospace"
android:layout_toLeftOf="@id/password_vdots"
style="@style/EntryItem" /> style="@style/EntryItem" />
<!-- Comment --> </RelativeLayout>
</LinearLayout>
<LinearLayout android:id="@+id/entryfield_container_comment"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="vertical">
<!-- Comment -->
<TextView <TextView
android:id="@+id/entry_comment_label" android:id="@+id/entry_comment_label"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/entry_comment" android:text="@string/entry_comment"
android:autoLink="all"
style="@style/EntryFieldHeader" style="@style/EntryFieldHeader"
/> />
<keepass2android.view.TextViewSelect <TextView
android:id="@+id/entry_comment" android:id="@+id/entry_comment"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textIsSelectable="true"
style="@style/EntryItem" /> style="@style/EntryItem" />
<!-- Extra strings --> </LinearLayout>
<TextView
android:id="@+id/entry_extra_strings_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/entry_extra_strings"
style="@style/EntryFieldHeader"
/>
<LinearLayout <LinearLayout
android:id="@+id/extra_strings" android:id="@+id/extra_strings"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:orientation="vertical" /> android:orientation="vertical" />
<!-- file attachments --> <!-- file attachments -->
<TextView <TextView
android:id="@+id/entry_binaries_label" android:id="@+id/entry_binaries_label"
android:layout_width="fill_parent" android:layout_width="fill_parent"
@ -86,7 +162,12 @@
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" /> android:orientation="vertical" />
<!--Tags --> <!--Tags -->
<LinearLayout android:id="@+id/entryfield_container_tags"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="vertical">
<TextView <TextView
android:id="@+id/entry_tags_label" android:id="@+id/entry_tags_label"
android:layout_width="fill_parent" android:layout_width="fill_parent"
@ -94,12 +175,19 @@
android:text="@string/entry_tags" android:text="@string/entry_tags"
style="@style/EntryFieldHeader" style="@style/EntryFieldHeader"
/> />
<keepass2android.view.TextViewSelect <TextView
android:id="@+id/entry_tags" android:id="@+id/entry_tags"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textIsSelectable="true"
style="@style/EntryItem" /> style="@style/EntryItem" />
<!--Override URL--> </LinearLayout>
<LinearLayout android:id="@+id/entryfield_container_overrideurl"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="vertical">
<!--Override URL-->
<TextView <TextView
android:id="@+id/entry_override_url_label" android:id="@+id/entry_override_url_label"
android:layout_width="fill_parent" android:layout_width="fill_parent"
@ -107,12 +195,21 @@
android:text="@string/entry_override_url" android:text="@string/entry_override_url"
style="@style/EntryFieldHeader" style="@style/EntryFieldHeader"
/> />
<keepass2android.view.TextViewSelect <TextView
android:id="@+id/entry_override_url" android:id="@+id/entry_override_url"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:autoLink="all"
android:textIsSelectable="true"
style="@style/EntryItem" /> style="@style/EntryItem" />
<!-- Created --> </LinearLayout>
<LinearLayout android:id="@+id/entryfield_container_created"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="vertical">
<!-- Created -->
<TextView <TextView
android:id="@+id/entry_created_label" android:id="@+id/entry_created_label"
android:layout_width="fill_parent" android:layout_width="fill_parent"
@ -125,7 +222,13 @@
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/EntryItem" /> style="@style/EntryItem" />
<!-- Modified --> </LinearLayout>
<LinearLayout android:id="@+id/entryfield_container_modified"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="vertical">
<!-- Modified -->
<TextView <TextView
android:id="@+id/entry_modified_label" android:id="@+id/entry_modified_label"
android:layout_width="fill_parent" android:layout_width="fill_parent"
@ -138,7 +241,13 @@
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/EntryItem" /> style="@style/EntryItem" />
<!-- Expires --> </LinearLayout>
<LinearLayout android:id="@+id/entryfield_container_expires"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="vertical">
<!-- Expires -->
<TextView <TextView
android:id="@+id/entry_expires_label" android:id="@+id/entry_expires_label"
android:layout_width="fill_parent" android:layout_width="fill_parent"
@ -151,4 +260,5 @@
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/EntryItem" /> style="@style/EntryItem" />
</LinearLayout>
</LinearLayout> </LinearLayout>

View File

@ -2,24 +2,60 @@
<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">
<Button <LinearLayout
android:id="@+id/accept_button" android:id="@+id/bottom_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_width="wrap_content" android:orientation="horizontal"
android:text="@string/accept" android:divider="?android:attr/dividerVertical"
android:layout_alignParentBottom="true" /> android:showDividers="middle"
<Button
android:id="@+id/cancel_button"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@android:string/cancel"
android:layout_alignParentBottom="true" android:layout_alignParentBottom="true"
android:layout_toRightOf="@id/accept_button" /> android:dividerPadding="12dp"
android:baselineAligned="false">
<FrameLayout
android:id="@+id/accept_button"
style="?android:attr/actionButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<TextView
style="?android:actionBarTabTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingRight="20dp"
android:drawableLeft="?attr/NavigationAcceptDrawable"
android:drawablePadding="8dp"
android:gravity="center_vertical"
android:text="@string/accept" />
</FrameLayout>
<FrameLayout
android:id="@+id/cancel_button"
style="?android:attr/actionButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<TextView
style="?android:actionBarTabTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingRight="20dp"
android:drawableLeft="?attr/CancelDrawable"
android:drawablePadding="8dp"
android:gravity="center_vertical"
android:text="@android:string/cancel" />
</FrameLayout>
</LinearLayout>
<ScrollView <ScrollView
android:id="@+id/ScrollView" android:id="@+id/ScrollView"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_above="@id/cancel_button"> android:layout_above="@id/bottom_bar"
android:layout_marginBottom="12dip"
android:layout_marginLeft="12dip"
android:layout_marginRight="12dip"
android:layout_marginTop="12dip">
<RelativeLayout <RelativeLayout
android:id="@+id/RelativeLayout" android:id="@+id/RelativeLayout"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -41,6 +77,7 @@
<TextView <TextView
android:id="@+id/length_label" android:id="@+id/length_label"
android:text="@string/length" android:text="@string/length"
style="@style/TextAppearance_SmallHeading"
android:layout_height="fill_parent" android:layout_height="fill_parent"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_below="@id/generate_password_button" /> android:layout_below="@id/generate_password_button" />

View File

@ -2,70 +2,104 @@
<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 <LinearLayout
android:id="@+id/group_header" android:id="@+id/top"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" /> android:layout_height="0dp"
android:orientation="horizontal" />
<LinearLayout <LinearLayout
android:id="@+id/bottom_bar" android:id="@+id/bottom_bar"
android:layout_alignParentBottom="true" android:layout_width="match_parent"
android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="2dp" android:orientation="horizontal"
style="@style/GroupAndEntryHeader"> android:divider="?android:attr/dividerVertical"
<Button android:showDividers="middle"
android:layout_alignParentBottom="true"
android:dividerPadding="12dp"
android:baselineAligned="false">
<FrameLayout
android:id="@+id/add_group" android:id="@+id/add_group"
android:layout_width="0px" style="?android:attr/actionButtonStyle"
android:layout_weight="1" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentBottom="true" android:layout_weight="1">
android:text="@string/add_group" <TextView
android:drawableLeft="@drawable/btn_new_group" style="?android:actionBarTabTextStyle"
/> android:layout_width="wrap_content"
<Button android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingRight="20dp"
android:drawableLeft="?attr/NewGroupDrawable"
android:drawablePadding="8dp"
android:gravity="center_vertical"
android:text="@string/add_group" />
</FrameLayout>
<FrameLayout
android:id="@+id/add_entry" android:id="@+id/add_entry"
android:layout_width="0px" style="?android:attr/actionButtonStyle"
android:layout_weight="1" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_toRightOf="@id/add_group" android:background="?android:attr/selectableItemBackground"
android:layout_alignParentBottom="true" android:clickable="true"
android:text="@string/add_entry" android:layout_weight="1">
android:drawableLeft="@drawable/device_access_new_account" <TextView
/> style="?android:actionBarTabTextStyle"
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingRight="20dp"
android:drawableLeft="?attr/NewEntryDrawable"
android:drawablePadding="8dp"
android:gravity="center_vertical"
android:text="@string/add_entry" />
</FrameLayout>
<FrameLayout
android:id="@+id/insert_element" android:id="@+id/insert_element"
android:layout_width="0px" style="?android:attr/actionButtonStyle"
android:layout_weight="1" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentBottom="true" android:layout_weight="1">
android:text="@string/insert_element_here" <TextView
android:visibility="gone" style="?android:actionBarTabTextStyle"
android:drawableLeft="@drawable/btn_new_group" android:layout_width="wrap_content"
/> android:layout_height="wrap_content"
<Button android:layout_gravity="center"
android:paddingRight="20dp"
android:drawableLeft="?attr/NewGroupDrawable"
android:drawablePadding="8dp"
android:gravity="center_vertical"
android:text="@string/insert_element_here" />
</FrameLayout>
<FrameLayout
android:id="@+id/cancel_insert_element" android:id="@+id/cancel_insert_element"
android:layout_width="0px" style="?android:attr/actionButtonStyle"
android:layout_weight="1" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_toRightOf="@id/insert_element" android:layout_weight="1">
android:layout_alignParentBottom="true" <TextView
android:text="@string/cancel" style="?android:actionBarTabTextStyle"
android:visibility="gone" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingRight="20dp"
android:drawableLeft="@android:drawable/ic_menu_close_clear_cancel" android:drawableLeft="@android:drawable/ic_menu_close_clear_cancel"
/> android:drawablePadding="8dp"
android:gravity="center_vertical"
android:text="@string/cancel" />
</FrameLayout>
</LinearLayout> </LinearLayout>
<ImageView <View
android:id="@+id/divider2" android:id="@+id/divider2"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="2dp"
android:layout_above="@id/bottom_bar" android:layout_above="@id/bottom_bar"
android:scaleType="fitXY" android:background="#b8b8b8" />
android:tint="@color/blue_highlight"
android:src="@android:drawable/divider_horizontal_dark" />
<ListView <ListView
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" /> android:layout_below="@id/top"
android:paddingRight="8dp"
android:paddingLeft="8dp" />
</RelativeLayout> </RelativeLayout>

View File

@ -20,14 +20,9 @@
<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"/>
<ListView android:id="@android:id/list" <ListView 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_below="@id/group_header"/>
<TextView <TextView
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"

View File

@ -1,30 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:padding="2sp"
style="@style/GroupAndEntryHeader">
<Button
android:id="@+id/group_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left|center_vertical"
android:layout_weight="1"
android:text="@string/root"
style="@style/GroupAndEntryHeader"
android:textIsSelectable="false"
android:editable="false"
android:longClickable="false"
android:clickable="true"
android:gravity="left|center_vertical"
android:drawableLeft="@drawable/navigation_previous_item_dark"
android:background="@drawable/HeaderButtonBackground" />
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|center_vertical"
android:scaleType="fitXY"
android:src="@drawable/ic99_blank" />
</LinearLayout>

View File

@ -21,7 +21,7 @@
android:id="@+id/IconGridView" android:id="@+id/IconGridView"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_height="fill_parent"
android:background="@color/icon_background" android:background="@android:color/background_light"
android:verticalSpacing="5dp" android:verticalSpacing="5dp"
android:horizontalSpacing="5dp" android:horizontalSpacing="5dp"
android:columnWidth="60dp" android:columnWidth="60dp"

View File

@ -0,0 +1,82 @@
<?xml version="1.0" encoding="utf-8" ?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/plugin_scroll"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true"
android:scrollbarStyle="insideOverlay">
<LinearLayout android:id="@+id/scopes_list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="4dp">
<ImageView
android:id="@+id/imgIcon"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_alignParentTop="true"
android:layout_marginRight="15dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp" />
<TextView
android:id="@+id/txtLabel"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/imgIcon"
android:textSize="22dp"
/>
<TextView
android:id="@+id/txtVersion"
android:text="0.9.3"
android:textSize="14dp"
android:textColor="#888888"
android:layout_toRightOf="@id/imgIcon"
android:layout_below="@id/txtLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/txtAuthor"
android:text=""
android:textSize="14dp"
android:textColor="#888888"
android:layout_below="@id/txtVersion"
android:layout_toRightOf="@id/imgIcon"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
<TextView
android:id="@+id/txtShortDesc"
android:text=""
android:textSize="14dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<CheckBox
android:id="@+id/cb_enabled"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/plugin_enabled_checkbox"
android:checked="true"
/>
<TextView
android:id="@+id/scopes_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Scopes"
android:layout_marginLeft="10dp"
android:layout_marginTop="18dp"
style="@style/ExtraFieldHeader" />
<LinearLayout android:id="@+id/scopes_list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
</LinearLayout>
</LinearLayout>
</ScrollView>

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="plugin text"
style="@style/PaddedElement"
android:id="@+id/textView"
android:layout_gravity="left|center_vertical" />
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:padding="8dp" />
</LinearLayout>
</merge>

View File

@ -2,47 +2,64 @@
<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 <LinearLayout
android:id="@+id/group_header" android:id="@+id/top"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" /> android:layout_height="0dp"
android:orientation="horizontal" />
<LinearLayout <LinearLayout
android:id="@+id/bottom_bar" android:id="@+id/bottom_bar"
android:layout_alignParentBottom="true" android:layout_width="match_parent"
android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="2dp" android:orientation="horizontal"
style="@style/GroupAndEntryHeader"> android:divider="?android:attr/dividerVertical"
<Button android:showDividers="middle"
android:layout_alignParentBottom="true"
android:dividerPadding="12dp"
android:baselineAligned="false">
<FrameLayout
android:id="@+id/select_other_entry" android:id="@+id/select_other_entry"
android:layout_width="0px" style="?android:attr/actionButtonStyle"
android:layout_weight="1" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentBottom="true" android:layout_weight="1">
android:text="@string/select_other_entry" <TextView
/> style="?android:actionBarTabTextStyle"
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingRight="20dp"
android:gravity="center_vertical"
android:text="@string/select_other_entry" />
</FrameLayout>
<FrameLayout
android:id="@+id/add_url_entry" android:id="@+id/add_url_entry"
android:layout_width="0px" style="?android:attr/actionButtonStyle"
android:layout_weight="1" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_toRightOf="@id/select_other_entry" android:layout_weight="1">
android:layout_alignParentBottom="true" <TextView
android:text="@string/add_url_entry" style="?android:actionBarTabTextStyle"
/> android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingRight="20dp"
android:gravity="center_vertical"
android:text="@string/add_url_entry" />
</FrameLayout>
</LinearLayout> </LinearLayout>
<ImageView <View
android:id="@+id/divider2" android:id="@+id/divider2"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="2dp"
android:layout_above="@id/bottom_bar" android:layout_above="@id/bottom_bar"
android:scaleType="fitXY" android:background="#b8b8b8" />
android:tint="@color/blue_highlight"
android:src="@android:drawable/divider_horizontal_dark" />
<ListView <ListView
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" /> android:layout_below="@id/top"
android:paddingRight="8dp"
android:paddingLeft="8dp" />
</RelativeLayout> </RelativeLayout>

View File

@ -2,50 +2,71 @@
<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 <LinearLayout
android:id="@+id/group_header" android:id="@+id/top"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" /> android:layout_height="0dp"
android:orientation="horizontal" />
<LinearLayout <LinearLayout
android:id="@+id/bottom_bar" android:id="@+id/bottom_bar"
android:layout_alignParentBottom="true" android:layout_width="match_parent"
android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="2dp" android:orientation="horizontal"
style="@style/GroupAndEntryHeader"> android:divider="?android:attr/dividerVertical"
<Button android:showDividers="middle"
android:layout_alignParentBottom="true"
android:dividerPadding="12dp"
android:baselineAligned="false">
<FrameLayout
android:id="@+id/select_other_entry" android:id="@+id/select_other_entry"
android:layout_width="0px" style="?android:attr/actionButtonStyle"
android:layout_weight="1" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentBottom="true" android:layout_weight="1">
<TextView
style="?android:actionBarTabTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingRight="20dp"
android:gravity="center_vertical"
android:text="@string/select_other_entry" /> android:text="@string/select_other_entry" />
<Button </FrameLayout>
<FrameLayout
android:id="@+id/add_url_entry" android:id="@+id/add_url_entry"
android:layout_width="0px" style="?android:attr/actionButtonStyle"
android:layout_weight="1" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_toRightOf="@id/select_other_entry" android:layout_weight="1">
android:layout_alignParentBottom="true" <TextView
style="?android:actionBarTabTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingRight="20dp"
android:gravity="center_vertical"
android:text="@string/add_url_entry" /> android:text="@string/add_url_entry" />
</FrameLayout>
</LinearLayout> </LinearLayout>
<ImageView <View
android:id="@+id/divider2" android:id="@+id/divider2"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="2dp"
android:layout_above="@id/bottom_bar" android:layout_above="@id/bottom_bar"
android:scaleType="fitXY" android:background="#b8b8b8" />
android:tint="@color/blue_highlight" <TextView
android:src="@android:drawable/divider_horizontal_dark" /> android:id="@+id/no_results"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="12dp"
android:layout_below="@id/top"
android:text="@string/no_results" />
<ListView <ListView
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" /> android:layout_below="@id/no_results"
<TextView android:paddingRight="8dp"
android:layout_width="fill_parent" android:paddingLeft="8dp" />
android:layout_height="wrap_content"
android:layout_below="@android:id/list"
android:text="@string/no_results" />
</RelativeLayout> </RelativeLayout>

View File

@ -14,6 +14,7 @@
style="@style/TextAppearance_Help" style="@style/TextAppearance_Help"
android:textColor="@color/light_gray" android:textColor="@color/light_gray"
android:layout_alignParentRight="true" android:layout_alignParentRight="true"
android:background="?android:attr/selectableItemBackground"
/> />

View File

@ -1,59 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
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 <http://www.gnu.org/licenses/>.
-->
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_lock"
android:icon="@android:drawable/ic_lock_lock"
android:title="@string/menu_lock"
android:showAsAction="ifRoom"
/>
<item android:id="@+id/menu_toggle_pass"
android:title="@string/show_password"
android:icon="@android:drawable/ic_menu_view"
android:showAsAction="ifRoom"
/>
<item android:id="@+id/menu_donate"
android:title="@string/menu_donate"
android:showAsAction="ifRoom"
/>
<item android:id="@+id/menu_goto_url"
android:title="@string/menu_url"
android:showAsAction="ifRoom"
/>
<!--item android:id="@+id/menu_copy_user"
android:title="@string/menu_copy_user"
android:showAsAction="ifRoom"
/>
<item android:id="@+id/menu_copy_pass"
android:title="@string/menu_copy_pass"
android:showAsAction="ifRoom"
/-->
<item android:id="@+id/menu_suggest_improvements"
android:icon="@android:drawable/ic_menu_directions"
android:title="@string/suggest_improvements"
android:showAsAction="never"
/>
<item android:id="@+id/menu_rate"
android:icon="@android:drawable/star_off"
android:title="@string/rate_app"
android:showAsAction="never"
/>
<item android:id="@+id/menu_translate"
android:title="@string/translate_app"
android:showAsAction="never"
/>
</menu>

View File

@ -1,37 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
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 <http://www.gnu.org/licenses/>.
-->
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_donate"
android:title="@string/menu_donate"
android:showAsAction="ifRoom"
/>
<item android:id="@+id/menu_suggest_improvements"
android:icon="@android:drawable/ic_menu_directions"
android:title="@string/suggest_improvements"
android:showAsAction="never"
/>
<item android:id="@+id/menu_rate"
android:icon="@android:drawable/star_off"
android:title="@string/rate_app"
android:showAsAction="never"
/>
<item android:id="@+id/menu_translate"
android:title="@string/translate_app"
android:showAsAction="never"
/>
</menu>

View File

@ -1,35 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
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 <http://www.gnu.org/licenses/>.
-->
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_about"
android:title="@string/menu_about"
android:icon="@android:drawable/ic_menu_help"
android:showAsAction="ifRoom"
/>
<item android:id="@+id/menu_app_settings"
android:title="@string/menu_app_settings"
android:icon="@android:drawable/ic_menu_preferences"
android:showAsAction="ifRoom"
/>
<item android:id="@+id/menu_donate"
android:title="@string/menu_donate"
android:showAsAction="ifRoom"
/>
</menu>

View File

@ -1,69 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
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 <http://www.gnu.org/licenses/>.
-->
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_search"
android:icon="@android:drawable/ic_menu_search"
android:title="@string/menu_search"
android:showAsAction="ifRoom"
android:actionViewClass="android.widget.SearchView"
/>
<item android:id="@+id/menu_search_advanced"
android:icon="@android:drawable/ic_menu_search"
android:title="@string/menu_search_advanced"
android:showAsAction="never"
/>
<item android:id="@+id/menu_lock"
android:icon="@android:drawable/ic_lock_lock"
android:title="@string/menu_lock"
android:showAsAction="ifRoom"
/>
<item android:id="@+id/menu_donate"
android:title="@string/menu_donate"
android:showAsAction="ifRoom"
/>
<item android:id="@+id/menu_app_settings"
android:icon="@android:drawable/ic_menu_preferences"
android:title="@string/menu_app_settings"
android:showAsAction="ifRoom"
/>
<item android:id="@+id/menu_change_master_key"
android:title="@string/menu_change_key"
android:showAsAction="never"
/>
<item android:id="@+id/menu_sync"
android:icon="@android:drawable/ic_popup_sync"
android:title="@string/synchronize_database_menu"
android:showAsAction="never"
/>
<item android:id="@+id/menu_sort"
android:icon="@android:drawable/ic_menu_sort_by_size"
android:title="@string/sort_name"
android:showAsAction="never"
/>
<item android:id="@+id/menu_suggest_improvements"
android:icon="@android:drawable/ic_menu_directions"
android:title="@string/suggest_improvements"
android:showAsAction="never"
/>
<item android:id="@+id/menu_translate"
android:title="@string/translate_app"
android:showAsAction="never"
/>
</menu>

View File

@ -1,34 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
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 <http://www.gnu.org/licenses/>.
-->
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_about"
android:title="@string/menu_about"
android:icon="@android:drawable/ic_menu_help"
android:showAsAction="ifRoom"
/>
<item android:id="@+id/menu_change_db"
android:icon="?attr/OpenFileDrawable"
android:title="@string/menu_change_db"
android:showAsAction="ifRoom"
/>
<item android:id="@+id/menu_app_settings"
android:title="@string/menu_app_settings"
android:icon="@android:drawable/ic_menu_preferences"
android:showAsAction="ifRoom"
/>
</menu>

View File

@ -16,39 +16,44 @@
along with Keepass2Android. If not, see <http://www.gnu.org/licenses/>. along with Keepass2Android. If not, see <http://www.gnu.org/licenses/>.
--> -->
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_donate"
android:icon="@android:drawable/ic_menu_share"
android:title="@string/menu_donate"
/>
<item android:id="@+id/menu_toggle_pass"
android:icon="@android:drawable/ic_menu_view"
android:title="@string/show_password"
/>
<item android:id="@+id/menu_goto_url"
android:icon="@android:drawable/ic_menu_upload"
android:title="@string/menu_url"
/>
<!--<item android:id="@+id/menu_copy_user"
android:icon="@android:drawable/ic_menu_set_as"
android:title="@string/menu_copy_user"
/>
<item android:id="@+id/menu_copy_pass"
android:icon="@android:drawable/ic_menu_agenda"
android:title="@string/menu_copy_pass"
/>-->
<item android:id="@+id/menu_lock" <item android:id="@+id/menu_lock"
android:icon="@android:drawable/ic_lock_lock" android:icon="@android:drawable/ic_lock_lock"
android:title="@string/menu_lock" android:title="@string/menu_lock"
android:showAsAction="ifRoom"
/> />
<item android:id="@+id/menu_toggle_pass"
android:title="@string/show_password"
android:icon="@android:drawable/ic_menu_view"
android:showAsAction="ifRoom"
/>
<item android:id="@+id/menu_donate"
android:title="@string/menu_donate"
android:showAsAction="ifRoom"
/>
<item android:id="@+id/menu_goto_url"
android:title="@string/menu_url"
android:showAsAction="ifRoom"
/>
<!--item android:id="@+id/menu_copy_user"
android:title="@string/menu_copy_user"
android:showAsAction="ifRoom"
/>
<item android:id="@+id/menu_copy_pass"
android:title="@string/menu_copy_pass"
android:showAsAction="ifRoom"
/-->
<item android:id="@+id/menu_suggest_improvements" <item android:id="@+id/menu_suggest_improvements"
android:icon="@android:drawable/ic_menu_directions" android:icon="@android:drawable/ic_menu_directions"
android:title="@string/suggest_improvements" android:title="@string/suggest_improvements"
android:showAsAction="never"
/> />
<item android:id="@+id/menu_rate" <item android:id="@+id/menu_rate"
android:icon="@android:drawable/star_off" android:icon="@android:drawable/star_off"
android:title="@string/rate_app" android:title="@string/rate_app"
android:showAsAction="never"
/> />
<item android:id="@+id/menu_translate" <item android:id="@+id/menu_translate"
android:title="@string/translate_app" android:title="@string/translate_app"
android:showAsAction="never"
/> />
</menu> </menu>

View File

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
This file is part of Keepass2Android, Copyright 2013 Philipp Crocoll. This file is based on Keepassdroid, Copyright Brian Pellin. 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 Keepass2Android is free software: you can redistribute it and/or modify
@ -17,23 +16,22 @@
along with Keepass2Android. If not, see <http://www.gnu.org/licenses/>. along with Keepass2Android. If not, see <http://www.gnu.org/licenses/>.
--> -->
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_cancel_edit"
android:title="@string/entry_cancel"
/>
<item android:id="@+id/menu_donate" <item android:id="@+id/menu_donate"
android:icon="@android:drawable/ic_menu_share"
android:title="@string/menu_donate" android:title="@string/menu_donate"
android:showAsAction="ifRoom"
/> />
<item android:id="@+id/menu_suggest_improvements" <item android:id="@+id/menu_suggest_improvements"
android:icon="@android:drawable/ic_menu_directions" android:icon="@android:drawable/ic_menu_directions"
android:title="@string/suggest_improvements" android:title="@string/suggest_improvements"
android:showAsAction="never"
/> />
<item android:id="@+id/menu_rate" <item android:id="@+id/menu_rate"
android:icon="@android:drawable/star_off" android:icon="@android:drawable/star_off"
android:title="@string/rate_app" android:title="@string/rate_app"
android:showAsAction="never"
/> />
<item android:id="@+id/menu_translate" <item android:id="@+id/menu_translate"
android:title="@string/translate_app" android:title="@string/translate_app"
android:showAsAction="never"
/> />
</menu> </menu>

View File

@ -16,16 +16,20 @@
along with Keepass2Android. If not, see <http://www.gnu.org/licenses/>. along with Keepass2Android. If not, see <http://www.gnu.org/licenses/>.
--> -->
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_donate"
android:icon="@android:drawable/ic_menu_share" <item android:id="@+id/menu_about"
android:title="@string/menu_donate" android:title="@string/menu_about"
android:icon="@android:drawable/ic_menu_help"
android:showAsAction="ifRoom"
/> />
<item android:id="@+id/menu_app_settings" <item android:id="@+id/menu_app_settings"
android:icon="@android:drawable/ic_menu_preferences"
android:title="@string/menu_app_settings" android:title="@string/menu_app_settings"
android:icon="@android:drawable/ic_menu_preferences"
android:showAsAction="ifRoom"
/> />
<item android:id="@+id/menu_about" <item android:id="@+id/menu_donate"
android:icon="@android:drawable/ic_menu_help" android:title="@string/menu_donate"
android:title="@string/menu_about" android:showAsAction="ifRoom"
/> />
</menu> </menu>

View File

@ -16,42 +16,54 @@
along with Keepass2Android. If not, see <http://www.gnu.org/licenses/>. along with Keepass2Android. If not, see <http://www.gnu.org/licenses/>.
--> -->
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_donate"
android:icon="@android:drawable/ic_menu_share"
android:title="@string/menu_donate"
/>
<item android:id="@+id/menu_lock"
android:icon="@android:drawable/ic_lock_lock"
android:title="@string/menu_lock"
/>
<item android:id="@+id/menu_search" <item android:id="@+id/menu_search"
android:icon="@android:drawable/ic_menu_search" android:icon="@android:drawable/ic_menu_search"
android:title="@string/menu_search" android:title="@string/menu_search"
android:showAsAction="ifRoom" android:showAsAction="ifRoom"
android:actionViewClass="android.widget.SearchView" android:actionViewClass="android.widget.SearchView"
/> />
<item android:id="@+id/menu_search_advanced"
android:icon="@android:drawable/ic_menu_search"
android:title="@string/menu_search_advanced"
android:showAsAction="never"
/>
<item android:id="@+id/menu_lock"
android:icon="@android:drawable/ic_lock_lock"
android:title="@string/menu_lock"
android:showAsAction="ifRoom"
/>
<item android:id="@+id/menu_donate"
android:title="@string/menu_donate"
android:showAsAction="ifRoom"
/>
<item android:id="@+id/menu_app_settings" <item android:id="@+id/menu_app_settings"
android:icon="@android:drawable/ic_menu_preferences" android:icon="@android:drawable/ic_menu_preferences"
android:title="@string/menu_app_settings" android:title="@string/menu_app_settings"
android:showAsAction="ifRoom"
/> />
<item android:id="@+id/menu_change_master_key" <item android:id="@+id/menu_change_master_key"
android:icon="@android:drawable/ic_menu_manage"
android:title="@string/menu_change_key" android:title="@string/menu_change_key"
android:showAsAction="never"
/> />
<item android:id="@+id/menu_sync" <item android:id="@+id/menu_sync"
android:icon="@android:drawable/ic_popup_sync"
android:title="@string/synchronize_database_menu" android:title="@string/synchronize_database_menu"
android:showAsAction="never"
/> />
<item android:id="@+id/menu_sort" <item android:id="@+id/menu_sort"
android:icon="@android:drawable/ic_menu_sort_by_size" android:icon="@android:drawable/ic_menu_sort_by_size"
android:title="@string/sort_name" android:title="@string/sort_name"
android:showAsAction="never"
/> />
<item android:id="@+id/menu_suggest_improvements" <item android:id="@+id/menu_suggest_improvements"
android:icon="@android:drawable/ic_menu_directions" android:icon="@android:drawable/ic_menu_directions"
android:title="@string/suggest_improvements" android:title="@string/suggest_improvements"
android:showAsAction="never"
/> />
<item android:id="@+id/menu_translate" <item android:id="@+id/menu_translate"
android:title="@string/translate_app" android:title="@string/translate_app"
android:showAsAction="never"
/> />
</menu> </menu>

View File

@ -16,16 +16,19 @@
along with Keepass2Android. If not, see <http://www.gnu.org/licenses/>. along with Keepass2Android. If not, see <http://www.gnu.org/licenses/>.
--> -->
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_app_settings" <item android:id="@+id/menu_about"
android:icon="@android:drawable/ic_menu_preferences" android:title="@string/menu_about"
android:title="@string/menu_app_settings" android:icon="@android:drawable/ic_menu_help"
android:showAsAction="ifRoom"
/> />
<item android:id="@+id/menu_change_db" <item android:id="@+id/menu_change_db"
android:icon="@drawable/collections_collection" android:icon="?attr/OpenFileDrawable"
android:title="@string/menu_change_db" android:title="@string/menu_change_db"
android:showAsAction="ifRoom"
/> />
<item android:id="@+id/menu_about" <item android:id="@+id/menu_app_settings"
android:icon="@android:drawable/ic_menu_help" android:title="@string/menu_app_settings"
android:title="@string/menu_about" android:icon="@android:drawable/ic_menu_preferences"
android:showAsAction="ifRoom"
/> />
</menu> </menu>

View File

@ -1,33 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
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 <http://www.gnu.org/licenses/>.
-->
<resources>
<color name="blue_highlight">#0000dd</color>
<color name="group">#333333</color>
<color name="icon_background">#00555555</color>
<color name="icon_text">#000000</color>
<color name="light_gray">#a8a8a8</color>
<color name="dark_gray">#303030</color>
<color name="element_being_moved">#a8a8a8</color>
<color name="emphasis">#31b6e7</color>
<color name="emphasis2">#4f7a8a</color>
</resources>

View File

@ -1,188 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
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 <http://www.gnu.org/licenses/>.
-->
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="GroupTextSmall">
<item name="@android:textColor">?android:attr/textColorPrimary</item>
</style>
<style name="GroupText">
<item name="@android:textColor">?android:attr/textColorPrimary</item>
<item name="@android:textSize">20sp</item>
</style>
<style name="GroupTextLarge">
<item name="@android:textColor">?android:attr/textColorPrimary</item>
<item name="@android:textSize">28sp</item>
</style>
<style name="ElementTextSmall">
<item name="@android:textSize">15sp</item>
</style>
<style name="ElementText">
<item name="@android:textSize">20sp</item>
</style>
<style name="ElementTextLarge">
<item name="@android:textSize">28sp</item>
</style>
<style name="GroupLabel">
</style>
<style name="WhiteOnBlack">
</style>
<style name="WhiteOnBlackSmall" parent="WhiteOnBlack">
</style>
<style name="WhiteOnDarkSmall" parent="WhiteOnBlack">
</style>
<style name="ElementTextTitle" parent="WhiteOnBlack">
</style>
<style name="EntryItem">
<item name="android:layout_marginLeft">12dip</item>
<item name="android:layout_marginRight">12dip</item>
<item name="android:paddingLeft">4dp</item>
<item name="android:textColor">?android:attr/textColorSecondary</item>
<item name="android:textSize">18sp</item>
</style>
<style name="EntryFieldHeader">
<item name="android:drawableBottom">@drawable/section_header</item>
<item name="android:drawablePadding">2dp</item>
<item name="android:layout_marginLeft">12dip</item>
<item name="android:layout_marginRight">12dip</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">?android:attr/textColorPrimary</item>
<item name="android:textSize">18sp</item>
<item name="android:textStyle">bold</item>
</style>
<style name="InfoHeader">
<item name="android:drawableBottom">@drawable/section_header</item>
<item name="android:drawablePadding">2dp</item>
<item name="android:layout_marginLeft">0dip</item>
<item name="android:layout_marginRight">12dip</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">?android:attr/textColorPrimary</item>
<item name="android:textSize">14sp</item>
<item name="android:textStyle">bold</item>
</style>
<style name="BottomBarActionButton">
<item name="android:background">?android:attr/selectableItemBackground</item>
</style>
<style name="TextAppearance_EditEntry_Small">
<item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
<item name="android:textSize">14sp</item>
<item name="android:textColor">?android:attr/textColorSecondary</item>
<item name="android:textAllCaps">true</item>
</style>
<style name="TextAppearance_EditEntry_LabelSmall" parent="TextAppearance_EditEntry_Small">
<item name="android:minHeight">24dip</item>
<item name="android:layout_width">144dip</item>
<item name="android:layout_marginTop">12dip</item>
<item name="android:layout_marginLeft">16dip</item>
<item name="android:layout_marginRight">16dip</item>
<item name="android:paddingLeft">8dip</item>
<item name="android:paddingRight">8dip</item>
<item name="android:layout_marginBottom">-12dip</item>
</style>
<style name="TextAppearance_EditEntry">
<item name="android:textAppearance">?android:attr/textAppearanceMedium</item>
<item name="android:textSize">18sp</item>
<item name="android:textColor">?android:attr/textColorPrimary</item>
</style>
<style name="TextAppearance_EditEntry_Value" parent="TextAppearance_EditEntry">
<item name="android:gravity">center_vertical</item>
<item name="android:layout_gravity">center_vertical</item>
<item name="android:layout_marginRight">12dip</item>
<item name="android:layout_marginLeft">12dip</item>
</style>
<style name="TextAppearance_SmallHeading" parent="TextAppearance_EditEntry_Small">
<item name="android:minHeight">24dip</item>
<item name="android:layout_width">144dip</item>
<item name="android:layout_marginTop">12dip</item>
<item name="android:layout_marginRight">16dip</item>
<item name="android:paddingRight">8dip</item>
<item name="android:layout_marginBottom">-12dip</item>
</style>
<style name="TextAppearance_SubElement">
<item name="android:textAppearance">?android:attr/textAppearanceMedium</item>
<item name="android:textSize">18sp</item>
<item name="android:textColor">?android:attr/textColorPrimary</item>
<item name="android:gravity">center_vertical</item>
<item name="android:layout_gravity">center_vertical</item>
<item name="android:layout_marginRight">12dip</item>
<item name="android:layout_marginLeft">12dip</item>
</style>
<style name="TextAppearance_Help">
<item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
<item name="android:textSize">24sp</item>
<item name="android:padding">12sp</item>
<item name="android:gravity">center_vertical</item>
<item name="android:layout_gravity">center_vertical</item>
<item name="android:layout_marginRight">12dip</item>
<item name="android:layout_marginLeft">12dip</item>
</style>
<style name="EditEntryButton">
<item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
<item name="android:layout_marginTop">12dip</item>
<item name="android:layout_marginLeft">24dip</item>
<item name="android:layout_marginRight">24dip</item>
<item name="android:paddingLeft">8dip</item>
<item name="android:paddingRight">8dip</item>
<item name="android:textAllCaps">true</item>
<item name="android:textColor">?android:attr/textColorPrimary</item>
<item name="android:background">?android:attr/selectableItemBackground</item>
</style>
<style name="AdditionalStringLayout">
<item name="android:layout_marginLeft">24dip</item>
<item name="android:layout_marginRight">24dip</item>
</style>
<style name="MinusButton">
<item name="android:background">?android:attr/selectableItemBackground</item>
<item name="android:src">@drawable/ic_menu_remove_field_holo_light</item>
</style>
<style name="ExtraFieldHeader" parent="android:Widget.Holo.Light.TextView">
<item name="android:layout_marginLeft">16dip</item>
<item name="android:layout_marginRight">12dip</item>
<item name="android:layout_marginBottom">3dp</item>
<item name="android:layout_marginTop">4dp</item>
<item name="android:paddingLeft">4dp</item>
<item name="android:textAllCaps">true</item>
<item name="android:textColor">?android:attr/textColorPrimary</item>
<item name="android:textSize">14sp</item>
<item name="android:textStyle">bold</item>
</style>
</resources>

View File

@ -19,16 +19,15 @@
--> -->
<resources> <resources>
<color name="blue_highlight">#0000dd</color> <color name="blue_highlight">#0000dd</color>
<color name="group">#ffffff</color> <color name="group">#333333</color>
<color name="icon_background">#555555</color> <color name="icon_background">#00555555</color>
<color name="icon_text">#000000</color> <color name="icon_text">#000000</color>
<color name="group_header_button_pressed">#101080</color>
<color name="emphasis">#31b6e7</color>
<color name="emphasis2">#4f7a8a</color>
<color name="bg_gray">#cecbce</color>
<color name="light_gray">#a8a8a8</color> <color name="light_gray">#a8a8a8</color>
<color name="dark_gray">#303030</color>
<color name="element_being_moved">#a8a8a8</color> <color name="element_being_moved">#a8a8a8</color>
<color name="emphasis">#31b6e7</color>
<color name="emphasis2">#4f7a8a</color>
</resources> </resources>

View File

@ -409,8 +409,17 @@
<string name="plugin_packagename">Package name:</string> <string name="plugin_packagename">Package name:</string>
<string name="plugin_description">Description (not verified):</string> <string name="plugin_description">Description (not verified):</string>
<string name="plugin_author">Author (not verified):</string> <string name="plugin_author">Author (not verified):</string>
<string name="plugin_enabled">Enabled</string> <string name="plugin_enabled">enabled</string>
<string name="plugins_text">Click plug-in to enable/disable</string> <string name="plugin_disabled">disabled</string>
<string name="plugin_enabled_checkbox">Enabled</string>
<string name="SCOPE_DATABASE_ACTIONS_title">Database action notifications</string>
<string name="SCOPE_DATABASE_ACTIONS_explanation">Plugin will be notified when a database is opened, closed or saved.</string>
<string name="SCOPE_CURRENT_ENTRY_title">Current entry data</string>
<string name="SCOPE_CURRENT_ENTRY_explanation">Plugin will receive all data about the current database entry and will be allowed to offer actions and modify the display of it.</string>
<string name="get_regular_version">Get more storage types</string> <string name="get_regular_version">Get more storage types</string>

View File

@ -19,24 +19,19 @@
--> -->
<resources> <resources>
<style name="Base"> <style name="Base">
<item name="OpenFileDrawable">@drawable/collections_collection</item>
<item name="CreateDbDrawable">@drawable/collections_new_label</item>
<item name="OpenUrlDrawable">@drawable/location_web_site</item>
<item name="ic_action_search_drawable">@drawable/ic_action_search_holodark</item>
<item name="ic_launcher_folder_small">@drawable/ic_launcher_folder_small</item>
</style> </style>
<style name="NoTitleBar"></style> <style name="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:textColor">?android:attr/textColorPrimary</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:textColor">?android:attr/textColorPrimary</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:textColor">?android:attr/textColorPrimary</item>
<item name="@android:textSize">28sp</item> <item name="@android:textSize">28sp</item>
</style> </style>
<style name="ElementTextSmall"> <style name="ElementTextSmall">
@ -76,49 +71,141 @@
<item name="@android:background">@android:color/transparent</item> <item name="@android:background">@android:color/transparent</item>
</style> </style>
<style name="EntryItem"> <style name="EntryItem">
<item name="@android:padding">5sp</item> <item name="android:layout_marginLeft">12dip</item>
<item name="android:layout_marginRight">12dip</item>
<item name="android:paddingLeft">4dp</item>
<item name="android:textColor">?android:attr/textColorSecondary</item>
<item name="android:textSize">18sp</item>
</style> </style>
<style name="MinusButton"> <style name="MinusButton">
<item name="android:src">@drawable/ic_menu_remove_field_holo_light</item> <item name="android:src">@drawable/ic_menu_remove_field_holo_light</item>
</style> </style>
<style name="EntryFieldHeader"> <style name="EntryFieldHeader">
<item name="android:drawableBottom">@drawable/section_header</item> <item name="android:drawableBottom">@drawable/section_header</item>
<item name="android:drawablePadding">1dp</item> <item name="android:drawablePadding">2dp</item>
<item name="android:layout_marginLeft">12dip</item>
<item name="android:layout_marginRight">12dip</item>
<item name="android:layout_marginBottom">3dp</item> <item name="android:layout_marginBottom">3dp</item>
<item name="android:layout_marginTop">8dp</item> <item name="android:layout_marginTop">8dp</item>
<item name="android:paddingLeft">4dp</item> <item name="android:paddingLeft">4dp</item>
<item name="android:textAllCaps">true</item> <item name="android:textAllCaps">true</item>
<item name="android:textColor">@color/emphasis</item> <item name="android:textColor">?android:attr/textColorPrimary</item>
<item name="android:textSize">14sp</item> <item name="android:textSize">18sp</item>
<item name="android:textStyle">bold</item> <item name="android:textStyle">bold</item>
<item name="@android:background">@android:color/transparent</item>
</style> </style>
<style name="InfoHeader"> <style name="InfoHeader">
<item name="android:drawableBottom">@drawable/section_header</item> <item name="android:drawableBottom">@drawable/section_header</item>
<item name="android:drawablePadding">1dp</item> <item name="android:drawablePadding">2dp</item>
<item name="android:layout_marginBottom">3dp</item> <item name="android:layout_marginLeft">0dip</item>
<item name="android:layout_marginTop">8dp</item> <item name="android:layout_marginRight">12dip</item>
<item name="android:paddingLeft">0dp</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 name="ExtraFieldHeader">
<item name="android:drawablePadding">1dp</item>
<item name="android:layout_marginBottom">3dp</item> <item name="android:layout_marginBottom">3dp</item>
<item name="android:layout_marginTop">8dp</item> <item name="android:layout_marginTop">8dp</item>
<item name="android:paddingLeft">4dp</item> <item name="android:paddingLeft">4dp</item>
<item name="android:textAllCaps">true</item> <item name="android:textAllCaps">true</item>
<item name="android:textColor">@color/emphasis2</item> <item name="android:textColor">?android:attr/textColorPrimary</item>
<item name="android:textSize">14sp</item>
<item name="android:textStyle">bold</item>
</style>
<style name="BottomBarActionButton">
<item name="android:background">?android:attr/selectableItemBackground</item>
</style>
<style name="TextAppearance_EditEntry_Small">
<item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
<item name="android:textSize">14sp</item>
<item name="android:textColor">?android:attr/textColorSecondary</item>
<item name="android:textAllCaps">true</item>
</style>
<style name="TextAppearance_EditEntry_LabelSmall" parent="TextAppearance_EditEntry_Small">
<item name="android:minHeight">24dip</item>
<item name="android:layout_width">144dip</item>
<item name="android:layout_marginTop">12dip</item>
<item name="android:layout_marginLeft">16dip</item>
<item name="android:layout_marginRight">16dip</item>
<item name="android:paddingLeft">8dip</item>
<item name="android:paddingRight">8dip</item>
<item name="android:layout_marginBottom">-12dip</item>
</style>
<style name="TextAppearance_EditEntry">
<item name="android:textAppearance">?android:attr/textAppearanceMedium</item>
<item name="android:textSize">18sp</item>
<item name="android:textColor">?android:attr/textColorPrimary</item>
</style>
<style name="TextAppearance_EditEntry_Value" parent="TextAppearance_EditEntry">
<item name="android:gravity">center_vertical</item>
<item name="android:layout_gravity">center_vertical</item>
<item name="android:layout_marginRight">12dip</item>
<item name="android:layout_marginLeft">12dip</item>
</style>
<style name="TextAppearance_SmallHeading" parent="TextAppearance_EditEntry_Small">
<item name="android:minHeight">24dip</item>
<item name="android:layout_width">144dip</item>
<item name="android:layout_marginTop">12dip</item>
<item name="android:layout_marginRight">16dip</item>
<item name="android:paddingRight">8dip</item>
<item name="android:layout_marginBottom">-12dip</item>
</style>
<style name="TextAppearance_SubElement">
<item name="android:textAppearance">?android:attr/textAppearanceMedium</item>
<item name="android:textSize">18sp</item>
<item name="android:textColor">?android:attr/textColorPrimary</item>
<item name="android:gravity">center_vertical</item>
<item name="android:layout_gravity">center_vertical</item>
<item name="android:layout_marginRight">12dip</item>
<item name="android:layout_marginLeft">12dip</item>
</style>
<style name="TextAppearance_Help">
<item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
<item name="android:textSize">24sp</item>
<item name="android:padding">12sp</item>
<item name="android:gravity">center_vertical</item>
<item name="android:layout_gravity">center_vertical</item>
<item name="android:layout_marginRight">12dip</item>
<item name="android:layout_marginLeft">12dip</item>
</style>
<style name="EditEntryButton">
<item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
<item name="android:layout_marginTop">12dip</item>
<item name="android:layout_marginLeft">24dip</item>
<item name="android:layout_marginRight">24dip</item>
<item name="android:paddingLeft">8dip</item>
<item name="android:paddingRight">8dip</item>
<item name="android:textAllCaps">true</item>
<item name="android:textColor">?android:attr/textColorPrimary</item>
<item name="android:background">?android:attr/selectableItemBackground</item>
</style>
<style name="AdditionalStringLayout">
<item name="android:layout_marginLeft">24dip</item>
<item name="android:layout_marginRight">24dip</item>
</style>
<style name="MinusButton">
<item name="android:background">?android:attr/selectableItemBackground</item>
<item name="android:src">@drawable/ic_menu_remove_field_holo_light</item>
</style>
<style name="ExtraFieldHeader" parent="android:Widget.Holo.Light.TextView">
<item name="android:layout_marginLeft">16dip</item>
<item name="android:layout_marginRight">12dip</item>
<item name="android:layout_marginBottom">3dp</item>
<item name="android:layout_marginTop">4dp</item>
<item name="android:paddingLeft">4dp</item>
<item name="android:textAllCaps">true</item>
<item name="android:textColor">?android:attr/textColorPrimary</item>
<item name="android:textSize">14sp</item> <item name="android:textSize">14sp</item>
<item name="android:textStyle">bold</item> <item name="android:textStyle">bold</item>
<item name="@android:background">@android:color/transparent</item>
</style> </style>
<style name="PaddedContainer"> <style name="PaddedContainer">

View File

@ -115,7 +115,6 @@
<Compile Include="pluginhost\PluginDetailsActivity.cs" /> <Compile Include="pluginhost\PluginDetailsActivity.cs" />
<Compile Include="pluginhost\PluginHost.cs" /> <Compile Include="pluginhost\PluginHost.cs" />
<Compile Include="pluginhost\PluginListActivity.cs" /> <Compile Include="pluginhost\PluginListActivity.cs" />
<Compile Include="PwEntryOutput.cs" />
<Compile Include="Resources\Resource.designer.cs" /> <Compile Include="Resources\Resource.designer.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="KeePass.cs" /> <Compile Include="KeePass.cs" />
@ -144,7 +143,6 @@
<Compile Include="views\PwGroupView.cs" /> <Compile Include="views\PwGroupView.cs" />
<Compile Include="settings\PrefsUtil.cs" /> <Compile Include="settings\PrefsUtil.cs" />
<Compile Include="views\PwEntryView.cs" /> <Compile Include="views\PwEntryView.cs" />
<Compile Include="views\GroupHeaderView.cs" />
<Compile Include="GroupEditActivity.cs" /> <Compile Include="GroupEditActivity.cs" />
<Compile Include="EntryEditActivity.cs" /> <Compile Include="EntryEditActivity.cs" />
<Compile Include="LockCloseActivity.cs" /> <Compile Include="LockCloseActivity.cs" />
@ -189,6 +187,11 @@
<None Include="filelist.txt"> <None Include="filelist.txt">
<Visible>False</Visible> <Visible>False</Visible>
</None> </None>
<AndroidResource Include="Resources\drawable-ldpi\Thumbs.db" />
<AndroidResource Include="Resources\drawable-mdpi\Thumbs.db" />
<AndroidResource Include="Resources\drawable-xhdpi\Thumbs.db" />
<AndroidResource Include="Resources\drawable-xxhdpi\Thumbs.db" />
<AndroidResource Include="Resources\drawable-hdpi\Thumbs.db" />
<None Include="Resources\drawable\launcher.png"> <None Include="Resources\drawable\launcher.png">
<Visible>False</Visible> <Visible>False</Visible>
</None> </None>
@ -216,6 +219,7 @@
<AndroidResource Include="Resources\layout\sftpcredentials.xml"> <AndroidResource Include="Resources\layout\sftpcredentials.xml">
<SubType>Designer</SubType> <SubType>Designer</SubType>
</AndroidResource> </AndroidResource>
<AndroidResource Include="Resources\drawable\Thumbs.db" />
<None Include="settings\RoundsPreference %28Kopie%29.cs"> <None Include="settings\RoundsPreference %28Kopie%29.cs">
<Visible>False</Visible> <Visible>False</Visible>
</None> </None>
@ -225,7 +229,6 @@
<None Include="Resources\drawable\new_group_dark.xcf"> <None Include="Resources\drawable\new_group_dark.xcf">
<Visible>False</Visible> <Visible>False</Visible>
</None> </None>
<None Include="Resources\drawable-v11\EntryFieldHeaderBackground.xml" />
<None Include="todos.cs"> <None Include="todos.cs">
<Visible>False</Visible> <Visible>False</Visible>
</None> </None>
@ -352,7 +355,6 @@
<AndroidResource Include="Resources\layout\group_add_entry.xml" /> <AndroidResource Include="Resources\layout\group_add_entry.xml" />
<AndroidResource Include="Resources\layout\group_edit.xml" /> <AndroidResource Include="Resources\layout\group_edit.xml" />
<AndroidResource Include="Resources\layout\group_empty.xml" /> <AndroidResource Include="Resources\layout\group_empty.xml" />
<AndroidResource Include="Resources\layout\group_header.xml" />
<AndroidResource Include="Resources\layout\group_list_entry.xml" /> <AndroidResource Include="Resources\layout\group_list_entry.xml" />
<AndroidResource Include="Resources\layout\icon.xml" /> <AndroidResource Include="Resources\layout\icon.xml" />
<AndroidResource Include="Resources\layout\icon_picker.xml" /> <AndroidResource Include="Resources\layout\icon_picker.xml" />
@ -376,13 +378,6 @@
<AndroidResource Include="Resources\values\strings.xml"> <AndroidResource Include="Resources\values\strings.xml">
<SubType>Designer</SubType> <SubType>Designer</SubType>
</AndroidResource> </AndroidResource>
<AndroidResource Include="Resources\menu-v11\entry.xml">
<SubType>Designer</SubType>
</AndroidResource>
<AndroidResource Include="Resources\menu-v11\password.xml" />
<AndroidResource Include="Resources\menu-v11\entry_edit.xml" />
<AndroidResource Include="Resources\menu-v11\group.xml" />
<AndroidResource Include="Resources\menu-v11\fileselect.xml" />
<AndroidResource Include="Resources\drawable\ic_launcher.png" /> <AndroidResource Include="Resources\drawable\ic_launcher.png" />
<AndroidResource Include="Resources\drawable-hdpi\ic00.png" /> <AndroidResource Include="Resources\drawable-hdpi\ic00.png" />
<AndroidResource Include="Resources\drawable-hdpi\ic01.png" /> <AndroidResource Include="Resources\drawable-hdpi\ic01.png" />
@ -541,7 +536,6 @@
<AndroidResource Include="Resources\drawable-mdpi\navigation_previous_item.png" /> <AndroidResource Include="Resources\drawable-mdpi\navigation_previous_item.png" />
<AndroidResource Include="Resources\drawable-hdpi\navigation_previous_item.png" /> <AndroidResource Include="Resources\drawable-hdpi\navigation_previous_item.png" />
<AndroidResource Include="Resources\drawable-xhdpi\navigation_previous_item.png" /> <AndroidResource Include="Resources\drawable-xhdpi\navigation_previous_item.png" />
<AndroidResource Include="Resources\drawable\HeaderButtonBackground.xml" />
<AndroidResource Include="Resources\drawable\EntryFieldHeaderBackground.xml" /> <AndroidResource Include="Resources\drawable\EntryFieldHeaderBackground.xml" />
<AndroidResource Include="Resources\drawable\navigation_accept.png" /> <AndroidResource Include="Resources\drawable\navigation_accept.png" />
<AndroidResource Include="Resources\drawable-hdpi\navigation_accept.png" /> <AndroidResource Include="Resources\drawable-hdpi\navigation_accept.png" />
@ -613,20 +607,6 @@
<AndroidResource Include="Resources\drawable\ic_menu_add_field_holo_light.png" /> <AndroidResource Include="Resources\drawable\ic_menu_add_field_holo_light.png" />
<AndroidResource Include="Resources\drawable\ic_menu_remove_field_holo_light.png" /> <AndroidResource Include="Resources\drawable\ic_menu_remove_field_holo_light.png" />
<AndroidResource Include="Resources\drawable\navigation_cancel.png" /> <AndroidResource Include="Resources\drawable\navigation_cancel.png" />
<AndroidResource Include="Resources\values-v14\styles.xml" />
<AndroidResource Include="Resources\values-v14\colors.xml" />
<AndroidAsset Include="Resources\layout-v14\entry_view_contents.xml" />
<AndroidResource Include="Resources\layout-v14\group_add_entry.xml">
<SubType>Designer</SubType>
</AndroidResource>
<AndroidAsset Include="Resources\layout-v14\entry_view.xml" />
<AndroidResource Include="Resources\layout-v14\entry_edit.xml" />
<AndroidResource Include="Resources\layout-v14\SaveButton.xml" />
<AndroidResource Include="Resources\layout-v14\generate_password.xml" />
<AndroidResource Include="Resources\layout-v14\icon_picker.xml" />
<AndroidResource Include="Resources\layout-v14\password.xml">
<SubType>Designer</SubType>
</AndroidResource>
<AndroidResource Include="Resources\layout\InViewButton.xml" /> <AndroidResource Include="Resources\layout\InViewButton.xml" />
<AndroidResource Include="Resources\drawable\collections_collection.png" /> <AndroidResource Include="Resources\drawable\collections_collection.png" />
<AndroidResource Include="Resources\drawable\collections_new_label.png" /> <AndroidResource Include="Resources\drawable\collections_new_label.png" />
@ -647,11 +627,9 @@
<AndroidResource Include="Resources\drawable-ldpi\device_access_not_secure.png" /> <AndroidResource Include="Resources\drawable-ldpi\device_access_not_secure.png" />
<AndroidResource Include="Resources\drawable-ldpi\ic_menu_remove_field_holo_light.png" /> <AndroidResource Include="Resources\drawable-ldpi\ic_menu_remove_field_holo_light.png" />
<AndroidResource Include="Resources\drawable-mdpi\device_access_not_secure.png" /> <AndroidResource Include="Resources\drawable-mdpi\device_access_not_secure.png" />
<AndroidResource Include="Resources\layout-v14\QuickUnlock_Unused.xml" />
<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" />
<AndroidResource Include="Resources\values-nb\strings.xml" /> <AndroidResource Include="Resources\values-nb\strings.xml" />
<AndroidResource Include="Resources\anim\anim_enter.xml" /> <AndroidResource Include="Resources\anim\anim_enter.xml" />
<AndroidResource Include="Resources\anim\anim_leave.xml" /> <AndroidResource Include="Resources\anim\anim_leave.xml" />
@ -659,8 +637,6 @@
<AndroidResource Include="Resources\anim\anim_leave_back.xml" /> <AndroidResource Include="Resources\anim\anim_leave_back.xml" />
<AndroidResource Include="Resources\layout\searchurlresults.xml" /> <AndroidResource Include="Resources\layout\searchurlresults.xml" />
<AndroidResource Include="Resources\layout\searchurlresults_empty.xml" /> <AndroidResource Include="Resources\layout\searchurlresults_empty.xml" />
<AndroidResource Include="Resources\layout-v14\searchurlresults.xml" />
<AndroidResource Include="Resources\layout-v14\searchurlresults_empty.xml" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Novell\Novell.MonoDroid.CSharp.targets" /> <Import Project="$(MSBuildExtensionsPath)\Novell\Novell.MonoDroid.CSharp.targets" />
<ItemGroup> <ItemGroup>
@ -738,9 +714,6 @@
<ItemGroup> <ItemGroup>
<AndroidResource Include="Resources\drawable\ic_unlocked_gray.png" /> <AndroidResource Include="Resources\drawable\ic_unlocked_gray.png" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable-v11\ic_unlocked_gray.png" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<AndroidResource Include="Resources\drawable-mdpi\ic_launcher_red.png" /> <AndroidResource Include="Resources\drawable-mdpi\ic_launcher_red.png" />
</ItemGroup> </ItemGroup>
@ -759,15 +732,6 @@
<ItemGroup> <ItemGroup>
<AndroidResource Include="Resources\values\dimens.xml" /> <AndroidResource Include="Resources\values\dimens.xml" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable-xxhdpi-v11\ic_launcher_gray.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable-hdpi-v11\ic_launcher_gray.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable-xhdpi-v11\ic_launcher_gray.png" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<AndroidResource Include="Resources\drawable\transparent.png" /> <AndroidResource Include="Resources\drawable\transparent.png" />
</ItemGroup> </ItemGroup>
@ -786,15 +750,6 @@
<ItemGroup> <ItemGroup>
<AndroidResource Include="Resources\drawable\donate_cake.png" /> <AndroidResource Include="Resources\drawable\donate_cake.png" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable-hdpi-v11\ic_unlocked_gray.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable-xhdpi-v11\ic_unlocked_gray.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable-xxhdpi-v11\ic_unlocked_gray.png" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<AndroidResource Include="Resources\layout\filestorage_selection.xml" /> <AndroidResource Include="Resources\layout\filestorage_selection.xml" />
</ItemGroup> </ItemGroup>
@ -869,9 +824,6 @@
<Visible>False</Visible> <Visible>False</Visible>
</XamarinComponentReference> </XamarinComponentReference>
</ItemGroup> </ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\layout-v14\text_with_help.xml" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<AndroidResource Include="Resources\drawable\ic_storage_skydrive.png" /> <AndroidResource Include="Resources\drawable\ic_storage_skydrive.png" />
</ItemGroup> </ItemGroup>
@ -923,16 +875,6 @@
<ItemGroup> <ItemGroup>
<AndroidResource Include="Resources\drawable\location_web_site_holodark.png" /> <AndroidResource Include="Resources\drawable\location_web_site_holodark.png" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\values-v14\styles_dark.xml">
<SubType>Designer</SubType>
</AndroidResource>
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\values-v14\styles_light.xml">
<SubType>Designer</SubType>
</AndroidResource>
</ItemGroup>
<ItemGroup> <ItemGroup>
<AndroidResource Include="Resources\values\attrs.xml" /> <AndroidResource Include="Resources\values\attrs.xml" />
</ItemGroup> </ItemGroup>
@ -951,18 +893,6 @@
<ItemGroup> <ItemGroup>
<AndroidResource Include="Resources\drawable\ic_launcher_gray_bday.png" /> <AndroidResource Include="Resources\drawable\ic_launcher_gray_bday.png" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable-hdpi-v11\ic_launcher_gray_bday.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable-v11\ic_launcher_gray_bday.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable-xhdpi-v11\ic_launcher_gray_bday.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable-xxhdpi-v11\ic_launcher_gray_bday.png" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<TransformFile Include="Properties\AndroidManifest.xml" /> <TransformFile Include="Properties\AndroidManifest.xml" />
</ItemGroup> </ItemGroup>
@ -970,14 +900,60 @@
<AndroidResource Include="Resources\drawable\collections_new_label_holodark.png" /> <AndroidResource Include="Resources\drawable\collections_new_label_holodark.png" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<AndroidAsset Include="Resources\layout-v14\plugin_details.xml" /> <AndroidResource Include="Resources\drawable-xhdpi\ic_launcher_gray.png" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<AndroidAsset Include="Resources\layout-v14\plugin_list.xml"> <AndroidResource Include="Resources\drawable-xhdpi\ic_launcher_gray_bday.png" />
<SubType>AndroidResource</SubType>
</AndroidAsset>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<AndroidAsset Include="Resources\layout-v14\ListViewPluginRow.xml" /> <AndroidResource Include="Resources\drawable-xhdpi\ic_unlocked_gray.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable-xxhdpi\ic_launcher_gray.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable-xxhdpi\ic_launcher_gray_bday.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable-xxhdpi\ic_unlocked_gray.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\layout\ListViewPluginRow.xml" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\layout\plugin_details.xml" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\layout\plugin_list.xml" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\layout\QuickUnlock_Unused.xml" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\layout\SaveButton.xml" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\values\styles_dark.xml" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\values\styles_light.xml" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\old_ic_launcher_gray.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable-hdpi\ic_launcher_gray.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable-hdpi\ic_launcher_gray_bday.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable-hdpi\ic_unlocked_gray.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\vdots_holodark.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\vdots.png" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -0,0 +1,126 @@
using Android.Content.PM;
using Android.Content.Res;
using Android.Graphics.Drawables;
using Android.Widget;
using Android.Content;
using Android.Views;
using System.Collections.Generic;
using Android.App;
using PluginHostTest;
namespace keepass2android
{
/// <summary>
/// Represents information about a plugin for display in the plugin list activity
/// </summary>
public class PluginItem
{
private readonly string _package;
private readonly Context _ctx;
private readonly Resources _pluginRes;
public PluginItem(string package, string enabledStatus, Context ctx)
{
_package = package;
_ctx = ctx;
EnabledStatus = enabledStatus;
_pluginRes = _ctx.PackageManager.GetResourcesForApplication(_package);
}
public string Label
{
get
{
return PluginDetailsActivity.GetStringFromPlugin(_pluginRes, _package, "kp2aplugin_title");
}
}
public string Version
{
get
{
return _ctx.PackageManager.GetPackageInfo(_package, 0).VersionName;
}
}
public string EnabledStatus
{
get;
set;
}
public Drawable Icon
{
get
{
return _ctx.PackageManager.GetApplicationIcon(_package);
}
}
public string Package
{
get { return _package; }
}
}
public class PluginArrayAdapter : ArrayAdapter<PluginItem>
{
class PluginViewHolder : Java.Lang.Object
{
public ImageView imgIcon;
public TextView txtTitle;
public TextView txtVersion;
public TextView txtEnabledStatus;
}
Context context;
int layoutResourceId;
IList<PluginItem> data = null;
public PluginArrayAdapter(Context context, int layoutResourceId, IList<PluginItem> data) :
base(context, layoutResourceId, data)
{
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
View row = convertView;
PluginViewHolder holder = null;
if (row == null)
{
LayoutInflater inflater = ((Activity)context).LayoutInflater;
row = inflater.Inflate(layoutResourceId, parent, false);
holder = new PluginViewHolder();
holder.imgIcon = (ImageView)row.FindViewById(Resource.Id.imgIcon);
holder.txtTitle = (TextView)row.FindViewById(Resource.Id.txtLabel);
holder.txtVersion = (TextView)row.FindViewById(Resource.Id.txtVersion);
holder.txtEnabledStatus = (TextView)row.FindViewById(Resource.Id.txtStatus);
row.Tag = holder;
}
else
{
holder = (PluginViewHolder)row.Tag;
}
var item = data[position];
holder.txtTitle.Text = item.Label;
holder.txtVersion.Text = item.Version;
holder.txtEnabledStatus.Text = item.EnabledStatus;
holder.imgIcon.SetImageDrawable(item.Icon);
return row;
}
}
}

View File

@ -0,0 +1,199 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using Android.Content;
using Android.Content.PM;
using Android.Util;
using Keepass2android.Pluginsdk;
namespace keepass2android
{
public class PluginDatabase
{
private const string _tag = "KP2A_PluginDatabase";
private readonly Context _ctx;
private const string _accessToken = "accessToken";
private const string _scopes = "scopes";
private const string _requesttoken = "requestToken";
private const string _pluginlist = "pluginList";
public PluginDatabase(Context ctx)
{
_ctx = ctx;
}
private ISharedPreferences GetPreferencesForPlugin(string packageName)
{
var prefs = _ctx.GetSharedPreferences("KP2A.Plugin." + packageName, FileCreationMode.Private);
if (prefs.GetString(_requesttoken, null) == null)
{
var editor = prefs.Edit();
editor.PutString(_requesttoken, Guid.NewGuid().ToString());
editor.Commit();
}
var hostPrefs = GetHostPrefs();
var plugins = hostPrefs.GetStringSet(_pluginlist, new List<string>());
if (!plugins.Contains(packageName))
{
plugins.Add(packageName);
hostPrefs.Edit().PutStringSet(_pluginlist, plugins).Commit();
}
return prefs;
}
/// <summary>
/// Returns the request token for the plugin. Request token is created of not yet available.
/// </summary>
/// <returns>Request token. Never null or empty.</returns>
public string GetRequestToken(string pkgName)
{
return GetPreferencesForPlugin(pkgName).GetString(_requesttoken, null);
}
public IList<string> GetPluginScopes(string pluginPackage)
{
var prefs = GetPreferencesForPlugin(pluginPackage);
return AccessManager.StringToStringArray(prefs.GetString(_scopes, ""));
}
public IEnumerable<String> GetAllPluginPackages()
{
var hostPrefs = GetHostPrefs();
return hostPrefs.GetStringSet(_pluginlist, new List<string>()).Where(IsPackageInstalled);
}
public bool IsPackageInstalled(string targetPackage)
{
try
{
PackageInfo info = _ctx.PackageManager.GetPackageInfo(targetPackage, PackageInfoFlags.MetaData);
}
catch (PackageManager.NameNotFoundException e)
{
return false;
}
return true;
}
public bool IsEnabled(string pluginPackage)
{
return GetPreferencesForPlugin(pluginPackage).GetString(_accessToken, null) != null;
}
public void StorePlugin(string pluginPackage, string accessToken, IList<string> requestedScopes)
{
ISharedPreferences hostPrefs = GetHostPrefs();
ISharedPreferences pluginPrefs = GetPreferencesForPlugin(pluginPackage);
var stringSet = hostPrefs.GetStringSet(_pluginlist, new Collection<string>());
if (!stringSet.Contains(pluginPackage))
{
stringSet.Add(pluginPackage);
hostPrefs.Edit()
.PutStringSet(_pluginlist, stringSet)
.Commit();
}
pluginPrefs.Edit()
.PutString(_scopes, AccessManager.StringArrayToString(requestedScopes))
.PutString(_accessToken, accessToken)
.Commit();
}
private ISharedPreferences GetHostPrefs()
{
return _ctx.GetSharedPreferences("plugins", FileCreationMode.Private);
}
public void SetEnabled(string pluginPackage, bool enabled)
{
if (enabled)
{
string accessToken = Guid.NewGuid().ToString();
Intent i = new Intent(Strings.ActionReceiveAccess);
i.SetPackage(pluginPackage);
i.PutExtra(Strings.ExtraSender, _ctx.PackageName);
i.PutExtra(Strings.ExtraRequestToken, GetPreferencesForPlugin(pluginPackage).GetString(_requesttoken, null));
i.PutExtra(Strings.ExtraAccessToken, accessToken);
_ctx.SendBroadcast(i);
StorePlugin(pluginPackage, accessToken, GetPluginScopes( pluginPackage));
}
else
{
Intent i = new Intent(Strings.ActionRevokeAccess);
i.SetPackage(pluginPackage);
i.PutExtra(Strings.ExtraSender, _ctx.PackageName);
i.PutExtra(Strings.ExtraRequestToken, GetPreferencesForPlugin(pluginPackage).GetString(_requesttoken, null));
_ctx.SendBroadcast(i);
StorePlugin(pluginPackage, null, GetPluginScopes(pluginPackage));
}
}
public bool IsValidAccessToken(string pluginPackage, string accessToken, string scope)
{
if (pluginPackage == null)
{
Log.Warn(_tag, "No pluginPackage specified!");
return false;
}
if (accessToken == null)
{
Log.Warn(_tag, "No accessToken specified!");
return false;
}
var prefs = GetPreferencesForPlugin(pluginPackage);
if (prefs.GetString(_accessToken, null) != accessToken)
{
Log.Warn(_tag, "Invalid access token for " + pluginPackage);
return false;
}
if (!AccessManager.StringToStringArray(prefs.GetString(_scopes, "")).Contains(scope))
{
Log.Warn(_tag, "Scope " + scope + " not granted for " + pluginPackage);
return false;
}
return true;
}
public string GetAccessToken(string pluginPackage)
{
return GetPreferencesForPlugin(pluginPackage).GetString(_accessToken, null);
}
public void Clear()
{
foreach (string plugin in GetAllPluginPackages())
{
GetPreferencesForPlugin(plugin).Edit().Clear().Commit();
}
GetHostPrefs().Edit().Clear().Commit();
}
public IEnumerable<string> GetPluginsWithAcceptedScope(string scope)
{
return GetAllPluginPackages().Where(plugin =>
{
var prefs = GetPreferencesForPlugin(plugin);
return (prefs.GetString(_accessToken, null) != null)
&& AccessManager.StringToStringArray(prefs.GetString(_scopes, "")).Contains(scope);
});
}
public void ClearPlugin(string plugin)
{
var prefs = _ctx.GetSharedPreferences("KP2A.Plugin." + plugin, FileCreationMode.Private);
prefs.Edit().Clear().Commit();
}
}
}

View File

@ -0,0 +1,108 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.Content.Res;
using Android.Graphics.Drawables;
using Android.OS;
using Android.Runtime;
using Android.Util;
using Android.Views;
using Android.Widget;
using Java.Util;
using Keepass2android.Pluginsdk;
using keepass2android;
using keepass2android.views;
namespace PluginHostTest
{
[Activity(Label = "@string/app_name", Theme = "@style/Base")]
public class PluginDetailsActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
string pluginPackage = Intent.GetStringExtra("PluginPackage");
Intent mainIntent = new Intent(Intent.ActionMain, null);
mainIntent.AddCategory(Intent.CategoryLauncher);
IList<ResolveInfo> appList = PackageManager.QueryIntentActivities(mainIntent, 0);
//Collections.Sort(appList, new ResolveInfo.DisplayNameComparator(PackageManager));
foreach (ResolveInfo temp in appList)
{
Log.Verbose("my logs", "package and activity name = "
+ temp.ActivityInfo.PackageName + " "
+ temp.ActivityInfo.Name + " " + temp.ActivityInfo.IconResource);
}
var pluginRes = PackageManager.GetResourcesForApplication(pluginPackage);
var title = GetStringFromPlugin(pluginRes, pluginPackage, "kp2aplugin_title");
var author = GetStringFromPlugin(pluginRes, pluginPackage, "kp2aplugin_author");
var shortDesc = GetStringFromPlugin(pluginRes, pluginPackage, "kp2aplugin_shortdesc");
var version = PackageManager.GetPackageInfo(pluginPackage, 0).VersionName;
SetContentView(Resource.Layout.plugin_details);
if (title != null)
FindViewById<TextView>(Resource.Id.txtLabel).Text = title;
FindViewById<TextView>(Resource.Id.txtVersion).Text = version;
SetTextOrHide(Resource.Id.txtAuthor, author);
SetTextOrHide(Resource.Id.txtShortDesc, shortDesc);
var checkbox = FindViewById<CheckBox>(Resource.Id.cb_enabled);
PluginDatabase pluginDb = new PluginDatabase(this);
checkbox.Checked = pluginDb.IsEnabled(pluginPackage);
checkbox.CheckedChange += delegate(object sender, CompoundButton.CheckedChangeEventArgs args)
{
pluginDb.SetEnabled(pluginPackage, checkbox.Checked);
};
Drawable d = PackageManager.GetApplicationIcon(pluginPackage);
FindViewById<ImageView>(Resource.Id.imgIcon).SetImageDrawable(d);
FindViewById<TextView>(Resource.Id.txtVersion).Text = version;
var scopesContainer = FindViewById<LinearLayout>(Resource.Id.scopes_list);
foreach (string scope in pluginDb.GetPluginScopes(pluginPackage))
{
string scopeId = scope.Substring("keepass2android.".Length);
TextWithHelp help = new TextWithHelp(this, GetString(Resources.GetIdentifier(scopeId + "_title", "string", PackageName)), GetString(Resources.GetIdentifier(scopeId + "_explanation", "string", PackageName)));
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FillParent, ViewGroup.LayoutParams.WrapContent);
help.LayoutParameters = layoutParams;
scopesContainer.AddView(help);
}
}
private void SetTextOrHide(int resourceId, string text)
{
if (text != null)
{
FindViewById<TextView>(resourceId).Text = text;
FindViewById<TextView>(resourceId).Visibility = ViewStates.Visible;
}
else
FindViewById<TextView>(resourceId).Visibility = ViewStates.Gone;
}
public static string GetStringFromPlugin(Resources pluginRes, string pluginPackage, string stringId)
{
int titleId = pluginRes.GetIdentifier(pluginPackage + ":string/"+stringId, null, null);
string title = null;
if (titleId != 0)
title = pluginRes.GetString(titleId);
return title;
}
}
}

View File

@ -0,0 +1,154 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.Util;
using KeePassLib.Utility;
using Keepass2android.Pluginsdk;
using Org.Json;
namespace keepass2android
{
[BroadcastReceiver()]
[IntentFilter(new[] { Strings.ActionRequestAccess})]
public class PluginHost: BroadcastReceiver
{
private const string _tag = "KP2A_PluginHost";
private static readonly string[] _validScopes = { Strings.ScopeDatabaseActions, Strings.ScopeCurrentEntry };
public static void TriggerRequests(Context ctx)
{
Intent accessIntent = new Intent(Strings.ActionTriggerRequestAccess);
PackageManager packageManager = ctx.PackageManager;
IList<ResolveInfo> dictPacks = packageManager.QueryBroadcastReceivers(
accessIntent, PackageInfoFlags.Receivers);
PluginDatabase pluginDatabase = new PluginDatabase(ctx);
foreach (ResolveInfo ri in dictPacks)
{
ApplicationInfo appInfo = ri.ActivityInfo.ApplicationInfo;
String pkgName = appInfo.PackageName;
try
{
Intent triggerIntent = new Intent(Strings.ActionTriggerRequestAccess);
triggerIntent.SetPackage(pkgName);
triggerIntent.PutExtra(Strings.ExtraSender, ctx.PackageName);
triggerIntent.PutExtra(Strings.ExtraRequestToken, pluginDatabase.GetRequestToken(pkgName));
ctx.SendBroadcast(triggerIntent);
}
catch (Exception e)
{
}
}
}
public override void OnReceive(Context context, Intent intent)
{
PluginDatabase pluginDb = new PluginDatabase(context);
if (intent.Action == Strings.ActionRequestAccess)
{
var senderPackage = intent.GetStringExtra(Strings.ExtraSender);
var requestToken = intent.GetStringExtra(Strings.ExtraRequestToken);
var requestedScopes = intent.GetStringArrayListExtra(Strings.ExtraScopes);
if (!AreScopesValid(requestedScopes))
{
return;
}
if (pluginDb.GetRequestToken(senderPackage) != requestToken)
{
Log.Warn(_tag, "Invalid requestToken!");
return;
}
string currentAccessToken = pluginDb.GetAccessToken(senderPackage);
if ((currentAccessToken != null)
&& (AccessManager.IsSubset(requestedScopes,
pluginDb.GetPluginScopes(senderPackage))))
{
//permission already there.
var i = new Intent(Strings.ActionReceiveAccess);
i.PutExtra(Strings.ExtraSender, context.PackageName);
i.PutExtra(Strings.ExtraAccessToken, currentAccessToken);
//TODO: Plugin should verify requestToken to make sure it doesn't receive accessTokens from malicious apps
i.PutExtra(Strings.ExtraRequestToken, requestToken);
i.SetPackage(senderPackage);
context.SendBroadcast(i);
Log.Debug(_tag, "Plugin " + senderPackage + " enabled.");
}
else
{
//store that scope was requested but not yet approved (=> accessToken = null)
pluginDb.StorePlugin(senderPackage, null, requestedScopes);
Log.Debug(_tag, "Plugin " + senderPackage + " not enabled.");
//see if the plugin has an access token
string accessToken = intent.GetStringExtra(Strings.ExtraAccessToken);
if (accessToken != null)
{
//notify plugin that access token is no longer valid or sufficient
Intent i = new Intent(Strings.ActionRevokeAccess);
i.PutExtra(Strings.ExtraSender, context.PackageName);
i.PutExtra(Strings.ExtraAccessToken, accessToken);
i.SetPackage(senderPackage);
context.SendBroadcast(i);
Log.Warn(_tag, "Access token of plugin " + senderPackage + " not (or no more) valid.");
}
}
}
}
private bool AreScopesValid(IList<string> requestedScopes)
{
foreach (string scope in requestedScopes)
{
if (!_validScopes.Contains(scope))
{
Log.Warn(_tag, "invalid scope: " + scope);
return false;
}
}
return true;
}
public static void AddEntryToIntent(Intent intent, PwEntryOutput entry)
{
/*//add the entry XML
not yet implemented. What to do with attachments?
MemoryStream memStream = new MemoryStream();
KdbxFile.WriteEntries(memStream, new[] {entry});
string entryData = StrUtil.Utf8.GetString(memStream.ToArray());
intent.PutExtra(Strings.ExtraEntryData, entryData);
*/
//add the output string array (placeholders replaced taking into account the db context)
Dictionary<string, string> outputFields = entry.OutputStrings.ToDictionary(pair => StrUtil.SafeXmlString(pair.Key), pair => pair.Value.ReadString());
JSONObject json = new JSONObject(outputFields);
var jsonStr = json.ToString();
intent.PutExtra(Strings.ExtraEntryOutputData, jsonStr);
intent.PutExtra(Strings.ExtraEntryId, entry.Uuid.ToHexString());
}
}
}

View File

@ -0,0 +1,56 @@
using System.Collections.Generic;
using System.Linq;
using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.OS;
using Android.Widget;
using PluginHostTest;
namespace keepass2android
{
[Activity(Label = "@string/app_name", Theme = "@style/Base")]
public class PluginListActivity : ListActivity
{
private PluginArrayAdapter _pluginArrayAdapter;
private List<PluginItem> _items;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
//TODO _design.ApplyTheme();
SetContentView(Resource.Layout.plugin_list);
ListView listView = FindViewById<ListView>(Android.Resource.Id.List);
listView.ItemClick +=
(sender, args) =>
{
Intent i = new Intent(this, typeof(PluginDetailsActivity));
i.PutExtra("PluginPackage", _items[args.Position].Package);
StartActivity(i);
};
// Create your application here
}
protected override void OnResume()
{
base.OnResume();
PluginDatabase pluginDb = new PluginDatabase(this);
_items = (from pluginPackage in pluginDb.GetAllPluginPackages()
let version = PackageManager.GetPackageInfo(pluginPackage, 0).VersionName
let enabledStatus = pluginDb.IsEnabled(pluginPackage) ? GetString(Resource.String.plugin_enabled) : GetString(Resource.String.plugin_disabled)
select new PluginItem(pluginPackage, enabledStatus, this)).ToList();
/*
{
new PluginItem("PluginA", Resource.Drawable.Icon, "keepass2android.plugina", "connected"),
new PluginItem("KeepassNFC", Resource.Drawable.Icon, "com.bla.blubb.plugina", "disconnected")
};
* */
_pluginArrayAdapter = new PluginArrayAdapter(this, Resource.Layout.ListViewPluginRow, _items);
ListAdapter = _pluginArrayAdapter;
}
}
}

View File

@ -94,10 +94,19 @@ namespace keepass2android
if (uuidBytes != null) if (uuidBytes != null)
entryId = new PwUuid(MemUtil.HexStringToByteArray(uuidBytes)); entryId = new PwUuid(MemUtil.HexStringToByteArray(uuidBytes));
PwEntry entry; PwEntryOutput entry;
try try
{ {
entry = App.Kp2a.GetDb().Entries[entryId]; if ((App.Kp2a.GetDb().LastOpenedEntry != null)
&& (entryId.Equals(App.Kp2a.GetDb().LastOpenedEntry.Uuid)))
{
entry = App.Kp2a.GetDb().LastOpenedEntry;
}
else
{
entry = new PwEntryOutput(App.Kp2a.GetDb().Entries[entryId], App.Kp2a.GetDb().KpDatabase);
}
} }
catch (Exception) catch (Exception)
{ {
@ -190,7 +199,7 @@ namespace keepass2android
return PendingIntent.GetBroadcast(this, requestCode, intent, PendingIntentFlags.CancelCurrent); return PendingIntent.GetBroadcast(this, requestCode, intent, PendingIntentFlags.CancelCurrent);
} }
public void DisplayAccessNotifications(PwEntry entry, bool closeAfterCreate) public void DisplayAccessNotifications(PwEntryOutput entry, bool closeAfterCreate)
{ {
// Notification Manager // Notification Manager
_notificationManager = (NotificationManager)GetSystemService(NotificationService); _notificationManager = (NotificationManager)GetSystemService(NotificationService);
@ -201,13 +210,13 @@ namespace keepass2android
_numElementsToWaitFor = 0; _numElementsToWaitFor = 0;
bool hadKeyboardData = ClearKeyboard(false); //do not broadcast if the keyboard was changed bool hadKeyboardData = ClearKeyboard(false); //do not broadcast if the keyboard was changed
String entryName = entry.Strings.ReadSafe(PwDefs.TitleField); String entryName = entry.OutputStrings.ReadSafe(PwDefs.TitleField);
ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences(this); ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences(this);
if (prefs.GetBoolean(GetString(Resource.String.CopyToClipboardNotification_key), Resources.GetBoolean(Resource.Boolean.CopyToClipboardNotification_default))) if (prefs.GetBoolean(GetString(Resource.String.CopyToClipboardNotification_key), Resources.GetBoolean(Resource.Boolean.CopyToClipboardNotification_default)))
{ {
if (GetStringAndReplacePlaceholders(entry, PwDefs.PasswordField).Length > 0) if (entry.OutputStrings.ReadSafe(PwDefs.PasswordField).Length > 0)
{ {
// only show notification if password is available // only show notification if password is available
Notification password = GetNotification(Intents.CopyPassword, Resource.String.copy_password, Resource.Drawable.notify, entryName); Notification password = GetNotification(Intents.CopyPassword, Resource.String.copy_password, Resource.Drawable.notify, entryName);
@ -218,7 +227,7 @@ namespace keepass2android
} }
if (GetStringAndReplacePlaceholders(entry, PwDefs.UserNameField).Length > 0) if (entry.OutputStrings.ReadSafe(PwDefs.UserNameField).Length > 0)
{ {
// only show notification if username is available // only show notification if username is available
Notification username = GetNotification(Intents.CopyUsername, Resource.String.copy_username, Resource.Drawable.notify, entryName); Notification username = GetNotification(Intents.CopyUsername, Resource.String.copy_username, Resource.Drawable.notify, entryName);
@ -278,7 +287,7 @@ namespace keepass2android
RegisterReceiver(_notificationDeletedBroadcastReceiver, deletefilter); RegisterReceiver(_notificationDeletedBroadcastReceiver, deletefilter);
} }
bool MakeAccessibleForKeyboard(PwEntry entry) bool MakeAccessibleForKeyboard(PwEntryOutput entry)
{ {
#if EXCLUDE_KEYBOARD #if EXCLUDE_KEYBOARD
return false; return false;
@ -302,7 +311,7 @@ namespace keepass2android
int i=0; int i=0;
foreach (string key in keys) foreach (string key in keys)
{ {
String value = GetStringAndReplacePlaceholders(entry, key); String value = entry.OutputStrings.ReadSafe(key);
if (value.Length > 0) if (value.Length > 0)
{ {
@ -312,12 +321,10 @@ namespace keepass2android
i++; i++;
} }
//add additional fields: //add additional fields:
foreach (var pair in entry.Strings) foreach (var pair in entry.OutputStrings)
{ {
String key = pair.Key; var key = pair.Key;
var value = pair.Value.ReadString();
var value = GetStringAndReplacePlaceholders(entry, key);
if (!PwDefs.IsStandardField(key)) { if (!PwDefs.IsStandardField(key)) {
kbdataBuilder.AddString(pair.Key, pair.Key, value); kbdataBuilder.AddString(pair.Key, pair.Key, value);
@ -327,7 +334,7 @@ namespace keepass2android
kbdataBuilder.Commit(); kbdataBuilder.Commit();
Keepass2android.Kbbridge.KeyboardData.EntryName = entry.Strings.ReadSafe(PwDefs.TitleField); Keepass2android.Kbbridge.KeyboardData.EntryName = entry.OutputStrings.ReadSafe(PwDefs.TitleField);
Keepass2android.Kbbridge.KeyboardData.EntryId = entry.Uuid.ToHexString(); Keepass2android.Kbbridge.KeyboardData.EntryId = entry.Uuid.ToHexString();
return hasData; return hasData;
@ -456,9 +463,9 @@ namespace keepass2android
class CopyToClipboardBroadcastReceiver: BroadcastReceiver class CopyToClipboardBroadcastReceiver: BroadcastReceiver
{ {
readonly CopyToClipboardService _service; readonly CopyToClipboardService _service;
readonly PwEntry _entry; readonly PwEntryOutput _entry;
public CopyToClipboardBroadcastReceiver(PwEntry entry, CopyToClipboardService service) public CopyToClipboardBroadcastReceiver(PwEntryOutput entry, CopyToClipboardService service)
{ {
_entry = entry; _entry = entry;
_service = service; _service = service;
@ -471,14 +478,14 @@ namespace keepass2android
if (action.Equals(Intents.CopyUsername)) if (action.Equals(Intents.CopyUsername))
{ {
String username = GetStringAndReplacePlaceholders(_entry, PwDefs.UserNameField); String username = _entry.OutputStrings.ReadSafe(PwDefs.UserNameField);
if (username.Length > 0) if (username.Length > 0)
{ {
_service.TimeoutCopyToClipboard(username); _service.TimeoutCopyToClipboard(username);
} }
} else if (action.Equals(Intents.CopyPassword)) } else if (action.Equals(Intents.CopyPassword))
{ {
String password = GetStringAndReplacePlaceholders(_entry, PwDefs.PasswordField); String password = _entry.OutputStrings.ReadSafe(PwDefs.PasswordField);
if (password.Length > 0) if (password.Length > 0)
{ {
_service.TimeoutCopyToClipboard(password); _service.TimeoutCopyToClipboard(password);

View File

@ -1,56 +0,0 @@
/*
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 3 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 <http://www.gnu.org/licenses/>.
*/
using System;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.Util;
namespace keepass2android.view
{
public class GroupHeaderView : RelativeLayout {
public GroupHeaderView (IntPtr javaReference, JniHandleOwnership transfer)
: base(javaReference, transfer)
{
}
public GroupHeaderView(Context context) :base(context) {
InflateView();
}
public GroupHeaderView(Context context, IAttributeSet attrs):base(context,attrs) {
InflateView();
}
private void InflateView() {
LayoutInflater inflater = (LayoutInflater) Context.GetSystemService(Context.LayoutInflaterService);
inflater.Inflate(Resource.Layout.group_header, this);
}
}
}

View File

@ -24,6 +24,13 @@ namespace keepass2android.views
Initialize(attrs); Initialize(attrs);
} }
public TextWithHelp(Context context, string text, string helpText) :
base(context, null)
{
Initialize(text, helpText);
}
public TextWithHelp(Context context, IAttributeSet attrs, int defStyle) : public TextWithHelp(Context context, IAttributeSet attrs, int defStyle) :
base(context, attrs, defStyle) base(context, attrs, defStyle)
{ {
@ -31,19 +38,26 @@ namespace keepass2android.views
} }
private void Initialize(IAttributeSet attrs) private void Initialize(IAttributeSet attrs)
{
TypedArray a = Context.ObtainStyledAttributes(attrs, Resource.Styleable.TextWithHelp);
string helpText = a.GetString(Resource.Styleable.TextWithHelp_help_text);
const string xmlns = "http://schemas.android.com/apk/res/android";
string text = Context.GetString(attrs.GetAttributeResourceValue(xmlns, "text", Resource.String.ellipsis));
Initialize(text, helpText);
}
private void Initialize(string text, string helpText)
{ {
LayoutInflater inflater = (LayoutInflater)Context.GetSystemService(Context.LayoutInflaterService); LayoutInflater inflater = (LayoutInflater)Context.GetSystemService(Context.LayoutInflaterService);
inflater.Inflate(Resource.Layout.text_with_help, this); inflater.Inflate(Resource.Layout.text_with_help, this);
TypedArray a = Context.ObtainStyledAttributes(
attrs,
Resource.Styleable.TextWithHelp);
_kp2AShortHelpView = ((Kp2aShortHelpView)FindViewById(Resource.Id.help)); _kp2AShortHelpView = ((Kp2aShortHelpView)FindViewById(Resource.Id.help));
_kp2AShortHelpView.HelpText = a.GetString(Resource.Styleable.TextWithHelp_help_text); _kp2AShortHelpView.HelpText = helpText;
const string xmlns = "http://schemas.android.com/apk/res/android";
((TextView)FindViewById(Resource.Id.text)).Text = Context.GetString(attrs.GetAttributeResourceValue(xmlns, "text", Resource.String.ellipsis));
((TextView)FindViewById(Resource.Id.text)).Text = text;
} }
public string HelpText public string HelpText