* Enabled RecycleBin for Groups and Entries

* Added (more or less empty) resource files for more languages
This commit is contained in:
PhilippC 2013-03-06 20:44:02 +01:00
parent 9837ee4ad4
commit fde771f73e
25 changed files with 950 additions and 304 deletions

View File

@ -35,7 +35,7 @@ namespace keepass2android
private Handler mHandler; private Handler mHandler;
private RunnableOnFinish mTask; private RunnableOnFinish mTask;
private ProgressDialog mPd; private ProgressDialog mPd;
public ProgressTask(Context ctx, RunnableOnFinish task, int messageId) { public ProgressTask(Context ctx, RunnableOnFinish task, int messageId) {
mCtx = ctx; mCtx = ctx;
mTask = task; mTask = task;

View File

@ -1000,20 +1000,29 @@ namespace keepass2android
// aapt resource value: 0x7f050020 // aapt resource value: 0x7f050020
public const int AboutText = 2131034144; public const int AboutText = 2131034144;
// aapt resource value: 0x7f0500e6 // aapt resource value: 0x7f0500ee
public const int AskOverwriteBinary = 2131034342; public const int AskDeletePermanentlyEntry = 2131034350;
// aapt resource value: 0x7f0500e9 // aapt resource value: 0x7f0500ef
public const int AskOverwriteBinary_no = 2131034345; public const int AskDeletePermanentlyGroup = 2131034351;
// aapt resource value: 0x7f0500e7 // aapt resource value: 0x7f0500f0
public const int AskOverwriteBinary_title = 2131034343; public const int AskDeletePermanently_title = 2131034352;
// aapt resource value: 0x7f0500e8 // aapt resource value: 0x7f0500e8
public const int AskOverwriteBinary_yes = 2131034344; public const int AskOverwriteBinary = 2131034344;
// aapt resource value: 0x7f0500eb
public const int AskOverwriteBinary_no = 2131034347;
// aapt resource value: 0x7f0500e9
public const int AskOverwriteBinary_title = 2131034345;
// aapt resource value: 0x7f0500ea // aapt resource value: 0x7f0500ea
public const int AttachFailed = 2131034346; public const int AskOverwriteBinary_yes = 2131034346;
// aapt resource value: 0x7f0500ec
public const int AttachFailed = 2131034348;
// aapt resource value: 0x7f050017 // aapt resource value: 0x7f050017
public const int BinaryDirectory_default = 2131034135; public const int BinaryDirectory_default = 2131034135;
@ -1021,11 +1030,11 @@ namespace keepass2android
// aapt resource value: 0x7f050016 // aapt resource value: 0x7f050016
public const int BinaryDirectory_key = 2131034134; public const int BinaryDirectory_key = 2131034134;
// aapt resource value: 0x7f0500d8 // aapt resource value: 0x7f0500da
public const int BinaryDirectory_summary = 2131034328; public const int BinaryDirectory_summary = 2131034330;
// aapt resource value: 0x7f0500d7 // aapt resource value: 0x7f0500d9
public const int BinaryDirectory_title = 2131034327; public const int BinaryDirectory_title = 2131034329;
// aapt resource value: 0x7f050034 // aapt resource value: 0x7f050034
public const int ClearClipboard = 2131034164; public const int ClearClipboard = 2131034164;
@ -1045,11 +1054,11 @@ namespace keepass2android
// aapt resource value: 0x7f050018 // aapt resource value: 0x7f050018
public const int QuickUnlockDefaultEnabled_key = 2131034136; public const int QuickUnlockDefaultEnabled_key = 2131034136;
// aapt resource value: 0x7f0500d3 // aapt resource value: 0x7f0500d5
public const int QuickUnlockDefaultEnabled_summary = 2131034323; public const int QuickUnlockDefaultEnabled_summary = 2131034325;
// aapt resource value: 0x7f0500d2 // aapt resource value: 0x7f0500d4
public const int QuickUnlockDefaultEnabled_title = 2131034322; public const int QuickUnlockDefaultEnabled_title = 2131034324;
// aapt resource value: 0x7f05001a // aapt resource value: 0x7f05001a
public const int QuickUnlockLength_default = 2131034138; public const int QuickUnlockLength_default = 2131034138;
@ -1057,50 +1066,50 @@ namespace keepass2android
// aapt resource value: 0x7f050019 // aapt resource value: 0x7f050019
public const int QuickUnlockLength_key = 2131034137; public const int QuickUnlockLength_key = 2131034137;
// aapt resource value: 0x7f0500d5 // aapt resource value: 0x7f0500d7
public const int QuickUnlockLength_summary = 2131034325; public const int QuickUnlockLength_summary = 2131034327;
// aapt resource value: 0x7f0500d4
public const int QuickUnlockLength_title = 2131034324;
// aapt resource value: 0x7f0500d0
public const int QuickUnlock_button = 2131034320;
// aapt resource value: 0x7f0500d6 // aapt resource value: 0x7f0500d6
public const int QuickUnlock_fail = 2131034326; public const int QuickUnlockLength_title = 2131034326;
// aapt resource value: 0x7f0500cf // aapt resource value: 0x7f0500d2
public const int QuickUnlock_label = 2131034319; public const int QuickUnlock_button = 2131034322;
// aapt resource value: 0x7f0500d8
public const int QuickUnlock_fail = 2131034328;
// aapt resource value: 0x7f0500d1 // aapt resource value: 0x7f0500d1
public const int QuickUnlock_lockButton = 2131034321; public const int QuickUnlock_label = 2131034321;
// aapt resource value: 0x7f0500eb // aapt resource value: 0x7f0500d3
public const int RecycleBin = 2131034347; public const int QuickUnlock_lockButton = 2131034323;
// aapt resource value: 0x7f0500da // aapt resource value: 0x7f0500ed
public const int SaveAttachment_Failed = 2131034330; public const int RecycleBin = 2131034349;
// aapt resource value: 0x7f0500d9 // aapt resource value: 0x7f0500dc
public const int SaveAttachment_doneMessage = 2131034329; public const int SaveAttachment_Failed = 2131034332;
// aapt resource value: 0x7f0500db
public const int SaveAttachment_doneMessage = 2131034331;
// aapt resource value: 0x7f050014 // aapt resource value: 0x7f050014
public const int TanExpiresOnUse_key = 2131034132; public const int TanExpiresOnUse_key = 2131034132;
// aapt resource value: 0x7f0500c3 // aapt resource value: 0x7f0500c5
public const int TanExpiresOnUse_summary = 2131034307; public const int TanExpiresOnUse_summary = 2131034309;
// aapt resource value: 0x7f0500c2 // aapt resource value: 0x7f0500c4
public const int TanExpiresOnUse_title = 2131034306; public const int TanExpiresOnUse_title = 2131034308;
// aapt resource value: 0x7f05001b // aapt resource value: 0x7f05001b
public const int UseFileTransactions_key = 2131034139; public const int UseFileTransactions_key = 2131034139;
// aapt resource value: 0x7f0500e5 // aapt resource value: 0x7f0500e7
public const int UseFileTransactions_summary = 2131034341; public const int UseFileTransactions_summary = 2131034343;
// aapt resource value: 0x7f0500e4 // aapt resource value: 0x7f0500e6
public const int UseFileTransactions_title = 2131034340; public const int UseFileTransactions_title = 2131034342;
// aapt resource value: 0x7f05001e // aapt resource value: 0x7f05001e
public const int about_feedback = 2131034142; public const int about_feedback = 2131034142;
@ -1111,14 +1120,14 @@ namespace keepass2android
// aapt resource value: 0x7f050022 // aapt resource value: 0x7f050022
public const int accept = 2131034146; public const int accept = 2131034146;
// aapt resource value: 0x7f0500e0 // aapt resource value: 0x7f0500e2
public const int add_binary = 2131034336; public const int add_binary = 2131034338;
// aapt resource value: 0x7f050023 // aapt resource value: 0x7f050023
public const int add_entry = 2131034147; public const int add_entry = 2131034147;
// aapt resource value: 0x7f0500e1 // aapt resource value: 0x7f0500e3
public const int add_extra_string = 2131034337; public const int add_extra_string = 2131034339;
// aapt resource value: 0x7f050024 // aapt resource value: 0x7f050024
public const int add_group = 2131034148; public const int add_group = 2131034148;
@ -1171,8 +1180,8 @@ namespace keepass2android
// aapt resource value: 0x7f050033 // aapt resource value: 0x7f050033
public const int cancel = 2131034163; public const int cancel = 2131034163;
// aapt resource value: 0x7f0500c7 // aapt resource value: 0x7f0500c9
public const int caseSensitive = 2131034311; public const int caseSensitive = 2131034313;
// aapt resource value: 0x7f050035 // aapt resource value: 0x7f050035
public const int clipboard_timeout = 2131034165; public const int clipboard_timeout = 2131034165;
@ -1195,8 +1204,8 @@ namespace keepass2android
// aapt resource value: 0x7f050039 // aapt resource value: 0x7f050039
public const int creating_db_key = 2131034169; public const int creating_db_key = 2131034169;
// aapt resource value: 0x7f0500e3 // aapt resource value: 0x7f0500e5
public const int credentials_dialog_title = 2131034339; public const int credentials_dialog_title = 2131034341;
// aapt resource value: 0x7f05003a // aapt resource value: 0x7f05003a
public const int current_group = 2131034170; public const int current_group = 2131034170;
@ -1207,8 +1216,8 @@ namespace keepass2android
// aapt resource value: 0x7f05003c // aapt resource value: 0x7f05003c
public const int database = 2131034172; public const int database = 2131034172;
// aapt resource value: 0x7f0500e2 // aapt resource value: 0x7f0500e4
public const int database_loaded_quickunlock_enabled = 2131034338; public const int database_loaded_quickunlock_enabled = 2131034340;
// aapt resource value: 0x7f05000c // aapt resource value: 0x7f05000c
public const int db_key = 2131034124; public const int db_key = 2131034124;
@ -1225,8 +1234,8 @@ namespace keepass2android
// aapt resource value: 0x7f050001 // aapt resource value: 0x7f050001
public const int default_file_path = 2131034113; public const int default_file_path = 2131034113;
// aapt resource value: 0x7f0500af // aapt resource value: 0x7f0500b1
public const int default_username = 2131034287; public const int default_username = 2131034289;
// aapt resource value: 0x7f050015 // aapt resource value: 0x7f050015
public const int default_username_key = 2131034133; public const int default_username_key = 2131034133;
@ -1243,17 +1252,17 @@ namespace keepass2android
// aapt resource value: 0x7f050042 // aapt resource value: 0x7f050042
public const int ellipsis = 2131034178; public const int ellipsis = 2131034178;
// aapt resource value: 0x7f0500ce // aapt resource value: 0x7f0500d0
public const int enable_quickunlock = 2131034318; public const int enable_quickunlock = 2131034320;
// aapt resource value: 0x7f050043 // aapt resource value: 0x7f050043
public const int enter_filename = 2131034179; public const int enter_filename = 2131034179;
// aapt resource value: 0x7f0500cd // aapt resource value: 0x7f0500cf
public const int enter_filename_details_create_import = 2131034317; public const int enter_filename_details_create_import = 2131034319;
// aapt resource value: 0x7f0500cc // aapt resource value: 0x7f0500ce
public const int enter_filename_details_url = 2131034316; public const int enter_filename_details_url = 2131034318;
// aapt resource value: 0x7f050044 // aapt resource value: 0x7f050044
public const int entry_accessed = 2131034180; public const int entry_accessed = 2131034180;
@ -1339,8 +1348,8 @@ namespace keepass2android
// aapt resource value: 0x7f05005f // aapt resource value: 0x7f05005f
public const int error_invalid_db = 2131034207; public const int error_invalid_db = 2131034207;
// aapt resource value: 0x7f0500db // aapt resource value: 0x7f0500dd
public const int error_invalid_expiry_date = 2131034331; public const int error_invalid_expiry_date = 2131034333;
// aapt resource value: 0x7f050060 // aapt resource value: 0x7f050060
public const int error_invalid_path = 2131034208; public const int error_invalid_path = 2131034208;
@ -1366,8 +1375,8 @@ namespace keepass2android
// aapt resource value: 0x7f050067 // aapt resource value: 0x7f050067
public const int error_rounds_too_large = 2131034215; public const int error_rounds_too_large = 2131034215;
// aapt resource value: 0x7f0500dc // aapt resource value: 0x7f0500de
public const int error_string_key = 2131034332; public const int error_string_key = 2131034334;
// aapt resource value: 0x7f050068 // aapt resource value: 0x7f050068
public const int error_title_required = 2131034216; public const int error_title_required = 2131034216;
@ -1375,14 +1384,14 @@ namespace keepass2android
// aapt resource value: 0x7f050069 // aapt resource value: 0x7f050069
public const int error_wrong_length = 2131034217; public const int error_wrong_length = 2131034217;
// aapt resource value: 0x7f0500c5 // aapt resource value: 0x7f0500c7
public const int excludeExpiredEntries = 2131034309; public const int excludeExpiredEntries = 2131034311;
// aapt resource value: 0x7f0500dd // aapt resource value: 0x7f0500df
public const int field_name = 2131034333; public const int field_name = 2131034335;
// aapt resource value: 0x7f0500de // aapt resource value: 0x7f0500e0
public const int field_value = 2131034334; public const int field_value = 2131034336;
// aapt resource value: 0x7f05006b // aapt resource value: 0x7f05006b
public const int file_browser = 2131034219; public const int file_browser = 2131034219;
@ -1462,8 +1471,8 @@ namespace keepass2android
// aapt resource value: 0x7f05000e // aapt resource value: 0x7f05000e
public const int keyfile_key = 2131034126; public const int keyfile_key = 2131034126;
// aapt resource value: 0x7f0500c4 // aapt resource value: 0x7f0500c6
public const int kp2a_findUrl = 2131034308; public const int kp2a_findUrl = 2131034310;
// aapt resource value: 0x7f050082 // aapt resource value: 0x7f050082
public const int length = 2131034242; public const int length = 2131034242;
@ -1555,14 +1564,17 @@ namespace keepass2android
// aapt resource value: 0x7f05009c // aapt resource value: 0x7f05009c
public const int never = 2131034268; public const int never = 2131034268;
// aapt resource value: 0x7f05009d
public const int no_keys = 2131034269;
// aapt resource value: 0x7f05009e // aapt resource value: 0x7f05009e
public const int no_results = 2131034270; public const int no = 2131034270;
// aapt resource value: 0x7f05009f // aapt resource value: 0x7f05009f
public const int no_url_handler = 2131034271; public const int no_keys = 2131034271;
// aapt resource value: 0x7f0500a0
public const int no_results = 2131034272;
// aapt resource value: 0x7f0500a1
public const int no_url_handler = 2131034273;
// aapt resource value: 0x7f050006 // aapt resource value: 0x7f050006
public const int oi_filemanager_market = 2131034118; public const int oi_filemanager_market = 2131034118;
@ -1573,77 +1585,77 @@ namespace keepass2android
// aapt resource value: 0x7f050010 // aapt resource value: 0x7f050010
public const int omitbackup_key = 2131034128; public const int omitbackup_key = 2131034128;
// aapt resource value: 0x7f0500a2 // aapt resource value: 0x7f0500a4
public const int omitbackup_summary = 2131034274; public const int omitbackup_summary = 2131034276;
// aapt resource value: 0x7f0500a1
public const int omitbackup_title = 2131034273;
// aapt resource value: 0x7f0500a0
public const int open_recent = 2131034272;
// aapt resource value: 0x7f0500a3 // aapt resource value: 0x7f0500a3
public const int pass_filename = 2131034275; public const int omitbackup_title = 2131034275;
// aapt resource value: 0x7f0500a4 // aapt resource value: 0x7f0500a2
public const int password_title = 2131034276; public const int open_recent = 2131034274;
// aapt resource value: 0x7f0500a5 // aapt resource value: 0x7f0500a5
public const int progress_create = 2131034277; public const int pass_filename = 2131034277;
// aapt resource value: 0x7f0500a6 // aapt resource value: 0x7f0500a6
public const int progress_title = 2131034278; public const int password_title = 2131034278;
// aapt resource value: 0x7f0500df
public const int protection = 2131034335;
// aapt resource value: 0x7f0500c1
public const int regular_expression = 2131034305;
// aapt resource value: 0x7f0500a7 // aapt resource value: 0x7f0500a7
public const int remember_keyfile_summary = 2131034279; public const int progress_create = 2131034279;
// aapt resource value: 0x7f0500a8 // aapt resource value: 0x7f0500a8
public const int remember_keyfile_title = 2131034280; public const int progress_title = 2131034280;
// aapt resource value: 0x7f0500e1
public const int protection = 2131034337;
// aapt resource value: 0x7f0500c3
public const int regular_expression = 2131034307;
// aapt resource value: 0x7f0500a9 // aapt resource value: 0x7f0500a9
public const int remove_from_filelist = 2131034281; public const int remember_keyfile_summary = 2131034281;
// aapt resource value: 0x7f0500aa // aapt resource value: 0x7f0500aa
public const int rijndael = 2131034282; public const int remember_keyfile_title = 2131034282;
// aapt resource value: 0x7f0500ab // aapt resource value: 0x7f0500ab
public const int root = 2131034283; public const int remove_from_filelist = 2131034283;
// aapt resource value: 0x7f0500ac // aapt resource value: 0x7f0500ac
public const int rounds = 2131034284; public const int rijndael = 2131034284;
// aapt resource value: 0x7f0500ad // aapt resource value: 0x7f0500ad
public const int rounds_explaination = 2131034285; public const int root = 2131034285;
// aapt resource value: 0x7f0500ae // aapt resource value: 0x7f0500ae
public const int rounds_hint = 2131034286; public const int rounds = 2131034286;
// aapt resource value: 0x7f0500af
public const int rounds_explaination = 2131034287;
// aapt resource value: 0x7f0500b0
public const int rounds_hint = 2131034288;
// aapt resource value: 0x7f05000d // aapt resource value: 0x7f05000d
public const int rounds_key = 2131034125; public const int rounds_key = 2131034125;
// aapt resource value: 0x7f0500b0 // aapt resource value: 0x7f0500b2
public const int saving_database = 2131034288; public const int saving_database = 2131034290;
// aapt resource value: 0x7f0500b7
public const int search_hint = 2131034295;
// aapt resource value: 0x7f0500b9 // aapt resource value: 0x7f0500b9
public const int search_in = 2131034297; public const int search_hint = 2131034297;
// aapt resource value: 0x7f0500b2 // aapt resource value: 0x7f0500bb
public const int search_label = 2131034290; public const int search_in = 2131034299;
// aapt resource value: 0x7f0500c6 // aapt resource value: 0x7f0500b4
public const int search_options = 2131034310; public const int search_label = 2131034292;
// aapt resource value: 0x7f0500b8 // aapt resource value: 0x7f0500c8
public const int search_results = 2131034296; public const int search_options = 2131034312;
// aapt resource value: 0x7f0500ba
public const int search_results = 2131034298;
// aapt resource value: 0x7f050029 // aapt resource value: 0x7f050029
public const int short_app_name = 2131034153; public const int short_app_name = 2131034153;
@ -1651,59 +1663,62 @@ namespace keepass2android
// aapt resource value: 0x7f05002b // aapt resource value: 0x7f05002b
public const int short_app_name_nonet = 2131034155; public const int short_app_name_nonet = 2131034155;
// aapt resource value: 0x7f0500b3
public const int show_password = 2131034291;
// aapt resource value: 0x7f0500b5 // aapt resource value: 0x7f0500b5
public const int sort_db = 2131034293; public const int show_password = 2131034293;
// aapt resource value: 0x7f0500b7
public const int sort_db = 2131034295;
// aapt resource value: 0x7f050012 // aapt resource value: 0x7f050012
public const int sort_key = 2131034130; public const int sort_key = 2131034130;
// aapt resource value: 0x7f0500b4
public const int sort_name = 2131034292;
// aapt resource value: 0x7f0500b1
public const int space = 2131034289;
// aapt resource value: 0x7f0500b6 // aapt resource value: 0x7f0500b6
public const int special = 2131034294; public const int sort_name = 2131034294;
// aapt resource value: 0x7f0500c9 // aapt resource value: 0x7f0500b3
public const int start_create = 2131034313; public const int space = 2131034291;
// aapt resource value: 0x7f0500b8
public const int special = 2131034296;
// aapt resource value: 0x7f0500cb // aapt resource value: 0x7f0500cb
public const int start_create_import = 2131034315; public const int start_create = 2131034315;
// aapt resource value: 0x7f0500c8 // aapt resource value: 0x7f0500cd
public const int start_open_file = 2131034312; public const int start_create_import = 2131034317;
// aapt resource value: 0x7f0500ca // aapt resource value: 0x7f0500ca
public const int start_open_url = 2131034314; public const int start_open_file = 2131034314;
// aapt resource value: 0x7f0500cc
public const int start_open_url = 2131034316;
// aapt resource value: 0x7f050013 // aapt resource value: 0x7f050013
public const int timeout_key = 2131034131; public const int timeout_key = 2131034131;
// aapt resource value: 0x7f0500ba
public const int twofish = 2131034298;
// aapt resource value: 0x7f0500bb
public const int underline = 2131034299;
// aapt resource value: 0x7f0500bc // aapt resource value: 0x7f0500bc
public const int unsupported_db_version = 2131034300; public const int twofish = 2131034300;
// aapt resource value: 0x7f0500bd // aapt resource value: 0x7f0500bd
public const int uppercase = 2131034301; public const int underline = 2131034301;
// aapt resource value: 0x7f0500c0
public const int version_label = 2131034304;
// aapt resource value: 0x7f0500be // aapt resource value: 0x7f0500be
public const int warning_read_only = 2131034302; public const int unsupported_db_version = 2131034302;
// aapt resource value: 0x7f0500bf // aapt resource value: 0x7f0500bf
public const int warning_unmounted = 2131034303; public const int uppercase = 2131034303;
// aapt resource value: 0x7f0500c2
public const int version_label = 2131034306;
// aapt resource value: 0x7f0500c0
public const int warning_read_only = 2131034304;
// aapt resource value: 0x7f0500c1
public const int warning_unmounted = 2131034305;
// aapt resource value: 0x7f05009d
public const int yes = 2131034269;
private String() private String()
{ {

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.net-->
<resources>
<string-array name="clipboard_timeout_options">
<item>30 seconds</item>
<item>1 minute</item>
<item>5 minutes</item>
<item>Never</item>
</string-array>
<string-array name="list_size_options">
<item>Small</item>
<item>Medium</item>
<item>Large</item>
</string-array>
<string-array name="cred_remember_modes">
<item>Do not remember username and password</item>
<item>Remember username only</item>
<item>Remember username and password</item>
</string-array>
</resources>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.net-->
<resources>
<string-array name="clipboard_timeout_options">
<item>30 seconds</item>
<item>1 minute</item>
<item>5 minutes</item>
<item>Never</item>
</string-array>
<string-array name="list_size_options">
<item>Small</item>
<item>Medium</item>
<item>Large</item>
</string-array>
<string-array name="cred_remember_modes">
<item>Do not remember username and password</item>
<item>Remember username only</item>
<item>Remember username and password</item>
</string-array>
</resources>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.net-->
<resources>
<string-array name="clipboard_timeout_options">
<item>30 seconds</item>
<item>1 minute</item>
<item>5 minutes</item>
<item>Never</item>
</string-array>
<string-array name="list_size_options">
<item>Small</item>
<item>Medium</item>
<item>Large</item>
</string-array>
<string-array name="cred_remember_modes">
<item>Do not remember username and password</item>
<item>Remember username only</item>
<item>Remember username and password</item>
</string-array>
</resources>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.net-->
<resources>
<string-array name="clipboard_timeout_options">
<item>30 seconds</item>
<item>1 minute</item>
<item>5 minutes</item>
<item>Never</item>
</string-array>
<string-array name="list_size_options">
<item>Small</item>
<item>Medium</item>
<item>Large</item>
</string-array>
<string-array name="cred_remember_modes">
<item>Do not remember username and password</item>
<item>Remember username only</item>
<item>Remember username and password</item>
</string-array>
</resources>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.net-->
<resources>
<string-array name="clipboard_timeout_options">
<item>30 seconds</item>
<item>1 minute</item>
<item>5 minutes</item>
<item>Never</item>
</string-array>
<string-array name="list_size_options">
<item>Small</item>
<item>Medium</item>
<item>Large</item>
</string-array>
<string-array name="cred_remember_modes">
<item>Do not remember username and password</item>
<item>Remember username only</item>
<item>Remember username and password</item>
</string-array>
</resources>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.net-->
<resources>
<string-array name="clipboard_timeout_options">
<item>30 seconds</item>
<item>1 minute</item>
<item>5 minutes</item>
<item>Never</item>
</string-array>
<string-array name="list_size_options">
<item>Small</item>
<item>Medium</item>
<item>Large</item>
</string-array>
<string-array name="cred_remember_modes">
<item>Do not remember username and password</item>
<item>Remember username only</item>
<item>Remember username and password</item>
</string-array>
</resources>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.net-->
<resources>
<string-array name="clipboard_timeout_options">
<item>30 seconds</item>
<item>1 minute</item>
<item>5 minutes</item>
<item>Never</item>
</string-array>
<string-array name="list_size_options">
<item>Small</item>
<item>Medium</item>
<item>Large</item>
</string-array>
<string-array name="cred_remember_modes">
<item>Do not remember username and password</item>
<item>Remember username only</item>
<item>Remember username and password</item>
</string-array>
</resources>

View File

@ -0,0 +1,159 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.net-->
<resources>
<string name="about_feedback">Tilbakemelding</string>
<string name="about_homepage">Heimeside</string>
<string name="AboutText">Keepass2Android er ei android-utgåve av KeePass passordstyrar.</string>
<string name="accept">Godta</string>
<string name="add_entry">Legg til post</string>
<string name="add_group">Legg til gruppe</string>
<string name="add_group_title">Legg til gruppe</string>
<string name="algorithm">Algoritme</string>
<string name="algorithm_colon">Algoritme</string>
<string name="app_timeout">Programtidsavbrot</string>
<string name="app_timeout_summary">Tid før databasen blir låst når programmet ikkje er i bruk.</string>
<string name="application">Program</string>
<string name="application_settings">Programinnstillingar</string>
<string name="brackets">Parentesar</string>
<string name="browser_intall_text">Du må ha Open Intents filbehandlar for å kunna bla i filer. Klikk nedanfor for å installera han. Grunna nokre småfeil i programmet kan det vera at det ikkje fungerer heilt den første gongen du bruker det.</string>
<string name="building_search_idx">Byggjer søkjeindeksen …</string>
<string name="cancel">Avbryt</string>
<string name="ClearClipboard">Utklippstavla er tømt.</string>
<string name="clipboard_timeout">Tidsavbrot på utklippstavla</string>
<string name="clipboard_timeout_summary">Tid før utklippstavla blir tømt etter at brukarnamnet eller passordet er kopiert.</string>
<string name="copy_username">Kopier brukarnamnet til utklippstavla</string>
<string name="copy_password">Kopier passordet til utklippstavla</string>
<string name="creating_db_key">Lagar databasenøkkelen …</string>
<string name="current_group">Gjeldande gruppe</string>
<string name="current_group_root">Gjeldande gruppe: Rot</string>
<string name="decrypting_db">Dekrypterer databasen …</string>
<string name="decrypting_entry">Dekrypterer oppføringa</string>
<string name="default_checkbox">Standarddatabasen</string>
<string name="digits">Tal</string>
<string name="disclaimer_formal">Keepass2Android kjem med INGEN SOM HELST GARANTI. Dette er eit fritt program. Du er velkomen til å redistribuera det i samsvar med vilkåra til GPL utgåve 2 eller nyare.</string>
<string name="enter_filename">Skriv filnamnet til databasen</string>
<string name="entry_accessed">Brukt</string>
<string name="entry_and_or">Skriv inn passordet og/eller nøkkelfil for å låsa opp databasen</string>
<string name="entry_cancel">Avbryt</string>
<string name="entry_comment">Merknader</string>
<string name="entry_confpassword">Stadfest passordet</string>
<string name="entry_created">Laga</string>
<string name="entry_expires">Går ut</string>
<string name="entry_keyfile">Nøkkelfil (valfri)</string>
<string name="entry_modified">Endra</string>
<string name="entry_password">Passord</string>
<string name="entry_save">Lagra</string>
<string name="entry_title">Namn</string>
<string name="entry_url">Adresse</string>
<string name="entry_user_name">Brukaramn</string>
<string name="error_arc4">Kan ikkje bruka ArcFour dataflytkryptering.</string>
<string name="error_can_not_handle_uri">Keepass2Android kan ikkje bruka denne ressursen.</string>
<string name="error_could_not_create_group">Klarte ikkje å laga gruppa.</string>
<string name="error_could_not_create_parent">Klarte ikkje å laga foreldrekatalogen.</string>
<string name="error_database_exists">Denne fila finst allereie.</string>
<string name="error_database_settings">Klarte ikkje å bestemma databaseinnstillingane.</string>
<string name="error_failed_to_launch_link">Klarte ikkje å lasta lenkja.</string>
<string name="error_filename_required">Treng eit filnamn.</string>
<string name="error_file_not_create">Klarte ikkje å laga fila</string>
<string name="error_invalid_db">Ugyldig database.</string>
<string name="error_invalid_path">Ugyldig stig.</string>
<string name="error_no_name">Treng eit namn.</string>
<string name="error_nopass">Treng eit passord eller ei nøkkelfil.</string>
<string name="error_out_of_memory">Telefonen gjekk tom for minne ved lesinga av databasen din. Databasen er kanskje for stor.</string>
<string name="error_pass_gen_type">Du må velja minst éin passordlagingstype</string>
<string name="error_pass_match">Passorda samsvarer ikkje.</string>
<string name="error_rounds_not_number">Omgangar må vera eit tal.</string>
<string name="error_rounds_too_large">For mange omgangar. Bruker 2147483648.</string>
<string name="error_title_required">Treng ein tittel.</string>
<string name="error_wrong_length">Bruk eit positivt heiltal i lengdfeltet</string>
<string name="FileNotFound">Fann ikkje fila.</string>
<string name="file_browser">Filbehandlar</string>
<string name="generate_password">Lag passord</string>
<string name="group">Gruppe</string>
<string name="hint_comment">merknad</string>
<string name="hint_conf_pass">stadfest passordet</string>
<string name="hint_generated_password">laga passord</string>
<string name="hint_group_name">Gruppenamn</string>
<string name="hint_keyfile">nøkkelfil</string>
<string name="hint_length">lengd</string>
<string name="hint_pass">passord</string>
<string name="hint_login_pass">Passord</string>
<string name="hint_title">namn</string>
<string name="hint_url">adresse</string>
<string name="hint_username">brukarnamn</string>
<string name="install_from_market">Installer frå marknaden</string>
<string name="install_from_website">Installer frå nettet</string>
<string name="InvalidPassword">Ugyldig passord eller nøkkelfil.</string>
<string name="invalid_db_sig">Ukjent databaseformat.</string>
<string name="length">Lengd</string>
<string name="list_size_title">Gruppelistestorleik</string>
<string name="list_size_summary">Tekststorleik i gruppelista</string>
<string name="loading_database">Lastar databasen …</string>
<string name="lowercase">Små bokstavar</string>
<string name="maskpass_title">Masker passord</string>
<string name="maskpass_summary">Gøym passorda (standardval)</string>
<string name="menu_about">Om</string>
<string name="menu_change_key">Endra hovudnøkkelen</string>
<string name="menu_copy_pass">Kopier passordet</string>
<string name="menu_copy_user">Kopier brukaren</string>
<string name="menu_create">Lag</string>
<string name="menu_app_settings">Innstillingar</string>
<string name="menu_db_settings">Databaseinnstillingar</string>
<string name="menu_delete">Slett</string>
<string name="menu_donate">Doner</string>
<string name="menu_edit">Endra</string>
<string name="menu_hide_password">Gøym passordet</string>
<string name="menu_homepage">Gå til heimesida</string>
<string name="menu_lock">Lås databasen</string>
<string name="menu_open">Opna</string>
<string name="menu_rename">Gje nytt namn</string>
<string name="menu_search">Søk</string>
<string name="menu_url">Gå til adressa</string>
<string name="never">Aldri</string>
<string name="no_keys">Ingen oppføringar i databasen eller gruppa.</string>
<string name="no_results">Ingen søkjeresultat</string>
<string name="no_url_handler">Ingen behandlar for denne adressa.</string>
<string name="open_recent">Opna nyleg brukt database (klikk for å opna)</string>
<string name="omitbackup_title">Søk ikkje i kopipostane eller søppelbøtta</string>
<string name="omitbackup_summary">Søkjeresultatet inneheld ikkje oppføringar frå \'Backup\' eller søppelbøtta</string>
<string name="pass_filename">Filnamnet til KeePass-databasen</string>
<string name="password_title">Skriv databasepassordet</string>
<string name="progress_create">Lager ny database …</string>
<string name="progress_title">Arbeider …</string>
<string name="remember_keyfile_summary">Hugsar staden til nøkkelfilene</string>
<string name="remember_keyfile_title">Lagra nøkkelfila</string>
<string name="remove_from_filelist">Ta vekk</string>
<string name="root">Rot</string>
<string name="rounds">Krypteringsomgangar</string>
<string name="rounds_explaination">Fleire krypteringsomgangar gjev tilleggsvern mot rå makt-åtak, men kan òg gjera lasting og lagring mykje tregare.</string>
<string name="rounds_hint">omgangar</string>
<string name="saving_database">Lagrar databasen …</string>
<string name="space">Mellomrom</string>
<string name="search_label">Søk</string>
<string name="show_password">Syn passordet</string>
<string name="sort_name">Sorter etter namn</string>
<string name="sort_db">DB-sortering</string>
<string name="special">Spesial</string>
<string name="underline">Understreking</string>
<string name="unsupported_db_version">Kan ikkje bruka databaseutgåva.</string>
<string name="uppercase">Store bokstavar</string>
<string name="warning_read_only">SD-kortet ditt kan berre lesast. Det kan vera at du ikkje kan lagra endringar i databasen.</string>
<string name="warning_unmounted">SD-kortet er ikkje montert i eininga di. Du kan verken henta eller laga databasen din.</string>
<string name="version_label">Utgåve</string>
<string-array name="clipboard_timeout_options">
<item>30 sekund</item>
<item>1 minutt</item>
<item>5 minutt</item>
<item>Aldri</item>
</string-array>
<string-array name="list_size_options">
<item>Liten</item>
<item>Middels</item>
<item>Stor</item>
</string-array>
<string-array name="cred_remember_modes">
<item>Do not remember username and password</item>
<item>Remember username only</item>
<item>Remember username and password</item>
</string-array>
</resources>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.net-->
<resources>
<string-array name="clipboard_timeout_options">
<item>30 seconds</item>
<item>1 minute</item>
<item>5 minutes</item>
<item>Never</item>
</string-array>
<string-array name="list_size_options">
<item>Small</item>
<item>Medium</item>
<item>Large</item>
</string-array>
<string-array name="cred_remember_modes">
<item>Do not remember username and password</item>
<item>Remember username only</item>
<item>Remember username and password</item>
</string-array>
</resources>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.net-->
<resources>
<string-array name="clipboard_timeout_options">
<item>30 seconds</item>
<item>1 minute</item>
<item>5 minutes</item>
<item>Never</item>
</string-array>
<string-array name="list_size_options">
<item>Small</item>
<item>Medium</item>
<item>Large</item>
</string-array>
<string-array name="cred_remember_modes">
<item>Do not remember username and password</item>
<item>Remember username only</item>
<item>Remember username and password</item>
</string-array>
</resources>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.net-->
<resources>
<string-array name="clipboard_timeout_options">
<item>30 seconds</item>
<item>1 minute</item>
<item>5 minutes</item>
<item>Never</item>
</string-array>
<string-array name="list_size_options">
<item>Small</item>
<item>Medium</item>
<item>Large</item>
</string-array>
<string-array name="cred_remember_modes">
<item>Do not remember username and password</item>
<item>Remember username only</item>
<item>Remember username and password</item>
</string-array>
</resources>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.net-->
<resources>
<string-array name="clipboard_timeout_options">
<item>30 seconds</item>
<item>1 minute</item>
<item>5 minutes</item>
<item>Never</item>
</string-array>
<string-array name="list_size_options">
<item>Small</item>
<item>Medium</item>
<item>Large</item>
</string-array>
<string-array name="cred_remember_modes">
<item>Do not remember username and password</item>
<item>Remember username only</item>
<item>Remember username and password</item>
</string-array>
</resources>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.net-->
<resources>
<string-array name="clipboard_timeout_options">
<item>30 seconds</item>
<item>1 minute</item>
<item>5 minutes</item>
<item>Never</item>
</string-array>
<string-array name="list_size_options">
<item>Small</item>
<item>Medium</item>
<item>Large</item>
</string-array>
<string-array name="cred_remember_modes">
<item>Do not remember username and password</item>
<item>Remember username only</item>
<item>Remember username and password</item>
</string-array>
</resources>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.net-->
<resources>
<string-array name="clipboard_timeout_options">
<item>30 seconds</item>
<item>1 minute</item>
<item>5 minutes</item>
<item>Never</item>
</string-array>
<string-array name="list_size_options">
<item>Small</item>
<item>Medium</item>
<item>Large</item>
</string-array>
<string-array name="cred_remember_modes">
<item>Do not remember username and password</item>
<item>Remember username only</item>
<item>Remember username and password</item>
</string-array>
</resources>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.net-->
<resources>
<string-array name="clipboard_timeout_options">
<item>30 seconds</item>
<item>1 minute</item>
<item>5 minutes</item>
<item>Never</item>
</string-array>
<string-array name="list_size_options">
<item>Small</item>
<item>Medium</item>
<item>Large</item>
</string-array>
<string-array name="cred_remember_modes">
<item>Do not remember username and password</item>
<item>Remember username only</item>
<item>Remember username and password</item>
</string-array>
</resources>

View File

@ -128,6 +128,8 @@
<string name="menu_url">Go to URL</string> <string name="menu_url">Go to URL</string>
<string name="minus">Minus</string> <string name="minus">Minus</string>
<string name="never">Never</string> <string name="never">Never</string>
<string name="yes">Yes</string>
<string name="no">No</string>
<string name="no_keys">No entries in the database or group.</string> <string name="no_keys">No entries in the database or group.</string>
<string name="no_results">No search results</string> <string name="no_results">No search results</string>
<string name="no_url_handler">No handler for this url.</string> <string name="no_url_handler">No handler for this url.</string>
@ -207,6 +209,9 @@
<string name="AskOverwriteBinary_no">Rename</string> <string name="AskOverwriteBinary_no">Rename</string>
<string name="AttachFailed">Failed to add file attachment.</string> <string name="AttachFailed">Failed to add file attachment.</string>
<string name="RecycleBin">Recycle Bin</string> <string name="RecycleBin">Recycle Bin</string>
<string name="AskDeletePermanentlyEntry">Do you want to delete this entry permanently? Press No to recycle.</string>
<string name="AskDeletePermanentlyGroup">Do you want to delete this group permanently? Press No to recycle.</string>
<string name="AskDeletePermanently_title">Delete permanently?</string>
<string-array name="clipboard_timeout_options"> <string-array name="clipboard_timeout_options">
<item>30 seconds</item> <item>30 seconds</item>
<item>1 minute</item> <item>1 minute</item>

View File

@ -40,6 +40,11 @@ namespace keepass2android
this.actionToPerform = actionToPerform; this.actionToPerform = actionToPerform;
} }
public ActionOnFinish(ActionToPerformOnFinsh actionToPerform, OnFinish finish) : base(finish)
{
this.actionToPerform = actionToPerform;
}
public ActionOnFinish(ActionToPerformOnFinsh actionToPerform, Handler handler) : base(handler) public ActionOnFinish(ActionToPerformOnFinsh actionToPerform, Handler handler) : base(handler)
{ {
this.actionToPerform = actionToPerform; this.actionToPerform = actionToPerform;

View File

@ -30,12 +30,10 @@ using KeePassLib;
namespace keepass2android namespace keepass2android
{ {
public class DeleteEntry : RunnableOnFinish { public class DeleteEntry : DeleteRunnable {
private Database mDb;
private PwEntry mEntry; private PwEntry mEntry;
private Context mCtx;
public DeleteEntry(Context ctx, Database db, PwEntry entry, OnFinish finish):base(finish) { public DeleteEntry(Context ctx, Database db, PwEntry entry, OnFinish finish):base(finish) {
mCtx = ctx; mCtx = ctx;
mDb = db; mDb = db;
@ -43,12 +41,27 @@ namespace keepass2android
} }
public override bool CanRecycle
{
get
{
return CanRecycleGroup(mEntry.ParentGroup);
}
}
protected override int QuestionsResourceId
{
get
{
return Resource.String.AskDeletePermanentlyEntry;
}
}
public override void run() { public override void run() {
PwDatabase pd = mDb.pm; PwDatabase pd = mDb.pm;
PwGroup pgRecycleBin = pd.RootGroup.FindGroup(pd.RecycleBinUuid, true); PwGroup pgRecycleBin = pd.RootGroup.FindGroup(pd.RecycleBinUuid, true);
bool bShiftPressed = false;
bool bUpdateGroupList = false; bool bUpdateGroupList = false;
DateTime dtNow = DateTime.Now; DateTime dtNow = DateTime.Now;
@ -58,38 +71,51 @@ namespace keepass2android
{ {
pgParent.Entries.Remove(pe); pgParent.Entries.Remove(pe);
bool bPermanent = true;
if(pd.RecycleBinEnabled == false) bPermanent = true;
else if(bShiftPressed) bPermanent = true;
else if(pgRecycleBin == null) { } // Recycle
else if(pgParent == pgRecycleBin) bPermanent = true;
else if(pgParent.IsContainedIn(pgRecycleBin)) bPermanent = true;
if(bPermanent)
{
/* TODO KP Desktop
if(!MessageService.AskYesNo(bSingle ? KPRes.DeleteEntriesQuestionSingle :
KPRes.DeleteEntriesQuestion, bSingle ? KPRes.DeleteEntriesTitleSingle :
KPRes.DeleteEntriesTitle))
return;
*/
if ((DeletePermanently) || (!CanRecycle))
{
PwDeletedObject pdo = new PwDeletedObject(pe.Uuid, dtNow); PwDeletedObject pdo = new PwDeletedObject(pe.Uuid, dtNow);
pd.DeletedObjects.Add(pdo); pd.DeletedObjects.Add(pdo);
mFinish = new ActionOnFinish( (success, message) =>
{
if ( success ) {
// Mark parent dirty
if ( pgParent != null ) {
mDb.dirty.Add(pgParent);
}
} else {
// Let's not bother recovering from a failure to save a deleted entry. It is too much work.
App.setShutdown();
}
});
} }
else // Recycle else // Recycle
{ {
DeleteGroup.EnsureRecycleBin(ref pgRecycleBin, pd, ref bUpdateGroupList, mCtx); EnsureRecycleBin(ref pgRecycleBin, ref bUpdateGroupList);
pgRecycleBin.AddEntry(pe, true, true); pgRecycleBin.AddEntry(pe, true, true);
pe.Touch(false); pe.Touch(false);
mFinish = new ActionOnFinish( (success, message) =>
{
if ( success ) {
// Mark previous parent dirty
if ( pgParent != null ) {
mDb.dirty.Add(pgParent);
}
// Mark new parent dirty
mDb.dirty.Add(pgRecycleBin);
} else {
// Let's not bother recovering from a failure to save a deleted entry. It is too much work.
App.setShutdown();
}
}, this.mFinish);
} }
} }
// Save
mFinish = new AfterDelete(mFinish, pgParent, mEntry, mDb);
// Commit database // Commit database
SaveDB save = new SaveDB(mCtx, mDb, mFinish, false); SaveDB save = new SaveDB(mCtx, mDb, mFinish, false);
save.run(); save.run();
@ -97,36 +123,6 @@ namespace keepass2android
} }
private class AfterDelete : OnFinish {
private PwGroup mParent;
private PwEntry mEntry;
Database mDb;
public AfterDelete(OnFinish finish, PwGroup parent, PwEntry entry, Database db):base(finish) {
mParent = parent;
mEntry = entry;
mDb = db;
}
public override void run() {
if ( mSuccess ) {
// Mark parent dirty
if ( mParent != null ) {
mDb.dirty.Add(mParent);
}
} else {
// Let's not bother recovering from a failure to save a deleted entry. It is too much work.
App.setShutdown();
}
base.run();
}
}
} }
} }

View File

@ -31,14 +31,12 @@ using KeePassLib;
namespace keepass2android namespace keepass2android
{ {
public class DeleteGroup : RunnableOnFinish { public class DeleteGroup : DeleteRunnable {
private Database mDb;
private PwGroup mGroup; private PwGroup mGroup;
private GroupBaseActivity mAct; private GroupBaseActivity mAct;
private bool mDontSave; protected bool mDontSave;
private Context mCtx;
public DeleteGroup(Context ctx, Database db, PwGroup group, GroupBaseActivity act, OnFinish finish):base(finish) { public DeleteGroup(Context ctx, Database db, PwGroup group, GroupBaseActivity act, OnFinish finish):base(finish) {
setMembers(ctx, db, group, act, false); setMembers(ctx, db, group, act, false);
} }
@ -46,23 +44,35 @@ namespace keepass2android
public DeleteGroup(Context ctx, Database db, PwGroup group, GroupBaseActivity act, OnFinish finish, bool dontSave):base(finish) { public DeleteGroup(Context ctx, Database db, PwGroup group, GroupBaseActivity act, OnFinish finish, bool dontSave):base(finish) {
setMembers(ctx, db, group, act, dontSave); setMembers(ctx, db, group, act, dontSave);
} }
public DeleteGroup(Context ctx, Database db, PwGroup group, OnFinish finish, bool dontSave):base(finish) { public DeleteGroup(Context ctx, Database db, PwGroup group, OnFinish finish, bool dontSave):base(finish) {
setMembers(ctx, db, group, null, dontSave); setMembers(ctx, db, group, null, dontSave);
} }
private void setMembers(Context ctx, Database db, PwGroup group, GroupBaseActivity act, bool dontSave) { private void setMembers(Context ctx, Database db, PwGroup group, GroupBaseActivity act, bool dontSave) {
mCtx = ctx; base.setMembers(ctx, db);
mDb = db;
mGroup = group; mGroup = group;
mAct = act; mAct = act;
mDontSave = dontSave; mDontSave = dontSave;
mFinish = new AfterDelete(mFinish, mDb, mGroup); }
public override bool CanRecycle
{
get
{
return CanRecycleGroup(mGroup);
}
}
protected override int QuestionsResourceId
{
get
{
return Resource.String.AskDeletePermanentlyGroup;
}
} }
public override void run() { public override void run() {
@ -73,43 +83,39 @@ namespace keepass2android
PwDatabase pd = mDb.pm; PwDatabase pd = mDb.pm;
PwGroup pgRecycleBin = pd.RootGroup.FindGroup(pd.RecycleBinUuid, true); PwGroup pgRecycleBin = pd.RootGroup.FindGroup(pd.RecycleBinUuid, true);
bool bShiftPressed = false;
bool bPermanent = true; //indicates whether we delete permanently or not
//TODO use settings to enable Recycle Bin App-wide?
if(pd.RecycleBinEnabled == false) bPermanent = true;
else if(bShiftPressed) bPermanent = true;
else if(pgRecycleBin == null) { }
else if(pg == pgRecycleBin) bPermanent = true;
else if(pg.IsContainedIn(pgRecycleBin)) bPermanent = true;
else if(pgRecycleBin.IsContainedIn(pg)) bPermanent = true;
if(bPermanent)
{
/* TODO KPDesktop?
string strText = KPRes.DeleteGroupInfo + MessageService.NewParagraph +
KPRes.DeleteGroupQuestion;
if(!MessageService.AskYesNo(strText, KPRes.DeleteGroupTitle))
return;
*/
}
pgParent.Groups.Remove(pg); pgParent.Groups.Remove(pg);
if(bPermanent) if ((DeletePermanently) || (!CanRecycle))
{ {
pg.DeleteAllObjects(pd); pg.DeleteAllObjects(pd);
PwDeletedObject pdo = new PwDeletedObject(pg.Uuid, DateTime.Now); PwDeletedObject pdo = new PwDeletedObject(pg.Uuid, DateTime.Now);
pd.DeletedObjects.Add(pdo); pd.DeletedObjects.Add(pdo);
mFinish = new AfterDeletePermanently(mFinish, mDb, mGroup);
} }
else // Recycle else // Recycle
{ {
bool bDummy = false; bool bDummy = false;
EnsureRecycleBin(ref pgRecycleBin, pd, ref bDummy, mCtx); EnsureRecycleBin(ref pgRecycleBin, ref bDummy);
pgRecycleBin.AddGroup(pg, true, true); pgRecycleBin.AddGroup(pg, true, true);
pg.Touch(false); pg.Touch(false);
mFinish = new ActionOnFinish((success, message) =>
{
if ( success ) {
// Mark new parent (Recycle bin) dirty
PwGroup parent = mGroup.ParentGroup;
if ( parent != null ) {
mDb.dirty.Add(parent);
}
//Mark old parent dirty:
mDb.dirty.Add(pgParent);
} else {
// Let's not bother recovering from a failure to save a deleted group. It is too much work.
App.setShutdown();
}
}, this.mFinish);
} }
// Save // Save
@ -118,39 +124,13 @@ namespace keepass2android
} }
public static void EnsureRecycleBin(ref PwGroup pgRecycleBin,
PwDatabase pdContext, ref bool bGroupListUpdateRequired, Context ctx)
{
if(pdContext == null) { return; }
if(pgRecycleBin == pdContext.RootGroup)
{
pgRecycleBin = null;
}
if(pgRecycleBin == null)
{
pgRecycleBin = new PwGroup(true, true, ctx.GetString(Resource.String.RecycleBin),
PwIcon.TrashBin);
pgRecycleBin.EnableAutoType = false;
pgRecycleBin.EnableSearching = false;
pgRecycleBin.IsExpanded = false;
pdContext.RootGroup.AddGroup(pgRecycleBin, true);
pdContext.RecycleBinUuid = pgRecycleBin.Uuid;
bGroupListUpdateRequired = true;
}
else { System.Diagnostics.Debug.Assert(pgRecycleBin.Uuid.EqualsValue(pdContext.RecycleBinUuid)); }
}
private class AfterDelete : OnFinish { private class AfterDeletePermanently : OnFinish {
Database mDb; Database mDb;
PwGroup mGroup; PwGroup mGroup;
public AfterDelete(OnFinish finish, Database db, PwGroup group):base(finish) { public AfterDeletePermanently(OnFinish finish, Database db, PwGroup group):base(finish) {
this.mDb = db; this.mDb = db;
this.mGroup = group; this.mGroup = group;
} }
@ -160,7 +140,7 @@ namespace keepass2android
// Remove from group global // Remove from group global
mDb.groups.Remove(mGroup.Uuid); mDb.groups.Remove(mGroup.Uuid);
// Remove group from the dirty global (if it is present), not a big deal if this fails // Remove group from the dirty global (if it is present), not a big deal if this fails (doesn't throw)
mDb.dirty.Remove(mGroup); mDb.dirty.Remove(mGroup);
// Mark parent dirty // Mark parent dirty

View File

@ -0,0 +1,146 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using KeePassLib;
namespace keepass2android
{
public abstract class DeleteRunnable : RunnableOnFinish
{
public DeleteRunnable(OnFinish finish):base(finish)
{
}
protected Database mDb;
protected Context mCtx;
protected void setMembers(Context ctx, Database db)
{
mCtx = ctx;
mDb = db;
}
private bool mDeletePermanently = true;
public bool DeletePermanently
{
get
{
return mDeletePermanently;
}
set
{
mDeletePermanently = value;
}
}
public abstract bool CanRecycle
{
get;
}
protected bool CanRecycleGroup(PwGroup pgParent)
{
bool bShiftPressed = false;
PwDatabase pd = mDb.pm;
PwGroup pgRecycleBin = pd.RootGroup.FindGroup(pd.RecycleBinUuid, true);
bool bPermanent = false;
if (pgParent != null)
{
if (pd.RecycleBinEnabled == false)
bPermanent = true;
else if (bShiftPressed)
bPermanent = true;
else if (pgRecycleBin == null)
{
} // Recycle
else if (pgParent == pgRecycleBin)
bPermanent = true;
else if (pgParent.IsContainedIn(pgRecycleBin))
bPermanent = true;
}
return !bPermanent;
}
protected void EnsureRecycleBin(ref PwGroup pgRecycleBin,
ref bool bGroupListUpdateRequired)
{
if ((mDb == null) || (mDb.pm == null)) { return; }
if(pgRecycleBin == mDb.pm.RootGroup)
{
pgRecycleBin = null;
}
if(pgRecycleBin == null)
{
pgRecycleBin = new PwGroup(true, true, mCtx.GetString(Resource.String.RecycleBin),
PwIcon.TrashBin);
pgRecycleBin.EnableAutoType = false;
pgRecycleBin.EnableSearching = false;
pgRecycleBin.IsExpanded = false;
mDb.pm.RootGroup.AddGroup(pgRecycleBin, true);
mDb.pm.RecycleBinUuid = pgRecycleBin.Uuid;
bGroupListUpdateRequired = true;
}
else { System.Diagnostics.Debug.Assert(pgRecycleBin.Uuid.EqualsValue(mDb.pm.RecycleBinUuid)); }
}
protected abstract int QuestionsResourceId
{
get;
}
public void start()
{
if (CanRecycle)
{
AlertDialog.Builder builder = new AlertDialog.Builder(mCtx);
builder.SetTitle(mCtx.GetString(Resource.String.AskDeletePermanently_title));
builder.SetMessage(mCtx.GetString(QuestionsResourceId));
builder.SetPositiveButton(Resource.String.yes, new EventHandler<DialogClickEventArgs>((dlgSender, dlgEvt) =>
{
DeletePermanently = true;
ProgressTask pt = new ProgressTask(mCtx, this, Resource.String.saving_database);
pt.run();
}));
builder.SetNegativeButton(Resource.String.no, new EventHandler<DialogClickEventArgs>((dlgSender, dlgEvt) => {
DeletePermanently = false;
ProgressTask pt = new ProgressTask(mCtx, this, Resource.String.saving_database);
pt.run();
}));
builder.SetNeutralButton(mCtx.GetString(Android.Resource.String.Cancel),
new EventHandler<DialogClickEventArgs>((dlgSender, dlgEvt) => {}));
Dialog dialog = builder.Create();
dialog.Show();
} else
{
ProgressTask pt = new ProgressTask(mCtx, this, Resource.String.saving_database);
pt.run();
}
}
}
}

View File

@ -157,6 +157,7 @@
<Compile Include="LifecycleDebugActivity.cs" /> <Compile Include="LifecycleDebugActivity.cs" />
<Compile Include="services\QuickUnlockForegroundService.cs" /> <Compile Include="services\QuickUnlockForegroundService.cs" />
<Compile Include="AssemblyInfo.cs" /> <Compile Include="AssemblyInfo.cs" />
<Compile Include="database\edit\DeleteRunnable.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="Resources\AboutResources.txt" /> <None Include="Resources\AboutResources.txt" />
@ -201,6 +202,63 @@
<None Include="todos.cs"> <None Include="todos.cs">
<Visible>False</Visible> <Visible>False</Visible>
</None> </None>
<None Include="UseManifestNet.bat">
<Visible>False</Visible>
</None>
<None Include="UseManifestNoNet.bat">
<Visible>False</Visible>
</None>
<None Include="Properties\AndroidManifest_net.xml">
<Visible>False</Visible>
</None>
<None Include="Properties\AndroidManifest_nonet.xml">
<Visible>False</Visible>
</None>
<None Include="Resources\values-af\strings.xml">
<Visible>False</Visible>
</None>
<None Include="Resources\values-ar\strings.xml">
<Visible>False</Visible>
</None>
<None Include="Resources\values-el\strings.xml">
<Visible>False</Visible>
</None>
<None Include="Resources\values-fi\strings.xml">
<Visible>False</Visible>
</None>
<None Include="Resources\values-in\strings.xml">
<Visible>False</Visible>
</None>
<None Include="Resources\values-iw\strings.xml">
<Visible>False</Visible>
</None>
<None Include="Resources\values-ko\strings.xml">
<Visible>False</Visible>
</None>
<None Include="Resources\values-no\strings.xml">
<Visible>False</Visible>
</None>
<None Include="Resources\values-pt-rPT\strings.xml">
<Visible>False</Visible>
</None>
<None Include="Resources\values-ro\strings.xml">
<Visible>False</Visible>
</None>
<None Include="Resources\values-sl\strings.xml">
<Visible>False</Visible>
</None>
<None Include="Resources\values-sr\strings.xml">
<Visible>False</Visible>
</None>
<None Include="Resources\values-sv\strings.xml">
<Visible>False</Visible>
</None>
<None Include="Resources\values-tr\strings.xml">
<Visible>False</Visible>
</None>
<None Include="Resources\values-vi\strings.xml">
<Visible>False</Visible>
</None>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<AndroidResource Include="Resources\drawable\ic00.png" /> <AndroidResource Include="Resources\drawable\ic00.png" />

View File

@ -14,7 +14,6 @@ This file is part of Keepass2Android, Copyright 2013 Philipp Crocoll. This file
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Keepass2Android. If not, see <http://www.gnu.org/licenses/>. along with Keepass2Android. If not, see <http://www.gnu.org/licenses/>.
*/ */
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -32,34 +31,34 @@ using Android.Text.Style;
namespace keepass2android.view namespace keepass2android.view
{ {
public class PwEntryView : ClickView
public class PwEntryView : ClickView { {
protected GroupBaseActivity mAct; protected GroupBaseActivity mAct;
protected PwEntry mPw; protected PwEntry mPw;
private TextView mTv; private TextView mTv;
private int mPos; private int mPos;
protected const int MENU_OPEN = Menu.First; protected const int MENU_OPEN = Menu.First;
private const int MENU_DELETE = MENU_OPEN + 1; private const int MENU_DELETE = MENU_OPEN + 1;
public static PwEntryView getInstance(GroupBaseActivity act, PwEntry pw, int pos) public static PwEntryView getInstance(GroupBaseActivity act, PwEntry pw, int pos)
{ {
return new PwEntryView(act, pw, pos); return new PwEntryView(act, pw, pos);
} }
public PwEntryView (IntPtr javaReference, JniHandleOwnership transfer) public PwEntryView(IntPtr javaReference, JniHandleOwnership transfer)
: base(javaReference, transfer) : base(javaReference, transfer)
{ {
} }
protected PwEntryView(GroupBaseActivity act, PwEntry pw, int pos):base(act) { protected PwEntryView(GroupBaseActivity act, PwEntry pw, int pos):base(act)
{
mAct = act; mAct = act;
View ev = View.Inflate(mAct, Resource.Layout.entry_list_entry, null); View ev = View.Inflate(mAct, Resource.Layout.entry_list_entry, null);
mTv = (TextView) ev.FindViewById(Resource.Id.entry_text); mTv = (TextView)ev.FindViewById(Resource.Id.entry_text);
mTv.TextSize = PrefsUtil.getListTextSize(act); mTv.TextSize = PrefsUtil.getListTextSize(act);
populateView(ev, pw, pos); populateView(ev, pw, pos);
@ -70,19 +69,19 @@ namespace keepass2android.view
} }
private void populateView (View ev, PwEntry pw, int pos) private void populateView(View ev, PwEntry pw, int pos)
{ {
mPw = pw; mPw = pw;
mPos = pos; mPos = pos;
ImageView iv = (ImageView)ev.FindViewById (Resource.Id.entry_icon); ImageView iv = (ImageView)ev.FindViewById(Resource.Id.entry_icon);
bool isExpired = pw.Expires && pw.ExpiryTime < DateTime.Now; bool isExpired = pw.Expires && pw.ExpiryTime < DateTime.Now;
if (isExpired) { if (isExpired)
App.getDB ().drawFactory.assignDrawableTo (iv, Resources, App.getDB ().pm, PwIcon.Expired, PwUuid.Zero);
}
else
{ {
App.getDB ().drawFactory.assignDrawableTo (iv, Resources, App.getDB ().pm, pw.IconId, pw.CustomIconUuid); App.getDB().drawFactory.assignDrawableTo(iv, Resources, App.getDB().pm, PwIcon.Expired, PwUuid.Zero);
} else
{
App.getDB().drawFactory.assignDrawableTo(iv, Resources, App.getDB().pm, pw.IconId, pw.CustomIconUuid);
} }
String title = pw.Strings.ReadSafe(PwDefs.TitleField); String title = pw.Strings.ReadSafe(PwDefs.TitleField);
@ -97,40 +96,44 @@ namespace keepass2android.view
} }
public void convertView(PwEntry pw, int pos) { public void convertView(PwEntry pw, int pos)
{
populateView(this, pw, pos); populateView(this, pw, pos);
} }
public override void OnClick() { public override void OnClick()
{
launchEntry(); launchEntry();
} }
private void launchEntry() { private void launchEntry()
mAct.LaunchActivityForEntry(mPw,mPos); {
mAct.LaunchActivityForEntry(mPw, mPos);
} }
public override void OnCreateMenu(IContextMenu menu, IContextMenuContextMenuInfo menuInfo) { public override void OnCreateMenu(IContextMenu menu, IContextMenuContextMenuInfo menuInfo)
{
menu.Add(0, MENU_OPEN, 0, Resource.String.menu_open); menu.Add(0, MENU_OPEN, 0, Resource.String.menu_open);
menu.Add(0, MENU_DELETE, 0, Resource.String.menu_delete); menu.Add(0, MENU_DELETE, 0, Resource.String.menu_delete);
} }
public override bool OnContextItemSelected(IMenuItem item) { public override bool OnContextItemSelected(IMenuItem item)
switch ( item.ItemId) { {
switch (item.ItemId)
{
case MENU_OPEN: case MENU_OPEN:
launchEntry(); launchEntry();
return true; return true;
case MENU_DELETE: case MENU_DELETE:
Handler handler = new Handler(); Handler handler = new Handler();
DeleteEntry task = new DeleteEntry(Context, App.getDB(), mPw, new GroupBaseActivity.RefreshTask(handler, mAct)); DeleteEntry task = new DeleteEntry(Context, App.getDB(), mPw, new GroupBaseActivity.RefreshTask(handler, mAct));
ProgressTask pt = new ProgressTask(mAct, task, Resource.String.saving_database); task.start();
pt.run(); return true;
return true;
default: default:
return false; return false;
} }
} }

View File

@ -108,8 +108,7 @@ namespace keepass2android.view
case MENU_DELETE: case MENU_DELETE:
Handler handler = new Handler(); Handler handler = new Handler();
DeleteGroup task = new DeleteGroup(Context, App.getDB(), mPw, mAct, new GroupBaseActivity.AfterDeleteGroup(handler, mAct)); DeleteGroup task = new DeleteGroup(Context, App.getDB(), mPw, mAct, new GroupBaseActivity.AfterDeleteGroup(handler, mAct));
ProgressTask pt = new ProgressTask(mAct, task, Resource.String.saving_database); task.start();
pt.run();
return true; return true;
default: default:
return false; return false;