├── .gitattributes ├── .github └── FUNDING.yml ├── .gitignore ├── LICENSE ├── README.md ├── README └── hero.png ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── AndroidUnitTest.java │ ├── debug │ └── res │ │ ├── drawable-v26 │ │ └── app_icon_background.xml │ │ └── xml-v25 │ │ └── shortcuts.xml │ ├── foss │ ├── java │ │ └── me │ │ │ └── tagavari │ │ │ └── airmessage │ │ │ ├── connection │ │ │ └── comm5 │ │ │ │ └── ProxyConnect.kt │ │ │ └── flavor │ │ │ ├── CrashlyticsBridge.kt │ │ │ ├── FirebaseAuthBridge.kt │ │ │ ├── FragmentMessagingAttachmentsMaps.kt │ │ │ ├── FragmentMessagingAttachmentsViewModelMaps.kt │ │ │ ├── MLKitBridge.kt │ │ │ ├── MapsBridge.kt │ │ │ ├── PlaySecurityBridge.kt │ │ │ ├── VHMessageComponentLocationMap.kt │ │ │ └── WelcomeGoogleSignIn.kt │ └── res │ │ ├── layout │ │ ├── fragment_attachments_location.xml │ │ └── listitem_contentlocation_map.xml │ │ ├── values-fr │ │ └── strings.xml │ │ ├── values-ja │ │ └── strings.xml │ │ └── values │ │ └── strings.xml │ ├── full │ ├── AndroidManifest.xml │ ├── java │ │ └── me │ │ │ └── tagavari │ │ │ └── airmessage │ │ │ ├── activity │ │ │ └── LocationPicker.java │ │ │ ├── connection │ │ │ └── comm5 │ │ │ │ └── ProxyConnect.java │ │ │ ├── data │ │ │ └── DatabaseExtensions.kt │ │ │ ├── enums │ │ │ └── LocationState.kt │ │ │ ├── flavor │ │ │ ├── CrashlyticsBridge.kt │ │ │ ├── FirebaseAuthBridge.kt │ │ │ ├── FragmentMessagingAttachmentsMaps.kt │ │ │ ├── FragmentMessagingAttachmentsViewModelMaps.kt │ │ │ ├── MLKitBridge.kt │ │ │ ├── MapsBridge.kt │ │ │ ├── PlaySecurityBridge.kt │ │ │ ├── VHMessageComponentLocationMap.kt │ │ │ └── WelcomeGoogleSignIn.kt │ │ │ ├── fragment │ │ │ └── FragmentOnboardingConnect.java │ │ │ └── service │ │ │ └── FCMService.kt │ └── res │ │ └── layout │ │ ├── fragment_attachments_location.xml │ │ └── listitem_contentlocation_map.xml │ ├── fullRelease │ └── google-services.default.json │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── me │ │ │ └── tagavari │ │ │ └── airmessage │ │ │ ├── MainApplication.java │ │ │ ├── activity │ │ │ ├── BlockedAddresses.java │ │ │ ├── CallHistory.kt │ │ │ ├── Conversations.java │ │ │ ├── CrashReport.java │ │ │ ├── FaceTimeCall.kt │ │ │ ├── ImageDraw.java │ │ │ ├── Licenses.java │ │ │ ├── MediaViewer.java │ │ │ ├── Messaging.java │ │ │ ├── NewFaceTime.kt │ │ │ ├── NewMessage.java │ │ │ ├── Onboarding.java │ │ │ ├── Preferences.java │ │ │ ├── ServerConfigStandalone.java │ │ │ ├── ServerUpdate.kt │ │ │ └── ShareHandler.java │ │ │ ├── common │ │ │ └── Blocks.java │ │ │ ├── component │ │ │ ├── ContactChip.java │ │ │ ├── ContactListReactiveUpdate.java │ │ │ └── ContactsRecyclerAdapter.java │ │ │ ├── composite │ │ │ ├── ActivityPlugin.java │ │ │ ├── AppCompatActivityPlugin.java │ │ │ ├── AppCompatCompositeActivity.java │ │ │ └── CompositeActivity.java │ │ │ ├── compositeplugin │ │ │ ├── PluginConnectionService.java │ │ │ ├── PluginConnectionServiceConfig.java │ │ │ ├── PluginMessageBar.java │ │ │ ├── PluginQNavigation.java │ │ │ ├── PluginRXDisposable.java │ │ │ └── PluginThemeUpdater.java │ │ │ ├── connection │ │ │ ├── CommunicationsManager.java │ │ │ ├── CommunicationsManagerFactory.java │ │ │ ├── ConnectionManager.java │ │ │ ├── ConnectionOverride.java │ │ │ ├── ConnectionTaskManager.java │ │ │ ├── CookieBuilder.java │ │ │ ├── DataProxy.java │ │ │ ├── DataProxyListener.java │ │ │ ├── MassRetrievalParams.java │ │ │ ├── ProxyNoOp.java │ │ │ ├── comm5 │ │ │ │ ├── AirPacker.java │ │ │ │ ├── AirUnpacker.java │ │ │ │ ├── ClientComm5.java │ │ │ │ ├── ClientProtocol4.java │ │ │ │ ├── ClientProtocol5.java │ │ │ │ ├── EncryptedPacket.java │ │ │ │ ├── ProtocolManager.java │ │ │ │ ├── ProxyDirectTCP.java │ │ │ │ ├── ProxyDirectTCPReader.java │ │ │ │ └── ProxyDirectTCPWriter.java │ │ │ ├── encryption │ │ │ │ ├── EncryptionAES.java │ │ │ │ └── EncryptionManager.java │ │ │ ├── exception │ │ │ │ ├── AMRemoteUpdateException.kt │ │ │ │ ├── AMRequestException.java │ │ │ │ └── LargeAllocationException.java │ │ │ ├── listener │ │ │ │ ├── CommunicationsManagerListener.java │ │ │ │ └── ConnectionUpdateListener.java │ │ │ ├── request │ │ │ │ ├── ChatCreationResponseManager.java │ │ │ │ ├── FileFetchRequest.java │ │ │ │ ├── FileProcessingRequest.java │ │ │ │ ├── FilePushRequest.java │ │ │ │ ├── FileRemovalRequest.java │ │ │ │ └── MassRetrievalRequest.java │ │ │ └── task │ │ │ │ ├── ChatResponseTask.java │ │ │ │ ├── MessageUpdateTask.java │ │ │ │ └── ModifierUpdateTask.java │ │ │ ├── constants │ │ │ ├── ColorConstants.java │ │ │ ├── ExternalLinkConstants.java │ │ │ ├── FileNameConstants.java │ │ │ ├── MIMEConstants.java │ │ │ ├── NetworkConstants.java │ │ │ ├── RegexConstants.java │ │ │ ├── SMSReceiverConstants.java │ │ │ ├── TimingConstants.java │ │ │ └── VersionConstants.kt │ │ │ ├── contract │ │ │ ├── ContractDefaultMessagingApp.kt │ │ │ └── ContractNotificationRingtoneSelector.kt │ │ │ ├── data │ │ │ ├── DatabaseManager.java │ │ │ ├── MessagesDataHelper.kt │ │ │ ├── SharedPreferencesManager.java │ │ │ ├── SharedPreferencesManager.kt │ │ │ └── UserCacheHelper.kt │ │ │ ├── enums │ │ │ ├── AttachmentReqErrorCode.java │ │ │ ├── AttachmentType.java │ │ │ ├── ChatCreateErrorCode.java │ │ │ ├── ConnectionErrorCode.java │ │ │ ├── ConnectionFeature.java │ │ │ ├── ConnectionMode.java │ │ │ ├── ConnectionState.java │ │ │ ├── ConversationItemType.java │ │ │ ├── ConversationState.java │ │ │ ├── FaceTimeInitiateCode.java │ │ │ ├── FaceTimeLinkErrorCode.java │ │ │ ├── GroupAction.java │ │ │ ├── MassRetrievalErrorCode.java │ │ │ ├── MessageComponentType.java │ │ │ ├── MessageEdgeType.java │ │ │ ├── MessagePreviewState.java │ │ │ ├── MessagePreviewType.java │ │ │ ├── MessageSendErrorCode.java │ │ │ ├── MessageState.java │ │ │ ├── MessageViewType.java │ │ │ ├── ProxyType.java │ │ │ ├── ServiceHandler.java │ │ │ ├── ServiceType.java │ │ │ ├── TapbackType.java │ │ │ └── TrackableRequestCategory.java │ │ │ ├── extension │ │ │ ├── FragmentBackOverride.java │ │ │ ├── FragmentCommunicationFaceTime.kt │ │ │ └── FragmentCommunicationNetworkConfig.java │ │ │ ├── fragment │ │ │ ├── FragmentCallActive.kt │ │ │ ├── FragmentCallPending.kt │ │ │ ├── FragmentCommunication.kt │ │ │ ├── FragmentDialogConnectAuth.kt │ │ │ ├── FragmentMessagingAttachments.java │ │ │ ├── FragmentMessagingDetails.java │ │ │ ├── FragmentOnboardingManual.java │ │ │ ├── FragmentOnboardingWelcome.java │ │ │ └── FragmentSync.java │ │ │ ├── helper │ │ │ ├── AddressHelper.kt │ │ │ ├── AttachmentStorageHelper.kt │ │ │ ├── BitmapHelper.kt │ │ │ ├── CalendarHelper.kt │ │ │ ├── CollectionHelper.kt │ │ │ ├── ColorHelper.kt │ │ │ ├── ColorMathHelper.kt │ │ │ ├── ConnectionServiceLaunchHelper.kt │ │ │ ├── ContactHelper.kt │ │ │ ├── ConversationBuildHelper.kt │ │ │ ├── ConversationColorHelper.kt │ │ │ ├── ConversationHelper.kt │ │ │ ├── ConversationPreviewHelper.kt │ │ │ ├── DataCompressionHelper.kt │ │ │ ├── DataStreamHelper.kt │ │ │ ├── ErrorDetailsHelper.kt │ │ │ ├── ErrorLanguageHelper.kt │ │ │ ├── ExternalStorageHelper.kt │ │ │ ├── FileHelper.kt │ │ │ ├── IntentHelper.kt │ │ │ ├── LanguageHelper.kt │ │ │ ├── LookAheadStreamIterator.kt │ │ │ ├── MMSSMSHelper.kt │ │ │ ├── MediaFileHelper.kt │ │ │ ├── MessageSendHelper.kt │ │ │ ├── MessageShapeHelper.kt │ │ │ ├── NotificationHelper.kt │ │ │ ├── PlatformHelper.kt │ │ │ ├── ReactiveHelper.kt │ │ │ ├── ResourceHelper.kt │ │ │ ├── SendStyleHelper.kt │ │ │ ├── ShortcutHelper.kt │ │ │ ├── SmartReplyHelper.kt │ │ │ ├── SoundHelper.kt │ │ │ ├── StandardCompressionHelper.kt │ │ │ ├── StringHelper.kt │ │ │ ├── ThemeHelper.kt │ │ │ ├── VersionHelper.kt │ │ │ ├── ViewHelper.kt │ │ │ └── WindowHelper.kt │ │ │ ├── messaging │ │ │ ├── AMConversationAction.kt │ │ │ ├── AttachmentInfo.kt │ │ │ ├── AttachmentPreview.kt │ │ │ ├── ChatCreateAction.kt │ │ │ ├── ChatMemberAction.kt │ │ │ ├── ChatRenameAction.kt │ │ │ ├── ConversationAction.kt │ │ │ ├── ConversationInfo.kt │ │ │ ├── ConversationItem.kt │ │ │ ├── ConversationPreview.kt │ │ │ ├── FileDisplayMetadata.kt │ │ │ ├── FileDraft.kt │ │ │ ├── FileLinked.kt │ │ │ ├── MemberInfo.kt │ │ │ ├── MessageComponent.kt │ │ │ ├── MessageComponentText.kt │ │ │ ├── MessageInfo.kt │ │ │ ├── MessagePreviewInfo.kt │ │ │ ├── StickerInfo.kt │ │ │ ├── TapbackInfo.kt │ │ │ ├── viewbinder │ │ │ │ ├── VBConversation.kt │ │ │ │ └── VBMessageComponent.kt │ │ │ └── viewholder │ │ │ │ ├── VHAttachmentLinked.kt │ │ │ │ ├── VHAttachmentQueued.kt │ │ │ │ ├── VHAttachmentTileContent.kt │ │ │ │ ├── VHAttachmentTileContentAudio.kt │ │ │ │ ├── VHAttachmentTileContentContact.kt │ │ │ │ ├── VHAttachmentTileContentDocument.kt │ │ │ │ ├── VHAttachmentTileContentLocation.kt │ │ │ │ ├── VHAttachmentTileContentMedia.kt │ │ │ │ ├── VHConversationActions.kt │ │ │ │ ├── VHConversationBase.kt │ │ │ │ ├── VHConversationDetailed.kt │ │ │ │ ├── VHMessageAction.kt │ │ │ │ ├── VHMessageComponent.kt │ │ │ │ ├── VHMessageComponentAttachment.kt │ │ │ │ ├── VHMessageComponentAudio.kt │ │ │ │ ├── VHMessageComponentContact.kt │ │ │ │ ├── VHMessageComponentDocument.kt │ │ │ │ ├── VHMessageComponentLocation.kt │ │ │ │ ├── VHMessageComponentText.kt │ │ │ │ ├── VHMessageComponentVisual.kt │ │ │ │ ├── VHMessagePreview.kt │ │ │ │ ├── VHMessagePreviewLink.kt │ │ │ │ └── VHMessageStructure.kt │ │ │ ├── receiver │ │ │ ├── DefaultMessagingAppChangedReceiver.java │ │ │ ├── ExternalMessagingProviderChangedReceiver.java │ │ │ ├── MessageNotificationActionReceiver.java │ │ │ ├── MessageNotificationDeleteReceiver.java │ │ │ ├── StartBootReceiver.java │ │ │ ├── TextMMSReceivedReceiver.java │ │ │ ├── TextMMSSentReceiver.java │ │ │ ├── TextSMSDeliveredReceiver.java │ │ │ ├── TextSMSReceivedReceiver.java │ │ │ └── TextSMSSentReceiver.java │ │ │ ├── redux │ │ │ ├── ReduxEmitterNetwork.kt │ │ │ ├── ReduxEventAttachmentDownload.kt │ │ │ ├── ReduxEventAttachmentUpload.kt │ │ │ ├── ReduxEventConnection.kt │ │ │ ├── ReduxEventFaceTime.kt │ │ │ ├── ReduxEventMassRetrieval.kt │ │ │ ├── ReduxEventMessaging.kt │ │ │ ├── ReduxEventRemoteUpdate.kt │ │ │ ├── ReduxEventTextImport.kt │ │ │ ├── ReduxReceiverFaceTime.kt │ │ │ ├── ReduxReceiverNotification.kt │ │ │ └── ReduxReceiverShortcut.kt │ │ │ ├── service │ │ │ ├── ConnectionService.java │ │ │ ├── SystemMessageImportService.java │ │ │ ├── TextHeadlessService.java │ │ │ └── UriExportService.java │ │ │ ├── task │ │ │ ├── ContactsTask.java │ │ │ ├── ConversationActionTask.java │ │ │ ├── DraftActionTask.java │ │ │ ├── FileQueueTask.java │ │ │ ├── MessageActionTask.java │ │ │ └── RichPreviewTask.java │ │ │ ├── util │ │ │ ├── ActivityStatusUpdate.kt │ │ │ ├── AddressInfo.kt │ │ │ ├── AnimatingInsetsCallback.kt │ │ │ ├── AudioPlaybackManager.kt │ │ │ ├── CompoundErrorDetails.kt │ │ │ ├── ConnectionParams.kt │ │ │ ├── ContactInfo.kt │ │ │ ├── ConversationTarget.kt │ │ │ ├── ConversationValueUpdateResult.kt │ │ │ ├── CustomTabsLinkTransformationMethod.kt │ │ │ ├── CustomTabsURLSpan.kt │ │ │ ├── DirectConnectionDetails.kt │ │ │ ├── DisposableViewHolder.kt │ │ │ ├── IndexedItem.kt │ │ │ ├── LatLngInfo.kt │ │ │ ├── ModifierMetadata.kt │ │ │ ├── NotificationSummaryMessage.kt │ │ │ ├── ReplaceInsertResult.kt │ │ │ ├── RequestSubject.kt │ │ │ ├── ServerUpdateData.kt │ │ │ ├── TapbackDisplayData.kt │ │ │ ├── TaskManager.kt │ │ │ ├── TaskManagerLong.kt │ │ │ ├── TaskManagerLongBehavior.kt │ │ │ ├── TrackableRequest.kt │ │ │ ├── TransferredConversation.kt │ │ │ └── Union.kt │ │ │ ├── view │ │ │ ├── AppleEffectView.java │ │ │ ├── InvisibleInkView.java │ │ │ ├── MultiLineSwitchPreference.java │ │ │ ├── OverScrollScrollView.java │ │ │ ├── RoundedFrameLayout.java │ │ │ ├── RoundedImageView.java │ │ │ └── VisualizerView.java │ │ │ └── worker │ │ │ └── SystemMessageCleanupWorker.kt │ └── res │ │ ├── anim │ │ ├── activity_slide_up.xml │ │ ├── fade_in.xml │ │ ├── fade_in_delayed.xml │ │ ├── fade_in_light.xml │ │ ├── fade_out.xml │ │ ├── fade_out_light.xml │ │ ├── freeze.xml │ │ ├── messagedetails_slide_in_bottom.xml │ │ ├── messagedetails_slide_out_bottom.xml │ │ ├── messagestatus_slide_in_bottom.xml │ │ ├── messagestatus_slide_out_top.xml │ │ ├── windowslide_in.xml │ │ ├── windowslide_out.xml │ │ ├── windowslideback_in.xml │ │ └── windowslideback_out.xml │ │ ├── drawable-hdpi │ │ ├── onboarding_download_medium.png │ │ ├── onboarding_download_short.png │ │ ├── onboarding_download_tall.png │ │ └── promo_logo.png │ │ ├── drawable-mdpi │ │ ├── onboarding_download_medium.png │ │ ├── onboarding_download_short.png │ │ ├── onboarding_download_tall.png │ │ └── promo_logo.png │ │ ├── drawable-night-hdpi │ │ ├── onboarding_download_medium.png │ │ ├── onboarding_download_short.png │ │ └── onboarding_download_tall.png │ │ ├── drawable-night-mdpi │ │ ├── onboarding_download_medium.png │ │ ├── onboarding_download_short.png │ │ └── onboarding_download_tall.png │ │ ├── drawable-night-xhdpi │ │ ├── onboarding_download_medium.png │ │ ├── onboarding_download_short.png │ │ └── onboarding_download_tall.png │ │ ├── drawable-night-xxhdpi │ │ ├── onboarding_download_medium.png │ │ ├── onboarding_download_short.png │ │ └── onboarding_download_tall.png │ │ ├── drawable-night-xxxhdpi │ │ ├── onboarding_download_medium.png │ │ ├── onboarding_download_short.png │ │ └── onboarding_download_tall.png │ │ ├── drawable-v26 │ │ ├── app_icon_background.xml │ │ └── appshortcut_add.xml │ │ ├── drawable-xhdpi │ │ ├── onboarding_download_medium.png │ │ ├── onboarding_download_short.png │ │ ├── onboarding_download_tall.png │ │ └── promo_logo.png │ │ ├── drawable-xxhdpi │ │ ├── onboarding_download_medium.png │ │ ├── onboarding_download_short.png │ │ ├── onboarding_download_tall.png │ │ └── promo_logo.png │ │ ├── drawable-xxxhdpi │ │ ├── onboarding_download_medium.png │ │ ├── onboarding_download_short.png │ │ ├── onboarding_download_tall.png │ │ └── promo_logo.png │ │ ├── drawable │ │ ├── add.xml │ │ ├── add_circle.xml │ │ ├── add_rounded.xml │ │ ├── appear_bottomscrim.xml │ │ ├── appear_bottomshadow.xml │ │ ├── appear_topscrim.xml │ │ ├── appear_topshadow.xml │ │ ├── appshortcut_add.xml │ │ ├── appshortcut_add_foreground.xml │ │ ├── archive.xml │ │ ├── archive_outlined.xml │ │ ├── archive_outlined_actionmode.xml │ │ ├── arrow_back.xml │ │ ├── attach.xml │ │ ├── audiotile_progressbar_background.xml │ │ ├── audiotile_progressbar_circular.xml │ │ ├── background_amoledsamsung.xml │ │ ├── background_filler.xml │ │ ├── background_roundedcrashreport.xml │ │ ├── brush.xml │ │ ├── button_mediaplayer_pause.xml │ │ ├── button_mediaplayer_play.xml │ │ ├── call.xml │ │ ├── call_end.xml │ │ ├── camera.xml │ │ ├── camera_outlined.xml │ │ ├── cancel.xml │ │ ├── chat.xml │ │ ├── chat_rounded.xml │ │ ├── check.xml │ │ ├── check_circle.xml │ │ ├── check_circle_outline.xml │ │ ├── chevron_down.xml │ │ ├── chevron_down_rounded.xml │ │ ├── chevron_left.xml │ │ ├── chevron_right.xml │ │ ├── chip_tapback.xml │ │ ├── circle.xml │ │ ├── circle_borderdivider.xml │ │ ├── circle_clickabledark.xml │ │ ├── close.xml │ │ ├── close_circle.xml │ │ ├── close_control.xml │ │ ├── contacts.xml │ │ ├── copy.xml │ │ ├── create.xml │ │ ├── create_outlined.xml │ │ ├── delete.xml │ │ ├── delete_outlined.xml │ │ ├── delete_outlined_actionmode.xml │ │ ├── dialog_bottomsheet.xml │ │ ├── dialpad.xml │ │ ├── disconnection.xml │ │ ├── dislike.xml │ │ ├── dislike_rounded.xml │ │ ├── divider_replysuggestions.xml │ │ ├── download.xml │ │ ├── download_outlined.xml │ │ ├── download_rounded.xml │ │ ├── draft_close_circle.xml │ │ ├── drawable_handle.xml │ │ ├── email.xml │ │ ├── error.xml │ │ ├── ethernetcable.xml │ │ ├── excited.xml │ │ ├── excited_rounded.xml │ │ ├── exclamation.xml │ │ ├── exclamation_rounded.xml │ │ ├── facetime.xml │ │ ├── facetime_outline.xml │ │ ├── file.xml │ │ ├── file_document.xml │ │ ├── file_document_outlined.xml │ │ ├── file_msexcel.xml │ │ ├── file_mspowerpoint.xml │ │ ├── file_msword.xml │ │ ├── file_outlined.xml │ │ ├── file_pdf.xml │ │ ├── file_user.xml │ │ ├── file_xml.xml │ │ ├── file_zip.xml │ │ ├── gallery.xml │ │ ├── gallery_outlined.xml │ │ ├── gif.xml │ │ ├── help_outlined.xml │ │ ├── ic_airmessage_update.xml │ │ ├── ic_feature_airmessage.xml │ │ ├── ic_feature_airmessage_square.xml │ │ ├── ic_feature_macmini.xml │ │ ├── ic_feature_macmini_square.xml │ │ ├── ic_google.xml │ │ ├── info.xml │ │ ├── info_outlined.xml │ │ ├── keyboard.xml │ │ ├── keyboard_outlined.xml │ │ ├── keyboard_rounded.xml │ │ ├── like.xml │ │ ├── like_rounded.xml │ │ ├── link.xml │ │ ├── location.xml │ │ ├── location_outline.xml │ │ ├── location_round.xml │ │ ├── lock_alert.xml │ │ ├── lock_outlined.xml │ │ ├── love.xml │ │ ├── love_rounded.xml │ │ ├── mapindicator.xml │ │ ├── message.xml │ │ ├── message_alert.xml │ │ ├── message_bridge.xml │ │ ├── message_download.xml │ │ ├── message_google.xml │ │ ├── message_plus.xml │ │ ├── message_push.xml │ │ ├── message_push_group.xml │ │ ├── message_sms.xml │ │ ├── microphone.xml │ │ ├── microphone_outlined.xml │ │ ├── movie.xml │ │ ├── movie_outlined.xml │ │ ├── next.xml │ │ ├── notifications_off.xml │ │ ├── notifications_off_outlined.xml │ │ ├── notifications_off_outlined_actionmode.xml │ │ ├── notifications_on.xml │ │ ├── notifications_on_outlined.xml │ │ ├── notifications_on_outlined_actionmode.xml │ │ ├── notifications_outlined.xml │ │ ├── open.xml │ │ ├── open_rounded.xml │ │ ├── overflow.xml │ │ ├── palette.xml │ │ ├── palette_outlined.xml │ │ ├── pause.xml │ │ ├── pause_outlined.xml │ │ ├── pause_rounded.xml │ │ ├── person_add_round.xml │ │ ├── pin.xml │ │ ├── play.xml │ │ ├── play_circle.xml │ │ ├── play_circle_rounded.xml │ │ ├── play_outlined.xml │ │ ├── play_rounded.xml │ │ ├── progressbar_rounded.xml │ │ ├── push.xml │ │ ├── push_rounded.xml │ │ ├── question.xml │ │ ├── question_rounded.xml │ │ ├── rectangle_chatpreview.xml │ │ ├── rectangle_chatpreviewfull.xml │ │ ├── rectangle_messagebubble.xml │ │ ├── refresh.xml │ │ ├── replay.xml │ │ ├── reply.xml │ │ ├── restart.xml │ │ ├── ring.xml │ │ ├── rounded_button_highlight.xml │ │ ├── rounded_button_highlight_ripple.xml │ │ ├── rounded_circle.xml │ │ ├── rounded_contentpane.xml │ │ ├── rounded_contenttile.xml │ │ ├── rounded_inputbar.xml │ │ ├── rounded_rectangle.xml │ │ ├── rounded_rectangle_highlight.xml │ │ ├── rounded_rectangle_highlight_ripple.xml │ │ ├── rounded_rectangle_ripple.xml │ │ ├── rounded_rectangle_top.xml │ │ ├── rounded_selectable_contenttile.xml │ │ ├── rounded_selectable_contenttile_bottom.xml │ │ ├── rounded_selectable_contenttile_top.xml │ │ ├── rounded_selectable_inputbar.xml │ │ ├── rounded_sheet.xml │ │ ├── save.xml │ │ ├── search.xml │ │ ├── selectable_rounded.xml │ │ ├── send.xml │ │ ├── share_outlined.xml │ │ ├── stroke_color.xml │ │ ├── sync.xml │ │ ├── sync_problem.xml │ │ ├── text_fields.xml │ │ ├── unarchive.xml │ │ ├── unarchive_outlined.xml │ │ ├── unarchive_outlined_actionmode.xml │ │ ├── undo.xml │ │ ├── update.xml │ │ ├── upload.xml │ │ ├── upload_rounded.xml │ │ ├── user.xml │ │ ├── user_divider.xml │ │ ├── videocam_outlined.xml │ │ ├── volume.xml │ │ ├── volume_outlined.xml │ │ ├── warning.xml │ │ ├── web.xml │ │ ├── wifi.xml │ │ └── wifi_off.xml │ │ ├── layout-land │ │ └── fragment_serversync.xml │ │ ├── layout-large │ │ └── activity_onboarding.xml │ │ ├── layout │ │ ├── activity_blockedaddresses.xml │ │ ├── activity_blockedaddresses_listitem.xml │ │ ├── activity_callhistory.xml │ │ ├── activity_conversations.xml │ │ ├── activity_crashreport.xml │ │ ├── activity_facetimecall.xml │ │ ├── activity_imagedraw.xml │ │ ├── activity_licenses.xml │ │ ├── activity_locationpicker.xml │ │ ├── activity_mediaviewer.xml │ │ ├── activity_messaging.xml │ │ ├── activity_newfacetime.xml │ │ ├── activity_newmessage.xml │ │ ├── activity_onboarding.xml │ │ ├── activity_preferences.xml │ │ ├── activity_serverupdate.xml │ │ ├── activity_share.xml │ │ ├── appbar_search.xml │ │ ├── chip_tapback.xml │ │ ├── chip_user.xml │ │ ├── dialog_advancedsync.xml │ │ ├── dialog_colorpicker.xml │ │ ├── dialog_colorpicker_item.xml │ │ ├── dialog_connectauth.xml │ │ ├── dialog_connectpassword.xml │ │ ├── dialog_renamechat.xml │ │ ├── dialog_simplelist.xml │ │ ├── dialog_simplescroll.xml │ │ ├── ext_mediaviewer_exoplayer.xml │ │ ├── fragment_attachments.xml │ │ ├── fragment_callactive.xml │ │ ├── fragment_callpending.xml │ │ ├── fragment_messagingdetails.xml │ │ ├── fragment_onboarding_connect.xml │ │ ├── fragment_onboarding_manual.xml │ │ ├── fragment_onboarding_welcome.xml │ │ ├── fragment_serversync.xml │ │ ├── layout_advancedsync_filefilter.xml │ │ ├── layout_conversationdetailsrename.xml │ │ ├── layout_conversationicon.xml │ │ ├── layout_infobar.xml │ │ ├── layout_messagepreview_linklarge.xml │ │ ├── layout_stickercontainer.xml │ │ ├── layout_tapbackcontainer.xml │ │ ├── listitem_action.xml │ │ ├── listitem_attachment_actiontile.xml │ │ ├── listitem_attachment_actiontile_double.xml │ │ ├── listitem_attachment_audiotile.xml │ │ ├── listitem_attachment_contacttile.xml │ │ ├── listitem_attachment_documenttile.xml │ │ ├── listitem_attachment_linktile.xml │ │ ├── listitem_attachment_locationtile.xml │ │ ├── listitem_attachment_mediatile.xml │ │ ├── listitem_attachment_overflow.xml │ │ ├── listitem_attachment_queuetile.xml │ │ ├── listitem_attachment_tileselection.xml │ │ ├── listitem_contact.xml │ │ ├── listitem_contact_sendheader.xml │ │ ├── listitem_contentaudio.xml │ │ ├── listitem_contentcontact.xml │ │ ├── listitem_contentlocation.xml │ │ ├── listitem_contentstructure.xml │ │ ├── listitem_contenttext.xml │ │ ├── listitem_contentvisual.xml │ │ ├── listitem_conversation.xml │ │ ├── listitem_conversation_icon1.xml │ │ ├── listitem_conversation_icon2.xml │ │ ├── listitem_conversation_icon3.xml │ │ ├── listitem_conversation_icon4.xml │ │ ├── listitem_conversation_simple.xml │ │ ├── listitem_loading.xml │ │ ├── listitem_mediaviewer_image.xml │ │ ├── listitem_mediaviewer_video.xml │ │ ├── listitem_member.xml │ │ ├── listitem_message.xml │ │ ├── listitem_replysuggestions.xml │ │ ├── listitem_replysuggestions_item.xml │ │ ├── listitem_servicechip.xml │ │ ├── listitem_serviceselection.xml │ │ ├── listitem_subheader.xml │ │ ├── listitem_tapbackinfo_header.xml │ │ ├── listitem_tapbackinfo_user.xml │ │ ├── popup_userchip.xml │ │ └── reference_user.xml │ │ ├── menu │ │ ├── menu_blockedaddresses.xml │ │ ├── menu_conversation_actionmode.xml │ │ ├── menu_conversationitem_contextual.xml │ │ ├── menu_conversations.xml │ │ ├── menu_help.xml │ │ ├── menu_mediaviewer.xml │ │ ├── menu_messaging.xml │ │ └── menu_messaginginfo.xml │ │ ├── mipmap-anydpi-v26 │ │ └── app_icon.xml │ │ ├── mipmap-hdpi │ │ ├── app_icon.png │ │ └── app_icon_foreground.png │ │ ├── mipmap-mdpi │ │ ├── app_icon.png │ │ └── app_icon_foreground.png │ │ ├── mipmap-xhdpi │ │ ├── app_icon.png │ │ └── app_icon_foreground.png │ │ ├── mipmap-xxhdpi │ │ ├── app_icon.png │ │ └── app_icon_foreground.png │ │ ├── mipmap-xxxhdpi │ │ ├── app_icon.png │ │ └── app_icon_foreground.png │ │ ├── raw │ │ ├── facetime_inject_css.css │ │ ├── facetime_inject_javascript.js │ │ ├── license_bouncycastle.txt │ │ ├── license_freebsd.txt │ │ ├── map_dark.json │ │ ├── map_light.json │ │ ├── map_plaindark.json │ │ ├── map_plainlight.json │ │ ├── message_error.wav │ │ ├── message_in.wav │ │ ├── message_out.wav │ │ ├── message_received.wav │ │ ├── message_sent.wav │ │ ├── notification_ding.wav │ │ ├── recording_end.wav │ │ └── recording_start.wav │ │ ├── values-fr │ │ └── strings.xml │ │ ├── values-ja │ │ └── strings.xml │ │ ├── values-ldrtl │ │ └── vars.xml │ │ ├── values-night │ │ ├── colors.xml │ │ ├── styles.xml │ │ └── vars.xml │ │ ├── values-v27 │ │ └── styles.xml │ │ ├── values-v29 │ │ └── styles.xml │ │ ├── values │ │ ├── attrs.xml │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── library_definitions.xml │ │ ├── license_definitions.xml │ │ ├── preference_names.xml │ │ ├── strings.xml │ │ ├── styles.xml │ │ ├── tags.xml │ │ └── vars.xml │ │ ├── xml-v25 │ │ └── shortcuts.xml │ │ ├── xml-v26 │ │ └── preferences_notification.xml │ │ └── xml │ │ ├── automotive_app_desc.xml │ │ ├── backup_rules.xml │ │ ├── preferences_account.xml │ │ ├── preferences_footer.xml │ │ ├── preferences_main.xml │ │ ├── preferences_notification.xml │ │ ├── preferences_server.xml │ │ └── provider_paths.xml │ └── test │ └── java │ └── me │ └── tagavari │ └── airmessage │ ├── AddressTest.java │ ├── CalendarTest.java │ ├── CollectionTest.java │ ├── ProcessingTest.java │ └── StringTest.java ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── lib └── android-smsmms │ ├── .gitignore │ ├── README.md │ ├── android-messaging.png │ ├── build.gradle │ ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ ├── library │ ├── build.gradle │ ├── gradle.properties │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ ├── android │ │ │ ├── annotation │ │ │ │ └── SdkConstant.java │ │ │ ├── database │ │ │ │ └── sqlite │ │ │ │ │ └── SqliteWrapper.java │ │ │ ├── net │ │ │ │ ├── DhcpInfoInternal.java │ │ │ │ ├── IConnectivityManager.java │ │ │ │ ├── INetworkPolicyListener.java │ │ │ │ ├── INetworkPolicyManager.java │ │ │ │ ├── LinkAddress.java │ │ │ │ ├── LinkCapabilities.java │ │ │ │ ├── LinkProperties.java │ │ │ │ ├── NetworkIdentity.java │ │ │ │ ├── NetworkPolicy.java │ │ │ │ ├── NetworkPolicyManager.java │ │ │ │ ├── NetworkQuotaInfo.java │ │ │ │ ├── NetworkState.java │ │ │ │ ├── NetworkTemplate.java │ │ │ │ ├── NetworkUtilsHelper.java │ │ │ │ ├── ProxyProperties.java │ │ │ │ └── RouteInfo.java │ │ │ └── provider │ │ │ │ └── Downloads.java │ │ ├── com │ │ │ ├── android │ │ │ │ ├── i18n │ │ │ │ │ └── phonenumbers │ │ │ │ │ │ ├── NumberParseException.java │ │ │ │ │ │ ├── PhoneNumberUtil.java │ │ │ │ │ │ └── Phonenumber.java │ │ │ │ ├── internal │ │ │ │ │ ├── annotations │ │ │ │ │ │ └── VisibleForTesting.java │ │ │ │ │ ├── net │ │ │ │ │ │ ├── LegacyVpnInfo.java │ │ │ │ │ │ ├── VpnConfig.java │ │ │ │ │ │ └── VpnProfile.java │ │ │ │ │ ├── telephony │ │ │ │ │ │ ├── EncodeException.java │ │ │ │ │ │ ├── GsmAlphabet.java │ │ │ │ │ │ ├── IccUtils.java │ │ │ │ │ │ ├── SmsConstants.java │ │ │ │ │ │ └── TelephonyProperties.java │ │ │ │ │ └── util │ │ │ │ │ │ ├── ArrayUtils.java │ │ │ │ │ │ ├── Objects.java │ │ │ │ │ │ └── Preconditions.java │ │ │ │ └── mms │ │ │ │ │ ├── MmsConfig.java │ │ │ │ │ ├── dom │ │ │ │ │ ├── AttrImpl.java │ │ │ │ │ ├── DocumentImpl.java │ │ │ │ │ ├── ElementImpl.java │ │ │ │ │ ├── NamedNodeMapImpl.java │ │ │ │ │ ├── NodeImpl.java │ │ │ │ │ ├── NodeListImpl.java │ │ │ │ │ ├── events │ │ │ │ │ │ ├── EventImpl.java │ │ │ │ │ │ └── EventTargetImpl.java │ │ │ │ │ └── smil │ │ │ │ │ │ ├── ElementParallelTimeContainerImpl.java │ │ │ │ │ │ ├── ElementSequentialTimeContainerImpl.java │ │ │ │ │ │ ├── ElementTimeContainerImpl.java │ │ │ │ │ │ ├── ElementTimeImpl.java │ │ │ │ │ │ ├── SmilDocumentImpl.java │ │ │ │ │ │ ├── SmilElementImpl.java │ │ │ │ │ │ ├── SmilLayoutElementImpl.java │ │ │ │ │ │ ├── SmilMediaElementImpl.java │ │ │ │ │ │ ├── SmilParElementImpl.java │ │ │ │ │ │ ├── SmilPlayer.java │ │ │ │ │ │ ├── SmilRefElementImpl.java │ │ │ │ │ │ ├── SmilRegionElementImpl.java │ │ │ │ │ │ ├── SmilRegionMediaElementImpl.java │ │ │ │ │ │ ├── SmilRootLayoutElementImpl.java │ │ │ │ │ │ ├── TimeImpl.java │ │ │ │ │ │ ├── TimeListImpl.java │ │ │ │ │ │ └── parser │ │ │ │ │ │ ├── SmilContentHandler.java │ │ │ │ │ │ ├── SmilXmlParser.java │ │ │ │ │ │ └── SmilXmlSerializer.java │ │ │ │ │ ├── layout │ │ │ │ │ ├── HVGALayoutParameters.java │ │ │ │ │ ├── LayoutManager.java │ │ │ │ │ └── LayoutParameters.java │ │ │ │ │ ├── logs │ │ │ │ │ └── LogTag.java │ │ │ │ │ ├── service_alt │ │ │ │ │ ├── ApnSettings.java │ │ │ │ │ ├── DownloadRequest.java │ │ │ │ │ ├── MmsConfig.java │ │ │ │ │ ├── MmsConfigManager.java │ │ │ │ │ ├── MmsConfigXmlProcessor.java │ │ │ │ │ ├── MmsHttpClient.java │ │ │ │ │ ├── MmsNetworkManager.java │ │ │ │ │ ├── MmsRequest.java │ │ │ │ │ ├── MmsRequestManager.java │ │ │ │ │ ├── PhoneUtils.java │ │ │ │ │ ├── SendRequest.java │ │ │ │ │ ├── SubscriptionIdChecker.java │ │ │ │ │ ├── SystemPropertiesProxy.java │ │ │ │ │ └── exception │ │ │ │ │ │ ├── ApnException.java │ │ │ │ │ │ ├── MmsHttpException.java │ │ │ │ │ │ └── MmsNetworkException.java │ │ │ │ │ ├── transaction │ │ │ │ │ ├── AbstractRetryScheme.java │ │ │ │ │ ├── DefaultRetryScheme.java │ │ │ │ │ ├── DownloadManager.java │ │ │ │ │ ├── HttpUtils.java │ │ │ │ │ ├── MessageSender.java │ │ │ │ │ ├── MessageStatusReceiver.java │ │ │ │ │ ├── MessageStatusService.java │ │ │ │ │ ├── MmsMessageSender.java │ │ │ │ │ ├── MmsPushOutboxMessages.java │ │ │ │ │ ├── MmsSystemEventReceiver.java │ │ │ │ │ ├── NotificationTransaction.java │ │ │ │ │ ├── Observable.java │ │ │ │ │ ├── Observer.java │ │ │ │ │ ├── ProgressCallbackEntity.java │ │ │ │ │ ├── PushReceiver.java │ │ │ │ │ ├── ReadRecTransaction.java │ │ │ │ │ ├── RetrieveTransaction.java │ │ │ │ │ ├── RetryScheduler.java │ │ │ │ │ ├── SendTransaction.java │ │ │ │ │ ├── Transaction.java │ │ │ │ │ ├── TransactionBundle.java │ │ │ │ │ ├── TransactionService.java │ │ │ │ │ ├── TransactionSettings.java │ │ │ │ │ └── TransactionState.java │ │ │ │ │ └── util │ │ │ │ │ ├── DownloadManager.java │ │ │ │ │ ├── ExternalLogger.java │ │ │ │ │ ├── RateController.java │ │ │ │ │ └── SendingProgressTokenManager.java │ │ │ ├── google │ │ │ │ └── android │ │ │ │ │ ├── collect │ │ │ │ │ └── Sets.java │ │ │ │ │ └── mms │ │ │ │ │ ├── APN.java │ │ │ │ │ ├── APNHelper.java │ │ │ │ │ ├── ContentType.java │ │ │ │ │ ├── InvalidHeaderValueException.java │ │ │ │ │ ├── MMSPart.java │ │ │ │ │ ├── MmsException.java │ │ │ │ │ ├── pdu_alt │ │ │ │ │ ├── AcknowledgeInd.java │ │ │ │ │ ├── Base64.java │ │ │ │ │ ├── CharacterSets.java │ │ │ │ │ ├── DeliveryInd.java │ │ │ │ │ ├── EncodedStringValue.java │ │ │ │ │ ├── GenericPdu.java │ │ │ │ │ ├── MultimediaMessagePdu.java │ │ │ │ │ ├── NotificationInd.java │ │ │ │ │ ├── NotifyRespInd.java │ │ │ │ │ ├── PduBody.java │ │ │ │ │ ├── PduComposer.java │ │ │ │ │ ├── PduContentTypes.java │ │ │ │ │ ├── PduHeaders.java │ │ │ │ │ ├── PduParser.java │ │ │ │ │ ├── PduPart.java │ │ │ │ │ ├── PduPersister.java │ │ │ │ │ ├── QuotedPrintable.java │ │ │ │ │ ├── ReadOrigInd.java │ │ │ │ │ ├── ReadRecInd.java │ │ │ │ │ ├── RetrieveConf.java │ │ │ │ │ ├── SendConf.java │ │ │ │ │ └── SendReq.java │ │ │ │ │ ├── smil │ │ │ │ │ └── SmilHelper.java │ │ │ │ │ └── util_alt │ │ │ │ │ ├── AbstractCache.java │ │ │ │ │ ├── DownloadDrmHelper.java │ │ │ │ │ ├── DrmConvertSession.java │ │ │ │ │ ├── PduCache.java │ │ │ │ │ ├── PduCacheEntry.java │ │ │ │ │ └── SqliteWrapper.java │ │ │ └── klinker │ │ │ │ └── android │ │ │ │ └── send_message │ │ │ │ ├── ApnUtils.java │ │ │ │ ├── BroadcastUtils.java │ │ │ │ ├── DeliveredReceiver.java │ │ │ │ ├── Message.java │ │ │ │ ├── MmsFileProvider.java │ │ │ │ ├── MmsReceivedReceiver.java │ │ │ │ ├── MmsReceivedService.java │ │ │ │ ├── MmsSentReceiver.java │ │ │ │ ├── SentReceiver.java │ │ │ │ ├── Settings.java │ │ │ │ ├── SmsManagerFactory.java │ │ │ │ ├── StatusUpdatedReceiver.java │ │ │ │ ├── StripAccents.java │ │ │ │ ├── Transaction.java │ │ │ │ └── Utils.java │ │ └── org │ │ │ └── w3c │ │ │ └── dom │ │ │ ├── events │ │ │ ├── DocumentEvent.java │ │ │ ├── Event.java │ │ │ ├── EventException.java │ │ │ ├── EventListener.java │ │ │ └── EventTarget.java │ │ │ ├── smil │ │ │ ├── ElementExclusiveTimeContainer.java │ │ │ ├── ElementLayout.java │ │ │ ├── ElementParallelTimeContainer.java │ │ │ ├── ElementSequentialTimeContainer.java │ │ │ ├── ElementSyncBehavior.java │ │ │ ├── ElementTargetAttributes.java │ │ │ ├── ElementTest.java │ │ │ ├── ElementTime.java │ │ │ ├── ElementTimeContainer.java │ │ │ ├── ElementTimeControl.java │ │ │ ├── ElementTimeManipulation.java │ │ │ ├── SMILAnimateColorElement.java │ │ │ ├── SMILAnimateElement.java │ │ │ ├── SMILAnimateMotionElement.java │ │ │ ├── SMILAnimation.java │ │ │ ├── SMILDocument.java │ │ │ ├── SMILElement.java │ │ │ ├── SMILLayoutElement.java │ │ │ ├── SMILMediaElement.java │ │ │ ├── SMILParElement.java │ │ │ ├── SMILRefElement.java │ │ │ ├── SMILRegionElement.java │ │ │ ├── SMILRegionInterface.java │ │ │ ├── SMILRegionMediaElement.java │ │ │ ├── SMILRootLayoutElement.java │ │ │ ├── SMILSetElement.java │ │ │ ├── SMILSwitchElement.java │ │ │ ├── SMILTopLayoutElement.java │ │ │ ├── Time.java │ │ │ ├── TimeEvent.java │ │ │ └── TimeList.java │ │ │ └── views │ │ │ ├── AbstractView.java │ │ │ └── DocumentView.java │ │ └── res │ │ ├── drawable-hdpi │ │ └── ic_alert.png │ │ ├── drawable-mdpi │ │ └── ic_alert.png │ │ ├── drawable-xhdpi │ │ └── ic_alert.png │ │ ├── values │ │ └── strings.xml │ │ ├── xml-mcc204-mnc04 │ │ └── mms_config.xml │ │ ├── xml-mcc208-mnc01 │ │ └── mms_config.xml │ │ ├── xml-mcc208-mnc10 │ │ └── mms_config.xml │ │ ├── xml-mcc208-mnc15 │ │ └── mms_config.xml │ │ ├── xml-mcc208-mnc20 │ │ └── mms_config.xml │ │ ├── xml-mcc208-mnc26 │ │ └── mms_config.xml │ │ ├── xml-mcc214-mnc01 │ │ └── mms_config.xml │ │ ├── xml-mcc214-mnc03 │ │ └── mms_config.xml │ │ ├── xml-mcc214-mnc07 │ │ └── mms_config.xml │ │ ├── xml-mcc218-mnc05 │ │ └── mms_config.xml │ │ ├── xml-mcc222-mnc01 │ │ └── mms_config.xml │ │ ├── xml-mcc222-mnc08 │ │ └── mms_config.xml │ │ ├── xml-mcc234-mnc10 │ │ └── mms_config.xml │ │ ├── xml-mcc234-mnc11 │ │ └── mms_config.xml │ │ ├── xml-mcc234-mnc15 │ │ └── mms_config.xml │ │ ├── xml-mcc238-mnc02 │ │ └── mms_config.xml │ │ ├── xml-mcc240-mnc01 │ │ └── mms_config.xml │ │ ├── xml-mcc240-mnc04 │ │ └── mms_config.xml │ │ ├── xml-mcc240-mnc08 │ │ └── mms_config.xml │ │ ├── xml-mcc240-mnc24 │ │ └── mms_config.xml │ │ ├── xml-mcc242-mnc01 │ │ └── mms_config.xml │ │ ├── xml-mcc242-mnc02 │ │ └── mms_config.xml │ │ ├── xml-mcc262-mnc07 │ │ └── mms_config.xml │ │ ├── xml-mcc274-mnc02 │ │ └── mms_config.xml │ │ ├── xml-mcc274-mnc03 │ │ └── mms_config.xml │ │ ├── xml-mcc286-mnc01 │ │ └── mms_config.xml │ │ ├── xml-mcc286-mnc03 │ │ └── mms_config.xml │ │ ├── xml-mcc294-mnc01 │ │ └── mms_config.xml │ │ ├── xml-mcc294-mnc02 │ │ └── mms_config.xml │ │ ├── xml-mcc294-mnc03 │ │ └── mms_config.xml │ │ ├── xml-mcc302-mnc220 │ │ └── mms_config.xml │ │ ├── xml-mcc302-mnc221 │ │ └── mms_config.xml │ │ ├── xml-mcc302-mnc270 │ │ └── mms_config.xml │ │ ├── xml-mcc302-mnc290 │ │ └── mms_config.xml │ │ ├── xml-mcc302-mnc320 │ │ └── mms_config.xml │ │ ├── xml-mcc302-mnc370 │ │ └── mms_config.xml │ │ ├── xml-mcc302-mnc490 │ │ └── mms_config.xml │ │ ├── xml-mcc302-mnc500 │ │ └── mms_config.xml │ │ ├── xml-mcc302-mnc510 │ │ └── mms_config.xml │ │ ├── xml-mcc302-mnc520 │ │ └── mms_config.xml │ │ ├── xml-mcc302-mnc610 │ │ └── mms_config.xml │ │ ├── xml-mcc302-mnc660 │ │ └── mms_config.xml │ │ ├── xml-mcc302-mnc720 │ │ └── mms_config.xml │ │ ├── xml-mcc302-mnc780 │ │ └── mms_config.xml │ │ ├── xml-mcc310-mnc004 │ │ └── mms_config.xml │ │ ├── xml-mcc310-mnc005 │ │ └── mms_config.xml │ │ ├── xml-mcc310-mnc010 │ │ └── mms_config.xml │ │ ├── xml-mcc310-mnc026 │ │ └── mms_config.xml │ │ ├── xml-mcc310-mnc040 │ │ └── mms_config.xml │ │ ├── xml-mcc310-mnc070 │ │ └── mms_config.xml │ │ ├── xml-mcc310-mnc090 │ │ └── mms_config.xml │ │ ├── xml-mcc310-mnc120 │ │ └── mms_config.xml │ │ ├── xml-mcc310-mnc130 │ │ └── mms_config.xml │ │ ├── xml-mcc310-mnc150 │ │ └── mms_config.xml │ │ ├── xml-mcc310-mnc170 │ │ └── mms_config.xml │ │ ├── xml-mcc310-mnc260 │ │ └── mms_config.xml │ │ ├── xml-mcc310-mnc360 │ │ └── mms_config.xml │ │ ├── xml-mcc310-mnc380 │ │ └── mms_config.xml │ │ ├── xml-mcc310-mnc410 │ │ └── mms_config.xml │ │ ├── xml-mcc310-mnc420 │ │ └── mms_config.xml │ │ ├── xml-mcc310-mnc450 │ │ └── mms_config.xml │ │ ├── xml-mcc310-mnc490 │ │ └── mms_config.xml │ │ ├── xml-mcc310-mnc560 │ │ └── mms_config.xml │ │ ├── xml-mcc310-mnc580 │ │ └── mms_config.xml │ │ ├── xml-mcc310-mnc600 │ │ └── mms_config.xml │ │ ├── xml-mcc310-mnc680 │ │ └── mms_config.xml │ │ ├── xml-mcc310-mnc750 │ │ └── mms_config.xml │ │ ├── xml-mcc310-mnc770 │ │ └── mms_config.xml │ │ ├── xml-mcc310-mnc920 │ │ └── mms_config.xml │ │ ├── xml-mcc310-mnc980 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc012 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc070 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc100 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc180 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc220 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc221 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc222 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc223 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc224 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc225 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc226 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc227 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc228 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc229 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc230 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc340 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc370 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc410 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc430 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc440 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc480 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc490 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc580 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc581 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc582 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc583 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc584 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc585 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc586 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc587 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc588 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc589 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc590 │ │ └── mms_config.xml │ │ ├── xml-mcc311-mnc870 │ │ └── mms_config.xml │ │ ├── xml-mcc312-mnc160 │ │ └── mms_config.xml │ │ ├── xml-mcc312-mnc530 │ │ └── mms_config.xml │ │ ├── xml-mcc334-mnc020 │ │ └── mms_config.xml │ │ ├── xml-mcc418-mnc05 │ │ └── mms_config.xml │ │ ├── xml-mcc418-mnc20 │ │ └── mms_config.xml │ │ ├── xml-mcc418-mnc30 │ │ └── mms_config.xml │ │ ├── xml-mcc420-mnc04 │ │ └── mms_config.xml │ │ ├── xml-mcc440-mnc10 │ │ └── mms_config.xml │ │ ├── xml-mcc440-mnc20 │ │ └── mms_config.xml │ │ ├── xml-mcc450-mnc00 │ │ └── mms_config.xml │ │ ├── xml-mcc450-mnc02 │ │ └── mms_config.xml │ │ ├── xml-mcc450-mnc05 │ │ └── mms_config.xml │ │ ├── xml-mcc450-mnc06 │ │ └── mms_config.xml │ │ ├── xml-mcc450-mnc08 │ │ └── mms_config.xml │ │ ├── xml-mcc505-mnc01 │ │ └── mms_config.xml │ │ ├── xml-mcc530-mnc05 │ │ └── mms_config.xml │ │ ├── xml-mcc604-mnc00 │ │ └── mms_config.xml │ │ ├── xml-mcc604-mnc02 │ │ └── mms_config.xml │ │ ├── xml-mcc647-mnc10 │ │ └── mms_config.xml │ │ └── xml │ │ ├── apns.xml │ │ └── mms_config.xml │ └── settings.gradle ├── metadata └── android │ ├── en-US │ ├── changelogs │ │ ├── 137.txt │ │ └── 138.txt │ ├── full_description.txt │ ├── images │ │ ├── featureGraphic.jpg │ │ ├── icon.png │ │ └── phoneScreenshots │ │ │ ├── 1.jpg │ │ │ ├── 2.jpg │ │ │ ├── 3.jpg │ │ │ └── 4.jpg │ ├── short_description.txt │ └── title.txt │ ├── fr-FR │ ├── full_description.txt │ ├── short_description.txt │ └── title.txt │ └── ja-JP │ ├── full_description.txt │ ├── short_description.txt │ └── title.txt ├── secrets.default.properties ├── settings.gradle └── signingshared └── shared.keystore.disabled /.gitattributes: -------------------------------------------------------------------------------- 1 | lib/** linguist-vendored -------------------------------------------------------------------------------- /README/hero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/README/hero.png -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | # Built application files 2 | /build 3 | /release 4 | /foss/release 5 | /full/release 6 | -------------------------------------------------------------------------------- /app/src/debug/res/drawable-v26/app_icon_background.xml: -------------------------------------------------------------------------------- 1 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/foss/java/me/tagavari/airmessage/connection/comm5/ProxyConnect.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.connection.comm5 2 | 3 | import android.content.Context 4 | import me.tagavari.airmessage.connection.DataProxy 5 | import me.tagavari.airmessage.util.ConnectionParams 6 | 7 | class ProxyConnect: DataProxy() { 8 | override fun start(context: Context, override: ConnectionParams?) = Unit 9 | 10 | override fun stop(code: Int) = Unit 11 | 12 | override fun send(packet: EncryptedPacket) = false 13 | 14 | override fun isUsingFallback() = false 15 | 16 | fun sendTokenAdd(token: String) = Unit 17 | } -------------------------------------------------------------------------------- /app/src/foss/java/me/tagavari/airmessage/flavor/CrashlyticsBridge.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.flavor 2 | 3 | import android.content.Context 4 | 5 | object CrashlyticsBridge { 6 | @JvmStatic 7 | fun configure(context: Context) = Unit 8 | 9 | @JvmStatic 10 | fun recordException(throwable: Throwable) = Unit 11 | 12 | @JvmStatic 13 | fun log(message: String) = Unit 14 | } -------------------------------------------------------------------------------- /app/src/foss/java/me/tagavari/airmessage/flavor/FirebaseAuthBridge.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.flavor 2 | 3 | object FirebaseAuthBridge { 4 | @JvmStatic 5 | val isSupported = false 6 | 7 | @JvmStatic 8 | fun getUserSummary(): String? = null 9 | } -------------------------------------------------------------------------------- /app/src/foss/java/me/tagavari/airmessage/flavor/FragmentMessagingAttachmentsMaps.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.flavor 2 | 3 | import android.view.View 4 | import me.tagavari.airmessage.fragment.FragmentMessagingAttachments 5 | 6 | class FragmentMessagingAttachmentsMaps(val fragment: FragmentMessagingAttachments) { 7 | fun initViews(view: View) = Unit 8 | } -------------------------------------------------------------------------------- /app/src/foss/java/me/tagavari/airmessage/flavor/FragmentMessagingAttachmentsViewModelMaps.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.flavor 2 | 3 | import me.tagavari.airmessage.fragment.FragmentMessagingAttachments 4 | 5 | class FragmentMessagingAttachmentsViewModelMaps(private val viewModel: FragmentMessagingAttachments.FragmentViewModel) { 6 | fun loadLocation() = Unit 7 | } -------------------------------------------------------------------------------- /app/src/foss/java/me/tagavari/airmessage/flavor/MLKitBridge.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.flavor 2 | 3 | import io.reactivex.rxjava3.annotations.CheckReturnValue 4 | import io.reactivex.rxjava3.core.Single 5 | import me.tagavari.airmessage.messaging.MessageInfo 6 | 7 | object MLKitBridge { 8 | val isSupported = false 9 | 10 | @CheckReturnValue 11 | @JvmStatic 12 | fun generate(messages: List): Single> = Single.just(listOf()) 13 | 14 | @CheckReturnValue 15 | @JvmStatic 16 | fun generateFromDatabase(conversationID: Long): Single> = Single.just(listOf()) 17 | } -------------------------------------------------------------------------------- /app/src/foss/java/me/tagavari/airmessage/flavor/MapsBridge.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.flavor 2 | 3 | import android.content.Context 4 | 5 | object MapsBridge { 6 | @JvmStatic 7 | fun initialize(context: Context) = Unit 8 | } -------------------------------------------------------------------------------- /app/src/foss/java/me/tagavari/airmessage/flavor/PlaySecurityBridge.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.flavor 2 | 3 | import android.app.Activity 4 | import android.content.Context 5 | import java.util.function.Consumer 6 | 7 | object PlaySecurityBridge { 8 | val isSupported = false 9 | 10 | @JvmStatic 11 | fun showDialog(activity: Activity, errorCode: Int, resultCode: Int) = Unit 12 | 13 | @JvmStatic 14 | fun update(context: Context, onError: Consumer) = Unit 15 | } -------------------------------------------------------------------------------- /app/src/foss/java/me/tagavari/airmessage/flavor/VHMessageComponentLocationMap.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.flavor 2 | 3 | import android.content.Context 4 | import android.view.View 5 | import io.reactivex.rxjava3.core.Completable 6 | import me.tagavari.airmessage.messaging.viewholder.VHMessageComponentLocation 7 | import me.tagavari.airmessage.util.LatLngInfo 8 | 9 | class VHMessageComponentLocationMap(private val component: VHMessageComponentLocation) { 10 | val mapLoadCompletable: Completable = Completable.complete() 11 | fun setMapLocation(context: Context, location: LatLngInfo?) { 12 | //Just hide the map view 13 | component.mapContainer.visibility = View.GONE 14 | } 15 | } -------------------------------------------------------------------------------- /app/src/foss/java/me/tagavari/airmessage/flavor/WelcomeGoogleSignIn.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.flavor 2 | 3 | import me.tagavari.airmessage.fragment.FragmentOnboardingWelcome 4 | 5 | class WelcomeGoogleSignIn constructor(private val fragment: FragmentOnboardingWelcome) { 6 | val isSupported = false 7 | fun launch() = Unit 8 | } -------------------------------------------------------------------------------- /app/src/foss/res/layout/fragment_attachments_location.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/foss/res/layout/listitem_contentlocation_map.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/foss/res/values-fr/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Entrez les détails de votre serveur pour recevoir vos messages sur cet appareil. 4 | -------------------------------------------------------------------------------- /app/src/foss/res/values-ja/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | サーバーの詳細を入力して、このデバイスでメッセージを受け取る。 4 | -------------------------------------------------------------------------------- /app/src/foss/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Enter your server details to get your messages on this device. 4 | -------------------------------------------------------------------------------- /app/src/full/java/me/tagavari/airmessage/enums/LocationState.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.enums 2 | 3 | import androidx.annotation.IntDef 4 | 5 | @Retention(AnnotationRetention.SOURCE) 6 | @IntDef(LocationState.loading, LocationState.permission, LocationState.failed, LocationState.unavailable, LocationState.resolvable, LocationState.ready) 7 | annotation class LocationState { 8 | companion object { 9 | const val loading = 0 //Loading in progress 10 | const val permission = 1 //Permission required 11 | const val failed = 2 //Load error 12 | const val unavailable = 3 //Service unavailable 13 | const val resolvable = 4 //User action required 14 | const val ready = 5 //OK 15 | } 16 | } -------------------------------------------------------------------------------- /app/src/full/java/me/tagavari/airmessage/flavor/FirebaseAuthBridge.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.flavor 2 | 3 | import com.google.firebase.auth.FirebaseAuth 4 | 5 | object FirebaseAuthBridge { 6 | @JvmStatic 7 | val isSupported = true 8 | 9 | @JvmStatic 10 | fun getUserSummary(): String? = FirebaseAuth.getInstance().currentUser?.run { "$displayName ($email)" } 11 | } -------------------------------------------------------------------------------- /app/src/full/java/me/tagavari/airmessage/flavor/MapsBridge.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.flavor 2 | 3 | import android.content.Context 4 | import com.google.android.gms.maps.MapsInitializer 5 | 6 | object MapsBridge { 7 | @JvmStatic 8 | fun initialize(context: Context) { 9 | //Initializing Google Maps 10 | MapsInitializer.initialize(context, MapsInitializer.Renderer.LATEST, null) 11 | } 12 | } -------------------------------------------------------------------------------- /app/src/full/res/layout/listitem_contentlocation_map.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/activity/ImageDraw.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.activity; 2 | 3 | import android.os.Bundle; 4 | import androidx.appcompat.app.AppCompatActivity; 5 | import me.tagavari.airmessage.R; 6 | 7 | public class ImageDraw extends AppCompatActivity { 8 | 9 | @Override 10 | protected void onCreate(Bundle savedInstanceState) { 11 | //Calling the super method 12 | super.onCreate(savedInstanceState); 13 | 14 | //Setting the content view 15 | setContentView(R.layout.activity_imagedraw); 16 | 17 | //((ImageView) findViewById(R.id.imagedraw_mainimage)).setImageURI(); 18 | } 19 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/composite/ActivityPlugin.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.composite; 2 | 3 | import android.app.Activity; 4 | import android.os.Bundle; 5 | import androidx.annotation.Nullable; 6 | 7 | public abstract class ActivityPlugin { 8 | private Activity activity; 9 | 10 | protected void onCreate(@Nullable Bundle savedInstanceState) {} 11 | protected void onStart() {} 12 | protected void onResume() {} 13 | protected void onPause() {} 14 | protected void onStop() {} 15 | protected void onDestroy() {} 16 | 17 | void setActivity(Activity activity) { 18 | this.activity = activity; 19 | } 20 | 21 | protected Activity getActivity() { 22 | return activity; 23 | } 24 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/composite/AppCompatActivityPlugin.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.composite; 2 | 3 | import android.os.Bundle; 4 | import androidx.annotation.Nullable; 5 | import androidx.appcompat.app.AppCompatActivity; 6 | 7 | public abstract class AppCompatActivityPlugin { 8 | private AppCompatActivity activity; 9 | 10 | protected void onCreate(@Nullable Bundle savedInstanceState) {} 11 | protected void onStart() {} 12 | protected void onResume() {} 13 | protected void onPause() {} 14 | protected void onStop() {} 15 | protected void onDestroy() {} 16 | 17 | void setActivity(AppCompatActivity activity) { 18 | this.activity = activity; 19 | } 20 | 21 | protected AppCompatActivity getActivity() { 22 | return activity; 23 | } 24 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/connection/CommunicationsManagerFactory.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.connection; 2 | 3 | import me.tagavari.airmessage.connection.listener.CommunicationsManagerListener; 4 | import me.tagavari.airmessage.enums.ProxyType; 5 | 6 | public interface CommunicationsManagerFactory { 7 | CommunicationsManager create(CommunicationsManagerListener listener, @ProxyType int proxyType); 8 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/connection/ConnectionOverride.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.connection; 2 | 3 | import androidx.annotation.Nullable; 4 | import me.tagavari.airmessage.enums.ProxyType; 5 | import me.tagavari.airmessage.util.ConnectionParams; 6 | 7 | public class ConnectionOverride { 8 | @ProxyType private final int proxyType; 9 | @Nullable private final T value; 10 | 11 | public ConnectionOverride(@ProxyType int proxyType, @Nullable T value) { 12 | this.proxyType = proxyType; 13 | this.value = value; 14 | } 15 | 16 | @ProxyType 17 | public int getProxyType() { 18 | return proxyType; 19 | } 20 | 21 | @Nullable 22 | public T getValue() { 23 | return value; 24 | } 25 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/connection/DataProxyListener.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.connection; 2 | 3 | import me.tagavari.airmessage.enums.ConnectionErrorCode; 4 | 5 | /** 6 | * Listener for events of a {@link DataProxy} 7 | */ 8 | public interface DataProxyListener { 9 | void handleOpen(); 10 | void handleClose(@ConnectionErrorCode int reason); 11 | void handleMessage(Packet packet); 12 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/connection/comm5/EncryptedPacket.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.connection.comm5; 2 | 3 | /** 4 | * A packet sent or received from a {@link me.tagavari.airmessage.connection.DataProxy} 5 | * Has an extra 'encrypt' flag that determines if this packet is encrypted during transit 6 | */ 7 | public class EncryptedPacket { 8 | private byte[] data; 9 | private boolean encrypt; 10 | 11 | public EncryptedPacket(byte[] data, boolean encrypt) { 12 | this.data = data; 13 | this.encrypt = encrypt; 14 | } 15 | 16 | public byte[] getData() { 17 | return data; 18 | } 19 | 20 | public boolean getEncrypt() { 21 | return encrypt; 22 | } 23 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/connection/exception/AMRemoteUpdateException.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.connection.exception 2 | 3 | import java.lang.Exception 4 | 5 | class AMRemoteUpdateException @JvmOverloads constructor( 6 | val errorCode: Int, 7 | val errorDetails: String? = null 8 | ): Exception() { 9 | companion object { 10 | const val errorCodeUnknown = 0 11 | const val errorCodeMismatch = 1 12 | const val errorCodeDownload = 2 13 | const val errorCodeBadPackage = 3 14 | const val errorCodeInternal = 4 15 | } 16 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/connection/exception/LargeAllocationException.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.connection.exception; 2 | 3 | //When the system tries to allocate more memory than a hardcoded limit 4 | public class LargeAllocationException extends RuntimeException { 5 | public LargeAllocationException(long size, long limit) { 6 | super("Tried to allocate " + size + ", but limit is " + limit); 7 | } 8 | 9 | public LargeAllocationException(long size, long limit, Throwable cause) { 10 | super("Tried to allocate " + size + ", but limit is " + limit, cause); 11 | } 12 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/connection/listener/ConnectionUpdateListener.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.connection.listener; 2 | 3 | import me.tagavari.airmessage.enums.ConnectionErrorCode; 4 | 5 | public interface ConnectionUpdateListener { 6 | void onConnecting(); 7 | void onOpen(); 8 | void onClose(@ConnectionErrorCode int code); 9 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/connection/request/FileProcessingRequest.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.connection.request; 2 | 3 | /** 4 | * Represents a file to be processed in the background by the app 5 | */ 6 | public abstract class FileProcessingRequest { 7 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/connection/request/FileRemovalRequest.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.connection.request; 2 | 3 | import me.tagavari.airmessage.messaging.FileDraft; 4 | 5 | /** 6 | * Represents a request to delete a draft file 7 | */ 8 | public class FileRemovalRequest extends FileProcessingRequest { 9 | private final FileDraft draftFile; 10 | private final long updateTime; 11 | 12 | public FileRemovalRequest(FileDraft draftFile, long updateTime) { 13 | this.draftFile = draftFile; 14 | this.updateTime = updateTime; 15 | } 16 | 17 | public FileDraft getDraftFile() { 18 | return draftFile; 19 | } 20 | 21 | public long getUpdateTime() { 22 | return updateTime; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/constants/ColorConstants.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.constants; 2 | 3 | import java.util.Arrays; 4 | import java.util.Collections; 5 | import java.util.List; 6 | 7 | public class ColorConstants { 8 | public static final float disabledAlpha = 0.54F; 9 | public static final int rippleAlphaInt = 51; //20% 10 | public static final int secondaryAlphaInt = 179; //70% 11 | public static final List effectColors = Arrays.asList( 12 | 0xFCE18A, //Yellow 13 | 0xFF726D, //Orange 14 | 0xB48DEF, //Purple 15 | 0xF4306D, //Pink 16 | 0x42A5F5, //Blue 17 | 0x7986CB //Indigo 18 | ); 19 | public static final int colorAMOLED = 0xFF000000; 20 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/constants/FileNameConstants.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.constants; 2 | 3 | public class FileNameConstants { 4 | public static final String recordingName = "Audio message.amr"; 5 | public static final String pictureName = "image.jpg"; 6 | public static final String videoName = "video.mp4"; 7 | public static final String locationName = "location.loc.vcf"; 8 | public static final String defaultFileName = "file"; 9 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/constants/MIMEConstants.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.constants; 2 | 3 | public class MIMEConstants { 4 | public static final String defaultMIMEType = "application/octet-stream"; 5 | 6 | public static final String mimeTypeImage = "image/*"; 7 | public static final String mimeTypeVideo = "video/*"; 8 | public static final String mimeTypeAudio = "audio/*"; 9 | public static final String mimeTypeGIF = "image/gif"; 10 | public static final String mimeTypeVLocation = "text/x-vlocation"; 11 | public static final String mimeTypeVCard = "text/vcard"; 12 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/constants/NetworkConstants.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.constants; 2 | 3 | public class NetworkConstants { 4 | public static final int defaultPort = 1359; 5 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/constants/SMSReceiverConstants.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.constants; 2 | 3 | public class SMSReceiverConstants { 4 | public static final String conversationID = "conversationID"; 5 | public static final String messageID = "messageID"; 6 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/constants/TimingConstants.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.constants; 2 | 3 | public class TimingConstants { 4 | //Message burst - Sending single messages one after the other 5 | public static final long conversationBurstTimeMillis = 30 * 1000; //30 seconds 6 | 7 | //Message session - A conversation session, where conversation participants are active 8 | public static final long conversationSessionTimeMillis = 5 * 60 * 1000; //5 minutes 9 | 10 | //Just now - A message sent just now 11 | public static final long conversationJustNowTimeMillis = 60 * 1000; //1 minute 12 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/constants/VersionConstants.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.constants 2 | 3 | object VersionConstants { 4 | /** 5 | * The latest communications version that this client supports 6 | */ 7 | @JvmStatic 8 | val latestCommVer = listOf(5, 5) 9 | 10 | /** 11 | * * The latest communications version that this client supports as a human-readable string 12 | */ 13 | @JvmStatic 14 | val latestCommVerString get() = latestCommVer.joinToString(".") 15 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/data/SharedPreferencesManager.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/java/me/tagavari/airmessage/data/SharedPreferencesManager.java -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/enums/AttachmentType.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.enums; 2 | 3 | import androidx.annotation.IntDef; 4 | 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | 8 | @Retention(RetentionPolicy.SOURCE) 9 | @IntDef({AttachmentType.media, AttachmentType.document, AttachmentType.audio, AttachmentType.contact, AttachmentType.location}) 10 | public @interface AttachmentType { 11 | int document = 0; 12 | int media = 1; 13 | int audio = 2; 14 | int contact = 3; 15 | int location = 4; 16 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/enums/ChatCreateErrorCode.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.enums; 2 | 3 | import androidx.annotation.IntDef; 4 | 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | 8 | @Retention(RetentionPolicy.SOURCE) 9 | @IntDef({ChatCreateErrorCode.network, ChatCreateErrorCode.scriptError, ChatCreateErrorCode.badRequest, ChatCreateErrorCode.unauthorized, ChatCreateErrorCode.unknown, ChatCreateErrorCode.notSupported}) 10 | public @interface ChatCreateErrorCode { 11 | int network = 0; 12 | int scriptError = 1; 13 | int badRequest = 2; 14 | int unauthorized = 3; 15 | int unknown = 4; 16 | int notSupported = 5; 17 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/enums/ConnectionFeature.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.enums; 2 | 3 | import androidx.annotation.IntDef; 4 | 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | 8 | @Retention(RetentionPolicy.SOURCE) 9 | @IntDef({ConnectionFeature.idBasedRetrieval, ConnectionFeature.payloadPushNotifications, ConnectionFeature.remoteUpdates, ConnectionFeature.faceTime}) 10 | public @interface ConnectionFeature { 11 | int idBasedRetrieval = 0; //Retrieve messages using an ID range 12 | int payloadPushNotifications = 1; //Receive FCM messages with message content 13 | int remoteUpdates = 2; //Initiate server updates from clients 14 | int faceTime = 3; //Initiate and receive FaceTime calls 15 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/enums/ConnectionMode.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.enums; 2 | 3 | import androidx.annotation.IntDef; 4 | 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | 8 | @Retention(RetentionPolicy.SOURCE) 9 | @IntDef({ConnectionMode.user, ConnectionMode.immediate, ConnectionMode.background}) 10 | public @interface ConnectionMode { 11 | int user = 0; 12 | int immediate = 1; 13 | int background = 2; 14 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/enums/ConnectionState.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.enums; 2 | 3 | import androidx.annotation.IntDef; 4 | 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | 8 | @Retention(RetentionPolicy.SOURCE) 9 | @IntDef({ConnectionState.disconnected, ConnectionState.connecting, ConnectionState.connected}) 10 | public @interface ConnectionState { 11 | int disconnected = 0; 12 | int connecting = 1; 13 | int connected = 2; 14 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/enums/ConversationItemType.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.enums; 2 | 3 | import androidx.annotation.IntDef; 4 | 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | 8 | @Retention(RetentionPolicy.SOURCE) 9 | @IntDef({ConversationItemType.message, ConversationItemType.member, ConversationItemType.chatRename, ConversationItemType.chatCreate}) 10 | public @interface ConversationItemType { 11 | int message = 0; 12 | int member = 1; 13 | int chatRename = 2; 14 | int chatCreate = 3; 15 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/enums/ConversationState.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.enums; 2 | 3 | import androidx.annotation.IntDef; 4 | 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | 8 | @Retention(RetentionPolicy.SOURCE) 9 | @IntDef({ConversationState.ready, ConversationState.incompleteServer, ConversationState.incompleteClient}) 10 | public @interface ConversationState { 11 | int ready = 0; //The conversation is in sync with the server 12 | int incompleteServer = 1; //The conversation is a result of a message from the server, but is missing info 13 | int incompleteClient = 2; //The conversation was created on the client, but isn't linked to the server 14 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/enums/FaceTimeInitiateCode.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.enums; 2 | 3 | import androidx.annotation.IntDef; 4 | 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | 8 | @Retention(RetentionPolicy.SOURCE) 9 | @IntDef({FaceTimeInitiateCode.ok, FaceTimeInitiateCode.network, FaceTimeInitiateCode.badMembers, FaceTimeInitiateCode.external}) 10 | public @interface FaceTimeInitiateCode { 11 | int ok = 0; 12 | int network = 1; 13 | int badMembers = 2; 14 | int external = 3; 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/enums/FaceTimeLinkErrorCode.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.enums; 2 | 3 | import androidx.annotation.IntDef; 4 | 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | 8 | @Retention(RetentionPolicy.SOURCE) 9 | @IntDef({FaceTimeLinkErrorCode.network, FaceTimeLinkErrorCode.external}) 10 | public @interface FaceTimeLinkErrorCode { 11 | int network = 0; 12 | int external = 1; 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/enums/GroupAction.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.enums; 2 | 3 | import androidx.annotation.IntDef; 4 | 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | 8 | @Retention(RetentionPolicy.SOURCE) 9 | @IntDef({GroupAction.unknown, GroupAction.join, GroupAction.leave}) 10 | public @interface GroupAction { 11 | int unknown = 0; 12 | int join = 1; 13 | int leave = 2; 14 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/enums/MassRetrievalErrorCode.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.enums; 2 | 3 | import androidx.annotation.IntDef; 4 | 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | 8 | @Retention(RetentionPolicy.SOURCE) 9 | @IntDef({MassRetrievalErrorCode.unknown, MassRetrievalErrorCode.localTimeout, MassRetrievalErrorCode.localBadResponse, MassRetrievalErrorCode.localIO}) 10 | public @interface MassRetrievalErrorCode { 11 | int unknown = -1; 12 | int localTimeout = 0; //Request timed out 13 | int localBadResponse = 1; //Bad response (packets out of order) 14 | int localIO = 2; //IO error 15 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/enums/MessageComponentType.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.enums; 2 | 3 | import androidx.annotation.IntDef; 4 | 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | 8 | @Retention(RetentionPolicy.SOURCE) 9 | @IntDef({MessageComponentType.text, MessageComponentType.attachmentDocument, MessageComponentType.attachmentVisual, MessageComponentType.attachmentAudio, MessageComponentType.attachmentContact, MessageComponentType.attachmentLocation}) 10 | public @interface MessageComponentType { 11 | int text = 0; 12 | int attachmentDocument = 1; 13 | int attachmentVisual = 2; 14 | int attachmentAudio = 3; 15 | int attachmentContact = 4; 16 | int attachmentLocation = 5; 17 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/enums/MessageEdgeType.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.enums; 2 | 3 | import androidx.annotation.IntDef; 4 | 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | 8 | @Retention(RetentionPolicy.SOURCE) 9 | @IntDef({MessageEdgeType.anchored, MessageEdgeType.unanchored, MessageEdgeType.flat}) 10 | public @interface MessageEdgeType { 11 | int anchored = 0; 12 | int unanchored = 1; 13 | int flat = 2; 14 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/enums/MessagePreviewState.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.enums; 2 | 3 | import androidx.annotation.IntDef; 4 | 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | 8 | @Retention(RetentionPolicy.SOURCE) 9 | @IntDef({MessagePreviewState.notTried, MessagePreviewState.unavailable, MessagePreviewState.available}) 10 | public @interface MessagePreviewState { 11 | int notTried = 0; 12 | int unavailable = 1; 13 | int available = 2; 14 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/enums/MessagePreviewType.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.enums; 2 | 3 | import androidx.annotation.IntDef; 4 | 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | 8 | @Retention(RetentionPolicy.SOURCE) 9 | @IntDef({MessagePreviewType.link}) 10 | public @interface MessagePreviewType { 11 | int link = 0; 12 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/enums/MessageState.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.enums; 2 | 3 | import androidx.annotation.IntDef; 4 | 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | 8 | @Retention(RetentionPolicy.SOURCE) 9 | @IntDef({MessageState.ghost, MessageState.idle, MessageState.sent, MessageState.delivered, MessageState.read}) 10 | public @interface MessageState { 11 | int ghost = 0; 12 | int idle = 1; 13 | int sent = 2; 14 | int delivered = 3; 15 | int read = 4; 16 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/enums/MessageViewType.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.enums; 2 | 3 | import androidx.annotation.IntDef; 4 | 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | 8 | @Retention(RetentionPolicy.SOURCE) 9 | @IntDef({MessageViewType.message, MessageViewType.action}) 10 | public @interface MessageViewType { 11 | int message = 0; 12 | int action = 1; 13 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/enums/ProxyType.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.enums; 2 | 3 | import androidx.annotation.IntDef; 4 | 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | 8 | @Retention(RetentionPolicy.SOURCE) 9 | @IntDef({ProxyType.direct, ProxyType.connect}) 10 | public @interface ProxyType { 11 | int direct = 0; 12 | int connect = 1; 13 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/enums/ServiceHandler.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.enums; 2 | 3 | import androidx.annotation.IntDef; 4 | 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | 8 | @Retention(RetentionPolicy.SOURCE) 9 | @IntDef({ServiceHandler.appleBridge, ServiceHandler.systemMessaging}) 10 | public @interface ServiceHandler { 11 | int appleBridge = 0; //AirMessage bridge (iMessage, text message forwarding) 12 | int systemMessaging = 1; //System messaging (SMS, MMS, RCS) 13 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/enums/ServiceType.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.enums; 2 | 3 | import androidx.annotation.StringDef; 4 | 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | 8 | @Retention(RetentionPolicy.SOURCE) 9 | @StringDef({ServiceType.appleMessage, ServiceType.appleSMS, ServiceType.systemSMS, ServiceType.systemRCS}) 10 | public @interface ServiceType { 11 | String appleMessage = "iMessage"; 12 | String appleSMS = "SMS"; //Text message forwarding 13 | 14 | String systemSMS = "MMSSMS"; //MMS and SMS 15 | String systemRCS = "RCS"; //Rich communication services 16 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/enums/TapbackType.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.enums; 2 | 3 | import androidx.annotation.IntDef; 4 | 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | 8 | @Retention(RetentionPolicy.SOURCE) 9 | @IntDef({TapbackType.unknown, TapbackType.heart, TapbackType.like, TapbackType.dislike, TapbackType.laugh, TapbackType.exclamation, TapbackType.question}) 10 | public @interface TapbackType { 11 | int unknown = -1; 12 | int heart = 0; 13 | int like = 1; 14 | int dislike = 2; 15 | int laugh = 3; 16 | int exclamation = 4; 17 | int question = 5; 18 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/enums/TrackableRequestCategory.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.enums; 2 | 3 | import androidx.annotation.IntDef; 4 | 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | 8 | @Retention(RetentionPolicy.SOURCE) 9 | @IntDef({TrackableRequestCategory.messageUpload, TrackableRequestCategory.attachmentUpload}) 10 | public @interface TrackableRequestCategory { 11 | int messageUpload = 0; 12 | int attachmentUpload = 1; 13 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/extension/FragmentBackOverride.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.extension; 2 | 3 | public interface FragmentBackOverride { 4 | /** 5 | * Handle back button presses 6 | * @return TRUE if the event is consumed by this listener 7 | */ 8 | boolean onBackPressed(); 9 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/extension/FragmentCommunicationFaceTime.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.extension 2 | 3 | interface FragmentCommunicationFaceTime { 4 | fun exitCall() 5 | fun acceptCall() 6 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/extension/FragmentCommunicationNetworkConfig.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.extension; 2 | 3 | import androidx.annotation.Nullable; 4 | import me.tagavari.airmessage.connection.ConnectionManager; 5 | import me.tagavari.airmessage.fragment.FragmentCommunication; 6 | 7 | public interface FragmentCommunicationNetworkConfig { 8 | void swapFragment(FragmentCommunication fragment); 9 | void popStack(); 10 | void launchConversations(); 11 | @Nullable 12 | ConnectionManager getConnectionManager(); 13 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/fragment/FragmentCommunication.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.fragment 2 | 3 | import androidx.annotation.LayoutRes 4 | import androidx.fragment.app.Fragment 5 | 6 | open class FragmentCommunication : Fragment { 7 | var communicationsCallback: A? = null 8 | 9 | constructor() : super() 10 | constructor(@LayoutRes contentLayoutId: Int) : super(contentLayoutId) 11 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/messaging/AttachmentPreview.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.messaging 2 | 3 | import android.os.Parcelable 4 | import kotlinx.parcelize.Parcelize 5 | import java.io.Serializable 6 | 7 | /** 8 | * A preview for an attachment file 9 | * @param name The name of this attachment file 10 | * @param type The MIME type of this attachment file 11 | */ 12 | @Parcelize 13 | data class AttachmentPreview(val name: String?, val type: String?) : Serializable, Parcelable -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/messaging/ConversationItem.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.messaging 2 | 3 | import me.tagavari.airmessage.enums.ConversationItemType 4 | import me.tagavari.airmessage.enums.MessageViewType 5 | 6 | abstract class ConversationItem(open var localID: Long, var serverID: Long, var guid: String?, var date: Long) { 7 | @get:ConversationItemType 8 | abstract val itemType: Int 9 | 10 | @get:MessageViewType 11 | abstract val itemViewType: Int 12 | abstract fun clone(): ConversationItem 13 | 14 | companion object { 15 | const val viewTypeMessage = 0 16 | const val viewTypeAction = 1 17 | } 18 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/messaging/MemberInfo.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.messaging 2 | 3 | import android.os.Parcelable 4 | import kotlinx.parcelize.Parcelize 5 | 6 | @Parcelize 7 | data class MemberInfo(val address: String, var color: Int) : Parcelable { 8 | fun clone(): MemberInfo = MemberInfo(address, color) 9 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/messaging/MessagePreviewInfo.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.messaging 2 | 3 | import me.tagavari.airmessage.enums.MessagePreviewType 4 | 5 | /** 6 | * Represents a preview card for a message component 7 | */ 8 | class MessagePreviewInfo( 9 | @field:MessagePreviewType @get:MessagePreviewType 10 | @param:MessagePreviewType val type: Int, 11 | val localID: Long, 12 | val data: ByteArray?, 13 | val target: String, 14 | val title: String, 15 | val subtitle: String, 16 | val caption: String 17 | ) -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/messaging/viewholder/VHConversationBase.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.messaging.viewholder 2 | 3 | import android.view.View 4 | import android.view.ViewGroup 5 | import android.widget.TextView 6 | import me.tagavari.airmessage.util.DisposableViewHolder 7 | 8 | /** 9 | * A view holder that contains a conversation title and an icon 10 | */ 11 | open class VHConversationBase( 12 | itemView: View, 13 | val iconGroup: ViewGroup, 14 | val conversationTitle: TextView 15 | ) : DisposableViewHolder(itemView) -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/messaging/viewholder/VHMessageAction.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.messaging.viewholder 2 | 3 | import android.view.View 4 | import android.widget.TextView 5 | import me.tagavari.airmessage.util.DisposableViewHolder 6 | 7 | /** 8 | * A view holder that contains a label for an action message 9 | */ 10 | class VHMessageAction(itemView: View, val label: TextView) : DisposableViewHolder(itemView) -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/messaging/viewholder/VHMessagePreview.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.messaging.viewholder 2 | 3 | import android.content.Context 4 | import android.view.View 5 | import androidx.recyclerview.widget.RecyclerView 6 | 7 | abstract class VHMessagePreview(itemView: View) : RecyclerView.ViewHolder(itemView) { 8 | /** 9 | * Updates the rounded corners of this component 10 | * @param context The context to use 11 | * @param anchoredBottom Whether this view is anchored to a message below 12 | * @param alignToRight Whether this view is aligned to the right edge of the screen 13 | */ 14 | abstract fun updateViewEdges(context: Context, anchoredBottom: Boolean, alignToRight: Boolean) 15 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/receiver/StartBootReceiver.java: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.receiver; 2 | 3 | import android.content.BroadcastReceiver; 4 | import android.content.Context; 5 | import android.content.Intent; 6 | import me.tagavari.airmessage.helper.ConnectionServiceLaunchHelper; 7 | 8 | public class StartBootReceiver extends BroadcastReceiver { 9 | @Override 10 | public void onReceive(Context context, Intent intent) { 11 | //Returning if the service is not a boot service 12 | if(!Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) return; 13 | 14 | //Starting the service 15 | ConnectionServiceLaunchHelper.launchPersistent(context); 16 | } 17 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/redux/ReduxEventAttachmentDownload.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.redux 2 | 3 | import java.io.File 4 | 5 | //An event to represent the status of an attachment download 6 | abstract class ReduxEventAttachmentDownload { 7 | data class Start(val fileLength: Long) : ReduxEventAttachmentDownload() 8 | data class Progress(val bytesProgress: Long, val bytesTotal: Long) : ReduxEventAttachmentDownload() 9 | data class Complete(val file: File) : ReduxEventAttachmentDownload() 10 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/redux/ReduxEventAttachmentUpload.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.redux 2 | 3 | //An event to represent the status of an attachment upload 4 | abstract class ReduxEventAttachmentUpload { 5 | //While this file is being uploaded 6 | data class Progress(val bytesProgress: Long, val bytesTotal: Long) : ReduxEventAttachmentUpload() 7 | 8 | //When this file has finished being uploaded 9 | data class Complete(val fileHash: ByteArray) : ReduxEventAttachmentUpload() 10 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/redux/ReduxEventFaceTime.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.redux 2 | 3 | sealed interface ReduxEventFaceTime { 4 | //Outgoing calls 5 | class OutgoingAccepted(val faceTimeLink: String) : ReduxEventFaceTime 6 | object OutgoingRejected : ReduxEventFaceTime 7 | class OutgoingError(val errorDetails: String?) : ReduxEventFaceTime 8 | 9 | //Incoming calls 10 | class IncomingHandled(val faceTimeLink: String) : ReduxEventFaceTime 11 | class IncomingHandleError(val errorDetails: String?) : ReduxEventFaceTime 12 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/redux/ReduxEventRemoteUpdate.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.redux 2 | 3 | import me.tagavari.airmessage.connection.exception.AMRemoteUpdateException 4 | 5 | sealed class ReduxEventRemoteUpdate { 6 | object Initiate : ReduxEventRemoteUpdate() 7 | class Error(val exception: AMRemoteUpdateException) : ReduxEventRemoteUpdate() 8 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/redux/ReduxEventTextImport.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.redux 2 | 3 | import me.tagavari.airmessage.messaging.ConversationInfo 4 | 5 | //An event to represent the status of a mass retrieval 6 | abstract class ReduxEventTextImport { 7 | class Start(val itemCount: Int) : ReduxEventTextImport() 8 | class Progress(val receivedItems: Int, val totalItems: Int) : ReduxEventTextImport() 9 | class Complete(val conversations: Collection) : ReduxEventTextImport() 10 | class Fail : ReduxEventTextImport() 11 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/util/ActivityStatusUpdate.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.util 2 | 3 | import me.tagavari.airmessage.enums.MessageState 4 | 5 | /** 6 | * A class for passing around data related to an activity status update 7 | * @param messageID The ID of the message that is being updated 8 | * @param messageState The message's new state 9 | * @param dateRead The date the message was read 10 | */ 11 | data class ActivityStatusUpdate @JvmOverloads constructor( 12 | val messageID: Long, 13 | @field:MessageState @get:MessageState @param:MessageState val messageState: Int, 14 | val dateRead: Long = -1 15 | ) -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/util/ConnectionParams.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.util 2 | 3 | /** 4 | * Represents a collection of data that can be used to configure the connection of a certain type of proxy 5 | */ 6 | sealed class ConnectionParams { 7 | open class Security(val password: String) : ConnectionParams() 8 | open class Direct(val address: String, val fallbackAddress: String?, password: String) : Security(password) 9 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/util/ConversationTarget.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.util 2 | 3 | /** 4 | * Represents a conversation that can be sent to 5 | */ 6 | interface ConversationTarget { 7 | //A serverlinked Apple Messages chat 8 | data class AppleLinked(val guid: String) : ConversationTarget 9 | 10 | //An unlinked potential Apple Messages chat 11 | data class AppleUnlinked(val members: List, val service: String) : ConversationTarget 12 | 13 | //A local SMS chat 14 | data class SystemSMS(val externalID: Long) : ConversationTarget 15 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/util/CustomTabsURLSpan.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.util 2 | 3 | import android.net.Uri 4 | import android.text.style.URLSpan 5 | import android.view.View 6 | import android.widget.TextView 7 | import me.tagavari.airmessage.helper.IntentHelper 8 | 9 | class CustomTabsURLSpan(url: String?) : URLSpan(url) { 10 | override fun onClick(widget: View) { 11 | //Ignoring if the widget has disabled link clicking 12 | if(!(widget as TextView).linksClickable) return 13 | 14 | //Launching the custom tab 15 | IntentHelper.launchCustomTabs(widget.getContext(), Uri.parse(url)) 16 | } 17 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/util/DisposableViewHolder.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.util 2 | 3 | import android.view.View 4 | import androidx.recyclerview.widget.RecyclerView 5 | import io.reactivex.rxjava3.disposables.CompositeDisposable 6 | 7 | /** 8 | * A view holder that keeps track of a [CompositeDisposable] for background processes 9 | */ 10 | abstract class DisposableViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { 11 | val compositeDisposable = CompositeDisposable() 12 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/util/IndexedItem.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.util 2 | 3 | data class IndexedItem(val index: Int, val item: T) -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/util/LatLngInfo.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.util 2 | 3 | import android.os.Parcelable 4 | import kotlinx.parcelize.Parcelize 5 | 6 | @Parcelize 7 | data class LatLngInfo(val latitude: Double, val longitude: Double) : Parcelable 8 | -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/util/ModifierMetadata.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.util 2 | 3 | /** 4 | * A helper class to hold data about the positioning of a modifier 5 | * @param messageID The ID of the message the modifier is attached to 6 | * @param componentIndex The index of the component the modifier is attached to 7 | */ 8 | data class ModifierMetadata(val messageID: Long, val componentIndex: Int) -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/util/NotificationSummaryMessage.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.util 2 | 3 | import android.os.Parcelable 4 | import kotlinx.parcelize.Parcelize 5 | 6 | //Represents an item in a summary notification 7 | @Parcelize 8 | data class NotificationSummaryMessage(val conversationID: Int, val title: String, val description: String) : Parcelable -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/util/ServerUpdateData.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.util 2 | 3 | import android.os.Parcelable 4 | import kotlinx.parcelize.Parcelize 5 | 6 | @Parcelize 7 | data class ServerUpdateData( 8 | val id: Int, 9 | val protocolRequirement: List, 10 | val version: String, 11 | val notes: String, 12 | val remoteInstallable: Boolean 13 | ): Parcelable -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/util/TapbackDisplayData.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.util 2 | 3 | import androidx.annotation.ColorRes 4 | import androidx.annotation.DrawableRes 5 | import androidx.annotation.StringRes 6 | 7 | /** 8 | * A class that holds display data required to render a tapback 9 | * @param iconResource The tapback's icon 10 | * @param color The tapback's color 11 | * @param label The tapback's title 12 | */ 13 | class TapbackDisplayData( 14 | @field:DrawableRes @get:DrawableRes @param:DrawableRes val iconResource: Int, 15 | @field:ColorRes @get:ColorRes @param:ColorRes val color: Int, 16 | @field:StringRes @get:StringRes @param:StringRes val label: Int 17 | ) -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/util/TrackableRequest.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.util 2 | 3 | import me.tagavari.airmessage.enums.TrackableRequestCategory 4 | 5 | /** 6 | * Helper interface for finding requests based on a category and key value 7 | * @param The type of the value 8 | */ 9 | interface TrackableRequest { 10 | @get:TrackableRequestCategory val category: Int 11 | val value: T 12 | } -------------------------------------------------------------------------------- /app/src/main/java/me/tagavari/airmessage/util/TransferredConversation.kt: -------------------------------------------------------------------------------- 1 | package me.tagavari.airmessage.util 2 | 3 | import me.tagavari.airmessage.messaging.ConversationInfo 4 | 5 | /** 6 | * Holds information for the transfer of a conversation, exclusively used by AM bridge to resolve client- and server-created conversations on the fly 7 | * @param serverConversation The server conversation that is being transferred from 8 | * @param serverConversationItems Items from the server conversation 9 | * @param clientConversation The target conversation that is being transferred to 10 | */ 11 | data class TransferredConversation( 12 | val serverConversation: ConversationInfo, 13 | val serverConversationItems: List, 14 | val clientConversation: ConversationInfo 15 | ) -------------------------------------------------------------------------------- /app/src/main/res/anim/activity_slide_up.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/anim/fade_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/anim/fade_in_delayed.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/anim/fade_in_light.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/anim/fade_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/anim/fade_out_light.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/anim/freeze.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/anim/messagedetails_slide_in_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/anim/messagedetails_slide_out_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/anim/messagestatus_slide_in_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/anim/messagestatus_slide_out_top.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/anim/windowslide_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/anim/windowslide_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/anim/windowslideback_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/anim/windowslideback_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/onboarding_download_medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-hdpi/onboarding_download_medium.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/onboarding_download_short.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-hdpi/onboarding_download_short.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/onboarding_download_tall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-hdpi/onboarding_download_tall.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/promo_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-hdpi/promo_logo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/onboarding_download_medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-mdpi/onboarding_download_medium.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/onboarding_download_short.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-mdpi/onboarding_download_short.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/onboarding_download_tall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-mdpi/onboarding_download_tall.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/promo_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-mdpi/promo_logo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-hdpi/onboarding_download_medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-night-hdpi/onboarding_download_medium.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-hdpi/onboarding_download_short.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-night-hdpi/onboarding_download_short.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-hdpi/onboarding_download_tall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-night-hdpi/onboarding_download_tall.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-mdpi/onboarding_download_medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-night-mdpi/onboarding_download_medium.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-mdpi/onboarding_download_short.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-night-mdpi/onboarding_download_short.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-mdpi/onboarding_download_tall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-night-mdpi/onboarding_download_tall.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-xhdpi/onboarding_download_medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-night-xhdpi/onboarding_download_medium.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-xhdpi/onboarding_download_short.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-night-xhdpi/onboarding_download_short.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-xhdpi/onboarding_download_tall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-night-xhdpi/onboarding_download_tall.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-xxhdpi/onboarding_download_medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-night-xxhdpi/onboarding_download_medium.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-xxhdpi/onboarding_download_short.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-night-xxhdpi/onboarding_download_short.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-xxhdpi/onboarding_download_tall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-night-xxhdpi/onboarding_download_tall.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-xxxhdpi/onboarding_download_medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-night-xxxhdpi/onboarding_download_medium.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-xxxhdpi/onboarding_download_short.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-night-xxxhdpi/onboarding_download_short.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-xxxhdpi/onboarding_download_tall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-night-xxxhdpi/onboarding_download_tall.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v26/app_icon_background.xml: -------------------------------------------------------------------------------- 1 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v26/appshortcut_add.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/onboarding_download_medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-xhdpi/onboarding_download_medium.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/onboarding_download_short.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-xhdpi/onboarding_download_short.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/onboarding_download_tall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-xhdpi/onboarding_download_tall.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/promo_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-xhdpi/promo_logo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/onboarding_download_medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-xxhdpi/onboarding_download_medium.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/onboarding_download_short.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-xxhdpi/onboarding_download_short.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/onboarding_download_tall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-xxhdpi/onboarding_download_tall.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/promo_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-xxhdpi/promo_logo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/onboarding_download_medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-xxxhdpi/onboarding_download_medium.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/onboarding_download_short.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-xxxhdpi/onboarding_download_short.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/onboarding_download_tall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-xxxhdpi/onboarding_download_tall.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/promo_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/drawable-xxxhdpi/promo_logo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/add.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/add_circle.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/add_rounded.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/appear_bottomscrim.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/appear_bottomshadow.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/appear_topscrim.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/appear_topshadow.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/appshortcut_add.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/appshortcut_add_foreground.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/archive.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/archive_outlined.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/archive_outlined_actionmode.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/arrow_back.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/attach.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/audiotile_progressbar_background.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/audiotile_progressbar_circular.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/background_amoledsamsung.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/background_filler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/background_roundedcrashreport.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/brush.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/button_mediaplayer_pause.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/button_mediaplayer_play.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/call.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/camera.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/camera_outlined.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/cancel.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/chat.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/chat_rounded.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/check.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/check_circle.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/check_circle_outline.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/chevron_down.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/chevron_down_rounded.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/chevron_left.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/chevron_right.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/chip_tapback.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/circle.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/circle_borderdivider.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 10 | 11 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/circle_clickabledark.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/close.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/close_circle.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/close_control.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/contacts.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/copy.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/create.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/create_outlined.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/delete.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/delete_outlined.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/delete_outlined_actionmode.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/dialog_bottomsheet.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/disconnection.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/dislike.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/divider_replysuggestions.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/download.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/download_outlined.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/download_rounded.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/drawable_handle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/email.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/error.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ethernetcable.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/excited.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/exclamation.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/exclamation_rounded.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/facetime.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/facetime_outline.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/file.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/file_document.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/file_document_outlined.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/file_msexcel.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/file_mspowerpoint.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/file_msword.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/file_outlined.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/file_user.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/file_xml.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/file_zip.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/gallery.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/gallery_outlined.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/gif.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/help_outlined.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/info.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/info_outlined.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/keyboard.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/keyboard_outlined.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/keyboard_rounded.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/like.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/like_rounded.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/link.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/location.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/location_outline.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/location_round.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/lock_alert.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/lock_outlined.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/love.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/love_rounded.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/mapindicator.xml: -------------------------------------------------------------------------------- 1 | 3 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/message.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/message_alert.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/message_bridge.xml: -------------------------------------------------------------------------------- 1 | 6 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/message_download.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/message_google.xml: -------------------------------------------------------------------------------- 1 | 6 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/message_plus.xml: -------------------------------------------------------------------------------- 1 | 6 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/message_push.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/message_push_group.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/message_sms.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/microphone.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/microphone_outlined.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/movie.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/movie_outlined.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/next.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/notifications_off_outlined.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/notifications_off_outlined_actionmode.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/notifications_on_outlined.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/notifications_outlined.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/open.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/open_rounded.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/overflow.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/pause.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/pause_outlined.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/pause_rounded.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/person_add_round.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/pin.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/play.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/play_circle.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/play_circle_rounded.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/play_outlined.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/play_rounded.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/progressbar_rounded.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/question.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rectangle_chatpreview.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rectangle_chatpreviewfull.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rectangle_messagebubble.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/refresh.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/replay.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/reply.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/restart.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ring.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rounded_button_highlight.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rounded_button_highlight_ripple.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rounded_circle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rounded_contentpane.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rounded_contenttile.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rounded_inputbar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rounded_rectangle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rounded_rectangle_highlight.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rounded_rectangle_highlight_ripple.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rounded_rectangle_ripple.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rounded_rectangle_top.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rounded_selectable_contenttile.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rounded_selectable_contenttile_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rounded_selectable_contenttile_top.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rounded_selectable_inputbar.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rounded_sheet.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/save.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/search.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selectable_rounded.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/send.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/stroke_color.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/sync.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/sync_problem.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/text_fields.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/unarchive.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/unarchive_outlined.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/unarchive_outlined_actionmode.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/undo.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/update.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/upload.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/upload_rounded.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/user_divider.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/videocam_outlined.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/volume.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/volume_outlined.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/warning.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/wifi.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/wifi_off.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_facetimecall.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_onboarding.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_colorpicker.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_simplelist.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_callactive.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_stickercontainer.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_tapbackcontainer.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/listitem_action.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/layout/listitem_attachment_overflow.xml: -------------------------------------------------------------------------------- 1 | 8 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/layout/listitem_conversation_icon1.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/layout/listitem_loading.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/layout/listitem_mediaviewer_image.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/listitem_mediaviewer_video.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/listitem_replysuggestions.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/layout/listitem_subheader.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/layout/listitem_tapbackinfo_header.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_blockedaddresses.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_conversationitem_contextual.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 8 | 10 | 12 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_help.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_mediaviewer.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_messaginginfo.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/app_icon.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/app_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/mipmap-hdpi/app_icon.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/app_icon_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/mipmap-hdpi/app_icon_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/app_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/mipmap-mdpi/app_icon.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/app_icon_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/mipmap-mdpi/app_icon_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/app_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/mipmap-xhdpi/app_icon.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/app_icon_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/mipmap-xhdpi/app_icon_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/app_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/mipmap-xxhdpi/app_icon.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/app_icon_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/mipmap-xxhdpi/app_icon_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/app_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/mipmap-xxxhdpi/app_icon.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/app_icon_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/mipmap-xxxhdpi/app_icon_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/raw/facetime_inject_css.css: -------------------------------------------------------------------------------- 1 | * { 2 | -webkit-user-select: none; 3 | } 4 | 5 | .action-controls li:first-child { 6 | display: none !important; 7 | } -------------------------------------------------------------------------------- /app/src/main/res/raw/map_light.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /app/src/main/res/raw/message_error.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/raw/message_error.wav -------------------------------------------------------------------------------- /app/src/main/res/raw/message_in.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/raw/message_in.wav -------------------------------------------------------------------------------- /app/src/main/res/raw/message_out.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/raw/message_out.wav -------------------------------------------------------------------------------- /app/src/main/res/raw/message_received.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/raw/message_received.wav -------------------------------------------------------------------------------- /app/src/main/res/raw/message_sent.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/raw/message_sent.wav -------------------------------------------------------------------------------- /app/src/main/res/raw/notification_ding.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/raw/notification_ding.wav -------------------------------------------------------------------------------- /app/src/main/res/raw/recording_end.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/raw/recording_end.wav -------------------------------------------------------------------------------- /app/src/main/res/raw/recording_start.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/app/src/main/res/raw/recording_start.wav -------------------------------------------------------------------------------- /app/src/main/res/values-ldrtl/vars.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | false 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-night/vars.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | false 4 | -------------------------------------------------------------------------------- /app/src/main/res/values/library_definitions.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 2018;PonnamKarthik 4 | Karthik Ponnam 5 | RichLink-Preview 6 | apache_2_0 7 | true 8 | https://github.com/PonnamKarthik/RichLinkPreview 9 | -------------------------------------------------------------------------------- /app/src/main/res/values/tags.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | primarytint 4 | amoled_divider 5 | amoled_divider_bottom 6 | controlbar 7 | -------------------------------------------------------------------------------- /app/src/main/res/values/vars.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | true 4 | true 5 | -------------------------------------------------------------------------------- /app/src/main/res/xml-v26/preferences_notification.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/xml/automotive_app_desc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/xml/backup_rules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/xml/provider_paths.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /lib/android-smsmms/.gitignore: -------------------------------------------------------------------------------- 1 | .gradle/ 2 | .idea/ 3 | **/.project 4 | **/.classpath 5 | **/.settings/ 6 | **/build/ 7 | gen/ 8 | *.iml 9 | **/.DS_STORE 10 | local.properties -------------------------------------------------------------------------------- /lib/android-smsmms/android-messaging.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/lib/android-smsmms/android-messaging.png -------------------------------------------------------------------------------- /lib/android-smsmms/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | repositories { 3 | google() 4 | mavenCentral() 5 | jcenter() 6 | } 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:3.5.3' 9 | } 10 | } 11 | 12 | allprojects { 13 | repositories { 14 | google() 15 | mavenCentral() 16 | jcenter() 17 | maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /lib/android-smsmms/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/lib/android-smsmms/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /lib/android-smsmms/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Tue Dec 30 08:21:22 CST 2014 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip 7 | -------------------------------------------------------------------------------- /lib/android-smsmms/library/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.library' 2 | 3 | dependencies { 4 | implementation 'com.klinkerapps:logger:1.0.3' 5 | implementation 'com.squareup.okhttp:okhttp:2.5.0' 6 | implementation 'com.squareup.okhttp:okhttp-urlconnection:2.5.0' 7 | } 8 | 9 | android { 10 | compileSdkVersion 31 11 | 12 | defaultConfig { 13 | minSdkVersion 23 14 | targetSdkVersion 31 15 | } 16 | 17 | lintOptions { 18 | abortOnError false 19 | } 20 | 21 | useLibrary 'org.apache.http.legacy' 22 | } 23 | 24 | apply plugin: 'signing' -------------------------------------------------------------------------------- /lib/android-smsmms/library/gradle.properties: -------------------------------------------------------------------------------- 1 | VERSION_NAME=5.2.6 2 | VERSION_CODE=76 3 | GROUP=com.klinkerapps 4 | 5 | POM_DESCRIPTION=Android Messaging library for SMS and MMS 6 | POM_URL=https://github.com/klinker41/android-smsmms 7 | POM_SCM_URL=https://github.com/klinker41/android-smsmms 8 | POM_SCM_CONNECTION=scm:git@github.com:klinker41/android-smsmms.git 9 | POM_SCM_DEV_CONNECTION=scm:git@github.com:klinker41/android-smsmms.git 10 | POM_LICENCE_NAME=The Apache Software License, Version 2.0 11 | POM_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0.txt 12 | POM_LICENCE_DIST=repo 13 | POM_DEVELOPER_ID=klinker41 14 | POM_DEVELOPER_NAME=Jacob Klinker 15 | 16 | POM_NAME=Andorid Messaging 17 | POM_ARTIFACT_ID=android-smsmms 18 | POM_PACKAGING=aar 19 | -------------------------------------------------------------------------------- /lib/android-smsmms/library/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /lib/android-smsmms/library/src/main/java/com/google/android/mms/APN.java: -------------------------------------------------------------------------------- 1 | package com.google.android.mms; 2 | 3 | public class APN { 4 | public String MMSCenterUrl = ""; 5 | public String MMSPort = ""; 6 | public String MMSProxy = ""; 7 | 8 | public APN(String MMSCenterUrl, String MMSPort, String MMSProxy) { 9 | this.MMSCenterUrl = MMSCenterUrl; 10 | this.MMSPort = MMSPort; 11 | this.MMSProxy = MMSProxy; 12 | } 13 | 14 | public APN() { 15 | 16 | } 17 | } -------------------------------------------------------------------------------- /lib/android-smsmms/library/src/main/java/com/google/android/mms/MMSPart.java: -------------------------------------------------------------------------------- 1 | package com.google.android.mms; 2 | 3 | import android.net.Uri; 4 | 5 | public class MMSPart { 6 | public String Name = ""; 7 | public String MimeType = ""; 8 | public byte[] Data; 9 | public Uri Path; 10 | } -------------------------------------------------------------------------------- /lib/android-smsmms/library/src/main/res/drawable-hdpi/ic_alert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/lib/android-smsmms/library/src/main/res/drawable-hdpi/ic_alert.png -------------------------------------------------------------------------------- /lib/android-smsmms/library/src/main/res/drawable-mdpi/ic_alert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/lib/android-smsmms/library/src/main/res/drawable-mdpi/ic_alert.png -------------------------------------------------------------------------------- /lib/android-smsmms/library/src/main/res/drawable-xhdpi/ic_alert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/lib/android-smsmms/library/src/main/res/drawable-xhdpi/ic_alert.png -------------------------------------------------------------------------------- /lib/android-smsmms/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':library', ':sample' -------------------------------------------------------------------------------- /metadata/android/en-US/changelogs/137.txt: -------------------------------------------------------------------------------- 1 | Initial F-Droid release! 2 | -------------------------------------------------------------------------------- /metadata/android/en-US/changelogs/138.txt: -------------------------------------------------------------------------------- 1 | Added #FreeiMessage notice 2 | -------------------------------------------------------------------------------- /metadata/android/en-US/full_description.txt: -------------------------------------------------------------------------------- 1 | Apple's messaging network iMessage has gained a lot of popularity in recent years, though it has long been locked down to their platforms. 2 | But now, AirMessage makes it easy to send and receive messages to your friends and family through group chats, images, videos and audio messages! 3 | 4 | - Send and receive messages over iMessage 5 | - Chat together with your friends in groups 6 | - Share images, videos, documents and more 7 | - Enjoy a clean, beautiful messaging experience 8 | 9 | The F-Droid release of AirMessage for Android excludes certain features found in the main release, such as Sign In with Google and location attachments. 10 | 11 | Please note that a Mac computer is required to use this app. 12 | -------------------------------------------------------------------------------- /metadata/android/en-US/images/featureGraphic.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/metadata/android/en-US/images/featureGraphic.jpg -------------------------------------------------------------------------------- /metadata/android/en-US/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/metadata/android/en-US/images/icon.png -------------------------------------------------------------------------------- /metadata/android/en-US/images/phoneScreenshots/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/metadata/android/en-US/images/phoneScreenshots/1.jpg -------------------------------------------------------------------------------- /metadata/android/en-US/images/phoneScreenshots/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/metadata/android/en-US/images/phoneScreenshots/2.jpg -------------------------------------------------------------------------------- /metadata/android/en-US/images/phoneScreenshots/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/metadata/android/en-US/images/phoneScreenshots/3.jpg -------------------------------------------------------------------------------- /metadata/android/en-US/images/phoneScreenshots/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/metadata/android/en-US/images/phoneScreenshots/4.jpg -------------------------------------------------------------------------------- /metadata/android/en-US/short_description.txt: -------------------------------------------------------------------------------- 1 | Use iMessage on your Android phone! (Mac computer required) 2 | -------------------------------------------------------------------------------- /metadata/android/en-US/title.txt: -------------------------------------------------------------------------------- 1 | AirMessage 2 | -------------------------------------------------------------------------------- /metadata/android/fr-FR/full_description.txt: -------------------------------------------------------------------------------- 1 | Le réseau de messagerie d’Apple iMessage a acquis une grande popularité ces dernières années, bien qu’il soit longtemps lié à leurs plateformes. 2 | Mais maintenant, AirMessage facilite l’envoi et la réception des messages à vos amis et votre famille grâce à des discussions de groupe, des images, des vidéos et des messages audio! 3 | 4 | S’il vous plaît notez qu’un ordinateur Mac est nécessaire pour utiliser cette appli. 5 | 6 | La version F-Droid d'AirMessage pour Android exclut certaines fonctionnalités présentes dans la version principale, telles que la connexion avec Google et les pièces jointes de localisation. 7 | -------------------------------------------------------------------------------- /metadata/android/fr-FR/short_description.txt: -------------------------------------------------------------------------------- 1 | Utilisez le réseau de messagerie d'Apple sur ton Android! (ordi. Mac est requis) 2 | -------------------------------------------------------------------------------- /metadata/android/fr-FR/title.txt: -------------------------------------------------------------------------------- 1 | AirMessage 2 | -------------------------------------------------------------------------------- /metadata/android/ja-JP/full_description.txt: -------------------------------------------------------------------------------- 1 | Appleのメッセージネット iMessage は最近大いに人気がありますが、Apple のディバイスしか使えられませんでした。 2 | 今から、AirMessage で改めてメッセージや画像やビデオを友達や家族に送れます! 3 | 4 | - iMessage でメッセージを送受します 5 | - グループ会話で一緒に話します 6 | - 画像やビデオやドキュメントを共有します 7 | - 綺麗な経験です 8 | 9 | Android 版 AirMessage の F-Droid リリースでは、Google とのサインインや位置情報の添付など、通常のリリースに含まれる一部の機能が除外されています。 10 | 11 | (Mac コンピュータが必要であることに注意してください。) 12 | -------------------------------------------------------------------------------- /metadata/android/ja-JP/short_description.txt: -------------------------------------------------------------------------------- 1 | iMessage を Android 携帯で利用します!(Mac コンピューターが必要です) 2 | -------------------------------------------------------------------------------- /metadata/android/ja-JP/title.txt: -------------------------------------------------------------------------------- 1 | AirMessage 2 | -------------------------------------------------------------------------------- /secrets.default.properties: -------------------------------------------------------------------------------- 1 | MAPS_API_KEY=AIzaSyC_nkyGjm9aBJig5dS5Qv-ljrSv5j1Zb7Q 2 | CONNECT_ENDPOINT=wss://connect-open.airmessage.org -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | include ":android-smsmms" 4 | project(":android-smsmms").projectDir = file("lib/android-smsmms/library") -------------------------------------------------------------------------------- /signingshared/shared.keystore.disabled: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/airmessage/airmessage-android/0758ea0273f942881fd8de605aa349b40a1c404c/signingshared/shared.keystore.disabled --------------------------------------------------------------------------------