├── .github └── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── .gitignore ├── .idea ├── .name ├── AndroidProjectSystem.xml ├── appInsightsSettings.xml ├── codeStyles │ ├── Project.xml │ └── codeStyleConfig.xml ├── compiler.xml ├── dbnavigator.xml ├── deploymentTargetSelector.xml ├── dictionaries │ └── Stjin.xml ├── gradle.xml ├── icon.svg ├── icon_dark.png ├── inspectionProfiles │ └── Project_Default.xml ├── jarRepositories.xml ├── kotlinc.xml ├── markdown-navigator-enh.xml ├── markdown-navigator.xml ├── migrations.xml ├── misc.xml ├── render.experimental.xml ├── runConfigurations.xml ├── templateLanguages.xml └── vcs.xml ├── CHANGELOG.md ├── LICENSE ├── PrivacyPolicy.md ├── README.md ├── anonaddy_shared ├── .gitignore ├── build.gradle.kts ├── consumer-rules.pro ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── host │ │ └── stjin │ │ └── anonaddy_shared │ │ └── ExampleInstrumentedTest.kt │ ├── debug │ └── res │ │ └── values │ │ └── strings.xml │ ├── main │ ├── AndroidManifest.xml │ ├── ic_launcher-playstore.png │ ├── ic_launcher_gradient-playstore.png │ ├── ic_launcher_inverse_gradient-playstore.png │ ├── java │ │ └── host │ │ │ └── stjin │ │ │ └── anonaddy_shared │ │ │ ├── AddyIo.kt │ │ │ ├── AddyIoApp.kt │ │ │ ├── NetworkHelper.kt │ │ │ ├── controllers │ │ │ └── LauncherIconController.kt │ │ │ ├── managers │ │ │ └── SettingsManager.kt │ │ │ ├── models │ │ │ ├── AccountNotifications.kt │ │ │ ├── AddyChartData.kt │ │ │ ├── AliasSortFilter.kt │ │ │ ├── Aliases.kt │ │ │ ├── ApiTokenDetails.kt │ │ │ ├── BulkActionResponse.kt │ │ │ ├── Domains.kt │ │ │ ├── Error.kt │ │ │ ├── FailedDeliveries.kt │ │ │ ├── Login.kt │ │ │ ├── Logs.kt │ │ │ ├── Recipients.kt │ │ │ ├── Rules.kt │ │ │ ├── UserAgent.kt │ │ │ ├── UserResource.kt │ │ │ ├── Usernames.kt │ │ │ ├── Version.kt │ │ │ └── WearOSSettings.kt │ │ │ ├── ui │ │ │ └── theme │ │ │ │ ├── Theme.kt │ │ │ │ └── Type.kt │ │ │ └── utils │ │ │ ├── CacheHelper.kt │ │ │ ├── DateTimeUtils.kt │ │ │ ├── GsonTools.kt │ │ │ ├── LoggingHelper.kt │ │ │ └── ResettableLazyManager.kt │ └── res │ │ ├── drawable-v24 │ │ ├── ic_launcher_foreground.xml │ │ └── ic_launcher_gradient_background.xml │ │ ├── drawable │ │ ├── ic_add.xml │ │ ├── ic_arrow_back_up.xml │ │ ├── ic_email_at.xml │ │ ├── ic_forbid.xml │ │ ├── ic_inbox.xml │ │ ├── ic_launcher_anim.xml │ │ ├── ic_launcher_classic_foreground.xml │ │ ├── ic_loader.xml │ │ ├── ic_mail_forward.xml │ │ └── ic_settings.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ ├── ic_launcher_classic.xml │ │ ├── ic_launcher_classic_round.xml │ │ ├── ic_launcher_gradient.xml │ │ ├── ic_launcher_gradient_round.xml │ │ ├── ic_launcher_inverse_gradient.xml │ │ ├── ic_launcher_inverse_gradient_round.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.webp │ │ ├── ic_launcher_classic.png │ │ ├── ic_launcher_classic_round.png │ │ ├── ic_launcher_gradient.webp │ │ ├── ic_launcher_gradient_foreground.webp │ │ ├── ic_launcher_gradient_round.webp │ │ ├── ic_launcher_inverse_gradient.webp │ │ ├── ic_launcher_inverse_gradient_foreground.webp │ │ ├── ic_launcher_inverse_gradient_round.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.webp │ │ ├── ic_launcher_classic.png │ │ ├── ic_launcher_classic_round.png │ │ ├── ic_launcher_gradient.webp │ │ ├── ic_launcher_gradient_foreground.webp │ │ ├── ic_launcher_gradient_round.webp │ │ ├── ic_launcher_inverse_gradient.webp │ │ ├── ic_launcher_inverse_gradient_foreground.webp │ │ ├── ic_launcher_inverse_gradient_round.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.webp │ │ ├── ic_launcher_classic.png │ │ ├── ic_launcher_classic_round.png │ │ ├── ic_launcher_gradient.webp │ │ ├── ic_launcher_gradient_foreground.webp │ │ ├── ic_launcher_gradient_round.webp │ │ ├── ic_launcher_inverse_gradient.webp │ │ ├── ic_launcher_inverse_gradient_foreground.webp │ │ ├── ic_launcher_inverse_gradient_round.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.webp │ │ ├── ic_launcher_classic.png │ │ ├── ic_launcher_classic_round.png │ │ ├── ic_launcher_gradient.webp │ │ ├── ic_launcher_gradient_foreground.webp │ │ ├── ic_launcher_gradient_round.webp │ │ ├── ic_launcher_inverse_gradient.webp │ │ ├── ic_launcher_inverse_gradient_foreground.webp │ │ ├── ic_launcher_inverse_gradient_round.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.webp │ │ ├── ic_launcher_classic.png │ │ ├── ic_launcher_classic_round.png │ │ ├── ic_launcher_gradient.webp │ │ ├── ic_launcher_gradient_foreground.webp │ │ ├── ic_launcher_gradient_round.webp │ │ ├── ic_launcher_inverse_gradient.webp │ │ ├── ic_launcher_inverse_gradient_foreground.webp │ │ ├── ic_launcher_inverse_gradient_round.webp │ │ └── ic_launcher_round.webp │ │ ├── values-night │ │ ├── colors.xml │ │ └── colors_daynight.xml │ │ ├── values-v31 │ │ └── colors.xml │ │ └── values │ │ ├── colors.xml │ │ ├── colors_daynight.xml │ │ ├── ic_launcher_classic_background.xml │ │ ├── ic_launcher_inverse_gradient_background.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── host │ └── stjin │ └── anonaddy_shared │ └── ExampleUnitTest.kt ├── app-wearos ├── .gitignore ├── build.gradle.kts ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── host │ │ └── stjin │ │ └── anonaddy │ │ ├── components │ │ ├── ErrorScreen.kt │ │ ├── Loading.kt │ │ └── ShowOnDeviceComposeContent.kt │ │ ├── service │ │ ├── BackgroundWorker.kt │ │ └── WearableListenerService.kt │ │ ├── tiles │ │ └── FavoriteAliasesTileService.kt │ │ ├── ui │ │ ├── SetupActivity.kt │ │ ├── SplashActivity.kt │ │ ├── alias │ │ │ ├── AliasActivity.kt │ │ │ ├── CreateAliasActivity.kt │ │ │ └── ManageAliasActivity.kt │ │ ├── components │ │ │ ├── AliasActionRow.kt │ │ │ ├── AliasCreateGuide.kt │ │ │ ├── AliasList.kt │ │ │ ├── CustomTimeText.kt │ │ │ ├── LazyList.kt │ │ │ └── createdAliasDetails.kt │ │ └── settings │ │ │ └── SettingsActivity.kt │ │ └── utils │ │ ├── ColorUtils.kt │ │ └── FavoriteAliasHelper.kt │ └── res │ ├── drawable-round │ └── favorite_aliases_tile.png │ ├── drawable │ ├── favorite_aliases_tile.png │ ├── ic_add_tinted.xml │ ├── ic_devices.xml │ ├── ic_email_at_tinted.xml │ ├── ic_star.xml │ ├── ic_star_tinted.xml │ ├── ic_starred.xml │ ├── ic_watch_setup_notification_anim.xml │ └── splash_screen.xml │ └── values │ ├── colors.xml │ ├── dimens.xml │ ├── strings.xml │ └── styles.xml ├── app ├── .gitignore ├── build.gradle.kts ├── gplayless │ └── release │ │ ├── app-gplayless-release.apk │ │ └── output-metadata.json ├── lint.xml ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── host │ │ └── stjin │ │ └── anonaddy │ │ └── ExampleInstrumentedTest.kt │ ├── gplay │ └── java │ │ └── host │ │ └── stjin │ │ └── anonaddy │ │ ├── service │ │ └── WearableListener.kt │ │ ├── ui │ │ └── ManageSubscriptionActivity.kt │ │ └── utils │ │ └── ReviewHelper.kt │ ├── gplayless │ ├── java │ │ ├── com │ │ │ └── google │ │ │ │ └── android │ │ │ │ └── gms │ │ │ │ ├── tasks │ │ │ │ └── Task.kt │ │ │ │ └── wearable │ │ │ │ ├── MessageEvent.kt │ │ │ │ ├── Node.kt │ │ │ │ ├── NodeClient.kt │ │ │ │ └── Wearable.kt │ │ └── host │ │ │ └── stjin │ │ │ └── anonaddy │ │ │ ├── service │ │ │ └── WearableListener.kt │ │ │ ├── ui │ │ │ └── ManageSubscriptionActivity.kt │ │ │ └── utils │ │ │ └── ReviewHelper.kt │ └── res │ │ └── values │ │ └── strings.xml │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── host │ │ │ └── stjin │ │ │ └── anonaddy │ │ │ ├── BaseActivity.kt │ │ │ ├── BaseBottomSheetDialogFragment.kt │ │ │ ├── Updater.kt │ │ │ ├── adapter │ │ │ ├── AccountNotificationsAdapter.kt │ │ │ ├── AliasAdapter.kt │ │ │ ├── DomainAdapter.kt │ │ │ ├── FailedDeliveryAdapter.kt │ │ │ ├── LauncherIconsAdapter.kt │ │ │ ├── LogsAdapter.kt │ │ │ ├── RecipientAdapter.kt │ │ │ ├── RulesAdapter.kt │ │ │ ├── SearchAdapter.kt │ │ │ └── UsernameAdapter.kt │ │ │ ├── notifications │ │ │ ├── ActionReceiver.kt │ │ │ └── NotificationHelper.kt │ │ │ ├── service │ │ │ ├── AliasWatcher.kt │ │ │ ├── BackgroundWorker.kt │ │ │ └── BackupHelper.kt │ │ │ ├── ui │ │ │ ├── MainActivity.kt │ │ │ ├── MainViewpagerAdapter.kt │ │ │ ├── ProfileBottomDialogFragment.kt │ │ │ ├── SplashActivity.kt │ │ │ ├── SplitInitializer.kt │ │ │ ├── UnsupportedBottomDialogFragment.kt │ │ │ ├── accountnotifications │ │ │ │ ├── AccountNotificationsActivity.kt │ │ │ │ ├── AccountNotificationsDetailsBottomDialogFragment.kt │ │ │ │ └── AccountNotificationsFragment.kt │ │ │ ├── alias │ │ │ │ ├── AddAliasBottomDialogFragment.kt │ │ │ │ ├── AliasFragment.kt │ │ │ │ ├── AliasMultipleSelectionBottomDialogFragment.kt │ │ │ │ ├── FilterOptionsAliasBottomDialogFragment.kt │ │ │ │ └── manage │ │ │ │ │ ├── EditAliasDescriptionBottomDialogFragment.kt │ │ │ │ │ ├── EditAliasFromNameBottomDialogFragment.kt │ │ │ │ │ ├── EditAliasRecipientsBottomDialogFragment.kt │ │ │ │ │ ├── EditAliasSendMailRecipientBottomDialogFragment.kt │ │ │ │ │ └── ManageAliasActivity.kt │ │ │ ├── appsettings │ │ │ │ ├── AppSettingsActivity.kt │ │ │ │ ├── BackgroundServiceIntervalBottomDialogFragment.kt │ │ │ │ ├── DeleteAccountConfirmationBottomSheetDialog.kt │ │ │ │ ├── UIUXInterfaceBottomDialogFragment.kt │ │ │ │ ├── backup │ │ │ │ │ ├── AppSettingsBackupActivity.kt │ │ │ │ │ └── BackupSetPasswordBottomDialogFragment.kt │ │ │ │ ├── features │ │ │ │ │ ├── AppSettingsFeaturesActivity.kt │ │ │ │ │ ├── AppSettingsFeaturesMailToActivity.kt │ │ │ │ │ ├── AppSettingsFeaturesManageMultipleAliasesActivity.kt │ │ │ │ │ ├── AppSettingsFeaturesNotifyAccountNotificationsActivity.kt │ │ │ │ │ ├── AppSettingsFeaturesNotifyApiTokenExpiryActivity.kt │ │ │ │ │ ├── AppSettingsFeaturesNotifyCertificateExpiryActivity.kt │ │ │ │ │ ├── AppSettingsFeaturesNotifyDomainErrorActivity.kt │ │ │ │ │ ├── AppSettingsFeaturesNotifyFailedDeliveriesActivity.kt │ │ │ │ │ ├── AppSettingsFeaturesNotifySubscriptionExpiryActivity.kt │ │ │ │ │ ├── AppSettingsFeaturesWatchAliasActivity.kt │ │ │ │ │ └── AppSettingsFeaturesWebIntentResolutionActivity.kt │ │ │ │ ├── logs │ │ │ │ │ └── LogViewerActivity.kt │ │ │ │ ├── update │ │ │ │ │ ├── AppSettingsUpdateActivity.kt │ │ │ │ │ └── ChangelogBottomDialogFragment.kt │ │ │ │ └── wearos │ │ │ │ │ ├── AppSettingsWearOSActivity.kt │ │ │ │ │ ├── SetupWearOSBottomDialogFragment.kt │ │ │ │ │ └── SetupWearOSBottomSheetActivity.kt │ │ │ ├── customviews │ │ │ │ ├── AnimationView.kt │ │ │ │ ├── HomeStatCardView.kt │ │ │ │ ├── SectionView.kt │ │ │ │ └── refreshlayout │ │ │ │ │ ├── RefreshLayout.kt │ │ │ │ │ └── RefreshLayoutAnimationView.kt │ │ │ ├── domains │ │ │ │ ├── AddDomainBottomDialogFragment.kt │ │ │ │ ├── DomainSettingsActivity.kt │ │ │ │ ├── DomainSettingsFragment.kt │ │ │ │ └── manage │ │ │ │ │ ├── EditDomainAutoCreateRegexBottomDialogFragment.kt │ │ │ │ │ ├── EditDomainDescriptionBottomDialogFragment.kt │ │ │ │ │ ├── EditDomainFromNameBottomDialogFragment.kt │ │ │ │ │ ├── EditDomainRecipientBottomDialogFragment.kt │ │ │ │ │ └── ManageDomainsActivity.kt │ │ │ ├── faileddeliveries │ │ │ │ ├── FailedDeliveriesActivity.kt │ │ │ │ ├── FailedDeliveriesFragment.kt │ │ │ │ └── FailedDeliveryDetailsBottomDialogFragment.kt │ │ │ ├── home │ │ │ │ └── HomeFragment.kt │ │ │ ├── intent │ │ │ │ ├── IntentBottomDialogFragment.kt │ │ │ │ ├── IntentContextMenuAliasActivity.kt │ │ │ │ └── IntentSendMailRecipientBottomDialogFragment.kt │ │ │ ├── recipients │ │ │ │ ├── AddRecipientBottomDialogFragment.kt │ │ │ │ ├── RecipientsFragment.kt │ │ │ │ └── manage │ │ │ │ │ ├── AddRecipientPublicGpgKeyBottomDialogFragment.kt │ │ │ │ │ └── ManageRecipientsActivity.kt │ │ │ ├── rules │ │ │ │ ├── ActionBottomDialogFragment.kt │ │ │ │ ├── ConditionBottomDialogFragment.kt │ │ │ │ ├── CreateRuleActivity.kt │ │ │ │ ├── RulesSettingsActivity.kt │ │ │ │ └── RulesSettingsFragment.kt │ │ │ ├── search │ │ │ │ ├── SearchActivity.kt │ │ │ │ └── SearchBottomDialogFragment.kt │ │ │ ├── setup │ │ │ │ ├── AddApiBottomDialogFragment.kt │ │ │ │ ├── BackupPasswordBottomDialogFragment.kt │ │ │ │ ├── RegistrationFormBottomDialogFragment.kt │ │ │ │ ├── SetupActivity.kt │ │ │ │ ├── SetupHow1Fragment.kt │ │ │ │ ├── SetupHow2Fragment.kt │ │ │ │ ├── SetupHow3Fragment.kt │ │ │ │ ├── SetupHow4Fragment.kt │ │ │ │ └── SetupNewActivity.kt │ │ │ └── usernames │ │ │ │ ├── AddUsernameBottomDialogFragment.kt │ │ │ │ ├── UsernamesSettingsActivity.kt │ │ │ │ ├── UsernamesSettingsFragment.kt │ │ │ │ └── manage │ │ │ │ ├── EditUsernameAutoCreateRegexBottomDialogFragment.kt │ │ │ │ ├── EditUsernameDescriptionBottomDialogFragment.kt │ │ │ │ ├── EditUsernameFromNameBottomDialogFragment.kt │ │ │ │ ├── EditUsernameRecipientBottomDialogFragment.kt │ │ │ │ └── ManageUsernamesActivity.kt │ │ │ ├── utils │ │ │ ├── AnonAddyUtils.kt │ │ │ ├── AttributeHelper.kt │ │ │ ├── ComponentUtils.kt │ │ │ ├── CustomPatterns.kt │ │ │ ├── InsetUtil.kt │ │ │ ├── MarginItemDecoration.kt │ │ │ ├── MaterialDialogHelper.kt │ │ │ ├── NumberUtils.kt │ │ │ ├── ScreenSizeUtils.kt │ │ │ ├── SnackbarHelper.kt │ │ │ ├── WearOSHelper.kt │ │ │ ├── WebIntentManager.kt │ │ │ └── YDGooglePlayUtils.kt │ │ │ └── widget │ │ │ ├── AliasWidget1Provider.kt │ │ │ ├── AliasWidget1RemoteViewsFactory.kt │ │ │ ├── AliasWidget1RemoteViewsService.kt │ │ │ ├── AliasWidget2BottomSheetAddActivity.kt │ │ │ ├── AliasWidget2Provider.kt │ │ │ ├── AliasWidget2RemoteViewsFactory.kt │ │ │ └── AliasWidget2RemoteViewsService.kt │ └── res │ │ ├── anim │ │ ├── item_animation_fall_down.xml │ │ ├── layout_animation_fall_down.xml │ │ ├── slide_in.xml │ │ ├── slide_out.xml │ │ ├── zoom_in.xml │ │ └── zoom_out.xml │ │ ├── animator │ │ └── selector_raise.xml │ │ ├── drawable-night-nodpi │ │ ├── alias_widget_1_preview.png │ │ ├── feature_failed_delivery.png │ │ ├── feature_long_press.png │ │ ├── feature_mailto.png │ │ ├── feature_notify_account_notifications.png │ │ ├── feature_notify_api_token_expiry.png │ │ ├── feature_notify_certificate_expiry.png │ │ ├── feature_notify_domain_error.png │ │ ├── feature_notify_subscription_expiry.png │ │ ├── feature_watch_alias.png │ │ └── integration_web_intent_resolution.png │ │ ├── drawable-nodpi │ │ ├── alias_widget_1_preview.png │ │ ├── alias_widget_2_preview.png │ │ ├── feature_failed_delivery.png │ │ ├── feature_long_press.png │ │ ├── feature_mailto.png │ │ ├── feature_notify_account_notifications.png │ │ ├── feature_notify_api_token_expiry.png │ │ ├── feature_notify_certificate_expiry.png │ │ ├── feature_notify_domain_error.png │ │ ├── feature_notify_subscription_expiry.png │ │ ├── feature_watch_alias.png │ │ ├── integration_web_intent_resolution.png │ │ ├── setup_1.png │ │ ├── setup_2.png │ │ ├── setup_3.png │ │ └── setup_4.png │ │ ├── drawable │ │ ├── circle.xml │ │ ├── circle_ripple.xml │ │ ├── circularprogressbutton_secondary.xml │ │ ├── circularprogressbutton_tertiary.xml │ │ ├── donut_shimmer.xml │ │ ├── drag_pill.xml │ │ ├── gradient_button_background.xml │ │ ├── home_stat_card_button.xml │ │ ├── home_stat_card_button_ripple.xml │ │ ├── horizontal_reversed.xml │ │ ├── ic_alert_circle.xml │ │ ├── ic_align_justified.xml │ │ ├── ic_anonaddy_backup_banner.xml │ │ ├── ic_apps.xml │ │ ├── ic_arrow_back.xml │ │ ├── ic_bell.xml │ │ ├── ic_brand_google_play.xml │ │ ├── ic_brightness.xml │ │ ├── ic_bug.xml │ │ ├── ic_calendar_time.xml │ │ ├── ic_certificate.xml │ │ ├── ic_check.xml │ │ ├── ic_chevron_down.xml │ │ ├── ic_circle_check.xml │ │ ├── ic_clipboard_list.xml │ │ ├── ic_clipboard_list_off.xml │ │ ├── ic_clock.xml │ │ ├── ic_clock_history.xml │ │ ├── ic_close.xml │ │ ├── ic_cloud_download.xml │ │ ├── ic_confetti.xml │ │ ├── ic_copy.xml │ │ ├── ic_credit_card.xml │ │ ├── ic_database_export.xml │ │ ├── ic_device_watch.xml │ │ ├── ic_device_watch_illustration.xml │ │ ├── ic_dns.xml │ │ ├── ic_dns_alert.xml │ │ ├── ic_dots_circle_horizontal.xml │ │ ├── ic_edit.xml │ │ ├── ic_email_at_anim.xml │ │ ├── ic_email_at_anim_settings.xml │ │ ├── ic_eraser.xml │ │ ├── ic_external_link.xml │ │ ├── ic_eye_off.xml │ │ ├── ic_features_integrations_banner.xml │ │ ├── ic_file_alert.xml │ │ ├── ic_file_diff.xml │ │ ├── ic_file_export.xml │ │ ├── ic_filter.xml │ │ ├── ic_filter_anim.xml │ │ ├── ic_filter_anim_settings.xml │ │ ├── ic_filter_filled.xml │ │ ├── ic_fingerprint.xml │ │ ├── ic_folder.xml │ │ ├── ic_gauge.xml │ │ ├── ic_github.xml │ │ ├── ic_hand_click.xml │ │ ├── ic_heading.xml │ │ ├── ic_help.xml │ │ ├── ic_home.xml │ │ ├── ic_home_anim.xml │ │ ├── ic_home_anim_settings.xml │ │ ├── ic_hourglass.xml │ │ ├── ic_human_greeting.xml │ │ ├── ic_id.xml │ │ ├── ic_inbox_anim.xml │ │ ├── ic_inbox_anim_settings.xml │ │ ├── ic_infinity.xml │ │ ├── ic_info.xml │ │ ├── ic_key.xml │ │ ├── ic_launcher_classic_foreground.xml │ │ ├── ic_letters_case.xml │ │ ├── ic_loading_logo.xml │ │ ├── ic_loading_logo_error.xml │ │ ├── ic_loading_logo_error_splash.xml │ │ ├── ic_loading_logo_splash.xml │ │ ├── ic_login.xml │ │ ├── ic_mail.xml │ │ ├── ic_mail_cog.xml │ │ ├── ic_mail_encrypted.xml │ │ ├── ic_mail_error.xml │ │ ├── ic_mail_error_anim.xml │ │ ├── ic_mail_error_anim_settings.xml │ │ ├── ic_mdi_hand_wave_outline.xml │ │ ├── ic_menu.xml │ │ ├── ic_messages.xml │ │ ├── ic_notification.xml │ │ ├── ic_palette.xml │ │ ├── ic_player_play.xml │ │ ├── ic_pokeball.xml │ │ ├── ic_refresh.xml │ │ ├── ic_refresh_anim.xml │ │ ├── ic_regex.xml │ │ ├── ic_search.xml │ │ ├── ic_send_to_device_watch.xml │ │ ├── ic_settings_update.xml │ │ ├── ic_sort_ascending.xml │ │ ├── ic_sort_descending.xml │ │ ├── ic_star.xml │ │ ├── ic_trash.xml │ │ ├── ic_trash_off.xml │ │ ├── ic_user.xml │ │ ├── ic_user_exclamation.xml │ │ ├── ic_user_minus.xml │ │ ├── ic_user_off.xml │ │ ├── ic_users.xml │ │ ├── ic_users_anim.xml │ │ ├── ic_users_anim_settings.xml │ │ ├── ic_watch_alias.xml │ │ ├── ic_world.xml │ │ ├── ic_world_anim.xml │ │ ├── ic_world_anim_settings.xml │ │ ├── icon_monocolor.xml │ │ ├── log_importance_pill.xml │ │ ├── navigation_rail_fab_shape.xml │ │ ├── progressbar_drawable.xml │ │ ├── progressbar_drawable_square.xml │ │ ├── rounded_square.xml │ │ ├── rules_action_line.xml │ │ ├── shape_rounded_corners_top.xml │ │ ├── shape_rounded_corners_top_profile.xml │ │ ├── shape_rounded_corners_top_recyclerview_cards.xml │ │ ├── state_pressed_ripple.xml │ │ ├── stjin_full_logo.xml │ │ ├── widget_1_background_bottom.xml │ │ ├── widget_1_background_top.xml │ │ ├── widget_2_background.xml │ │ └── widget_2_inner_background.xml │ │ ├── layout-sw600dp │ │ ├── activity_main.xml │ │ └── fragment_home.xml │ │ ├── layout │ │ ├── account_notifications_recyclerview_list_item.xml │ │ ├── account_notifications_recyclerview_list_item_shimmer.xml │ │ ├── activity_account_notifications.xml │ │ ├── activity_app_settings.xml │ │ ├── activity_app_settings_backup.xml │ │ ├── activity_app_settings_features.xml │ │ ├── activity_app_settings_features_mailto.xml │ │ ├── activity_app_settings_features_manage_multiple_aliases.xml │ │ ├── activity_app_settings_features_notify_account_notifications.xml │ │ ├── activity_app_settings_features_notify_api_token_expiry.xml │ │ ├── activity_app_settings_features_notify_certificate_expiry.xml │ │ ├── activity_app_settings_features_notify_domain_error.xml │ │ ├── activity_app_settings_features_notify_failed_deliveries.xml │ │ ├── activity_app_settings_features_notify_subscription_expiry.xml │ │ ├── activity_app_settings_features_watch_alias.xml │ │ ├── activity_app_settings_features_webintent_resolution.xml │ │ ├── activity_app_settings_update.xml │ │ ├── activity_app_settings_wearos.xml │ │ ├── activity_domain_settings.xml │ │ ├── activity_failed_deliveries.xml │ │ ├── activity_log_viewer.xml │ │ ├── activity_main.xml │ │ ├── activity_manage_alias.xml │ │ ├── activity_manage_domains.xml │ │ ├── activity_manage_recipients.xml │ │ ├── activity_manage_subscription.xml │ │ ├── activity_manage_usernames.xml │ │ ├── activity_rule_settings.xml │ │ ├── activity_rules_create.xml │ │ ├── activity_search.xml │ │ ├── activity_setup.xml │ │ ├── activity_setup_new.xml │ │ ├── activity_splash.xml │ │ ├── activity_username_settings.xml │ │ ├── alias_general_actions.xml │ │ ├── aliases_recyclerview_list_item.xml │ │ ├── aliases_recyclerview_list_item_shimmer.xml │ │ ├── appearance_icons_list_item.xml │ │ ├── bottomsheet_account_notifications_detail.xml │ │ ├── bottomsheet_addalias.xml │ │ ├── bottomsheet_adddomain.xml │ │ ├── bottomsheet_addrecipient.xml │ │ ├── bottomsheet_addusername.xml │ │ ├── bottomsheet_addyio_instance_version_unsupported.xml │ │ ├── bottomsheet_api.xml │ │ ├── bottomsheet_backgroundserviceinterval.xml │ │ ├── bottomsheet_changelog.xml │ │ ├── bottomsheet_delete_account_confirmation.xml │ │ ├── bottomsheet_edit_auto_create_regex_domain.xml │ │ ├── bottomsheet_edit_auto_create_regex_username.xml │ │ ├── bottomsheet_edit_description_alias.xml │ │ ├── bottomsheet_edit_description_domain.xml │ │ ├── bottomsheet_edit_description_username.xml │ │ ├── bottomsheet_edit_from_name_alias.xml │ │ ├── bottomsheet_edit_from_name_domain.xml │ │ ├── bottomsheet_edit_from_name_username.xml │ │ ├── bottomsheet_edit_gpg_key_recipient.xml │ │ ├── bottomsheet_edit_recipient_domain.xml │ │ ├── bottomsheet_edit_recipient_username.xml │ │ ├── bottomsheet_edit_recipients_alias.xml │ │ ├── bottomsheet_failed_delivery_detail.xml │ │ ├── bottomsheet_filter_options_alias.xml │ │ ├── bottomsheet_intent.xml │ │ ├── bottomsheet_multiple_selection_alias.xml │ │ ├── bottomsheet_profile.xml │ │ ├── bottomsheet_registration_form.xml │ │ ├── bottomsheet_rules_action.xml │ │ ├── bottomsheet_rules_condition.xml │ │ ├── bottomsheet_search.xml │ │ ├── bottomsheet_send_mail_alias.xml │ │ ├── bottomsheet_send_mail_from_intent_alias.xml │ │ ├── bottomsheet_set_backup_password.xml │ │ ├── bottomsheet_setup_enter_backup_password.xml │ │ ├── bottomsheet_setup_wearos.xml │ │ ├── bottomsheet_uiux_interface.xml │ │ ├── chip_view.xml │ │ ├── custom_toolbar_one_handed.xml │ │ ├── custom_view_animation.xml │ │ ├── custom_view_section.xml │ │ ├── domains_recyclerview_list_item.xml │ │ ├── domains_recyclerview_list_item_domains_shimmer.xml │ │ ├── dropdown_menu_popup_item.xml │ │ ├── failed_deliveries_recyclerview_list_item.xml │ │ ├── failed_deliveries_recyclerview_list_item_shimmer.xml │ │ ├── features_item.xml │ │ ├── fragment_account_notifications.xml │ │ ├── fragment_alias.xml │ │ ├── fragment_domain_settings.xml │ │ ├── fragment_failed_deliveries.xml │ │ ├── fragment_feature_not_available_subscription.xml │ │ ├── fragment_home.xml │ │ ├── fragment_recipients.xml │ │ ├── fragment_rule_settings.xml │ │ ├── fragment_setup_how1.xml │ │ ├── fragment_setup_how2.xml │ │ ├── fragment_setup_how3.xml │ │ ├── fragment_setup_how4.xml │ │ ├── fragment_subscription_account_disabled.xml │ │ ├── fragment_subscription_notify_server.xml │ │ ├── fragment_subscription_other_platform.xml │ │ ├── fragment_username_settings.xml │ │ ├── home_stat_card.xml │ │ ├── logs_recyclerview_list_item.xml │ │ ├── main_app_bar.xml │ │ ├── material_alert_dialog_input.xml │ │ ├── material_alert_dialog_input_password.xml │ │ ├── navigation_rail_fab.xml │ │ ├── product_item.xml │ │ ├── recipients_recyclerview_list_item.xml │ │ ├── recipients_recyclerview_list_item_recipients_shimmer.xml │ │ ├── rules_action.xml │ │ ├── rules_recyclerview_list_item.xml │ │ ├── rules_recyclerview_list_item_rules_shimmer.xml │ │ ├── rules_view_condition_action.xml │ │ ├── rules_view_condition_action_add.xml │ │ ├── search_result_recyclerview_list_item.xml │ │ ├── usernames_recyclerview_list_item.xml │ │ ├── usernames_recyclerview_list_item_usernames_shimmer.xml │ │ ├── widget_1_alias.xml │ │ ├── widget_1_aliases_listview_list_item.xml │ │ ├── widget_2_alias.xml │ │ ├── widget_2_aliases_listview_list_item.xml │ │ └── widget_2_aliases_listview_list_more.xml │ │ ├── menu │ │ ├── bottom_nav_menu.xml │ │ └── rail_nav_menu.xml │ │ ├── values-night │ │ ├── colors_daynight.xml │ │ └── styles.xml │ │ ├── values-sw600dp │ │ ├── array.xml │ │ └── util_values.xml │ │ ├── values-v31 │ │ ├── colors.xml │ │ ├── dimens.xml │ │ └── styles.xml │ │ ├── values │ │ ├── array.xml │ │ ├── attrs.xml │ │ ├── colors.xml │ │ ├── colors_daynight.xml │ │ ├── dimens.xml │ │ ├── integers.xml │ │ ├── strings.xml │ │ ├── styles.xml │ │ └── util_values.xml │ │ └── xml │ │ ├── alias_widget_1_info.xml │ │ ├── alias_widget_2_info.xml │ │ ├── main_split_config.xml │ │ ├── motion_scene.xml │ │ └── shortcuts.xml │ └── test │ └── java │ └── host │ └── stjin │ └── anonaddy │ └── ExampleUnitTest.kt ├── build.gradle.kts ├── fastlane └── metadata │ └── android │ └── en-US │ ├── changelogs │ ├── 11.txt │ ├── 12.txt │ ├── 16.txt │ ├── 18.txt │ ├── 19.txt │ ├── 20.txt │ ├── 23.txt │ ├── 24.txt │ ├── 25.txt │ ├── 26.txt │ ├── 27.txt │ ├── 28.txt │ ├── 29.txt │ ├── 30.txt │ ├── 31.txt │ ├── 32.txt │ ├── 33.txt │ ├── 334000100.txt │ ├── 334010100.txt │ ├── 334020100.txt │ ├── 334100200.txt │ ├── 334200200.txt │ ├── 334210200.txt │ ├── 334300100.txt │ ├── 334310100.txt │ ├── 334320100.txt │ ├── 334400100.txt │ ├── 334500100.txt │ ├── 334510100.txt │ ├── 334520100.txt │ ├── 334530100.txt │ ├── 334600100.txt │ ├── 334610100.txt │ ├── 334620100.txt │ ├── 334630100.txt │ ├── 334640100.txt │ ├── 34.txt │ ├── 344700100.txt │ ├── 344800100.txt │ ├── 344810100.txt │ ├── 345000100.txt │ ├── 345010100.txt │ ├── 345020100.txt │ ├── 345100100.txt │ ├── 345200100.txt │ ├── 345210100.txt │ ├── 345220100.txt │ ├── 345230100.txt │ ├── 345240100.txt │ ├── 345250100.txt │ ├── 345260100.txt │ ├── 345270100.txt │ ├── 345280100.txt │ ├── 345290200.txt │ ├── 35.txt │ ├── 355300100.txt │ ├── 355310100.txt │ ├── 355320100.txt │ ├── 355400600.txt │ ├── 355410200.txt │ ├── 355420100.txt │ ├── 355430100.txt │ ├── 355500100.txt │ ├── 355600100.txt │ ├── 355610100.txt │ ├── 36.txt │ ├── 365700100.txt │ ├── 365710100.txt │ └── default.txt │ ├── full_description.txt │ ├── images │ ├── featureGraphic.png │ ├── icon.png │ └── phoneScreenshots │ │ ├── 1.png │ │ ├── 2.png │ │ ├── 3.png │ │ ├── 4.png │ │ └── 5.png │ ├── short_description.txt │ └── title.txt ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── settings.gradle.kts └── static ├── banner.png └── bmc-button.png /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: bug 6 | assignees: Stjin 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 | **Logs from the app** 21 | If you encounter any unusual behavior, please activate the "Store logs" option, replicate the issue, and then send us the logs. You can do this by tapping the error from the "View stored logs" area in the app's settings. 22 | 23 | **Expected behavior** 24 | A clear and concise description of what you expected to happen. 25 | 26 | **Screenshots** 27 | If applicable, add screenshots to help explain your problem. 28 | 29 | **Desktop (please complete the following information):** 30 | - OS: [e.g. iOS] 31 | - Browser [e.g. chrome, safari] 32 | - Version [e.g. 22] 33 | 34 | **Smartphone (please complete the following information):** 35 | - Device: [e.g. iPhone6] 36 | - OS: [e.g. iOS8.1] 37 | - Browser [e.g. stock browser, safari] 38 | - Version [e.g. 22] 39 | 40 | **Additional context** 41 | Add any other context about the problem here. 42 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: enhancement 6 | assignees: Stjin 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 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/caches 5 | /.idea/libraries 6 | /.idea/modules.xml 7 | /.idea/workspace.xml 8 | /.idea/navEditor.xml 9 | /.idea/assetWizardSettings.xml 10 | .DS_Store 11 | /build 12 | /captures 13 | .externalNativeBuild 14 | .cxx 15 | /.idea/deploymentTargetDropDown.xml 16 | /.idea/misc.xml 17 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | addy.io -------------------------------------------------------------------------------- /.idea/AndroidProjectSystem.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/appInsightsSettings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 23 | 24 | -------------------------------------------------------------------------------- /.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/dictionaries/Stjin.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | addyio 5 | anonaddy 6 | gplayless 7 | sharedpreference 8 | snackbar 9 | stjin 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 21 | 22 | -------------------------------------------------------------------------------- /.idea/icon_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/.idea/icon_dark.png -------------------------------------------------------------------------------- /.idea/kotlinc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/migrations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/render.experimental.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 16 | 17 | -------------------------------------------------------------------------------- /.idea/templateLanguages.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Stjin 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /anonaddy_shared/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /anonaddy_shared/consumer-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/consumer-rules.pro -------------------------------------------------------------------------------- /anonaddy_shared/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /anonaddy_shared/src/androidTest/java/host/stjin/anonaddy_shared/ExampleInstrumentedTest.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy_shared 2 | 3 | import androidx.test.ext.junit.runners.AndroidJUnit4 4 | import androidx.test.platform.app.InstrumentationRegistry 5 | import org.junit.Assert.assertEquals 6 | import org.junit.Test 7 | import org.junit.runner.RunWith 8 | 9 | /** 10 | * Instrumented test, which will execute on an Android device. 11 | * 12 | * See [testing documentation](http://d.android.com/tools/testing). 13 | */ 14 | @RunWith(AndroidJUnit4::class) 15 | class ExampleInstrumentedTest { 16 | @Test 17 | fun useAppContext() { 18 | // Context of the app under test. 19 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext 20 | assertEquals("host.stjin.anonaddy_shared.test", appContext.packageName) 21 | } 22 | } -------------------------------------------------------------------------------- /anonaddy_shared/src/debug/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | addy.io (DEBUG) 4 | -------------------------------------------------------------------------------- /anonaddy_shared/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 13 | 14 | -------------------------------------------------------------------------------- /anonaddy_shared/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /anonaddy_shared/src/main/ic_launcher_gradient-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/ic_launcher_gradient-playstore.png -------------------------------------------------------------------------------- /anonaddy_shared/src/main/ic_launcher_inverse_gradient-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/ic_launcher_inverse_gradient-playstore.png -------------------------------------------------------------------------------- /anonaddy_shared/src/main/java/host/stjin/anonaddy_shared/models/AccountNotifications.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy_shared.models 2 | 3 | data class AccountNotificationsArray( 4 | val `data`: List 5 | ) 6 | 7 | @Suppress("PropertyName", "PropertyName") 8 | data class AccountNotifications( 9 | val category: String, 10 | val created_at: String, 11 | val id: String, 12 | val link: String?, 13 | val link_text: String?, 14 | val text: String, 15 | val title: String 16 | ) -------------------------------------------------------------------------------- /anonaddy_shared/src/main/java/host/stjin/anonaddy_shared/models/AddyChartData.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy_shared.models 2 | 3 | data class AddyChartData( 4 | val forwardsData: List, 5 | val labels: List, 6 | val outboundMessageTotals: List, 7 | val repliesData: List, 8 | val sendsData: List 9 | ) -------------------------------------------------------------------------------- /anonaddy_shared/src/main/java/host/stjin/anonaddy_shared/models/AliasSortFilter.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy_shared.models 2 | 3 | data class AliasSortFilter( 4 | var onlyActiveAliases: Boolean, 5 | var onlyDeletedAliases: Boolean, 6 | var onlyInactiveAliases: Boolean, 7 | var onlyWatchedAliases: Boolean, 8 | var sort: String?, 9 | var sortDesc: Boolean, 10 | var filter: String? 11 | ) -------------------------------------------------------------------------------- /anonaddy_shared/src/main/java/host/stjin/anonaddy_shared/models/ApiTokenDetails.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy_shared.models 2 | 3 | @Suppress("PropertyName", "PropertyName") 4 | data class ApiTokenDetails( 5 | val created_at: String, 6 | val expires_at: String?, 7 | val name: String 8 | ) -------------------------------------------------------------------------------- /anonaddy_shared/src/main/java/host/stjin/anonaddy_shared/models/BulkActionResponse.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy_shared.models 2 | 3 | data class BulkActionResponse( 4 | val ids: List, 5 | val message: String 6 | ) -------------------------------------------------------------------------------- /anonaddy_shared/src/main/java/host/stjin/anonaddy_shared/models/Domains.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy_shared.models 2 | 3 | data class DomainsArray( 4 | val `data`: List 5 | ) 6 | 7 | data class SingleDomain( 8 | val `data`: Domains 9 | ) 10 | 11 | @Suppress("PropertyName", "PropertyName") 12 | data class Domains( 13 | val id: String, 14 | val user_id: String, 15 | val domain: String, 16 | val description: String?, 17 | val from_name: String?, 18 | var aliases_count: Int?, 19 | val default_recipient: Recipients?, 20 | var active: Boolean, 21 | var catch_all: Boolean, 22 | var auto_create_regex: String?, 23 | val domain_verified_at: String?, 24 | val domain_mx_validated_at: String?, 25 | val domain_sending_verified_at: String?, 26 | val created_at: String, 27 | val updated_at: String 28 | ) 29 | data class DomainOptions( 30 | val `data`: List, 31 | val defaultAliasDomain: String, 32 | val defaultAliasFormat: String, 33 | val sharedDomains: List 34 | ) -------------------------------------------------------------------------------- /anonaddy_shared/src/main/java/host/stjin/anonaddy_shared/models/Error.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy_shared.models 2 | 3 | import com.google.gson.Gson 4 | 5 | data class Error( 6 | val message: String 7 | ) 8 | 9 | object ErrorHelper { 10 | 11 | //Try to extract message from error. if fails return full json 12 | fun getErrorMessage(byteArray: ByteArray): String { 13 | return try { 14 | val gson = Gson() 15 | val addyIoData = gson.fromJson(String(byteArray), Error::class.java) 16 | addyIoData.message 17 | } catch (e: Exception) { 18 | String(byteArray) 19 | } 20 | 21 | } 22 | } -------------------------------------------------------------------------------- /anonaddy_shared/src/main/java/host/stjin/anonaddy_shared/models/FailedDeliveries.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy_shared.models 2 | 3 | 4 | data class FailedDeliveriesArray( 5 | val `data`: List 6 | ) 7 | 8 | data class SingleFailedDelivery( 9 | val `data`: FailedDeliveries 10 | ) 11 | 12 | @Suppress("PropertyName", "PropertyName") 13 | data class FailedDeliveries( 14 | val id: String, 15 | val user_id: String, 16 | val recipient_id: String?, 17 | val recipient_email: String?, 18 | val alias_id: String?, 19 | val alias_email: String?, 20 | val bounce_type: String, 21 | val remote_mta: String, 22 | val sender: String?, 23 | val email_type: String, 24 | val status: String, 25 | val code: String, 26 | val is_stored: Boolean, 27 | val attempted_at: String, 28 | val created_at: String, 29 | val updated_at: String 30 | ) -------------------------------------------------------------------------------- /anonaddy_shared/src/main/java/host/stjin/anonaddy_shared/models/Login.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy_shared.models 2 | 3 | 4 | @Suppress("PropertyName", "PropertyName") 5 | // Login data class representing the successful login response 6 | data class Login( 7 | val api_key: String, 8 | val name: String, 9 | val created_at: String, 10 | val expires_at: String? 11 | ) 12 | 13 | @Suppress("PropertyName", "PropertyName") 14 | // LoginMfaRequired data class for when MFA is required 15 | data class LoginMfaRequired( 16 | val message: String, 17 | val mfa_key: String, 18 | val csrf_token: String?, // In case something goes wrong and a 422 gets returned, this token *could* be null 19 | var cookie: Collection // This is not part of the return body, this is just because we need to send the cookie manually in Fuel (https://github.com/kittinunf/fuel/issues/263) 20 | ) -------------------------------------------------------------------------------- /anonaddy_shared/src/main/java/host/stjin/anonaddy_shared/models/Logs.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy_shared.models 2 | 3 | data class Logs( 4 | 5 | /* 6 | importance 7 | 0 = Critical (red) 8 | 1 = Warning (yellow) 9 | 2 = Info (green) 10 | */ 11 | 12 | val importance: Int = LOGIMPORTANCE.INFO.int, 13 | val dateTime: String, 14 | val method: String?, 15 | val message: String, 16 | val extra: String?, 17 | 18 | ) 19 | 20 | enum class LOGIMPORTANCE(val int: Int) { 21 | CRITICAL(0), 22 | WARNING(1), 23 | INFO(2) 24 | } -------------------------------------------------------------------------------- /anonaddy_shared/src/main/java/host/stjin/anonaddy_shared/models/Recipients.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy_shared.models 2 | 3 | data class RecipientsArray( 4 | val `data`: List 5 | ) 6 | 7 | data class SingleRecipient( 8 | val `data`: Recipients 9 | ) 10 | 11 | @Suppress("PropertyName", "PropertyName") 12 | data class Recipients( 13 | val id: String, 14 | val user_id: String, 15 | val email: String, 16 | var can_reply_send: Boolean, 17 | var should_encrypt: Boolean, 18 | var inline_encryption: Boolean, 19 | var protected_headers: Boolean, 20 | var fingerprint: String?, 21 | val email_verified_at: String?, 22 | var aliases_count: Int?, // Could be null as it does not come with a specific alias->recipients endpoint 23 | val created_at: String, 24 | val updated_at: String 25 | ) -------------------------------------------------------------------------------- /anonaddy_shared/src/main/java/host/stjin/anonaddy_shared/models/Rules.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy_shared.models 2 | 3 | import java.io.Serializable 4 | 5 | data class Action( 6 | val type: String, 7 | val value: String 8 | ) : Serializable 9 | 10 | data class Condition( 11 | val type: String, 12 | val match: String, 13 | val values: List 14 | ) : Serializable 15 | 16 | data class SingleRule( 17 | val `data`: Rules 18 | ) 19 | 20 | data class RulesArray( 21 | val `data`: List 22 | ) 23 | 24 | @Suppress("PropertyName", "PropertyName") 25 | data class Rules( 26 | val id: String, 27 | val user_id: String, 28 | var name: String, 29 | val order: Int, 30 | val conditions: ArrayList, 31 | val actions: ArrayList, 32 | var `operator`: String, 33 | var forwards: Boolean, 34 | var replies: Boolean, 35 | var sends: Boolean, 36 | val active: Boolean, 37 | val applied: Int, 38 | val last_applied: String?, 39 | val created_at: String, 40 | val updated_at: String 41 | ) 42 | 43 | 44 | -------------------------------------------------------------------------------- /anonaddy_shared/src/main/java/host/stjin/anonaddy_shared/models/UserAgent.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy_shared.models 2 | 3 | data class UserAgent( 4 | var userAgentApplicationID: String, 5 | var userAgentVersion: String, 6 | var userAgentVersionCode: Int, 7 | var userAgentApplicationBuildType: String 8 | ) -------------------------------------------------------------------------------- /anonaddy_shared/src/main/java/host/stjin/anonaddy_shared/models/Usernames.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy_shared.models 2 | 3 | data class UsernamesArray( 4 | val `data`: List 5 | ) 6 | 7 | data class SingleUsername( 8 | val `data`: Usernames 9 | ) 10 | 11 | @Suppress("PropertyName", "PropertyName") 12 | data class Usernames( 13 | val id: String, 14 | val user_id: String, 15 | val username: String, 16 | val description: String?, 17 | val from_name: String?, 18 | var aliases_count: Int?, 19 | val default_recipient: Recipients?, 20 | var active: Boolean, 21 | var catch_all: Boolean, 22 | var auto_create_regex: String?, 23 | var can_login: Boolean, 24 | val created_at: String, 25 | val updated_at: String 26 | ) -------------------------------------------------------------------------------- /anonaddy_shared/src/main/java/host/stjin/anonaddy_shared/models/Version.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy_shared.models 2 | 3 | data class Version( 4 | val major: Int, 5 | val minor: Int, 6 | val patch: Int, 7 | val version: String? 8 | ) -------------------------------------------------------------------------------- /anonaddy_shared/src/main/java/host/stjin/anonaddy_shared/models/WearOSSettings.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy_shared.models 2 | 3 | data class WearOSSettings( 4 | var base_url: String, 5 | var api_key: String 6 | ) 7 | -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/drawable/ic_add.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 21 | 22 | -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/drawable/ic_arrow_back_up.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 15 | -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/drawable/ic_forbid.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 21 | 22 | -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/drawable/ic_inbox.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 21 | 22 | -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-anydpi-v26/ic_launcher_classic.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-anydpi-v26/ic_launcher_classic_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-anydpi-v26/ic_launcher_gradient.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-anydpi-v26/ic_launcher_gradient_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-anydpi-v26/ic_launcher_inverse_gradient.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-anydpi-v26/ic_launcher_inverse_gradient_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-hdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-hdpi/ic_launcher.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-hdpi/ic_launcher_classic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-hdpi/ic_launcher_classic.png -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-hdpi/ic_launcher_classic_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-hdpi/ic_launcher_classic_round.png -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-hdpi/ic_launcher_gradient.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-hdpi/ic_launcher_gradient.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-hdpi/ic_launcher_gradient_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-hdpi/ic_launcher_gradient_foreground.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-hdpi/ic_launcher_gradient_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-hdpi/ic_launcher_gradient_round.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-hdpi/ic_launcher_inverse_gradient.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-hdpi/ic_launcher_inverse_gradient.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-hdpi/ic_launcher_inverse_gradient_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-hdpi/ic_launcher_inverse_gradient_foreground.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-hdpi/ic_launcher_inverse_gradient_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-hdpi/ic_launcher_inverse_gradient_round.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-hdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-hdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-mdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-mdpi/ic_launcher.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-mdpi/ic_launcher_classic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-mdpi/ic_launcher_classic.png -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-mdpi/ic_launcher_classic_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-mdpi/ic_launcher_classic_round.png -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-mdpi/ic_launcher_gradient.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-mdpi/ic_launcher_gradient.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-mdpi/ic_launcher_gradient_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-mdpi/ic_launcher_gradient_foreground.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-mdpi/ic_launcher_gradient_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-mdpi/ic_launcher_gradient_round.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-mdpi/ic_launcher_inverse_gradient.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-mdpi/ic_launcher_inverse_gradient.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-mdpi/ic_launcher_inverse_gradient_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-mdpi/ic_launcher_inverse_gradient_foreground.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-mdpi/ic_launcher_inverse_gradient_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-mdpi/ic_launcher_inverse_gradient_round.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-mdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-mdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-xhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-xhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-xhdpi/ic_launcher_classic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-xhdpi/ic_launcher_classic.png -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-xhdpi/ic_launcher_classic_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-xhdpi/ic_launcher_classic_round.png -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-xhdpi/ic_launcher_gradient.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-xhdpi/ic_launcher_gradient.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-xhdpi/ic_launcher_gradient_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-xhdpi/ic_launcher_gradient_foreground.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-xhdpi/ic_launcher_gradient_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-xhdpi/ic_launcher_gradient_round.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-xhdpi/ic_launcher_inverse_gradient.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-xhdpi/ic_launcher_inverse_gradient.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-xhdpi/ic_launcher_inverse_gradient_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-xhdpi/ic_launcher_inverse_gradient_foreground.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-xhdpi/ic_launcher_inverse_gradient_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-xhdpi/ic_launcher_inverse_gradient_round.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-xhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-xhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-xxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-xxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-xxhdpi/ic_launcher_classic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-xxhdpi/ic_launcher_classic.png -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-xxhdpi/ic_launcher_classic_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-xxhdpi/ic_launcher_classic_round.png -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-xxhdpi/ic_launcher_gradient.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-xxhdpi/ic_launcher_gradient.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-xxhdpi/ic_launcher_gradient_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-xxhdpi/ic_launcher_gradient_foreground.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-xxhdpi/ic_launcher_gradient_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-xxhdpi/ic_launcher_gradient_round.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-xxhdpi/ic_launcher_inverse_gradient.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-xxhdpi/ic_launcher_inverse_gradient.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-xxhdpi/ic_launcher_inverse_gradient_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-xxhdpi/ic_launcher_inverse_gradient_foreground.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-xxhdpi/ic_launcher_inverse_gradient_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-xxhdpi/ic_launcher_inverse_gradient_round.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-xxxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-xxxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-xxxhdpi/ic_launcher_classic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-xxxhdpi/ic_launcher_classic.png -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-xxxhdpi/ic_launcher_classic_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-xxxhdpi/ic_launcher_classic_round.png -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-xxxhdpi/ic_launcher_gradient.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-xxxhdpi/ic_launcher_gradient.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-xxxhdpi/ic_launcher_gradient_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-xxxhdpi/ic_launcher_gradient_foreground.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-xxxhdpi/ic_launcher_gradient_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-xxxhdpi/ic_launcher_gradient_round.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-xxxhdpi/ic_launcher_inverse_gradient.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-xxxhdpi/ic_launcher_inverse_gradient.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-xxxhdpi/ic_launcher_inverse_gradient_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-xxxhdpi/ic_launcher_inverse_gradient_foreground.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-xxxhdpi/ic_launcher_inverse_gradient_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-xxxhdpi/ic_launcher_inverse_gradient_round.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/anonaddy_shared/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/values-night/colors_daynight.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFFFFF 4 | #2E2E2E 5 | -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/values-v31/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | @android:color/system_accent2_100 5 | @android:color/system_accent1_800 6 | 7 | 8 | -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/values/colors_daynight.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFFFFF 4 | #000000 5 | 6 | -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/values/ic_launcher_classic_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #192169 4 | -------------------------------------------------------------------------------- /anonaddy_shared/src/main/res/values/ic_launcher_inverse_gradient_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFFFFF 4 | -------------------------------------------------------------------------------- /anonaddy_shared/src/test/java/host/stjin/anonaddy_shared/ExampleUnitTest.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy_shared 2 | 3 | import org.junit.Assert.assertEquals 4 | import org.junit.Test 5 | 6 | /** 7 | * Example local unit test, which will execute on the development machine (host). 8 | * 9 | * See [testing documentation](http://d.android.com/tools/testing). 10 | */ 11 | class ExampleUnitTest { 12 | @Test 13 | fun addition_isCorrect() { 14 | assertEquals(4, 2 + 2) 15 | } 16 | } -------------------------------------------------------------------------------- /app-wearos/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /app-wearos/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /app-wearos/src/main/java/host/stjin/anonaddy/components/Loading.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy.components 2 | 3 | import androidx.compose.foundation.layout.Box 4 | import androidx.compose.foundation.layout.fillMaxSize 5 | import androidx.compose.foundation.layout.padding 6 | import androidx.compose.runtime.Composable 7 | import androidx.compose.ui.Alignment 8 | import androidx.compose.ui.Modifier 9 | import androidx.compose.ui.res.colorResource 10 | import androidx.compose.ui.unit.dp 11 | import host.stjin.anonaddy.R 12 | 13 | @Composable 14 | fun Loading() { 15 | Box( 16 | contentAlignment = Alignment.Center, 17 | modifier = Modifier 18 | .fillMaxSize() 19 | .padding(16.dp) 20 | ) { 21 | androidx.wear.compose.material.CircularProgressIndicator( 22 | indicatorColor = colorResource(id = R.color.md_theme_primaryContainer), 23 | trackColor = colorResource(id = R.color.md_theme_onPrimaryContainer) 24 | ) 25 | } 26 | } -------------------------------------------------------------------------------- /app-wearos/src/main/java/host/stjin/anonaddy/utils/ColorUtils.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy.utils 2 | 3 | import android.content.Context 4 | import androidx.core.content.ContextCompat 5 | import host.stjin.anonaddy.R 6 | import host.stjin.anonaddy_shared.models.Aliases 7 | 8 | object ColorUtils { 9 | fun getMostPopularColor(context: Context, aliases: Aliases): Int { 10 | val color1 = if (aliases.active) R.color.portalOrange else R.color.md_grey_500 11 | val color2 = if (aliases.active) R.color.portalBlue else R.color.md_grey_600 12 | val color3 = if (aliases.active) R.color.easternBlue else R.color.md_grey_700 13 | val color4 = if (aliases.active) R.color.softRed else R.color.md_grey_800 14 | 15 | val colorArray = arrayOf( 16 | arrayOf(aliases.emails_forwarded, ContextCompat.getColor(context, color1)), 17 | arrayOf(aliases.emails_replied, ContextCompat.getColor(context, color2)), 18 | arrayOf(aliases.emails_sent, ContextCompat.getColor(context, color3)), 19 | arrayOf(aliases.emails_blocked, ContextCompat.getColor(context, color4)) 20 | ).maxByOrNull { it[0].toFloat() } 21 | 22 | return colorArray?.get(1) as Int 23 | } 24 | } -------------------------------------------------------------------------------- /app-wearos/src/main/res/drawable-round/favorite_aliases_tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/app-wearos/src/main/res/drawable-round/favorite_aliases_tile.png -------------------------------------------------------------------------------- /app-wearos/src/main/res/drawable/favorite_aliases_tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/app-wearos/src/main/res/drawable/favorite_aliases_tile.png -------------------------------------------------------------------------------- /app-wearos/src/main/res/drawable/ic_add_tinted.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 21 | 22 | -------------------------------------------------------------------------------- /app-wearos/src/main/res/drawable/ic_star.xml: -------------------------------------------------------------------------------- 1 | 7 | 13 | 14 | -------------------------------------------------------------------------------- /app-wearos/src/main/res/drawable/ic_star_tinted.xml: -------------------------------------------------------------------------------- 1 | 7 | 13 | 14 | -------------------------------------------------------------------------------- /app-wearos/src/main/res/drawable/ic_starred.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 15 | -------------------------------------------------------------------------------- /app-wearos/src/main/res/drawable/splash_screen.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | -------------------------------------------------------------------------------- /app-wearos/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #202124 4 | -------------------------------------------------------------------------------- /app-wearos/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 48dp 4 | -------------------------------------------------------------------------------- /app-wearos/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 13 | 14 | 17 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | # Ignore .idea files 3 | .idea/ -------------------------------------------------------------------------------- /app/gplayless/release/app-gplayless-release.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/app/gplayless/release/app-gplayless-release.apk -------------------------------------------------------------------------------- /app/gplayless/release/output-metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "artifactType": { 4 | "type": "APK", 5 | "kind": "Directory" 6 | }, 7 | "applicationId": "host.stjin.anonaddy", 8 | "variantName": "gplaylessRelease", 9 | "elements": [ 10 | { 11 | "type": "SINGLE", 12 | "filters": [], 13 | "attributes": [], 14 | "versionCode": 365710100, 15 | "versionName": "v5.7.1", 16 | "outputFile": "app-gplayless-release.apk" 17 | } 18 | ], 19 | "elementType": "File", 20 | "baselineProfiles": [ 21 | { 22 | "minApi": 28, 23 | "maxApi": 30, 24 | "baselineProfiles": [ 25 | "baselineProfiles/1/app-gplayless-release.dm" 26 | ] 27 | }, 28 | { 29 | "minApi": 31, 30 | "maxApi": 2147483647, 31 | "baselineProfiles": [ 32 | "baselineProfiles/0/app-gplayless-release.dm" 33 | ] 34 | } 35 | ], 36 | "minSdkVersionForDexing": 23 37 | } -------------------------------------------------------------------------------- /app/lint.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle.kts. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | -keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | -renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /app/src/androidTest/java/host/stjin/anonaddy/ExampleInstrumentedTest.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy 2 | 3 | import androidx.test.ext.junit.runners.AndroidJUnit4 4 | import androidx.test.platform.app.InstrumentationRegistry 5 | import org.junit.Assert.assertEquals 6 | import org.junit.Test 7 | import org.junit.runner.RunWith 8 | 9 | /** 10 | * Instrumented test, which will execute on an Android device. 11 | * 12 | * See [testing documentation](http://d.android.com/tools/testing). 13 | */ 14 | @RunWith(AndroidJUnit4::class) 15 | class ExampleInstrumentedTest { 16 | @Test 17 | fun useAppContext() { 18 | // Context of the app under test. 19 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext 20 | assertEquals("host.stjin.anonaddy", appContext.packageName) 21 | } 22 | } -------------------------------------------------------------------------------- /app/src/gplay/java/host/stjin/anonaddy/utils/ReviewHelper.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy.utils 2 | 3 | import android.app.Activity 4 | import android.content.Intent 5 | import android.net.Uri 6 | import com.google.android.play.core.review.ReviewManagerFactory 7 | import com.google.android.play.core.review.testing.FakeReviewManager 8 | import host.stjin.anonaddy.BuildConfig 9 | 10 | class ReviewHelper { 11 | fun launchReviewFlow(activity: Activity){ 12 | val manager = if (BuildConfig.DEBUG){ 13 | FakeReviewManager(activity) 14 | } else { 15 | ReviewManagerFactory.create(activity) 16 | } 17 | 18 | val request = manager.requestReviewFlow() 19 | request.addOnCompleteListener { task -> 20 | if (task.isSuccessful) { 21 | // We got the ReviewInfo object 22 | val reviewInfo = task.result 23 | manager.launchReviewFlow(activity, reviewInfo) 24 | } else { 25 | val url = "https://play.google.com/store/apps/details?id=host.stjin.anonaddy" 26 | val i = Intent(Intent.ACTION_VIEW) 27 | i.data = Uri.parse(url) 28 | activity.startActivity(i) 29 | } 30 | } 31 | 32 | } 33 | } -------------------------------------------------------------------------------- /app/src/gplayless/java/com/google/android/gms/tasks/Task.kt: -------------------------------------------------------------------------------- 1 | package com.google.android.gms.tasks 2 | 3 | import com.google.android.gms.wearable.Node 4 | 5 | 6 | abstract class Task { 7 | 8 | abstract fun addOnFailureListener(var1: (List) -> Unit): Task 9 | abstract fun addOnCanceledListener(var1: (List) -> Unit): Task 10 | abstract fun addOnSuccessListener(var1: (TResult) -> Unit): Task 11 | 12 | } 13 | -------------------------------------------------------------------------------- /app/src/gplayless/java/com/google/android/gms/wearable/MessageEvent.kt: -------------------------------------------------------------------------------- 1 | package com.google.android.gms.wearable 2 | 3 | class MessageEvent { 4 | 5 | val sourceNodeId: String? = null // DUMMY 6 | val data: ByteArray = byteArrayOf() // DUMMY 7 | } 8 | -------------------------------------------------------------------------------- /app/src/gplayless/java/com/google/android/gms/wearable/Node.kt: -------------------------------------------------------------------------------- 1 | package com.google.android.gms.wearable 2 | 3 | interface Node { 4 | val id: String 5 | val displayName: String 6 | } 7 | -------------------------------------------------------------------------------- /app/src/gplayless/java/com/google/android/gms/wearable/NodeClient.kt: -------------------------------------------------------------------------------- 1 | package com.google.android.gms.wearable 2 | 3 | abstract class NodeClient : Any() { 4 | 5 | abstract val localNode: com.google.android.gms.tasks.Task 6 | abstract val connectedNodes: com.google.android.gms.tasks.Task> 7 | } -------------------------------------------------------------------------------- /app/src/gplayless/java/com/google/android/gms/wearable/Wearable.kt: -------------------------------------------------------------------------------- 1 | @file:Suppress("ClassName") 2 | 3 | package com.google.android.gms.wearable 4 | 5 | import com.google.android.gms.tasks.Task 6 | 7 | 8 | abstract class Wearable { 9 | 10 | 11 | class getNodeClient(any: Any?) : NodeClient() { 12 | override val localNode: Task = null!! 13 | override val connectedNodes: Task> = null!! 14 | } 15 | 16 | class getMessageClient(any: Any) { 17 | fun sendMessage(var1: Any?, var2: Any?, var3: Any?): Task = null!! 18 | } 19 | 20 | 21 | } 22 | -------------------------------------------------------------------------------- /app/src/gplayless/java/host/stjin/anonaddy/service/WearableListener.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy.service 2 | 3 | import android.app.Service 4 | import android.content.Intent 5 | import android.os.IBinder 6 | 7 | class WearableListener : Service() { 8 | override fun onBind(p0: Intent?): IBinder? { 9 | // DUMMY 10 | return null 11 | } 12 | } -------------------------------------------------------------------------------- /app/src/gplayless/java/host/stjin/anonaddy/ui/ManageSubscriptionActivity.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy.ui 2 | 3 | import host.stjin.anonaddy.BaseActivity 4 | 5 | class ManageSubscriptionActivity : BaseActivity() { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /app/src/gplayless/java/host/stjin/anonaddy/utils/ReviewHelper.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy.utils 2 | 3 | import android.app.Activity 4 | 5 | class ReviewHelper { 6 | fun launchReviewFlow(activity: Activity){} 7 | } -------------------------------------------------------------------------------- /app/src/gplayless/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Your current subscription has no expiration, visit %1$s/settings/subscription to change your subscription 5 | The expiry date of your subscription could not be determined, visit %1$s/settings/subscription to change your subscription 6 | Your subscription will expire in %s. Renew your subscription to keep using pro features. Do you want to renew the subscription now? 7 | Your subscription will expire in %s. Renew your subscription to keep using pro features. Tap here to renew your subscription 8 | -------------------------------------------------------------------------------- /app/src/main/java/host/stjin/anonaddy/ui/MainViewpagerAdapter.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy.ui 2 | 3 | import androidx.fragment.app.Fragment 4 | import androidx.fragment.app.FragmentActivity 5 | import androidx.viewpager2.adapter.FragmentStateAdapter 6 | 7 | class MainViewpagerAdapter(fa: FragmentActivity, private val fragments: ArrayList) : FragmentStateAdapter(fa) { 8 | 9 | // Map to keep track of tags and their corresponding fragment indices 10 | private val tagToIndex = mutableMapOf() 11 | 12 | init { 13 | fragments.forEachIndexed { index, fragment -> 14 | val tag = fragment.javaClass.simpleName 15 | tagToIndex[tag] = index 16 | } 17 | } 18 | 19 | override fun getItemCount(): Int = fragments.size 20 | 21 | override fun createFragment(position: Int): Fragment = fragments[position] 22 | 23 | // Method to get fragment by tag 24 | fun getFragmentByTag(tag: String): Fragment? { 25 | val index = tagToIndex[tag] 26 | return if (index != null && index < fragments.size) { 27 | fragments[index] 28 | } else { 29 | null 30 | } 31 | } 32 | 33 | // Method to get position by tag 34 | fun getPositionByTag(tag: String): Int? = tagToIndex[tag] 35 | } -------------------------------------------------------------------------------- /app/src/main/java/host/stjin/anonaddy/ui/SplitInitializer.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy.ui 2 | 3 | import android.content.Context 4 | import androidx.startup.Initializer 5 | import androidx.window.embedding.RuleController 6 | import host.stjin.anonaddy.R 7 | 8 | class SplitInitializer : Initializer { 9 | 10 | override fun create(context: Context): RuleController { 11 | return RuleController.getInstance(context).apply { 12 | setRules(RuleController.parseRules(context, R.xml.main_split_config)) 13 | } 14 | } 15 | 16 | override fun dependencies(): List>> { 17 | return emptyList() 18 | } 19 | } -------------------------------------------------------------------------------- /app/src/main/java/host/stjin/anonaddy/ui/appsettings/wearos/SetupWearOSBottomSheetActivity.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy.ui.appsettings.wearos 2 | 3 | import android.os.Bundle 4 | import host.stjin.anonaddy.BaseActivity 5 | 6 | class SetupWearOSBottomSheetActivity : BaseActivity(), SetupWearOSBottomDialogFragment.AddSetupWearOSBottomDialogListener { 7 | 8 | override fun onCreate(savedInstanceState: Bundle?) { 9 | super.onCreate(savedInstanceState) 10 | 11 | val nodeId = intent.getStringExtra("nodeId") 12 | val nodeDisplayName = intent.getStringExtra("nodeDisplayName") 13 | val setupWearOSBottomDialogFragment: SetupWearOSBottomDialogFragment = 14 | SetupWearOSBottomDialogFragment.newInstance(this, nodeId,nodeDisplayName) 15 | 16 | if (!setupWearOSBottomDialogFragment.isAdded) { 17 | setupWearOSBottomDialogFragment.show( 18 | supportFragmentManager, 19 | "setupWearOSBottomDialogFragment" 20 | ) 21 | } 22 | } 23 | 24 | override fun onDismissed() { 25 | finish() 26 | } 27 | } -------------------------------------------------------------------------------- /app/src/main/java/host/stjin/anonaddy/ui/setup/SetupNewActivity.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy.ui.setup 2 | 3 | import android.os.Bundle 4 | import androidx.fragment.app.Fragment 5 | import host.stjin.anonaddy.BaseActivity 6 | import host.stjin.anonaddy.R 7 | import host.stjin.anonaddy.databinding.ActivitySetupNewBinding 8 | 9 | 10 | class SetupNewActivity : BaseActivity() { 11 | 12 | private lateinit var binding: ActivitySetupNewBinding 13 | 14 | override fun onCreate(savedInstanceState: Bundle?) { 15 | this.overridePendingTransition( 16 | R.anim.slide_in, 17 | R.anim.slide_out 18 | ) 19 | super.onCreate(savedInstanceState) 20 | binding = ActivitySetupNewBinding.inflate(layoutInflater) 21 | val view = binding.root 22 | setContentView(view) 23 | 24 | 25 | switchFragments(SetupHow1Fragment()) 26 | } 27 | 28 | 29 | fun switchFragments(fragment: Fragment) { 30 | supportFragmentManager 31 | .beginTransaction() 32 | .replace(R.id.setup_fragment, fragment) 33 | .commit() 34 | } 35 | 36 | } -------------------------------------------------------------------------------- /app/src/main/java/host/stjin/anonaddy/utils/AttributeHelper.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy.utils 2 | 3 | import android.content.Context 4 | import android.content.res.Resources.Theme 5 | import android.util.TypedValue 6 | 7 | 8 | object AttributeHelper { 9 | fun getValueByAttr(context: Context, resId: Int): Int { 10 | val typedValue = TypedValue() 11 | val theme: Theme = context.theme 12 | theme.resolveAttribute(resId, typedValue, true) 13 | return typedValue.data 14 | } 15 | } -------------------------------------------------------------------------------- /app/src/main/java/host/stjin/anonaddy/utils/ComponentUtils.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy.utils 2 | 3 | import android.content.ComponentName 4 | import android.content.Context 5 | import android.content.pm.PackageManager 6 | 7 | object ComponentUtils { 8 | fun getComponentState(context: Context, packageName: String?, componentClassName: String?): Boolean { 9 | val pm = context.applicationContext.packageManager 10 | val componentName = ComponentName(packageName!!, componentClassName!!) 11 | return pm.getComponentEnabledSetting(componentName) == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT || 12 | pm.getComponentEnabledSetting(componentName) == PackageManager.COMPONENT_ENABLED_STATE_ENABLED 13 | } 14 | 15 | fun setComponentState(context: Context, packageName: String?, componentClassName: String?, enabled: Boolean) { 16 | val pm = context.applicationContext.packageManager 17 | val componentName = ComponentName(packageName!!, componentClassName!!) 18 | val state = if (enabled) PackageManager.COMPONENT_ENABLED_STATE_ENABLED else PackageManager.COMPONENT_ENABLED_STATE_DISABLED 19 | pm.setComponentEnabledSetting( 20 | componentName, 21 | state, 22 | PackageManager.DONT_KILL_APP 23 | ) 24 | } 25 | } -------------------------------------------------------------------------------- /app/src/main/java/host/stjin/anonaddy/utils/CustomPatterns.kt: -------------------------------------------------------------------------------- 1 | @file:Suppress("RegExpSimplifiable") 2 | 3 | package host.stjin.anonaddy.utils 4 | 5 | import java.util.regex.Pattern 6 | 7 | object CustomPatterns { 8 | // I am too kind for humanity.... 9 | // https://gitlab.com/Stjin/anonaddy-android/-/issues/31 10 | val EMAIL_ADDRESS: Pattern = Pattern.compile( 11 | "[a-zA-Z0-9~\\/\\+\\.\\_\\%\\-\\+]{1,256}" + 12 | "\\@" + 13 | "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}" + 14 | "(" + 15 | "\\." + 16 | "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25}" + 17 | ")+" 18 | ) 19 | } -------------------------------------------------------------------------------- /app/src/main/java/host/stjin/anonaddy/utils/InsetUtil.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy.utils 2 | 3 | import android.view.View 4 | import androidx.core.view.ViewCompat 5 | import androidx.core.view.WindowInsetsCompat 6 | 7 | object InsetUtil { 8 | 9 | fun applyBottomInset(view: View) { 10 | ViewCompat.setOnApplyWindowInsetsListener(view) { v, insets -> 11 | val typesInset = insets.getInsets(WindowInsetsCompat.Type.systemBars() or WindowInsetsCompat.Type.ime()) 12 | v.setPadding(v.paddingLeft, v.paddingTop, v.paddingRight, typesInset.bottom) 13 | WindowInsetsCompat.CONSUMED 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /app/src/main/java/host/stjin/anonaddy/utils/MarginItemDecoration.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy.utils 2 | 3 | import android.graphics.Rect 4 | import android.view.View 5 | import androidx.recyclerview.widget.RecyclerView 6 | import host.stjin.anonaddy.R 7 | 8 | class MarginItemDecoration(private val spaceSize: Int) : RecyclerView.ItemDecoration() { 9 | override fun getItemOffsets( 10 | outRect: Rect, view: View, 11 | parent: RecyclerView, 12 | state: RecyclerView.State 13 | ) { 14 | with(outRect) { 15 | if (parent.context.resources.getBoolean(R.bool.isTablet)) { 16 | top = spaceSize / 2 17 | left = spaceSize / 2 18 | right = spaceSize / 2 19 | 20 | bottom = spaceSize / 2 21 | } else { 22 | top = if (parent.getChildAdapterPosition(view) == 0) { 23 | 0 24 | } else { 25 | spaceSize / 2 26 | } 27 | left = spaceSize / 2 28 | right = spaceSize / 2 29 | 30 | bottom = if (parent.getChildAdapterPosition(view) == (parent.adapter?.itemCount ?: 0) - 1) { 31 | 0 32 | } else { 33 | spaceSize / 2 34 | } 35 | } 36 | 37 | } 38 | } 39 | } -------------------------------------------------------------------------------- /app/src/main/java/host/stjin/anonaddy/utils/NumberUtils.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy.utils 2 | 3 | import java.math.RoundingMode 4 | 5 | object NumberUtils { 6 | 7 | fun roundOffDecimal(number: Double): Float { 8 | return number.toBigDecimal().setScale(1, RoundingMode.FLOOR).toFloat() 9 | } 10 | } -------------------------------------------------------------------------------- /app/src/main/java/host/stjin/anonaddy/utils/ScreenSizeUtils.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy.utils 2 | 3 | import android.content.Context 4 | 5 | 6 | object ScreenSizeUtils { 7 | fun calculateNoOfColumns(context: Context): Int { 8 | val displayMetrics = context.resources.displayMetrics 9 | val dpWidth = displayMetrics.widthPixels / displayMetrics.density 10 | // Where 360 is the width of your grid item. You can change it as per your convention. 11 | var columns = (dpWidth / 360).toInt() 12 | if (columns == 0) columns = 1 13 | return columns 14 | } 15 | } -------------------------------------------------------------------------------- /app/src/main/java/host/stjin/anonaddy/utils/WearOSHelper.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy.utils 2 | 3 | import android.app.Activity 4 | import host.stjin.anonaddy_shared.managers.SettingsManager 5 | import host.stjin.anonaddy_shared.models.WearOSSettings 6 | 7 | class WearOSHelper(private val activity: Activity) { 8 | fun createWearOSConfiguration(): WearOSSettings? { 9 | val encryptedSettingsManager = SettingsManager(true, activity) 10 | val baseUrl = encryptedSettingsManager.getSettingsString(SettingsManager.PREFS.BASE_URL) 11 | val apiKey = encryptedSettingsManager.getSettingsString(SettingsManager.PREFS.API_KEY) 12 | 13 | return if (baseUrl != null && apiKey != null) { 14 | WearOSSettings( 15 | base_url = baseUrl, 16 | api_key = apiKey 17 | ) 18 | } else { 19 | null 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /app/src/main/java/host/stjin/anonaddy/widget/AliasWidget1RemoteViewsService.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy.widget 2 | 3 | import android.content.Intent 4 | import android.widget.RemoteViewsService 5 | 6 | class AliasWidget1RemoteViewsService : RemoteViewsService() { 7 | override fun onGetViewFactory(intent: Intent): RemoteViewsFactory { 8 | return AliasWidget1RemoteViewsFactory(this) 9 | } 10 | } -------------------------------------------------------------------------------- /app/src/main/java/host/stjin/anonaddy/widget/AliasWidget2RemoteViewsService.kt: -------------------------------------------------------------------------------- 1 | package host.stjin.anonaddy.widget 2 | 3 | import android.content.Intent 4 | import android.widget.RemoteViewsService 5 | 6 | class AliasWidget2RemoteViewsService : RemoteViewsService() { 7 | override fun onGetViewFactory(intent: Intent): RemoteViewsFactory { 8 | return AliasWidget2RemoteViewsFactory(this) 9 | } 10 | } -------------------------------------------------------------------------------- /app/src/main/res/anim/item_animation_fall_down.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 8 | 9 | 13 | 14 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/anim/layout_animation_fall_down.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_in.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_out.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/anim/zoom_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/anim/zoom_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/animator/selector_raise.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 11 | 12 | 13 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-nodpi/alias_widget_1_preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/app/src/main/res/drawable-night-nodpi/alias_widget_1_preview.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-nodpi/feature_failed_delivery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/app/src/main/res/drawable-night-nodpi/feature_failed_delivery.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-nodpi/feature_long_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/app/src/main/res/drawable-night-nodpi/feature_long_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-nodpi/feature_mailto.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/app/src/main/res/drawable-night-nodpi/feature_mailto.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-nodpi/feature_notify_account_notifications.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/app/src/main/res/drawable-night-nodpi/feature_notify_account_notifications.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-nodpi/feature_notify_api_token_expiry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/app/src/main/res/drawable-night-nodpi/feature_notify_api_token_expiry.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-nodpi/feature_notify_certificate_expiry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/app/src/main/res/drawable-night-nodpi/feature_notify_certificate_expiry.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-nodpi/feature_notify_domain_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/app/src/main/res/drawable-night-nodpi/feature_notify_domain_error.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-nodpi/feature_notify_subscription_expiry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/app/src/main/res/drawable-night-nodpi/feature_notify_subscription_expiry.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-nodpi/feature_watch_alias.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/app/src/main/res/drawable-night-nodpi/feature_watch_alias.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-nodpi/integration_web_intent_resolution.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/app/src/main/res/drawable-night-nodpi/integration_web_intent_resolution.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/alias_widget_1_preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/app/src/main/res/drawable-nodpi/alias_widget_1_preview.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/alias_widget_2_preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/app/src/main/res/drawable-nodpi/alias_widget_2_preview.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/feature_failed_delivery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/app/src/main/res/drawable-nodpi/feature_failed_delivery.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/feature_long_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/app/src/main/res/drawable-nodpi/feature_long_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/feature_mailto.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/app/src/main/res/drawable-nodpi/feature_mailto.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/feature_notify_account_notifications.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/app/src/main/res/drawable-nodpi/feature_notify_account_notifications.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/feature_notify_api_token_expiry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/app/src/main/res/drawable-nodpi/feature_notify_api_token_expiry.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/feature_notify_certificate_expiry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/app/src/main/res/drawable-nodpi/feature_notify_certificate_expiry.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/feature_notify_domain_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/app/src/main/res/drawable-nodpi/feature_notify_domain_error.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/feature_notify_subscription_expiry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/app/src/main/res/drawable-nodpi/feature_notify_subscription_expiry.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/feature_watch_alias.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/app/src/main/res/drawable-nodpi/feature_watch_alias.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/integration_web_intent_resolution.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/app/src/main/res/drawable-nodpi/integration_web_intent_resolution.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/setup_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/app/src/main/res/drawable-nodpi/setup_1.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/setup_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/app/src/main/res/drawable-nodpi/setup_2.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/setup_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/app/src/main/res/drawable-nodpi/setup_3.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/setup_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anonaddy/addy-android/4f34d685fd220a99cbbcd56eaf6dca8d33d85155/app/src/main/res/drawable-nodpi/setup_4.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/circle.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/circle_ripple.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/circularprogressbutton_secondary.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/circularprogressbutton_tertiary.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/donut_shimmer.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/drag_pill.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/gradient_button_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/home_stat_card_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/home_stat_card_button_ripple.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_alert_circle.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 21 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_align_justified.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 21 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow_back.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 21 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_bell.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_check.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_chevron_down.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_circle_check.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_clock.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_close.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_copy.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_database_export.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 21 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_device_watch.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 21 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_edit.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_email_at_anim_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 13 | 14 | 15 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_eraser.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_external_link.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 21 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_file_export.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_filter.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 10 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_filter_anim_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 13 | 14 | 15 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_filter_filled.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 10 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_folder.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_github.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 9 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_home.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 21 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_home_anim_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 13 | 14 | 15 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_human_greeting.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_inbox_anim_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 13 | 14 | 15 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_info.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 21 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_mail.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_mail_error_anim_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 13 | 14 | 15 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_menu.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 21 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_messages.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_notification.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_player_play.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_pokeball.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 21 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_refresh.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_search.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_star.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_user.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_users_anim_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 13 | 14 | 15 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_world_anim_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 13 | 14 | 15 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/icon_monocolor.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/log_importance_pill.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/navigation_rail_fab_shape.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 7 | 8 | 9 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/progressbar_drawable.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/progressbar_drawable_square.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rounded_square.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rules_action_line.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_rounded_corners_top.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_rounded_corners_top_profile.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_rounded_corners_top_recyclerview_cards.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/state_pressed_ripple.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/widget_1_background_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/widget_1_background_top.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/widget_2_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/widget_2_inner_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_account_notifications.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 13 | 14 | 19 | 20 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_domain_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 14 | 15 | 20 | 21 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_failed_deliveries.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 13 | 14 | 19 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_rule_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 14 | 15 | 16 | 21 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_setup_new.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_username_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 14 | 15 | 20 | 21 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/layout/chip_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /app/src/main/res/layout/custom_view_animation.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dropdown_menu_popup_item.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/features_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 15 | 16 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_feature_not_available_subscription.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 15 | 16 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_subscription_other_platform.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 16 | 17 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/layout/material_alert_dialog_input.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/layout/material_alert_dialog_input_password.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/layout/rules_action.xml: -------------------------------------------------------------------------------- 1 | 2 | 13 | 14 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/layout/rules_view_condition_action_add.xml: -------------------------------------------------------------------------------- 1 | 2 | 14 | 15 | 20 | 21 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/layout/widget_2_aliases_listview_list_more.xml: -------------------------------------------------------------------------------- 1 | 2 | 13 | 14 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/menu/bottom_nav_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 10 | 11 | 15 | 16 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/values-night/colors_daynight.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFFFFF 4 | #2E2E2E 5 | @color/md_grey_900 6 | @color/md_grey_800 7 | -------------------------------------------------------------------------------- /app/src/main/res/values-sw600dp/array.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | home 5 | aliases 6 | recipients 7 | usernames 8 | domains 9 | rules 10 | failed_deliveries 11 | 12 | 13 | 14 | @string/title_home 15 | @string/title_aliases 16 | @string/title_recipients 17 | @string/usernames 18 | @string/domains 19 | @string/rules 20 | @string/failed_deliveries 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/values-sw600dp/util_values.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | true 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-v31/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @color/BlackWhite 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-v31/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @android:dimen/system_app_widget_background_radius 4 | @android:dimen/system_app_widget_inner_radius 5 | -------------------------------------------------------------------------------- /app/src/main/res/values-v31/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |