├── .github └── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── .gitignore ├── .gitlab-ci.yml ├── .idea ├── .name ├── codeStyles │ ├── Project.xml │ └── codeStyleConfig.xml ├── copyright │ ├── ProtonMail.xml │ └── profiles_settings.xml ├── detekt.xml ├── dictionaries │ └── project.xml ├── inspectionProfiles │ ├── Project_Default.xml │ └── profiles_settings.xml ├── kotlinScripting.xml ├── saveactions_settings.xml └── scopes │ └── Gradle_files.xml ├── .java-version ├── LICENSE ├── README.md ├── app ├── build.gradle.kts ├── experimental.properties ├── libs │ ├── PM-sources.jar │ ├── commons-email-1.3.jar │ ├── fusion-release.aar │ ├── mail-activation.jar │ ├── mail-additional.jar │ └── mail.jar ├── multidex-proguard.pro ├── old.build.gradle ├── proguard-rules.pro ├── schemas │ ├── ch.protonmail.android.data.AppDatabase │ │ ├── 1.json │ │ ├── 10.json │ │ ├── 11.json │ │ ├── 12.json │ │ ├── 13.json │ │ ├── 2.json │ │ ├── 3.json │ │ ├── 4.json │ │ ├── 5.json │ │ ├── 6.json │ │ ├── 7.json │ │ ├── 8.json │ │ └── 9.json │ ├── ch.protonmail.android.data.local.AttachmentMetadataDatabase │ │ └── 3.json │ ├── ch.protonmail.android.data.local.ContactDatabase │ │ ├── 1.json │ │ ├── 2.json │ │ └── 3.json │ ├── ch.protonmail.android.data.local.CounterDatabase │ │ └── 1.json │ ├── ch.protonmail.android.data.local.MessageDatabase │ │ ├── 10.json │ │ ├── 11.json │ │ ├── 12.json │ │ ├── 13.json │ │ ├── 14.json │ │ ├── 15.json │ │ ├── 16.json │ │ ├── 17.json │ │ ├── 18.json │ │ ├── 19.json │ │ ├── 20.json │ │ └── 9.json │ ├── ch.protonmail.android.data.local.NotificationDatabase │ │ └── 1.json │ ├── ch.protonmail.android.data.local.PendingActionDatabase │ │ ├── 3.json │ │ └── 4.json │ └── ch.protonmail.android.pendingaction.data.PendingActionDatabase │ │ └── 4.json └── src │ ├── alpha │ ├── java │ │ └── ch.protonmail.android │ │ │ └── di │ │ │ └── ConfigurableParametersModule.kt │ └── res │ │ └── values │ │ └── strings.xml │ ├── androidTest │ └── java │ │ └── ch │ │ └── protonmail │ │ └── android │ │ ├── ExampleCustomInjectionTest.kt │ │ ├── HiltCustomTestRunner.kt │ │ ├── TestConfigurableParametersModule.kt │ │ ├── activities │ │ └── NotificationSettingsViewModelTest.kt │ │ ├── api │ │ └── models │ │ │ ├── ContactEncryptedDataMatcher.kt │ │ │ ├── factories │ │ │ └── SendPreferencesFactoryTest.kt │ │ │ └── room │ │ │ ├── LiveDataUtil.kt │ │ │ └── contacts │ │ │ ├── ContactDaoTest.kt │ │ │ ├── FullContactDetailsConverterTest.kt │ │ │ └── FullContactsDetailsMatcher.kt │ │ ├── compose │ │ └── presentation │ │ │ └── ui │ │ │ ├── SetMessageExpirationActivityTest.kt │ │ │ └── SetMessagePasswordActivityTest.kt │ │ ├── crypto │ │ ├── AddressCryptoAndroidTest.kt │ │ ├── CryptoTest.kt │ │ └── NoEncryptionKeyStoreCrypto.kt │ │ ├── data │ │ └── local │ │ │ └── MessageDaoTest.kt │ │ ├── details │ │ └── presentation │ │ │ └── view │ │ │ └── CollapsedMessageViewsTest.kt │ │ ├── labels │ │ └── data │ │ │ └── mapper │ │ │ └── LabelOrFolderWithChildrenMapperBenchmarks.kt │ │ ├── mailbox │ │ └── data │ │ │ └── local │ │ │ └── UnreadCounterDaoTest.kt │ │ ├── settings │ │ └── pin │ │ │ └── PinFragmentViewModelTest.kt │ │ ├── ui │ │ ├── layout │ │ │ └── MoreItemsLinearLayoutTest.kt │ │ └── view │ │ │ ├── DaysAndHoursPickerViewTest.kt │ │ │ ├── MultiLineLabelChipGroupViewTest.kt │ │ │ ├── SingleLineCollapsedLabelGroupViewTest.kt │ │ │ └── SingleLineLabelChipGroupViewTest.kt │ │ ├── util │ │ ├── HiltViewTest.kt │ │ ├── HiltViewTestActivity.kt │ │ ├── ViewTest.kt │ │ └── viewMatchers.kt │ │ └── views │ │ └── PmWebViewClientTest.kt │ ├── beta │ ├── ic_launcher-playstore.png │ ├── ic_launcher-web.png │ ├── java │ │ └── ch.protonmail.android │ │ │ └── di │ │ │ └── ConfigurableParametersModule.kt │ └── res │ │ ├── drawable-v24 │ │ ├── ic_launcher_foreground.xml │ │ └── ic_logo_mail_no_bg_scaled.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 │ │ ├── values │ │ ├── ic_launcher_background.xml │ │ ├── notif.xml │ │ └── strings.xml │ │ └── xml-v25 │ │ └── shortcuts.xml │ ├── main │ ├── AndroidManifest.xml │ ├── assets │ │ ├── fonts │ │ │ ├── Roboto-Bold.ttf │ │ │ ├── Roboto-Light.ttf │ │ │ ├── Roboto-Regular.ttf │ │ │ ├── Roboto-Thin.ttf │ │ │ └── contacts_icons.ttf │ │ ├── logo_print.png │ │ ├── pgp-icons-android.ttf │ │ └── protonmail-mobile-icons.ttf │ ├── ic_launcher-playstore.png │ ├── ic_launcher-web.png │ ├── java │ │ ├── androidx │ │ │ └── core │ │ │ │ └── app │ │ │ │ └── ProtonJobIntentService.java │ │ └── ch │ │ │ └── protonmail │ │ │ └── android │ │ │ ├── Doc.kt │ │ │ ├── ViewTestActivity.kt │ │ │ ├── activities │ │ │ ├── ActivityResultContracts.kt │ │ │ ├── AddAttachmentsActivity.java │ │ │ ├── BaseActivity.java │ │ │ ├── BaseConnectivityActivity.kt │ │ │ ├── BaseContactsActivity.java │ │ │ ├── BaseStoragePermissionActivity.java │ │ │ ├── SearchActivity.kt │ │ │ ├── composeMessage │ │ │ │ ├── ComposeMessageActivity.java │ │ │ │ ├── MessageBuilderData.kt │ │ │ │ ├── SaveMassageTask.kt │ │ │ │ └── UserAction.kt │ │ │ ├── contactDetails │ │ │ │ └── ExtractFullContactDetailsTask.kt │ │ │ ├── dialogs │ │ │ │ ├── AbstractDialogFragment.java │ │ │ │ └── QuickSnoozeDialogFragment.java │ │ │ ├── fragments │ │ │ │ ├── BaseFragment.java │ │ │ │ └── DatePickerFragment.java │ │ │ └── messageDetails │ │ │ │ ├── IntentExtrasData.kt │ │ │ │ ├── MessageDetailsAdapter.kt │ │ │ │ ├── MessagePrinter.kt │ │ │ │ ├── MessageRenderer.kt │ │ │ │ ├── MessageViewHeadersActivity.kt │ │ │ │ ├── attachments │ │ │ │ ├── CheckAttachmentTask.kt │ │ │ │ └── MessageDetailsAttachmentListAdapter.kt │ │ │ │ ├── body │ │ │ │ ├── MessageBodyScaleListener.kt │ │ │ │ └── MessageBodyTouchListener.kt │ │ │ │ ├── details │ │ │ │ └── RecipientContextMenuFactory.kt │ │ │ │ ├── repository │ │ │ │ └── MessageDetailsRepository.kt │ │ │ │ └── viewmodel │ │ │ │ └── MessageDetailsViewModel.kt │ │ │ ├── adapters │ │ │ ├── AttachmentListAdapter.kt │ │ │ ├── LabelColorsAdapter.kt │ │ │ ├── QuickSnoozeOptionAdapter.java │ │ │ ├── SettingsAdapter.kt │ │ │ ├── messages │ │ │ │ ├── MailboxItemViewHolder.kt │ │ │ │ └── MailboxRecyclerViewAdapter.kt │ │ │ └── swipe │ │ │ │ ├── ArchiveSwipeHandler.kt │ │ │ │ ├── ISwipeHandler.java │ │ │ │ ├── MarkReadSwipeHandler.kt │ │ │ │ ├── SpamSwipeHandler.kt │ │ │ │ ├── StarSwipeHandler.kt │ │ │ │ ├── SwipeAction.kt │ │ │ │ ├── SwipeProcessor.java │ │ │ │ └── TrashSwipeHandler.kt │ │ │ ├── api │ │ │ ├── AccountManager.kt │ │ │ ├── DnsOverHttpsProviderRFC8484.kt │ │ │ ├── NetworkConfigurator.kt │ │ │ ├── NetworkSwitcher.kt │ │ │ ├── OkHttpProvider.kt │ │ │ ├── ProtonMailApi.kt │ │ │ ├── ProtonMailApiClient.kt │ │ │ ├── ProtonMailApiManager.kt │ │ │ ├── ProtonMailApiProvider.kt │ │ │ ├── ProtonOkHttpClient.kt │ │ │ ├── ProtonRetrofitBuilder.kt │ │ │ ├── SecuredServices.kt │ │ │ ├── SwitchToMainBackendIfAvailable.kt │ │ │ ├── SwitchToMainBackendIfOnProxy.kt │ │ │ ├── TokenManager.kt │ │ │ ├── exceptions │ │ │ │ └── ApiException.kt │ │ │ ├── interceptors │ │ │ │ ├── BaseRequestInterceptor.kt │ │ │ │ ├── ProtonMailRequestInterceptor.kt │ │ │ │ ├── RetrofitTag.kt │ │ │ │ ├── RetryRequestInterceptor.kt │ │ │ │ └── SessionHeader.kt │ │ │ ├── local │ │ │ │ └── SnoozeSettings.kt │ │ │ ├── models │ │ │ │ ├── AllCurrencyPlans.java │ │ │ │ ├── AttachmentUploadResponse.java │ │ │ │ ├── Auth.java │ │ │ │ ├── AvailablePlansResponse.java │ │ │ │ ├── CardDetails.java │ │ │ │ ├── CheckSubscriptionBody.java │ │ │ │ ├── CheckSubscriptionResponse.java │ │ │ │ ├── ContactEmailsResponseV2.java │ │ │ │ ├── ContactEncryptedData.java │ │ │ │ ├── ContactResponse.java │ │ │ │ ├── ContactsDataResponse.java │ │ │ │ ├── Countries.java │ │ │ │ ├── Country.java │ │ │ │ ├── Coupon.java │ │ │ │ ├── CreateContact.java │ │ │ │ ├── CreateContactBody.java │ │ │ │ ├── CreateContactV2BodyItem.java │ │ │ │ ├── DatabaseProvider.kt │ │ │ │ ├── DeleteResponse.java │ │ │ │ ├── Destination.java │ │ │ │ ├── DirectEnabledResponse.java │ │ │ │ ├── DraftBody.kt │ │ │ │ ├── IDList.java │ │ │ │ ├── KeyPacket.java │ │ │ │ ├── Keys.java │ │ │ │ ├── LatestEventResponse.java │ │ │ │ ├── Location.java │ │ │ │ ├── MailSettings.kt │ │ │ │ ├── MailSettingsResponse.java │ │ │ │ ├── MessageIDList.java │ │ │ │ ├── MessagePayload.kt │ │ │ │ ├── MessageRecipient.java │ │ │ │ ├── MoveToFolderResponse.java │ │ │ │ ├── Organization.kt │ │ │ │ ├── OrganizationKeysResponse.kt │ │ │ │ ├── OrganizationResponse.kt │ │ │ │ ├── PasswordVerifier.java │ │ │ │ ├── Plan.java │ │ │ │ ├── PostPhishingReportBody.kt │ │ │ │ ├── PublicKeyBody.java │ │ │ │ ├── PublicKeyResponse.java │ │ │ │ ├── RecipientType.kt │ │ │ │ ├── RegisterDeviceRequestBody.kt │ │ │ │ ├── ResponseBody.java │ │ │ │ ├── SendPreference.java │ │ │ │ ├── SimpleMessage.kt │ │ │ │ ├── UnregisterDeviceRequestBody.kt │ │ │ │ ├── User.java │ │ │ │ ├── address │ │ │ │ │ ├── Address.java │ │ │ │ │ ├── KeyActivationBody.java │ │ │ │ │ └── SignedKeyList.java │ │ │ │ ├── base │ │ │ │ │ └── MultipleResponseBody.java │ │ │ │ ├── contacts │ │ │ │ │ └── send │ │ │ │ │ │ └── LabelContactsBody.kt │ │ │ │ ├── doh │ │ │ │ │ ├── Proxies.kt │ │ │ │ │ └── ProxyItem.kt │ │ │ │ ├── enumerations │ │ │ │ │ ├── ContactEncryption.java │ │ │ │ │ ├── KeyFlag.java │ │ │ │ │ ├── MIMEType.java │ │ │ │ │ ├── MessageEncryption.kt │ │ │ │ │ ├── MessageFlag.kt │ │ │ │ │ └── PackageType.java │ │ │ │ ├── factories │ │ │ │ │ ├── FactoryUtils.kt │ │ │ │ │ ├── IConverterFactory.kt │ │ │ │ │ ├── MessageSecurityOptions.kt │ │ │ │ │ ├── PackageFactory.java │ │ │ │ │ └── SendPreferencesFactory.java │ │ │ │ ├── messages │ │ │ │ │ ├── ParsedHeaders.kt │ │ │ │ │ ├── delete │ │ │ │ │ │ └── MessageDeleteRequest.kt │ │ │ │ │ ├── receive │ │ │ │ │ │ ├── AttachmentFactory.kt │ │ │ │ │ │ ├── IAttachmentFactory.kt │ │ │ │ │ │ ├── MessageFactory.kt │ │ │ │ │ │ ├── MessageLocationResolver.kt │ │ │ │ │ │ ├── MessageResponse.kt │ │ │ │ │ │ ├── MessageSenderFactory.kt │ │ │ │ │ │ ├── MessagesResponse.kt │ │ │ │ │ │ ├── ServerAttachment.kt │ │ │ │ │ │ ├── ServerMessage.kt │ │ │ │ │ │ └── ServerMessageSender.kt │ │ │ │ │ └── send │ │ │ │ │ │ ├── MessageSendAddressBody.java │ │ │ │ │ │ ├── MessageSendBody.java │ │ │ │ │ │ ├── MessageSendKey.java │ │ │ │ │ │ ├── MessageSendPackage.java │ │ │ │ │ │ └── MessageSendResponse.java │ │ │ │ └── requests │ │ │ │ │ ├── DisplayName.java │ │ │ │ │ ├── ShowImages.java │ │ │ │ │ └── Signature.java │ │ │ ├── rx │ │ │ │ ├── RxEventBus.kt │ │ │ │ └── ThreadSchedulers.kt │ │ │ ├── segments │ │ │ │ ├── BaseApi.kt │ │ │ │ ├── DnsOverHttpsRetrofitApi.kt │ │ │ │ ├── RetrofitConstants.kt │ │ │ │ ├── attachment │ │ │ │ │ ├── AttachmentApi.kt │ │ │ │ │ ├── AttachmentApiSpec.kt │ │ │ │ │ ├── AttachmentDownloadService.kt │ │ │ │ │ ├── AttachmentService.kt │ │ │ │ │ └── AttachmentUploadService.kt │ │ │ │ ├── connectivity │ │ │ │ │ ├── ConnectivityApi.kt │ │ │ │ │ ├── ConnectivityApiSpec.kt │ │ │ │ │ └── PingService.kt │ │ │ │ ├── contact │ │ │ │ │ ├── ContactApi.kt │ │ │ │ │ ├── ContactApiSpec.kt │ │ │ │ │ ├── ContactEmailsManager.kt │ │ │ │ │ └── ContactService.kt │ │ │ │ ├── device │ │ │ │ │ ├── DeviceApi.kt │ │ │ │ │ ├── DeviceApiSpec.kt │ │ │ │ │ └── DeviceService.kt │ │ │ │ ├── event │ │ │ │ │ ├── AlarmReceiver.java │ │ │ │ │ ├── EventHandler.kt │ │ │ │ │ ├── EventManager.kt │ │ │ │ │ ├── EventService.kt │ │ │ │ │ ├── EventUpdaterService.java │ │ │ │ │ ├── FetchEventsAndReschedule.kt │ │ │ │ │ └── FetchUpdatesJob.kt │ │ │ │ ├── key │ │ │ │ │ ├── KeyApi.kt │ │ │ │ │ ├── KeyApiSpec.kt │ │ │ │ │ └── KeyService.kt │ │ │ │ ├── message │ │ │ │ │ ├── MessageApi.kt │ │ │ │ │ ├── MessageApiSpec.kt │ │ │ │ │ ├── MessageSendService.kt │ │ │ │ │ └── MessageService.kt │ │ │ │ ├── organization │ │ │ │ │ ├── OrganizationApi.kt │ │ │ │ │ ├── OrganizationApiSpec.kt │ │ │ │ │ └── OrganizationService.kt │ │ │ │ ├── report │ │ │ │ │ ├── ReportApi.kt │ │ │ │ │ ├── ReportApiSpec.kt │ │ │ │ │ └── ReportService.kt │ │ │ │ └── settings │ │ │ │ │ └── mail │ │ │ │ │ ├── MailSettingsApi.kt │ │ │ │ │ ├── MailSettingsApiSpec.kt │ │ │ │ │ └── MailSettingsService.kt │ │ │ ├── services │ │ │ │ ├── ConnectivityService.kt │ │ │ │ └── MessagesService.kt │ │ │ └── utils │ │ │ │ ├── Fields.kt │ │ │ │ ├── Json.kt │ │ │ │ ├── ParseUtils.kt │ │ │ │ ├── ProtonHeaders.kt │ │ │ │ └── StringConverterFactory.java │ │ │ ├── attachments │ │ │ ├── Armorer.kt │ │ │ ├── AttachmentsHelper.kt │ │ │ ├── AttachmentsRepository.kt │ │ │ ├── AttachmentsViewModel.kt │ │ │ ├── AttachmentsViewState.kt │ │ │ ├── DownloadEmbeddedAttachmentsWorker.kt │ │ │ ├── ExtractAttachmentByteArray.kt │ │ │ ├── HandleEmbeddedImageAttachments.kt │ │ │ ├── HandleSingleAttachment.kt │ │ │ ├── ImportAttachmentsWorker.kt │ │ │ ├── OpenPgpArmorer.kt │ │ │ └── UploadAttachmentsWorker.kt │ │ │ ├── bl │ │ │ ├── Html5Handler.java │ │ │ ├── HtmlDivHandler.java │ │ │ ├── HtmlProcessor.java │ │ │ ├── IMessageHtmlHandler.java │ │ │ └── XHtmlHandler.java │ │ │ ├── compose │ │ │ ├── ComposeMessageRepository.kt │ │ │ ├── ComposeMessageViewModel.kt │ │ │ ├── domain │ │ │ │ └── GetAddressIndexByAddressId.kt │ │ │ ├── presentation │ │ │ │ ├── mapper │ │ │ │ │ └── SendPreferencesToMessageEncryptionUiModelMapper.kt │ │ │ │ ├── model │ │ │ │ │ ├── AddExpirationTimeToMessage.kt │ │ │ │ │ ├── ComposeMessageEventUiModel.kt │ │ │ │ │ ├── MessagePasswordUiModel.kt │ │ │ │ │ └── SetMessagePasswordUiModel.kt │ │ │ │ ├── ui │ │ │ │ │ ├── ComposeMessageKotlinActivity.kt │ │ │ │ │ ├── MessageRecipientArrayAdapter.kt │ │ │ │ │ ├── SetMessageExpirationActivity.kt │ │ │ │ │ └── SetMessagePasswordActivity.kt │ │ │ │ ├── util │ │ │ │ │ └── HtmlToSpanned.kt │ │ │ │ └── viewmodel │ │ │ │ │ └── SetMessagePasswordViewModel.kt │ │ │ ├── recipients │ │ │ │ ├── GroupRecipientViewHolder.kt │ │ │ │ ├── GroupRecipientsAdapter.kt │ │ │ │ ├── GroupRecipientsDialogFragment.kt │ │ │ │ └── GroupRecipientsViewModel.kt │ │ │ └── send │ │ │ │ ├── SendMessage.kt │ │ │ │ ├── SendMessageWorker.kt │ │ │ │ └── SendMessageWorkerError.kt │ │ │ ├── contacts │ │ │ ├── ContactIdGenerator.kt │ │ │ ├── ContactsActivity.kt │ │ │ ├── ContactsViewModel.kt │ │ │ ├── ErrorResponse.kt │ │ │ ├── IContactsFragment.kt │ │ │ ├── IContactsListFragmentListener.kt │ │ │ ├── PostResult.kt │ │ │ ├── UnsavedChangesDialog.kt │ │ │ ├── data │ │ │ │ └── remote │ │ │ │ │ └── worker │ │ │ │ │ └── UpdateContactWorker.kt │ │ │ ├── details │ │ │ │ ├── ContactDetailsViewModelOld.kt │ │ │ │ ├── ContactEmailGroupSelectionState.kt │ │ │ │ ├── data │ │ │ │ │ └── ContactDetailsRepository.kt │ │ │ │ ├── domain │ │ │ │ │ ├── FetchContactDetails.kt │ │ │ │ │ ├── FetchContactGroups.kt │ │ │ │ │ ├── FetchContactsMapper.kt │ │ │ │ │ └── model │ │ │ │ │ │ ├── FetchContactDetailsResult.kt │ │ │ │ │ │ └── FetchContactGroupsResult.kt │ │ │ │ ├── edit │ │ │ │ │ ├── EditContactDetailsActivity.java │ │ │ │ │ ├── EditContactDetailsRepository.kt │ │ │ │ │ └── EditContactDetailsViewModel.kt │ │ │ │ └── presentation │ │ │ │ │ ├── ContactDetailsActivity.kt │ │ │ │ │ ├── ContactDetailsAdapter.kt │ │ │ │ │ ├── ContactDetailsDiffUtil.kt │ │ │ │ │ ├── ContactDetailsMapper.kt │ │ │ │ │ ├── ContactDetailsViewModel.kt │ │ │ │ │ └── model │ │ │ │ │ ├── ContactDetailsUiItem.kt │ │ │ │ │ ├── ContactDetailsViewState.kt │ │ │ │ │ └── ContactLabelUiModel.kt │ │ │ ├── domain │ │ │ │ └── usecase │ │ │ │ │ └── ExtractInitials.kt │ │ │ ├── groups │ │ │ │ ├── ContactGroupEmailsAdapter.kt │ │ │ │ ├── GroupsItemAdapterMode.kt │ │ │ │ ├── details │ │ │ │ │ ├── ContactGroupDetailsActivity.kt │ │ │ │ │ ├── ContactGroupDetailsRepository.kt │ │ │ │ │ ├── ContactGroupDetailsViewModel.kt │ │ │ │ │ └── ContactGroupEmailViewHolder.kt │ │ │ │ ├── edit │ │ │ │ │ ├── ContactGroupEditCreateActivity.kt │ │ │ │ │ ├── ContactGroupEditCreateRepository.kt │ │ │ │ │ ├── ContactGroupEditCreateViewModel.kt │ │ │ │ │ ├── ContactGroupEditCreateViewModelFactory.kt │ │ │ │ │ ├── ContactGroupMode.kt │ │ │ │ │ └── chooser │ │ │ │ │ │ ├── AddressChooserActivity.kt │ │ │ │ │ │ ├── AddressChooserRepository.kt │ │ │ │ │ │ ├── AddressChooserViewModel.kt │ │ │ │ │ │ ├── AddressChooserViewModelFactory.kt │ │ │ │ │ │ └── ColorChooserFragment.kt │ │ │ │ ├── jobs │ │ │ │ │ └── SetMembersForContactGroupJob.kt │ │ │ │ └── list │ │ │ │ │ ├── ContactGroupListItem.kt │ │ │ │ │ ├── ContactGroupsFragment.kt │ │ │ │ │ ├── ContactGroupsRepository.kt │ │ │ │ │ ├── ContactGroupsViewModel.kt │ │ │ │ │ ├── ContactsFragmentsPagerAdapter.kt │ │ │ │ │ └── ContactsGroupsListAdapter.kt │ │ │ ├── list │ │ │ │ ├── ContactsListFragment.kt │ │ │ │ ├── LocalContactsConverter.kt │ │ │ │ ├── listView │ │ │ │ │ ├── ContactItem.kt │ │ │ │ │ ├── ContactItemListFactory.kt │ │ │ │ │ └── ContactsListAdapter.kt │ │ │ │ ├── progress │ │ │ │ │ ├── IProgressDialogFactory.kt │ │ │ │ │ ├── ProgressDialogFactory.kt │ │ │ │ │ ├── ProgressLiveData.kt │ │ │ │ │ ├── ProgressState.kt │ │ │ │ │ └── UploadProgressObserver.kt │ │ │ │ ├── search │ │ │ │ │ ├── ISearchListenerViewModel.kt │ │ │ │ │ ├── OnSearchClose.kt │ │ │ │ │ ├── SearchExpandListener.kt │ │ │ │ │ └── SearchViewQueryListener.kt │ │ │ │ └── viewModel │ │ │ │ │ ├── ContactsListMapper.kt │ │ │ │ │ ├── ContactsListViewModel.kt │ │ │ │ │ └── IContactsListViewModel.kt │ │ │ └── repositories │ │ │ │ └── andorid │ │ │ │ ├── baseInfo │ │ │ │ ├── AndroidContactsLoaderCallbacks.kt │ │ │ │ ├── AndroidContactsLoaderCallbacksFactory.kt │ │ │ │ └── AndroidContactsRepository.kt │ │ │ │ └── details │ │ │ │ ├── AndroidContactDetailsCallbacks.kt │ │ │ │ ├── AndroidContactDetailsCallbacksFactory.kt │ │ │ │ └── AndroidContactDetailsRepository.kt │ │ │ ├── core │ │ │ ├── BigContentHolder.java │ │ │ ├── Constants.kt │ │ │ ├── DetailedException.kt │ │ │ ├── NetworkConnectivityManager.kt │ │ │ ├── NetworkResults.java │ │ │ ├── ProtonMailApplication.java │ │ │ ├── QueueNetworkUtil.kt │ │ │ └── UserManager.kt │ │ │ ├── crypto │ │ │ ├── AddressCrypto.kt │ │ │ ├── CipherText.kt │ │ │ ├── Crypto.kt │ │ │ └── UserCrypto.kt │ │ │ ├── data │ │ │ ├── AppDatabase.kt │ │ │ ├── AppDatabaseMigrations.kt │ │ │ ├── ContactsRepository.kt │ │ │ ├── ProtonMailConverters.kt │ │ │ ├── ProtonStore.kt │ │ │ ├── ProtonStoreMapper.kt │ │ │ ├── local │ │ │ │ ├── AttachmentMetadataDao.kt │ │ │ │ ├── AttachmentMetadataDatabase.kt │ │ │ │ ├── ContactDao.kt │ │ │ │ ├── ContactDatabase.kt │ │ │ │ ├── CounterDao.kt │ │ │ │ ├── CounterDatabase.kt │ │ │ │ ├── CounterRepository.kt │ │ │ │ ├── CounterRepositoryImpl.kt │ │ │ │ ├── DatabaseFactory.kt │ │ │ │ ├── MessageDao.kt │ │ │ │ ├── MessageDatabase.kt │ │ │ │ ├── MessagePreferenceDao.kt │ │ │ │ └── model │ │ │ │ │ ├── Attachment.kt │ │ │ │ │ ├── AttachmentHeaders.java │ │ │ │ │ ├── AttachmentMetadata.kt │ │ │ │ │ ├── AttachmentTypesConverter.kt │ │ │ │ │ ├── AttachmentsMetadataTypeConverter.kt │ │ │ │ │ ├── ContactData.kt │ │ │ │ │ ├── ContactEmail.kt │ │ │ │ │ ├── Counter.kt │ │ │ │ │ ├── FullContactDetails.kt │ │ │ │ │ ├── LocalAttachment.kt │ │ │ │ │ ├── Message.kt │ │ │ │ │ ├── MessagePreferenceEntity.kt │ │ │ │ │ ├── MessageSender.kt │ │ │ │ │ ├── MessagesTypesConverter.kt │ │ │ │ │ └── ServerFullContactDetails.kt │ │ │ └── remote │ │ │ │ └── dataResults.kt │ │ │ ├── details │ │ │ ├── data │ │ │ │ ├── ConversationUiModelMapper.kt │ │ │ │ ├── MessageFlagsToEncryptionMapper.kt │ │ │ │ ├── MessageMapper.kt │ │ │ │ └── remote │ │ │ │ │ └── model │ │ │ │ │ └── ConversationResponse.kt │ │ │ ├── domain │ │ │ │ ├── MessageBodyDecryptor.kt │ │ │ │ ├── MessageBodyParser.kt │ │ │ │ ├── model │ │ │ │ │ ├── EmbeddedImageWithContent.kt │ │ │ │ │ ├── EmbeddedImageWithOutputStream.kt │ │ │ │ │ ├── MessageBodyDocument.kt │ │ │ │ │ ├── MessageBodyParts.kt │ │ │ │ │ ├── MessageEmbeddedImages.kt │ │ │ │ │ ├── MessageEmbeddedImagesWithContent.kt │ │ │ │ │ ├── MessageEmbeddedImagesWithOutputStream.kt │ │ │ │ │ └── SignatureVerification.kt │ │ │ │ └── usecase │ │ │ │ │ ├── GetViewInDarkModeMessagePreference.kt │ │ │ │ │ ├── MarkMessageAsReadIfNeeded.kt │ │ │ │ │ └── SetViewInDarkModeMessagePreference.kt │ │ │ └── presentation │ │ │ │ ├── mapper │ │ │ │ ├── MessageEncryptionUiModelMapper.kt │ │ │ │ └── MessageToMessageDetailsListItemMapper.kt │ │ │ │ ├── model │ │ │ │ ├── ConversationUiModel.kt │ │ │ │ ├── MessageBodyState.kt │ │ │ │ ├── MessageDetailsListItem.kt │ │ │ │ ├── MessageEncryptionUiModel.kt │ │ │ │ └── RenderedMessage.kt │ │ │ │ ├── ui │ │ │ │ ├── MessageDetailsActivity.kt │ │ │ │ └── SwitchUserAndOpenMessageDetailsActivity.kt │ │ │ │ ├── util │ │ │ │ ├── LoadTheLastNonDraftMessageBody.kt │ │ │ │ └── MessageBodyLoader.kt │ │ │ │ └── view │ │ │ │ ├── CollapsedMessageViews.kt │ │ │ │ ├── DecryptionErrorBanner.kt │ │ │ │ ├── MessageDetailsActionsView.kt │ │ │ │ ├── MessageDetailsHeaderIcons.kt │ │ │ │ └── ScheduledInfoBanner.kt │ │ │ ├── di │ │ │ ├── ApplicationBindsModule.kt │ │ │ ├── ApplicationModule.kt │ │ │ ├── CoreAppModule.kt │ │ │ ├── CoreAuthModule.kt │ │ │ ├── CoreDatabaseBindsModule.kt │ │ │ ├── CoreHelpOptionModule.kt │ │ │ ├── CoreHumanVerificationModule.kt │ │ │ ├── CoreNetworkModule.kt │ │ │ ├── CorePlanModule.kt │ │ │ ├── DatabaseModule.kt │ │ │ ├── JobModule.kt │ │ │ ├── ViewModelModule.kt │ │ │ └── qualifiers.kt │ │ │ ├── drawer │ │ │ └── presentation │ │ │ │ ├── mapper │ │ │ │ ├── DrawerFoldersAndLabelsSectionUiModelMapper.kt │ │ │ │ ├── DrawerLabelItemUiModelMapper.kt │ │ │ │ └── DrawerLabelUiModelMapper.kt │ │ │ │ ├── model │ │ │ │ ├── DrawerFoldersAndLabelsSectionUiModel.kt │ │ │ │ ├── DrawerItemUiModel.kt │ │ │ │ └── DrawerLabelUiModel.kt │ │ │ │ └── ui │ │ │ │ ├── DrawerAdapter.kt │ │ │ │ └── view │ │ │ │ └── ProtonSideDrawer.kt │ │ │ ├── event │ │ │ ├── data │ │ │ │ └── remote │ │ │ │ │ └── model │ │ │ │ │ ├── ConversationsEventResponse.kt │ │ │ │ │ └── EventResponse.java │ │ │ └── domain │ │ │ │ └── model │ │ │ │ └── ActionType.kt │ │ │ ├── events │ │ │ ├── ApiOfflineEvent.java │ │ │ ├── AvailablePlansEvent.java │ │ │ ├── ContactEvent.java │ │ │ ├── ContactProgressEvent.java │ │ │ ├── DownloadEmbeddedImagesEvent.java │ │ │ ├── DownloadedAttachmentEvent.java │ │ │ ├── FetchDraftDetailEvent.java │ │ │ ├── FetchLabelsEvent.java │ │ │ ├── FetchMessageDetailEvent.java │ │ │ ├── ForceUpgradeEvent.kt │ │ │ ├── MailboxLoadedEvent.kt │ │ │ ├── MailboxNoMessagesEvent.java │ │ │ ├── MoveToFolderEvent.kt │ │ │ ├── NoResultsEvent.kt │ │ │ ├── PostImportAttachmentEvent.java │ │ │ ├── PostImportAttachmentFailureEvent.java │ │ │ ├── PostPhishingReportEvent.kt │ │ │ ├── RequestTimeoutEvent.java │ │ │ ├── ResignContactEvent.java │ │ │ ├── SearchResultEvent.kt │ │ │ ├── SettingsChangedEvent.java │ │ │ ├── Status.java │ │ │ ├── StorageLimitEvent.java │ │ │ ├── contacts │ │ │ │ └── SendPreferencesEvent.java │ │ │ ├── organizations │ │ │ │ └── OrganizationEvent.java │ │ │ └── payment │ │ │ │ └── VerifyPaymentEvent.java │ │ │ ├── exceptions │ │ │ ├── ErrorStateGenerators.kt │ │ │ ├── ImageErrors.kt │ │ │ └── SettingsErrors.kt │ │ │ ├── feature │ │ │ ├── NotLoggedIn.kt │ │ │ ├── account │ │ │ │ ├── AccountManager.kt │ │ │ │ ├── AccountStateHandlerInitializer.kt │ │ │ │ ├── AccountStateManager.kt │ │ │ │ ├── CoreAccountManagerMigration.kt │ │ │ │ └── SetupAccountUserCheck.kt │ │ │ ├── rating │ │ │ │ ├── MailboxScreenViewInMemoryRepository.kt │ │ │ │ ├── StartRateAppFlow.kt │ │ │ │ └── usecase │ │ │ │ │ └── ShouldStartRateAppFlow.kt │ │ │ └── user │ │ │ │ ├── UserAddressManager.kt │ │ │ │ └── UserManager.kt │ │ │ ├── featureflags │ │ │ ├── FeatureFlagsInitializer.kt │ │ │ ├── FeatureFlagsManager.kt │ │ │ ├── MailFeatureFlags.kt │ │ │ └── RefreshFeatureFlags.kt │ │ │ ├── jobs │ │ │ ├── ConvertLocalContactsJob.kt │ │ │ ├── FetchByLocationJob.kt │ │ │ ├── FetchDraftDetailJob.java │ │ │ ├── FetchMessageDetailJob.java │ │ │ ├── MoveToFolderJob.java │ │ │ ├── PostArchiveJob.java │ │ │ ├── PostDraftJob.java │ │ │ ├── PostInboxJob.java │ │ │ ├── PostReadJob.java │ │ │ ├── PostSpamJob.java │ │ │ ├── PostStarJob.kt │ │ │ ├── PostTrashJobV2.java │ │ │ ├── PostUnreadJob.java │ │ │ ├── PostUnstarJob.kt │ │ │ ├── Priority.java │ │ │ ├── ProtonMailBaseJob.kt │ │ │ ├── ProtonMailCounterJob.java │ │ │ ├── ProtonMailEndlessJob.java │ │ │ ├── RemoveLabelJob.java │ │ │ ├── ReportPhishingJob.kt │ │ │ ├── ResignContactJob.java │ │ │ ├── SearchMessagesJob.kt │ │ │ ├── UpdateSettingsJob.kt │ │ │ ├── contacts │ │ │ │ └── GetSendPreferenceJob.java │ │ │ ├── helper │ │ │ │ └── EmbeddedImage.kt │ │ │ └── organizations │ │ │ │ └── GetOrganizationJob.kt │ │ │ ├── labels │ │ │ ├── data │ │ │ │ ├── LabelRepositoryImpl.kt │ │ │ │ ├── local │ │ │ │ │ ├── LabelDao.kt │ │ │ │ │ └── model │ │ │ │ │ │ └── LabelEntity.kt │ │ │ │ ├── mapper │ │ │ │ │ ├── LabelEntityApiMapper.kt │ │ │ │ │ ├── LabelEntityDomainMapper.kt │ │ │ │ │ ├── LabelEventApiMapper.kt │ │ │ │ │ ├── LabelOrFolderWithChildrenMapper.kt │ │ │ │ │ └── LabelRequestMapper.kt │ │ │ │ └── remote │ │ │ │ │ ├── LabelApi.kt │ │ │ │ │ ├── LabelApiSpec.kt │ │ │ │ │ ├── LabelService.kt │ │ │ │ │ ├── model │ │ │ │ │ ├── LabelApiModel.kt │ │ │ │ │ ├── LabelEventModel.kt │ │ │ │ │ ├── LabelRequestBody.kt │ │ │ │ │ ├── LabelResponse.kt │ │ │ │ │ └── LabelsResponse.kt │ │ │ │ │ └── worker │ │ │ │ │ ├── ApplyMessageLabelWorker.kt │ │ │ │ │ ├── DeleteLabelsWorker.kt │ │ │ │ │ ├── LabelConversationsRemoteWorker.kt │ │ │ │ │ ├── PostLabelWorker.kt │ │ │ │ │ ├── RemoveMembersFromContactGroupWorker.kt │ │ │ │ │ ├── RemoveMessageLabelWorker.kt │ │ │ │ │ ├── UnlabelConversationsRemoteWorker.kt │ │ │ │ │ └── UpdateConversationsLabelsWorker.kt │ │ │ ├── domain │ │ │ │ ├── LabelRepository.kt │ │ │ │ ├── model │ │ │ │ │ ├── Label.kt │ │ │ │ │ ├── LabelId.kt │ │ │ │ │ ├── LabelOrFolderWithChildren.kt │ │ │ │ │ ├── LabelType.kt │ │ │ │ │ └── ManageLabelActionResult.kt │ │ │ │ └── usecase │ │ │ │ │ ├── DeleteLabels.kt │ │ │ │ │ ├── GetLabelsByType.kt │ │ │ │ │ ├── ObserveFoldersEligibleAsParent.kt │ │ │ │ │ ├── ObserveLabels.kt │ │ │ │ │ ├── ObserveLabelsAndFoldersWithChildren.kt │ │ │ │ │ ├── ObserveLabelsOrFoldersWithChildrenByType.kt │ │ │ │ │ ├── UpdateConversationsLabels.kt │ │ │ │ │ └── UpdateMessageLabels.kt │ │ │ └── presentation │ │ │ │ ├── mapper │ │ │ │ ├── LabelChipUiModelMapper.kt │ │ │ │ ├── LabelDomainActionItemUiMapper.kt │ │ │ │ ├── LabelsManagerItemUiModelMapper.kt │ │ │ │ └── ParentFolderPickerItemUiModelMapper.kt │ │ │ │ ├── model │ │ │ │ ├── LabelActionItemUiModelDiffCallback.kt │ │ │ │ ├── LabelActonItemUiModel.kt │ │ │ │ ├── LabelIcon.kt │ │ │ │ ├── LabelsManagerItemUiModel.kt │ │ │ │ ├── ParentFolderPickerAction.kt │ │ │ │ ├── ParentFolderPickerItemUiModel.kt │ │ │ │ ├── ParentFolderPickerState.kt │ │ │ │ └── StandardFolderLocation.kt │ │ │ │ ├── ui │ │ │ │ ├── LabelsActionAdapter.kt │ │ │ │ ├── LabelsActionSheet.kt │ │ │ │ ├── LabelsManagerActivity.kt │ │ │ │ ├── LabelsManagerAdapter.kt │ │ │ │ └── ParentFolderPickerActivity.kt │ │ │ │ └── viewmodel │ │ │ │ ├── LabelsActionSheetViewModel.kt │ │ │ │ ├── LabelsManagerViewModel.kt │ │ │ │ └── ParentFolderPickerViewModel.kt │ │ │ ├── mailbox │ │ │ ├── data │ │ │ │ ├── ConversationsRepositoryImpl.kt │ │ │ │ ├── MarkUnreadLatestNonDraftMessageInLocation.kt │ │ │ │ ├── local │ │ │ │ │ ├── ConversationDao.kt │ │ │ │ │ ├── ConversationTypesConverter.kt │ │ │ │ │ ├── UnreadCounterDao.kt │ │ │ │ │ └── model │ │ │ │ │ │ ├── ConversationDatabaseModel.kt │ │ │ │ │ │ ├── LabelContextDatabaseModel.kt │ │ │ │ │ │ └── UnreadCounterEntity.kt │ │ │ │ ├── mapper │ │ │ │ │ ├── ApiToDatabaseUnreadCounterMapper.kt │ │ │ │ │ ├── ConversationApiModelToConversationDatabaseModelMapper.kt │ │ │ │ │ ├── ConversationApiModelToConversationMapper.kt │ │ │ │ │ ├── ConversationDatabaseModelToConversationMapper.kt │ │ │ │ │ ├── ConversationsResponseToConversationsDatabaseModelsMapper.kt │ │ │ │ │ ├── ConversationsResponseToConversationsMapper.kt │ │ │ │ │ ├── CorrespondentApiModelToCorrespondentMapper.kt │ │ │ │ │ ├── CorrespondentApiModelToMessageRecipientMapper.kt │ │ │ │ │ ├── CorrespondentApiModelToMessageSenderMapper.kt │ │ │ │ │ ├── CorrespondentToMessageRecipientMapper.kt │ │ │ │ │ ├── CorrespondentToMessageSenderMapper.kt │ │ │ │ │ ├── DatabaseToDomainUnreadCounterMapper.kt │ │ │ │ │ ├── LabelContextApiModelToLabelContextDatabaseModelMapper.kt │ │ │ │ │ ├── LabelContextApiModelToLabelContextMapper.kt │ │ │ │ │ ├── LabelContextDatabaseModelToLabelContextMapper.kt │ │ │ │ │ ├── MessageRecipientToCorrespondentMapper.kt │ │ │ │ │ ├── MessageSenderToCorrespondentMapper.kt │ │ │ │ │ └── MessagesResponseToMessagesMapper.kt │ │ │ │ └── remote │ │ │ │ │ ├── ConversationApi.kt │ │ │ │ │ ├── ConversationApiSpec.kt │ │ │ │ │ ├── ConversationService.kt │ │ │ │ │ ├── model │ │ │ │ │ ├── ConversationApiModel.kt │ │ │ │ │ ├── ConversationIdsRequestBody.kt │ │ │ │ │ ├── ConversationsActionResponse.kt │ │ │ │ │ ├── ConversationsActionResponses.kt │ │ │ │ │ ├── ConversationsResponse.kt │ │ │ │ │ ├── CorrespondentApiModel.kt │ │ │ │ │ ├── CountsApiModel.kt │ │ │ │ │ ├── CountsResponse.kt │ │ │ │ │ ├── LabelContextApiModel.kt │ │ │ │ │ └── UndoTokenApiModel.kt │ │ │ │ │ └── worker │ │ │ │ │ ├── DeleteConversationsRemoteWorker.kt │ │ │ │ │ ├── MarkConversationUnreadRemoteWorker.kt │ │ │ │ │ ├── MarkConversationsReadRemoteWorker.kt │ │ │ │ │ └── MoveMessageToLocationWorker.kt │ │ │ ├── domain │ │ │ │ ├── ChangeConversationsReadStatus.kt │ │ │ │ ├── ChangeConversationsStarredStatus.kt │ │ │ │ ├── ConversationsRepository.kt │ │ │ │ ├── DeleteConversations.kt │ │ │ │ ├── HandleChangeToConversations.kt │ │ │ │ ├── MoveConversationsToFolder.kt │ │ │ │ ├── model │ │ │ │ │ ├── AllUnreadCounters.kt │ │ │ │ │ ├── Conversation.kt │ │ │ │ │ ├── ConversationsActionResult.kt │ │ │ │ │ ├── Correspondent.kt │ │ │ │ │ ├── GetAllConversationsParameters.kt │ │ │ │ │ ├── GetAllMessagesParameters.kt │ │ │ │ │ ├── GetConversationsResult.kt │ │ │ │ │ ├── GetMessagesResult.kt │ │ │ │ │ ├── GetOneConversationParameters.kt │ │ │ │ │ ├── LabelContext.kt │ │ │ │ │ ├── MessageDomainModel.kt │ │ │ │ │ └── UnreadCounter.kt │ │ │ │ └── usecase │ │ │ │ │ ├── MoveMessagesToFolder.kt │ │ │ │ │ ├── ObserveAllUnreadCounters.kt │ │ │ │ │ ├── ObserveConversationModeEnabled.kt │ │ │ │ │ ├── ObserveConversationsByLocation.kt │ │ │ │ │ ├── ObserveMessageCountByLocation.kt │ │ │ │ │ ├── ObserveMessagesByLocation.kt │ │ │ │ │ └── ObserveShowMovedEnabled.kt │ │ │ └── presentation │ │ │ │ ├── mapper │ │ │ │ └── MailboxItemUiModelMapper.kt │ │ │ │ ├── model │ │ │ │ ├── EmptyMailboxUiModel.kt │ │ │ │ ├── MailboxItemUiModel.kt │ │ │ │ ├── MailboxListState.kt │ │ │ │ ├── MailboxState.kt │ │ │ │ ├── UnreadChipState.kt │ │ │ │ └── UnreadChipUiModel.kt │ │ │ │ ├── ui │ │ │ │ ├── EmptyMailboxView.kt │ │ │ │ ├── MailboxActivity.kt │ │ │ │ └── UnreadChip.kt │ │ │ │ ├── util │ │ │ │ └── ConversationModeEnabled.kt │ │ │ │ └── viewmodel │ │ │ │ └── MailboxViewModel.kt │ │ │ ├── mapper │ │ │ └── bridge │ │ │ │ ├── AddressKeysBridgeMapper.kt │ │ │ │ ├── AddressesBridgeMapper.kt │ │ │ │ ├── BridgeMapper.kt │ │ │ │ ├── UserBridgeMapper.kt │ │ │ │ └── UserKeysBridgeMapper.kt │ │ │ ├── metrics │ │ │ └── domain │ │ │ │ └── SendMetricsForViewInDarkModePreference.kt │ │ │ ├── navigation │ │ │ └── presentation │ │ │ │ ├── NavigationActivity.kt │ │ │ │ ├── NavigationViewModel.kt │ │ │ │ └── model │ │ │ │ ├── NavigationViewAction.kt │ │ │ │ ├── NavigationViewState.kt │ │ │ │ └── TemporaryMessage.kt │ │ │ ├── notifications │ │ │ ├── data │ │ │ │ ├── NotificationRepositoryImpl.kt │ │ │ │ ├── local │ │ │ │ │ ├── NotificationDao.kt │ │ │ │ │ ├── NotificationDatabase.kt │ │ │ │ │ └── model │ │ │ │ │ │ └── NotificationEntity.kt │ │ │ │ ├── mapper │ │ │ │ │ ├── NotificationApiEntityMapper.kt │ │ │ │ │ └── NotificationEntityDomainMapper.kt │ │ │ │ └── remote │ │ │ │ │ ├── fcm │ │ │ │ │ ├── FcmTokenManager.kt │ │ │ │ │ ├── MultiUserFcmTokenManager.kt │ │ │ │ │ ├── PMFirebaseMessagingService.kt │ │ │ │ │ ├── RegisterDeviceWorker.kt │ │ │ │ │ ├── UnregisterDeviceWorker.kt │ │ │ │ │ └── model │ │ │ │ │ │ └── FirebaseToken.kt │ │ │ │ │ └── model │ │ │ │ │ ├── NotificationAction.kt │ │ │ │ │ ├── PushNotification.kt │ │ │ │ │ ├── PushNotificationData.kt │ │ │ │ │ └── PushNotificationSender.kt │ │ │ ├── domain │ │ │ │ ├── NotificationRepository.kt │ │ │ │ ├── ProcessPushNotificationDataWorker.kt │ │ │ │ └── model │ │ │ │ │ ├── Notification.kt │ │ │ │ │ ├── NotificationId.kt │ │ │ │ │ └── NotificationType.kt │ │ │ └── presentation │ │ │ │ ├── usecase │ │ │ │ ├── ClearNotification.kt │ │ │ │ └── ClearNotificationsForUser.kt │ │ │ │ └── utils │ │ │ │ └── NotificationServer.kt │ │ │ ├── onboarding │ │ │ ├── base │ │ │ │ └── presentation │ │ │ │ │ ├── AddStartOnboardingObserverIfNeeded.kt │ │ │ │ │ ├── OnboardingActivity.kt │ │ │ │ │ ├── OnboardingAdapter.kt │ │ │ │ │ ├── OnboardingIndicatorsView.kt │ │ │ │ │ ├── OnboardingItemUiModelDiffCallback.kt │ │ │ │ │ ├── OnboardingViewModel.kt │ │ │ │ │ ├── StartOnboardingObserver.kt │ │ │ │ │ ├── StartOnboardingObserverInitializer.kt │ │ │ │ │ └── model │ │ │ │ │ └── OnboardingItemUiModel.kt │ │ │ ├── existinguser │ │ │ │ └── presentation │ │ │ │ │ ├── ExistingUserOnboardingActivity.kt │ │ │ │ │ └── ExistingUserOnboardingViewModel.kt │ │ │ └── newuser │ │ │ │ └── presentation │ │ │ │ ├── NewUserOnboardingActivity.kt │ │ │ │ └── NewUserOnboardingViewModel.kt │ │ │ ├── pendingaction │ │ │ ├── data │ │ │ │ ├── PendingActionDao.kt │ │ │ │ ├── PendingActionDatabase.kt │ │ │ │ ├── model │ │ │ │ │ ├── PendingSend.kt │ │ │ │ │ └── PendingUpload.kt │ │ │ │ ├── repository │ │ │ │ │ └── PendingSendRepositoryImpl.kt │ │ │ │ └── worker │ │ │ │ │ └── CleanUpPendingSendsWorker.kt │ │ │ ├── di │ │ │ │ └── PendingSendModule.kt │ │ │ └── domain │ │ │ │ └── repository │ │ │ │ └── PendingSendRepository.kt │ │ │ ├── permissions │ │ │ └── PermissionHelper.java │ │ │ ├── pinlock │ │ │ ├── domain │ │ │ │ └── usecase │ │ │ │ │ ├── GetPinLockTimer.kt │ │ │ │ │ ├── IsPinLockEnabled.kt │ │ │ │ │ └── ShouldShowPinLockScreen.kt │ │ │ └── presentation │ │ │ │ └── PinLockManager.kt │ │ │ ├── prefs │ │ │ └── SecureSharedPreferences.kt │ │ │ ├── receivers │ │ │ ├── ConnectivityBroadcastReceiver.java │ │ │ ├── LocaleChangeReceiver.java │ │ │ ├── NotificationReceiver.kt │ │ │ ├── OnBootReceiver.java │ │ │ └── TimeChangedReceiver.kt │ │ │ ├── repository │ │ │ ├── AuthRepository.kt │ │ │ └── MessageRepository.kt │ │ │ ├── security │ │ │ ├── domain │ │ │ │ └── usecase │ │ │ │ │ ├── GetIsPreventTakingScreenshots.kt │ │ │ │ │ ├── ObserveIsPreventTakingScreenshots.kt │ │ │ │ │ └── SavePreventTakingScreenshots.kt │ │ │ └── presentation │ │ │ │ ├── LogoutHandler.kt │ │ │ │ ├── ScreenshotManager.kt │ │ │ │ ├── SecurityManager.kt │ │ │ │ └── SecurityManagerInitializer.kt │ │ │ ├── sentry │ │ │ ├── SentryInitializer.kt │ │ │ ├── SentryModule.kt │ │ │ ├── SentryProxyObserver.kt │ │ │ ├── SentryTree.kt │ │ │ ├── SentryUserObserver.kt │ │ │ └── SentryVpnBeforeSendHook.kt │ │ │ ├── settings │ │ │ ├── data │ │ │ │ ├── AccountSettingsRepository.kt │ │ │ │ ├── MailSettingsEnumMapper.kt │ │ │ │ ├── SharedPreferencesAccountSettingsRepository.kt │ │ │ │ └── SharedPreferencesDeviceSettingsRepository.kt │ │ │ ├── domain │ │ │ │ ├── DeviceSettingsRepository.kt │ │ │ │ ├── model │ │ │ │ │ └── AppThemeSettings.kt │ │ │ │ └── usecase │ │ │ │ │ ├── ApplyAppThemeFromSettings.kt │ │ │ │ │ ├── GetAppThemeSettings.kt │ │ │ │ │ ├── GetMailSettings.kt │ │ │ │ │ ├── ObserveUserSettings.kt │ │ │ │ │ ├── SaveAppThemeSettings.kt │ │ │ │ │ ├── UpdateSwipeActions.kt │ │ │ │ │ └── UpdateViewMode.kt │ │ │ ├── pin │ │ │ │ ├── ChangePinActivity.kt │ │ │ │ ├── CreatePinActivity.kt │ │ │ │ ├── PinFragment.kt │ │ │ │ ├── PinSettingsActivity.kt │ │ │ │ ├── ValidatePinActivity.kt │ │ │ │ └── viewmodel │ │ │ │ │ ├── PinFragmentViewModel.kt │ │ │ │ │ └── PinFragmentViewModelFactory.kt │ │ │ ├── presentation │ │ │ │ ├── AccountSettingsActivity.kt │ │ │ │ ├── AccountSettingsActivityViewModel.kt │ │ │ │ ├── AttachmentStorageActivity.kt │ │ │ │ ├── BaseSettingsActivity.kt │ │ │ │ ├── DefaultAddressActivity.kt │ │ │ │ ├── DisplayNameAndSignatureFragment.kt │ │ │ │ ├── EditSettingsItemActivity.kt │ │ │ │ ├── NotificationSettingsActivity.kt │ │ │ │ ├── SettingsActivity.kt │ │ │ │ ├── SettingsDividerItemDecoration.kt │ │ │ │ ├── SettingsEnum.kt │ │ │ │ ├── SnoozeNotificationsActivity.kt │ │ │ │ ├── SnoozeRepeatDayView.kt │ │ │ │ ├── ui │ │ │ │ │ └── ThemeChooserActivity.kt │ │ │ │ └── viewmodel │ │ │ │ │ ├── NotificationSettingsViewModel.kt │ │ │ │ │ └── ThemeChooserViewModel.kt │ │ │ └── swipe │ │ │ │ ├── SwipeChooserActivity.kt │ │ │ │ ├── SwipeSettingFragment.kt │ │ │ │ └── viewmodel │ │ │ │ └── SwipeChooserViewModel.kt │ │ │ ├── storage │ │ │ ├── AttachmentClearingService.java │ │ │ ├── AttachmentClearingServiceHelper.kt │ │ │ └── MessageBodyClearingService.kt │ │ │ ├── tasks │ │ │ ├── AbstractEmbeddedImagesThread.java │ │ │ └── EmbeddedImagesThread.kt │ │ │ ├── ui │ │ │ ├── actionsheet │ │ │ │ ├── ActionSheetHeader.kt │ │ │ │ ├── MessageActionSheet.kt │ │ │ │ ├── MessageActionSheetAction.kt │ │ │ │ ├── MessageActionSheetState.kt │ │ │ │ ├── MessageActionSheetViewModel.kt │ │ │ │ └── model │ │ │ │ │ └── ActionSheetTarget.kt │ │ │ ├── adapter │ │ │ │ ├── BaseAdapter.kt │ │ │ │ └── ClickableAdapter.kt │ │ │ ├── layout │ │ │ │ └── MoreItemsLinearLayout.kt │ │ │ ├── model │ │ │ │ └── LabelChipUiModel.kt │ │ │ └── view │ │ │ │ ├── CheckableButton.kt │ │ │ │ ├── CollapsedMessageLabelView.kt │ │ │ │ ├── ComposerBottomAppBar.kt │ │ │ │ ├── DaysAndHoursPickerView.kt │ │ │ │ ├── LabelChipView.kt │ │ │ │ ├── MultiLineLabelChipGroupView.kt │ │ │ │ ├── SingleLineCollapsedLabelGroupView.kt │ │ │ │ └── SingleLineLabelChipGroupView.kt │ │ │ ├── uiModel │ │ │ └── SettingsItemUiModel.kt │ │ │ ├── usecase │ │ │ ├── GetElapsedRealTimeMillis.kt │ │ │ ├── IsAppInDarkMode.kt │ │ │ ├── LoadLegacyUser.kt │ │ │ ├── LoadUser.kt │ │ │ ├── VerifyConnection.kt │ │ │ ├── compose │ │ │ │ ├── SaveDraft.kt │ │ │ │ └── SaveDraftResult.kt │ │ │ ├── create │ │ │ │ └── CreateContact.kt │ │ │ ├── delete │ │ │ │ ├── ClearUserData.kt │ │ │ │ ├── ClearUserMessagesData.kt │ │ │ │ ├── DeleteMessage.kt │ │ │ │ └── EmptyFolder.kt │ │ │ ├── fetch │ │ │ │ ├── FetchContactsData.kt │ │ │ │ ├── FetchMailSettings.kt │ │ │ │ ├── FetchPublicKeys.kt │ │ │ │ ├── FetchVerificationKeys.kt │ │ │ │ └── LaunchInitialDataFetch.kt │ │ │ ├── message │ │ │ │ ├── ChangeMessagesReadStatus.kt │ │ │ │ ├── ChangeMessagesStarredStatus.kt │ │ │ │ └── GetDecryptedMessageById.kt │ │ │ └── model │ │ │ │ ├── CheckSubscriptionResult.kt │ │ │ │ ├── DeleteMessageResult.kt │ │ │ │ ├── FetchPublicKeysRequest.kt │ │ │ │ ├── FetchPublicKeysResult.kt │ │ │ │ └── FetchVerificationKeysResult.kt │ │ │ ├── util │ │ │ └── ProtonCalendarUtil.kt │ │ │ ├── utils │ │ │ ├── AppUtil.java │ │ │ ├── BuildInfo.kt │ │ │ ├── ChromeUtils.kt │ │ │ ├── ConstantTime.java │ │ │ ├── CoreTimberLogger.kt │ │ │ ├── CustomLocale.kt │ │ │ ├── DateUtil.java │ │ │ ├── DownloadUtils.kt │ │ │ ├── EmptyActivityLifecycleCallbacks.kt │ │ │ ├── Event.kt │ │ │ ├── FileHelper.kt │ │ │ ├── FileUtils.java │ │ │ ├── HTMLToMDConverter.java │ │ │ ├── HTMLTransformer │ │ │ │ ├── AbstractTransformer.java │ │ │ │ ├── DefaultTransformer.kt │ │ │ │ ├── Transformer.java │ │ │ │ └── ViewportTransformer.kt │ │ │ ├── INetworkConfiguratorCallback.kt │ │ │ ├── IntentExtensions.kt │ │ │ ├── Logger.java │ │ │ ├── MIME │ │ │ │ ├── MIMEBuilder.java │ │ │ │ ├── MIMEParser.java │ │ │ │ └── MIMEPart.java │ │ │ ├── MailToData.kt │ │ │ ├── MessageBodyFileManager.kt │ │ │ ├── MessageUtils.kt │ │ │ ├── NetworkSnackBarUtil.kt │ │ │ ├── NotificationsUtils.kt │ │ │ ├── PasswordUtils.java │ │ │ ├── ResettableDelegate.kt │ │ │ ├── SRPClient.java │ │ │ ├── ServerTime.java │ │ │ ├── ServerTimeProvider.kt │ │ │ ├── SharedPreferencesUtils.kt │ │ │ ├── StringExtensions.kt │ │ │ ├── SwipeDirections.java │ │ │ ├── SwipeViewGroup.java │ │ │ ├── TryWithExponentialBackoff.kt │ │ │ ├── TryWithRetry.kt │ │ │ ├── UiUtil.java │ │ │ ├── UserUtils.java │ │ │ ├── UuidProvider.kt │ │ │ ├── VCardUtil.java │ │ │ ├── base64 │ │ │ │ ├── AndroidBase64Encoder.kt │ │ │ │ └── Base64Encoder.kt │ │ │ ├── crypto │ │ │ │ ├── AbstractDecryptionResult.java │ │ │ │ ├── BinaryDecryptionResult.java │ │ │ │ ├── EOToken.java │ │ │ │ ├── KeyInformation.java │ │ │ │ ├── MimeDecryptor.kt │ │ │ │ ├── OpenPGP.java │ │ │ │ ├── ServerTimeInterceptor.kt │ │ │ │ ├── TextDecryptionResult.java │ │ │ │ └── TextVerificationResult.kt │ │ │ ├── css │ │ │ │ └── MessageBodyCssProvider.kt │ │ │ ├── extensions │ │ │ │ ├── ActivityExtensions.kt │ │ │ │ ├── AnyExtensions.kt │ │ │ │ ├── BooleanExtensions.kt │ │ │ │ ├── CollectionExtensions.kt │ │ │ │ ├── ColorExtensions.kt │ │ │ │ ├── CommonExtensions.kt │ │ │ │ ├── CompatExtensions.kt │ │ │ │ ├── DurationExtensions.kt │ │ │ │ ├── ExceptionExtensions.kt │ │ │ │ ├── LiveDataExtensions.kt │ │ │ │ ├── OkHttpExtensions.kt │ │ │ │ ├── RetrofitExtensions.kt │ │ │ │ ├── SerializationExtensions.kt │ │ │ │ ├── SnoozeExtensions.kt │ │ │ │ ├── StringExtensions.kt │ │ │ │ ├── TextExtensions.kt │ │ │ │ └── ViewExtensions.kt │ │ │ ├── notifier │ │ │ │ ├── AndroidUserNotifier.kt │ │ │ │ └── UserNotifier.kt │ │ │ ├── resources │ │ │ │ └── StringResourceResolver.kt │ │ │ ├── ui │ │ │ │ ├── ExpandableRecyclerAdapter.kt │ │ │ │ ├── RecipientDropDownClickListener.java │ │ │ │ ├── RecyclerViewEmptyViewSupport.kt │ │ │ │ ├── dialogs │ │ │ │ │ └── DialogUtils.kt │ │ │ │ ├── screen │ │ │ │ │ └── RenderDimensionsProvider.kt │ │ │ │ └── selection │ │ │ │ │ └── SelectionModeEnum.kt │ │ │ └── webview │ │ │ │ └── SetUpWebViewDarkModeHandlingIfSupported.kt │ │ │ ├── viewmodel │ │ │ ├── BaseViewModel.kt │ │ │ └── ConnectivityBaseViewModel.kt │ │ │ ├── views │ │ │ ├── ComposeEditText.java │ │ │ ├── ContactAddressView.java │ │ │ ├── ContactBirthdayClickListener.java │ │ │ ├── ContactOptionTypeClickListener.java │ │ │ ├── CustomQuickSnoozeDialog.java │ │ │ ├── ListItemThumbnail.kt │ │ │ ├── MessageRecipientView.java │ │ │ ├── PmWebViewClient.kt │ │ │ ├── RoundButton.kt │ │ │ ├── SecureEditText.kt │ │ │ ├── SettingsDefaultItemView.kt │ │ │ ├── VCardLinearLayout.java │ │ │ ├── alerts │ │ │ │ └── StorageLimitAlert.kt │ │ │ ├── messageDetails │ │ │ │ ├── AttachmentDetailView.kt │ │ │ │ ├── BottomActionsView.kt │ │ │ │ ├── MessageDetailsAttachmentsView.kt │ │ │ │ ├── MessageDetailsExpirationInfoView.kt │ │ │ │ ├── MessageDetailsHeaderView.kt │ │ │ │ ├── MessageDetailsRecipientsContainerView.kt │ │ │ │ └── ReplyActionsView.kt │ │ │ ├── messagesList │ │ │ │ ├── MailboxItemFooterView.kt │ │ │ │ ├── MailboxItemView.kt │ │ │ │ └── SenderInitialView.kt │ │ │ └── models │ │ │ │ ├── LocalContact.kt │ │ │ │ └── LocalContactAddress.kt │ │ │ └── worker │ │ │ ├── CreateContactGroupWorker.kt │ │ │ ├── CreateContactWorker.kt │ │ │ ├── DeleteAttachmentWorker.kt │ │ │ ├── DeleteContactWorker.kt │ │ │ ├── DeleteMessageWorker.kt │ │ │ ├── EmptyFolderRemoteWorker.kt │ │ │ ├── FetchContactsDataWorker.kt │ │ │ ├── FetchContactsEmailsWorker.kt │ │ │ ├── FetchMailSettingsWorker.kt │ │ │ ├── FetchUserAddressesWorker.kt │ │ │ ├── FetchUserWorker.kt │ │ │ ├── PingWorker.kt │ │ │ ├── drafts │ │ │ ├── CreateDraftWorker.kt │ │ │ └── CreateDraftWorkerErrors.kt │ │ │ └── repository │ │ │ └── WorkerRepository.kt │ ├── res │ │ ├── .locale-state.metadata │ │ ├── anim │ │ │ ├── zoom_in.xml │ │ │ └── zoom_out.xml │ │ ├── drawable-hdpi │ │ │ └── drawer_shadow.9.png │ │ ├── drawable-mdpi │ │ │ └── drawer_shadow.9.png │ │ ├── drawable-nodpi │ │ │ ├── _unknown.png │ │ │ ├── ad.png │ │ │ ├── ae.png │ │ │ ├── af.png │ │ │ ├── ag.png │ │ │ ├── ai.png │ │ │ ├── al.png │ │ │ ├── am.png │ │ │ ├── ao.png │ │ │ ├── ar.png │ │ │ ├── as.png │ │ │ ├── at.png │ │ │ ├── au.png │ │ │ ├── aw.png │ │ │ ├── az.png │ │ │ ├── ba.png │ │ │ ├── bb.png │ │ │ ├── bd.png │ │ │ ├── be.png │ │ │ ├── bf.png │ │ │ ├── bg.png │ │ │ ├── bh.png │ │ │ ├── bi.png │ │ │ ├── bj.png │ │ │ ├── bl.png │ │ │ ├── bm.png │ │ │ ├── bn.png │ │ │ ├── bo.png │ │ │ ├── br.png │ │ │ ├── bs.png │ │ │ ├── bt.png │ │ │ ├── bw.png │ │ │ ├── by.png │ │ │ ├── bz.png │ │ │ ├── ca.png │ │ │ ├── cd.png │ │ │ ├── cf.png │ │ │ ├── cg.png │ │ │ ├── ch.png │ │ │ ├── ci.png │ │ │ ├── ck.png │ │ │ ├── cl.png │ │ │ ├── cm.png │ │ │ ├── cn.png │ │ │ ├── co.png │ │ │ ├── cr.png │ │ │ ├── cu.png │ │ │ ├── cv.png │ │ │ ├── cw.png │ │ │ ├── cy.png │ │ │ ├── cz.png │ │ │ ├── de.png │ │ │ ├── dj.png │ │ │ ├── dk.png │ │ │ ├── dm.png │ │ │ ├── dz.png │ │ │ ├── ec.png │ │ │ ├── ee.png │ │ │ ├── eg.png │ │ │ ├── eh.png │ │ │ ├── encryption.jpg │ │ │ ├── er.png │ │ │ ├── es.png │ │ │ ├── et.png │ │ │ ├── expire.jpg │ │ │ ├── fi.png │ │ │ ├── fj.png │ │ │ ├── fk.png │ │ │ ├── fm.png │ │ │ ├── fo.png │ │ │ ├── fr.png │ │ │ ├── ga.png │ │ │ ├── gb.png │ │ │ ├── gd.png │ │ │ ├── ge.png │ │ │ ├── gg.png │ │ │ ├── gh.png │ │ │ ├── gi.png │ │ │ ├── gl.png │ │ │ ├── gm.png │ │ │ ├── gn.png │ │ │ ├── gq.png │ │ │ ├── gr.png │ │ │ ├── gt.png │ │ │ ├── gu.png │ │ │ ├── gw.png │ │ │ ├── gy.png │ │ │ ├── help.jpg │ │ │ ├── hk.png │ │ │ ├── hn.png │ │ │ ├── hr.png │ │ │ ├── ht.png │ │ │ ├── hu.png │ │ │ ├── id.png │ │ │ ├── ie.png │ │ │ ├── il.png │ │ │ ├── im.png │ │ │ ├── in.png │ │ │ ├── iq.png │ │ │ ├── ir.png │ │ │ ├── is.png │ │ │ ├── it.png │ │ │ ├── je.png │ │ │ ├── jm.png │ │ │ ├── jo.png │ │ │ ├── jp.png │ │ │ ├── ke.png │ │ │ ├── kg.png │ │ │ ├── kh.png │ │ │ ├── ki.png │ │ │ ├── km.png │ │ │ ├── kn.png │ │ │ ├── kp.png │ │ │ ├── kr.png │ │ │ ├── kw.png │ │ │ ├── ky.png │ │ │ ├── kz.png │ │ │ ├── la.png │ │ │ ├── labels.jpg │ │ │ ├── lb.png │ │ │ ├── lc.png │ │ │ ├── li.png │ │ │ ├── lk.png │ │ │ ├── lr.png │ │ │ ├── ls.png │ │ │ ├── lt.png │ │ │ ├── lu.png │ │ │ ├── lv.png │ │ │ ├── ly.png │ │ │ ├── ma.png │ │ │ ├── mc.png │ │ │ ├── md.png │ │ │ ├── me.png │ │ │ ├── mf.png │ │ │ ├── mg.png │ │ │ ├── mh.png │ │ │ ├── mk.png │ │ │ ├── ml.png │ │ │ ├── mm.png │ │ │ ├── mn.png │ │ │ ├── mo.png │ │ │ ├── mp.png │ │ │ ├── mq.png │ │ │ ├── mr.png │ │ │ ├── ms.png │ │ │ ├── mt.png │ │ │ ├── mu.png │ │ │ ├── mv.png │ │ │ ├── mw.png │ │ │ ├── mx.png │ │ │ ├── my.png │ │ │ ├── mz.png │ │ │ ├── na.png │ │ │ ├── nc.png │ │ │ ├── ne.png │ │ │ ├── nf.png │ │ │ ├── ng.png │ │ │ ├── ni.png │ │ │ ├── nl.png │ │ │ ├── no.png │ │ │ ├── np.png │ │ │ ├── nr.png │ │ │ ├── nu.png │ │ │ ├── nz.png │ │ │ ├── om.png │ │ │ ├── pa.png │ │ │ ├── pe.png │ │ │ ├── pf.png │ │ │ ├── pg.png │ │ │ ├── ph.png │ │ │ ├── pk.png │ │ │ ├── pl.png │ │ │ ├── pr.png │ │ │ ├── ps.png │ │ │ ├── pt.png │ │ │ ├── pw.png │ │ │ ├── py.png │ │ │ ├── qa.png │ │ │ ├── ro.png │ │ │ ├── rs.png │ │ │ ├── ru.png │ │ │ ├── rw.png │ │ │ ├── sa.png │ │ │ ├── sb.png │ │ │ ├── sc.png │ │ │ ├── sd.png │ │ │ ├── se.png │ │ │ ├── sg.png │ │ │ ├── sh.png │ │ │ ├── si.png │ │ │ ├── sk.png │ │ │ ├── sl.png │ │ │ ├── sm.png │ │ │ ├── sn.png │ │ │ ├── so.png │ │ │ ├── sr.png │ │ │ ├── ss.png │ │ │ ├── st.png │ │ │ ├── sv.png │ │ │ ├── swipe.jpg │ │ │ ├── sy.png │ │ │ ├── sz.png │ │ │ ├── tc.png │ │ │ ├── td.png │ │ │ ├── tg.png │ │ │ ├── th.png │ │ │ ├── tj.png │ │ │ ├── tk.png │ │ │ ├── tl.png │ │ │ ├── tm.png │ │ │ ├── tn.png │ │ │ ├── to.png │ │ │ ├── tr.png │ │ │ ├── tt.png │ │ │ ├── tv.png │ │ │ ├── tw.png │ │ │ ├── tz.png │ │ │ ├── ua.png │ │ │ ├── ug.png │ │ │ ├── us.png │ │ │ ├── uy.png │ │ │ ├── uz.png │ │ │ ├── va.png │ │ │ ├── vc.png │ │ │ ├── ve.png │ │ │ ├── vg.png │ │ │ ├── vi.png │ │ │ ├── vn.png │ │ │ ├── vu.png │ │ │ ├── welcome.jpg │ │ │ ├── wf.png │ │ │ ├── ws.png │ │ │ ├── xk.png │ │ │ ├── ye.png │ │ │ ├── yt.png │ │ │ ├── za.png │ │ │ ├── zm.png │ │ │ └── zw.png │ │ ├── drawable-v24 │ │ │ └── ic_launcher_foreground.xml │ │ ├── drawable-xhdpi │ │ │ └── drawer_shadow.9.png │ │ ├── drawable-xxhdpi │ │ │ └── drawer_shadow.9.png │ │ ├── drawable-xxxhdpi │ │ │ ├── ic_clear_black.png │ │ │ ├── textfield_label.9.png │ │ │ ├── textfield_violet.9.png │ │ │ └── textfield_white.9.png │ │ ├── drawable │ │ │ ├── actionbar_shadow.xml │ │ │ ├── background_messages_number.xml │ │ │ ├── background_selection_mode_not_selected.xml │ │ │ ├── background_selection_mode_selected.xml │ │ │ ├── background_sender_initial.xml │ │ │ ├── bg_collapsed_label.xml │ │ │ ├── bg_recipient_chip.xml │ │ │ ├── bg_recipient_chip_default.xml │ │ │ ├── bg_recipient_chip_selected.xml │ │ │ ├── bg_spinner_three_dots.xml │ │ │ ├── circle_background_interaction_strong.xml │ │ │ ├── circle_background_interaction_strong_pressed.xml │ │ │ ├── circle_background_interaction_weak.xml │ │ │ ├── circle_background_interaction_weak_pressed.xml │ │ │ ├── circle_labels_selection.xml │ │ │ ├── circle_onboarding_indicator_active.xml │ │ │ ├── circle_onboarding_indicator_inactive.xml │ │ │ ├── cursor_black.xml │ │ │ ├── field.xml │ │ │ ├── ic_brand_mail.xml │ │ │ ├── ic_compose_shortcut.xml │ │ │ ├── ic_file_image.xml │ │ │ ├── ic_hourglass_message_header.xml │ │ │ ├── ic_note.xml │ │ │ ├── ic_pen_white.xml │ │ │ ├── ic_star_filled.xml │ │ │ ├── img_empty_folder.xml │ │ │ ├── img_empty_mailbox.xml │ │ │ ├── img_empty_search.xml │ │ │ ├── img_empty_trash.xml │ │ │ ├── img_no_contacts.xml │ │ │ ├── img_no_groups.xml │ │ │ ├── img_no_messages_in_spam.xml │ │ │ ├── img_onboarding_encryption.xml │ │ │ ├── img_onboarding_labels_folders.xml │ │ │ ├── img_onboarding_new_features.xml │ │ │ ├── keyboard_button_background.xml │ │ │ ├── list_divider.xml │ │ │ ├── message_details_error_banner_background.xml │ │ │ ├── message_details_info_banner_background.xml │ │ │ ├── repeat_day_selected_background.xml │ │ │ ├── repeat_day_unselected_background.xml │ │ │ ├── ripple_background_norm.xml │ │ │ ├── ripple_reply_actions.xml │ │ │ ├── search_edittext_shape.xml │ │ │ ├── selector_selection_mode_background.xml │ │ │ ├── selector_selection_mode_icon.xml │ │ │ ├── selector_star_action_icon.xml │ │ │ ├── selector_unread_messages_status_background.xml │ │ │ ├── selector_unread_messages_status_text_color.xml │ │ │ ├── settings_left_swipe_action_preview_background.xml │ │ │ ├── settings_right_swipe_action_preview_background.xml │ │ │ ├── shape_background_action_sheet_buttons.xml │ │ │ ├── shape_check.xml │ │ │ ├── shape_ellipse.xml │ │ │ ├── shape_oval.xml │ │ │ ├── shape_rectangle_xsmall_corners_bg_secondary_fill.xml │ │ │ ├── shape_rectangle_xsmall_corners_bg_secondary_ripple.xml │ │ │ ├── shape_rectangle_xxsmall_corners_weak_fill.xml │ │ │ ├── shape_reply_actions_background.xml │ │ │ ├── shape_stretchable_circle.xml │ │ │ ├── spacer_s_m.xml │ │ │ └── spinner_item_dropdown.xml │ │ ├── layout │ │ │ ├── activity_add_attachments.xml │ │ │ ├── activity_address_chooser.xml │ │ │ ├── activity_attachment_storage.xml │ │ │ ├── activity_compose_message.xml │ │ │ ├── activity_contact_details.xml │ │ │ ├── activity_contact_group_details.xml │ │ │ ├── activity_contacts.xml │ │ │ ├── activity_create_contact_group.xml │ │ │ ├── activity_default_address.xml │ │ │ ├── activity_edit_contact_details.xml │ │ │ ├── activity_edit_contact_group.xml │ │ │ ├── activity_edit_settings_item.xml │ │ │ ├── activity_fragment_container.xml │ │ │ ├── activity_labels_manager.xml │ │ │ ├── activity_mailbox.xml │ │ │ ├── activity_message_details.xml │ │ │ ├── activity_notification_settings.xml │ │ │ ├── activity_onboarding.xml │ │ │ ├── activity_parent_folder_picker.xml │ │ │ ├── activity_pin_settings.xml │ │ │ ├── activity_search.xml │ │ │ ├── activity_set_message_expiration.xml │ │ │ ├── activity_set_message_password.xml │ │ │ ├── activity_settings.xml │ │ │ ├── activity_snooze_notifications.xml │ │ │ ├── activity_swipe_chooser.xml │ │ │ ├── activity_theme_chooser.xml │ │ │ ├── activity_view_headers.xml │ │ │ ├── alias_list_item_inactive.xml │ │ │ ├── attachment_inline_first_list_item.xml │ │ │ ├── attachment_list_item.xml │ │ │ ├── checkbox.xml │ │ │ ├── contact_address_detailed.xml │ │ │ ├── contact_groups_email_list_item_selectable.xml │ │ │ ├── contact_new_vcard_address.xml │ │ │ ├── contact_new_vcard_item_email_address.xml │ │ │ ├── contact_vcard_address_editable.xml │ │ │ ├── contact_vcard_item_editable.xml │ │ │ ├── contact_vcard_item_note.xml │ │ │ ├── content_contact_group_details.xml │ │ │ ├── content_edit_create_contact_group_header.xml │ │ │ ├── custom_quick_snooze_dialog.xml │ │ │ ├── dialog_email_type.xml │ │ │ ├── dialog_fragment_group_recipients.xml │ │ │ ├── dialog_fragment_quick_snooze.xml │ │ │ ├── dialog_message_troubleshoot.xml │ │ │ ├── dialog_recipient_expiration_unsupported.xml │ │ │ ├── drawer_footer.xml │ │ │ ├── drawer_list_item.xml │ │ │ ├── drawer_list_item_divider.xml │ │ │ ├── drawer_section_name_item.xml │ │ │ ├── folder_color_item.xml │ │ │ ├── fragment_color_chooser.xml │ │ │ ├── fragment_contacts.xml │ │ │ ├── fragment_contacts_groups.xml │ │ │ ├── fragment_labels_action_sheet.xml │ │ │ ├── fragment_message_action_sheet.xml │ │ │ ├── fragment_pin.xml │ │ │ ├── group_recipient_list_item.xml │ │ │ ├── horizontal_divider.xml │ │ │ ├── item_email_expiration_error_dialog.xml │ │ │ ├── item_manage_labels_action.xml │ │ │ ├── item_parent_picker_folder.xml │ │ │ ├── item_vcard_option_dialog.xml │ │ │ ├── label_color_item_circle.xml │ │ │ ├── labels_list_item.xml │ │ │ ├── layout_bottom_actions.xml │ │ │ ├── layout_collapsed_message_views.xml │ │ │ ├── layout_composer_bottom_app_bar.xml │ │ │ ├── layout_contact_details_main_buttons.xml │ │ │ ├── layout_contacts_edit_filed_type_selector.xml │ │ │ ├── layout_contacts_edit_filed_with_delete.xml │ │ │ ├── layout_delinquency_dialog.xml │ │ │ ├── layout_dialog_warning.xml │ │ │ ├── layout_mailbox_error_state.xml │ │ │ ├── layout_mailbox_no_messages.xml │ │ │ ├── layout_mailbox_status_view.xml │ │ │ ├── layout_message_details.xml │ │ │ ├── layout_message_details_actions_sheet_buttons.xml │ │ │ ├── layout_message_details_activity_toolbar.xml │ │ │ ├── layout_message_details_attachments.xml │ │ │ ├── layout_message_details_attachments_details.xml │ │ │ ├── layout_message_details_body.xml │ │ │ ├── layout_message_details_expiration_info.xml │ │ │ ├── layout_message_details_header.xml │ │ │ ├── layout_message_details_icons.xml │ │ │ ├── layout_message_details_recipients_container.xml │ │ │ ├── layout_message_details_reply_actions.xml │ │ │ ├── layout_message_details_scheduled_info.xml │ │ │ ├── layout_onboarding_item.xml │ │ │ ├── layout_open_in_proton_calendar.xml │ │ │ ├── layout_recipient_chip.xml │ │ │ ├── layout_recipient_dropdown_item.xml │ │ │ ├── layout_send_action.xml │ │ │ ├── layout_sender_initial.xml │ │ │ ├── list_item_contact_detail.xml │ │ │ ├── list_item_contacts.xml │ │ │ ├── list_item_mailbox.xml │ │ │ ├── mailbox_left_swipe_action_archive.xml │ │ │ ├── mailbox_left_swipe_action_mark_read.xml │ │ │ ├── mailbox_left_swipe_action_spam.xml │ │ │ ├── mailbox_left_swipe_action_star.xml │ │ │ ├── mailbox_left_swipe_action_trash.xml │ │ │ ├── mailbox_right_swipe_action_archive.xml │ │ │ ├── mailbox_right_swipe_action_mark_read.xml │ │ │ ├── mailbox_right_swipe_action_spam.xml │ │ │ ├── mailbox_right_swipe_action_star.xml │ │ │ ├── mailbox_right_swipe_action_trash.xml │ │ │ ├── menu_save_button.xml │ │ │ ├── menu_skip_button.xml │ │ │ ├── message_details_actions.xml │ │ │ ├── messages_list_footer_view.xml │ │ │ ├── nav_item_label.xml │ │ │ ├── navigation_drawer.xml │ │ │ ├── quick_snooze_list_item.xml │ │ │ ├── radio_button_list_item.xml │ │ │ ├── secure_edit_view.xml │ │ │ ├── settings_fragment_display_name_and_signature.xml │ │ │ ├── settings_item.xml │ │ │ ├── settings_item_layout.xml │ │ │ ├── settings_left_swipe_action_archive.xml │ │ │ ├── settings_left_swipe_action_mark_read.xml │ │ │ ├── settings_left_swipe_action_preview.xml │ │ │ ├── settings_left_swipe_action_spam.xml │ │ │ ├── settings_left_swipe_action_star.xml │ │ │ ├── settings_left_swipe_action_trash.xml │ │ │ ├── settings_right_swipe_action_archive.xml │ │ │ ├── settings_right_swipe_action_mark_read.xml │ │ │ ├── settings_right_swipe_action_preview.xml │ │ │ ├── settings_right_swipe_action_spam.xml │ │ │ ├── settings_right_swipe_action_star.xml │ │ │ ├── settings_right_swipe_action_trash.xml │ │ │ ├── settings_section.xml │ │ │ ├── settings_swipe_fragment.xml │ │ │ ├── simple_spinner_item_black.xml │ │ │ ├── storage_limit_layout_view.xml │ │ │ ├── timeout_spinner_item.xml │ │ │ ├── timeout_spinner_item_dropdown.xml │ │ │ ├── toolbar.xml │ │ │ ├── toolbar_mailbox.xml │ │ │ ├── view_action_sheet_header.xml │ │ │ ├── view_checkable_button.xml │ │ │ └── view_days_and_hours_picker.xml │ │ ├── menu │ │ │ ├── contact_details_convert_menu.xml │ │ │ ├── contact_details_edit_menu.xml │ │ │ ├── contacts_menu.xml │ │ │ ├── contacts_selection_menu.xml │ │ │ ├── done_menu.xml │ │ │ ├── menu_attachments.xml │ │ │ ├── menu_compose_message.xml │ │ │ ├── menu_contact_details.xml │ │ │ ├── menu_contact_group_details.xml │ │ │ ├── menu_mailbox_options.xml │ │ │ ├── menu_onboarding.xml │ │ │ ├── menu_parent_picker.xml │ │ │ ├── menu_set_message_expiration.xml │ │ │ ├── recipient_popup_menu.xml │ │ │ ├── save_menu.xml │ │ │ ├── search_menu.xml │ │ │ └── share_menu.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 │ │ │ ├── acc_settings_structure.json │ │ │ ├── css_reset_dark_mode_only.css │ │ │ ├── css_reset_with_custom_props.css │ │ │ ├── edit_settings_structure.json │ │ │ └── settings_structure.json │ │ ├── values-b+es+419 │ │ │ └── strings.xml │ │ ├── values-be │ │ │ └── strings.xml │ │ ├── values-ca-rES │ │ │ ├── strings.xml │ │ │ └── vcard_type_vals.xml │ │ ├── values-cs │ │ │ ├── strings.xml │ │ │ └── vcard_type_vals.xml │ │ ├── values-da │ │ │ ├── strings.xml │ │ │ └── vcard_type_vals.xml │ │ ├── values-de │ │ │ ├── strings.xml │ │ │ └── vcard_type_vals.xml │ │ ├── values-el │ │ │ └── strings.xml │ │ ├── values-es │ │ │ ├── strings.xml │ │ │ └── vcard_type_vals.xml │ │ ├── values-fr │ │ │ ├── strings.xml │ │ │ └── vcard_type_vals.xml │ │ ├── values-hdpi │ │ │ └── dimens.xml │ │ ├── values-hr │ │ │ ├── strings.xml │ │ │ └── vcard_type_vals.xml │ │ ├── values-hu-rHU │ │ │ ├── strings.xml │ │ │ └── vcard_type_vals.xml │ │ ├── values-in │ │ │ ├── strings.xml │ │ │ └── vcard_type_vals.xml │ │ ├── values-is-rIS │ │ │ ├── strings.xml │ │ │ └── vcard_type_vals.xml │ │ ├── values-it │ │ │ ├── strings.xml │ │ │ └── vcard_type_vals.xml │ │ ├── values-ja │ │ │ ├── strings.xml │ │ │ └── vcard_type_vals.xml │ │ ├── values-ka │ │ │ └── strings.xml │ │ ├── values-kab │ │ │ ├── strings.xml │ │ │ └── vcard_type_vals.xml │ │ ├── values-ldrtl │ │ │ └── ld_values.xml │ │ ├── values-mdpi │ │ │ └── dimens.xml │ │ ├── values-nl │ │ │ ├── strings.xml │ │ │ └── vcard_type_vals.xml │ │ ├── values-pl │ │ │ ├── strings.xml │ │ │ └── vcard_type_vals.xml │ │ ├── values-pt-rBR │ │ │ ├── strings.xml │ │ │ └── vcard_type_vals.xml │ │ ├── values-pt │ │ │ ├── strings.xml │ │ │ └── vcard_type_vals.xml │ │ ├── values-ro │ │ │ ├── strings.xml │ │ │ └── vcard_type_vals.xml │ │ ├── values-ru │ │ │ ├── strings.xml │ │ │ └── vcard_type_vals.xml │ │ ├── values-sv-rSE │ │ │ ├── strings.xml │ │ │ └── vcard_type_vals.xml │ │ ├── values-tr │ │ │ ├── strings.xml │ │ │ └── vcard_type_vals.xml │ │ ├── values-uk │ │ │ ├── strings.xml │ │ │ └── vcard_type_vals.xml │ │ ├── values-xhdpi │ │ │ └── dimens.xml │ │ ├── values-zh-rCN │ │ │ ├── strings.xml │ │ │ └── vcard_type_vals.xml │ │ ├── values-zh-rTW │ │ │ ├── strings.xml │ │ │ └── vcard_type_vals.xml │ │ ├── values │ │ │ ├── attrs.xml │ │ │ ├── buttons.xml │ │ │ ├── cnfg.xml │ │ │ ├── colors.xml │ │ │ ├── dimens.xml │ │ │ ├── ic_launcher_background.xml │ │ │ ├── icons.xml │ │ │ ├── ids.xml │ │ │ ├── ints.xml │ │ │ ├── ld_values.xml │ │ │ ├── links.xml │ │ │ ├── notif.xml │ │ │ ├── strings.xml │ │ │ ├── styles.xml │ │ │ ├── themes.xml │ │ │ └── vcard_type_vals.xml │ │ ├── xml-v25 │ │ │ └── shortcuts.xml │ │ └── xml │ │ │ ├── network_security_config.xml │ │ │ └── provider_paths.xml │ └── resources │ │ └── jacoco-agent.properties │ ├── production │ └── java │ │ └── ch.protonmail.android │ │ └── di │ │ └── ConfigurableParametersModule.kt │ ├── test │ ├── java │ │ └── ch │ │ │ └── protonmail │ │ │ └── android │ │ │ ├── activities │ │ │ └── messageDetails │ │ │ │ ├── IntentExtrasDataTest.kt │ │ │ │ ├── MessageRendererTest.kt │ │ │ │ └── viewmodel │ │ │ │ └── MessageDetailsViewModelTest.kt │ │ │ ├── api │ │ │ ├── AccountManagerTest.kt │ │ │ ├── NetworkConfiguratorTest.kt │ │ │ ├── NetworkSwitcherTest.kt │ │ │ ├── ProtonMailApiManagerTest.kt │ │ │ ├── SwitchToMainBackendIfAvailableTest.kt │ │ │ ├── SwitchToMainBackendIfOnProxyTest.kt │ │ │ ├── interceptors │ │ │ │ ├── BaseRequestInterceptorTest.kt │ │ │ │ └── RetryRequestInterceptorTest.kt │ │ │ ├── local │ │ │ │ └── SnoozeSettingsTest.kt │ │ │ ├── models │ │ │ │ ├── messages │ │ │ │ │ └── receive │ │ │ │ │ │ ├── MessageLocationResolverTest.kt │ │ │ │ │ │ └── MessageMapperTest.kt │ │ │ │ └── room │ │ │ │ │ └── messages │ │ │ │ │ └── MessagesTypesConverterTest.kt │ │ │ └── segments │ │ │ │ ├── contact │ │ │ │ └── ContactEmailsManagerTest.kt │ │ │ │ └── event │ │ │ │ ├── EventHandlerTest.kt │ │ │ │ └── FetchEventsAndRescheduleTest.kt │ │ │ ├── attachments │ │ │ ├── AttachmentsHelperTest.kt │ │ │ ├── AttachmentsRepositoryTest.kt │ │ │ ├── AttachmentsViewModelTest.kt │ │ │ ├── DownloadEmbeddedAttachmentsWorkerTest.kt │ │ │ ├── ExtractAttachmentByteArrayTest.kt │ │ │ ├── HandleSingleAttachmentTest.kt │ │ │ └── UploadAttachmentsWorkerTest.kt │ │ │ ├── compose │ │ │ ├── ComposeMessageViewModelTest.kt │ │ │ ├── domain │ │ │ │ └── GetAddressIndexByAddressIdTest.kt │ │ │ ├── presentation │ │ │ │ ├── model │ │ │ │ │ └── AddExpirationTimeToMessageTest.kt │ │ │ │ ├── util │ │ │ │ │ └── HtmlToSpannedTest.kt │ │ │ │ └── viewmodel │ │ │ │ │ └── SetMessagePasswordViewModelTest.kt │ │ │ └── send │ │ │ │ ├── SendMessageTest.kt │ │ │ │ └── SendMessageWorkerTest.kt │ │ │ ├── contacts │ │ │ ├── details │ │ │ │ ├── ContactDetailsRepositoryTest.kt │ │ │ │ ├── ContactDetailsViewModelOldTest.kt │ │ │ │ ├── ContactGroupsRepositoryTest.kt │ │ │ │ ├── domain │ │ │ │ │ ├── FetchContactDetailsTest.kt │ │ │ │ │ ├── FetchContactGroupsTest.kt │ │ │ │ │ └── FetchContactsMapperTest.kt │ │ │ │ └── presentation │ │ │ │ │ ├── ContactDetailsMapperTest.kt │ │ │ │ │ └── ContactDetailsViewModelTest.kt │ │ │ ├── domain │ │ │ │ └── usecase │ │ │ │ │ └── ExtractInitialsTest.kt │ │ │ ├── groups │ │ │ │ ├── ContactGroupsViewModelTest.kt │ │ │ │ └── edit │ │ │ │ │ └── ContactGroupEditCreateRepositoryTest.kt │ │ │ └── list │ │ │ │ └── viewModel │ │ │ │ ├── ContactsListMapperTest.kt │ │ │ │ └── ContactsListViewModelTest.kt │ │ │ ├── core │ │ │ ├── DetailedExceptionTimberDebugTest.kt │ │ │ └── QueueNetworkUtilTest.kt │ │ │ ├── crypto │ │ │ └── AddressCryptoTest.kt │ │ │ ├── data │ │ │ ├── ProtonStoreTest.kt │ │ │ └── local │ │ │ │ └── CounterRepositoryImplTest.kt │ │ │ ├── details │ │ │ ├── data │ │ │ │ └── MessageFlagsToEncryptionMapperTest.kt │ │ │ ├── domain │ │ │ │ ├── MessageBodyDecryptorTest.kt │ │ │ │ ├── MessageBodyParserTest.kt │ │ │ │ └── usecase │ │ │ │ │ ├── MarkMessageAsReadIfNeededTest.kt │ │ │ │ │ └── SetViewInDarkModeMessagePreferenceTest.kt │ │ │ └── presentation │ │ │ │ ├── LoadTheLastNonDraftMessageBodyTest.kt │ │ │ │ ├── MessageBodyLoaderTest.kt │ │ │ │ └── mapper │ │ │ │ ├── MessageEncryptionUiModelMapperTest.kt │ │ │ │ └── MessageToMessageDetailsListItemMapperTest.kt │ │ │ ├── drawer │ │ │ └── presentation │ │ │ │ └── mapper │ │ │ │ └── DrawerLabelUiModelMapperTest.kt │ │ │ ├── feature │ │ │ └── rating │ │ │ │ ├── MailboxScreenViewInMemoryRepositoryTest.kt │ │ │ │ ├── StartRateAppFlowTest.kt │ │ │ │ └── usecase │ │ │ │ └── ShouldStartRateAppFlowTest.kt │ │ │ ├── featureflags │ │ │ └── RefreshFeatureFlagsTest.kt │ │ │ ├── jobs │ │ │ ├── PostStarJobTest.kt │ │ │ └── UpdateSettingsJobTest.kt │ │ │ ├── labels │ │ │ ├── data │ │ │ │ ├── LabelRepositoryImplTest.kt │ │ │ │ ├── mapper │ │ │ │ │ ├── LabelEntityApiMapperTest.kt │ │ │ │ │ ├── LabelEventApiMapperTest.kt │ │ │ │ │ └── LabelOrFolderWithChildrenMapperTest.kt │ │ │ │ └── remote │ │ │ │ │ └── worker │ │ │ │ │ ├── ApplyMessageLabelWorkerTest.kt │ │ │ │ │ ├── DeleteLabelsWorkerTest.kt │ │ │ │ │ ├── PostLabelWorkerTest.kt │ │ │ │ │ ├── RemoveMembersFromContactGroupWorkerTest.kt │ │ │ │ │ └── RemoveMessageLabelWorkerTest.kt │ │ │ ├── domain │ │ │ │ └── usecase │ │ │ │ │ ├── GetLabelsByTypeTest.kt │ │ │ │ │ ├── MoveMessagesToFolderTest.kt │ │ │ │ │ ├── ObserveFoldersEligibleAsParentTest.kt │ │ │ │ │ └── UpdateMessageLabelsTest.kt │ │ │ ├── presentation │ │ │ │ ├── mapper │ │ │ │ │ ├── LabelChipUiModelMapperTest.kt │ │ │ │ │ ├── LabelDomainActionItemUiMapperTest.kt │ │ │ │ │ ├── LabelsManagerItemUiModelMapperTest.kt │ │ │ │ │ └── ParentFolderPickerItemUiModelMapperTest.kt │ │ │ │ └── viewmodel │ │ │ │ │ ├── LabelsActionSheetViewModelTest.kt │ │ │ │ │ └── ParentFolderPickerViewModelTest.kt │ │ │ └── utils │ │ │ │ └── buildFolders.kt │ │ │ ├── mailbox │ │ │ ├── data │ │ │ │ ├── ConversationsRepositoryImplTest.kt │ │ │ │ ├── MarkUnreadLatestNonDraftMessageInLocationTest.kt │ │ │ │ ├── mapper │ │ │ │ │ ├── ConversationApiModelToConversationDatabaseModelMapperTest.kt │ │ │ │ │ └── ConversationDatabaseModelToConversationMapperTest.kt │ │ │ │ └── remote │ │ │ │ │ └── worker │ │ │ │ │ ├── DeleteConversationsRemoteWorkerTest.kt │ │ │ │ │ ├── LabelConversationsRemoteWorkerTest.kt │ │ │ │ │ ├── MarkConversationsReadRemoteWorkerTest.kt │ │ │ │ │ ├── MarkConversationsUnreadRemoteWorkerTest.kt │ │ │ │ │ ├── MoveMessageToLocationWorkerTest.kt │ │ │ │ │ └── UnlabelConversationsRemoteWorkerTest.kt │ │ │ ├── domain │ │ │ │ ├── ChangeConversationsReadStatusTest.kt │ │ │ │ ├── ChangeConversationsStarredStatusTest.kt │ │ │ │ ├── DeleteConversationsTest.kt │ │ │ │ ├── MoveConversationsToFolderTest.kt │ │ │ │ ├── UpdateConversationsLabelsTest.kt │ │ │ │ ├── usecase │ │ │ │ │ ├── ObserveAllUnreadCountersTest.kt │ │ │ │ │ ├── ObserveConversationsByLocationTest.kt │ │ │ │ │ ├── ObserveMessageCountByLocationTest.kt │ │ │ │ │ ├── ObserveMessagesByLocationTest.kt │ │ │ │ │ └── ObserveShowMovedEnabledTest.kt │ │ │ │ └── worker │ │ │ │ │ └── UpdateConversationsLabelsWorkerTest.kt │ │ │ └── presentation │ │ │ │ ├── ConversationModeEnabledTest.kt │ │ │ │ ├── mapper │ │ │ │ └── MailboxItemUiModelMapperTest.kt │ │ │ │ └── viewmodel │ │ │ │ └── MailboxViewModelTest.kt │ │ │ ├── mapper │ │ │ └── bridge │ │ │ │ ├── AddressKeysBridgeMapperTest.kt │ │ │ │ ├── AddressesBridgeMapperTest.kt │ │ │ │ ├── UserBridgeMapperTest.kt │ │ │ │ └── UserKeysBridgeMapperTest.kt │ │ │ ├── metrics │ │ │ └── domain │ │ │ │ └── SendMetricsForViewInDarkModePreferenceTest.kt │ │ │ ├── navigation │ │ │ └── presentation │ │ │ │ └── NavigationViewModelTest.kt │ │ │ ├── notifications │ │ │ ├── data │ │ │ │ ├── mapper │ │ │ │ │ ├── NotificationEntityApiMapperTest.kt │ │ │ │ │ └── NotificationEntityDomainMapperTest.kt │ │ │ │ └── remote │ │ │ │ │ └── fcm │ │ │ │ │ ├── FcmTokenManagerTest.kt │ │ │ │ │ ├── MultiUserFcmTokenManagerTest.kt │ │ │ │ │ └── RegisterDeviceWorkerTest.kt │ │ │ ├── domain │ │ │ │ └── ProcessPushNotificationDataWorkerTest.kt │ │ │ └── presentation │ │ │ │ └── usecase │ │ │ │ ├── ClearNotificationTest.kt │ │ │ │ └── ClearNotificationsForUserTest.kt │ │ │ ├── onboarding │ │ │ ├── base │ │ │ │ └── presentation │ │ │ │ │ └── AddStartOnboardingObserverIfNeededTest.kt │ │ │ ├── existinguser │ │ │ │ └── presentation │ │ │ │ │ └── ExistingUserOnboardingViewModelTest.kt │ │ │ └── newuser │ │ │ │ └── presentation │ │ │ │ └── NewUserOnboardingViewModelTest.kt │ │ │ ├── pendingaction │ │ │ └── data │ │ │ │ ├── repository │ │ │ │ └── PendingSendRepositoryImplTest.kt │ │ │ │ └── worker │ │ │ │ ├── CleanUpPendingSendWorkerTest.kt │ │ │ │ ├── SchedulePendingSendCleanUpWhenOnlineTest.kt │ │ │ │ └── SchedulePendingSendsCleanUpWorkerTest.kt │ │ │ ├── pinlock │ │ │ └── domain │ │ │ │ └── usecase │ │ │ │ ├── GetPinLockTimerTest.kt │ │ │ │ ├── IsPinLockEnabledTest.kt │ │ │ │ └── ShouldShowPinLockScreenTest.kt │ │ │ ├── prefs │ │ │ ├── MockSecureSharedPreferences.kt │ │ │ └── SecureSharedPreferencesTest.kt │ │ │ ├── repository │ │ │ └── MessageRepositoryTest.kt │ │ │ ├── sentry │ │ │ └── SentryTreeTest.kt │ │ │ ├── settings │ │ │ ├── data │ │ │ │ ├── SharedPreferencesAccountSettingsRepositoryTest.kt │ │ │ │ └── SharedPreferencesDeviceSettingsRepositoryTest.kt │ │ │ ├── domain │ │ │ │ ├── GetMailSettingsTest.kt │ │ │ │ ├── UpdateSwipeActionsTest.kt │ │ │ │ ├── UpdateViewModeTest.kt │ │ │ │ └── usecase │ │ │ │ │ ├── ApplyAppThemeFromSettingsTest.kt │ │ │ │ │ ├── GetAppThemeSettingsTest.kt │ │ │ │ │ └── SaveAppThemeSettingsTest.kt │ │ │ └── presentation │ │ │ │ ├── AccountSettingsActivityViewModelTest.kt │ │ │ │ ├── SwipeChooserViewModelTest.kt │ │ │ │ └── viewmodel │ │ │ │ └── ThemeChooserViewModelTest.kt │ │ │ ├── testdata │ │ │ ├── AccountTestData.kt │ │ │ ├── AddressesTestData.kt │ │ │ ├── AttachmentTestData.kt │ │ │ ├── ConversationTestData.kt │ │ │ ├── KeyInformationTestData.kt │ │ │ ├── MessageDetailsListItemTestData.kt │ │ │ ├── MessageTestData.kt │ │ │ ├── UserTestData.kt │ │ │ └── WorkerTestData.kt │ │ │ ├── testutils │ │ │ └── extensions │ │ │ │ └── AnyExtensions.kt │ │ │ ├── ui │ │ │ └── dialog │ │ │ │ └── MessageActionSheetViewModelTest.kt │ │ │ ├── usecase │ │ │ ├── LoadLegacyUserTest.kt │ │ │ ├── VerifyConnectionTest.kt │ │ │ ├── compose │ │ │ │ └── SaveDraftTest.kt │ │ │ ├── create │ │ │ │ └── CreateContactTest.kt │ │ │ ├── delete │ │ │ │ ├── DeleteLabelsTest.kt │ │ │ │ ├── DeleteMessageTest.kt │ │ │ │ └── EmptyFolderTest.kt │ │ │ ├── fetch │ │ │ │ ├── FetchContactsDataTest.kt │ │ │ │ ├── FetchPublicKeysTest.kt │ │ │ │ └── FetchVerificationKeysTest.kt │ │ │ └── message │ │ │ │ ├── ChangeMessagesReadStatusTest.kt │ │ │ │ ├── ChangeMessagesStarredStatusTest.kt │ │ │ │ └── GetDecryptedMessageByIdTest.kt │ │ │ ├── util │ │ │ └── ProtonCalendarUtilTest.kt │ │ │ ├── utils │ │ │ ├── DateUtilTest.kt │ │ │ ├── MessageBodyFileManagerTest.kt │ │ │ ├── MessageUtilsTest.kt │ │ │ ├── TryWithExponentialBackoffTest.kt │ │ │ ├── TryWithRetryTest.kt │ │ │ ├── extensions │ │ │ │ ├── CollectionExtensionsTest.kt │ │ │ │ ├── DurationExtensionsKtTest.kt │ │ │ │ ├── ExceptionExtensionsKtTest.kt │ │ │ │ ├── OkHttpExtensionsKtTest.kt │ │ │ │ ├── RetrofitExtensionsKtTest.kt │ │ │ │ └── StringExtensionsTest.kt │ │ │ ├── notifier │ │ │ │ └── AndroidUserNotifierTest.kt │ │ │ └── ui │ │ │ │ └── screen │ │ │ │ └── RenderDimensionsProviderTest.kt │ │ │ └── worker │ │ │ ├── CreateContactGroupWorkerTest.kt │ │ │ ├── CreateContactWorkerTest.kt │ │ │ ├── CreateDraftWorkerTest.kt │ │ │ ├── DeleteAttachmentWorkerTest.kt │ │ │ ├── DeleteContactWorkerTest.kt │ │ │ ├── DeleteMessageWorkerTest.kt │ │ │ ├── EmptyFolderRemoteWorkerTest.kt │ │ │ ├── FetchContactsDataWorkerTest.kt │ │ │ ├── FetchContactsEmailsWorkerTest.kt │ │ │ ├── FetchMailSettingsWorkerTest.kt │ │ │ ├── FetchUserWorkerTest.kt │ │ │ ├── PingWorkerTest.kt │ │ │ └── repository │ │ │ └── WorkerRepositoryTest.kt │ └── resources │ │ └── contact-emails-output.json │ ├── uiAutomation │ ├── java │ │ └── ch.protonmail.android │ │ │ └── di │ │ │ └── ConfigurableParametersModule.kt │ └── res │ │ ├── raw │ │ └── instrumentation_cert │ │ └── xml │ │ └── network_security_config.xml │ └── uiTest │ ├── assets │ ├── lorem_ipsum.docx │ ├── lorem_ipsum.jpeg │ ├── lorem_ipsum.pdf │ ├── lorem_ipsum.png │ ├── lorem_ipsum.zip │ ├── ssl │ │ └── instrumentation_cert.pem │ └── users.json │ └── kotlin │ └── ch │ └── protonmail │ └── android │ └── uitests │ ├── README.md │ ├── robots │ ├── contacts │ │ ├── AddContactGroupRobot.kt │ │ ├── AddContactRobot.kt │ │ ├── ContactDetailsRobot.kt │ │ ├── ContactsMatchers.kt │ │ ├── ContactsRobot.kt │ │ ├── GroupDetailsRobot.kt │ │ └── ManageAddressesRobot.kt │ ├── device │ │ └── DeviceRobot.kt │ ├── login │ │ ├── LoginMailRobot.kt │ │ └── MailboxPasswordMailRobot.kt │ ├── mailbox │ │ ├── ApplyLabelRobotInterface.kt │ │ ├── MailboxMatchers.kt │ │ ├── MailboxRobotInterface.kt │ │ ├── MoveToFolderRobotInterface.kt │ │ ├── SelectionMoreOptionsRobotInterface.kt │ │ ├── SelectionStateRobotInterface.kt │ │ ├── archive │ │ │ └── ArchiveRobot.kt │ │ ├── composer │ │ │ ├── ComposerRobot.kt │ │ │ ├── MessageAttachmentsRobot.kt │ │ │ ├── MessageExpirationRobot.kt │ │ │ └── SetPasswordRobot.kt │ │ ├── drafts │ │ │ └── DraftsRobot.kt │ │ ├── inbox │ │ │ └── InboxRobot.kt │ │ ├── labelfolder │ │ │ ├── LabelFolderRobot.kt │ │ │ └── MessageLocation.kt │ │ ├── messagedetail │ │ │ ├── MessageRobot.kt │ │ │ └── ViewHeadersRobot.kt │ │ ├── search │ │ │ └── SearchRobot.kt │ │ ├── sent │ │ │ └── SentRobot.kt │ │ ├── spam │ │ │ └── SpamRobot.kt │ │ └── trash │ │ │ └── TrashRobot.kt │ ├── manageaccounts │ │ ├── AccountPanelRobot.kt │ │ └── ManageAccountsMatchers.kt │ ├── menu │ │ ├── MenuMatchers.kt │ │ └── MenuRobot.kt │ ├── onboarding │ │ └── OnboardingRobot.kt │ ├── reportbugs │ │ └── ReportBugsRobot.kt │ ├── settings │ │ ├── SettingsActions.kt │ │ ├── SettingsMatchers.kt │ │ ├── SettingsRobot.kt │ │ ├── account │ │ │ ├── AccountSettingsRobot.kt │ │ │ ├── DefaultEmailAddressRobot.kt │ │ │ ├── DisplayNameAndSignatureRobot.kt │ │ │ ├── SubscriptionRobot.kt │ │ │ ├── labelsandfolders │ │ │ │ ├── FoldersManagerRobot.kt │ │ │ │ ├── LabelsAndFoldersRobot.kt │ │ │ │ └── LabelsManagerRobot.kt │ │ │ ├── privacy │ │ │ │ ├── AutoDownloadMessagesRobot.kt │ │ │ │ ├── BackgroundSyncRobot.kt │ │ │ │ └── PrivacySettingsRobot.kt │ │ │ └── swipinggestures │ │ │ │ ├── ChooseSwipeActionRobot.kt │ │ │ │ └── SwipingGesturesSettingsRobot.kt │ │ └── autolock │ │ │ ├── AutoLockRobot.kt │ │ │ └── PinRobot.kt │ └── upgradedonate │ │ └── UpgradeDonateRobot.kt │ ├── server │ └── MockWebServerRule.kt │ ├── tests │ ├── BaseTest.kt │ ├── composer │ │ ├── AttachmentsTests.kt │ │ ├── ForwardMessageTests.kt │ │ ├── ReplyToMessageTests.kt │ │ └── SendNewMessageTests.kt │ ├── contacts │ │ └── ContactsTests.kt │ ├── drafts │ │ └── DraftsTests.kt │ ├── inbox │ │ ├── InboxTests.kt │ │ └── SearchTests.kt │ ├── labelsfolders │ │ └── LabelsFoldersTests.kt │ ├── manageaccounts │ │ └── MultiuserManagementTests.kt │ ├── menu │ │ └── MenuTests.kt │ ├── messagedetail │ │ └── MessageDetailTests.kt │ ├── settings │ │ ├── AccountSettingsTests.kt │ │ ├── PrivacyAccountSettingsTests.kt │ │ ├── SettingsTests.kt │ │ └── SwipeGesturesTests.kt │ ├── spam │ │ └── SpamTests.kt │ └── suites │ │ ├── ComposerSuite.kt │ │ ├── RegressionSuite.kt │ │ └── SmokeSuite.kt │ └── testsHelper │ ├── MockAddAttachmentIntent.kt │ ├── ProtonRequestsIdlingResource.kt │ ├── StringUtils.kt │ ├── TestData.kt │ ├── TestExecutionWatcher.kt │ ├── TestUser.kt │ ├── UICustomViewActions.kt │ ├── User.kt │ ├── WaitUtil.kt │ ├── annotations │ ├── SmokeTest.kt │ └── TestId.kt │ ├── browserstack_config.json │ ├── mailer │ └── Mail.kt │ └── testRail │ ├── APIClient.kt │ ├── APIException.kt │ └── TestRailService.kt ├── build.gradle.kts ├── buildSrc ├── build.gradle.kts └── src │ └── main │ └── kotlin │ ├── AndroidConfig.kt │ ├── ProtonMail.kt │ ├── classpath.kt │ ├── libraries.kt │ ├── modules.kt │ ├── plugins.kt │ ├── repositories.kt │ └── versionsConfig.kt ├── config ├── CodeStyle.xml └── google-services │ └── dummy-google-services.json ├── docs ├── 0000-use-markdown-architectural-decision-record.md ├── 0001-declare-constants-at-the-top-of-the-file.md ├── 0002-use-user-notifier-to-show-user-feedback-from-workers.md ├── 0003-use-mappers-that-extends-core-mapper.md ├── 0004-define-mocks-with-explicit-behaviour.md ├── 0005-use-run-blocking-test.md ├── 0006-model-class-naming-conventions.md ├── 0007-workers-should-just-perform-API-calls ├── 0008-io-operations-naming-conversions.md ├── 0009-using-the-labels-module-as-an-architectural-reference ├── 0010-backticks-for-junit-tests.md └── 0011-use-function-over-annotation-for-creating-mocks.md ├── domain ├── build.gradle.kts └── src │ ├── main │ └── kotlin │ │ └── ch │ │ └── protonmail │ │ └── android │ │ └── domain │ │ ├── Error.kt │ │ ├── LoadMoreFlow.kt │ │ ├── LoadMoreFlowUtils.kt │ │ ├── entity │ │ ├── Credential.kt │ │ ├── PgpField.kt │ │ ├── Validable.kt │ │ ├── Validator.kt │ │ ├── fields.kt │ │ └── user │ │ │ ├── Address.kt │ │ │ ├── AddressKey.kt │ │ │ ├── Plan.kt │ │ │ ├── User.kt │ │ │ └── UserKey.kt │ │ ├── repository │ │ └── CredentialRepository.kt │ │ ├── usecase │ │ ├── DownloadFile.kt │ │ └── credentials │ │ │ ├── DeleteSavedCredentials.kt │ │ │ ├── GetSavedCredentials.kt │ │ │ └── UpdateCredentials.kt │ │ └── util │ │ ├── either.kt │ │ ├── exceptions.kt │ │ └── text.kt │ └── test │ └── kotlin │ └── ch │ └── protonmail │ └── android │ └── domain │ ├── LoadMoreFlowTest.kt │ ├── entity │ ├── FieldsTest.kt │ ├── PgpFieldTest.kt │ ├── ValidableTest.kt │ ├── ValidatorsTest.kt │ └── user │ │ ├── AddressKeyTest.kt │ │ ├── AddressTest.kt │ │ └── UserTest.kt │ ├── testDoubles │ ├── FakeCredentialsRepository.kt │ └── addresses.kt │ └── util │ └── EitherTest.kt ├── experimental.properties ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── scripts ├── extract_dependencies │ └── ExtractDeps.kts └── inject_licenses │ └── InjectLicenses.kts ├── settings.gradle.kts ├── sharedTest ├── testAndroid │ ├── build.gradle.kts │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── kotlin │ │ └── ch │ │ └── protonmail │ │ └── android │ │ └── testAndroid │ │ ├── ViewStateStoreTest.kt │ │ ├── lifecycle │ │ └── TestObserver.kt │ │ └── rx │ │ ├── TestSchedulerRule.kt │ │ └── TrampolineScheduler.kt ├── testAndroidInstrumented │ ├── build.gradle.kts │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── kotlin │ │ └── ch │ │ └── protonmail │ │ └── android │ │ └── testAndroidInstrumented │ │ ├── HamcrestMismatchBuilder.kt │ │ ├── HamcrestUtils.kt │ │ ├── ReflectivePropertiesMatcher.kt │ │ ├── assertion │ │ └── visibilityAssertions.kt │ │ └── matcher │ │ ├── colorMatchers.kt │ │ └── drawableMatchers.kt └── testKotlin │ └── build.gradle.kts └── tokenAutoComplete ├── tokenAutoComplete-example ├── build.gradle.kts └── src │ ├── androidTest │ └── kotlin │ │ └── ch │ │ └── protonmail │ │ └── tokenautocomplete │ │ └── example │ │ ├── ContactsCompletionViewTest.kt │ │ ├── InputConnectionTest.java │ │ ├── SavedStateTest.java │ │ ├── TestTokenListener.java │ │ ├── TokenMatchers.java │ │ └── ViewSpanTest.java │ └── main │ ├── AndroidManifest.xml │ ├── kotlin │ └── ch │ │ └── protonmail │ │ └── tokenautocomplete │ │ └── example │ │ ├── ContactsCompletionView.java │ │ ├── Person.java │ │ ├── PersonAdapter.java │ │ ├── Tag.java │ │ ├── TagAdapter.java │ │ ├── TagCompletionView.java │ │ ├── TestCleanTokenActivity.java │ │ ├── TokenActivity.kt │ │ └── TokenTextView.java │ └── res │ ├── drawable-hdpi │ └── ic_launcher.png │ ├── drawable-mdpi │ └── ic_launcher.png │ ├── drawable-xhdpi │ └── ic_launcher.png │ ├── drawable-xxhdpi │ ├── close_x.png │ └── ic_launcher.png │ ├── drawable │ ├── token_background.xml │ ├── token_default.xml │ └── token_selected.xml │ ├── layout │ ├── activity_main.xml │ ├── contact_token.xml │ ├── person_layout.xml │ └── tag_layout.xml │ └── values │ ├── dimens.xml │ ├── strings.xml │ └── styles.xml └── tokenAutoComplete-lib ├── build.gradle.kts └── src ├── androidTest └── kotlin │ └── ch │ └── protonmail │ └── tokenautocomplete │ └── SpanUtilsTest.java ├── main ├── AndroidManifest.xml └── kotlin │ └── ch │ └── protonmail │ └── tokenautocomplete │ ├── CharacterTokenizer.java │ ├── CountSpan.java │ ├── FilteredArrayAdapter.java │ ├── Range.java │ ├── SpanUtils.java │ ├── TagTokenizer.java │ ├── TokenCompleteTextView.java │ ├── Tokenizer.java │ └── ViewSpan.java └── test └── kotlin └── ch └── protonmail └── tokenautocomplete ├── CharacterTokenizerTest.java └── TagTokenizerTest.java /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: "[Bug] Bug title" 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Smartphone (please complete the following information):** 27 | - Device: [e.g. Pixel] 28 | - OS: [e.g. Android 9] 29 | - Version [e.g. 22] 30 | 31 | **Additional context** 32 | Add any other context about the problem here. 33 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: "[Feature Request] Feature request title" 5 | labels: enhancement 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | ProtonMail -------------------------------------------------------------------------------- /.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /.idea/copyright/ProtonMail.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/detekt.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | true 5 | true 6 | $PROJECT_DIR$/config/detekt/config.yml 7 | 8 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /.idea/kotlinScripting.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 22 | 24 | -------------------------------------------------------------------------------- /.idea/saveactions_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 13 | 20 | 21 | -------------------------------------------------------------------------------- /.idea/scopes/Gradle_files.xml: -------------------------------------------------------------------------------- 1 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /.java-version: -------------------------------------------------------------------------------- 1 | openjdk64-15.0.1 2 | -------------------------------------------------------------------------------- /app/experimental.properties: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2022 Proton AG 3 | # 4 | # This file is part of Proton Mail. 5 | # 6 | # Proton Mail is free software: you can redistribute it and/or modify 7 | # it under the terms of the GNU General Public License as published by 8 | # the Free Software Foundation, either version 3 of the License, or 9 | # (at your option) any later version. 10 | # 11 | # Proton Mail is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU General Public License 17 | # along with Proton Mail. If not, see https://www.gnu.org/licenses/. 18 | # 19 | 20 | -------------------------------------------------------------------------------- /app/libs/PM-sources.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProtonMail/proton-mail-android/7ff6a12219c59bea4febe41e6a935bf63bec4f2e/app/libs/PM-sources.jar -------------------------------------------------------------------------------- /app/libs/commons-email-1.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProtonMail/proton-mail-android/7ff6a12219c59bea4febe41e6a935bf63bec4f2e/app/libs/commons-email-1.3.jar -------------------------------------------------------------------------------- /app/libs/fusion-release.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProtonMail/proton-mail-android/7ff6a12219c59bea4febe41e6a935bf63bec4f2e/app/libs/fusion-release.aar -------------------------------------------------------------------------------- /app/libs/mail-activation.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProtonMail/proton-mail-android/7ff6a12219c59bea4febe41e6a935bf63bec4f2e/app/libs/mail-activation.jar -------------------------------------------------------------------------------- /app/libs/mail-additional.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProtonMail/proton-mail-android/7ff6a12219c59bea4febe41e6a935bf63bec4f2e/app/libs/mail-additional.jar -------------------------------------------------------------------------------- /app/libs/mail.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProtonMail/proton-mail-android/7ff6a12219c59bea4febe41e6a935bf63bec4f2e/app/libs/mail.jar -------------------------------------------------------------------------------- /app/src/beta/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProtonMail/proton-mail-android/7ff6a12219c59bea4febe41e6a935bf63bec4f2e/app/src/beta/ic_launcher-playstore.png -------------------------------------------------------------------------------- /app/src/beta/ic_launcher-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProtonMail/proton-mail-android/7ff6a12219c59bea4febe41e6a935bf63bec4f2e/app/src/beta/ic_launcher-web.png -------------------------------------------------------------------------------- /app/src/beta/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProtonMail/proton-mail-android/7ff6a12219c59bea4febe41e6a935bf63bec4f2e/app/src/beta/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/beta/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProtonMail/proton-mail-android/7ff6a12219c59bea4febe41e6a935bf63bec4f2e/app/src/beta/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/beta/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProtonMail/proton-mail-android/7ff6a12219c59bea4febe41e6a935bf63bec4f2e/app/src/beta/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/beta/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProtonMail/proton-mail-android/7ff6a12219c59bea4febe41e6a935bf63bec4f2e/app/src/beta/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/beta/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProtonMail/proton-mail-android/7ff6a12219c59bea4febe41e6a935bf63bec4f2e/app/src/beta/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/beta/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProtonMail/proton-mail-android/7ff6a12219c59bea4febe41e6a935bf63bec4f2e/app/src/beta/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/beta/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProtonMail/proton-mail-android/7ff6a12219c59bea4febe41e6a935bf63bec4f2e/app/src/beta/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/beta/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProtonMail/proton-mail-android/7ff6a12219c59bea4febe41e6a935bf63bec4f2e/app/src/beta/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/beta/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProtonMail/proton-mail-android/7ff6a12219c59bea4febe41e6a935bf63bec4f2e/app/src/beta/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/beta/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProtonMail/proton-mail-android/7ff6a12219c59bea4febe41e6a935bf63bec4f2e/app/src/beta/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/beta/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 22 | #FFFFFF 23 | 24 | -------------------------------------------------------------------------------- /app/src/beta/res/values/notif.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | ch.protonmail.android.beta 22 | 23 | -------------------------------------------------------------------------------- /app/src/beta/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | Android Beta v.%1$s (%2$d) 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/assets/fonts/Roboto-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProtonMail/proton-mail-android/7ff6a12219c59bea4febe41e6a935bf63bec4f2e/app/src/main/assets/fonts/Roboto-Bold.ttf -------------------------------------------------------------------------------- /app/src/main/assets/fonts/Roboto-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProtonMail/proton-mail-android/7ff6a12219c59bea4febe41e6a935bf63bec4f2e/app/src/main/assets/fonts/Roboto-Light.ttf -------------------------------------------------------------------------------- /app/src/main/assets/fonts/Roboto-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProtonMail/proton-mail-android/7ff6a12219c59bea4febe41e6a935bf63bec4f2e/app/src/main/assets/fonts/Roboto-Regular.ttf -------------------------------------------------------------------------------- /app/src/main/assets/fonts/Roboto-Thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProtonMail/proton-mail-android/7ff6a12219c59bea4febe41e6a935bf63bec4f2e/app/src/main/assets/fonts/Roboto-Thin.ttf -------------------------------------------------------------------------------- /app/src/main/assets/fonts/contacts_icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProtonMail/proton-mail-android/7ff6a12219c59bea4febe41e6a935bf63bec4f2e/app/src/main/assets/fonts/contacts_icons.ttf -------------------------------------------------------------------------------- /app/src/main/assets/logo_print.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProtonMail/proton-mail-android/7ff6a12219c59bea4febe41e6a935bf63bec4f2e/app/src/main/assets/logo_print.png -------------------------------------------------------------------------------- /app/src/main/assets/pgp-icons-android.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProtonMail/proton-mail-android/7ff6a12219c59bea4febe41e6a935bf63bec4f2e/app/src/main/assets/pgp-icons-android.ttf -------------------------------------------------------------------------------- /app/src/main/assets/protonmail-mobile-icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProtonMail/proton-mail-android/7ff6a12219c59bea4febe41e6a935bf63bec4f2e/app/src/main/assets/protonmail-mobile-icons.ttf -------------------------------------------------------------------------------- /app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProtonMail/proton-mail-android/7ff6a12219c59bea4febe41e6a935bf63bec4f2e/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /app/src/main/ic_launcher-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProtonMail/proton-mail-android/7ff6a12219c59bea4febe41e6a935bf63bec4f2e/app/src/main/ic_launcher-web.png -------------------------------------------------------------------------------- /app/src/main/java/ch/protonmail/android/activities/composeMessage/UserAction.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2022 Proton AG 3 | * 4 | * This file is part of Proton Mail. 5 | * 6 | * Proton Mail is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Proton Mail is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Proton Mail. If not, see https://www.gnu.org/licenses/. 18 | */ 19 | package ch.protonmail.android.activities.composeMessage 20 | 21 | enum class UserAction { 22 | NONE, SAVE_DRAFT, FINISH_EDIT, SAVE_DRAFT_EXIT 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/ch/protonmail/android/activities/messageDetails/attachments/CheckAttachmentTask.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2022 Proton AG 3 | * 4 | * This file is part of Proton Mail. 5 | * 6 | * Proton Mail is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Proton Mail is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Proton Mail. If not, see https://www.gnu.org/licenses/. 18 | */ 19 | -------------------------------------------------------------------------------- /app/src/main/java/ch/protonmail/android/api/exceptions/ApiException.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2022 Proton AG 3 | * 4 | * This file is part of Proton Mail. 5 | * 6 | * Proton Mail is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Proton Mail is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Proton Mail. If not, see https://www.gnu.org/licenses/. 18 | */ 19 | package ch.protonmail.android.api.exceptions 20 | 21 | import ch.protonmail.android.api.models.ResponseBody 22 | 23 | class ApiException(val response: ResponseBody, message: String) : Exception(message) 24 | -------------------------------------------------------------------------------- /app/src/main/java/ch/protonmail/android/api/interceptors/RetrofitTag.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2022 Proton AG 3 | * 4 | * This file is part of Proton Mail. 5 | * 6 | * Proton Mail is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Proton Mail is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Proton Mail. If not, see https://www.gnu.org/licenses/. 18 | */ 19 | package ch.protonmail.android.api.interceptors 20 | 21 | import me.proton.core.domain.entity.UserId 22 | 23 | /** 24 | * Objects of this class can be attached to OkHttp's requests and be read by Interceptors. 25 | */ 26 | data class UserIdTag( 27 | val id: UserId 28 | ) 29 | -------------------------------------------------------------------------------- /app/src/main/java/ch/protonmail/android/api/models/KeyPacket.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2022 Proton AG 3 | * 4 | * This file is part of Proton Mail. 5 | * 6 | * Proton Mail is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Proton Mail is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Proton Mail. If not, see https://www.gnu.org/licenses/. 18 | */ 19 | package ch.protonmail.android.api.models; 20 | 21 | 22 | public class KeyPacket { 23 | String ID; 24 | String KeyPackets; 25 | 26 | public KeyPacket(String ID, String keyPackets) { 27 | this.ID = ID; 28 | KeyPackets = keyPackets; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/ch/protonmail/android/api/models/Location.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2022 Proton AG 3 | * 4 | * This file is part of Proton Mail. 5 | * 6 | * Proton Mail is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Proton Mail is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Proton Mail. If not, see https://www.gnu.org/licenses/. 18 | */ 19 | package ch.protonmail.android.api.models; 20 | 21 | 22 | public class Location { 23 | private int Location; 24 | private int Count; 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/ch/protonmail/android/api/models/RecipientType.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2022 Proton AG 3 | * 4 | * This file is part of Proton Mail. 5 | * 6 | * Proton Mail is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Proton Mail is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Proton Mail. If not, see https://www.gnu.org/licenses/. 18 | */ 19 | package ch.protonmail.android.api.models 20 | 21 | enum class RecipientType { 22 | TO, CC, BCC 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/ch/protonmail/android/api/segments/RetrofitConstants.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2022 Proton AG 3 | * 4 | * This file is part of Proton Mail. 5 | * 6 | * Proton Mail is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Proton Mail is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Proton Mail. If not, see https://www.gnu.org/licenses/. 18 | */ 19 | package ch.protonmail.android.api.segments 20 | 21 | object RetrofitConstants { 22 | 23 | const val ACCEPT_HEADER_V1 = "Accept: application/vnd.protonmail.v1+json" 24 | const val CONTENT_TYPE = "Content-Type: application/json;charset=utf-8" 25 | 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/ch/protonmail/android/api/segments/connectivity/ConnectivityApiSpec.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2022 Proton AG 3 | * 4 | * This file is part of Proton Mail. 5 | * 6 | * Proton Mail is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Proton Mail is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Proton Mail. If not, see https://www.gnu.org/licenses/. 18 | */ 19 | package ch.protonmail.android.api.segments.connectivity 20 | 21 | import ch.protonmail.android.api.models.ResponseBody 22 | 23 | interface ConnectivityApiSpec { 24 | 25 | suspend fun ping(): ResponseBody 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/ch/protonmail/android/attachments/Armorer.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2022 Proton AG 3 | * 4 | * This file is part of Proton Mail. 5 | * 6 | * Proton Mail is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Proton Mail is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Proton Mail. If not, see https://www.gnu.org/licenses/. 18 | */ 19 | 20 | package ch.protonmail.android.attachments 21 | 22 | interface Armorer { 23 | fun unarmor(input: String): ByteArray 24 | 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/ch/protonmail/android/attachments/OpenPgpArmorer.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2022 Proton AG 3 | * 4 | * This file is part of Proton Mail. 5 | * 6 | * Proton Mail is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Proton Mail is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Proton Mail. If not, see https://www.gnu.org/licenses/. 18 | */ 19 | 20 | package ch.protonmail.android.attachments 21 | 22 | import com.proton.gopenpgp.armor.Armor 23 | 24 | class OpenPgpArmorer : Armorer { 25 | 26 | override fun unarmor(input: String): ByteArray = 27 | Armor.unarmor(input) 28 | 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/ch/protonmail/android/contacts/PostResult.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2022 Proton AG 3 | * 4 | * This file is part of Proton Mail. 5 | * 6 | * Proton Mail is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Proton Mail is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Proton Mail. If not, see https://www.gnu.org/licenses/. 18 | */ 19 | package ch.protonmail.android.contacts 20 | 21 | import ch.protonmail.android.events.Status 22 | 23 | data class PostResult(val message: String? = null, val status: Status) 24 | -------------------------------------------------------------------------------- /app/src/main/java/ch/protonmail/android/contacts/details/ContactEmailGroupSelectionState.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2022 Proton AG 3 | * 4 | * This file is part of Proton Mail. 5 | * 6 | * Proton Mail is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Proton Mail is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Proton Mail. If not, see https://www.gnu.org/licenses/. 18 | */ 19 | package ch.protonmail.android.contacts.details 20 | 21 | enum class ContactEmailGroupSelectionState { 22 | SELECTED, UNSELECTED, DEFAULT 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/ch/protonmail/android/contacts/details/domain/model/FetchContactGroupsResult.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2022 Proton AG 3 | * 4 | * This file is part of Proton Mail. 5 | * 6 | * Proton Mail is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * Proton Mail is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with Proton Mail. If not, see https://www.gnu.org/licenses/. 18 | */ 19 | 20 | package ch.protonmail.android.contacts.details.domain.model 21 | 22 | import ch.protonmail.android.labels.domain.model.Label 23 | 24 | data class FetchContactGroupsResult( 25 | val groupsList: List