├── .cz-config.js ├── .gitignore ├── KeepassA_privacy_policy.html ├── LICENSE ├── README.md ├── VersionManager ├── build.gradle └── src │ ├── functionalTest │ └── java │ │ └── com │ │ └── alg │ │ └── plugin │ │ └── version │ │ └── VersionManagerPluginFunctionalTest.java │ ├── main │ └── java │ │ └── com │ │ └── alg │ │ └── plugin │ │ └── version │ │ └── VersionManagerPlugin.java │ └── test │ └── java │ └── com │ └── alg │ └── plugin │ └── version │ └── VersionManagerPluginTest.java ├── app ├── .gitignore ├── AndResGuard.gradle ├── build.gradle ├── channel ├── firebase.gradle ├── multidex-config.txt ├── proguard-rules.pro ├── schemas │ └── com.lyy.keepassa.dao.AppDatabase │ │ ├── 1.json │ │ ├── 2.json │ │ ├── 3.json │ │ └── 4.json ├── src │ ├── androidTest │ │ └── java │ │ │ └── com │ │ │ └── lyy │ │ │ └── keepassa │ │ │ ├── AutoFillTest.kt │ │ │ ├── ComposeKeeTrayTotpTest.kt │ │ │ ├── ComposeKeepassTest.kt │ │ │ ├── KeepassDbTest.kt │ │ │ ├── UrlTest.kt │ │ │ └── UtilTest.kt │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── assets │ │ │ ├── fingerprint_anim.json │ │ │ ├── headAnim.json │ │ │ ├── loadingAnimation.json │ │ │ ├── lockedAnim.json │ │ │ └── version_log │ │ │ │ ├── version_log_de_rDE.md │ │ │ │ ├── version_log_en.md │ │ │ │ ├── version_log_ru_rRU.md │ │ │ │ ├── version_log_zh_CN.md │ │ │ │ └── version_log_zh_TW.md │ │ ├── ic_launcher-playstore.png │ │ ├── java │ │ │ └── com │ │ │ │ └── lyy │ │ │ │ └── keepassa │ │ │ │ ├── base │ │ │ │ ├── AnimState.kt │ │ │ │ ├── BaseActivity.kt │ │ │ │ ├── BaseApp.java │ │ │ │ ├── BaseBottomSheetDialogFragment.kt │ │ │ │ ├── BaseDialog.kt │ │ │ │ ├── BaseFragment.kt │ │ │ │ ├── BaseModule.kt │ │ │ │ ├── BaseService.kt │ │ │ │ ├── Constance.kt │ │ │ │ ├── DbMigration.kt │ │ │ │ ├── KeyConstance.kt │ │ │ │ ├── OnDialogDismissListener.kt │ │ │ │ └── ViewBindingAdapter.kt │ │ │ │ ├── common │ │ │ │ ├── PassType.kt │ │ │ │ └── SortType.kt │ │ │ │ ├── dao │ │ │ │ ├── AppDatabase.kt │ │ │ │ ├── CloudServiceInfoDao.kt │ │ │ │ ├── DbRecordDao.kt │ │ │ │ ├── EntryRecordDao.kt │ │ │ │ ├── QuickUnlockDao.kt │ │ │ │ └── SearchDao.kt │ │ │ │ ├── entity │ │ │ │ ├── AutoFillParam.kt │ │ │ │ ├── CloudServiceInfo.kt │ │ │ │ ├── CommonState.kt │ │ │ │ ├── DbHistoryRecord.kt │ │ │ │ ├── EntryRecord.kt │ │ │ │ ├── IOtpBean.kt │ │ │ │ ├── QuickUnLockRecord.kt │ │ │ │ ├── SearchRecord.kt │ │ │ │ ├── SimpleItemEntity.kt │ │ │ │ ├── TagBean.kt │ │ │ │ └── TotpType.kt │ │ │ │ ├── event │ │ │ │ ├── AttrFileEvent.kt │ │ │ │ ├── AttrStrEvent.kt │ │ │ │ ├── ChangeDbEvent.kt │ │ │ │ ├── CheckEnvEvent.kt │ │ │ │ ├── CloudFileSelectedEvent.kt │ │ │ │ ├── CollectionEvent.kt │ │ │ │ ├── DbHistoryEvent.kt │ │ │ │ ├── DbPathEvent.kt │ │ │ │ ├── DelAttrFileEvent.kt │ │ │ │ ├── DelAttrStrEvent.kt │ │ │ │ ├── EditorEvent.kt │ │ │ │ ├── FillInfoEvent.kt │ │ │ │ ├── KeyPathEvent.kt │ │ │ │ ├── ModifyDbNameEvent.kt │ │ │ │ ├── ModifyPassEvent.kt │ │ │ │ ├── MoveEvent.kt │ │ │ │ ├── MsgDialogEvent.kt │ │ │ │ ├── MultiChoiceEvent.kt │ │ │ │ ├── ShowTOTPEvent.kt │ │ │ │ ├── StateChangeEvent.kt │ │ │ │ ├── TimeEvent.kt │ │ │ │ └── WebDavLoginEvent.kt │ │ │ │ ├── ondrive │ │ │ │ ├── DriveItem.kt │ │ │ │ ├── MsalApi.kt │ │ │ │ ├── MsalResponse.kt │ │ │ │ ├── MsalSourceItem.kt │ │ │ │ └── MsalUploadSession.kt │ │ │ │ ├── receiver │ │ │ │ └── ScreenLockReceiver.kt │ │ │ │ ├── router │ │ │ │ ├── ActivityRouter.kt │ │ │ │ ├── ContentInterceptor.kt │ │ │ │ ├── DeeplinkActivity.kt │ │ │ │ ├── DialogRouter.kt │ │ │ │ ├── FragmentRouter.kt │ │ │ │ └── ServiceRouter.kt │ │ │ │ ├── service │ │ │ │ ├── DbOpenNotificationService.kt │ │ │ │ ├── autofill │ │ │ │ │ ├── AutoFillClickReceiver.kt │ │ │ │ │ ├── AutoFillHelper.kt │ │ │ │ │ ├── AutoFillService.kt │ │ │ │ │ ├── PackageVerifier.kt │ │ │ │ │ ├── StructureParser.kt │ │ │ │ │ ├── W3cHints.kt │ │ │ │ │ ├── datasource │ │ │ │ │ │ └── KDBAutoFillRepository.kt │ │ │ │ │ └── model │ │ │ │ │ │ ├── AutoFillFieldMetadata.kt │ │ │ │ │ │ ├── AutoFillFieldMetadataCollection.kt │ │ │ │ │ │ └── FilledAutoFillField.kt │ │ │ │ ├── feat │ │ │ │ │ ├── IFeature.kt │ │ │ │ │ ├── KdbHandlerService.kt │ │ │ │ │ ├── KdbOpenService.kt │ │ │ │ │ ├── KpaSdkService.kt │ │ │ │ │ ├── RoomFeature.kt │ │ │ │ │ └── XLogFeature.kt │ │ │ │ ├── input │ │ │ │ │ ├── CandidatesAdapter.kt │ │ │ │ │ ├── EntryOtherInfoAdapter.kt │ │ │ │ │ ├── EntryOtherInfoDialog.kt │ │ │ │ │ └── InputIMEService.kt │ │ │ │ └── play │ │ │ │ │ └── PlayServiceUtil.kt │ │ │ │ ├── util │ │ │ │ ├── AutoLockDbUtil.kt │ │ │ │ ├── BarUtil.kt │ │ │ │ ├── ClipboardUtil.kt │ │ │ │ ├── CommonKVStorage.kt │ │ │ │ ├── EncryptUtil.kt │ │ │ │ ├── EventBusHelper.kt │ │ │ │ ├── Extensions.kt │ │ │ │ ├── FingerprintUtil.kt │ │ │ │ ├── HitUtil.kt │ │ │ │ ├── IconUtil.kt │ │ │ │ ├── ImageExtensions.kt │ │ │ │ ├── KLog.kt │ │ │ │ ├── KVStorage.kt │ │ │ │ ├── KdbUtil.kt │ │ │ │ ├── KeepassAUtil.kt │ │ │ │ ├── KpaExtensions.kt │ │ │ │ ├── KpaListEntryExtensions.kt │ │ │ │ ├── KpaListGroupExtensions.kt │ │ │ │ ├── KpaUtil.kt │ │ │ │ ├── LanguageUtil.kt │ │ │ │ ├── NotificationUtil.kt │ │ │ │ ├── PasswordBuildUtil.kt │ │ │ │ ├── PermissionPageManagement.java │ │ │ │ ├── PermissionsUtil.kt │ │ │ │ ├── PlayUtil.kt │ │ │ │ ├── QuickUnLockUtil.java │ │ │ │ ├── RealPathUtil.java │ │ │ │ ├── VibratorUtil.kt │ │ │ │ ├── cloud │ │ │ │ │ ├── CloudFileInfo.kt │ │ │ │ │ ├── CloudUtilFactory.kt │ │ │ │ │ ├── DbSynUtil.kt │ │ │ │ │ ├── DropboxContentHasher.java │ │ │ │ │ ├── DropboxUtil.kt │ │ │ │ │ ├── ICloudUtil.kt │ │ │ │ │ ├── OneDriveUtil.kt │ │ │ │ │ ├── PwDataMap.kt │ │ │ │ │ ├── SynStateCode.kt │ │ │ │ │ ├── WebDavUtil.kt │ │ │ │ │ └── interceptor │ │ │ │ │ │ ├── DbMergeDelegate.kt │ │ │ │ │ │ ├── DbSyncCheckInterceptor.kt │ │ │ │ │ │ ├── DbSyncCompareInterceptor.kt │ │ │ │ │ │ ├── DbSyncRequest.kt │ │ │ │ │ │ ├── DbSyncResponse.kt │ │ │ │ │ │ ├── DbSyncUploadInterceptor.kt │ │ │ │ │ │ └── IDbSyncInterceptor.kt │ │ │ │ └── totp │ │ │ │ │ ├── Base32String.java │ │ │ │ │ ├── ComposeKeeOtp.kt │ │ │ │ │ ├── ComposeKeeOtp2.kt │ │ │ │ │ ├── ComposeKeeTrayTotp.kt │ │ │ │ │ ├── ComposeKeepass.kt │ │ │ │ │ ├── ComposeKeepassxc.kt │ │ │ │ │ ├── IOtpCompose.kt │ │ │ │ │ ├── OtpEnum.kt │ │ │ │ │ ├── OtpUtil.kt │ │ │ │ │ ├── SecretHexType.kt │ │ │ │ │ └── TokenCalculator.java │ │ │ │ ├── view │ │ │ │ ├── ChoseDirModule.kt │ │ │ │ ├── KpaCaptureManager.java │ │ │ │ ├── MarkDownEditorActivity.kt │ │ │ │ ├── QrCodeScannerActivity.kt │ │ │ │ ├── SimpleAdapter.kt │ │ │ │ ├── SimpleEntryAdapter.kt │ │ │ │ ├── StorageType.kt │ │ │ │ ├── UpgradeLogDialog.kt │ │ │ │ ├── collection │ │ │ │ │ ├── CollectionActivity.kt │ │ │ │ │ └── CollectionModule.kt │ │ │ │ ├── create │ │ │ │ │ ├── CreateCustomStrDialog.kt │ │ │ │ │ ├── CreateDbActivity.kt │ │ │ │ │ ├── CreateDbFirstFragment.kt │ │ │ │ │ ├── CreateDbModule.kt │ │ │ │ │ ├── CreateDbSecondFragment.kt │ │ │ │ │ ├── CreateGroupDialog.kt │ │ │ │ │ ├── CreatePassKeyDialog.kt │ │ │ │ │ ├── GeneratePassActivity.kt │ │ │ │ │ ├── PathTypeDialog.kt │ │ │ │ │ ├── auth │ │ │ │ │ │ ├── AFSAuthFlow.kt │ │ │ │ │ │ ├── DropboxAuthFlow.kt │ │ │ │ │ │ ├── IAuthFlow.kt │ │ │ │ │ │ ├── OneDriveAuthFlow.kt │ │ │ │ │ │ └── WebDavAuthFlow.kt │ │ │ │ │ └── entry │ │ │ │ │ │ ├── CardListHelper.kt │ │ │ │ │ │ ├── CreateEntryActivity.kt │ │ │ │ │ │ ├── CreateEntryHandler.kt │ │ │ │ │ │ ├── CreateEntryModule.kt │ │ │ │ │ │ ├── CreateEnum.kt │ │ │ │ │ │ ├── CreateFileCard.kt │ │ │ │ │ │ ├── CreateStrCard.kt │ │ │ │ │ │ ├── ICreateHandler.kt │ │ │ │ │ │ └── ModifyEntryHandler.kt │ │ │ │ ├── detail │ │ │ │ │ ├── AppIconAdapter.kt │ │ │ │ │ ├── AppIconLayoutManager.kt │ │ │ │ │ ├── EntryDetailActivityNew.kt │ │ │ │ │ ├── EntryDetailModule.kt │ │ │ │ │ ├── GroupDetailActivity.kt │ │ │ │ │ ├── GroupDetailModule.kt │ │ │ │ │ └── card │ │ │ │ │ │ ├── EntryBaseInfoCard.kt │ │ │ │ │ │ ├── EntryFileCard.kt │ │ │ │ │ │ ├── EntryNoteCard.kt │ │ │ │ │ │ ├── EntryStrCard.kt │ │ │ │ │ │ └── EntryTagCard.kt │ │ │ │ ├── dialog │ │ │ │ │ ├── AddMoreDialog.kt │ │ │ │ │ ├── ChooseTagDialog.kt │ │ │ │ │ ├── CloudFileListModule.kt │ │ │ │ │ ├── CloudFileSelectDialog.kt │ │ │ │ │ ├── CreateTagDialog.kt │ │ │ │ │ ├── DialogBtnClicker.kt │ │ │ │ │ ├── DonateDialog.kt │ │ │ │ │ ├── ImgViewerDialog.kt │ │ │ │ │ ├── LoadingDialog.java │ │ │ │ │ ├── ModifyGroupDialog.kt │ │ │ │ │ ├── ModifyPassDialog.kt │ │ │ │ │ ├── MsgDialog.kt │ │ │ │ │ ├── OnMsgBtClickListener.kt │ │ │ │ │ ├── PlayDonateDialog.kt │ │ │ │ │ ├── PlayDonateModule.kt │ │ │ │ │ ├── TimeChangeDialog.kt │ │ │ │ │ ├── TipsDialog.kt │ │ │ │ │ ├── WebDavLoginModule.kt │ │ │ │ │ ├── otp │ │ │ │ │ │ ├── CreateOtpDialog.kt │ │ │ │ │ │ ├── CreateOtpModule.kt │ │ │ │ │ │ ├── TotpDisplayDialog.kt │ │ │ │ │ │ └── modify │ │ │ │ │ │ │ ├── IOtpModifyHandler.kt │ │ │ │ │ │ │ ├── ModifyOtpDialog.kt │ │ │ │ │ │ │ ├── OtpKeeTrayHandler.kt │ │ │ │ │ │ │ ├── OtpKeeTraySteamHandler.kt │ │ │ │ │ │ │ ├── OtpKeepOtherHandler.kt │ │ │ │ │ │ │ ├── OtpKeepassHandler.kt │ │ │ │ │ │ │ └── OtpKeepassXcHandler.kt │ │ │ │ │ └── webdav │ │ │ │ │ │ ├── DefaultLoginAdapter.kt │ │ │ │ │ │ ├── IWebDavLoginAdapter.kt │ │ │ │ │ │ ├── NextcloudLoginAdapter.kt │ │ │ │ │ │ ├── OtherLoginAdapter.kt │ │ │ │ │ │ └── WebDavLoginDialogNew.kt │ │ │ │ ├── dir │ │ │ │ │ ├── ChooseGroupActivity.kt │ │ │ │ │ └── DirFragment.kt │ │ │ │ ├── fingerprint │ │ │ │ │ ├── FingerprintActivity.kt │ │ │ │ │ ├── FingerprintCloseFragment.kt │ │ │ │ │ ├── FingerprintDescFragment.kt │ │ │ │ │ ├── FingerprintModule.kt │ │ │ │ │ └── KeyStoreUtil.kt │ │ │ │ ├── icon │ │ │ │ │ ├── IconAdapter.kt │ │ │ │ │ ├── IconBottomSheetDialog.kt │ │ │ │ │ └── IconModule.kt │ │ │ │ ├── launcher │ │ │ │ │ ├── ChangeDbFragment.kt │ │ │ │ │ ├── DelHistoryPopMenu.kt │ │ │ │ │ ├── IAutoFillFinishDelegate.kt │ │ │ │ │ ├── IOpenDbDelegate.kt │ │ │ │ │ ├── LauncherActivity.kt │ │ │ │ │ ├── LauncherModule.kt │ │ │ │ │ ├── OpenAFSDelegate.kt │ │ │ │ │ ├── OpenDbFragment.kt │ │ │ │ │ ├── OpenDbHistoryActivity.kt │ │ │ │ │ ├── OpenDbHistoryModule.kt │ │ │ │ │ ├── OpenDropBoxDelegate.kt │ │ │ │ │ ├── OpenOneDriveDelegate.kt │ │ │ │ │ ├── OpenWebDavDelegate.kt │ │ │ │ │ ├── SaveEntityDelegate.kt │ │ │ │ │ └── SearchEntityDelegate.kt │ │ │ │ ├── main │ │ │ │ │ ├── EntryListFragment.kt │ │ │ │ │ ├── EntryListModule.kt │ │ │ │ │ ├── HomeFragment.kt │ │ │ │ │ ├── HomeModule.kt │ │ │ │ │ ├── MainActivity.kt │ │ │ │ │ ├── MainModule.kt │ │ │ │ │ ├── MainSettingActivity.kt │ │ │ │ │ ├── QuickUnlockActivity.kt │ │ │ │ │ ├── SearchSuggestionProvider.kt │ │ │ │ │ └── chain │ │ │ │ │ │ ├── DevBirthdayChain.kt │ │ │ │ │ │ ├── DialogChain.kt │ │ │ │ │ │ ├── DonateChain.kt │ │ │ │ │ │ ├── IMainDialogInterceptor.kt │ │ │ │ │ │ ├── MainDialogResponse.kt │ │ │ │ │ │ ├── PermissionsChain.kt │ │ │ │ │ │ ├── TipChain.kt │ │ │ │ │ │ └── VersionLogChain.kt │ │ │ │ ├── menu │ │ │ │ │ ├── EntryDetailFilePopMenu.kt │ │ │ │ │ ├── EntryDetailStrPopMenu.kt │ │ │ │ │ ├── EntryPopMenu.kt │ │ │ │ │ ├── GroupPopMenu.kt │ │ │ │ │ └── IPopMenu.kt │ │ │ │ ├── search │ │ │ │ │ ├── AutoFillEntrySearchActivity.kt │ │ │ │ │ ├── CommonSearchActivity.kt │ │ │ │ │ ├── DelListener.kt │ │ │ │ │ ├── SearchAdapter.kt │ │ │ │ │ ├── SearchDialog.kt │ │ │ │ │ └── SearchModule.kt │ │ │ │ └── setting │ │ │ │ │ ├── AppSettingFragment.kt │ │ │ │ │ ├── DBSettingFragment.kt │ │ │ │ │ ├── SettingActivity.kt │ │ │ │ │ ├── SettingModule.kt │ │ │ │ │ └── UISettingFragment.kt │ │ │ │ └── widgets │ │ │ │ └── expand │ │ │ │ ├── AttrFileItemView.kt │ │ │ │ ├── AttrStrItemView.kt │ │ │ │ ├── ExpandAttrStrLayout.kt │ │ │ │ ├── ExpandFileAttrView.kt │ │ │ │ └── ExpandStrAttrView.kt │ │ ├── jni │ │ │ ├── CMakeLists.txt │ │ │ ├── aes │ │ │ │ ├── aes.h │ │ │ │ ├── aes_cbc.c │ │ │ │ ├── aes_core.c │ │ │ │ ├── aes_ecb.c │ │ │ │ ├── aes_locl.h │ │ │ │ ├── cbc128.c │ │ │ │ ├── main_test.c │ │ │ │ └── modes.h │ │ │ └── encrypt_str.cpp │ │ ├── jniLibs │ │ │ ├── arm64-v8a │ │ │ │ ├── libc++_shared.so │ │ │ │ └── libmarsxlog.so │ │ │ ├── armeabi-v7a │ │ │ │ ├── libc++_shared.so │ │ │ │ └── libmarsxlog.so │ │ │ ├── x86 │ │ │ │ ├── libc++_shared.so │ │ │ │ └── libmarsxlog.so │ │ │ └── x86_64 │ │ │ │ ├── libc++_shared.so │ │ │ │ └── libmarsxlog.so │ │ └── res │ │ │ ├── anim │ │ │ ├── dialog_y_enter.xml │ │ │ ├── dialog_y_exit.xml │ │ │ ├── translate_bottom_in.xml │ │ │ ├── translate_left_in.xml │ │ │ ├── translate_left_out.xml │ │ │ ├── translate_right_in.xml │ │ │ └── translate_right_out.xml │ │ │ ├── color │ │ │ └── selector_blue_gray_text_bg.xml │ │ │ ├── drawable-v21 │ │ │ ├── ripple_primary_selector.xml │ │ │ └── ripple_white_selector.xml │ │ │ ├── drawable-v24 │ │ │ └── ic_launcher_foreground.xml │ │ │ ├── drawable │ │ │ ├── bg_circle.xml │ │ │ ├── bg_ed.xml │ │ │ ├── bg_gray_radius_4.xml │ │ │ ├── bg_ime_entry.xml │ │ │ ├── bg_ime_key.xml │ │ │ ├── bg_line.xml │ │ │ ├── bg_str_attr.xml │ │ │ ├── bg_white_radius_2.xml │ │ │ ├── bg_white_radius_32.xml │ │ │ ├── bg_white_radius_4.xml │ │ │ ├── bg_white_radius_8.xml │ │ │ ├── ic_add.xml │ │ │ ├── ic_add_24px.xml │ │ │ ├── ic_add_blue_24px.xml │ │ │ ├── ic_add_photo_alternate_24px.xml │ │ │ ├── ic_alipay.xml │ │ │ ├── ic_anim.xml │ │ │ ├── ic_app.xml │ │ │ ├── ic_arrow_left.xml │ │ │ ├── ic_arrow_left_black.xml │ │ │ ├── ic_attr_file.xml │ │ │ ├── ic_attr_str.xml │ │ │ ├── ic_auto.xml │ │ │ ├── ic_auto_fill.xml │ │ │ ├── ic_baseline_arrow_drop_down_24.xml │ │ │ ├── ic_baseline_arrow_drop_up_24.xml │ │ │ ├── ic_baseline_bug_report_24.xml │ │ │ ├── ic_baseline_casino_24.xml │ │ │ ├── ic_baseline_confirmation_number_24.xml │ │ │ ├── ic_baseline_content_copy_24.xml │ │ │ ├── ic_baseline_edit_24.xml │ │ │ ├── ic_baseline_event_busy_24.xml │ │ │ ├── ic_baseline_g_translate_24.xml │ │ │ ├── ic_baseline_label_24.xml │ │ │ ├── ic_baseline_language_24.xml │ │ │ ├── ic_baseline_link_24.xml │ │ │ ├── ic_baseline_open_with.xml │ │ │ ├── ic_baseline_photo_camera_24.xml │ │ │ ├── ic_change.xml │ │ │ ├── ic_clipbord.xml │ │ │ ├── ic_close.xml │ │ │ ├── ic_create_time.xml │ │ │ ├── ic_del.xml │ │ │ ├── ic_delete_sweep.xml │ │ │ ├── ic_detail_edit.xml │ │ │ ├── ic_done.xml │ │ │ ├── ic_done_all.xml │ │ │ ├── ic_download_24px.xml │ │ │ ├── ic_dropbox.xml │ │ │ ├── ic_eco.xml │ │ │ ├── ic_fab_dir.xml │ │ │ ├── ic_favorite_24px.xml │ │ │ ├── ic_feedback_24px.xml │ │ │ ├── ic_file_24px.xml │ │ │ ├── ic_fingerprint.xml │ │ │ ├── ic_folder_24px.xml │ │ │ ├── ic_ftp.xml │ │ │ ├── ic_google_drive.xml │ │ │ ├── ic_google_play.xml │ │ │ ├── ic_help_filled.xml │ │ │ ├── ic_history.xml │ │ │ ├── ic_history_record.xml │ │ │ ├── ic_http.xml │ │ │ ├── ic_image_blue_24px.xml │ │ │ ├── ic_image_broken_24px.xml │ │ │ ├── ic_ime_backspace.xml │ │ │ ├── ic_ime_close.xml │ │ │ ├── ic_ime_enter.xml │ │ │ ├── ic_ime_keyboard.xml │ │ │ ├── ic_ime_lock.xml │ │ │ ├── ic_ime_other_info.xml │ │ │ ├── ic_ime_password.xml │ │ │ ├── ic_ime_user.xml │ │ │ ├── ic_img_choose.xml │ │ │ ├── ic_info_filled.xml │ │ │ ├── ic_keepassa.xml │ │ │ ├── ic_key.xml │ │ │ ├── ic_key_gray.xml │ │ │ ├── ic_keyboard.xml │ │ │ ├── ic_language_24px.xml │ │ │ ├── ic_launcher_background.xml │ │ │ ├── ic_lightbulb_on.xml │ │ │ ├── ic_linear_scale.xml │ │ │ ├── ic_lock.xml │ │ │ ├── ic_lock_24px.xml │ │ │ ├── ic_lose_time.xml │ │ │ ├── ic_modify_time.xml │ │ │ ├── ic_more_read.xml │ │ │ ├── ic_net.xml │ │ │ ├── ic_new_file.xml │ │ │ ├── ic_notice.xml │ │ │ ├── ic_onedrive.xml │ │ │ ├── ic_other.xml │ │ │ ├── ic_out_db.xml │ │ │ ├── ic_password.xml │ │ │ ├── ic_paypal.xml │ │ │ ├── ic_primary_close.xml │ │ │ ├── ic_qr_code_scanner.xml │ │ │ ├── ic_refresh_black_24dp.xml │ │ │ ├── ic_save_24px.xml │ │ │ ├── ic_screen_lock_portrait_black_24dp.xml │ │ │ ├── ic_search.xml │ │ │ ├── ic_security_24px.xml │ │ │ ├── ic_security_24px_white.xml │ │ │ ├── ic_server.xml │ │ │ ├── ic_setting.xml │ │ │ ├── ic_setting_lock.xml │ │ │ ├── ic_share_24px.xml │ │ │ ├── ic_sort_by_char.xml │ │ │ ├── ic_sort_down.xml │ │ │ ├── ic_sort_up.xml │ │ │ ├── ic_ssh.xml │ │ │ ├── ic_star.xml │ │ │ ├── ic_star_outline.xml │ │ │ ├── ic_star_rate.xml │ │ │ ├── ic_start_selector.xml │ │ │ ├── ic_state_bar.xml │ │ │ ├── ic_swap_horiz.xml │ │ │ ├── ic_tab_db.xml │ │ │ ├── ic_tab_db_gray.xml │ │ │ ├── ic_tab_db_selected.xml │ │ │ ├── ic_tab_history.xml │ │ │ ├── ic_tab_history_selected.xml │ │ │ ├── ic_tag.xml │ │ │ ├── ic_text_fields_24px.xml │ │ │ ├── ic_theme_style.xml │ │ │ ├── ic_title_24px.xml │ │ │ ├── ic_token_blue.xml │ │ │ ├── ic_token_grey.xml │ │ │ ├── ic_token_txt_grey.xml │ │ │ ├── ic_totp.xml │ │ │ ├── ic_undo_entry.xml │ │ │ ├── ic_up.xml │ │ │ ├── ic_user.xml │ │ │ ├── ic_view.xml │ │ │ ├── ic_view_black.xml │ │ │ ├── ic_view_headline_24px.xml │ │ │ ├── ic_view_off.xml │ │ │ ├── ic_view_off_black.xml │ │ │ ├── ic_visibility_off.xml │ │ │ ├── ripple_primary_selector.xml │ │ │ ├── ripple_white_selector.xml │ │ │ ├── selector_ic_tab_db.xml │ │ │ ├── selector_ic_tab_history.xml │ │ │ ├── selector_ic_tab_token.xml │ │ │ ├── selector_pass_visibility.xml │ │ │ ├── selector_password.xml │ │ │ ├── tip_1_0.webp │ │ │ └── tip_1_1.webp │ │ │ ├── font │ │ │ ├── roboto_bold.ttf │ │ │ ├── roboto_regular.ttf │ │ │ └── roboto_thinitalic.ttf │ │ │ ├── layout │ │ │ ├── activity_auto_fill_entry_search.xml │ │ │ ├── activity_change_db.xml │ │ │ ├── activity_collection.xml │ │ │ ├── activity_create_db.xml │ │ │ ├── activity_entry_detail_new.xml │ │ │ ├── activity_entry_edit_new.xml │ │ │ ├── activity_fingerprint.xml │ │ │ ├── activity_generate_pass.xml │ │ │ ├── activity_generate_pass_new.xml │ │ │ ├── activity_group_detail.xml │ │ │ ├── activity_group_dir.xml │ │ │ ├── activity_icon.xml │ │ │ ├── activity_launcher.xml │ │ │ ├── activity_main.xml │ │ │ ├── activity_markdown_editor.xml │ │ │ ├── activity_only_list.xml │ │ │ ├── activity_qr_code_scanner.xml │ │ │ ├── activity_setting.xml │ │ │ ├── android_simple_dropdown_item_1line.xml │ │ │ ├── dialog_add_attr_str.xml │ │ │ ├── dialog_add_group.xml │ │ │ ├── dialog_add_more.xml │ │ │ ├── dialog_choose_tag.xml │ │ │ ├── dialog_cloud_file_list.xml │ │ │ ├── dialog_create_tag.xml │ │ │ ├── dialog_create_totp.xml │ │ │ ├── dialog_donate.xml │ │ │ ├── dialog_entry_icon.xml │ │ │ ├── dialog_img_viewer.xml │ │ │ ├── dialog_loading.xml │ │ │ ├── dialog_modify_pass.xml │ │ │ ├── dialog_msg.xml │ │ │ ├── dialog_other_info.xml │ │ │ ├── dialog_otp_modify.xml │ │ │ ├── dialog_pass_key.xml │ │ │ ├── dialog_path_type.xml │ │ │ ├── dialog_play_donate.xml │ │ │ ├── dialog_quick_unlock.xml │ │ │ ├── dialog_search.xml │ │ │ ├── dialog_timer.xml │ │ │ ├── dialog_tip.xml │ │ │ ├── dialog_totp_display.xml │ │ │ ├── dialog_upgrade.xml │ │ │ ├── dialog_webdav_login_new.xml │ │ │ ├── fragment_change_db.xml │ │ │ ├── fragment_create_db_first.xml │ │ │ ├── fragment_create_db_second.xml │ │ │ ├── fragment_entry_record.xml │ │ │ ├── fragment_fingerprint_close.xml │ │ │ ├── fragment_fingerprint_desx.xml │ │ │ ├── fragment_list.xml │ │ │ ├── fragment_only_list.xml │ │ │ ├── fragment_open_db.xml │ │ │ ├── item_app_icon.xml │ │ │ ├── item_auto_fill.xml │ │ │ ├── item_choose_tag.xml │ │ │ ├── item_cloud_file_list.xml │ │ │ ├── item_entry.xml │ │ │ ├── item_entry_other_info.xml │ │ │ ├── item_icon.xml │ │ │ ├── item_ime_entry.xml │ │ │ ├── item_mian_content.xml │ │ │ ├── item_path_type.xml │ │ │ ├── item_search_record.xml │ │ │ ├── item_search_result.xml │ │ │ ├── item_simple.xml │ │ │ ├── layout_action_bar.xml │ │ │ ├── layout_chip_harvest.xml │ │ │ ├── layout_dialog_button.xml │ │ │ ├── layout_dialog_title.xml │ │ │ ├── layout_empty_fill.xml │ │ │ ├── layout_entry_attachment.xml │ │ │ ├── layout_entry_card_base_info.xml │ │ │ ├── layout_entry_card_list.xml │ │ │ ├── layout_entry_card_note.xml │ │ │ ├── layout_entry_card_tag.xml │ │ │ ├── layout_entry_create_str_card.xml │ │ │ ├── layout_entry_str.xml │ │ │ ├── layout_expand_attr_child.xml │ │ │ ├── layout_expand_child_file.xml │ │ │ ├── layout_expand_child_str.xml │ │ │ ├── layout_expand_title.xml │ │ │ ├── layout_kpa_ime.xml │ │ │ ├── layout_loading.xml │ │ │ ├── layout_otp_create_default.xml │ │ │ └── layout_otp_create_menu.xml │ │ │ ├── menu │ │ │ ├── entry_detail_file_summary.xml │ │ │ ├── entry_detail_fun_menu.xml │ │ │ ├── entry_detail_text_summary.xml │ │ │ ├── entry_modify_file_summary.xml │ │ │ ├── entry_modify_str_summary.xml │ │ │ ├── menu_entry_detail.xml │ │ │ ├── menu_entry_edit.xml │ │ │ ├── menu_group_detail.xml │ │ │ ├── pop_create_entry_summary.xml │ │ │ ├── pop_dele_history_record.xml │ │ │ ├── pop_entry_summary.xml │ │ │ └── pop_group_summary.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── raw │ │ │ ├── auth_config_single_account_debug.json │ │ │ ├── auth_config_single_account_release.json │ │ │ └── notices.xml │ │ │ ├── transition │ │ │ ├── changebounds_with_arcmotion.xml │ │ │ ├── fade_enter.xml │ │ │ ├── fade_exit.xml │ │ │ ├── slide_enter.xml │ │ │ ├── slide_exit.xml │ │ │ ├── slide_reeter.xml │ │ │ └── slide_return.xml │ │ │ ├── values-ar │ │ │ └── strings.xml │ │ │ ├── values-cs │ │ │ └── strings.xml │ │ │ ├── values-de-rDE │ │ │ ├── arrays.xml │ │ │ └── strings.xml │ │ │ ├── values-es │ │ │ └── strings.xml │ │ │ ├── values-fon │ │ │ └── strings.xml │ │ │ ├── values-fr-rCA │ │ │ ├── arrays.xml │ │ │ └── strings.xml │ │ │ ├── values-fr │ │ │ └── strings.xml │ │ │ ├── values-ja │ │ │ └── strings.xml │ │ │ ├── values-nb-rNO │ │ │ └── strings.xml │ │ │ ├── values-night │ │ │ └── colors.xml │ │ │ ├── values-nl │ │ │ └── strings.xml │ │ │ ├── values-pl │ │ │ └── strings.xml │ │ │ ├── values-pt-rBR │ │ │ └── strings.xml │ │ │ ├── values-pt │ │ │ └── strings.xml │ │ │ ├── values-ru-rRU │ │ │ ├── arrays.xml │ │ │ └── strings.xml │ │ │ ├── values-tr │ │ │ └── strings.xml │ │ │ ├── values-uk-rUA │ │ │ └── strings.xml │ │ │ ├── values-v29 │ │ │ └── styles.xml │ │ │ ├── values-zh-rCN │ │ │ └── strings.xml │ │ │ ├── values-zh-rTW │ │ │ ├── arrays.xml │ │ │ └── strings.xml │ │ │ ├── values │ │ │ ├── arrays.xml │ │ │ ├── attrs.xml │ │ │ ├── colors.xml │ │ │ ├── dimens.xml │ │ │ ├── ic_launcher_background.xml │ │ │ ├── ids.xml │ │ │ ├── pre_key.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ │ ├── xml-v25 │ │ │ └── shortcuts.xml │ │ │ ├── xml-v28 │ │ │ └── auto_fill_service_configuration.xml │ │ │ └── xml │ │ │ ├── app_setting.xml │ │ │ ├── aria_fileprovider_paths.xml │ │ │ ├── auto_fill_service_configuration.xml │ │ │ ├── db_setting.xml │ │ │ ├── input_method.xml │ │ │ ├── keyboard_pass_entry.xml │ │ │ ├── network_security_config.xml │ │ │ └── ui_setting.xml │ └── test │ │ └── java │ │ └── com │ │ └── lyy │ │ └── keepassa │ │ ├── LanguageTest.kt │ │ ├── LockTest.java │ │ └── PasswordBuildTest.kt └── 打包命令.txt ├── build.gradle ├── gradle.properties ├── gradle ├── testConfig.gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── img ├── EnScrrenshot │ ├── Screenshot_20210326_133559.png │ ├── Screenshot_20210326_133628.png │ ├── Screenshot_20210326_133803.png │ ├── Screenshot_20210326_133820.png │ ├── Screenshot_20210326_133837.png │ └── Screenshot_20210326_133955.png ├── Screenshot │ ├── Screenshot_1616425959.png │ ├── Screenshot_1616425970.png │ ├── Screenshot_1616426133.png │ ├── Screenshot_1616426147.png │ ├── Screenshot_1616426150.png │ ├── Screenshot_1616426345.png │ ├── Screenshot_1616426364.png │ └── Screenshot_1616426501.png ├── device-2020-08-16-123728.png ├── device-2020-08-16-133011.png ├── device-2020-08-16-140111.png ├── device-2020-08-16-141430.png ├── device-2020-08-18-105755.png ├── device-2020-08-18-112704.png ├── device-2020-08-18-112904.png ├── editor.png ├── ime.png ├── moveData.png ├── noteExpand.png ├── otpsetting.png ├── totpBar.png ├── totpDisplay.png ├── userDropdownList.png ├── webdavCreate.png └── x.png ├── libs.versions.toml ├── localMaven └── com │ └── alibaba │ └── arouter-register-asm7 │ ├── 1.0.2 │ ├── arouter-register-asm7-1.0.2-javadoc.jar │ ├── arouter-register-asm7-1.0.2-javadoc.jar.md5 │ ├── arouter-register-asm7-1.0.2-javadoc.jar.sha1 │ ├── arouter-register-asm7-1.0.2-sources.jar │ ├── arouter-register-asm7-1.0.2-sources.jar.md5 │ ├── arouter-register-asm7-1.0.2-sources.jar.sha1 │ ├── arouter-register-asm7-1.0.2.jar │ ├── arouter-register-asm7-1.0.2.jar.md5 │ ├── arouter-register-asm7-1.0.2.jar.sha1 │ ├── arouter-register-asm7-1.0.2.pom │ ├── arouter-register-asm7-1.0.2.pom.md5 │ └── arouter-register-asm7-1.0.2.pom.sha1 │ ├── maven-metadata.xml │ ├── maven-metadata.xml.md5 │ └── maven-metadata.xml.sha1 └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | .idea 4 | /local.properties 5 | /.idea/caches 6 | /.idea/libraries 7 | /.idea/modules.xml 8 | /.idea/workspace.xml 9 | /.idea/navEditor.xml 10 | /.idea/assetWizardSettings.xml 11 | .DS_Store 12 | /build 13 | /captures 14 | .externalNativeBuild 15 | .cxx 16 | app/build 17 | Frame/build 18 | KeepassLib/build 19 | node_modules 20 | cp_buglyQqUploadSymbolLib.jar 21 | /buglybin 22 | local.properties 23 | /VersionManager/build/ 24 | app/google-services.json 25 | -------------------------------------------------------------------------------- /VersionManager/src/main/java/com/alg/plugin/version/VersionManagerPlugin.java: -------------------------------------------------------------------------------- 1 | /* 2 | * This Java source file was generated by the Gradle 'init' task. 3 | */ 4 | package com.alg.plugin.version; 5 | 6 | import org.gradle.api.Project; 7 | import org.gradle.api.Plugin; 8 | 9 | /** 10 | * A simple 'hello world' plugin. 11 | */ 12 | public class VersionManagerPlugin implements Plugin { 13 | public void apply(Project project) { 14 | // Register a task 15 | project.getTasks().register("greeting", task -> { 16 | task.doLast(s -> System.out.println("Hello from plugin 'com.alg.plugin.version.greeting'")); 17 | }); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /VersionManager/src/test/java/com/alg/plugin/version/VersionManagerPluginTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * This Java source file was generated by the Gradle 'init' task. 3 | */ 4 | package com.alg.plugin.version; 5 | 6 | import org.gradle.testfixtures.ProjectBuilder; 7 | import org.gradle.api.Project; 8 | import org.junit.jupiter.api.Test; 9 | import static org.junit.jupiter.api.Assertions.*; 10 | 11 | /** 12 | * A simple unit test for the 'com.alg.plugin.version.greeting' plugin. 13 | */ 14 | class VersionManagerPluginTest { 15 | @Test void pluginRegistersATask() { 16 | // Create a test project and apply the plugin 17 | Project project = ProjectBuilder.builder().build(); 18 | project.getPlugins().apply("com.alg.plugin.version.greeting"); 19 | 20 | // Verify the result 21 | assertNotNull(project.getTasks().findByName("greeting")); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/channel: -------------------------------------------------------------------------------- 1 | play 2 | xiaomi 3 | coolapk 4 | huawei 5 | github 6 | -------------------------------------------------------------------------------- /app/firebase.gradle: -------------------------------------------------------------------------------- 1 | apply { 2 | plugin "com.android.application" 3 | } 4 | 5 | android.applicationVariants.configureEach { variant -> 6 | tasks.configureEach { 7 | if (it.name.contains("assemble") && it.name.contains("Release")) { 8 | println("开始上传符号表") 9 | it.doLast { 10 | 11 | def cmd = "${project.rootDir.absolutePath}/gradlew uploadCrashlyticsMappingFileDevRelease" 12 | def p = cmd.execute() 13 | p.waitForProcessOutput(System.out, System.err) 14 | } 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /app/multidex-config.txt: -------------------------------------------------------------------------------- 1 | org/greenrobot/eventbus/EventBus.class -------------------------------------------------------------------------------- /app/src/androidTest/java/com/lyy/keepassa/AutoFillTest.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | 10 | package com.lyy.keepassa 11 | 12 | import androidx.autofill.HintConstants 13 | import androidx.test.ext.junit.runners.AndroidJUnit4 14 | import org.junit.Test 15 | import org.junit.runner.RunWith 16 | import kotlin.reflect.full.memberProperties 17 | 18 | @RunWith(AndroidJUnit4::class) 19 | class AutoFillTest { 20 | 21 | @Test 22 | fun getMember() { 23 | val hintClazz = HintConstants::class 24 | hintClazz.memberProperties.forEach { member-> 25 | println("${member.name} -> ${member.call()}") 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /app/src/androidTest/java/com/lyy/keepassa/ComposeKeeTrayTotpTest.kt: -------------------------------------------------------------------------------- 1 | package com.lyy.keepassa 2 | 3 | import androidx.test.ext.junit.runners.AndroidJUnit4 4 | import com.keepassdroid.database.PwEntryV4 5 | import com.keepassdroid.database.security.ProtectedString 6 | import com.lyy.keepassa.util.totp.ComposeKeeTrayTotp 7 | import org.junit.Test 8 | import org.junit.runner.RunWith 9 | 10 | /** 11 | * @Author laoyuyu 12 | * @Description 13 | * @Date 1:50 PM 2024/2/22 14 | **/ 15 | @RunWith(AndroidJUnit4::class) 16 | class ComposeKeeTrayTotpTest { 17 | 18 | @Test 19 | fun testGetOtpPass() { 20 | val entry = PwEntryV4() 21 | entry.strings = hashMapOf().apply { 22 | put("STR_URL", ProtectedString(false, "sss")) 23 | put("TOTP Settings", ProtectedString(false, "30;6")) 24 | put("TOTP Seed", ProtectedString(true, "123")) 25 | } 26 | 27 | val token = ComposeKeeTrayTotp.getOtpPass(entry) 28 | println("token = $token") 29 | } 30 | } -------------------------------------------------------------------------------- /app/src/androidTest/java/com/lyy/keepassa/UtilTest.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | 10 | package com.lyy.keepassa 11 | 12 | import com.arialyy.frame.util.KeyStoreUtil 13 | import com.blankj.utilcode.util.EncryptUtils 14 | import com.lyy.keepassa.view.StorageType 15 | import org.junit.Test 16 | 17 | class UtilTest { 18 | 19 | @Test 20 | fun emunTEst(){ 21 | println(StorageType.AFS.name) 22 | } 23 | 24 | @Test 25 | fun keyStoreUtil(){ 26 | val keyStoreUtil = KeyStoreUtil() 27 | 28 | val p = keyStoreUtil.encryptData(keyStoreUtil.getEncryptCipher(), "123456") 29 | println("密文: ${p.first}") 30 | val end = keyStoreUtil.decryptData(keyStoreUtil.getDecryptCipher(p.second), p.first) 31 | println("明文:$end") 32 | 33 | } 34 | } -------------------------------------------------------------------------------- /app/src/main/assets/version_log/version_log_de_rDE.md: -------------------------------------------------------------------------------- 1 | #### 1.0.8 2 | - Das Absturzproblem beim Öffnen der Schnittstelle zum Entsperren von Fingerabdrücken wurde behoben 3 | 4 | #### 1.0.7 5 | - Dialogfeld "Verlaufsversion hinzufügen" 6 | -Erhöhen Sie die Vibrationsrückmeldung 7 | -Fix das Problem, dass Dropbox Open Record nicht gespeichert werden kann 8 | 9 | #### 1.0.6 10 | -Fix einige böse Fehler 11 | -Add [Fingerprint Unlock] (route: //keepassA.com/kpa? Activity = FingerprintActivity) 12 | 13 | #### 1.0.4 14 | -Fix einige böse Fehler 15 | 16 | #### 1.0.3 17 | -Fix einige böse Fehler 18 | 19 | #### 1.0.2 20 | -Fix einige böse Fehler 21 | 22 | #### 1.0.1 23 | -Fix einige böse Fehler -------------------------------------------------------------------------------- /app/src/main/assets/version_log/version_log_ru_rRU.md: -------------------------------------------------------------------------------- 1 | #### 1.0.8 2 | -Исправлена ​​проблема сбоя при открытии интерфейса разблокировки отпечатков пальцев 3 | 4 | #### 1.0.7 5 | -Добавить диалог версии истории 6 | -Повышение вибрации обратной связи 7 | -Исправить проблему, что открытая запись Dropbox не может быть сохранена 8 | 9 | #### 1.0.6 10 | -Исправить некоторые неприятные ошибки 11 | -Добавить [Отпечаток пальца] (маршрут: //keepassA.com/kpa? Activity = FingerprintActivity) 12 | 13 | #### 1.0.4 14 | -Исправить некоторые неприятные ошибки 15 | 16 | #### 1.0.3 17 | -Исправить некоторые неприятные ошибки 18 | 19 | #### 1.0.2 20 | -Исправить некоторые неприятные ошибки 21 | 22 | #### 1.0.1 23 | -Исправить некоторые неприятные ошибки -------------------------------------------------------------------------------- /app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/base/AnimState.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.base 9 | 10 | enum class AnimState { 11 | ALL, 12 | NOT_ANIM 13 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/base/BaseBottomSheetDialogFragment.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | 10 | package com.lyy.keepassa.base 11 | 12 | import android.content.Context 13 | import android.os.Bundle 14 | import androidx.databinding.ViewDataBinding 15 | import com.arialyy.frame.core.AbsBottomSheetDialogFragment 16 | import com.lyy.keepassa.util.LanguageUtil 17 | 18 | abstract class BaseBottomSheetDialogFragment : AbsBottomSheetDialogFragment() { 19 | 20 | override fun onAttach(context: Context) { 21 | super.onAttach(LanguageUtil.setLanguage(context, BaseApp.currentLang)) 22 | } 23 | 24 | override fun init(savedInstanceState: Bundle?) { 25 | } 26 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/base/BaseModule.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | 10 | package com.lyy.keepassa.base 11 | 12 | import com.arialyy.frame.base.BaseViewModule 13 | 14 | /** 15 | * Created by Lyy on 2016/9/27. 16 | */ 17 | open class BaseModule : BaseViewModule() -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/base/BaseService.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.base 9 | 10 | import android.app.Service 11 | import android.content.Context 12 | import com.lyy.keepassa.util.LanguageUtil 13 | 14 | /** 15 | * @Author laoyuyu 16 | * @Description 17 | * @Date 2021/5/6 18 | **/ 19 | abstract class BaseService:Service() { 20 | 21 | override fun attachBaseContext(newBase: Context?) { 22 | super.attachBaseContext(LanguageUtil.setLanguage(newBase!!, BaseApp.currentLang)) 23 | } 24 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/base/Constance.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | 10 | package com.lyy.keepassa.base 11 | 12 | class Constance { 13 | companion object { 14 | const val DEBUG = true 15 | const val PRE_FILE_NAME = "KeepassA" 16 | const val VERSION_CODE = "VersionCode" 17 | const val PRE_KEY_START_APP_NUM = "PRE_KEY_START_APP_NUM" 18 | const val START_DONATE_JUDGMENT_VALUE = 60 19 | const val KPA_IS_COLLECTION = "KPA_IS_COLLECTION" 20 | const val IS_AGREE_PRIVACY_AGREEMENT = "IS_AGREE_PRIVACY_AGREEMENT" 21 | } 22 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/base/KeyConstance.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.base 9 | 10 | object KeyConstance { 11 | const val KEY_DONT_SHOW_TIP = "KEY_DONT_SHOW_TIP" 12 | const val KEY_LAST_TIP_START_TIME = "KEY_LAST_TIP_START_TIME" 13 | const val TOTP = "TOTP" 14 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/base/OnDialogDismissListener.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.base 9 | 10 | /** 11 | * @Author laoyuyu 12 | * @Description 13 | * @Date 5:56 下午 2022/3/29 14 | **/ 15 | interface OnDialogDismissListener { 16 | fun onDismiss() 17 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/common/PassType.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.common 9 | 10 | /** 11 | * @Author laoyuyu 12 | * @Description 13 | * @Date 2021/3/24 14 | **/ 15 | object PassType { 16 | val ONLY_PASS = 0 17 | val PASS_AND_KEY = 1 18 | val ONLY_KEY = 2 19 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/common/SortType.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.common 9 | 10 | enum class SortType { 11 | NONE, 12 | CHAR_DESC, 13 | CHAR_ASC, 14 | TIME_DESC, 15 | TIME_ASC 16 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/dao/CloudServiceInfoDao.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | 10 | package com.lyy.keepassa.dao 11 | 12 | import androidx.room.Dao 13 | import androidx.room.Insert 14 | import androidx.room.Query 15 | import androidx.room.Update 16 | import com.lyy.keepassa.entity.CloudServiceInfo 17 | 18 | @Dao 19 | interface CloudServiceInfoDao { 20 | 21 | @Update 22 | suspend fun update(serviceInfo: CloudServiceInfo) 23 | 24 | @Query("SELECT * FROM CloudServiceInfo WHERE cloudPath=:uri") 25 | suspend fun queryServiceInfo(uri: String): CloudServiceInfo? 26 | 27 | @Insert 28 | suspend fun saveServiceInfo(serviceInfo: CloudServiceInfo) 29 | 30 | @Update 31 | suspend fun updateServiceInfo(serviceInfo: CloudServiceInfo) 32 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/dao/QuickUnlockDao.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | 10 | package com.lyy.keepassa.dao 11 | 12 | import androidx.room.Dao 13 | import androidx.room.Delete 14 | import androidx.room.Insert 15 | import androidx.room.Query 16 | import androidx.room.Update 17 | import com.lyy.keepassa.entity.QuickUnLockRecord 18 | 19 | @Dao 20 | interface QuickUnlockDao { 21 | 22 | @Query("SELECT * FROM QuickUnLockRecord WHERE dbUri=:dbUri") 23 | suspend fun findRecord(dbUri: String): QuickUnLockRecord? 24 | 25 | @Query("SELECT * FROM QuickUnLockRecord") 26 | suspend fun getAllRecord(): List? 27 | 28 | @Insert 29 | suspend fun saveRecord(record: QuickUnLockRecord) 30 | 31 | @Update 32 | suspend fun updateRecord(record: QuickUnLockRecord) 33 | 34 | @Delete 35 | suspend fun deleteRecord(record: QuickUnLockRecord) 36 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/dao/SearchDao.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | 10 | package com.lyy.keepassa.dao 11 | 12 | import androidx.room.Dao 13 | import androidx.room.Delete 14 | import androidx.room.Insert 15 | import androidx.room.Query 16 | import androidx.room.Update 17 | import com.lyy.keepassa.entity.SearchRecord 18 | 19 | @Dao 20 | interface SearchDao { 21 | 22 | @Insert 23 | suspend fun saveRecord(record: SearchRecord) 24 | 25 | @Query("SELECT * FROM SearchRecord WHERE title=:title") 26 | suspend fun getRecord(title: String): SearchRecord? 27 | 28 | @Query("SELECT * FROM SearchRecord ORDER BY time DESC LIMIT 5") 29 | suspend fun getSearchRecord(): List 30 | 31 | @Delete 32 | suspend fun delRecord(record: SearchRecord) 33 | 34 | @Update 35 | suspend fun updateRecord(record: SearchRecord) 36 | 37 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/entity/AutoFillParam.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | package com.lyy.keepassa.entity 10 | 11 | import android.os.Parcelable 12 | import kotlinx.parcelize.Parcelize 13 | 14 | /** 15 | * 自动填充参数 16 | */ 17 | @Parcelize 18 | data class AutoFillParam( 19 | val apkPkgName: String, // other apk packageName 20 | val domain: String? = null, 21 | val isSave: Boolean = false, // is save mode 22 | val saveUserName: String? = null, // User name at the of saving 23 | val savePass: String? = null // Password name at the of saving 24 | ) : Parcelable 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/entity/CloudServiceInfo.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | 10 | package com.lyy.keepassa.entity 11 | 12 | import androidx.room.ColumnInfo 13 | import androidx.room.Entity 14 | import androidx.room.PrimaryKey 15 | 16 | /** 17 | * 云端服务器验证信息,所有字段都是加密的 18 | */ 19 | @Entity 20 | class CloudServiceInfo( 21 | @PrimaryKey(autoGenerate = true) val uid: Int = 0, 22 | @ColumnInfo var userName: String? = null, 23 | @ColumnInfo var password: String? = null, 24 | // 云端路径 25 | @ColumnInfo val cloudPath: String 26 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/entity/CommonState.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.entity 9 | 10 | /** 11 | * @Author laoyuyu 12 | * @Description 13 | * @Date 3:45 PM 2024/2/1 14 | **/ 15 | enum class CommonState { 16 | CREATE, DELETE, MODIFY 17 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/entity/EntryRecord.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | 10 | package com.lyy.keepassa.entity 11 | 12 | import androidx.room.ColumnInfo 13 | import androidx.room.Entity 14 | import androidx.room.PrimaryKey 15 | 16 | @Entity 17 | class EntryRecord( 18 | @PrimaryKey(autoGenerate = true) val uid: Int = 0, 19 | // 数据库的本地文件uri 20 | var dbFileUri: String, 21 | @ColumnInfo var userName: String, 22 | @ColumnInfo var title: String, 23 | @ColumnInfo val uuid: ByteArray, 24 | @ColumnInfo var time: Long 25 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/entity/SearchRecord.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | 10 | package com.lyy.keepassa.entity 11 | 12 | import androidx.room.ColumnInfo 13 | import androidx.room.Entity 14 | import androidx.room.PrimaryKey 15 | 16 | @Entity 17 | class SearchRecord { 18 | @PrimaryKey(autoGenerate = true) var uid: Int = 0 19 | 20 | @ColumnInfo var title: String = "" 21 | @ColumnInfo var time: Long = 0 22 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/entity/TagBean.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.entity 9 | 10 | /** 11 | * @Author laoyuyu 12 | * @Description 13 | * @Date 3:45 PM 2023/10/26 14 | **/ 15 | data class TagBean( 16 | val tag: String, 17 | var isSet: Boolean = false 18 | ) : java.io.Serializable -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/entity/TotpType.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.entity 9 | 10 | enum class TotpType(val value: String) { 11 | 12 | DEFAULT("default"), 13 | STEAM("steam"), 14 | CUSTOM("custom"); 15 | 16 | companion object { 17 | fun from(s: String): TotpType { 18 | val tt = values().find { it.value == s } 19 | return tt ?: DEFAULT 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/event/AttrFileEvent.kt: -------------------------------------------------------------------------------- 1 | package com.lyy.keepassa.event 2 | 3 | import com.keepassdroid.database.security.ProtectedBinary 4 | import com.lyy.keepassa.entity.CommonState 5 | 6 | data class AttrFileEvent( 7 | val state: CommonState, 8 | val key: String, 9 | val file: ProtectedBinary, 10 | ) 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/event/AttrStrEvent.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | 10 | package com.lyy.keepassa.event 11 | 12 | import com.keepassdroid.database.security.ProtectedString 13 | import com.lyy.keepassa.entity.CommonState 14 | 15 | /** 16 | * 创建自定义字段事件 17 | */ 18 | data class AttrStrEvent( 19 | val state: CommonState, 20 | val key: String, 21 | val str: ProtectedString, 22 | val position: Int = 0 23 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/event/ChangeDbEvent.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | 10 | package com.lyy.keepassa.event 11 | 12 | import android.net.Uri 13 | import com.lyy.keepassa.view.StorageType 14 | 15 | /** 16 | * 切换数据库的事件 17 | */ 18 | data class ChangeDbEvent( 19 | /** 20 | * 数据库名 21 | */ 22 | var dbName: String, 23 | /** 24 | * 本地文件路径 25 | */ 26 | var localFileUri: Uri, 27 | /** 28 | * 云端文件路径 29 | */ 30 | var cloudPath: String? = null, 31 | var uriType: StorageType = StorageType.AFS, // uri类型,afs,google drive, 32 | var keyUri: Uri? = null 33 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/event/CheckEnvEvent.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.event 9 | 10 | /** 11 | * @Author laoyuyu 12 | * @Description check operating env event 13 | * @Date 2020/11/25 14 | **/ 15 | class CheckEnvEvent { 16 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/event/CloudFileSelectedEvent.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.event 9 | 10 | import com.lyy.keepassa.view.StorageType 11 | 12 | data class CloudFileSelectedEvent( 13 | val isSelectFile: Boolean, 14 | val fileFullPath: String, 15 | val storageType: StorageType 16 | ) 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/event/CollectionEvent.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.event 9 | 10 | import com.keepassdroid.database.PwEntryV4 11 | 12 | /** 13 | * @Author laoyuyu 14 | * @Description 15 | * @Date 19:58 下午 2022/3/29 16 | **/ 17 | data class CollectionEvent( 18 | val state: CollectionEventType = CollectionEventType.COLLECTION_STATE_TOTAL, 19 | val collectionNum: Int = 0, 20 | val pwEntryV4: PwEntryV4? = null 21 | ) 22 | 23 | enum class CollectionEventType { 24 | COLLECTION_STATE_ADD, 25 | COLLECTION_STATE_REMOVE, 26 | COLLECTION_STATE_TOTAL 27 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/event/DbHistoryEvent.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.event 9 | 10 | /** 11 | * @Author laoyuyu 12 | * @Description 13 | * @Date 2020/12/7 14 | **/ 15 | data class DbHistoryEvent(val isEmpty: Boolean) -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/event/DbPathEvent.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | 10 | package com.lyy.keepassa.event 11 | 12 | import android.net.Uri 13 | import com.lyy.keepassa.view.StorageType 14 | 15 | /** 16 | * 选择数据库事件 17 | */ 18 | data class DbPathEvent( 19 | /** 20 | * 数据库名 21 | */ 22 | var dbName: String, 23 | /** 24 | * 本地数据库uri 25 | */ 26 | var fileUri: Uri? = null, 27 | var storageType: StorageType = StorageType.AFS, // uri类型,afs,google drive 28 | /** 29 | * 云端路径 30 | */ 31 | var cloudDiskPath: String? = null 32 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/event/DelAttrFileEvent.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | 10 | package com.lyy.keepassa.event 11 | 12 | /** 13 | * 删除附件事件 14 | */ 15 | data class DelAttrFileEvent( 16 | val key: String 17 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/event/DelAttrStrEvent.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | 10 | package com.lyy.keepassa.event 11 | 12 | import com.keepassdroid.database.security.ProtectedString 13 | 14 | /** 15 | * 删除自定义字段事件 16 | */ 17 | data class DelAttrStrEvent( 18 | val key: String, 19 | val str: ProtectedString 20 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/event/EditorEvent.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.event 9 | 10 | /** 11 | * @Author laoyuyu 12 | * @Description 13 | * @Date 2020/12/2 14 | **/ 15 | data class EditorEvent( 16 | val requestCode: Int, 17 | val content: CharSequence? 18 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/event/FillInfoEvent.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.event 9 | 10 | /** 11 | * 填充时间信息 12 | * @Author laoyuyu 13 | * @Description 14 | * @Date 2020/10/27 15 | **/ 16 | data class FillInfoEvent(val infoStr: CharSequence) -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/event/KeyPathEvent.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | 10 | package com.lyy.keepassa.event 11 | 12 | import android.net.Uri 13 | 14 | /** 15 | * 获取key的事件 16 | */ 17 | data class KeyPathEvent( 18 | val keyUri: Uri, 19 | val keyName: String 20 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/event/ModifyDbNameEvent.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | 10 | package com.lyy.keepassa.event 11 | 12 | data class ModifyDbNameEvent(val dbName: String) -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/event/ModifyPassEvent.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | 10 | package com.lyy.keepassa.event 11 | 12 | data class ModifyPassEvent(val pass: String) -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/event/MoveEvent.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | 10 | package com.lyy.keepassa.event 11 | 12 | import com.keepassdroid.database.PwEntryV4 13 | import com.keepassdroid.database.PwGroupV4 14 | 15 | /** 16 | * 恢复数据的事件 17 | */ 18 | data class MoveEvent( 19 | val type: Int = MOVE_TYPE_GROUP, // 1:群组,2:条目 20 | val entryV4: PwEntryV4? = null, 21 | val pwGroupV4: PwGroupV4? = null 22 | ){ 23 | companion object{ 24 | const val MOVE_TYPE_GROUP = 1 // 群组 25 | const val MOVE_TYPE_ENTRY = 2 // 条目 26 | } 27 | } 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/event/MsgDialogEvent.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | 10 | package com.lyy.keepassa.event 11 | 12 | /** 13 | * msg dialog 事件 14 | */ 15 | data class MsgDialogEvent( 16 | /** 17 | * @param type 1、确认,2、覆盖、3、取消 18 | * 19 | */ 20 | val type: Int = 1, 21 | val requestCode: Int = 0 // 请求码 22 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/event/MultiChoiceEvent.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.event 9 | 10 | /** 11 | * @Author laoyuyu 12 | * @Description 13 | * @Date 2020/12/25 14 | **/ 15 | class MultiChoiceEvent { 16 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/event/ShowTOTPEvent.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | package com.lyy.keepassa.event 10 | 11 | data class ShowTOTPEvent(val show: Boolean = false) 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/event/TimeEvent.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | 10 | package com.lyy.keepassa.event 11 | 12 | /** 13 | * 时间事件 14 | */ 15 | data class TimeEvent( 16 | val year: Int, 17 | val month: Int, 18 | val dayOfMonth: Int, 19 | val hour: Int, 20 | val minute: Int 21 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/event/WebDavLoginEvent.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.event 9 | 10 | /** 11 | * @Author laoyuyu 12 | * @Description 13 | * @Date 2:52 下午 2022/4/21 14 | **/ 15 | data class WebDavLoginEvent( 16 | val uri: String, 17 | val userName: String, 18 | val pass: String, 19 | val loginSuccess: Boolean = false 20 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/ondrive/DriveItem.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.ondrive 9 | 10 | /** 11 | * @author laoyuyu 12 | * @date 2021/2/6 13 | */ 14 | data class DriveItem( 15 | val id: String, 16 | val driveType: String, 17 | val name: String 18 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/ondrive/MsalUploadSession.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.ondrive 9 | 10 | /** 11 | * @Author laoyuyu 12 | * @Description 13 | * @Date 2021/4/27 14 | * https://docs.microsoft.com/zh-cn/graph/api/resources/uploadsession?view=graph-rest-1.0 15 | **/ 16 | data class MsalUploadSession( 17 | val uploadUrl: String, // 上传路径 18 | val expirationDateTime: String, // 以 UTC 表示的上载会话过期的日期和时间。在此过期时间之前必须上载完整的文件文件。 19 | val nextExpectedRanges: List // range 0- 20 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/router/ServiceRouter.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.router 9 | 10 | import com.arialyy.frame.router.RouterPath 11 | import com.lyy.keepassa.service.feat.KdbHandlerService 12 | import com.lyy.keepassa.service.feat.KdbOpenService 13 | import com.lyy.keepassa.service.feat.KpaSdkService 14 | 15 | /** 16 | * @Author laoyuyu 17 | * @Description 18 | * @Date 2:05 下午 2022/3/24 19 | **/ 20 | interface ServiceRouter { 21 | 22 | @RouterPath(path = "/service/kpaSdk") 23 | fun getKpaSdkService(): KpaSdkService 24 | 25 | @RouterPath(path = "/service/kdbHandler") 26 | fun getDbSaveService(): KdbHandlerService 27 | 28 | @RouterPath(path = "/service/kdbOpen") 29 | fun getDbOpenService(): KdbOpenService 30 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/service/autofill/AutoFillClickReceiver.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.service.autofill 9 | 10 | import android.content.BroadcastReceiver 11 | import android.content.Context 12 | import android.content.Intent 13 | import timber.log.Timber 14 | 15 | /** 16 | * @Author laoyuyu 17 | * @Description 18 | * @Date 2021/7/10 19 | **/ 20 | class AutoFillClickReceiver: BroadcastReceiver() { 21 | companion object{ 22 | const val ACTION_CLICK_OTHER = "ACTION_CLICK_OTHER" 23 | } 24 | 25 | override fun onReceive(context: Context, intent: Intent) { 26 | Timber.d("action = ${intent.action}") 27 | } 28 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/service/feat/IFeature.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.service.feat 9 | 10 | import android.content.Context 11 | 12 | interface IFeature { 13 | 14 | fun init(context: Context) 15 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/util/QuickUnLockUtil.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | 10 | package com.lyy.keepassa.util; 11 | 12 | /** 13 | * 密码工具 14 | */ 15 | public class QuickUnLockUtil { 16 | /** 17 | * 快速解锁保存的信息 18 | */ 19 | private static final String QUICK_UN_LOCK_FILE_NAME = "91b7b54da7f5154020a528"; 20 | 21 | static { 22 | System.loadLibrary("keepassA"); 23 | } 24 | 25 | /** 26 | * 加密字符串 27 | * 28 | * @param str 明文 29 | * @return 密文 30 | */ 31 | //@Deprecated(message = "不安全") 32 | public native static String encryptStr(String str); 33 | 34 | /** 35 | * 解密字符串 36 | * 37 | * @param str 密文 38 | * @return 明文 39 | */ 40 | public native static String decryption(String str); 41 | 42 | /** 43 | * 获取数据库密码 44 | */ 45 | public native static String getDbPass(); 46 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/util/cloud/CloudFileInfo.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | 10 | package com.lyy.keepassa.util.cloud 11 | 12 | import java.util.Date 13 | 14 | /** 15 | * 云端文件信息 16 | */ 17 | data class CloudFileInfo( 18 | val fileKey: String, // webDav/dropbox中为云端路径,onedrive为id 19 | val fileName: String, // 文件名 20 | val serviceModifyDate: Date, // 该文件在云端的修改时间 21 | val size: Long, // 文件大小 22 | val isDir: Boolean, 23 | val contentHash: String? = null, // hash 24 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/util/cloud/CloudUtilFactory.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | 10 | package com.lyy.keepassa.util.cloud 11 | 12 | import com.lyy.keepassa.view.StorageType 13 | import com.lyy.keepassa.view.StorageType.DROPBOX 14 | import com.lyy.keepassa.view.StorageType.ONE_DRIVE 15 | import com.lyy.keepassa.view.StorageType.WEBDAV 16 | 17 | /** 18 | * 云端文件工具工厂 19 | */ 20 | object CloudUtilFactory { 21 | 22 | fun getCloudUtil(storageType: StorageType): ICloudUtil { 23 | return when (storageType) { 24 | DROPBOX -> DropboxUtil 25 | WEBDAV -> WebDavUtil 26 | ONE_DRIVE -> OneDriveUtil 27 | else -> throw IllegalArgumentException("不识别的工具类型:${storageType}") 28 | } 29 | } 30 | 31 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/util/cloud/PwDataMap.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.util.cloud 9 | 10 | import com.keepassdroid.database.PwDataInf 11 | 12 | data class PwDataMap( 13 | val cloudPwData: PwDataInf, 14 | val localPwData: PwDataInf 15 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/util/cloud/SynStateCode.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | 10 | package com.lyy.keepassa.util.cloud 11 | 12 | interface SynStateCode { 13 | val STATE_SUCCEED: Int 14 | get() = 0 15 | val STATE_FAIL: Int 16 | get() = 1 17 | val STATE_DEL_FILE_FAIL: Int 18 | get() = 2 19 | 20 | val STATE_DOWNLOAD_FILE_FAIL: Int 21 | get() = 3 22 | val STATE_SAVE_DB_FAIL: Int 23 | get() = 4 24 | val STATE_CANCEL: Int 25 | get() = 100 26 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/util/cloud/interceptor/DbSyncRequest.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.util.cloud.interceptor 9 | 10 | import com.lyy.keepassa.entity.DbHistoryRecord 11 | import com.lyy.keepassa.util.cloud.ICloudUtil 12 | 13 | /** 14 | * @Author laoyuyu 15 | * @Description 16 | * @Date 4:41 下午 2021/12/24 17 | **/ 18 | class DbSyncRequest constructor( 19 | var record: DbHistoryRecord, 20 | var syncUtil: ICloudUtil, 21 | val interceptors: List, 22 | val index: Int = 0 23 | ) { 24 | 25 | fun nextInterceptor(): IDbSyncInterceptor? { 26 | if (index == interceptors.size) { 27 | return null 28 | } 29 | return interceptors[index + 1] 30 | } 31 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/util/cloud/interceptor/DbSyncResponse.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.util.cloud.interceptor 9 | 10 | /** 11 | * @Author laoyuyu 12 | * @Description 13 | * @Date 4:38 下午 2021/12/24 14 | **/ 15 | class DbSyncResponse constructor(var code: Int, var msg: String) { 16 | 17 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/util/cloud/interceptor/DbSyncUploadInterceptor.kt: -------------------------------------------------------------------------------- 1 | package com.lyy.keepassa.util.cloud.interceptor 2 | 3 | import com.lyy.keepassa.base.BaseApp 4 | import com.lyy.keepassa.util.cloud.DbSynUtil 5 | import timber.log.Timber 6 | 7 | /** 8 | * @Author laoyuyu 9 | * @Description 10 | * @Date 5:08 下午 2021/12/24 11 | **/ 12 | class DbSyncUploadInterceptor : IDbSyncInterceptor { 13 | override suspend fun intercept(request: DbSyncRequest): DbSyncResponse { 14 | val util = request.syncUtil 15 | val record = request.record 16 | val b = util.uploadFile(BaseApp.APP, record) 17 | val msg = "上传文件${if (b) "成功" else "失败"}, fileKey = ${record.cloudDiskPath}" 18 | Timber.d(msg) 19 | return DbSyncResponse(if (b) DbSynUtil.STATE_SUCCEED else DbSynUtil.STATE_FAIL, msg) 20 | } 21 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/util/cloud/interceptor/IDbSyncInterceptor.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.util.cloud.interceptor 9 | 10 | import timber.log.Timber 11 | 12 | /** 13 | * @Author laoyuyu 14 | * @Description 15 | * @Date 4:34 下午 2021/12/24 16 | **/ 17 | interface IDbSyncInterceptor { 18 | 19 | suspend fun intercept(request: DbSyncRequest): DbSyncResponse 20 | 21 | fun error(code: Int, msg: String): DbSyncResponse { 22 | Timber.e(msg) 23 | return DbSyncResponse(code, msg) 24 | } 25 | 26 | fun normal(code: Int, msg: String): DbSyncResponse { 27 | Timber.i(msg) 28 | return DbSyncResponse(code, msg) 29 | } 30 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/util/totp/OtpEnum.kt: -------------------------------------------------------------------------------- 1 | package com.lyy.keepassa.util.totp 2 | 3 | /** 4 | * @Author laoyuyu 5 | * @Description 6 | * @Date 5:24 PM 2024/1/11 7 | **/ 8 | enum class OtpEnum { 9 | GOOGLE_OTP, 10 | KEEPASSXC, 11 | TRAY_TOTP, 12 | KEEPASS 13 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/util/totp/SecretHexType.kt: -------------------------------------------------------------------------------- 1 | package com.lyy.keepassa.util.totp 2 | 3 | enum class SecretHexType { 4 | UTF_8, HEX, BASE_32, BASE_64 5 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/view/StorageType.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | 10 | package com.lyy.keepassa.view 11 | 12 | import androidx.annotation.DrawableRes 13 | import com.lyy.keepassa.R 14 | import com.lyy.keepassa.base.BaseApp 15 | 16 | enum class StorageType( 17 | var type: Int, 18 | @DrawableRes var icon: Int, 19 | var lable: String 20 | ) { 21 | AFS(0, R.drawable.ic_android, BaseApp.APP.getString(R.string.afs)), 22 | DROPBOX(1, R.drawable.ic_dropbox, "Dropbox"), 23 | ONE_DRIVE(2, R.drawable.ic_onedrive, "OneDrive"), 24 | GOOGLE_DRIVE(3, R.drawable.ic_google_drive, "GoogleDrive"), 25 | WEBDAV(4, R.drawable.ic_http, "WebDav"), 26 | FTP(5, R.drawable.ic_ftp, "Ftp"), 27 | UNKNOWN(-1, R.drawable.ic_android, "Unknown") 28 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/view/create/entry/CreateEnum.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.view.create.entry 9 | 10 | /** 11 | * @Author laoyuyu 12 | * @Description 13 | * @Date 7:28 PM 2023/10/13 14 | **/ 15 | enum class CreateEnum { 16 | MODIFY, 17 | CREATE 18 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/view/detail/AppIconAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.lyy.keepassa.view.detail 2 | 3 | import com.blankj.utilcode.util.AppUtils 4 | import com.lyy.keepassa.base.AbsViewBindingAdapter 5 | import com.lyy.keepassa.databinding.ItemAppIconBinding 6 | import com.lyy.keepassa.util.loadImg 7 | 8 | class AppIconAdapter : AbsViewBindingAdapter() { 9 | override fun bindData(binding: ItemAppIconBinding, item: String) { 10 | binding.ivIcon.apply { 11 | // val drawable = ResUtil.getDrawable(R.drawable.ic_app) 12 | val drawable = AppUtils.getAppIcon(item) 13 | loadImg(drawable) 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/view/dialog/DialogBtnClicker.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | package com.lyy.keepassa.view.dialog 10 | 11 | import android.view.View 12 | import androidx.annotation.Keep 13 | 14 | /** 15 | * @Author laoyuyu 16 | * @Description 17 | * @Date 10:35 AM 2023/10/26 18 | **/ 19 | @Keep 20 | interface DialogBtnClicker { 21 | fun onEnter(v: View){} 22 | 23 | fun onCancel(v: View){} 24 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/view/dialog/OnMsgBtClickListener.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | package com.lyy.keepassa.view.dialog; 10 | 11 | import android.widget.Button 12 | import java.io.Serializable 13 | 14 | /** 15 | * @author laoyuyu 16 | * @date 2021/9/5 17 | */ 18 | interface OnMsgBtClickListener { 19 | 20 | fun onCover(v: Button){} 21 | 22 | fun onEnter(v: Button) 23 | 24 | fun onCancel(v: Button) 25 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/view/dialog/otp/CreateOtpModule.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.view.dialog.otp 9 | 10 | import com.lyy.keepassa.base.BaseModule 11 | import com.lyy.keepassa.entity.IOtpBean 12 | import com.lyy.keepassa.util.totp.OtpEnum 13 | import kotlinx.coroutines.flow.MutableSharedFlow 14 | 15 | /** 16 | * @Author laoyuyu 17 | * @Description 18 | * @Date 3:38 下午 2022/1/19 19 | **/ 20 | class CreateOtpModule : BaseModule() { 21 | companion object { 22 | val otpFlow = MutableSharedFlow>(0) 23 | } 24 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/view/dialog/otp/modify/IOtpModifyHandler.kt: -------------------------------------------------------------------------------- 1 | package com.lyy.keepassa.view.dialog.otp.modify 2 | 3 | import com.lyy.keepassa.util.totp.TokenCalculator 4 | import com.lyy.keepassa.util.totp.TokenCalculator.HashAlgorithm 5 | 6 | /** 7 | * @Author laoyuyu 8 | * @Description 9 | * @Date 5:40 PM 2024/1/25 10 | **/ 11 | internal interface IOtpModifyHandler { 12 | fun initView(context: ModifyOtpDialog) 13 | 14 | fun save( 15 | context: ModifyOtpDialog, 16 | secret: String, 17 | arithmetic: HashAlgorithm = HashAlgorithm.SHA1, 18 | digits: Int = TokenCalculator.TOTP_DEFAULT_DIGITS, 19 | period: Int = TokenCalculator.TOTP_DEFAULT_PERIOD, 20 | isSteam: Boolean = false 21 | ) { 22 | // context.lifecycleScope.launch { 23 | // KpaUtil.kdbHandlerService.saveOnly { 24 | // context.dismiss() 25 | // } 26 | // } 27 | } 28 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/view/dialog/otp/modify/OtpKeepOtherHandler.kt: -------------------------------------------------------------------------------- 1 | package com.lyy.keepassa.view.dialog.otp.modify 2 | 3 | /** 4 | * @Author laoyuyu 5 | * @Description 6 | * @Date 2:51 PM 2024/2/2 7 | **/ 8 | class OtpKeepOtherHandler:IOtpModifyHandler { 9 | override fun initView(context: ModifyOtpDialog) { 10 | val binding = context.binding 11 | // binding.contentLayout.strKey.text = context.pwEntryV4. 12 | } 13 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/view/dialog/webdav/IWebDavLoginAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.lyy.keepassa.view.dialog.webdav 2 | 3 | /** 4 | * @Author laoyuyu 5 | * @Description 6 | * @Date 11:25 上午 2022/7/21 7 | **/ 8 | internal interface IWebDavLoginAdapter { 9 | 10 | fun updateState() 11 | 12 | fun startLogin(userName: String, password: String) 13 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/view/dialog/webdav/OtherLoginAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.lyy.keepassa.view.dialog.webdav 2 | 3 | import com.blankj.utilcode.util.KeyboardUtils 4 | import com.lyy.keepassa.databinding.DialogWebdavLoginNewBinding 5 | 6 | /** 7 | * @Author laoyuyu 8 | * @Description 9 | * @Date 11:46 上午 2022/7/21 10 | **/ 11 | internal class OtherLoginAdapter( 12 | binding: DialogWebdavLoginNewBinding, 13 | context: WebDavLoginDialogNew 14 | ) : DefaultLoginAdapter(binding, context) { 15 | override fun updateState() { 16 | binding.uri.setText("") 17 | KeyboardUtils.showSoftInput(binding.uri) 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/view/fingerprint/FingerprintCloseFragment.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | 10 | package com.lyy.keepassa.view.fingerprint 11 | 12 | import android.annotation.SuppressLint 13 | import com.lyy.keepassa.R 14 | import com.lyy.keepassa.base.BaseFragment 15 | import com.lyy.keepassa.databinding.FragmentFingerprintCloseBinding 16 | 17 | /** 18 | * 指纹关闭展示页面 19 | */ 20 | class FingerprintCloseFragment : BaseFragment() { 21 | @SuppressLint("SetTextI18n") 22 | override fun initData() { 23 | binding.tvHint.text = "${getString(R.string.fingerprint_unlock)}${getString(R.string.closed)}" 24 | } 25 | 26 | override fun setLayoutId(): Int { 27 | return R.layout.fragment_fingerprint_close 28 | } 29 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/view/launcher/IAutoFillFinishDelegate.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.view.launcher 9 | 10 | import android.content.Intent 11 | import com.lyy.keepassa.base.BaseActivity 12 | import com.lyy.keepassa.entity.AutoFillParam 13 | 14 | internal interface IAutoFillFinishDelegate { 15 | 16 | fun handleAutoFill(autoFillParam: AutoFillParam) 17 | 18 | fun onActivityResult(data: Intent?) 19 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/view/launcher/IOpenDbDelegate.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.view.launcher 9 | 10 | import android.content.Intent 11 | import androidx.lifecycle.Lifecycle 12 | import androidx.lifecycle.LifecycleObserver 13 | import androidx.lifecycle.OnLifecycleEvent 14 | 15 | /** 16 | * @Author laoyuyu 17 | * @Description 18 | * @Date 2021/4/25 19 | **/ 20 | interface IOpenDbDelegate : LifecycleObserver { 21 | 22 | fun startFlow(fragment: ChangeDbFragment) 23 | 24 | @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) 25 | fun onResume() 26 | 27 | fun onActivityResult( 28 | requestCode: Int, 29 | resultCode: Int, 30 | data: Intent? 31 | ) 32 | 33 | @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) 34 | fun destroy() 35 | 36 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/view/main/SearchSuggestionProvider.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | 10 | package com.lyy.keepassa.view.main 11 | 12 | import android.content.SearchRecentSuggestionsProvider 13 | 14 | class SearchSuggestionProvider : SearchRecentSuggestionsProvider() { 15 | init { 16 | setupSuggestions(AUTHORITY, MODE) 17 | } 18 | 19 | companion object { 20 | const val AUTHORITY = "com.example.MySuggestionProvider" 21 | const val MODE: Int = SearchRecentSuggestionsProvider.DATABASE_MODE_QUERIES 22 | } 23 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/view/main/chain/DialogChain.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.view.main.chain 9 | 10 | import com.lyy.keepassa.view.main.MainActivity 11 | 12 | /** 13 | * @Author laoyuyu 14 | * @Description 15 | * @Date 2023/4/22 16 | **/ 17 | class DialogChain( 18 | val activity: MainActivity, 19 | private val interceptors: List, 20 | private val index: Int = 0 21 | ) : IMainDialogInterceptor.IChain { 22 | 23 | override fun proceed(context: MainActivity): MainDialogResponse { 24 | if (index > interceptors.size - 1) { 25 | return MainDialogResponse(MainDialogResponse.RESPONSE_FINISH) 26 | } 27 | val interceptor = interceptors[index] 28 | val next = DialogChain(activity, interceptors, index + 1) 29 | return interceptor.intercept(next) 30 | } 31 | 32 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/view/main/chain/IMainDialogInterceptor.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.view.main.chain 9 | 10 | import com.lyy.keepassa.view.main.MainActivity 11 | 12 | /** 13 | * @Author laoyuyu 14 | * @Description 15 | * @Date 2023/4/22 16 | **/ 17 | interface IMainDialogInterceptor { 18 | fun intercept(chain: DialogChain): MainDialogResponse 19 | 20 | public interface IChain { 21 | fun proceed(context: MainActivity): MainDialogResponse 22 | 23 | } 24 | 25 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/view/main/chain/MainDialogResponse.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | package com.lyy.keepassa.view.main.chain 9 | 10 | /** 11 | * @Author laoyuyu 12 | * @Description 13 | * @Date 2023/4/22 14 | **/ 15 | data class MainDialogResponse(val code: Int) { 16 | companion object { 17 | const val RESPONSE_OK = 1 18 | const val RESPONSE_BREAK = 2 19 | const val RESPONSE_FINISH = 3 20 | } 21 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/view/menu/IPopMenu.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | 10 | package com.lyy.keepassa.view.menu 11 | 12 | interface IPopMenu { 13 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lyy/keepassa/view/search/DelListener.kt: -------------------------------------------------------------------------------- 1 | package com.lyy.keepassa.view.search 2 | 3 | import android.view.View 4 | import com.lyy.keepassa.entity.SimpleItemEntity 5 | 6 | /** 7 | * @Author laoyuyu 8 | * @Description 9 | * @Date 11:19 上午 2022/7/11 10 | **/ 11 | interface DelListener { 12 | fun onDel(v: View, position: Int) 13 | } -------------------------------------------------------------------------------- /app/src/main/jni/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.4.1) 2 | 3 | add_library( 4 | keepassA SHARED 5 | encrypt_str.cpp 6 | aes/aes_cbc.c 7 | aes/aes_core.c 8 | aes/aes_ecb.c 9 | aes/cbc128.c 10 | ) 11 | 12 | #find_library( 13 | # aesUtil 14 | # final_key 15 | #) -------------------------------------------------------------------------------- /app/src/main/jni/aes/aes_cbc.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #include "aes.h" 11 | #include "modes.h" 12 | 13 | void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, 14 | size_t len, const AES_KEY *key, 15 | unsigned char *ivec, const int enc) 16 | { 17 | 18 | if (enc) 19 | CRYPTO_cbc128_encrypt(in, out, len, key, ivec, 20 | (block128_f) AES_encrypt); 21 | else 22 | CRYPTO_cbc128_decrypt(in, out, len, key, ivec, 23 | (block128_f) AES_decrypt); 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/jni/aes/aes_ecb.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #include 11 | 12 | #include "aes.h" 13 | #include "aes_locl.h" 14 | 15 | void AES_ecb_encrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key, const int enc) 16 | { 17 | assert(in && out && key); 18 | assert((AES_ENCRYPT == enc) || (AES_DECRYPT == enc)); 19 | 20 | if (AES_ENCRYPT == enc) 21 | AES_encrypt(in, out, key); 22 | else 23 | AES_decrypt(in, out, key); 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/jni/aes/modes.h: -------------------------------------------------------------------------------- 1 | #ifndef HEADER_MODES_H 2 | # define HEADER_MODES_H 3 | 4 | //# include "/Users/aria/dev/android/sdk/ndk/21/toolchains/llvm/prebuilt/darwin-x86_64/lib64/clang/9.0.8/include/stddef.h" 5 | 6 | #include 7 | 8 | typedef void (*block128_f)(const unsigned char in[16], 9 | unsigned char out[16], const void *key); 10 | 11 | typedef void (*cbc128_f)(const unsigned char *in, unsigned char *out, 12 | size_t len, const void *key, 13 | unsigned char ivec[16], int enc); 14 | 15 | void CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out, 16 | size_t len, const void *key, 17 | unsigned char ivec[16], block128_f block); 18 | 19 | void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out, 20 | size_t len, const void *key, 21 | unsigned char ivec[16], block128_f block); 22 | 23 | 24 | #endif 25 | -------------------------------------------------------------------------------- /app/src/main/jniLibs/arm64-v8a/libc++_shared.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/app/src/main/jniLibs/arm64-v8a/libc++_shared.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/arm64-v8a/libmarsxlog.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/app/src/main/jniLibs/arm64-v8a/libmarsxlog.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi-v7a/libc++_shared.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/app/src/main/jniLibs/armeabi-v7a/libc++_shared.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi-v7a/libmarsxlog.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/app/src/main/jniLibs/armeabi-v7a/libmarsxlog.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/x86/libc++_shared.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/app/src/main/jniLibs/x86/libc++_shared.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/x86/libmarsxlog.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/app/src/main/jniLibs/x86/libmarsxlog.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/x86_64/libc++_shared.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/app/src/main/jniLibs/x86_64/libc++_shared.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/x86_64/libmarsxlog.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/app/src/main/jniLibs/x86_64/libmarsxlog.so -------------------------------------------------------------------------------- /app/src/main/res/anim/dialog_y_enter.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/anim/dialog_y_exit.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/anim/translate_bottom_in.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/anim/translate_left_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/anim/translate_left_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/anim/translate_right_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/anim/translate_right_out.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/color/selector_blue_gray_text_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v21/ripple_primary_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v21/ripple_white_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_circle.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_ed.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_gray_radius_4.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_ime_entry.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_ime_key.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_line.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_str_attr.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_white_radius_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_white_radius_32.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_white_radius_4.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_white_radius_8.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_add.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_add_24px.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_add_blue_24px.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_add_photo_alternate_24px.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_alipay.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_anim.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow_left.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow_left_black.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_attr_file.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_auto.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_arrow_drop_down_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_arrow_drop_up_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_bug_report_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_casino_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_confirmation_number_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_content_copy_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_edit_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_event_busy_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_g_translate_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_label_24.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_link_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_open_with.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_photo_camera_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_close.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_create_time.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_del.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_delete_sweep.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_detail_edit.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_done.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_done_all.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_download_24px.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_dropbox.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_eco.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_fab_dir.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_favorite_24px.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_feedback_24px.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_file_24px.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_folder_24px.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_google_drive.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_google_play.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_help_filled.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_history.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_image_blue_24px.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_image_broken_24px.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_ime_backspace.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_ime_close.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_ime_enter.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_ime_keyboard.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_ime_lock.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_ime_other_info.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_ime_password.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_ime_user.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_info_filled.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_keyboard.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_lightbulb_on.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_linear_scale.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_lock.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_lock_24px.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_lose_time.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_modify_time.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_more_read.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_notice.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_other.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_password.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_paypal.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_primary_close.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_qr_code_scanner.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_refresh_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_save_24px.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_screen_lock_portrait_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_search.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_security_24px.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_security_24px_white.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_server.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_setting.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_setting_lock.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_share_24px.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_sort_by_char.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_sort_down.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_sort_up.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_star.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_star_outline.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_star_rate.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_start_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_state_bar.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_swap_horiz.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_tab_history.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_tab_history_selected.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_tag.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_text_fields_24px.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_theme_style.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_title_24px.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_token_blue.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_token_grey.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_token_txt_grey.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_user.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_view.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_view_black.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_view_headline_24px.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_view_off.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_visibility_off.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ripple_primary_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ripple_white_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_ic_tab_db.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_ic_tab_history.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_ic_tab_token.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_pass_visibility.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_password.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/tip_1_0.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/app/src/main/res/drawable/tip_1_0.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable/tip_1_1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/app/src/main/res/drawable/tip_1_1.webp -------------------------------------------------------------------------------- /app/src/main/res/font/roboto_bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/app/src/main/res/font/roboto_bold.ttf -------------------------------------------------------------------------------- /app/src/main/res/font/roboto_regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/app/src/main/res/font/roboto_regular.ttf -------------------------------------------------------------------------------- /app/src/main/res/font/roboto_thinitalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/app/src/main/res/font/roboto_thinitalic.ttf -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_icon.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 11 | 12 | 13 | 14 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_markdown_editor.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_only_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | 13 | 14 | 22 | 23 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_setting.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/layout/android_simple_dropdown_item_1line.xml: -------------------------------------------------------------------------------- 1 | 2 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_add_more.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 17 | 18 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_loading.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_entry_record.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 14 | 15 | 20 | 21 | 22 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_fingerprint_close.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_app_icon.xml: -------------------------------------------------------------------------------- 1 | 2 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_simple.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 16 | 17 | 18 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_action_bar.xml: -------------------------------------------------------------------------------- 1 | 2 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_chip_harvest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_empty_fill.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_loading.xml: -------------------------------------------------------------------------------- 1 | 2 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/menu/entry_detail_file_summary.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | 11 | 16 | 17 | 22 | 23 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/menu/entry_detail_fun_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 13 | 14 | 19 | 20 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/menu/entry_detail_text_summary.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 11 | 12 | 17 | 18 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/menu/entry_modify_file_summary.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 11 | 12 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/menu/entry_modify_str_summary.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 11 | 12 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_entry_detail.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | 17 | 18 | 23 | 24 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_entry_edit.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 10 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_group_detail.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | 11 | 12 | 16 | 17 | 21 | 22 | 26 | 27 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /app/src/main/res/menu/pop_create_entry_summary.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | 11 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/menu/pop_dele_history_record.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/menu/pop_group_summary.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 11 | 12 | 17 | 18 | 23 | 24 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/transition/changebounds_with_arcmotion.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/transition/fade_enter.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/transition/fade_exit.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/transition/slide_enter.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/transition/slide_exit.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/transition/slide_reeter.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/transition/slide_return.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/values-ar/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | قاعدة البيانات 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-cs/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Databáze 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-de-rDE/arrays.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/values-fon/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/values-ja/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/values-night/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFFFFF 4 | #C9C4CE 5 | #2E2F2F 6 | #928F98 7 | #2E2F2F 8 | #2E2F2F 9 | #33F1F1F1 10 | -------------------------------------------------------------------------------- /app/src/main/res/values-nl/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Database 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-pt-rBR/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Base de dados 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-pt/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Base de dados 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-ru-rRU/arrays.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/values-v29/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 16dp 6 | 60dp 7 | 48dp 8 | 9 | 10 | 11 | 28dp 12 | 30dp 13 | 90dp 14 | 15 | 1500 16 | 600 17 | 500 18 | 200 19 | 350dp 20 | 340dp 21 | 22 | 23 | 48dp 24 | 80dp 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFFFFF 4 | -------------------------------------------------------------------------------- /app/src/main/res/values/ids.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | @drawable/ic_android 5 | @drawable/ic_dropbox 6 | @drawable/ic_onedrive 7 | @drawable/ic_http 8 | @drawable/ic_google_drive 9 | @drawable/ic_ftp 10 | @drawable/ic_ssh 11 | 12 | 13 | 14 | @drawable/ic_notice 15 | @drawable/ic_attr_file 16 | @drawable/ic_lose_time 17 | 18 | 19 | 20 | @drawable/ic_notice 21 | @drawable/ic_attr_str 22 | @drawable/ic_attr_file 23 | @drawable/ic_token_grey 24 | @drawable/ic_tag 25 | @drawable/ic_net 26 | @drawable/ic_lose_time 27 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/xml/aria_fileprovider_paths.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | 10 | 13 | 14 | 17 | 18 | 21 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/xml/input_method.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/xml/keyboard_pass_entry.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/xml/network_security_config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | android.bugly.qq.com 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/test/java/com/lyy/keepassa/LanguageTest.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2020 AriaLyy(https://github.com/AriaLyy/KeepassA) 3 | * 4 | * This Source Code Form is subject to the terms of the Mozilla Public 5 | * License, v. 2.0. If a copy of the MPL was not distributed with this 6 | * file, you can obtain one at http://mozilla.org/MPL/2.0/. 7 | */ 8 | 9 | 10 | package com.lyy.keepassa 11 | 12 | import com.lyy.keepassa.util.LanguageUtil 13 | import org.junit.Test 14 | 15 | class LanguageTest { 16 | 17 | @Test 18 | fun getSysCurrentLanguage(){ 19 | print(LanguageUtil.getSysCurrentLan()) 20 | } 21 | 22 | @Test 23 | fun checkUrl(){ 24 | val rs = "^(((file|gopher|news|nntp|telnet|http|ftp|https|ftps|sftp)://)|(www\\.))+(([a-zA-Z0-9\\._-]+\\.[a-zA-Z]{2,6})|([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}))(/[a-zA-Z0-9\\&%_\\./-~-]*)?\$" 25 | val r1 = Regex(rs) 26 | print(r1.matches("http://baiducom")) 27 | } 28 | } -------------------------------------------------------------------------------- /app/打包命令.txt: -------------------------------------------------------------------------------- 1 | ./gradlew assembleRelease --> ./gradlew resguardRelease 2 | 或 3 | ./gradlew assemble渠道Release --> ./gradlew resguard渠道Release -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | ext.kotlin_version = '1.9.0' 5 | dependencies { 6 | // classpath files(libs.class.superclass.protectionDomain.codeSource.location) 7 | // classpath libs.ali.arouter.register 8 | // classpath libs.ali.third.arouter.register 9 | classpath 'com.alibaba:arouter-register-asm7:1.0.2' 10 | // 资源文件混淆 11 | classpath libs.tencent.andresguard 12 | // 腾讯多渠道打包工具:VasDolly 13 | classpath libs.tencent.vasdolly.plugin 14 | classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.9' 15 | } 16 | } 17 | 18 | plugins { 19 | id 'com.android.application' version '7.2.2' apply false 20 | id 'com.android.library' version '7.2.2' apply false 21 | id 'org.jetbrains.kotlin.android' version "$kotlin_version" apply false 22 | id 'org.jetbrains.kotlin.jvm' version "$kotlin_version" apply false 23 | id 'com.google.gms.google-services' version '4.3.10' apply false 24 | } 25 | 26 | 27 | task clean(type: Delete) { 28 | delete rootProject.buildDir 29 | } 30 | -------------------------------------------------------------------------------- /gradle/testConfig.gradle: -------------------------------------------------------------------------------- 1 | android { 2 | packagingOptions { 3 | exclude("META-INF/LICENSE.md") 4 | exclude("META-INF/LICENSE-notice.md") 5 | } 6 | } -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Tue Dec 03 19:49:59 CST 2019 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip 7 | -------------------------------------------------------------------------------- /img/EnScrrenshot/Screenshot_20210326_133559.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/img/EnScrrenshot/Screenshot_20210326_133559.png -------------------------------------------------------------------------------- /img/EnScrrenshot/Screenshot_20210326_133628.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/img/EnScrrenshot/Screenshot_20210326_133628.png -------------------------------------------------------------------------------- /img/EnScrrenshot/Screenshot_20210326_133803.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/img/EnScrrenshot/Screenshot_20210326_133803.png -------------------------------------------------------------------------------- /img/EnScrrenshot/Screenshot_20210326_133820.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/img/EnScrrenshot/Screenshot_20210326_133820.png -------------------------------------------------------------------------------- /img/EnScrrenshot/Screenshot_20210326_133837.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/img/EnScrrenshot/Screenshot_20210326_133837.png -------------------------------------------------------------------------------- /img/EnScrrenshot/Screenshot_20210326_133955.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/img/EnScrrenshot/Screenshot_20210326_133955.png -------------------------------------------------------------------------------- /img/Screenshot/Screenshot_1616425959.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/img/Screenshot/Screenshot_1616425959.png -------------------------------------------------------------------------------- /img/Screenshot/Screenshot_1616425970.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/img/Screenshot/Screenshot_1616425970.png -------------------------------------------------------------------------------- /img/Screenshot/Screenshot_1616426133.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/img/Screenshot/Screenshot_1616426133.png -------------------------------------------------------------------------------- /img/Screenshot/Screenshot_1616426147.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/img/Screenshot/Screenshot_1616426147.png -------------------------------------------------------------------------------- /img/Screenshot/Screenshot_1616426150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/img/Screenshot/Screenshot_1616426150.png -------------------------------------------------------------------------------- /img/Screenshot/Screenshot_1616426345.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/img/Screenshot/Screenshot_1616426345.png -------------------------------------------------------------------------------- /img/Screenshot/Screenshot_1616426364.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/img/Screenshot/Screenshot_1616426364.png -------------------------------------------------------------------------------- /img/Screenshot/Screenshot_1616426501.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/img/Screenshot/Screenshot_1616426501.png -------------------------------------------------------------------------------- /img/device-2020-08-16-123728.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/img/device-2020-08-16-123728.png -------------------------------------------------------------------------------- /img/device-2020-08-16-133011.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/img/device-2020-08-16-133011.png -------------------------------------------------------------------------------- /img/device-2020-08-16-140111.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/img/device-2020-08-16-140111.png -------------------------------------------------------------------------------- /img/device-2020-08-16-141430.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/img/device-2020-08-16-141430.png -------------------------------------------------------------------------------- /img/device-2020-08-18-105755.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/img/device-2020-08-18-105755.png -------------------------------------------------------------------------------- /img/device-2020-08-18-112704.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/img/device-2020-08-18-112704.png -------------------------------------------------------------------------------- /img/device-2020-08-18-112904.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/img/device-2020-08-18-112904.png -------------------------------------------------------------------------------- /img/editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/img/editor.png -------------------------------------------------------------------------------- /img/ime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/img/ime.png -------------------------------------------------------------------------------- /img/moveData.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/img/moveData.png -------------------------------------------------------------------------------- /img/noteExpand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/img/noteExpand.png -------------------------------------------------------------------------------- /img/otpsetting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/img/otpsetting.png -------------------------------------------------------------------------------- /img/totpBar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/img/totpBar.png -------------------------------------------------------------------------------- /img/totpDisplay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/img/totpDisplay.png -------------------------------------------------------------------------------- /img/userDropdownList.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/img/userDropdownList.png -------------------------------------------------------------------------------- /img/webdavCreate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/img/webdavCreate.png -------------------------------------------------------------------------------- /img/x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/img/x.png -------------------------------------------------------------------------------- /localMaven/com/alibaba/arouter-register-asm7/1.0.2/arouter-register-asm7-1.0.2-javadoc.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/localMaven/com/alibaba/arouter-register-asm7/1.0.2/arouter-register-asm7-1.0.2-javadoc.jar -------------------------------------------------------------------------------- /localMaven/com/alibaba/arouter-register-asm7/1.0.2/arouter-register-asm7-1.0.2-javadoc.jar.md5: -------------------------------------------------------------------------------- 1 | 0c49d2b2bcbdc5b6e14f1ad54f2f7d42 -------------------------------------------------------------------------------- /localMaven/com/alibaba/arouter-register-asm7/1.0.2/arouter-register-asm7-1.0.2-javadoc.jar.sha1: -------------------------------------------------------------------------------- 1 | ffa836a313142568c4c7929516f12fdfffb8fb5c -------------------------------------------------------------------------------- /localMaven/com/alibaba/arouter-register-asm7/1.0.2/arouter-register-asm7-1.0.2-sources.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/localMaven/com/alibaba/arouter-register-asm7/1.0.2/arouter-register-asm7-1.0.2-sources.jar -------------------------------------------------------------------------------- /localMaven/com/alibaba/arouter-register-asm7/1.0.2/arouter-register-asm7-1.0.2-sources.jar.md5: -------------------------------------------------------------------------------- 1 | 90ed59c3829a0bbe9e9025e44d97c11f -------------------------------------------------------------------------------- /localMaven/com/alibaba/arouter-register-asm7/1.0.2/arouter-register-asm7-1.0.2-sources.jar.sha1: -------------------------------------------------------------------------------- 1 | ffa51b72bee753ce30a380f384d848d436da83b1 -------------------------------------------------------------------------------- /localMaven/com/alibaba/arouter-register-asm7/1.0.2/arouter-register-asm7-1.0.2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AriaLyy/KeepassA/02a1fb2dd22e83776267ddb28198e8aff7cddd13/localMaven/com/alibaba/arouter-register-asm7/1.0.2/arouter-register-asm7-1.0.2.jar -------------------------------------------------------------------------------- /localMaven/com/alibaba/arouter-register-asm7/1.0.2/arouter-register-asm7-1.0.2.jar.md5: -------------------------------------------------------------------------------- 1 | 59889bf2fa075d3f0beafdeb8fe3870d -------------------------------------------------------------------------------- /localMaven/com/alibaba/arouter-register-asm7/1.0.2/arouter-register-asm7-1.0.2.jar.sha1: -------------------------------------------------------------------------------- 1 | 239710f928e971deb36f8ffd6c5d92104487a175 -------------------------------------------------------------------------------- /localMaven/com/alibaba/arouter-register-asm7/1.0.2/arouter-register-asm7-1.0.2.pom.md5: -------------------------------------------------------------------------------- 1 | b704ef0b5df49c2c728a3c013a77b499 -------------------------------------------------------------------------------- /localMaven/com/alibaba/arouter-register-asm7/1.0.2/arouter-register-asm7-1.0.2.pom.sha1: -------------------------------------------------------------------------------- 1 | b89e1917824fe76195138d9e2b084bc6ee9367b2 -------------------------------------------------------------------------------- /localMaven/com/alibaba/arouter-register-asm7/maven-metadata.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | com.alibaba 4 | arouter-register-asm7 5 | 6 | 1.0.2 7 | 8 | 1.0.2 9 | 10 | 20221014082010 11 | 12 | 13 | -------------------------------------------------------------------------------- /localMaven/com/alibaba/arouter-register-asm7/maven-metadata.xml.md5: -------------------------------------------------------------------------------- 1 | e936cba0254ba9491de0821a039ed75a -------------------------------------------------------------------------------- /localMaven/com/alibaba/arouter-register-asm7/maven-metadata.xml.sha1: -------------------------------------------------------------------------------- 1 | 6f82c7eaa9fcc83cbe6f3e59b044145371e1f27d --------------------------------------------------------------------------------