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\KdbDatabaseLoader.cs" />
<Compile Include="database\KdbxDatabaseLoader.cs" />
<Compile Include="database\PwEntryOutput.cs" />
<Compile Include="database\SynchronizeCachedDatabase.cs" />
<Compile Include="DataExchange\FileFormatProvider.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>
/// if an OTP key was used, this property tells the location of the OTP auxiliary file.
/// Must be set after loading.

View File

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

View File

@ -717,9 +717,6 @@ namespace keepass2android
}
return true;
case Resource.Id.menu_cancel_edit:
Finish();
break;
case Resource.Id.menu_rate:
try {
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">
<item>
<shape>
<gradient
android:angle="45"
android:startColor="#FF000030"
android:endColor="#FF000000"
android:type="linear" />
</shape>
</item>
</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"
android:layout_width="fill_parent"
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
android:id="@+id/entry_scroll"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@id/entry_save_header">
android:layout_height="fill_parent">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<!-- 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" />
<!-- Title -->
<ImageButton
android:id="@+id/icon_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic00"
android:layout_alignParentRight="true"
android:layout_below="@id/entry_title_label" />
android:src="@drawable/ic00" />
<EditText
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_marginTop="4dip"
android:capitalize="sentences"
android:layout_toLeftOf="@+id/icon_button"
android:singleLine="true"
android:layout_below="@id/entry_title_label"
android:hint="@string/hint_title" />
android:hint="@string/hint_title"
android:singleLine="true" />
<!-- 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
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:singleLine="true"
android:layout_marginTop="4dip"
android:layout_below="@id/icon_button"
android:hint="@string/hint_username"
android:inputType="textEmailAddress"
android:layout_below="@id/entry_user_name_label"
android:hint="@string/hint_username" />
<!-- 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" />
android:singleLine="true" />
<!-- URL -->
<EditText
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:singleLine="true"
android:layout_marginTop="4dip"
android:layout_below="@id/entry_user_name"
android:hint="@string/hint_url"
android:inputType="textUri"
android:layout_below="@id/entry_url_label"
android:hint="@string/hint_url" />
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"
style="@style/EntryFieldHeader"
android:text="@string/entry_password" />
<RelativeLayout
android:id="@+id/password_section"
@ -142,47 +103,43 @@
<!-- 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"
style="@style/EntryFieldHeader"
android:text="@string/entry_comment" />
<EditText
android:id="@+id/entry_comment"
android:inputType="textMultiLine"
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:hint="@string/hint_comment"
android:inputType="textMultiLine" />
<!-- 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
android:id="@+id/advanced_container"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/entry_extra_strings_label"
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="@android:drawable/ic_menu_add"
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:text="@string/entry_binaries"
android:layout_below="@id/add_advanced"
style="@style/EntryFieldHeader" />
android:text="@string/entry_binaries" />
<LinearLayout
android:id="@+id/binaries"
android:layout_width="fill_parent"
@ -192,54 +149,59 @@
<!-- Tags -->
<TextView
android:id="@+id/entry_tags_label"
style="@style/TextAppearance_EditEntry_LabelSmall"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/entry_tags"
android:layout_below="@id/binaries"
style="@style/EntryFieldHeader" />
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:singleLine="true"
android:inputType="text"
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 -->
<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"
style="@style/EntryFieldHeader"
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:singleLine="true"
android:inputType="textUri"
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 -->
<TextView
android:id="@+id/entry_expires_label"
style="@style/TextAppearance_EditEntry_LabelSmall"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/entry_expires"
style="@style/EntryFieldHeader"
android:layout_below="@id/entry_override_url" />
android:layout_below="@id/entry_override_url"
android:text="@string/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_height="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_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>
</ScrollView>
</RelativeLayout>

View File

@ -1,72 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
<?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">
<!-- Title -->
<LinearLayout
android:id="@+id/title_block"
android:layout_alignParentTop="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
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/top"
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="horizontal" />
<LinearLayout
android:id="@+id/bottom_bar"
android:layout_alignParentBottom="true"
android:layout_width="fill_parent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="2dp"
style="@style/GroupAndEntryHeader">
<Button
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:text="@string/menu_edit"
android:layout_width="fill_parent"
android:drawableLeft="@android:drawable/ic_menu_edit"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentBottom="true" />
</LinearLayout>
<ImageView
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:src="@android:drawable/divider_horizontal_dark" />
<ScrollView
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:layout_below="@id/title_block"
android:fillViewport="true"
android:scrollbarStyle="insideOverlay">
<keepass2android.view.EntryContentsView
<keepass2android.view.EntryContentsView
android:id="@+id/entry_contents"
android:layout_height="wrap_content"
android:layout_width="fill_parent" />
</ScrollView>
</ScrollView>
</RelativeLayout>

View File

@ -1,154 +1,264 @@
<?xml version="1.0" encoding="utf-8"?>
<?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">
<!-- Username -->
<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"
<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"
/>
<keepass2android.view.TextViewSelect
android:id="@+id/entry_user_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@style/EntryItem" />
<!-- 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"
<!-- 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"
/>
<keepass2android.view.TextViewSelect
android:id="@+id/entry_url"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:autoLink="all"
style="@style/EntryItem" />
<!-- 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"
/>
<keepass2android.view.TextViewSelect
android:id="@+id/entry_password"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:password="true"
android:typeface="monospace"
style="@style/EntryItem" />
<!-- Comment -->
<TextView
android:id="@+id/entry_comment_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/entry_comment"
android:autoLink="all"
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"
/>
<keepass2android.view.TextViewSelect
android:id="@+id/entry_comment"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@style/EntryItem" />
<!-- Extra strings -->
<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
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"
/>
<LinearLayout
android:id="@+id/extra_strings"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
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"
<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"
/>
<LinearLayout
android:id="@+id/binaries"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
<!--Tags -->
<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_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"
/>
<keepass2android.view.TextViewSelect
android:id="@+id/entry_tags"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@style/EntryItem" />
<!--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_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"
/>
<keepass2android.view.TextViewSelect
android:id="@+id/entry_override_url"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@style/EntryItem" />
<!-- 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_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_created"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@style/EntryItem" />
<!-- 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" />
<!-- 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" />
<TextView
android:id="@+id/entry_expires"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@style/EntryItem" />
</LinearLayout>
</LinearLayout>

View File

@ -2,24 +2,60 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
android:id="@+id/accept_button"
<LinearLayout
android:id="@+id/bottom_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/accept"
android:layout_alignParentBottom="true" />
<Button
android:id="@+id/cancel_button"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@android:string/cancel"
android:orientation="horizontal"
android:divider="?android:attr/dividerVertical"
android:showDividers="middle"
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
android:id="@+id/ScrollView"
android:layout_width="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
android:id="@+id/RelativeLayout"
android:layout_height="wrap_content"
@ -41,6 +77,7 @@
<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" />

View File

@ -2,70 +2,104 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<keepass2android.view.GroupHeaderView
android:id="@+id/group_header"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<LinearLayout
android:id="@+id/top"
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="horizontal" />
<LinearLayout
android:id="@+id/bottom_bar"
android:layout_alignParentBottom="true"
android:layout_width="fill_parent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="2dp"
style="@style/GroupAndEntryHeader">
<Button
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"
android:layout_width="0px"
android:layout_weight="1"
style="?android:attr/actionButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="@string/add_group"
android:drawableLeft="@drawable/btn_new_group"
/>
<Button
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"
android:layout_width="0px"
android:layout_weight="1"
style="?android:attr/actionButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/add_group"
android:layout_alignParentBottom="true"
android:text="@string/add_entry"
android:drawableLeft="@drawable/device_access_new_account"
/>
<Button
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"
android:layout_width="0px"
android:layout_weight="1"
style="?android:attr/actionButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="@string/insert_element_here"
android:visibility="gone"
android:drawableLeft="@drawable/btn_new_group"
/>
<Button
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"
android:layout_width="0px"
android:layout_weight="1"
style="?android:attr/actionButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/insert_element"
android:layout_alignParentBottom="true"
android:text="@string/cancel"
android:visibility="gone"
android:drawableLeft="@android:drawable/ic_menu_close_clear_cancel"
/>
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>
<ImageView
<View
android:id="@+id/divider2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_height="2dp"
android:layout_above="@id/bottom_bar"
android:scaleType="fitXY"
android:tint="@color/blue_highlight"
android:src="@android:drawable/divider_horizontal_dark" />
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/group_header" />
android:layout_below="@id/top"
android:paddingRight="8dp"
android:paddingLeft="8dp" />
</RelativeLayout>

View File

@ -20,14 +20,9 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="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"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/group_header"/>
android:layout_height="wrap_content"/>
<TextView
android:layout_width="fill_parent"
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:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/icon_background"
android:background="@android:color/background_light"
android:verticalSpacing="5dp"
android:horizontalSpacing="5dp"
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"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<keepass2android.view.GroupHeaderView
android:id="@+id/group_header"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<LinearLayout
android:id="@+id/top"
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="horizontal" />
<LinearLayout
android:id="@+id/bottom_bar"
android:layout_alignParentBottom="true"
android:layout_width="fill_parent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="2dp"
style="@style/GroupAndEntryHeader">
<Button
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"
android:layout_width="0px"
android:layout_weight="1"
style="?android:attr/actionButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="@string/select_other_entry"
/>
<Button
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"
android:layout_width="0px"
android:layout_weight="1"
style="?android:attr/actionButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/select_other_entry"
android:layout_alignParentBottom="true"
android:text="@string/add_url_entry"
/>
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>
<ImageView
<View
android:id="@+id/divider2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_height="2dp"
android:layout_above="@id/bottom_bar"
android:scaleType="fitXY"
android:tint="@color/blue_highlight"
android:src="@android:drawable/divider_horizontal_dark" />
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/group_header" />
android:layout_below="@id/top"
android:paddingRight="8dp"
android:paddingLeft="8dp" />
</RelativeLayout>

View File

@ -2,50 +2,71 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<keepass2android.view.GroupHeaderView
android:id="@+id/group_header"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<LinearLayout
android:id="@+id/top"
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="horizontal" />
<LinearLayout
android:id="@+id/bottom_bar"
android:layout_alignParentBottom="true"
android:layout_width="fill_parent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="2dp"
style="@style/GroupAndEntryHeader">
<Button
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"
android:layout_width="0px"
android:layout_weight="1"
style="?android:attr/actionButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="@string/select_other_entry" />
<Button
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"
android:layout_width="0px"
android:layout_weight="1"
style="?android:attr/actionButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/select_other_entry"
android:layout_alignParentBottom="true"
android:text="@string/add_url_entry" />
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>
<ImageView
<View
android:id="@+id/divider2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_height="2dp"
android:layout_above="@id/bottom_bar"
android:scaleType="fitXY"
android:tint="@color/blue_highlight"
android:src="@android:drawable/divider_horizontal_dark" />
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/group_header" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@android:id/list"
android:text="@string/no_results" />
android:layout_below="@id/no_results"
android:paddingRight="8dp"
android:paddingLeft="8dp" />
</RelativeLayout>

View File

@ -14,6 +14,7 @@
style="@style/TextAppearance_Help"
android:textColor="@color/light_gray"
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/>.
-->
<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"
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,6 +1,5 @@
<?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
@ -17,23 +16,22 @@
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_cancel_edit"
android:title="@string/entry_cancel"
/>
<item android:id="@+id/menu_donate"
android:icon="@android:drawable/ic_menu_share"
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

@ -16,16 +16,20 @@
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:icon="@android:drawable/ic_menu_share"
android:title="@string/menu_donate"
<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:icon="@android:drawable/ic_menu_preferences"
android:title="@string/menu_app_settings"
android:icon="@android:drawable/ic_menu_preferences"
android:showAsAction="ifRoom"
/>
<item android:id="@+id/menu_about"
android:icon="@android:drawable/ic_menu_help"
android:title="@string/menu_about"
<item android:id="@+id/menu_donate"
android:title="@string/menu_donate"
android:showAsAction="ifRoom"
/>
</menu>

View File

@ -16,42 +16,54 @@
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:icon="@android:drawable/ic_menu_share"
android:title="@string/menu_donate"
<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_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_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:icon="@android:drawable/ic_menu_manage"
<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"
<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

@ -16,16 +16,19 @@
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_app_settings"
android:icon="@android:drawable/ic_menu_preferences"
android:title="@string/menu_app_settings"
<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="@drawable/collections_collection"
android:icon="?attr/OpenFileDrawable"
android:title="@string/menu_change_db"
android:showAsAction="ifRoom"
/>
<item android:id="@+id/menu_about"
android:icon="@android:drawable/ic_menu_help"
android:title="@string/menu_about"
<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

@ -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>
<color name="blue_highlight">#0000dd</color>
<color name="group">#ffffff</color>
<color name="icon_background">#555555</color>
<color name="group">#333333</color>
<color name="icon_background">#00555555</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="emphasis">#31b6e7</color>
<color name="emphasis2">#4f7a8a</color>
</resources>

View File

@ -409,8 +409,17 @@
<string name="plugin_packagename">Package name:</string>
<string name="plugin_description">Description (not verified):</string>
<string name="plugin_author">Author (not verified):</string>
<string name="plugin_enabled">Enabled</string>
<string name="plugins_text">Click plug-in to enable/disable</string>
<string name="plugin_enabled">enabled</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>

View File

@ -19,24 +19,19 @@
-->
<resources>
<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 name="NoTitleBar"></style>
<style name="Dialog" parent="android:Theme.Dialog"></style>
<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>
</style>
<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>
</style>
<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>
</style>
<style name="ElementTextSmall">
@ -76,49 +71,141 @@
<item name="@android:background">@android:color/transparent</item>
</style>
<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 name="MinusButton">
<item name="android:src">@drawable/ic_menu_remove_field_holo_light</item>
</style>
<style name="EntryFieldHeader">
<item name="android:drawableBottom">@drawable/section_header</item>
<item name="android:drawablePadding">1dp</item>
<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">@color/emphasis</item>
<item name="android:textSize">14sp</item>
<item name="android:textColor">?android:attr/textColorPrimary</item>
<item name="android:textSize">18sp</item>
<item name="android:textStyle">bold</item>
<item name="@android:background">@android:color/transparent</item>
</style>
<style name="InfoHeader">
<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">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">0dp</item>
<item name="android:paddingLeft">4dp</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:textStyle">bold</item>
<item name="@android:background">@android:color/transparent</item>
</style>
<style name="EditEntryButton">
<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="ExtraFieldHeader">
<item name="android:drawablePadding">1dp</item>
<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">8dp</item>
<item name="android:layout_marginTop">4dp</item>
<item name="android:paddingLeft">4dp</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>
<item name="@android:background">@android:color/transparent</item>
</style>
<style name="PaddedContainer">

View File

@ -115,7 +115,6 @@
<Compile Include="pluginhost\PluginDetailsActivity.cs" />
<Compile Include="pluginhost\PluginHost.cs" />
<Compile Include="pluginhost\PluginListActivity.cs" />
<Compile Include="PwEntryOutput.cs" />
<Compile Include="Resources\Resource.designer.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="KeePass.cs" />
@ -144,7 +143,6 @@
<Compile Include="views\PwGroupView.cs" />
<Compile Include="settings\PrefsUtil.cs" />
<Compile Include="views\PwEntryView.cs" />
<Compile Include="views\GroupHeaderView.cs" />
<Compile Include="GroupEditActivity.cs" />
<Compile Include="EntryEditActivity.cs" />
<Compile Include="LockCloseActivity.cs" />
@ -189,6 +187,11 @@
<None Include="filelist.txt">
<Visible>False</Visible>
</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">
<Visible>False</Visible>
</None>
@ -216,6 +219,7 @@
<AndroidResource Include="Resources\layout\sftpcredentials.xml">
<SubType>Designer</SubType>
</AndroidResource>
<AndroidResource Include="Resources\drawable\Thumbs.db" />
<None Include="settings\RoundsPreference %28Kopie%29.cs">
<Visible>False</Visible>
</None>
@ -225,7 +229,6 @@
<None Include="Resources\drawable\new_group_dark.xcf">
<Visible>False</Visible>
</None>
<None Include="Resources\drawable-v11\EntryFieldHeaderBackground.xml" />
<None Include="todos.cs">
<Visible>False</Visible>
</None>
@ -352,7 +355,6 @@
<AndroidResource Include="Resources\layout\group_add_entry.xml" />
<AndroidResource Include="Resources\layout\group_edit.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\icon.xml" />
<AndroidResource Include="Resources\layout\icon_picker.xml" />
@ -376,13 +378,6 @@
<AndroidResource Include="Resources\values\strings.xml">
<SubType>Designer</SubType>
</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-hdpi\ic00.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-hdpi\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\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_remove_field_holo_light.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\drawable\collections_collection.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\ic_menu_remove_field_holo_light.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_extrastring_title.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\anim\anim_enter.xml" />
<AndroidResource Include="Resources\anim\anim_leave.xml" />
@ -659,8 +637,6 @@
<AndroidResource Include="Resources\anim\anim_leave_back.xml" />
<AndroidResource Include="Resources\layout\searchurlresults.xml" />
<AndroidResource Include="Resources\layout\searchurlresults_empty.xml" />
<AndroidResource Include="Resources\layout-v14\searchurlresults.xml" />
<AndroidResource Include="Resources\layout-v14\searchurlresults_empty.xml" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Novell\Novell.MonoDroid.CSharp.targets" />
<ItemGroup>
@ -738,9 +714,6 @@
<ItemGroup>
<AndroidResource Include="Resources\drawable\ic_unlocked_gray.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable-v11\ic_unlocked_gray.png" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable-mdpi\ic_launcher_red.png" />
</ItemGroup>
@ -759,15 +732,6 @@
<ItemGroup>
<AndroidResource Include="Resources\values\dimens.xml" />
</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>
<AndroidResource Include="Resources\drawable\transparent.png" />
</ItemGroup>
@ -786,15 +750,6 @@
<ItemGroup>
<AndroidResource Include="Resources\drawable\donate_cake.png" />
</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>
<AndroidResource Include="Resources\layout\filestorage_selection.xml" />
</ItemGroup>
@ -869,9 +824,6 @@
<Visible>False</Visible>
</XamarinComponentReference>
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\layout-v14\text_with_help.xml" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\drawable\ic_storage_skydrive.png" />
</ItemGroup>
@ -923,16 +875,6 @@
<ItemGroup>
<AndroidResource Include="Resources\drawable\location_web_site_holodark.png" />
</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>
<AndroidResource Include="Resources\values\attrs.xml" />
</ItemGroup>
@ -951,18 +893,6 @@
<ItemGroup>
<AndroidResource Include="Resources\drawable\ic_launcher_gray_bday.png" />
</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>
<TransformFile Include="Properties\AndroidManifest.xml" />
</ItemGroup>
@ -970,14 +900,60 @@
<AndroidResource Include="Resources\drawable\collections_new_label_holodark.png" />
</ItemGroup>
<ItemGroup>
<AndroidAsset Include="Resources\layout-v14\plugin_details.xml" />
<AndroidResource Include="Resources\drawable-xhdpi\ic_launcher_gray.png" />
</ItemGroup>
<ItemGroup>
<AndroidAsset Include="Resources\layout-v14\plugin_list.xml">
<SubType>AndroidResource</SubType>
</AndroidAsset>
<AndroidResource Include="Resources\drawable-xhdpi\ic_launcher_gray_bday.png" />
</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>
</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)
entryId = new PwUuid(MemUtil.HexStringToByteArray(uuidBytes));
PwEntry entry;
PwEntryOutput entry;
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)
{
@ -190,7 +199,7 @@ namespace keepass2android
return PendingIntent.GetBroadcast(this, requestCode, intent, PendingIntentFlags.CancelCurrent);
}
public void DisplayAccessNotifications(PwEntry entry, bool closeAfterCreate)
public void DisplayAccessNotifications(PwEntryOutput entry, bool closeAfterCreate)
{
// Notification Manager
_notificationManager = (NotificationManager)GetSystemService(NotificationService);
@ -201,13 +210,13 @@ namespace keepass2android
_numElementsToWaitFor = 0;
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);
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
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
Notification username = GetNotification(Intents.CopyUsername, Resource.String.copy_username, Resource.Drawable.notify, entryName);
@ -278,7 +287,7 @@ namespace keepass2android
RegisterReceiver(_notificationDeletedBroadcastReceiver, deletefilter);
}
bool MakeAccessibleForKeyboard(PwEntry entry)
bool MakeAccessibleForKeyboard(PwEntryOutput entry)
{
#if EXCLUDE_KEYBOARD
return false;
@ -302,7 +311,7 @@ namespace keepass2android
int i=0;
foreach (string key in keys)
{
String value = GetStringAndReplacePlaceholders(entry, key);
String value = entry.OutputStrings.ReadSafe(key);
if (value.Length > 0)
{
@ -312,12 +321,10 @@ namespace keepass2android
i++;
}
//add additional fields:
foreach (var pair in entry.Strings)
foreach (var pair in entry.OutputStrings)
{
String key = pair.Key;
var value = GetStringAndReplacePlaceholders(entry, key);
var key = pair.Key;
var value = pair.Value.ReadString();
if (!PwDefs.IsStandardField(key)) {
kbdataBuilder.AddString(pair.Key, pair.Key, value);
@ -327,7 +334,7 @@ namespace keepass2android
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();
return hasData;
@ -456,9 +463,9 @@ namespace keepass2android
class CopyToClipboardBroadcastReceiver: BroadcastReceiver
{
readonly CopyToClipboardService _service;
readonly PwEntry _entry;
readonly PwEntryOutput _entry;
public CopyToClipboardBroadcastReceiver(PwEntry entry, CopyToClipboardService service)
public CopyToClipboardBroadcastReceiver(PwEntryOutput entry, CopyToClipboardService service)
{
_entry = entry;
_service = service;
@ -471,14 +478,14 @@ namespace keepass2android
if (action.Equals(Intents.CopyUsername))
{
String username = GetStringAndReplacePlaceholders(_entry, PwDefs.UserNameField);
String username = _entry.OutputStrings.ReadSafe(PwDefs.UserNameField);
if (username.Length > 0)
{
_service.TimeoutCopyToClipboard(username);
}
} else if (action.Equals(Intents.CopyPassword))
{
String password = GetStringAndReplacePlaceholders(_entry, PwDefs.PasswordField);
String password = _entry.OutputStrings.ReadSafe(PwDefs.PasswordField);
if (password.Length > 0)
{
_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);
}
public TextWithHelp(Context context, string text, string helpText) :
base(context, null)
{
Initialize(text, helpText);
}
public TextWithHelp(Context context, IAttributeSet attrs, int defStyle) :
base(context, attrs, defStyle)
{
@ -31,19 +38,26 @@ namespace keepass2android.views
}
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);
inflater.Inflate(Resource.Layout.text_with_help, this);
TypedArray a = Context.ObtainStyledAttributes(
attrs,
Resource.Styleable.TextWithHelp);
_kp2AShortHelpView = ((Kp2aShortHelpView)FindViewById(Resource.Id.help));
_kp2AShortHelpView.HelpText = a.GetString(Resource.Styleable.TextWithHelp_help_text);
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));
_kp2AShortHelpView.HelpText = helpText;
((TextView)FindViewById(Resource.Id.text)).Text = text;
}
public string HelpText